summaryrefslogtreecommitdiff
authorRongjun Chen <rongjun.chen@amlogic.com>2016-11-07 06:33:17 (GMT)
committer Rongjun Chen <rongjun.chen@amlogic.com>2016-11-07 09:37:51 (GMT)
commit0c20acb18001f9e9b382885eddfc1ea2332123a8 (patch)
treef514be93b9053efad38426e65b7b7a061b3838d1
parentb5a76651685d6e51c5545c9ee4e819e91ad63f91 (diff)
download8188ftv-p-tv-atom.zip
8188ftv-p-tv-atom.tar.gz
8188ftv-p-tv-atom.tar.bz2
wifi: update rtl8188ftv driver to v4.3.23.4_19019.20160811
Change-Id: I0787b77d3ac571fed2005e8e7cec3b5f647fb859
Diffstat
-rwxr-xr-xrtl8188FU/Makefile55
-rwxr-xr-xrtl8188FU/core/efuse/rtw_efuse.c34
-rwxr-xr-xrtl8188FU/core/rtw_ap.c93
-rwxr-xr-xrtl8188FU/core/rtw_cmd.c284
-rwxr-xr-xrtl8188FU/core/rtw_debug.c43
-rwxr-xr-xrtl8188FU/core/rtw_ieee80211.c17
-rwxr-xr-xrtl8188FU/core/rtw_ioctl_set.c26
-rwxr-xr-xrtl8188FU/core/rtw_mlme.c265
-rwxr-xr-xrtl8188FU/core/rtw_mlme_ext.c826
-rwxr-xr-xrtl8188FU/core/rtw_mp.c1140
-rwxr-xr-xrtl8188FU/core/rtw_odm.c12
-rwxr-xr-xrtl8188FU/core/rtw_p2p.c4
-rwxr-xr-xrtl8188FU/core/rtw_pwrctrl.c23
-rwxr-xr-xrtl8188FU/core/rtw_recv.c40
-rwxr-xr-xrtl8188FU/core/rtw_rf.c638
-rwxr-xr-xrtl8188FU/core/rtw_sta_mgt.c16
-rwxr-xr-xrtl8188FU/core/rtw_tdls.c406
-rwxr-xr-xrtl8188FU/core/rtw_vht.c20
-rwxr-xr-xrtl8188FU/core/rtw_wlan_util.c171
-rwxr-xr-xrtl8188FU/core/rtw_xmit.c38
-rwxr-xr-xrtl8188FU/hal/efuse/rtl8188f/HalEfuseMask8188F_USB.c65
-rwxr-xr-xrtl8188FU/hal/hal_btcoex.c8
-rwxr-xr-xrtl8188FU/hal/hal_com.c703
-rwxr-xr-xrtl8188FU/hal/hal_com_c2h.h8
-rwxr-xr-xrtl8188FU/hal/hal_com_phycfg.c241
-rwxr-xr-xrtl8188FU/hal/hal_dm.c4
-rwxr-xr-xrtl8188FU/hal/hal_intf.c62
-rwxr-xr-xrtl8188FU/hal/hal_mp.c409
-rwxr-xr-xrtl8188FU/hal/led/hal_usb_led.c5
-rwxr-xr-xrtl8188FU/hal/phydm/phydm.c8
-rwxr-xr-xrtl8188FU/hal/phydm/phydm_adaptivity.c52
-rwxr-xr-xrtl8188FU/hal/phydm/phydm_adaptivity.h6
-rwxr-xr-xrtl8188FU/hal/phydm/phydm_antdiv.c42
-rwxr-xr-xrtl8188FU/hal/phydm/phydm_antdiv.h2
-rwxr-xr-xrtl8188FU/hal/phydm/phydm_debug.c5
-rwxr-xr-xrtl8188FU/hal/phydm/rtl8188f/halhwimg8188f_bb.c12
-rwxr-xr-xrtl8188FU/hal/phydm/rtl8188f/halhwimg8188f_fw.c6611
-rwxr-xr-xrtl8188FU/hal/phydm/rtl8188f/halhwimg8188f_mac.c2
-rwxr-xr-xrtl8188FU/hal/phydm/rtl8188f/halhwimg8188f_rf.c55
-rwxr-xr-xrtl8188FU/hal/phydm/rtl8188f/halphyrf_8188f.c81
-rwxr-xr-xrtl8188FU/hal/phydm/rtl8188f/version_rtl8188f.h4
-rwxr-xr-xrtl8188FU/hal/rtl8188f/rtl8188f_cmd.c32
-rwxr-xr-xrtl8188FU/hal/rtl8188f/rtl8188f_dm.c10
-rwxr-xr-xrtl8188FU/hal/rtl8188f/rtl8188f_hal_init.c660
-rwxr-xr-xrtl8188FU/hal/rtl8188f/rtl8188f_phycfg.c162
-rwxr-xr-xrtl8188FU/hal/rtl8188f/rtl8188f_rf6052.c45
-rwxr-xr-xrtl8188FU/hal/rtl8188f/usb/rtl8188fu_xmit.c8
-rwxr-xr-xrtl8188FU/hal/rtl8188f/usb/usb_halinit.c113
-rwxr-xr-xrtl8188FU/include/Hal8188EPhyCfg.h4
-rwxr-xr-xrtl8188FU/include/HalVerDef.h6
-rwxr-xr-xrtl8188FU/include/autoconf.h8
-rwxr-xr-xrtl8188FU/include/basic_types.h2
-rwxr-xr-xrtl8188FU/include/drv_conf.h11
-rwxr-xr-xrtl8188FU/include/drv_types.h8
-rwxr-xr-xrtl8188FU/include/hal_com.h60
-rwxr-xr-xrtl8188FU/include/hal_com_h2c.h10
-rwxr-xr-xrtl8188FU/include/hal_com_led.h1
-rwxr-xr-xrtl8188FU/include/hal_com_phycfg.h26
-rwxr-xr-xrtl8188FU/include/hal_data.h19
-rwxr-xr-xrtl8188FU/include/hal_intf.h40
-rwxr-xr-xrtl8188FU/include/hal_pg.h9
-rwxr-xr-xrtl8188FU/include/mlme_osdep.h2
-rwxr-xr-xrtl8188FU/include/osdep_service.h7
-rwxr-xr-xrtl8188FU/include/osdep_service_linux.h4
-rwxr-xr-xrtl8188FU/include/rtl8188e_cmd.h4
-rwxr-xr-xrtl8188FU/include/rtl8188e_dm.h4
-rwxr-xr-xrtl8188FU/include/rtl8188e_hal.h7
-rwxr-xr-xrtl8188FU/include/rtl8188e_spec.h5
-rwxr-xr-xrtl8188FU/include/rtl8188f_cmd.h9
-rwxr-xr-xrtl8188FU/include/rtl8188f_hal.h39
-rwxr-xr-xrtl8188FU/include/rtl8188f_spec.h1
-rwxr-xr-xrtl8188FU/include/rtl8192e_cmd.h13
-rwxr-xr-xrtl8188FU/include/rtl8192e_dm.h4
-rwxr-xr-xrtl8188FU/include/rtl8192e_spec.h1
-rwxr-xr-xrtl8188FU/include/rtl8703b_cmd.h9
-rwxr-xr-xrtl8188FU/include/rtl8703b_spec.h5
-rwxr-xr-xrtl8188FU/include/rtl8723b_cmd.h9
-rwxr-xr-xrtl8188FU/include/rtl8723b_hal.h4
-rwxr-xr-xrtl8188FU/include/rtl8723b_spec.h5
-rwxr-xr-xrtl8188FU/include/rtl8812a_cmd.h11
-rwxr-xr-xrtl8188FU/include/rtl8812a_dm.h4
-rwxr-xr-xrtl8188FU/include/rtl8812a_spec.h1
-rwxr-xr-xrtl8188FU/include/rtl8814a_cmd.h7
-rwxr-xr-xrtl8188FU/include/rtl8814a_dm.h5
-rwxr-xr-xrtl8188FU/include/rtl8814a_spec.h1
-rwxr-xr-xrtl8188FU/include/rtl8821a_spec.h1
-rwxr-xr-xrtl8188FU/include/rtw_cmd.h20
-rwxr-xr-xrtl8188FU/include/rtw_debug.h6
-rwxr-xr-xrtl8188FU/include/rtw_efuse.h6
-rwxr-xr-xrtl8188FU/include/rtw_event.h4
-rwxr-xr-xrtl8188FU/include/rtw_mlme.h7
-rwxr-xr-xrtl8188FU/include/rtw_mlme_ext.h57
-rwxr-xr-xrtl8188FU/include/rtw_mp.h137
-rwxr-xr-xrtl8188FU/include/rtw_odm.h2
-rwxr-xr-xrtl8188FU/include/rtw_recv.h1
-rwxr-xr-xrtl8188FU/include/rtw_rf.h36
-rwxr-xr-xrtl8188FU/include/rtw_tdls.h40
-rwxr-xr-xrtl8188FU/include/rtw_version.h2
-rwxr-xr-xrtl8188FU/include/sta_info.h20
-rwxr-xr-xrtl8188FU/os_dep/linux/ioctl_cfg80211.c104
-rwxr-xr-xrtl8188FU/os_dep/linux/ioctl_cfg80211.h2
-rwxr-xr-xrtl8188FU/os_dep/linux/ioctl_linux.c260
-rwxr-xr-xrtl8188FU/os_dep/linux/ioctl_mp.c329
-rwxr-xr-xrtl8188FU/os_dep/linux/mlme_linux.c4
-rwxr-xr-xrtl8188FU/os_dep/linux/os_intfs.c81
-rwxr-xr-xrtl8188FU/os_dep/linux/rtw_proc.c130
-rwxr-xr-xrtl8188FU/os_dep/linux/usb_intf.c7
-rwxr-xr-xrtl8188FU/os_dep/osdep_service.c54
108 files changed, 9461 insertions, 5780 deletions
diff --git a/rtl8188FU/Makefile b/rtl8188FU/Makefile
index 664b9de..2d3be55 100755
--- a/rtl8188FU/Makefile
+++ b/rtl8188FU/Makefile
@@ -52,7 +52,7 @@ CONFIG_EXT_CLK = n
CONFIG_TRAFFIC_PROTECT = y
CONFIG_LOAD_PHY_PARA_FROM_FILE = y
CONFIG_CALIBRATE_TX_POWER_BY_REGULATORY = n
-CONFIG_CALIBRATE_TX_POWER_TO_MAX = n
+CONFIG_CALIBRATE_TX_POWER_TO_MAX = y
CONFIG_RTW_ADAPTIVITY_EN = disable
CONFIG_RTW_ADAPTIVITY_MODE = normal
CONFIG_SIGNAL_SCALE_MAPPING = n
@@ -72,6 +72,8 @@ CONFIG_PNO_SET_DEBUG = n
CONFIG_AP_WOWLAN = n
######### Notify SDIO Host Keep Power During Syspend ##########
CONFIG_RTW_SDIO_PM_KEEP_POWER = y
+###################### MP HW TX MODE FOR VHT #######################
+CONFIG_MP_VHT_HW_TX_MODE = n
###################### Platform Related #######################
CONFIG_PLATFORM_I386_PC = y
CONFIG_PLATFORM_ANDROID_X86 = n
@@ -95,6 +97,7 @@ CONFIG_PLATFORM_TEGRA4_DALMORE = n
CONFIG_PLATFORM_ARM_TCC8900 = n
CONFIG_PLATFORM_ARM_TCC8920 = n
CONFIG_PLATFORM_ARM_TCC8920_JB42 = n
+CONFIG_PLATFORM_ARM_TCC8930_JB42 = n
CONFIG_PLATFORM_ARM_RK2818 = n
CONFIG_PLATFORM_ARM_RK3066 = n
CONFIG_PLATFORM_ARM_RK3188 = n
@@ -524,7 +527,10 @@ endif
########### HAL_RTL8814A #################################
ifeq ($(CONFIG_RTL8814A), y)
-
+## ADD NEW VHT MP HW TX MODE ##
+EXTRA_CFLAGS += -DCONFIG_MP_VHT_HW_TX_MODE
+CONFIG_MP_VHT_HW_TX_MODE = y
+##########################################
RTL871X = rtl8814a
ifeq ($(CONFIG_USB_HCI), y)
MODULE_NAME = 8814au
@@ -586,7 +592,6 @@ _OUTSRC_FILES += hal/phydm/$(RTL871X)/halhwimg8814a_bb.o\
endif
-
########### HAL_RTL8723C #################################
ifeq ($(CONFIG_RTL8723C), y)
@@ -797,6 +802,7 @@ endif
ifeq ($(CONFIG_LOAD_PHY_PARA_FROM_FILE), y)
EXTRA_CFLAGS += -DCONFIG_LOAD_PHY_PARA_FROM_FILE
+#EXTRA_CFLAGS += -DREALTEK_CONFIG_PATH_WITH_IC_NAME_FOLDER
#EXTRA_CFLAGS += -DREALTEK_CONFIG_PATH=\"/lib/firmware/\"
EXTRA_CFLAGS += -DREALTEK_CONFIG_PATH=\"\"
endif
@@ -891,6 +897,17 @@ ifeq ($(CONFIG_WIFI_MONITOR), y)
EXTRA_CFLAGS += -DCONFIG_WIFI_MONITOR
endif
+ifeq ($(CONFIG_MP_VHT_HW_TX_MODE), y)
+EXTRA_CFLAGS += -DCONFIG_MP_VHT_HW_TX_MODE
+ifeq ($(CONFIG_PLATFORM_I386_PC), y)
+## For I386 X86 ToolChain use Hardware FLOATING
+EXTRA_CFLAGS += -mhard-float
+else
+## For ARM ToolChain use Hardware FLOATING
+EXTRA_CFLAGS += -mfloat-abi=hard
+endif
+endif
+
EXTRA_CFLAGS += -DDM_ODM_SUPPORT_TYPE=0x04
ifeq ($(CONFIG_PLATFORM_I386_PC), y)
@@ -925,7 +942,6 @@ EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN
EXTRA_CFLAGS += -DCONFIG_PLATFORM_ACTIONS_ATM705X
EXTRA_CFLAGS += -DCONFIG_CONCURRENT_MODE
EXTRA_CFLAGS += -DCONFIG_IOCTL_CFG80211 -DRTW_USE_CFG80211_STA_EVENT
-EXTRA_CFLAGS += -DCONFIG_P2P_IPS
# Enable this for Android 5.0
EXTRA_CFLAGS += -DCONFIG_RADIO_WORK
@@ -947,7 +963,6 @@ EXTRA_CFLAGS += -DCONFIG_TRAFFIC_PROTECT
# default setting for Android 4.1, 4.2
EXTRA_CFLAGS += -DCONFIG_CONCURRENT_MODE
EXTRA_CFLAGS += -DCONFIG_IOCTL_CFG80211 -DRTW_USE_CFG80211_STA_EVENT
-EXTRA_CFLAGS += -DCONFIG_P2P_IPS
EXTRA_CFLAGS += -DCONFIG_RESUME_IN_WORKQUEUE
EXTRA_CFLAGS += -DCONFIG_PLATFORM_OPS
@@ -1009,7 +1024,6 @@ EXTRA_CFLAGS += -DCONFIG_PLATFORM_INTEL_BYT
EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN -DCONFIG_PLATFORM_ANDROID
EXTRA_CFLAGS += -DCONFIG_CONCURRENT_MODE
EXTRA_CFLAGS += -DCONFIG_IOCTL_CFG80211 -DRTW_USE_CFG80211_STA_EVENT
-EXTRA_CFLAGS += -DCONFIG_P2P_IPS
EXTRA_CFLAGS += -DCONFIG_SKIP_SIGNAL_SCALE_MAPPING
ifeq ($(CONFIG_SDIO_HCI), y)
EXTRA_CFLAGS += -DCONFIG_RESUME_IN_WORKQUEUE
@@ -1020,7 +1034,6 @@ ifeq ($(CONFIG_PLATFORM_JB_X86), y)
EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN
EXTRA_CFLAGS += -DCONFIG_CONCURRENT_MODE
EXTRA_CFLAGS += -DCONFIG_IOCTL_CFG80211 -DRTW_USE_CFG80211_STA_EVENT
-EXTRA_CFLAGS += -DCONFIG_P2P_IPS
SUBARCH := $(shell uname -m | sed -e s/i.86/i386/)
ARCH := $(SUBARCH)
CROSS_COMPILE := /home/android_sdk/android-x86_JB/prebuilts/gcc/linux-x86/x86/i686-linux-android-4.7/bin/i686-linux-android-
@@ -1172,7 +1185,6 @@ EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN
EXTRA_CFLAGS += -DRTW_ENABLE_WIFI_CONTROL_FUNC
EXTRA_CFLAGS += -DCONFIG_CONCURRENT_MODE
EXTRA_CFLAGS += -DCONFIG_IOCTL_CFG80211 -DRTW_USE_CFG80211_STA_EVENT
-EXTRA_CFLAGS += -DCONFIG_P2P_IPS
ARCH := arm
CROSS_COMPILE := /home/android_sdk/nvidia/tegra-16r3-partner-android-4.1_20120723/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin/arm-eabi-
KSRC := /home/android_sdk/nvidia/tegra-16r3-partner-android-4.1_20120723/out/target/product/cardhu/obj/KERNEL
@@ -1185,7 +1197,6 @@ EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN
EXTRA_CFLAGS += -DRTW_ENABLE_WIFI_CONTROL_FUNC
EXTRA_CFLAGS += -DCONFIG_CONCURRENT_MODE
EXTRA_CFLAGS += -DCONFIG_IOCTL_CFG80211 -DRTW_USE_CFG80211_STA_EVENT
-EXTRA_CFLAGS += -DCONFIG_P2P_IPS
ARCH := arm
CROSS_COMPILE := /home/android_sdk/nvidia/tegra-17r9-partner-android-4.2-dalmore_20130131/prebuilts/gcc/linux-x86/arm/arm-eabi-4.6/bin/arm-eabi-
KSRC := /home/android_sdk/nvidia/tegra-17r9-partner-android-4.2-dalmore_20130131/out/target/product/dalmore/obj/KERNEL
@@ -1213,7 +1224,6 @@ EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN
# default setting for Android 4.1, 4.2
EXTRA_CFLAGS += -DCONFIG_CONCURRENT_MODE
EXTRA_CFLAGS += -DCONFIG_IOCTL_CFG80211 -DRTW_USE_CFG80211_STA_EVENT
-EXTRA_CFLAGS += -DCONFIG_P2P_IPS
ARCH := arm
CROSS_COMPILE := /home/android_sdk/Telechips/v13.03_r1-tcc-android-4.2.2_ds_patched/prebuilts/gcc/linux-x86/arm/arm-eabi-4.6/bin/arm-eabi-
KSRC := /home/android_sdk/Telechips/v13.03_r1-tcc-android-4.2.2_ds_patched/kernel
@@ -1237,7 +1247,6 @@ EXTRA_CFLAGS += -DCONFIG_CONCURRENT_MODE
EXTRA_CFLAGS += -DRTW_ENABLE_WIFI_CONTROL_FUNC
EXTRA_CFLAGS += -DRTW_SUPPORT_PLATFORM_SHUTDOWN
# default setting for Special function
-EXTRA_CFLAGS += -DCONFIG_P2P_IPS
ARCH := arm
CROSS_COMPILE := /home/android_sdk/Rockchip/Rk3188/prebuilts/gcc/linux-x86/arm/arm-eabi-4.6/bin/arm-eabi-
KSRC := /home/android_sdk/Rockchip/Rk3188/kernel
@@ -1250,7 +1259,6 @@ EXTRA_CFLAGS += -DRTW_ENABLE_WIFI_CONTROL_FUNC
EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN
EXTRA_CFLAGS += -DCONFIG_CONCURRENT_MODE
EXTRA_CFLAGS += -DCONFIG_IOCTL_CFG80211
-EXTRA_CFLAGS += -DCONFIG_P2P_IPS
ifeq ($(CONFIG_SDIO_HCI), y)
EXTRA_CFLAGS += -DRTW_SUPPORT_PLATFORM_SHUTDOWN
endif
@@ -1312,7 +1320,6 @@ EXTRA_CFLAGS += -DCONFIG_PLATFORM_ARM_SUNxI
# default setting for Android 4.1, 4.2
EXTRA_CFLAGS += -DCONFIG_CONCURRENT_MODE
EXTRA_CFLAGS += -DCONFIG_IOCTL_CFG80211 -DRTW_USE_CFG80211_STA_EVENT
-EXTRA_CFLAGS += -DDCONFIG_P2P_IPS
EXTRA_CFLAGS += -DCONFIG_PLATFORM_OPS
ifeq ($(CONFIG_USB_HCI), y)
@@ -1340,7 +1347,7 @@ EXTRA_CFLAGS += -DCONFIG_TRAFFIC_PROTECT
# default setting for Android 4.1, 4.2, 4.3, 4.4
EXTRA_CFLAGS += -DCONFIG_CONCURRENT_MODE
EXTRA_CFLAGS += -DCONFIG_IOCTL_CFG80211 -DRTW_USE_CFG80211_STA_EVENT
-EXTRA_CFLAGS += -DCONFIG_P2P_IPS -DCONFIG_QOS_OPTIMIZATION
+EXTRA_CFLAGS += -DCONFIG_QOS_OPTIMIZATION
EXTRA_CFLAGS += -DCONFIG_PLATFORM_OPS
ifeq ($(CONFIG_USB_HCI), y)
@@ -1372,7 +1379,7 @@ EXTRA_CFLAGS += -DCONFIG_TRAFFIC_PROTECT
# default setting for Android 4.1, 4.2, 4.3, 4.4
EXTRA_CFLAGS += -DCONFIG_CONCURRENT_MODE
EXTRA_CFLAGS += -DCONFIG_IOCTL_CFG80211 -DRTW_USE_CFG80211_STA_EVENT
-EXTRA_CFLAGS += -DCONFIG_P2P_IPS -DCONFIG_QOS_OPTIMIZATION
+EXTRA_CFLAGS += -DCONFIG_QOS_OPTIMIZATION
EXTRA_CFLAGS += -DCONFIG_PLATFORM_OPS
ifeq ($(CONFIG_USB_HCI), y)
@@ -1403,7 +1410,6 @@ EXTRA_CFLAGS += -DCONFIG_TRAFFIC_PROTECT
# default setting for Android 4.1, 4.2
EXTRA_CFLAGS += -DCONFIG_CONCURRENT_MODE
EXTRA_CFLAGS += -DCONFIG_IOCTL_CFG80211 -DRTW_USE_CFG80211_STA_EVENT
-EXTRA_CFLAGS += -DCONFIG_P2P_IPS
EXTRA_CFLAGS += -DCONFIG_PLATFORM_OPS
ifeq ($(CONFIG_USB_HCI), y)
@@ -1431,7 +1437,6 @@ EXTRA_CFLAGS += -DCONFIG_TRAFFIC_PROTECT
# default setting for Android 4.1, 4.2
EXTRA_CFLAGS += -DCONFIG_CONCURRENT_MODE
EXTRA_CFLAGS += -DCONFIG_IOCTL_CFG80211 -DRTW_USE_CFG80211_STA_EVENT
-EXTRA_CFLAGS += -DCONFIG_P2P_IPS
# Enable this for Android 5.0
EXTRA_CFLAGS += -DCONFIG_RADIO_WORK
@@ -1464,7 +1469,6 @@ ifeq ($(CONFIG_PLATFORM_ARM_RTD299X), y)
EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN
EXTRA_CFLAGS += -DUSB_XMITBUF_ALIGN_SZ=1024 -DUSB_PACKET_OFFSET_SZ=0
EXTRA_CFLAGS += -DCONFIG_CONCURRENT_MODE
-EXTRA_CFLAGS += -DCONFIG_P2P_IPS
ifeq ($(CONFIG_ANDROID), y)
EXTRA_CFLAGS += -DCONFIG_IOCTL_CFG80211 -DRTW_USE_CFG80211_STA_EVENT
# Enable this for Android 5.0
@@ -1480,7 +1484,6 @@ ifeq ($(SUPPORT_CONCURRENT),y)
EXTRA_CFLAGS += -DCONFIG_CONCURRENT_MODE
endif
EXTRA_CFLAGS += -DCONFIG_IOCTL_CFG80211 -DRTW_USE_CFG80211_STA_EVENT
-EXTRA_CFLAGS += -DCONFIG_P2P_IPS
ARCH := arm
ifeq ($(CROSS_COMPILE),)
CROSS_COMPILE = arm-hisiv200-linux-
@@ -1545,7 +1548,7 @@ EXTRA_CFLAGS += -DCONFIG_TRAFFIC_PROTECT
# default setting for Android 4.1, 4.2
EXTRA_CFLAGS += -DCONFIG_CONCURRENT_MODE
EXTRA_CFLAGS += -DCONFIG_IOCTL_CFG80211 -DRTW_USE_CFG80211_STA_EVENT
-#EXTRA_CFLAGS += -DCONFIG_P2P_IPS -DCONFIG_QOS_OPTIMIZATION
+#EXTRA_CFLAGS += -DCONFIG_QOS_OPTIMIZATION
EXTRA_CFLAGS += -DCONFIG_QOS_OPTIMIZATION
#EXTRA_CFLAGS += -DCONFIG_#PLATFORM_OPS
@@ -1574,7 +1577,6 @@ EXTRA_CFLAGS += -DCONFIG_PLATFORM_NOVATEK_NT72668
EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN
EXTRA_CFLAGS += -DCONFIG_CONCURRENT_MODE
EXTRA_CFLAGS += -DCONFIG_IOCTL_CFG80211 -DRTW_USE_CFG80211_STA_EVENT
-EXTRA_CFLAGS += -DDCONFIG_P2P_IPS
EXTRA_CFLAGS += -DCONFIG_USE_USB_BUFFER_ALLOC_RX
EXTRA_CFLAGS += -DCONFIG_USE_USB_BUFFER_ALLOC_TX
ARCH ?= arm
@@ -1584,6 +1586,17 @@ KSRC := /Custom/Novatek/TCL/linux-3.8_header
#KSRC := $(KERNELDIR)
endif
+ifeq ($(CONFIG_PLATFORM_ARM_TCC8930_JB42), y)
+EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN
+# default setting for Android 4.1, 4.2
+EXTRA_CFLAGS += -DCONFIG_CONCURRENT_MODE
+EXTRA_CFLAGS += -DCONFIG_IOCTL_CFG80211 -DRTW_USE_CFG80211_STA_EVENT
+ARCH := arm
+CROSS_COMPILE := /home/android_sdk/Telechips/v13.05_r1-tcc-android-4.2.2_tcc893x-evm_build/prebuilts/gcc/linux-x86/arm/arm-eabi-4.6/bin/arm-eabi-
+KSRC := /home/android_sdk/Telechips/v13.05_r1-tcc-android-4.2.2_tcc893x-evm_build/kernel
+MODULE_NAME := wlan
+endif
+
ifeq ($(CONFIG_MULTIDRV), y)
ifeq ($(CONFIG_SDIO_HCI), y)
diff --git a/rtl8188FU/core/efuse/rtw_efuse.c b/rtl8188FU/core/efuse/rtw_efuse.c
index dbbef44..b301724 100755
--- a/rtl8188FU/core/efuse/rtw_efuse.c
+++ b/rtl8188FU/core/efuse/rtw_efuse.c
@@ -512,7 +512,8 @@ efuse_OneByteWrite(
return bResult;
}
-
+ Efuse_PowerSwitch(pAdapter, _TRUE, _TRUE);
+
// -----------------e-fuse reg ctrl ---------------------------------
//address
@@ -563,6 +564,8 @@ efuse_OneByteWrite(
PHY_SetMacReg(pAdapter, EFUSE_TEST, BIT(11), 0);
}
+ Efuse_PowerSwitch(pAdapter, _TRUE, _FALSE);
+
return bResult;
}
@@ -736,6 +739,24 @@ u8 efuse_GetCurrentSize(PADAPTER padapter, u16 *size)
return _SUCCESS;
}
//------------------------------------------------------------------------------
+u16 efuse_bt_GetMaxSize(PADAPTER padapter)
+{
+ u16 max_size;
+
+ max_size = 0;
+ EFUSE_GetEfuseDefinition(padapter, EFUSE_BT , TYPE_AVAILABLE_EFUSE_BYTES_TOTAL, (PVOID)&max_size, _FALSE);
+ return max_size;
+}
+
+u8 efuse_bt_GetCurrentSize(PADAPTER padapter, u16 *size)
+{
+ Efuse_PowerSwitch(padapter, _FALSE, _TRUE);
+ *size = Efuse_GetCurrentSize(padapter, EFUSE_BT, _FALSE);
+ Efuse_PowerSwitch(padapter, _FALSE, _FALSE);
+
+ return _SUCCESS;
+}
+
u8 rtw_efuse_map_read(PADAPTER padapter, u16 addr, u16 cnts, u8 *data)
{
u16 mapLen=0;
@@ -983,7 +1004,7 @@ u8 rtw_efuse_map_write(PADAPTER padapter, u16 addr, u16 cnts, u8 *data)
DBG_8192C("%s , data[%d] = %x, map[addr+i]= %x\n", __func__, i, data[i], map[addr+i]);
}
}
- Efuse_PowerSwitch(padapter, _TRUE, _TRUE);
+ /*Efuse_PowerSwitch(padapter, _TRUE, _TRUE);*/
idx = 0;
offset = (addr >> 3);
@@ -1029,7 +1050,7 @@ u8 rtw_efuse_map_write(PADAPTER padapter, u16 addr, u16 cnts, u8 *data)
offset++;
}
- Efuse_PowerSwitch(padapter, _TRUE, _FALSE);
+ /*Efuse_PowerSwitch(padapter, _TRUE, _FALSE);*/
exit:
@@ -1492,6 +1513,13 @@ const u8 _mac_hidden_max_bw_to_hal_bw_cap[MAC_HIDDEN_MAX_BW_NUM] = {
(BW_CAP_80M|BW_CAP_40M|BW_CAP_20M|BW_CAP_10M|BW_CAP_5M),
};
+const u8 _mac_hidden_proto_to_hal_proto_cap[MAC_HIDDEN_PROTOCOL_NUM] = {
+ 0,
+ 0,
+ (PROTO_CAP_11N|PROTO_CAP_11G|PROTO_CAP_11B),
+ (PROTO_CAP_11AC|PROTO_CAP_11N|PROTO_CAP_11G|PROTO_CAP_11B),
+};
+
u8 mac_hidden_wl_func_to_hal_wl_func(u8 func)
{
u8 wl_func = 0;
diff --git a/rtl8188FU/core/rtw_ap.c b/rtl8188FU/core/rtw_ap.c
index 172b635..e67e46b 100755
--- a/rtl8188FU/core/rtw_ap.c
+++ b/rtl8188FU/core/rtw_ap.c
@@ -861,17 +861,12 @@ void update_bmc_sta(_adapter *padapter)
int supportRateNum = 0;
u64 tx_ra_bitmap = 0;
struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
- struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
- struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
WLAN_BSSID_EX *pcur_network = (WLAN_BSSID_EX *)&pmlmepriv->cur_network.network;
struct sta_info *psta = rtw_get_bcmc_stainfo(padapter);
if(psta)
{
psta->aid = 0;//default set to 0
-
- pmlmeinfo->FW_sta_info[psta->mac_id].psta = psta;
-
psta->qos_option = 0;
#ifdef CONFIG_80211N_HT
psta->htpriv.ht_option = _FALSE;
@@ -903,9 +898,6 @@ void update_bmc_sta(_adapter *padapter)
psta->raid = rtw_hal_networktype_to_raid(padapter,psta);
- //ap mode
- rtw_hal_set_odm_var(padapter, HAL_ODM_STA_INFO, psta, _TRUE);
-
//if(pHalData->fw_ractrl == _TRUE)
{
u8 arg[4] = {0};
@@ -2147,16 +2139,15 @@ int rtw_check_beacon_data(_adapter *padapter, u8 *pbuf, int len)
pmlmepriv->vhtpriv.vht_option = _FALSE;
// if channel in 5G band, then add vht ie .
- if ((pbss_network->Configuration.DSConfig > 14) &&
- (pmlmepriv->htpriv.ht_option == _TRUE) &&
- (pregistrypriv->vht_enable))
- {
- if(vht_cap == _TRUE)
- {
+ if ((pbss_network->Configuration.DSConfig > 14)
+ && (pmlmepriv->htpriv.ht_option == _TRUE)
+ && REGSTY_IS_11AC_ENABLE(pregistrypriv)
+ && hal_chk_proto_cap(padapter, PROTO_CAP_11AC)
+ && (!pmlmepriv->country_ent || COUNTRY_CHPLAN_EN_11AC(pmlmepriv->country_ent))
+ ) {
+ if (vht_cap == _TRUE)
pmlmepriv->vhtpriv.vht_option = _TRUE;
- }
- else if(pregistrypriv->vht_enable == 2) // auto enabled
- {
+ else if (REGSTY_IS_11AC_AUTO(pregistrypriv)) {
u8 cap_len, operation_len;
rtw_vht_use_default_setting(padapter);
@@ -2184,7 +2175,16 @@ int rtw_check_beacon_data(_adapter *padapter, u8 *pbuf, int len)
}
#endif //CONFIG_80211AC_VHT
- pbss_network->Length = get_WLAN_BSSID_EX_sz((WLAN_BSSID_EX *)pbss_network);
+ if(pbss_network->Configuration.DSConfig <= 14 && padapter->registrypriv.wifi_spec == 1) {
+ uint len = 0;
+
+ SET_EXT_CAPABILITY_ELE_BSS_COEXIST(pmlmepriv->ext_capab_ie_data, 1);
+ pmlmepriv->ext_capab_ie_len = 10;
+ rtw_set_ie(pbss_network->IEs + pbss_network->IELength, EID_EXTCapability, 8, pmlmepriv->ext_capab_ie_data, &len);
+ pbss_network->IELength += pmlmepriv->ext_capab_ie_len;
+ }
+
+ pbss_network->Length = get_WLAN_BSSID_EX_sz((WLAN_BSSID_EX *)pbss_network);
rtw_ies_get_chbw(pbss_network->IEs + _BEACON_IE_OFFSET_, pbss_network->IELength - _BEACON_IE_OFFSET_
, &pmlmepriv->ori_ch, &pmlmepriv->ori_bw, &pmlmepriv->ori_offset);
@@ -3376,39 +3376,7 @@ void bss_cap_update_on_sta_join(_adapter *padapter, struct sta_info *psta)
}
- if (ht_capab & RTW_IEEE80211_HT_CAP_40MHZ_INTOLERANT) {
-
- if (!psta->ht_40mhz_intolerant) {
- psta->ht_40mhz_intolerant = 1;
- pmlmepriv->num_sta_40mhz_intolerant++;
- DBG_871X("%s STA " MAC_FMT " - HT_CAP_40MHZ_INTOLERANT is set\n" ,
- __FUNCTION__, MAC_ARG(psta->hwaddr));
- beacon_updated = _TRUE;
- }
-
-/*
- if (pmlmepriv->ht_40mhz_intolerant == _FALSE) {
-
- pmlmepriv->ht_40mhz_intolerant = _TRUE;
-
- DBG_871X("%s STA " MAC_FMT " - HT_CAP_40MHZ_INTOLERANT is set\n" ,
- __FUNCTION__, MAC_ARG(psta->hwaddr));
-
- beacon_updated = _TRUE;
- }
-*/
-
- /*update ext_capab_ie_len & ext_capab_ie_data for beacon, probersp, assocrsp.*/
- if (pmlmepriv->ext_capab_ie_len == 0)
- pmlmepriv->ext_capab_ie_len = 1;
- SET_EXT_CAPABILITY_ELE_BSS_COEXIST(pmlmepriv->ext_capab_ie_data, 1);
-
- update_beacon(padapter, _EXT_CAP_IE_, NULL, _FALSE);
- }
-
- }
- else
- {
+ } else {
if (!psta->no_ht_set) {
psta->no_ht_set = 1;
pmlmepriv->num_sta_no_ht++;
@@ -3494,21 +3462,8 @@ u8 bss_cap_update_on_sta_leave(_adapter *padapter, struct sta_info *psta)
pmlmepriv->num_sta_ht_20mhz--;
}
- if (psta->ht_40mhz_intolerant) {
- psta->ht_40mhz_intolerant = 0;
- pmlmepriv->num_sta_40mhz_intolerant--;
- /*update ext_capab_ie_len & ext_capab_ie_data for beacon, probersp, assocrsp.*/
- if ((pmlmepriv->ext_capab_ie_len > 0) && (pmlmepriv->num_sta_40mhz_intolerant == 0)) {
- SET_EXT_CAPABILITY_ELE_BSS_COEXIST(pmlmepriv->ext_capab_ie_data, 0);
- update_beacon(padapter, _EXT_CAP_IE_, NULL, _FALSE);
- }
- beacon_updated = _TRUE;
-
- update_beacon(padapter, _HT_ADD_INFO_IE_, NULL, _FALSE);
- }
-
if (rtw_ht_operation_update(padapter) > 0) {
update_beacon(padapter, _HT_CAPABILITY_IE_, NULL, _FALSE);
update_beacon(padapter, _HT_ADD_INFO_IE_, NULL, _TRUE);
@@ -3581,7 +3536,7 @@ u8 ap_free_sta(_adapter *padapter, struct sta_info *psta, bool active, u16 reaso
rtw_indicate_sta_disassoc_event(padapter, psta);
}
- report_del_sta_event(padapter, psta->hwaddr, reason, enqueue);
+ report_del_sta_event(padapter, psta->hwaddr, reason, enqueue, _FALSE);
beacon_updated = bss_cap_update_on_sta_leave(padapter, psta);
@@ -3743,13 +3698,7 @@ void sta_info_update(_adapter *padapter, struct sta_info *psta)
/* called >= TSR LEVEL for USB or SDIO Interface*/
void ap_sta_info_defer_update(_adapter *padapter, struct sta_info *psta)
{
- struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
- struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
-
- if(psta->state & _FW_LINKED)
- {
- pmlmeinfo->FW_sta_info[psta->mac_id].psta = psta;
-
+ if (psta->state & _FW_LINKED) {
//add ratid
add_RATid(padapter, psta, 0);//DM_RATR_STA_INIT
}
diff --git a/rtl8188FU/core/rtw_cmd.c b/rtl8188FU/core/rtw_cmd.c
index bf5679c..b33ec07 100755
--- a/rtl8188FU/core/rtw_cmd.c
+++ b/rtl8188FU/core/rtw_cmd.c
@@ -227,10 +227,6 @@ _func_enter_;
if (obj == NULL)
goto exit;
- if(obj->cmdsz > MAX_CMDSZ ){
- DBG_871X("%s failed due to obj->cmdsz(%d) > MAX_CMDSZ(%d) \n",__FUNCTION__, obj->cmdsz,MAX_CMDSZ);
- goto exit;
- }
//_enter_critical_bh(&queue->lock, &irqL);
_enter_critical(&queue->lock, &irqL);
@@ -459,7 +455,19 @@ _func_enter_;
pcmdpriv = &(padapter->pbuddy_adapter->cmdpriv);
#endif
- if( _FAIL == (res=rtw_cmd_filter(pcmdpriv, cmd_obj)) ) {
+ res = rtw_cmd_filter(pcmdpriv, cmd_obj);
+ if ((_FAIL == res) || (cmd_obj->cmdsz > MAX_CMDSZ)) {
+ if (cmd_obj->cmdsz > MAX_CMDSZ) {
+ DBG_871X("%s failed due to obj->cmdsz(%d) > MAX_CMDSZ(%d)\n", __func__, cmd_obj->cmdsz, MAX_CMDSZ);
+ rtw_warn_on(1);
+ }
+
+ if (cmd_obj->cmdcode == GEN_CMD_CODE(_Set_Drv_Extra)) {
+ struct drvextra_cmd_parm *extra_parm = (struct drvextra_cmd_parm *)cmd_obj->parmbuf;
+
+ if (extra_parm->pbuf && extra_parm->size > 0)
+ rtw_mfree(extra_parm->pbuf, extra_parm->size);
+ }
rtw_free_cmd_obj(cmd_obj);
goto exit;
}
@@ -722,6 +730,9 @@ post_process:
rtw_unregister_cmd_alive(padapter);
#endif
+ /* to avoid enqueue cmd after free all cmd_obj */
+ ATOMIC_SET(&(pcmdpriv->cmdthd_running), _FALSE);
+
/* free all cmd_obj resources */
do {
pcmd = rtw_dequeue_cmd(pcmdpriv);
@@ -742,7 +753,6 @@ post_process:
} while (1);
_rtw_up_sema(&pcmdpriv->terminate_cmdthread_sema);
- ATOMIC_SET(&(pcmdpriv->cmdthd_running), _FALSE);
_func_exit_;
@@ -1546,7 +1556,11 @@ _func_enter_;
#ifdef CONFIG_80211AC_VHT
pvhtpriv->vht_option = _FALSE;
- if (phtpriv->ht_option && pregistrypriv->vht_enable) {
+ if (phtpriv->ht_option
+ && REGSTY_IS_11AC_ENABLE(pregistrypriv)
+ && hal_chk_proto_cap(padapter, PROTO_CAP_11AC)
+ && (!pmlmepriv->country_ent || COUNTRY_CHPLAN_EN_11AC(pmlmepriv->country_ent))
+ ) {
rtw_restructure_vht_ie(padapter, &pnetwork->network.IEs[0], &psecnetwork->IEs[0],
pnetwork->network.IELength, &psecnetwork->IELength);
}
@@ -1982,6 +1996,46 @@ _func_exit_;
return res;
}
+
+u8 rtw_addbarsp_cmd(_adapter *padapter, u8 *addr, u16 tid, u8 status, u8 size, u16 start_seq)
+{
+ struct cmd_priv *pcmdpriv = &padapter->cmdpriv;
+ struct cmd_obj *ph2c;
+ struct addBaRsp_parm *paddBaRsp_parm;
+ u8 res = _SUCCESS;
+
+_func_enter_;
+
+ ph2c = (struct cmd_obj *)rtw_zmalloc(sizeof(struct cmd_obj));
+ if (ph2c == NULL) {
+ res = _FAIL;
+ goto exit;
+ }
+
+ paddBaRsp_parm = (struct addBaRsp_parm *)rtw_zmalloc(sizeof(struct addBaRsp_parm));
+
+ if (paddBaRsp_parm == NULL) {
+ rtw_mfree((unsigned char *)ph2c, sizeof(struct cmd_obj));
+ res = _FAIL;
+ goto exit;
+ }
+
+ _rtw_memcpy(paddBaRsp_parm->addr, addr, ETH_ALEN);
+ paddBaRsp_parm->tid = tid;
+ paddBaRsp_parm->status = status;
+ paddBaRsp_parm->size = size;
+ paddBaRsp_parm->start_seq = start_seq;
+
+ init_h2fwcmd_w_parm_no_rsp(ph2c, paddBaRsp_parm, GEN_CMD_CODE(_AddBARsp));
+
+ res = rtw_enqueue_cmd(pcmdpriv, ph2c);
+
+exit:
+
+_func_exit_;
+
+ return res;
+}
//add for CONFIG_IEEE80211W, none 11w can use it
u8 rtw_reset_securitypriv_cmd(_adapter*padapter)
{
@@ -2168,7 +2222,7 @@ _func_exit_;
return res;
}
-u8 rtw_set_chplan_cmd(_adapter *adapter, int flags, u8 chplan, u8 swconfig)
+u8 _rtw_set_chplan_cmd(_adapter *adapter, int flags, u8 chplan, const struct country_chplan *country_ent, u8 swconfig)
{
struct cmd_obj *cmdobj;
struct SetChannelPlan_param *parm;
@@ -2185,23 +2239,23 @@ _func_enter_;
goto exit;
}
+ /* if country_entry is provided, replace chplan */
+ if (country_ent)
+ chplan = country_ent->chplan;
+
/* check input parameter */
if (!rtw_is_channel_plan_valid(chplan)) {
res = _FAIL;
goto exit;
}
- if (rtw_chplan_is_empty(chplan) == _TRUE) {
- res = _FAIL;
- goto exit;
- }
-
/* prepare cmd parameter */
parm = (struct SetChannelPlan_param *)rtw_zmalloc(sizeof(*parm));
if (parm == NULL) {
res = _FAIL;
goto exit;
}
+ parm->country_ent = country_ent;
parm->channel_plan = chplan;
if (flags & RTW_CMDF_DIRECTLY) {
@@ -2243,6 +2297,34 @@ _func_exit_;
return res;
}
+inline u8 rtw_set_chplan_cmd(_adapter *adapter, int flags, u8 chplan, u8 swconfig)
+{
+ return _rtw_set_chplan_cmd(adapter, flags, chplan, NULL, swconfig);
+}
+
+inline u8 rtw_set_country_cmd(_adapter *adapter, int flags, const char *country_code, u8 swconfig)
+{
+ const struct country_chplan *ent;
+
+ if (is_alpha(country_code[0]) == _FALSE
+ || is_alpha(country_code[1]) == _FALSE
+ ) {
+ DBG_871X_LEVEL(_drv_always_, "%s input country_code is not alpha2\n", __func__);
+ return _FAIL;
+ }
+
+ ent = rtw_get_chplan_from_country(country_code);
+
+ if (ent == NULL) {
+ DBG_871X_LEVEL(_drv_always_, "%s unsupported country_code:\"%c%c\"\n", __func__, country_code[0], country_code[1]);
+ return _FAIL;
+ }
+
+ DBG_871X_LEVEL(_drv_always_, "%s country_code:\"%c%c\" mapping to chplan:0x%02x\n", __func__, country_code[0], country_code[1], ent->chplan);
+
+ return _rtw_set_chplan_cmd(adapter, flags, RTW_CHPLAN_MAX, ent, swconfig);
+}
+
u8 rtw_led_blink_cmd(_adapter*padapter, PVOID pLed)
{
struct cmd_obj* pcmdobj;
@@ -2318,7 +2400,7 @@ _func_exit_;
return res;
}
-u8 rtw_tdls_cmd(_adapter *padapter, u8 *addr, u8 option)
+u8 rtw_tdls_cmd(_adapter *padapter, const u8 *addr, u8 option)
{
struct cmd_obj* pcmdobj;
struct TDLSoption_param *TDLSoption;
@@ -3049,7 +3131,7 @@ _func_exit_;
#ifdef CONFIG_ANTENNA_DIVERSITY
void antenna_select_wk_hdl(_adapter *padapter, u8 antenna)
{
- rtw_hal_set_hwreg(padapter, HW_VAR_ANTENNA_DIVERSITY_SELECT, (u8 *)(&antenna));
+ rtw_hal_set_odm_var(padapter, HAL_ODM_ANTDIV_SELECT, &antenna, _TRUE);
}
u8 rtw_antenna_select_cmd(_adapter*padapter, u8 antenna,u8 enqueue)
@@ -3057,12 +3139,20 @@ u8 rtw_antenna_select_cmd(_adapter*padapter, u8 antenna,u8 enqueue)
struct cmd_obj *ph2c;
struct drvextra_cmd_parm *pdrvextra_cmd_parm;
struct cmd_priv *pcmdpriv = &padapter->cmdpriv;
+ struct dvobj_priv *dvobj = adapter_to_dvobj(padapter);
u8 bSupportAntDiv = _FALSE;
u8 res = _SUCCESS;
+ int i;
_func_enter_;
rtw_hal_get_def_var(padapter, HAL_DEF_IS_SUPPORT_ANT_DIV, &(bSupportAntDiv));
- if(_FALSE == bSupportAntDiv ) return res;
+ if (_FALSE == bSupportAntDiv)
+ return _FAIL;
+
+ for (i = 0; i < dvobj->iface_nums; i++) {
+ if (rtw_linked_check(dvobj->padapters[i]))
+ return _FAIL;
+ }
if(_TRUE == enqueue)
{
@@ -3753,6 +3843,7 @@ u8 rtw_c2h_packet_wk_cmd(PADAPTER padapter, u8 *pbuf, u16 length)
struct cmd_obj *ph2c;
struct drvextra_cmd_parm *pdrvextra_cmd_parm;
struct cmd_priv *pcmdpriv = &padapter->cmdpriv;
+ u8 *extra_cmd_buf;
u8 res = _SUCCESS;
ph2c = (struct cmd_obj*)rtw_zmalloc(sizeof(struct cmd_obj));
@@ -3768,10 +3859,19 @@ u8 rtw_c2h_packet_wk_cmd(PADAPTER padapter, u8 *pbuf, u16 length)
goto exit;
}
+ extra_cmd_buf = rtw_zmalloc(length);
+ if (extra_cmd_buf == NULL) {
+ rtw_mfree((u8 *)ph2c, sizeof(struct cmd_obj));
+ rtw_mfree((u8 *)pdrvextra_cmd_parm, sizeof(struct drvextra_cmd_parm));
+ res = _FAIL;
+ goto exit;
+ }
+
+ _rtw_memcpy(extra_cmd_buf, pbuf, length);
pdrvextra_cmd_parm->ec_id = C2H_WK_CID;
pdrvextra_cmd_parm->type = 0;
pdrvextra_cmd_parm->size = length;
- pdrvextra_cmd_parm->pbuf = pbuf;
+ pdrvextra_cmd_parm->pbuf = extra_cmd_buf;
init_h2fwcmd_w_parm_no_rsp(ph2c, pdrvextra_cmd_parm, GEN_CMD_CODE(_Set_Drv_Extra));
@@ -3781,6 +3881,149 @@ exit:
return res;
}
+static s32 rtw_mp_cmd_hdl(_adapter *padapter, u8 mp_cmd_id)
+{
+ HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);
+ int ret = H2C_SUCCESS;
+ u8 rfreg0;
+
+ if (mp_cmd_id == MP_START) {
+ if (padapter->registrypriv.mp_mode == 0) {
+ rtw_hal_deinit(padapter);
+ padapter->registrypriv.mp_mode = 1;
+#ifdef CONFIG_RF_POWER_TRIM
+ if (!IS_HARDWARE_TYPE_8814A(padapter) && !IS_HARDWARE_TYPE_8822B(padapter)) {
+ padapter->registrypriv.RegPwrTrimEnable = 1;
+ rtw_hal_read_chip_info(padapter);
+ }
+#endif /*CONFIG_RF_POWER_TRIM*/
+ rtw_hal_init(padapter);
+ }
+
+ if (padapter->registrypriv.mp_mode == 0) {
+ ret = H2C_REJECTED;
+ goto exit;
+ }
+
+ if (padapter->mppriv.mode == MP_OFF) {
+ if (mp_start_test(padapter) == _FAIL) {
+ ret = H2C_REJECTED;
+ goto exit;
+ }
+ padapter->mppriv.mode = MP_ON;
+ MPT_PwrCtlDM(padapter, 0);
+ }
+ padapter->mppriv.bmac_filter = _FALSE;
+#ifdef CONFIG_RTL8723B
+#ifdef CONFIG_USB_HCI
+ rtw_write32(padapter, 0x765, 0x0000);
+ rtw_write32(padapter, 0x948, 0x0280);
+#else
+ rtw_write32(padapter, 0x765, 0x0000);
+ rtw_write32(padapter, 0x948, 0x0000);
+#endif
+#ifdef CONFIG_FOR_RTL8723BS_VQ0
+ rtw_write32(padapter, 0x765, 0x0000);
+ rtw_write32(padapter, 0x948, 0x0280);
+#endif
+ rtw_write8(padapter, 0x66, 0x27); /*Open BT uart Log*/
+ rtw_write8(padapter, 0xc50, 0x20); /*for RX init Gain*/
+#endif
+ ODM_Write_DIG(&pHalData->odmpriv, 0x20);
+
+#ifdef CONFIG_RTL8188F
+ DBG_871X("Set reg 0x88c, 0x58, 0x00\n");
+ rfreg0 = PHY_QueryRFReg(padapter, RF_PATH_A, 0x0, 0x1f);
+ PHY_SetBBReg(padapter, 0x88c, BIT21|BIT20, 0x3);
+ PHY_SetRFReg(padapter, RF_PATH_A, 0x58, BIT1, 0x1);
+ PHY_SetRFReg(padapter, RF_PATH_A, 0x0, 0xF001f, 0x2001f);
+ rtw_msleep_os(200);
+ PHY_SetRFReg(padapter, RF_PATH_A, 0x0, 0xF001f, 0x30000 | rfreg0);
+ PHY_SetRFReg(padapter, RF_PATH_A, 0x58, BIT1, 0x0);
+ PHY_SetBBReg(padapter, 0x88c, BIT21|BIT20, 0x0);
+ rtw_msleep_os(1000);
+#endif
+
+ } else if (mp_cmd_id == MP_STOP) {
+ if (padapter->registrypriv.mp_mode == 1) {
+ MPT_DeInitAdapter(padapter);
+ rtw_hal_deinit(padapter);
+ padapter->registrypriv.mp_mode = 0;
+ rtw_hal_init(padapter);
+ }
+
+ if (padapter->mppriv.mode != MP_OFF) {
+ mp_stop_test(padapter);
+ padapter->mppriv.mode = MP_OFF;
+ }
+
+ } else {
+ DBG_871X(FUNC_ADPT_FMT"invalid id:%d\n", FUNC_ADPT_ARG(padapter), mp_cmd_id);
+ ret = H2C_PARAMETERS_ERROR;
+ rtw_warn_on(1);
+ }
+
+exit:
+ return ret;
+}
+
+u8 rtw_mp_cmd(_adapter *adapter, u8 mp_cmd_id, u8 flags)
+{
+ struct cmd_obj *cmdobj;
+ struct drvextra_cmd_parm *parm;
+ struct cmd_priv *pcmdpriv = &adapter->cmdpriv;
+ struct submit_ctx sctx;
+ u8 res = _SUCCESS;
+
+ parm = (struct drvextra_cmd_parm *)rtw_zmalloc(sizeof(struct drvextra_cmd_parm));
+ if (parm == NULL) {
+ res = _FAIL;
+ goto exit;
+ }
+
+ parm->ec_id = MP_CMD_WK_CID;
+ parm->type = mp_cmd_id;
+ parm->size = 0;
+ parm->pbuf = NULL;
+
+ if (flags & RTW_CMDF_DIRECTLY) {
+ /* no need to enqueue, do the cmd hdl directly and free cmd parameter */
+ if (H2C_SUCCESS != rtw_mp_cmd_hdl(adapter, mp_cmd_id))
+ res = _FAIL;
+ rtw_mfree((u8 *)parm, sizeof(*parm));
+ } else {
+ /* need enqueue, prepare cmd_obj and enqueue */
+ cmdobj = (struct cmd_obj *)rtw_zmalloc(sizeof(*cmdobj));
+ if (cmdobj == NULL) {
+ res = _FAIL;
+ rtw_mfree((u8 *)parm, sizeof(*parm));
+ goto exit;
+ }
+
+ init_h2fwcmd_w_parm_no_rsp(cmdobj, parm, GEN_CMD_CODE(_Set_Drv_Extra));
+
+ if (flags & RTW_CMDF_WAIT_ACK) {
+ cmdobj->sctx = &sctx;
+ rtw_sctx_init(&sctx, 10 * 1000);
+ }
+
+ res = rtw_enqueue_cmd(pcmdpriv, cmdobj);
+
+ if (res == _SUCCESS && (flags & RTW_CMDF_WAIT_ACK)) {
+ rtw_sctx_wait(&sctx, __func__);
+ _enter_critical_mutex(&pcmdpriv->sctx_mutex, NULL);
+ if (sctx.status == RTW_SCTX_SUBMITTED)
+ cmdobj->sctx = NULL;
+ _exit_critical_mutex(&pcmdpriv->sctx_mutex, NULL);
+ if (sctx.status != RTW_SCTX_DONE_SUCCESS)
+ res = _FAIL;
+ }
+ }
+
+exit:
+ return res;
+}
+
//#else //CONFIG_C2H_PACKET_EN
/* dont call R/W in this function, beucase SDIO interrupt have claim host */
/* or deadlock will happen and cause special-systemserver-died in android */
@@ -4210,6 +4453,7 @@ exit:
u8 rtw_drvextra_cmd_hdl(_adapter *padapter, unsigned char *pbuf)
{
+ int ret = H2C_SUCCESS;
struct drvextra_cmd_parm *pdrvextra_cmd;
if(!pbuf)
@@ -4317,6 +4561,10 @@ u8 rtw_drvextra_cmd_hdl(_adapter *padapter, unsigned char *pbuf)
rtw_hal_set_hwreg(padapter, HW_VAR_EN_HW_UPDATE_TSF, NULL);
break;
+ case MP_CMD_WK_CID:
+ ret = rtw_mp_cmd_hdl(padapter, pdrvextra_cmd->type);
+ break;
+
default:
break;
}
@@ -4326,7 +4574,7 @@ u8 rtw_drvextra_cmd_hdl(_adapter *padapter, unsigned char *pbuf)
rtw_mfree(pdrvextra_cmd->pbuf, pdrvextra_cmd->size);
}
- return H2C_SUCCESS;
+ return ret;
}
void rtw_survey_cmd_callback(_adapter* padapter , struct cmd_obj *pcmd)
diff --git a/rtl8188FU/core/rtw_debug.c b/rtl8188FU/core/rtw_debug.c
index 4db64e4..2cd16a5 100755
--- a/rtl8188FU/core/rtw_debug.c
+++ b/rtl8188FU/core/rtw_debug.c
@@ -102,6 +102,9 @@ void dump_drv_cfg(void *sel)
#ifdef CONFIG_LOAD_PHY_PARA_FROM_FILE
DBG_871X_SEL_NL(sel, "LOAD_PHY_PARA_FROM_FILE - REALTEK_CONFIG_PATH=%s\n", REALTEK_CONFIG_PATH);
+ #if defined(CONFIG_MULTIDRV) || defined(REALTEK_CONFIG_PATH_WITH_IC_NAME_FOLDER)
+ DBG_871X_SEL_NL(sel, "LOAD_PHY_PARA_FROM_FILE - REALTEK_CONFIG_PATH_WITH_IC_NAME_FOLDER\n");
+ #endif
#ifdef CONFIG_CALIBRATE_TX_POWER_BY_REGULATORY
DBG_871X_SEL_NL(sel, "CONFIG_CALIBRATE_TX_POWER_BY_REGULATORY\n");
#endif
@@ -129,7 +132,11 @@ void dump_drv_cfg(void *sel)
#ifdef CONFIG_GPIO_WAKEUP
DBG_871X_SEL_NL(sel, "CONFIG_GPIO_WAKEUP - WAKEUP_GPIO_IDX:%d\n", WAKEUP_GPIO_IDX);
#endif
-#endif
+#endif
+
+#ifdef CONFIG_TDLS
+ DBG_871X_SEL_NL(sel, "CONFIG_TDLS\n");
+#endif
#ifdef CONFIG_USB_HCI
#ifdef CONFIG_SUPPORT_USB_INT
@@ -1854,6 +1861,24 @@ int proc_get_hw_status(struct seq_file *m, void *v)
return 0;
}
+int proc_get_trx_info_debug(struct seq_file *m, void *v)
+{
+ struct net_device *dev = m->private;
+ _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
+ HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);
+
+ int i;
+
+
+ /*============ tx info ============ */
+ rtw_hal_get_def_var(padapter, HW_DEF_RA_INFO_DUMP, m);
+
+ /*============ rx info ============ */
+ rtw_hal_set_odm_var(padapter, HAL_ODM_RX_INFO_DUMP, m, _FALSE);
+
+
+return 0;
+}
int proc_get_rx_signal(struct seq_file *m, void *v)
{
@@ -1978,6 +2003,8 @@ ssize_t proc_set_bw_mode(struct file *file, const char __user *buffer, size_t co
struct registry_priv *pregpriv = &padapter->registrypriv;
char tmp[32];
u32 mode;
+ u8 bw_2g;
+ u8 bw_5g;
if (count < 1)
return -EFAULT;
@@ -1989,13 +2016,14 @@ ssize_t proc_set_bw_mode(struct file *file, const char __user *buffer, size_t co
if (buffer && !copy_from_user(tmp, buffer, count)) {
- int num = sscanf(tmp, "%d ", &mode);
+ int num = sscanf(tmp, "%x ", &mode);
+ bw_5g = mode >> 4;
+ bw_2g = mode & 0x0f;
- if( pregpriv && mode < 2 )
- {
+ if (pregpriv && bw_2g <= 4 && bw_5g <= 4) {
pregpriv->bw_mode = mode;
- printk("bw_mode=%d\n", mode);
+ printk("bw_mode=0x%x\n", mode);
}
}
@@ -2036,9 +2064,8 @@ ssize_t proc_set_ampdu_enable(struct file *file, const char __user *buffer, size
int num = sscanf(tmp, "%d ", &mode);
- if( pregpriv && mode < 3 )
- {
- pregpriv->ampdu_enable= mode;
+ if (pregpriv && mode < 2) {
+ pregpriv->ampdu_enable = mode;
printk("ampdu_enable=%d\n", mode);
}
diff --git a/rtl8188FU/core/rtw_ieee80211.c b/rtl8188FU/core/rtw_ieee80211.c
index 0e16b53..893be78 100755
--- a/rtl8188FU/core/rtw_ieee80211.c
+++ b/rtl8188FU/core/rtw_ieee80211.c
@@ -482,18 +482,19 @@ _func_enter_;
ie = rtw_set_ie(ie, _SSID_IE_, pdev_network->Ssid.SsidLength, pdev_network->Ssid.Ssid, &sz);
//supported rates
- if(pregistrypriv->wireless_mode == WIRELESS_11ABGN)
- {
+ if (pregistrypriv->wireless_mode == WIRELESS_11ABGN) {
if(pdev_network->Configuration.DSConfig > 14)
wireless_mode = WIRELESS_11A_5N;
else
wireless_mode = WIRELESS_11BG_24N;
- }
- else
- {
+ } else if (pregistrypriv->wireless_mode == WIRELESS_MODE_MAX) { /* WIRELESS_11ABGN | WIRELESS_11AC */
+ if (pdev_network->Configuration.DSConfig > 14)
+ wireless_mode = WIRELESS_11_5AC;
+ else
+ wireless_mode = WIRELESS_11BG_24N;
+ } else
wireless_mode = pregistrypriv->wireless_mode;
- }
-
+
rtw_set_supported_rate(pdev_network->SupportedRates, wireless_mode) ;
rateLen = rtw_get_rateset_len(pdev_network->SupportedRates);
@@ -2142,7 +2143,7 @@ uint rtw_del_p2p_attr(u8 *ie, uint ielen_ori, u8 attr_id)
inline u8 *rtw_bss_ex_get_p2p_ie(WLAN_BSSID_EX *bss_ex, u8 *p2p_ie, uint *p2p_ielen)
{
- return rtw_get_wfd_ie(BSS_EX_TLV_IES(bss_ex), BSS_EX_TLV_IES_LEN(bss_ex), p2p_ie, p2p_ielen);
+ return rtw_get_p2p_ie(BSS_EX_TLV_IES(bss_ex), BSS_EX_TLV_IES_LEN(bss_ex), p2p_ie, p2p_ielen);
}
void rtw_bss_ex_del_p2p_ie(WLAN_BSSID_EX *bss_ex)
diff --git a/rtl8188FU/core/rtw_ioctl_set.c b/rtl8188FU/core/rtw_ioctl_set.c
index 93f0641..25b1687 100755
--- a/rtl8188FU/core/rtw_ioctl_set.c
+++ b/rtl8188FU/core/rtw_ioctl_set.c
@@ -361,7 +361,7 @@ _func_enter_;
rtw_disassoc_cmd(padapter, 0, _TRUE);
if (check_fwstate(pmlmepriv, _FW_LINKED) == _TRUE)
- rtw_indicate_disconnect(padapter);
+ rtw_indicate_disconnect(padapter, 0, _FALSE);
rtw_free_assoc_resources(padapter, 1);
@@ -451,7 +451,7 @@ _func_enter_;
rtw_disassoc_cmd(padapter, 0, _TRUE);
if (check_fwstate(pmlmepriv, _FW_LINKED) == _TRUE)
- rtw_indicate_disconnect(padapter);
+ rtw_indicate_disconnect(padapter, 0, _FALSE);
rtw_free_assoc_resources(padapter, 1);
@@ -480,7 +480,7 @@ _func_enter_;
rtw_disassoc_cmd(padapter, 0, _TRUE);
if (check_fwstate(pmlmepriv, _FW_LINKED) == _TRUE)
- rtw_indicate_disconnect(padapter);
+ rtw_indicate_disconnect(padapter, 0, _FALSE);
rtw_free_assoc_resources(padapter, 1);
@@ -644,7 +644,7 @@ _func_enter_;
{
if(check_fwstate(pmlmepriv, _FW_LINKED) == _TRUE)
{
- rtw_indicate_disconnect(padapter); //will clr Linked_state; before this function, we must have chked whether issue dis-assoc_cmd or not
+ rtw_indicate_disconnect(padapter, 0, _FALSE); /*will clr Linked_state; before this function, we must have checked whether issue dis-assoc_cmd or not*/
}
}
@@ -707,7 +707,7 @@ _func_enter_;
RT_TRACE(_module_rtl871x_ioctl_set_c_,_drv_info_,("MgntActrtw_set_802_11_disassociate: rtw_indicate_disconnect\n"));
rtw_disassoc_cmd(padapter, 0, _TRUE);
- rtw_indicate_disconnect(padapter);
+ rtw_indicate_disconnect(padapter, 0, _FALSE);
//modify for CONFIG_IEEE80211W, none 11w can use it
rtw_free_assoc_resources_cmd(padapter);
if (_FAIL == rtw_pwr_wakeup(padapter))
@@ -1449,17 +1449,11 @@ int rtw_set_channel_plan(_adapter *adapter, u8 channel_plan)
*/
int rtw_set_country(_adapter *adapter, const char *country_code)
{
- int channel_plan;
-
- channel_plan = rtw_get_chplan_from_country(country_code);
-
- if (channel_plan == -1) {
- DBG_871X_LEVEL(_drv_always_, "%s unsupported country_code:%s\n", __func__, country_code);
- return _FAIL;
- }
-
- DBG_871X_LEVEL(_drv_always_, "%s country_code:%s mapping to chplan:0x%02x\n", __func__, country_code, channel_plan);
- return rtw_set_channel_plan(adapter, channel_plan);
+#ifdef CONFIG_RTW_IOCTL_SET_COUNTRY
+ return rtw_set_country_cmd(adapter, RTW_CMDF_WAIT_ACK, country_code, 1);
+#else
+ return _FAIL;
+#endif
}
/*
diff --git a/rtl8188FU/core/rtw_mlme.c b/rtl8188FU/core/rtw_mlme.c
index 3958426..3d7f7ef 100755
--- a/rtl8188FU/core/rtw_mlme.c
+++ b/rtl8188FU/core/rtw_mlme.c
@@ -545,17 +545,10 @@ _func_exit_;
void rtw_generate_random_ibss(u8* pibss)
{
- u32 curtime = rtw_get_current_time();
-
-_func_enter_;
- pibss[0] = 0x02; //in ad-hoc mode bit1 must set to 1
+ *((u32 *)(&pibss[2])) = rtw_random32();
+ pibss[0] = 0x02; /* in ad-hoc mode local bit must set to 1 */
pibss[1] = 0x11;
pibss[2] = 0x87;
- pibss[3] = (u8)(curtime & 0xff) ;//p[0];
- pibss[4] = (u8)((curtime>>8) & 0xff) ;//p[1];
- pibss[5] = (u8)((curtime>>16) & 0xff) ;//p[2];
-_func_exit_;
- return;
}
u8 *rtw_get_capability_from_ie(u8 *ie)
@@ -1039,8 +1032,7 @@ _func_enter_;
goto exit;
}
#ifdef CONFIG_ANTENNA_DIVERSITY
- //target->PhyInfo.Optimum_antenna = pHalData->CurAntenna;//optimum_antenna=>For antenna diversity
- rtw_hal_get_def_var(adapter, HAL_DEF_CURRENT_ANTENNA, &(target->PhyInfo.Optimum_antenna));
+ rtw_hal_get_odm_var(adapter, HAL_ODM_ANTDIV_SELECT, &(target->PhyInfo.Optimum_antenna), NULL);
#endif
_rtw_memcpy(&(pnetwork->network), target, get_WLAN_BSSID_EX_sz(target));
//pnetwork->last_scanned = rtw_get_current_time();
@@ -1069,8 +1061,7 @@ _func_enter_;
bssid_ex_sz = get_WLAN_BSSID_EX_sz(target);
target->Length = bssid_ex_sz;
#ifdef CONFIG_ANTENNA_DIVERSITY
- //target->PhyInfo.Optimum_antenna = pHalData->CurAntenna;
- rtw_hal_get_def_var(adapter, HAL_DEF_CURRENT_ANTENNA, &(target->PhyInfo.Optimum_antenna));
+ rtw_hal_get_odm_var(adapter, HAL_ODM_ANTDIV_SELECT, &(target->PhyInfo.Optimum_antenna), NULL);
#endif
_rtw_memcpy(&(pnetwork->network), target, bssid_ex_sz );
@@ -1413,14 +1404,14 @@ _func_enter_;
}
#endif // CONFIG_INTEL_WIDI
rtw_free_assoc_resources(adapter, 1);
- rtw_indicate_disconnect(adapter);
+ rtw_indicate_disconnect(adapter, 0, _FALSE);
} else {
pmlmepriv->to_join = _TRUE;
}
}
else
{
- rtw_indicate_disconnect(adapter);
+ rtw_indicate_disconnect(adapter, 0, _FALSE);
}
_clr_fwstate_(pmlmepriv, _FW_UNDER_LINKING);
}
@@ -1432,7 +1423,7 @@ _func_enter_;
{
if (rtw_select_roaming_candidate(pmlmepriv) == _SUCCESS) {
receive_disconnect(adapter, pmlmepriv->cur_network.network.MacAddress
- , WLAN_REASON_ACTIVE_ROAM);
+ , WLAN_REASON_ACTIVE_ROAM, _FALSE);
}
}
}
@@ -1612,11 +1603,12 @@ _func_enter_;
_enter_critical_bh(&(pmlmepriv->scanned_queue.lock), &irqL);
pwlan = _rtw_find_same_network(&pmlmepriv->scanned_queue, tgt_network);
- if(pwlan)
- {
+ if ((pwlan) && (!check_fwstate(pmlmepriv, WIFI_UNDER_WPS))) {
+
pwlan->fixed = _FALSE;
- DBG_871X("free disconnecting network\n");
+ DBG_871X("free disconnecting network of scanned_queue\n");
+
rtw_free_network_nolock(adapter, pwlan);
#ifdef CONFIG_P2P
if(!rtw_p2p_chk_state(&adapter->wdinfo, P2P_STATE_NONE))
@@ -1625,10 +1617,12 @@ _func_enter_;
//rtw_clear_scan_deny(adapter);
}
#endif //CONFIG_P2P
- }
- else
- {
- RT_TRACE(_module_rtl871x_mlme_c_,_drv_err_,("rtw_free_assoc_resources : pwlan== NULL \n\n"));
+ } else {
+ if (pwlan == NULL)
+ DBG_871X("free disconnecting network of scanned_queue failed due to pwlan== NULL\n\n");
+ if (check_fwstate(pmlmepriv, WIFI_UNDER_WPS))
+ DBG_871X("donot free disconnecting network of scanned_queue when WIFI_UNDER_WPS\n\n");
+
}
@@ -1707,7 +1701,7 @@ _func_exit_;
/*
*rtw_indicate_disconnect: the caller has to lock pmlmepriv->lock
*/
-void rtw_indicate_disconnect( _adapter *padapter )
+void rtw_indicate_disconnect(_adapter *padapter, u16 reason, u8 locally_generated)
{
struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
@@ -1762,7 +1756,8 @@ _func_enter_;
|| (rtw_to_roam(padapter) <= 0)
)
{
- rtw_os_indicate_disconnect(padapter);
+
+ rtw_os_indicate_disconnect(padapter, reason, locally_generated);
//set ips_deny_time to avoid enter IPS before LPS leave
rtw_set_ips_deny(padapter, 3000);
@@ -2207,29 +2202,20 @@ _func_enter_;
//s3. find ptarget_sta & update ptarget_sta after update cur_network only for station mode
- if(check_fwstate(pmlmepriv, WIFI_STATION_STATE) == _TRUE)
- {
+ if (check_fwstate(pmlmepriv, WIFI_STATION_STATE) == _TRUE) {
ptarget_sta = rtw_joinbss_update_stainfo(adapter, pnetwork);
- if(ptarget_sta==NULL)
- {
- RT_TRACE(_module_rtl871x_mlme_c_,_drv_err_,("Can't update stainfo when joinbss_event callback\n"));
+ if (ptarget_sta == NULL) {
+ DBG_871X_LEVEL(_drv_err_, "Can't update stainfo when joinbss_event callback\n");
_exit_critical_bh(&(pmlmepriv->scanned_queue.lock), &irqL);
goto ignore_joinbss_callback;
}
}
//s4. indicate connect
- if(check_fwstate(pmlmepriv, WIFI_STATION_STATE) == _TRUE)
- {
+ if (MLME_IS_STA(adapter) || MLME_IS_ADHOC(adapter)) {
pmlmepriv->cur_network_scanned = ptarget_wlan;
rtw_indicate_connect(adapter);
}
- else
- {
- //adhoc mode will rtw_indicate_connect when rtw_stassoc_event_callback
- RT_TRACE(_module_rtl871x_mlme_c_,_drv_info_,("adhoc mode, fw_state:%x", get_fwstate(pmlmepriv)));
- }
-
//s5. Cancle assoc_timer
_cancel_timer(&pmlmepriv->assoc_timer, &timer_cancelled);
@@ -2320,67 +2306,6 @@ _func_enter_;
_func_exit_;
}
-#if 0
-//#if (RATE_ADAPTIVE_SUPPORT==1) //for 88E RA
-u8 search_max_mac_id(_adapter *padapter)
-{
- u8 mac_id, aid;
- struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
- struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
- struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
- struct sta_priv *pstapriv = &padapter->stapriv;
-
-#if defined (CONFIG_AP_MODE) && defined (CONFIG_NATIVEAP_MLME)
- if(check_fwstate(pmlmepriv, WIFI_AP_STATE)){
-
-#if 1
- _irqL irqL;
- struct dvobj_priv *pdvobj = adapter_to_dvobj(padapter);
-
- _enter_critical_bh(&pdvobj->lock, &irqL);
- for(mac_id=(NUM_STA-1); mac_id>0; mac_id--)
- if(pdvobj->macid[mac_id] == _TRUE)
- break;
- _exit_critical_bh(&pdvobj->lock, &irqL);
-
-#else
- for (aid = (pstapriv->max_num_sta); aid > 0; aid--)
- {
- if (pstapriv->sta_aid[aid-1] != NULL)
- {
- psta = pstapriv->sta_aid[aid-1];
- break;
- }
- }
-/*
- for (mac_id = (pstapriv->max_num_sta-1); mac_id >= 0; mac_id--)
- {
- if (pstapriv->sta_aid[mac_id] != NULL)
- break;
- }
-*/
- mac_id = aid + 1;
-#endif
- }
- else
-#endif
- {//adhoc id = 31~2
- for (mac_id = (NUM_STA-1); mac_id >= IBSS_START_MAC_ID ; mac_id--)
- {
- if (pmlmeinfo->FW_sta_info[mac_id].status == 1)
- {
- break;
- }
- }
- }
-
- DBG_871X("max mac_id=%d\n", mac_id);
-
- return mac_id;
-
-}
-#endif
-
void rtw_sta_media_status_rpt(_adapter *adapter, struct sta_info *sta, bool connected)
{
struct macid_ctl_t *macid_ctl = &adapter->dvobj->macid_ctl;
@@ -2428,7 +2353,8 @@ void rtw_sta_media_status_rpt(_adapter *adapter, struct sta_info *sta, bool conn
role = H2C_MSR_ROLE_GC;
else
role = H2C_MSR_ROLE_STA;
- }
+ } else if (MLME_IS_ADHOC(adapter) || MLME_IS_ADHOC_MASTER(adapter))
+ role = H2C_MSR_ROLE_ADHOC;
#ifdef CONFIG_WFD
if (role == H2C_MSR_ROLE_GC
@@ -2568,29 +2494,15 @@ _func_enter_;
}
#endif //defined (CONFIG_AP_MODE) && defined (CONFIG_NATIVEAP_MLME)
- //for AD-HOC mode
- psta = rtw_get_stainfo(&adapter->stapriv, pstassoc->macaddr);
- if( psta != NULL)
- {
- //the sta have been in sta_info_queue => do nothing
-
- RT_TRACE(_module_rtl871x_mlme_c_,_drv_err_,("Error: rtw_stassoc_event_callback: sta has been in sta_hash_queue \n"));
-
- goto exit; //(between drv has received this event before and fw have not yet to set key to CAM_ENTRY)
- }
-
- psta = rtw_alloc_stainfo(&adapter->stapriv, pstassoc->macaddr);
+ /* for AD-HOC mode */
+ psta = rtw_get_stainfo(&adapter->stapriv, pstassoc->macaddr);
if (psta == NULL) {
- RT_TRACE(_module_rtl871x_mlme_c_,_drv_err_,("Can't alloc sta_info when rtw_stassoc_event_callback\n"));
+ DBG_871X_LEVEL(_drv_err_, FUNC_ADPT_FMT" get no sta_info with "MAC_FMT"\n"
+ , FUNC_ADPT_ARG(adapter), MAC_ARG(pstassoc->macaddr));
+ rtw_warn_on(1);
goto exit;
- }
-
- //to do : init sta_info variable
- psta->qos_option = 0;
- psta->mac_id = (uint)pstassoc->cam_id;
- //psta->aid = (uint)pstassoc->cam_id;
- DBG_871X("%s\n",__FUNCTION__);
- //for ad-hoc mode
+ }
+
rtw_hal_set_odm_var(adapter,HAL_ODM_STA_INFO,psta,_TRUE);
rtw_sta_media_status_rpt(adapter, psta, 1);
@@ -2666,6 +2578,47 @@ _func_exit_;
}
#endif /* CONFIG_IEEE80211W */
+static void rtw_sta_mstatus_disc_rpt(_adapter *adapter, u8 mac_id)
+{
+ struct macid_ctl_t *macid_ctl = &adapter->dvobj->macid_ctl;
+
+ DBG_871X("%s "ADPT_FMT" - mac_id=%d\n", __func__, ADPT_ARG(adapter), mac_id);
+
+ if (mac_id >= 0 && mac_id < macid_ctl->num) {
+ rtw_hal_set_FwMediaStatusRpt_single_cmd(adapter, 0, 0, 0, 0, mac_id);
+ /*
+ * For safety, prevent from keeping macid sleep.
+ * If we can sure all power mode enter/leave are paired,
+ * this check can be removed.
+ * Lucas@20131113
+ */
+ /* wakeup macid after disconnect. */
+ /*if (MLME_IS_STA(adapter))*/
+ rtw_hal_macid_wakeup(adapter, mac_id);
+ } else {
+ DBG_871X_LEVEL(_drv_always_, FUNC_ADPT_FMT" invalid macid:%u\n"
+ , FUNC_ADPT_ARG(adapter), mac_id);
+ rtw_warn_on(1);
+ }
+}
+
+void rtw_sta_mstatus_report(_adapter *adapter)
+{
+ struct mlme_priv *pmlmepriv = &adapter->mlmepriv;
+ struct wlan_network *tgt_network = &pmlmepriv->cur_network;
+ struct sta_info *psta = NULL;
+
+ if (check_fwstate(pmlmepriv, WIFI_STATION_STATE)) {
+ psta = rtw_get_stainfo(&adapter->stapriv, tgt_network->network.MacAddress);
+ if (psta) {
+ rtw_sta_mstatus_disc_rpt(adapter, psta->mac_id);
+ } else {
+ DBG_871X("%s "ADPT_FMT" - mac_addr: "MAC_FMT" psta == NULL\n", __func__, ADPT_ARG(adapter), MAC_ARG(tgt_network->network.MacAddress));
+ rtw_warn_on(1);
+ }
+ }
+}
+
void rtw_stadel_event_callback(_adapter *adapter, u8 *pbuf)
{
_irqL irqL,irqL2;
@@ -2684,24 +2637,20 @@ void rtw_stadel_event_callback(_adapter *adapter, u8 *pbuf)
_func_enter_;
- psta = rtw_get_stainfo(&adapter->stapriv, pstadel->macaddr);
- if(psta)
- mac_id = psta->mac_id;
- else
- mac_id = pstadel->mac_id;
+ DBG_871X("%s(mac_id=%d)=" MAC_FMT "\n", __func__, pstadel->mac_id, MAC_ARG(pstadel->macaddr));
+ rtw_sta_mstatus_disc_rpt(adapter, pstadel->mac_id);
- DBG_871X("%s(mac_id=%d)=" MAC_FMT "\n", __func__, mac_id, MAC_ARG(pstadel->macaddr));
+ psta = rtw_get_stainfo(&adapter->stapriv, pstadel->macaddr);
- if (mac_id >= 0 && mac_id < macid_ctl->num) {
- rtw_hal_set_FwMediaStatusRpt_single_cmd(adapter, 0, 0, 0, 0, mac_id);
- if (psta)
- rtw_wfd_st_switch(psta, 0);
- } else {
- DBG_871X_LEVEL(_drv_always_, FUNC_ADPT_FMT" invalid macid:%u\n"
- , FUNC_ADPT_ARG(adapter), mac_id);
- rtw_warn_on(1);
+ if (psta == NULL) {
+ DBG_871X("%s(mac_id=%d)=" MAC_FMT " psta == NULL\n", __func__, pstadel->mac_id, MAC_ARG(pstadel->macaddr));
+ /*rtw_warn_on(1);*/
}
+ if (psta)
+ rtw_wfd_st_switch(psta, 0);
+
+
//if(check_fwstate(pmlmepriv, WIFI_AP_STATE))
if((pmlmeinfo->state&0x03) == WIFI_FW_AP_STATE)
{
@@ -2755,7 +2704,7 @@ _func_enter_;
rtw_free_uc_swdec_pending_queue(adapter);
rtw_free_assoc_resources(adapter, 1);
- rtw_indicate_disconnect(adapter);
+ rtw_indicate_disconnect(adapter, *(u16 *)pstadel->rsvd, pstadel->locally_generated);
rtw_free_mlme_priv_ie_data(pmlmepriv);
_enter_critical_bh(&(pmlmepriv->scanned_queue.lock), &irqL);
@@ -2908,7 +2857,7 @@ _func_enter_;
}
#endif // CONFIG_INTEL_WIDI
DBG_871X("%s We've try roaming but fail\n", __FUNCTION__);
- rtw_indicate_disconnect(adapter);
+ rtw_indicate_disconnect(adapter, 0, _FALSE);
break;
}
}
@@ -2916,12 +2865,12 @@ _func_enter_;
} else
#endif
{
- rtw_indicate_disconnect(adapter);
+ rtw_indicate_disconnect(adapter, 0, _FALSE);
free_scanqueue(pmlmepriv);//???
#ifdef CONFIG_IOCTL_CFG80211
//indicate disconnect for the case that join_timeout and check_fwstate != FW_LINKED
- rtw_cfg80211_indicate_disconnect(adapter);
+ rtw_cfg80211_indicate_disconnect(adapter, 0, _FALSE);
#endif //CONFIG_IOCTL_CFG80211
}
@@ -2994,6 +2943,14 @@ void rtw_mlme_reset_auto_scan_int(_adapter *adapter)
goto exit;
}
#endif
+
+#ifdef CONFIG_TDLS
+ if (adapter->tdlsinfo.link_established == _TRUE) {
+ mlme->auto_scan_int_ms = 0;
+ goto exit;
+ }
+#endif
+
if(pmlmeinfo->VHT_enable) //disable auto scan when connect to 11AC AP
{
mlme->auto_scan_int_ms = 0;
@@ -3507,7 +3464,7 @@ candidate_exist:
#endif
{
rtw_disassoc_cmd(adapter, 0, _TRUE);
- rtw_indicate_disconnect(adapter);
+ rtw_indicate_disconnect(adapter, 0, _FALSE);
rtw_free_assoc_resources(adapter, 0);
}
}
@@ -3517,10 +3474,10 @@ candidate_exist:
if(_TRUE == bSupportAntDiv)
{
u8 CurrentAntenna;
- rtw_hal_get_def_var(adapter, HAL_DEF_CURRENT_ANTENNA, &(CurrentAntenna));
+ rtw_hal_get_odm_var(adapter, HAL_ODM_ANTDIV_SELECT, &(CurrentAntenna), NULL);
DBG_871X("#### Opt_Ant_(%s) , cur_Ant(%s)\n",
- (2==candidate->network.PhyInfo.Optimum_antenna)?"A":"B",
- (2==CurrentAntenna)?"A":"B"
+ (MAIN_ANT == candidate->network.PhyInfo.Optimum_antenna) ? "MAIN_ANT":"AUX_ANT",
+ (MAIN_ANT == CurrentAntenna) ? "MAIN_ANT":"AUX_ANT"
);
}
#endif
@@ -4148,6 +4105,7 @@ void rtw_build_wmm_ie_ht(_adapter *padapter, u8 *out_ie, uint *pout_len)
unsigned int rtw_restructure_ht_ie(_adapter *padapter, u8 *in_ie, u8 *out_ie, uint in_len, uint *pout_len, u8 channel)
{
u32 ielen, out_len;
+ u32 rx_packet_offset, max_recvbuf_sz;
HT_CAP_AMPDU_FACTOR max_rx_ampdu_factor;
HT_CAP_AMPDU_DENSITY best_ampdu_density;
unsigned char *p, *pframe;
@@ -4278,10 +4236,10 @@ unsigned int rtw_restructure_ht_ie(_adapter *padapter, u8 *in_ie, u8 *out_ie, ui
u32 rx_packet_offset, max_recvbuf_sz;
rtw_hal_get_def_var(padapter, HAL_DEF_RX_PACKET_OFFSET, &rx_packet_offset);
rtw_hal_get_def_var(padapter, HAL_DEF_MAX_RECVBUF_SZ, &max_recvbuf_sz);
- //if(max_recvbuf_sz-rx_packet_offset>(8191-256)) {
- // DBG_871X("%s IEEE80211_HT_CAP_MAX_AMSDU is set\n", __FUNCTION__);
- // ht_capie.cap_info = ht_capie.cap_info |IEEE80211_HT_CAP_MAX_AMSDU;
- //}
+ if (max_recvbuf_sz-rx_packet_offset >= (8191-256)) {
+ DBG_871X("%s IEEE80211_HT_CAP_MAX_AMSDU is set\n", __FUNCTION__);
+ ht_capie.cap_info = ht_capie.cap_info | IEEE80211_HT_CAP_MAX_AMSDU;
+ }
}
/*
AMPDU_para [1:0]:Max AMPDU Len => 0:8k , 1:16k, 2:32k, 3:64k
@@ -4404,17 +4362,10 @@ void rtw_update_ht_cap(_adapter *padapter, u8 *pie, uint ie_len, u8 channel)
phtpriv->ampdu_enable = _TRUE;
}
else
- {
phtpriv->ampdu_enable = _TRUE;
- }
- }
- else if(pregistrypriv->ampdu_enable==2)
- {
- //remove this part because testbed AP should disable RX AMPDU
- //phtpriv->ampdu_enable = _TRUE;
- }
+ }
+
-
//check Max Rx A-MPDU Size
len = 0;
p = rtw_get_ie(pie+sizeof (NDIS_802_11_FIXED_IEs), _HT_CAPABILITY_IE_, &len, ie_len-sizeof (NDIS_802_11_FIXED_IEs));
@@ -4743,7 +4694,7 @@ void _rtw_roaming(_adapter *padapter, struct wlan_network *tgt_network)
continue;
} else {
DBG_871X("%s(%d) -to roaming fail, indicate_disconnect\n", __FUNCTION__,__LINE__);
- rtw_indicate_disconnect(padapter);
+ rtw_indicate_disconnect(padapter, 0, _FALSE);
break;
}
}
diff --git a/rtl8188FU/core/rtw_mlme_ext.c b/rtl8188FU/core/rtw_mlme_ext.c
index 4cd5770..bbf78ec 100755
--- a/rtl8188FU/core/rtw_mlme_ext.c
+++ b/rtl8188FU/core/rtw_mlme_ext.c
@@ -152,6 +152,7 @@ static RT_CHANNEL_PLAN_2G RTW_ChannelPlan2G[] = {
/* 5, RTW_RD_2G_ETSI2 */ {{10, 11, 12, 13}, 4},
/* 6, RTW_RD_2G_GLOBAL */ {{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14}, 14},
/* 7, RTW_RD_2G_MKK2 */ {{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13}, 13},
+ /* 8, RTW_RD_2G_FCC2 */ {{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13}, 13},
};
static RT_CHANNEL_PLAN_5G RTW_ChannelPlan5G[] = {
@@ -242,7 +243,7 @@ static RT_CHANNEL_PLAN_MAP RTW_ChannelPlanMap[] = {
{RTW_RD_2G_MKK1, RTW_RD_5G_MKK1, TXPWR_LMT_MKK}, /* 0x27, RTW_CHPLAN_MKK1_MKK1 */
{RTW_RD_2G_WORLD, RTW_RD_5G_KCC1, TXPWR_LMT_ETSI}, /* 0x28, RTW_CHPLAN_WORLD_KCC1 */
{RTW_RD_2G_WORLD, RTW_RD_5G_FCC2, TXPWR_LMT_FCC}, /* 0x29, RTW_CHPLAN_WORLD_FCC2 */
- {RTW_RD_2G_NULL, RTW_RD_5G_NULL, TXPWR_LMT_WW}, /* 0x2A, */
+ {RTW_RD_2G_FCC2, RTW_RD_5G_NULL, TXPWR_LMT_FCC}, /* 0x2A, RTW_CHPLAN_FCC2_NULL */
{RTW_RD_2G_NULL, RTW_RD_5G_NULL, TXPWR_LMT_WW}, /* 0x2B, */
{RTW_RD_2G_NULL, RTW_RD_5G_NULL, TXPWR_LMT_WW}, /* 0x2C, */
{RTW_RD_2G_NULL, RTW_RD_5G_NULL, TXPWR_LMT_WW}, /* 0x2D, */
@@ -290,6 +291,13 @@ static RT_CHANNEL_PLAN_MAP RTW_ChannelPlanMap[] = {
{RTW_RD_2G_FCC1, RTW_RD_5G_FCC10, TXPWR_LMT_FCC}, /* 0x57, RTW_CHPLAN_FCC1_FCC10 */
{RTW_RD_2G_MKK2, RTW_RD_5G_MKK4, TXPWR_LMT_MKK}, /* 0x58, RTW_CHPLAN_MKK2_MKK4 */
{RTW_RD_2G_WORLD, RTW_RD_5G_ETSI14, TXPWR_LMT_ETSI}, /* 0x59, RTW_CHPLAN_WORLD_ETSI14 */
+ {RTW_RD_2G_NULL, RTW_RD_5G_NULL, TXPWR_LMT_WW}, /* 0x5A, */
+ {RTW_RD_2G_NULL, RTW_RD_5G_NULL, TXPWR_LMT_WW}, /* 0x5B, */
+ {RTW_RD_2G_NULL, RTW_RD_5G_NULL, TXPWR_LMT_WW}, /* 0x5C, */
+ {RTW_RD_2G_NULL, RTW_RD_5G_NULL, TXPWR_LMT_WW}, /* 0x5D, */
+ {RTW_RD_2G_NULL, RTW_RD_5G_NULL, TXPWR_LMT_WW}, /* 0x5E, */
+ {RTW_RD_2G_NULL, RTW_RD_5G_NULL, TXPWR_LMT_WW}, /* 0x5F, */
+ {RTW_RD_2G_FCC1, RTW_RD_5G_FCC5, TXPWR_LMT_FCC}, /* 0x60, RTW_CHPLAN_FCC1_FCC5 */
};
static RT_CHANNEL_PLAN_MAP RTW_CHANNEL_PLAN_MAP_REALTEK_DEFINE = {
@@ -300,11 +308,6 @@ bool rtw_chplan_is_empty(u8 id)
{
RT_CHANNEL_PLAN_MAP *chplan_map;
- if (!rtw_is_channel_plan_valid(id)) {
- rtw_warn_on(1);
- return _FALSE;
- }
-
if (id == RTW_CHPLAN_REALTEK_DEFINE)
chplan_map = &RTW_CHANNEL_PLAN_MAP_REALTEK_DEFINE;
else
@@ -566,12 +569,43 @@ bool rtw_choose_available_chbw(_adapter *adapter, u8 req_bw, u8 *dec_ch, u8 *dec
return (i < mlmeext->max_chan_nums)?_TRUE:_FALSE;
}
+void dump_country_chplan(void *sel, const struct country_chplan *ent)
+{
+ DBG_871X_SEL(sel, "\"%c%c\", 0x%02X%s\n"
+ , ent->alpha2[0], ent->alpha2[1], ent->chplan
+ , COUNTRY_CHPLAN_EN_11AC(ent) ? " ac" : ""
+ );
+}
+
+void dump_country_chplan_map(void *sel)
+{
+ const struct country_chplan *ent;
+ u8 code[2];
+
+#if RTW_DEF_MODULE_REGULATORY_CERT
+ DBG_871X_SEL(sel, "RTW_DEF_MODULE_REGULATORY_CERT:0x%x\n", RTW_DEF_MODULE_REGULATORY_CERT);
+#endif
+#ifdef CONFIG_CUSTOMIZED_COUNTRY_CHPLAN_MAP
+ DBG_871X_SEL(sel, "CONFIG_CUSTOMIZED_COUNTRY_CHPLAN_MAP\n");
+#endif
+
+ for (code[0] = 'A'; code[0] <= 'Z'; code[0]++) {
+ for (code[1] = 'A'; code[1] <= 'Z'; code[1]++) {
+ ent = rtw_get_chplan_from_country(code);
+ if (!ent)
+ continue;
+
+ dump_country_chplan(sel, ent);
+ }
+ }
+}
+
void dump_chplan_id_list(void *sel)
{
int i;
for (i = 0; i < RTW_CHPLAN_MAX; i++) {
- if (rtw_chplan_is_empty(i))
+ if (!rtw_is_channel_plan_valid(i))
continue;
DBG_871X_SEL(sel, "0x%02X ", i);
@@ -634,8 +668,13 @@ void dump_cur_chset(void *sel, _adapter *adapter)
struct mlme_ext_priv *mlmeext = &adapter->mlmeextpriv;
HAL_DATA_TYPE *hal_data = GET_HAL_DATA(adapter);
- DBG_871X_SEL_NL(sel, "Channel plan ID:0x%02X, 2G_PLS:%u, 5G_PLS:%u\n"
- , mlme->ChannelPlan, hal_data->Regulation2_4G, hal_data->Regulation5G);
+ if (mlme->country_ent)
+ dump_country_chplan(sel, mlme->country_ent);
+ else
+ DBG_871X_SEL_NL(sel, "chplan:0x%02X\n", mlme->ChannelPlan);
+
+ DBG_871X_SEL_NL(sel, "2G_PLS:%u, 5G_PLS:%u\n"
+ , hal_data->Regulation2_4G, hal_data->Regulation5G);
dump_chset(sel, mlmeext->channel_set);
}
@@ -855,7 +894,7 @@ static u8 init_channel_set(_adapter* padapter, u8 ChannelPlan, RT_CHANNEL_INFO *
HAL_DATA_TYPE *hal_data = GET_HAL_DATA(padapter);
if (!rtw_is_channel_plan_valid(ChannelPlan)) {
- DBG_871X("ChannelPlan ID %x error !!!!!\n",ChannelPlan);
+ DBG_871X_LEVEL(_drv_err_, "ChannelPlan ID 0x%02X error !!!!!\n", ChannelPlan);
return chanset_size;
}
@@ -1465,7 +1504,7 @@ _continue:
psta->state |= _FW_LINKED;
_exit_critical_bh(&psta->lock, &irqL);
- report_add_sta_event(padapter, psta->hwaddr, psta->aid);
+ report_add_sta_event(padapter, psta->hwaddr);
}
@@ -1617,7 +1656,6 @@ unsigned int OnProbeRsp(_adapter *padapter, union recv_frame *precv_frame)
unsigned int OnBeacon(_adapter *padapter, union recv_frame *precv_frame)
{
- int cam_idx;
struct sta_info *psta;
struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
@@ -1632,6 +1670,9 @@ unsigned int OnBeacon(_adapter *padapter, union recv_frame *precv_frame)
#ifdef CONFIG_TDLS
struct sta_info *ptdls_sta;
struct tdls_info *ptdlsinfo = &padapter->tdlsinfo;
+#ifdef CONFIG_TDLS_CH_SW
+ struct tdls_ch_switch *pchsw_info = &padapter->tdlsinfo.chsw_info;
+#endif
#endif /* CONFIG_TDLS */
#ifdef CONFIG_ATTEMPT_TO_FIX_AP_BEACON_ERROR
@@ -1729,7 +1770,7 @@ unsigned int OnBeacon(_adapter *padapter, union recv_frame *precv_frame)
{ // join wrong channel, deauth and reconnect
issue_deauth(padapter, (&(pmlmeinfo->network))->MacAddress, WLAN_REASON_DEAUTH_LEAVING);
- report_del_sta_event(padapter, (&(pmlmeinfo->network))->MacAddress, WLAN_REASON_JOIN_WRONG_CHANNEL, _TRUE);
+ report_del_sta_event(padapter, (&(pmlmeinfo->network))->MacAddress, WLAN_REASON_JOIN_WRONG_CHANNEL, _TRUE, _FALSE);
pmlmeinfo->state &= (~WIFI_FW_ASSOC_SUCCESS);
return _SUCCESS;
}
@@ -1738,7 +1779,7 @@ unsigned int OnBeacon(_adapter *padapter, union recv_frame *precv_frame)
ret = rtw_check_bcn_info(padapter, pframe, len);
if (!ret) {
DBG_871X_LEVEL(_drv_always_, "ap has changed, disconnect now\n ");
- receive_disconnect(padapter, pmlmeinfo->network.MacAddress , 0);
+ receive_disconnect(padapter, pmlmeinfo->network.MacAddress , 0, _FALSE);
return _SUCCESS;
}
//update WMM, ERP in the beacon
@@ -1753,16 +1794,16 @@ unsigned int OnBeacon(_adapter *padapter, union recv_frame *precv_frame)
#ifdef CONFIG_TDLS
#ifdef CONFIG_TDLS_CH_SW
- if (padapter->tdlsinfo.ch_switch_prohibited == _FALSE)
+ if (rtw_tdls_is_chsw_allowed(padapter) == _TRUE)
{
/* Send TDLS Channel Switch Request when receiving Beacon */
- if ((padapter->tdlsinfo.chsw_info.ch_sw_state & TDLS_CH_SW_INITIATOR_STATE) && (pmlmeext->cur_channel == rtw_get_oper_ch(padapter))) {
- ptdlsinfo->chsw_info.ch_sw_state |= TDLS_WAIT_CH_RSP_STATE;
- /* DBG_871X("[%s] issue_tdls_ch_switch_req to "MAC_FMT"\n", __FUNCTION__, MAC_ARG(padapter->tdlsinfo.chsw_info.addr)); */
+ if ((padapter->tdlsinfo.chsw_info.ch_sw_state & TDLS_CH_SW_INITIATOR_STATE) && (ATOMIC_READ(&pchsw_info->chsw_on) == _TRUE)
+ && (pmlmeext->cur_channel == rtw_get_oper_ch(padapter))) {
ptdls_sta = rtw_get_stainfo(&padapter->stapriv, padapter->tdlsinfo.chsw_info.addr);
if (ptdls_sta != NULL) {
- if (ptdls_sta->tdls_sta_state | TDLS_LINKED_STATE)
- issue_tdls_ch_switch_req(padapter, ptdls_sta);
+ if (ptdls_sta->tdls_sta_state | TDLS_LINKED_STATE) {
+ _set_timer(&ptdls_sta->stay_on_base_chnl_timer, TDLS_CH_SW_STAY_ON_BASE_CHNL_TIMEOUT);
+ }
}
}
}
@@ -1784,46 +1825,47 @@ unsigned int OnBeacon(_adapter *padapter, union recv_frame *precv_frame)
psta->sta_stats.rx_mgnt_pkts++;
#endif
}
- }
- else if((pmlmeinfo->state&0x03) == WIFI_FW_ADHOC_STATE)
- {
- if ((psta = rtw_get_stainfo(pstapriv, GetAddr2Ptr(pframe))) != NULL)
- {
- //update WMM, ERP in the beacon
- //todo: the timer is used instead of the number of the beacon received
+
+ } else if ((pmlmeinfo->state&0x03) == WIFI_FW_ADHOC_STATE) {
+ _irqL irqL;
+ u8 rate_set[16];
+ u8 rate_num = 0;
+
+ psta = rtw_get_stainfo(pstapriv, GetAddr2Ptr(pframe));
+ if (psta != NULL) {
+ /*
+ * update WMM, ERP in the beacon
+ * todo: the timer is used instead of the number of the beacon received
+ */
if ((sta_rx_pkts(psta) & 0xf) == 0)
- {
- //DBG_871X("update_bcn_info\n");
update_beacon_info(padapter, pframe, len, psta);
- }
if (pmlmeext->en_hw_update_tsf)
rtw_enable_hw_update_tsf_cmd(padapter);
- #if 0 //move to validate_recv_mgnt_frame
- psta->sta_stats.rx_mgnt_pkts++;
- #endif
- }
- else
- {
- //allocate a new CAM entry for IBSS station
- if ((cam_idx = allocate_fw_sta_entry(padapter)) == NUM_STA)
- {
+ } else {
+ rtw_ies_get_supported_rate(pframe + WLAN_HDR_A3_LEN + _BEACON_IE_OFFSET_, len - WLAN_HDR_A3_LEN - _BEACON_IE_OFFSET_, rate_set, &rate_num);
+ if (rate_num == 0) {
+ DBG_871X(FUNC_ADPT_FMT" RX beacon with no supported rate\n", FUNC_ADPT_ARG(padapter));
goto _END_ONBEACON_;
}
- //get supported rate
- if (update_sta_support_rate(padapter, (pframe + WLAN_HDR_A3_LEN + _BEACON_IE_OFFSET_), (len - WLAN_HDR_A3_LEN - _BEACON_IE_OFFSET_), cam_idx) == _FAIL)
- {
- pmlmeinfo->FW_sta_info[cam_idx].status = 0;
+ psta = rtw_alloc_stainfo(pstapriv, GetAddr2Ptr(pframe));
+ if (psta == NULL) {
+ DBG_871X(FUNC_ADPT_FMT" Exceed the upper limit of supported clients\n", FUNC_ADPT_ARG(padapter));
goto _END_ONBEACON_;
}
+ psta->expire_to = pstapriv->adhoc_expire_to;
+
+ _rtw_memcpy(psta->bssrateset, rate_set, rate_num);
+ psta->bssratelen = rate_num;
+
//update TSF Value
update_TSF(pmlmeext, pframe, len);
//report sta add event
- report_add_sta_event(padapter, GetAddr2Ptr(pframe), cam_idx);
+ report_add_sta_event(padapter, GetAddr2Ptr(pframe));
}
}
}
@@ -2240,8 +2282,8 @@ unsigned int OnAssocReq(_adapter *padapter, union recv_frame *precv_frame)
unsigned char reassoc, *p, *pos, *wpa_ie;
unsigned char WMM_IE[] = {0x00, 0x50, 0xf2, 0x02, 0x00, 0x01};
int i, ie_len, wpa_ie_len, left;
- unsigned char supportRate[16];
- int supportRateNum;
+ u8 rate_set[16];
+ u8 rate_num;
unsigned short status = _STATS_SUCCESSFUL_;
unsigned short frame_type, ie_offset=0;
struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
@@ -2386,39 +2428,14 @@ unsigned int OnAssocReq(_adapter *padapter, union recv_frame *precv_frame)
if(_STATS_SUCCESSFUL_ != status)
goto OnAssocReqFail;
- // check if the supported rate is ok
- p = rtw_get_ie(pframe + WLAN_HDR_A3_LEN + ie_offset, _SUPPORTEDRATES_IE_, &ie_len, pkt_len - WLAN_HDR_A3_LEN - ie_offset);
- if (p == NULL) {
- DBG_871X("Rx a sta assoc-req which supported rate is empty!\n");
- // use our own rate set as statoin used
- //_rtw_memcpy(supportRate, AP_BSSRATE, AP_BSSRATE_LEN);
- //supportRateNum = AP_BSSRATE_LEN;
-
+ rtw_ies_get_supported_rate(pframe + WLAN_HDR_A3_LEN + ie_offset, pkt_len - WLAN_HDR_A3_LEN - ie_offset, rate_set, &rate_num);
+ if (rate_num == 0) {
+ DBG_871X(FUNC_ADPT_FMT" RX assoc-req with no supported rate\n", FUNC_ADPT_ARG(padapter));
status = _STATS_FAILURE_;
goto OnAssocReqFail;
}
- else {
- _rtw_memcpy(supportRate, p+2, ie_len);
- supportRateNum = ie_len;
-
- p = rtw_get_ie(pframe + WLAN_HDR_A3_LEN + ie_offset, _EXT_SUPPORTEDRATES_IE_ , &ie_len,
- pkt_len - WLAN_HDR_A3_LEN - ie_offset);
- if (p != NULL) {
-
- if(supportRateNum<=sizeof(supportRate))
- {
- _rtw_memcpy(supportRate+supportRateNum, p+2, ie_len);
- supportRateNum += ie_len;
- }
- }
- }
-
- //todo: mask supportRate between AP & STA -> move to update raid
- //get_matched_rate(pmlmeext, supportRate, &supportRateNum, 0);
-
- //update station supportRate
- pstat->bssratelen = supportRateNum;
- _rtw_memcpy(pstat->bssrateset, supportRate, supportRateNum);
+ _rtw_memcpy(pstat->bssrateset, rate_set, rate_num);
+ pstat->bssratelen = rate_num;
UpdateBrateTblForSoftAP(pstat->bssrateset, pstat->bssratelen);
//check RSN/WPA/WPS
@@ -2632,6 +2649,9 @@ unsigned int OnAssocReq(_adapter *padapter, union recv_frame *precv_frame)
#ifdef CONFIG_80211N_HT
+ if (pmlmepriv->htpriv.ht_option == _FALSE)
+ goto bypass_ht_chk;
+
/* save HT capabilities in the sta object */
_rtw_memset(&pstat->htpriv.ht_cap, 0, sizeof(struct rtw_ieee80211_ht_cap));
if (elems.ht_capabilities && elems.ht_capabilities_len >= sizeof(struct rtw_ieee80211_ht_cap))
@@ -2644,17 +2664,19 @@ unsigned int OnAssocReq(_adapter *padapter, union recv_frame *precv_frame)
} else
pstat->flags &= ~WLAN_STA_HT;
+bypass_ht_chk:
-
- if((pmlmepriv->htpriv.ht_option == _FALSE) && (pstat->flags&WLAN_STA_HT))
- {
+ if ((pmlmepriv->htpriv.ht_option == _FALSE) && (pstat->flags&WLAN_STA_HT)) {
+ rtw_warn_on(1);
status = _STATS_FAILURE_;
goto OnAssocReqFail;
}
-
#endif /* CONFIG_80211N_HT */
#ifdef CONFIG_80211AC_VHT
+ if (pmlmepriv->vhtpriv.vht_option == _FALSE)
+ goto bypass_vht_chk;
+
_rtw_memset(&pstat->vhtpriv, 0, sizeof(struct vht_priv));
if (elems.vht_capabilities && elems.vht_capabilities_len == 12) {
pstat->flags |= WLAN_STA_VHT;
@@ -2672,9 +2694,10 @@ unsigned int OnAssocReq(_adapter *padapter, union recv_frame *precv_frame)
else {
pstat->flags &= ~WLAN_STA_VHT;
}
+bypass_vht_chk:
- if((pmlmepriv->vhtpriv.vht_option == _FALSE) && (pstat->flags&WLAN_STA_VHT))
- {
+ if ((pmlmepriv->vhtpriv.vht_option == _FALSE) && (pstat->flags&WLAN_STA_VHT)) {
+ rtw_warn_on(1);
status = _STATS_FAILURE_;
goto OnAssocReqFail;
}
@@ -2837,7 +2860,7 @@ unsigned int OnAssocReq(_adapter *padapter, union recv_frame *precv_frame)
#endif /* CONFIG_IEEE80211W */
{
/* .3-(1) report sta add event */
- report_add_sta_event(padapter, pstat->hwaddr, pstat->aid);
+ report_add_sta_event(padapter, pstat->hwaddr);
}
#ifdef CONFIG_IEEE80211W
if (pstat->bpairwise_key_installed == _TRUE && padapter->securitypriv.binstallBIPkey == _TRUE) {
@@ -3099,7 +3122,7 @@ unsigned int OnDeAuth(_adapter *padapter, union recv_frame *precv_frame)
if ( 0 == ignore_received_deauth )
{
- receive_disconnect(padapter, GetAddr2Ptr(pframe), reason);
+ receive_disconnect(padapter, GetAddr2Ptr(pframe), reason, _FALSE);
}
}
pmlmepriv->LinkDetectInfo.bBusyTraffic = _FALSE;
@@ -3176,7 +3199,7 @@ unsigned int OnDisassoc(_adapter *padapter, union recv_frame *precv_frame)
DBG_871X_LEVEL(_drv_always_, FUNC_ADPT_FMT" reason=%u, ta=%pM\n"
, FUNC_ADPT_ARG(padapter), reason, GetAddr2Ptr(pframe));
- receive_disconnect(padapter, GetAddr2Ptr(pframe), reason);
+ receive_disconnect(padapter, GetAddr2Ptr(pframe), reason, _FALSE);
}
pmlmepriv->LinkDetectInfo.bBusyTraffic = _FALSE;
return _SUCCESS;
@@ -7487,6 +7510,47 @@ s32 dump_mgntframe_and_wait_ack(_adapter *padapter, struct xmit_frame *pmgntfram
#endif //!CONFIG_XMIT_ACK
}
+s32 dump_mgntframe_and_wait_ack_timeout(_adapter *padapter, struct xmit_frame *pmgntframe, int timeout_ms)
+{
+#ifdef CONFIG_XMIT_ACK
+ static u8 seq_no = 0;
+ s32 ret = _FAIL;
+ struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
+ #ifdef CONFIG_CONCURRENT_MODE
+ if (padapter->pbuddy_adapter && !padapter->isprimary)
+ pxmitpriv = &(padapter->pbuddy_adapter->xmitpriv);
+ #endif
+
+ if (RTW_CANNOT_RUN(padapter)) {
+ rtw_free_xmitbuf(&padapter->xmitpriv, pmgntframe->pxmitbuf);
+ rtw_free_xmitframe(&padapter->xmitpriv, pmgntframe);
+ return -1;
+ }
+
+ _enter_critical_mutex(&pxmitpriv->ack_tx_mutex, NULL);
+ pxmitpriv->ack_tx = _TRUE;
+ pxmitpriv->seq_no = seq_no++;
+ pmgntframe->ack_report = 1;
+ rtw_sctx_init(&(pxmitpriv->ack_tx_ops), timeout_ms);
+ if (rtw_hal_mgnt_xmit(padapter, pmgntframe) == _SUCCESS) {
+#ifdef CONFIG_XMIT_ACK_POLLING
+ ret = rtw_ack_tx_polling(pxmitpriv, timeout_ms);
+#else
+ ret = rtw_sctx_wait(&(pxmitpriv->ack_tx_ops), __func__);
+#endif
+ }
+
+ pxmitpriv->ack_tx = _FALSE;
+ _exit_critical_mutex(&pxmitpriv->ack_tx_mutex, NULL);
+
+ return ret;
+#else //!CONFIG_XMIT_ACK
+ dump_mgntframe(padapter, pmgntframe);
+ rtw_msleep_os(50);
+ return _SUCCESS;
+#endif //!CONFIG_XMIT_ACK
+}
+
int update_hidden_ssid(u8 *ies, u32 ies_len, u8 hidden_ssid_mode)
{
u8 *ssid_ie;
@@ -9937,6 +10001,62 @@ inline void issue_addba_rsp(_adapter *adapter, unsigned char *ra, u8 tid, u16 st
}
/**
+ * issue_addba_rsp_wait_ack - TX ADDBA_RESP and wait ack
+ * @adapter: the adapter to TX
+ * @ra: receiver address
+ * @tid: tid
+ * @status: status code
+ * @size: the announced AMPDU buffer size
+ * @try_cnt: the maximal TX count to try
+ * @wait_ms: == 0 means that there is no need to wait ack through C2H_CCX_TX_RPT
+ * > 0 means you want to wait ack through C2H_CCX_TX_RPT, and the value of wait_ms means the interval between each TX
+ */
+inline u8 issue_addba_rsp_wait_ack(_adapter *adapter, unsigned char *ra, u8 tid, u16 status, u8 size, int try_cnt, int wait_ms)
+{
+ int ret = _FAIL;
+ int i = 0;
+ u32 start = rtw_get_current_time();
+
+ if (rtw_rfctl_is_tx_blocked_by_cac(adapter_to_rfctl(adapter)))
+ goto exit;
+
+ do {
+ ret = issue_action_ba(adapter, ra, RTW_WLAN_ACTION_ADDBA_RESP
+ , tid
+ , size
+ , status
+ , 0 /* unused */
+ , _TRUE
+ );
+
+ i++;
+
+ if (RTW_CANNOT_RUN(adapter))
+ break;
+
+ if (i < try_cnt && wait_ms > 0 && ret == _FAIL)
+ rtw_msleep_os(wait_ms);
+
+ } while ((i < try_cnt) && ((ret == _FAIL) || (wait_ms == 0)));
+
+ if (ret != _FAIL) {
+ ret = _SUCCESS;
+ #ifndef DBG_XMIT_ACK
+ /* goto exit; */
+ #endif
+ }
+
+ if (try_cnt && wait_ms) {
+ DBG_871X(FUNC_ADPT_FMT" ra="MAC_FMT" tid=%u%s, %d/%d in %u ms\n"
+ , FUNC_ADPT_ARG(adapter), MAC_ARG(ra), tid
+ , ret == _SUCCESS?", acked":"", i, try_cnt, rtw_get_passing_time_ms(start));
+ }
+
+exit:
+ return ret;
+}
+
+/**
* issue_del_ba - TX DELBA
* @adapter: the adapter to TX
* @ra: receiver address
@@ -10571,8 +10691,7 @@ u8 collect_bss_info(_adapter *padapter, union recv_frame *precv_frame, WLAN_BSSI
bssid->PhyInfo.SignalQuality = precv_frame->u.hdr.attrib.phy_info.SignalQuality;//in percentage
bssid->PhyInfo.SignalStrength = precv_frame->u.hdr.attrib.phy_info.SignalStrength;//in percentage
#ifdef CONFIG_ANTENNA_DIVERSITY
- //rtw_hal_get_hwreg(padapter, HW_VAR_CURRENT_ANTENNA, (u8 *)(&bssid->PhyInfo.Optimum_antenna));
- rtw_hal_get_def_var(padapter, HAL_DEF_CURRENT_ANTENNA, &bssid->PhyInfo.Optimum_antenna);
+ rtw_hal_get_odm_var(padapter, HAL_ODM_ANTDIV_SELECT, &(bssid->PhyInfo.Optimum_antenna), NULL);
#endif
// checking SSID
@@ -10985,7 +11104,7 @@ void start_clnt_assoc(_adapter* padapter)
set_link_timer(pmlmeext, REASSOC_TO);
}
-unsigned int receive_disconnect(_adapter *padapter, unsigned char *MacAddr, unsigned short reason)
+unsigned int receive_disconnect(_adapter *padapter, unsigned char *MacAddr, unsigned short reason, u8 locally_generated)
{
struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
@@ -10997,16 +11116,12 @@ unsigned int receive_disconnect(_adapter *padapter, unsigned char *MacAddr, unsi
if((pmlmeinfo->state&0x03) == WIFI_FW_STATION_STATE)
{
- if (pmlmeinfo->state & WIFI_FW_ASSOC_SUCCESS)
- {
- pmlmeinfo->state = WIFI_FW_NULL_STATE;
- report_del_sta_event(padapter, MacAddr, reason, _TRUE);
-
- }
- else if (pmlmeinfo->state & WIFI_FW_LINKING_STATE)
- {
- pmlmeinfo->state = WIFI_FW_NULL_STATE;
- report_join_res(padapter, -2);
+ if (pmlmeinfo->state & WIFI_FW_ASSOC_SUCCESS) {
+ if (report_del_sta_event(padapter, MacAddr, reason, _TRUE, locally_generated) != _FAIL)
+ pmlmeinfo->state = WIFI_FW_NULL_STATE;
+ } else if (pmlmeinfo->state & WIFI_FW_LINKING_STATE) {
+ if (report_join_res(padapter, -2) != _FAIL)
+ pmlmeinfo->state = WIFI_FW_NULL_STATE;
} else
DBG_871X(FUNC_ADPT_FMT" - End to Disconnect\n", FUNC_ADPT_ARG(padapter));
}
@@ -11417,7 +11532,7 @@ void report_surveydone_event(_adapter *padapter)
}
-void report_join_res(_adapter *padapter, int res)
+u32 report_join_res(_adapter *padapter, int res)
{
struct cmd_obj *pcmd_obj;
u8 *pevtcmd;
@@ -11427,17 +11542,16 @@ void report_join_res(_adapter *padapter, int res)
struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
struct cmd_priv *pcmdpriv = &padapter->cmdpriv;
+ u32 ret = _FAIL;
if ((pcmd_obj = (struct cmd_obj*)rtw_zmalloc(sizeof(struct cmd_obj))) == NULL)
- {
- return;
- }
+ goto exit;
cmdsz = (sizeof(struct joinbss_event) + sizeof(struct C2HEvent_Header));
- if ((pevtcmd = (u8*)rtw_zmalloc(cmdsz)) == NULL)
- {
+ pevtcmd = (u8 *)rtw_zmalloc(cmdsz);
+ if (pevtcmd == NULL) {
rtw_mfree((u8 *)pcmd_obj, sizeof(struct cmd_obj));
- return;
+ goto exit;
}
_rtw_init_listhead(&pcmd_obj->list);
@@ -11464,10 +11578,10 @@ void report_join_res(_adapter *padapter, int res)
rtw_joinbss_event_prehandle(padapter, (u8 *)&pjoinbss_evt->network);
- rtw_enqueue_cmd(pcmdpriv, pcmd_obj);
-
- return;
+ ret = rtw_enqueue_cmd(pcmdpriv, pcmd_obj);
+exit:
+ return ret;
}
void report_wmm_edca_update(_adapter *padapter)
@@ -11516,7 +11630,7 @@ void report_wmm_edca_update(_adapter *padapter)
}
-void report_del_sta_event(_adapter *padapter, unsigned char *MacAddr, unsigned short reason, bool enqueue)
+u32 report_del_sta_event(_adapter *padapter, unsigned char *MacAddr, unsigned short reason, bool enqueue, u8 locally_generated)
{
struct cmd_obj *pcmd_obj;
u8 *pevtcmd;
@@ -11551,6 +11665,7 @@ void report_del_sta_event(_adapter *padapter, unsigned char *MacAddr, unsigned s
else
mac_id = (-1);
pdel_sta_evt->mac_id = mac_id;
+ pdel_sta_evt->locally_generated = locally_generated;
if (!enqueue) {
/* do directly */
@@ -11580,10 +11695,10 @@ exit:
DBG_871X(FUNC_ADPT_FMT" "MAC_FMT" mac_id=%d, enqueue:%d, res:%u\n"
, FUNC_ADPT_ARG(padapter), MAC_ARG(MacAddr), mac_id, enqueue, res);
- return;
+ return res;
}
-void report_add_sta_event(_adapter *padapter, unsigned char* MacAddr, int cam_idx)
+void report_add_sta_event(_adapter *padapter, unsigned char *MacAddr)
{
struct cmd_obj *pcmd_obj;
u8 *pevtcmd;
@@ -11621,7 +11736,6 @@ void report_add_sta_event(_adapter *padapter, unsigned char* MacAddr, int cam_id
padd_sta_evt = (struct stassoc_event*)(pevtcmd + sizeof(struct C2HEvent_Header));
_rtw_memcpy((unsigned char *)(&(padd_sta_evt->macaddr)), MacAddr, ETH_ALEN);
- padd_sta_evt->cam_id = cam_idx;
DBG_871X("report_add_sta_event: add STA\n");
@@ -11814,22 +11928,6 @@ static void rtw_mlmeext_disconnect(_adapter *padapter)
//set_opmode_cmd(padapter, infra_client_with_mlme);
-#if 1
- /*
- * For safety, prevent from keeping macid sleep.
- * If we can sure all power mode enter/leave are paired,
- * this check can be removed.
- * Lucas@20131113
- */
- /* wakeup macid after disconnect. */
- {
- struct sta_info *psta;
- psta = rtw_get_stainfo(&padapter->stapriv, get_my_bssid(pnetwork));
- if (psta)
- rtw_hal_macid_wakeup(padapter, psta->mac_id);
- }
-#endif
-
rtw_hal_set_hwreg(padapter, HW_VAR_MLME_DISCONNECT, 0);
rtw_hal_set_hwreg(padapter, HW_VAR_BSSID, null_addr);
@@ -11960,8 +12058,6 @@ void mlmeext_joinbss_event_callback(_adapter *padapter, int join_res)
psta = rtw_get_stainfo(pstapriv, cur_network->MacAddress);
if (psta) //only for infra. mode
{
- pmlmeinfo->FW_sta_info[psta->mac_id].psta = psta;
-
//DBG_871X("set_sta_rate\n");
psta->wireless_mode = pmlmeext->cur_wireless_mode;
@@ -12036,28 +12132,16 @@ void mlmeext_sta_add_event_callback(_adapter *padapter, struct sta_info *psta)
correct_TSF(padapter, pmlmeext);
//start beacon
- if(send_beacon(padapter)==_FAIL)
- {
- pmlmeinfo->FW_sta_info[psta->mac_id].status = 0;
-
- pmlmeinfo->state ^= WIFI_FW_ADHOC_STATE;
-
- return;
- }
+ if (send_beacon(padapter) == _FAIL)
+ rtw_warn_on(1);
pmlmeinfo->state |= WIFI_FW_ASSOC_SUCCESS;
-
}
join_type = 2;
rtw_hal_set_hwreg(padapter, HW_VAR_MLME_JOIN, (u8 *)(&join_type));
}
- pmlmeinfo->FW_sta_info[psta->mac_id].psta = psta;
-
- psta->bssratelen = rtw_get_rateset_len(pmlmeinfo->FW_sta_info[psta->mac_id].SupportedRates);
- _rtw_memcpy(psta->bssrateset, pmlmeinfo->FW_sta_info[psta->mac_id].SupportedRates, psta->bssratelen);
-
//update adhoc sta_info
update_sta_info(padapter, psta);
@@ -12093,9 +12177,8 @@ void _linked_info_dump(_adapter *padapter)
int i;
struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
+ HAL_DATA_TYPE *HalData = GET_HAL_DATA(padapter);
int UndecoratedSmoothedPWDB = 0;
- struct dvobj_priv *dvobj = adapter_to_dvobj(padapter);
- struct macid_ctl_t *macid_ctl = dvobj_to_macidctl(dvobj);
if(padapter->bLinkInfoDump){
@@ -12130,19 +12213,14 @@ void _linked_info_dump(_adapter *padapter)
_exit_critical_bh(&pstapriv->asoc_list_lock, &irqL);
}
- for(i=0; i<macid_ctl->num; i++)
- {
- if(rtw_macid_is_used(macid_ctl, i)
- && !rtw_macid_is_bmc(macid_ctl, i) /* skip bc/mc sta */
- ) {
- //============ tx info ============
- rtw_hal_get_def_var(padapter, HW_DEF_RA_INFO_DUMP, &i);
- }
- }
- rtw_hal_set_odm_var(padapter, HAL_ODM_RX_INFO_DUMP, NULL, _FALSE);
+ /*============ tx info ============ */
+ rtw_hal_get_def_var(padapter, HW_DEF_RA_INFO_DUMP, RTW_DBGDUMP);
+
+ rtw_hal_set_odm_var(padapter, HAL_ODM_RX_INFO_DUMP, RTW_DBGDUMP, _FALSE);
+
}
-
+
}
void rtw_delba_check(_adapter *padapter, struct sta_info *psta, u8 from_timer)
@@ -12236,6 +12314,37 @@ u8 chk_ap_is_alive(_adapter *padapter, struct sta_info *psta)
return ret;
}
+u8 chk_adhoc_peer_is_alive(struct sta_info *psta)
+{
+ u8 ret = _TRUE;
+
+ #ifdef DBG_EXPIRATION_CHK
+ DBG_871X("sta:"MAC_FMT", rssi:%d, rx:"STA_PKTS_FMT", beacon:%llu, probersp_to_self:%llu"
+ /*", probersp_bm:%llu, probersp_uo:%llu, probereq:%llu, BI:%u"*/
+ ", expire_to:%u\n"
+ , MAC_ARG(psta->hwaddr)
+ , psta->rssi_stat.UndecoratedSmoothedPWDB
+ , STA_RX_PKTS_DIFF_ARG(psta)
+ , psta->sta_stats.rx_beacon_pkts - psta->sta_stats.last_rx_beacon_pkts
+ , psta->sta_stats.rx_probersp_pkts - psta->sta_stats.last_rx_probersp_pkts
+ /*, psta->sta_stats.rx_probersp_bm_pkts - psta->sta_stats.last_rx_probersp_bm_pkts
+ , psta->sta_stats.rx_probersp_uo_pkts - psta->sta_stats.last_rx_probersp_uo_pkts
+ , psta->sta_stats.rx_probereq_pkts - psta->sta_stats.last_rx_probereq_pkts
+ , pmlmeinfo->bcn_interval*/
+ , psta->expire_to
+ );
+ #endif
+
+ if (sta_rx_data_pkts(psta) == sta_last_rx_data_pkts(psta)
+ && sta_rx_beacon_pkts(psta) == sta_last_rx_beacon_pkts(psta)
+ && sta_rx_probersp_pkts(psta) == sta_last_rx_probersp_pkts(psta))
+ ret = _FALSE;
+
+ sta_update_last_rx_pkts(psta);
+
+ return ret;
+}
+
#ifdef CONFIG_TDLS
u8 chk_tdls_peer_sta_is_alive(_adapter *padapter, struct sta_info *psta)
{
@@ -12248,10 +12357,10 @@ u8 chk_tdls_peer_sta_is_alive(_adapter *padapter, struct sta_info *psta)
void linked_status_chk_tdls(_adapter *padapter)
{
-struct candidate_pool{
- struct sta_info *psta;
- u8 addr[ETH_ALEN];
-};
+ struct candidate_pool {
+ struct sta_info *psta;
+ u8 addr[ETH_ALEN];
+ };
struct sta_priv *pstapriv = &padapter->stapriv;
_irqL irqL;
u8 ack_chk;
@@ -12259,8 +12368,10 @@ struct candidate_pool{
int i, num_teardown=0, num_checkalive=0;
_list *plist, *phead;
struct tdls_txmgmt txmgmt;
- struct candidate_pool checkalive[NUM_STA];
- struct candidate_pool teardown[NUM_STA];
+ struct candidate_pool checkalive[MAX_ALLOWED_TDLS_STA_NUM];
+ struct candidate_pool teardown[MAX_ALLOWED_TDLS_STA_NUM];
+ u8 tdls_sta_max = _FALSE;
+
#define ALIVE_MIN 2
#define ALIVE_MAX 5
@@ -12305,8 +12416,16 @@ struct candidate_pool{
}
psta->sta_stats.last_rx_data_pkts = psta->sta_stats.rx_data_pkts;
psta->sta_stats.last_rx_tdls_disc_rsp_pkts = psta->sta_stats.rx_tdls_disc_rsp_pkts;
+
+ if ((num_checkalive >= MAX_ALLOWED_TDLS_STA_NUM) || (num_teardown >= MAX_ALLOWED_TDLS_STA_NUM)) {
+ tdls_sta_max = _TRUE;
+ break;
+ }
}
}
+
+ if (tdls_sta_max == _TRUE)
+ break;
}
_exit_critical_bh(&pstapriv->sta_hash_lock, &irqL);
@@ -12471,7 +12590,7 @@ void linked_status_chk(_adapter *padapter, u8 from_timer)
DBG_871X_LEVEL(_drv_always_, FUNC_ADPT_FMT" disconnect or roaming\n",
FUNC_ADPT_ARG(padapter));
receive_disconnect(padapter, pmlmeinfo->network.MacAddress
- , WLAN_REASON_EXPIRATION_CHK);
+ , WLAN_REASON_EXPIRATION_CHK, _FALSE);
return;
}
} else {
@@ -12487,43 +12606,48 @@ void linked_status_chk(_adapter *padapter, u8 from_timer)
} //end of if ((psta = rtw_get_stainfo(pstapriv, passoc_res->network.MacAddress)) != NULL)
- }
- else if (is_client_associated_to_ibss(padapter))
- {
- //linked IBSS mode
- //for each assoc list entry to check the rx pkt counter
- for (i = IBSS_START_MAC_ID; i < NUM_STA; i++)
- {
- if (pmlmeinfo->FW_sta_info[i].status == 1)
- {
- psta = pmlmeinfo->FW_sta_info[i].psta;
+ } else if (is_client_associated_to_ibss(padapter)) {
+ _irqL irqL;
+ _list *phead, *plist, dlist;
- if(NULL==psta) continue;
+ _rtw_init_listhead(&dlist);
- if (pmlmeinfo->FW_sta_info[i].rx_pkt == sta_rx_pkts(psta))
- {
+ _enter_critical_bh(&pstapriv->sta_hash_lock, &irqL);
- if(pmlmeinfo->FW_sta_info[i].retry<3)
- {
- pmlmeinfo->FW_sta_info[i].retry++;
- }
- else
- {
- pmlmeinfo->FW_sta_info[i].retry = 0;
- pmlmeinfo->FW_sta_info[i].status = 0;
- report_del_sta_event(padapter, psta->hwaddr, WLAN_REASON_EXPIRATION_CHK, _TRUE);
- }
- }
+ for (i = 0; i < NUM_STA; i++) {
+
+ phead = &(pstapriv->sta_hash[i]);
+ plist = get_next(phead);
+ while ((rtw_end_of_queue_search(phead, plist)) == _FALSE) {
+ psta = LIST_CONTAINOR(plist, struct sta_info, hash_list);
+ plist = get_next(plist);
+
+ if (is_broadcast_mac_addr(psta->hwaddr))
+ continue;
+
+ if (chk_adhoc_peer_is_alive(psta) || !psta->expire_to)
+ psta->expire_to = pstapriv->adhoc_expire_to;
else
- {
- pmlmeinfo->FW_sta_info[i].retry = 0;
- pmlmeinfo->FW_sta_info[i].rx_pkt = (u32)sta_rx_pkts(psta);
+ psta->expire_to--;
+
+ if (psta->expire_to <= 0) {
+ rtw_list_delete(&psta->list);
+ rtw_list_insert_tail(&psta->list, &dlist);
}
}
}
- //set_link_timer(pmlmeext, DISCONNECT_TO);
+ _exit_critical_bh(&pstapriv->sta_hash_lock, &irqL);
+ plist = get_next(&dlist);
+ while (rtw_end_of_queue_search(&dlist, plist) == _FALSE) {
+ psta = LIST_CONTAINOR(plist, struct sta_info, list);
+ plist = get_next(plist);
+ rtw_list_delete(&psta->list);
+ DBG_871X(FUNC_ADPT_FMT" ibss expire "MAC_FMT"\n"
+ , FUNC_ADPT_ARG(padapter), MAC_ARG(psta->hwaddr));
+ report_del_sta_event(padapter, psta->hwaddr, WLAN_REASON_EXPIRATION_CHK, from_timer ? _TRUE : _FALSE, _FALSE);
+ }
}
}
@@ -12613,68 +12737,6 @@ void link_timer_hdl(_adapter *padapter)
issue_assocreq(padapter);
set_link_timer(pmlmeext, REASSOC_TO);
}
-#if 0
- else if (is_client_associated_to_ap(padapter))
- {
- //linked infrastructure client mode
- if ((psta = rtw_get_stainfo(pstapriv, pmlmeinfo->network.MacAddress)) != NULL)
- {
- /*to monitor whether the AP is alive or not*/
- if (rx_pkt == psta->sta_stats.rx_pkts)
- {
- receive_disconnect(padapter, pmlmeinfo->network.MacAddress);
- return;
- }
- else
- {
- rx_pkt = psta->sta_stats.rx_pkts;
- set_link_timer(pmlmeext, DISCONNECT_TO);
- }
-
- //update the EDCA paramter according to the Tx/RX mode
- update_EDCA_param(padapter);
-
- /*to send the AP a nulldata if no frame is xmitted in order to keep alive*/
- if (pmlmeinfo->link_count++ == 0)
- {
- tx_cnt = pxmitpriv->tx_pkts;
- }
- else if ((pmlmeinfo->link_count & 0xf) == 0)
- {
- if (tx_cnt == pxmitpriv->tx_pkts)
- {
- issue_nulldata_in_interrupt(padapter, NULL, 0);
- }
-
- tx_cnt = pxmitpriv->tx_pkts;
- }
- } //end of if ((psta = rtw_get_stainfo(pstapriv, passoc_res->network.MacAddress)) != NULL)
- }
- else if (is_client_associated_to_ibss(padapter))
- {
- //linked IBSS mode
- //for each assoc list entry to check the rx pkt counter
- for (i = IBSS_START_MAC_ID; i < NUM_STA; i++)
- {
- if (pmlmeinfo->FW_sta_info[i].status == 1)
- {
- psta = pmlmeinfo->FW_sta_info[i].psta;
-
- if (pmlmeinfo->FW_sta_info[i].rx_pkt == psta->sta_stats.rx_pkts)
- {
- pmlmeinfo->FW_sta_info[i].status = 0;
- report_del_sta_event(padapter, psta->hwaddr);
- }
- else
- {
- pmlmeinfo->FW_sta_info[i].rx_pkt = psta->sta_stats.rx_pkts;
- }
- }
- }
-
- set_link_timer(pmlmeext, DISCONNECT_TO);
- }
-#endif
return;
}
@@ -12760,7 +12822,7 @@ void clnt_sa_query_timeout(_adapter *padapter)
{
rtw_disassoc_cmd(padapter, 0, _TRUE);
- rtw_indicate_disconnect(padapter);
+ rtw_indicate_disconnect(padapter, 0, _FALSE);
rtw_free_assoc_resources(padapter, 1);
DBG_871X("SA query timeout client disconnect\n");
@@ -13493,6 +13555,8 @@ static void sitesurvey_res_reset(_adapter *adapter, struct sitesurvey_parm *parm
ss->bss_cnt = 0;
ss->channel_idx = 0;
+ ss->igi_scan = 0;
+ ss->igi_before_scan = 0;
#ifdef CONFIG_SCAN_BACKOP
ss->scan_cnt = 0;
#endif
@@ -13811,32 +13875,59 @@ u8 sitesurvey_ps_annc(struct dvobj_priv *dvobj, bool ps)
return ps_anc;
}
-void sitesurvey_set_igi(_adapter *adapter, bool enter)
+void sitesurvey_set_igi(_adapter *adapter)
{
+ struct mlme_ext_priv *mlmeext = &adapter->mlmeextpriv;
+ struct ss_res *ss = &mlmeext->sitesurvey_res;
u8 igi;
#ifdef CONFIG_P2P
struct wifidirect_info *pwdinfo = &adapter->wdinfo;
#endif
- if (enter) {
-#ifdef CONFIG_P2P
-#ifdef CONFIG_IOCTL_CFG80211
+ switch (mlmeext_scan_state(mlmeext)) {
+ case SCAN_ENTER:
+ #ifdef CONFIG_P2P
+ #ifdef CONFIG_IOCTL_CFG80211
if (adapter_wdev_data(adapter)->p2p_enabled == _TRUE && pwdinfo->driver_interface == DRIVER_CFG80211)
igi = 0x30;
else
-#endif /* CONFIG_IOCTL_CFG80211 */
+ #endif /* CONFIG_IOCTL_CFG80211 */
if (!rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE))
igi = 0x28;
else
-#endif /* CONFIG_P2P */
+ #endif /* CONFIG_P2P */
igi = 0x1e;
- } else {
- igi = 0xff; /* restore RX GAIN */
- }
- rtw_hal_set_odm_var(adapter, HAL_ODM_INITIAL_GAIN, &igi, _FALSE);
+ /* record IGI status */
+ ss->igi_scan = igi;
+ rtw_hal_get_odm_var(adapter, HAL_ODM_INITIAL_GAIN, &ss->igi_before_scan, NULL);
+
+ /* disable DIG and set IGI for scan */
+ rtw_hal_set_odm_var(adapter, HAL_ODM_INITIAL_GAIN, &igi, _FALSE);
+ break;
+ case SCAN_COMPLETE:
+ case SCAN_TO_P2P_LISTEN:
+ /* enable DIG and restore IGI */
+ igi = 0xff;
+ rtw_hal_set_odm_var(adapter, HAL_ODM_INITIAL_GAIN, &igi, _FALSE);
+ break;
+#ifdef CONFIG_SCAN_BACKOP
+ case SCAN_BACKING_OP:
+ /* write IGI for op channel when DIG is not enabled */
+ ODM_Write_DIG(GET_ODM(adapter), ss->igi_before_scan);
+ break;
+ case SCAN_LEAVE_OP:
+ /* write IGI for scan when DIG is not enabled */
+ ODM_Write_DIG(GET_ODM(adapter), ss->igi_scan);
+ break;
+#endif /* CONFIG_SCAN_BACKOP */
+ default:
+ rtw_warn_on(1);
+ break;
+ }
}
+
u8 sitesurvey_cmd_hdl(_adapter *padapter, u8 *pbuf)
{
struct sitesurvey_parm *pparm = (struct sitesurvey_parm *)pbuf;
@@ -13910,13 +14001,12 @@ operation_by_state:
* HW register and DM setting for enter scan
*/
- /* config the initial gain under scanning */
- sitesurvey_set_igi(padapter, 1);
-
- /* disable dynamic functions, such as high power, DIG */
rtw_phydm_ability_backup(padapter);
- rtw_phydm_func_for_offchannel(padapter);
+
+ sitesurvey_set_igi(padapter);
+ /* config dynamic functions for off channel */
+ rtw_phydm_func_for_offchannel(padapter);
/* set MSR to no link state */
Set_MSR(padapter, _HW_STATE_NOLINK_);
val8 = 1; /* under site survey */
@@ -14039,7 +14129,7 @@ operation_by_state:
rtw_hal_set_hwreg(padapter, HW_VAR_MLME_SITESURVEY, (u8 *)(&val8));
if (mlmeext_chk_scan_backop_flags(pmlmeext, SS_BACKOP_PS_ANNC)) {
- sitesurvey_set_igi(padapter, 0);
+ sitesurvey_set_igi(padapter);
sitesurvey_ps_annc(adapter_to_dvobj(padapter), 0);
}
@@ -14097,10 +14187,8 @@ operation_by_state:
* HW register and DM setting for enter scan
*/
- if (mlmeext_chk_scan_backop_flags(pmlmeext, SS_BACKOP_PS_ANNC)) {
- /* config the initial gain under scanning */
- sitesurvey_set_igi(padapter, 1);
- }
+ if (mlmeext_chk_scan_backop_flags(pmlmeext, SS_BACKOP_PS_ANNC))
+ sitesurvey_set_igi(padapter);
/* set MSR to no link state */
Set_MSR(padapter, _HW_STATE_NOLINK_);
@@ -14140,7 +14228,7 @@ operation_by_state:
/* turn on phy-dynamic functions */
rtw_phydm_ability_restore(padapter);
- sitesurvey_set_igi(padapter, 0);
+ sitesurvey_set_igi(padapter);
mlmeext_set_scan_state(pmlmeext, SCAN_P2P_LISTEN);
_set_timer(&pwdinfo->find_phase_timer, (u32)((u32)pwdinfo->listen_dwell * 100));
@@ -14181,7 +14269,7 @@ operation_by_state:
/* turn on phy-dynamic functions */
rtw_phydm_ability_restore(padapter);
- sitesurvey_set_igi(padapter, 0);
+ sitesurvey_set_igi(padapter);
sitesurvey_ps_annc(adapter_to_dvobj(padapter), 0);
@@ -14398,6 +14486,48 @@ u8 add_ba_hdl(_adapter *padapter, unsigned char *pbuf)
}
+u8 add_ba_rsp_hdl(_adapter *padapter, unsigned char *pbuf)
+{
+ struct addBaRsp_parm *pparm = (struct addBaRsp_parm *)pbuf;
+ u8 ret = _TRUE, i = 0, try_cnt = 3, wait_ms = 50;
+ struct recv_reorder_ctrl *preorder_ctrl;
+ struct sta_priv *pstapriv = &padapter->stapriv;
+ struct sta_info *psta;
+
+ psta = rtw_get_stainfo(pstapriv, pparm->addr);
+ if (!psta)
+ goto exit;
+
+ preorder_ctrl = &psta->recvreorder_ctrl[pparm->tid];
+ ret = issue_addba_rsp_wait_ack(padapter, pparm->addr, pparm->tid, pparm->status, pparm->size, 3, 50);
+
+ #ifdef CONFIG_UPDATE_INDICATE_SEQ_WHILE_PROCESS_ADDBA_REQ
+ /* status = 0 means accept this addba req, so update indicate seq = start_seq under this compile flag */
+ if (pparm->status == 0) {
+ preorder_ctrl->indicate_seq = pparm->start_seq;
+ #ifdef DBG_RX_SEQ
+ DBG_871X("DBG_RX_SEQ %s:%d IndicateSeq: %d, start_seq: %d\n", __func__, __LINE__,
+ preorder_ctrl->indicate_seq, pparm->start_seq);
+ #endif
+ }
+ #else
+ preorder_ctrl->indicate_seq = 0xffff;
+ #endif
+
+ /*
+ * status = 0 means accept this addba req
+ * status = 37 means reject this addba req
+ */
+ if (pparm->status == 0) {
+ preorder_ctrl->enable = _TRUE;
+ preorder_ctrl->ampdu_size = pparm->size;
+ } else if (pparm->status == 37)
+ preorder_ctrl->enable = _FALSE;
+
+exit:
+ return H2C_SUCCESS;
+}
+
u8 chk_bmc_sleepq_cmd(_adapter* padapter)
{
struct cmd_obj *ph2c;
@@ -14940,7 +15070,7 @@ connect_allow_hdl:
&& check_fwstate(mlme, WIFI_ASOC_STATE)
) {
rtw_disassoc_cmd(iface, 500, _FALSE);
- rtw_indicate_disconnect(iface);
+ rtw_indicate_disconnect(iface, 0, _FALSE);
rtw_free_assoc_resources(iface, 1);
}
}
@@ -15145,6 +15275,7 @@ u8 set_chplan_hdl(_adapter *padapter, unsigned char *pbuf)
return H2C_PARAMETERS_ERROR;
}
+ mlme->country_ent = setChannelPlan_param->country_ent;
mlme->ChannelPlan = setChannelPlan_param->channel_plan;
pmlmeext->max_chan_nums = init_channel_set(padapter, setChannelPlan_param->channel_plan, pmlmeext->channel_set);
@@ -15198,7 +15329,7 @@ u8 set_csa_hdl(_adapter *padapter, unsigned char *pbuf)
rtw_hal_set_hwreg(padapter, HW_VAR_TXPAUSE, &gval8);
rtw_disassoc_cmd(padapter, 0, _FALSE);
- rtw_indicate_disconnect(padapter);
+ rtw_indicate_disconnect(iface, 0, _FALSE);
rtw_free_assoc_resources(padapter, 1);
rtw_free_network_queue(padapter, _TRUE);
@@ -15217,6 +15348,7 @@ u8 tdls_hdl(_adapter *padapter, unsigned char *pbuf)
{
#ifdef CONFIG_TDLS
_irqL irqL;
+ HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);
struct tdls_info *ptdlsinfo = &padapter->tdlsinfo;
#ifdef CONFIG_TDLS_CH_SW
struct tdls_ch_switch *pchsw_info = &ptdlsinfo->chsw_info;
@@ -15229,6 +15361,8 @@ u8 tdls_hdl(_adapter *padapter, unsigned char *pbuf)
struct tdls_txmgmt txmgmt;
u32 setchtime, resp_sleep = 0, wait_time;
u8 zaddr[ETH_ALEN] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
+ u8 ret;
+ u8 doiqk;
if (!pbuf)
return H2C_PARAMETERS_ERROR;
@@ -15242,7 +15376,7 @@ u8 tdls_hdl(_adapter *padapter, unsigned char *pbuf)
return H2C_REJECTED;
}
} else {
- if (!(option == TDLS_RS_RCR || option == TDLS_CH_SW_BACK))
+ if (!(option == TDLS_RS_RCR))
return H2C_REJECTED;
}
@@ -15262,7 +15396,6 @@ u8 tdls_hdl(_adapter *padapter, unsigned char *pbuf)
rtw_hal_set_hwreg(padapter, HW_VAR_TDLS_WRCR, 0);
DBG_871X("Created Direct Link with "MAC_FMT"\n", MAC_ARG(ptdls_sta->hwaddr));
- pmlmeinfo->FW_sta_info[ptdls_sta->mac_id].psta = ptdls_sta;
/* Set TDLS sta rate. */
/* Update station supportRate */
rtw_hal_update_sta_rate_mask(padapter, ptdls_sta);
@@ -15308,70 +15441,125 @@ u8 tdls_hdl(_adapter *padapter, unsigned char *pbuf)
txmgmt.status_code = 0;
_rtw_memcpy(txmgmt.peer, ptdls_sta->hwaddr, ETH_ALEN);
- issue_nulldata(padapter, NULL, 1, 0, 0);
+ issue_nulldata(padapter, NULL, 1, 3, 3);
- DBG_871X("issue tdls channel switch response\n");
- issue_tdls_ch_switch_rsp(padapter, &txmgmt, _FALSE);
- resp_sleep = 5;
- rtw_msleep_os(resp_sleep);
+ DBG_871X("[TDLS ] issue tdls channel switch response\n");
+ ret = issue_tdls_ch_switch_rsp(padapter, &txmgmt, _TRUE);
/* If we receive TDLS_CH_SW_REQ at off channel which it's target is AP's channel */
/* then we just SelectChannel to AP's channel*/
if (padapter->mlmeextpriv.cur_channel == pchsw_info->off_ch_num) {
- SelectChannel(padapter, padapter->mlmeextpriv.cur_channel);
- issue_nulldata(padapter, NULL, 0, 0, 0);
- pchsw_info->ch_sw_state &= ~(TDLS_PEER_AT_OFF_STATE);
- ATOMIC_SET(&pchsw_info->chsw_on, _FALSE);
+ rtw_tdls_cmd(padapter, ptdls_sta->hwaddr, TDLS_CH_SW_END_TO_BASE_CHNL);
break;
}
- _set_timer(&ptdls_sta->delay_timer, pmlmeinfo->bcn_interval - 40);
-
- /* Continue following actions */
-
- case TDLS_CH_SW:
- issue_nulldata(padapter, NULL, 1, 0, 0);
- _set_timer(&ptdls_sta->ch_sw_timer, (u32)(ptdls_sta->ch_switch_timeout)/1000);
+ if (ret == _SUCCESS)
+ rtw_tdls_cmd(padapter, ptdls_sta->hwaddr, TDLS_CH_SW_TO_OFF_CHNL);
+ else
+ DBG_871X("[TDLS] issue_tdls_ch_switch_rsp wait ack fail !!!!!!!!!!\n");
+
+ break;
+ case TDLS_CH_SW_PREPARE:
+ pchsw_info->ch_sw_state |= TDLS_CH_SWITCH_PREPARE_STATE;
- setchtime = rtw_systime_to_ms(rtw_get_current_time());
- SelectChannel(padapter, pchsw_info->off_ch_num);
- setchtime = rtw_systime_to_ms(rtw_get_current_time()) - setchtime;
- setchtime += resp_sleep;
+ /* to collect IQK info of off-chnl */
+ doiqk = _TRUE;
+ rtw_hal_set_hwreg(padapter, HW_VAR_DO_IQK, &doiqk);
+ set_channel_bwmode(padapter, pchsw_info->off_ch_num, pchsw_info->ch_offset, (pchsw_info->ch_offset) ? CHANNEL_WIDTH_40 : CHANNEL_WIDTH_20);
+ doiqk = _FALSE;
+ rtw_hal_set_hwreg(padapter, HW_VAR_DO_IQK, &doiqk);
- if (pmlmeext->cur_channel != rtw_get_oper_ch(padapter))
- issue_nulldata(padapter, NULL, 0, 0, 0);
- pchsw_info->ch_sw_state &= ~(TDLS_PEER_AT_OFF_STATE);
+ /* switch back to base-chnl */
+ set_channel_bwmode(padapter, pmlmeext->cur_channel, pmlmeext->cur_ch_offset, pmlmeext->cur_bwmode);
- if ((u32)ptdls_sta->ch_switch_time/1000 > setchtime)
- wait_time = (u32)ptdls_sta->ch_switch_time/1000 - setchtime;
- else
- wait_time = 0;
+ rtw_tdls_cmd(padapter, ptdls_sta->hwaddr, TDLS_CH_SW_START);
- if (wait_time > 0)
- rtw_msleep_os(wait_time);
+ pchsw_info->ch_sw_state &= ~(TDLS_CH_SWITCH_PREPARE_STATE);
+
+ break;
+ case TDLS_CH_SW_START:
+ rtw_tdls_set_ch_sw_oper_control(padapter, _TRUE);
+ break;
+ case TDLS_CH_SW_TO_OFF_CHNL:
+ issue_nulldata(padapter, NULL, 1, 3, 3);
+
+ if (!(pchsw_info->ch_sw_state & TDLS_CH_SW_INITIATOR_STATE))
+ _set_timer(&ptdls_sta->ch_sw_timer, (u32)(ptdls_sta->ch_switch_timeout) /1000);
+
+ if (rtw_tdls_do_ch_sw(padapter, ptdls_sta, TDLS_CH_SW_OFF_CHNL, pchsw_info->off_ch_num,
+ pchsw_info->ch_offset, (pchsw_info->ch_offset) ? CHANNEL_WIDTH_40 : CHANNEL_WIDTH_20, ptdls_sta->ch_switch_time) == _SUCCESS) {
+ pchsw_info->ch_sw_state &= ~(TDLS_PEER_AT_OFF_STATE);
+ if (pchsw_info->ch_sw_state & TDLS_CH_SW_INITIATOR_STATE) {
+ if (issue_nulldata_to_TDLS_peer_STA(ptdls_sta->padapter, ptdls_sta->hwaddr, 0, 1, 3) == _FAIL)
+ rtw_tdls_cmd(padapter, ptdls_sta->hwaddr, TDLS_CH_SW_TO_BASE_CHNL);
+ }
+ }
+ else {
+ u8 bcancelled;
+
+ if (!(pchsw_info->ch_sw_state & TDLS_CH_SW_INITIATOR_STATE))
+ _cancel_timer(&ptdls_sta->ch_sw_timer,&bcancelled);
+ }
+
+
+ break;
+ case TDLS_CH_SW_END:
+ case TDLS_CH_SW_END_TO_BASE_CHNL:
+ rtw_tdls_set_ch_sw_oper_control(padapter, _FALSE);
+ _cancel_timer_ex(&ptdls_sta->ch_sw_timer);
+ _cancel_timer_ex(&ptdls_sta->stay_on_base_chnl_timer);
+ _cancel_timer_ex(&ptdls_sta->ch_sw_monitor_timer);
+#if 0
+ _rtw_memset(pHalData->tdls_ch_sw_iqk_info_base_chnl, 0x00, sizeof(pHalData->tdls_ch_sw_iqk_info_base_chnl));
+ _rtw_memset(pHalData->tdls_ch_sw_iqk_info_off_chnl, 0x00, sizeof(pHalData->tdls_ch_sw_iqk_info_off_chnl));
+#endif
- issue_nulldata_to_TDLS_peer_STA(ptdls_sta->padapter, ptdls_sta->hwaddr, 0, 0, 0);
- issue_nulldata_to_TDLS_peer_STA(ptdls_sta->padapter, ptdls_sta->hwaddr, 0, 0, 0);
+ if (option == TDLS_CH_SW_END_TO_BASE_CHNL)
+ rtw_tdls_cmd(padapter, ptdls_sta->hwaddr, TDLS_CH_SW_TO_BASE_CHNL);
break;
- case TDLS_CH_SW_BACK:
+ case TDLS_CH_SW_TO_BASE_CHNL_UNSOLICITED:
+ case TDLS_CH_SW_TO_BASE_CHNL:
pchsw_info->ch_sw_state &= ~(TDLS_PEER_AT_OFF_STATE | TDLS_WAIT_CH_RSP_STATE);
- ATOMIC_SET(&pchsw_info->chsw_on, _FALSE);
- SelectChannel(padapter, padapter->mlmeextpriv.cur_channel);
- issue_nulldata(padapter, NULL, 0, 0, 0);
+
+ if (option == TDLS_CH_SW_TO_BASE_CHNL_UNSOLICITED) {
+ if (ptdls_sta != NULL) {
+ /* Send unsolicited channel switch rsp. to peer */
+ _rtw_memset(&txmgmt, 0x00, sizeof(struct tdls_txmgmt));
+ txmgmt.status_code = 0;
+ _rtw_memcpy(txmgmt.peer, ptdls_sta->hwaddr, ETH_ALEN);
+ issue_tdls_ch_switch_rsp(padapter, &txmgmt, _FALSE);
+ }
+ }
+
+ if (rtw_tdls_do_ch_sw(padapter, ptdls_sta, TDLS_CH_SW_BASE_CHNL, pmlmeext->cur_channel,
+ pmlmeext->cur_ch_offset, pmlmeext->cur_bwmode, ptdls_sta->ch_switch_time) == _SUCCESS) {
+ issue_nulldata(padapter, NULL, 0, 3, 3);
+ /* set ch sw monitor timer for responder */
+ if (!(pchsw_info->ch_sw_state & TDLS_CH_SW_INITIATOR_STATE))
+ _set_timer(&ptdls_sta->ch_sw_monitor_timer, TDLS_CH_SW_MONITOR_TIMEOUT);
+ }
+
break;
#endif
case TDLS_RS_RCR:
rtw_hal_set_hwreg(padapter, HW_VAR_TDLS_RS_RCR, 0);
- DBG_871X("wirte REG_RCR, set bit6 on\n");
+ DBG_871X("[TDLS] wirte REG_RCR, set bit6 on\n");
+ break;
+ case TDLS_TEARDOWN_STA:
+ _rtw_memset(&txmgmt, 0x00, sizeof(struct tdls_txmgmt));
+ txmgmt.status_code = 0;
+ _rtw_memcpy(txmgmt.peer, ptdls_sta->hwaddr, ETH_ALEN);
+
+ issue_tdls_teardown(padapter, &txmgmt, _TRUE);
break;
- case TDLS_TEAR_STA:
+ case TDLS_TEARDOWN_STA_LOCALLY:
#ifdef CONFIG_TDLS_CH_SW
if (_rtw_memcmp(TDLSoption->addr, pchsw_info->addr, ETH_ALEN) == _TRUE) {
pchsw_info->ch_sw_state &= ~(TDLS_CH_SW_INITIATOR_STATE |
TDLS_CH_SWITCH_ON_STATE |
TDLS_PEER_AT_OFF_STATE);
- ATOMIC_SET(&pchsw_info->chsw_on, _FALSE);
+ rtw_tdls_set_ch_sw_oper_control(padapter, _FALSE);
_rtw_memset(pchsw_info->addr, 0x00, ETH_ALEN);
}
#endif
diff --git a/rtl8188FU/core/rtw_mp.c b/rtl8188FU/core/rtw_mp.c
index 2ff5c07..e1a91cf 100755
--- a/rtl8188FU/core/rtw_mp.c
+++ b/rtl8188FU/core/rtw_mp.c
@@ -18,9 +18,7 @@
*
******************************************************************************/
#define _RTW_MP_C_
-
#include <drv_types.h>
-
#ifdef PLATFORM_FREEBSD
#include <sys/unistd.h> /* for RFHIGHPID */
#endif
@@ -30,6 +28,19 @@
#include <rtw_bt_mp.h>
#endif
+#ifdef CONFIG_MP_VHT_HW_TX_MODE
+#define CEILING_POS(X) ((X - (int)(X)) > 0 ? (int)(X + 1) : (int)(X))
+#define CEILING_NEG(X) ((X - (int)(X)) < 0 ? (int)(X - 1) : (int)(X))
+#define ceil(X) (((X) > 0) ? CEILING_POS(X) : CEILING_NEG(X))
+
+int rtfloor(float x)
+{
+int i = x - 2;
+while
+(++i <= x - 1);
+return i;
+}
+#endif
#ifdef CONFIG_MP_INCLUDED
@@ -117,7 +128,7 @@ static void _init_mp_priv_(struct mp_priv *pmp_priv)
pmp_priv->channel = 1;
pmp_priv->bandwidth = CHANNEL_WIDTH_20;
pmp_priv->prime_channel_offset = HAL_PRIME_CHNL_OFFSET_DONT_CARE;
- pmp_priv->rateidx = MPT_RATE_1M;
+ pmp_priv->rateidx = RATE_1M;
pmp_priv->txpoweridx = 0x2A;
pmp_priv->antenna_tx = ANTENNA_A;
@@ -140,6 +151,7 @@ static void _init_mp_priv_(struct mp_priv *pmp_priv)
pmp_priv->bSetRxBssid = _FALSE;
pmp_priv->bRTWSmbCfg = _FALSE;
+ pmp_priv->bloopback = _FALSE;
pnetwork = &pmp_priv->mp_network.network;
_rtw_memcpy(pnetwork->MacAddress, pmp_priv->network_macaddr, ETH_ALEN);
@@ -317,10 +329,11 @@ s32 init_mp_priv(PADAPTER padapter)
pmppriv->papdater = padapter;
pmppriv->mp_dm =0;
pmppriv->tx.stop = 1;
- pmppriv->bSetTxPower=0; //for manually set tx power
- pmppriv->bTxBufCkFail=_FALSE;
- pmppriv->pktInterval=0;
-
+ pmppriv->bSetTxPower = 0; /*for manually set tx power*/
+ pmppriv->bTxBufCkFail = _FALSE;
+ pmppriv->pktInterval = 0;
+ pmppriv->pktLength = 1000;
+
mp_init_xmit_attrib(&pmppriv->tx, padapter);
switch (padapter->registrypriv.rf_config) {
@@ -532,9 +545,9 @@ MPT_InitializeAdapter(
PHY_SetRFPathSwitch(pAdapter, 1/*pHalData->bDefaultAntenna*/); /*default use Main*/
/*<20130522, Kordan> 0x51 and 0x71 should be set immediately after path switched, or they might be overwritten. */
if ((pHalData->PackageType == PACKAGE_TFBGA79) || (pHalData->PackageType == PACKAGE_TFBGA90))
- PHY_SetRFReg(pAdapter, ODM_RF_PATH_A, 0x51, bRFRegOffsetMask, 0x6B10E);
+ PHY_SetRFReg(pAdapter, ODM_RF_PATH_A, 0x51, bRFRegOffsetMask, 0x6B10E);
else
- PHY_SetRFReg(pAdapter, ODM_RF_PATH_A, 0x51, bRFRegOffsetMask, 0x6B04E);
+ PHY_SetRFReg(pAdapter, ODM_RF_PATH_A, 0x51, bRFRegOffsetMask, 0x6B04E);
}
/*set ant to wifi side in mp mode*/
rtw_write16(pAdapter, 0x870, 0x300);
@@ -630,6 +643,7 @@ static u8 mpt_ProStartTest(PADAPTER padapter)
pMptCtx->bSingleCarrier = _FALSE;
pMptCtx->bCarrierSuppression = _FALSE;
pMptCtx->bSingleTone = _FALSE;
+ pMptCtx->HWTxmode = PACKETS_TX;
return _SUCCESS;
}
@@ -698,8 +712,12 @@ void MPT_PwrCtlDM(PADAPTER padapter, u32 bstart)
ConfigureTxpowerTrack(pDM_Odm, &c);
ODM_ClearTxPowerTrackingState(pDM_Odm);
if (*c.ODM_TxPwrTrackSetPwr) {
- (*c.ODM_TxPwrTrackSetPwr)(pDM_Odm, BBSWING, ODM_RF_PATH_A, chnl);
- (*c.ODM_TxPwrTrackSetPwr)(pDM_Odm, BBSWING, ODM_RF_PATH_B, chnl);
+ if (pDM_Odm->SupportICType == ODM_RTL8188F)
+ (*c.ODM_TxPwrTrackSetPwr)(pDM_Odm, MIX_MODE, ODM_RF_PATH_A, chnl);
+ else {
+ (*c.ODM_TxPwrTrackSetPwr)(pDM_Odm, BBSWING, ODM_RF_PATH_A, chnl);
+ (*c.ODM_TxPwrTrackSetPwr)(pDM_Odm, BBSWING, ODM_RF_PATH_B, chnl);
+ }
}
}
}
@@ -762,7 +780,7 @@ u32 mp_join(PADAPTER padapter,u8 mode)
//init mp_start_test status
if (check_fwstate(pmlmepriv, _FW_LINKED) == _TRUE) {
rtw_disassoc_cmd(padapter, 500, _TRUE);
- rtw_indicate_disconnect(padapter);
+ rtw_indicate_disconnect(padapter, 0, _FALSE);
rtw_free_assoc_resources(padapter, 1);
}
pmppriv->prev_fw_state = get_fwstate(pmlmepriv);
@@ -901,7 +919,7 @@ void mp_stop_test(PADAPTER padapter)
goto end_of_mp_stop_test;
//3 1. disconnect psudo AdHoc
- rtw_indicate_disconnect(padapter);
+ rtw_indicate_disconnect(padapter, 0, _FALSE);
//3 2. clear psta used in mp test mode.
// rtw_free_assoc_resources(padapter, 1);
@@ -1290,7 +1308,7 @@ void fill_tx_desc_8188e(PADAPTER padapter)
desc->txdw4 |= cpu_to_le32(DISDATAFB);
if( pmp_priv->preamble ){
- if (pmp_priv->rateidx <= MPT_RATE_54M)
+ if (HwRateToMPTRate(pmp_priv->rateidx) <= MPT_RATE_54M)
desc->txdw4 |= cpu_to_le32(DATA_SHORT); // CCK Short Preamble
}
@@ -1301,7 +1319,7 @@ void fill_tx_desc_8188e(PADAPTER padapter)
desc->txdw5 |= cpu_to_le32(pmp_priv->rateidx & 0x0000001F);
if( pmp_priv->preamble ){
- if (pmp_priv->rateidx > MPT_RATE_54M)
+ if (HwRateToMPTRate(pmp_priv->rateidx) > MPT_RATE_54M)
desc->txdw5 |= cpu_to_le32(SGI); // MCS Short Guard Interval
}
@@ -1504,10 +1522,10 @@ void fill_tx_desc_8723b(PADAPTER padapter)
SET_TX_DESC_USE_RATE_8723B(ptxdesc, 1);
SET_TX_DESC_DISABLE_FB_8723B(ptxdesc, 1);
- if (pmp_priv->preamble)
- if (pmp_priv->rateidx <= MPT_RATE_54M) {
+ if (pmp_priv->preamble) {
+ if (HwRateToMPTRate(pmp_priv->rateidx) <= MPT_RATE_54M)
SET_TX_DESC_DATA_SHORT_8723B(ptxdesc, 1);
- }
+ }
if (pmp_priv->bandwidth == CHANNEL_WIDTH_40) {
SET_TX_DESC_DATA_BW_8723B(ptxdesc, 1);
@@ -1538,7 +1556,7 @@ void fill_tx_desc_8703b(PADAPTER padapter)
SET_TX_DESC_DISABLE_FB_8703B(ptxdesc, 1);
if (pmp_priv->preamble) {
- if (pmp_priv->rateidx <= MPT_RATE_54M)
+ if (HwRateToMPTRate(pmp_priv->rateidx) <= MPT_RATE_54M)
SET_TX_DESC_DATA_SHORT_8703B(ptxdesc, 1);
}
@@ -1570,7 +1588,7 @@ void fill_tx_desc_8188f(PADAPTER padapter)
SET_TX_DESC_DISABLE_FB_8188F(ptxdesc, 1);
if (pmp_priv->preamble)
- if (pmp_priv->rateidx <= MPT_RATE_54M)
+ if (HwRateToMPTRate(pmp_priv->rateidx) <= MPT_RATE_54M)
SET_TX_DESC_DATA_SHORT_8188F(ptxdesc, 1);
if (pmp_priv->bandwidth == CHANNEL_WIDTH_40)
@@ -1755,50 +1773,44 @@ exit:
void SetPacketRx(PADAPTER pAdapter, u8 bStartRx, u8 bAB)
{
- HAL_DATA_TYPE *pHalData = GET_HAL_DATA(pAdapter);
+ PHAL_DATA_TYPE pHalData = GET_HAL_DATA(pAdapter);
struct mp_priv *pmppriv = &pAdapter->mppriv;
- u8 type;
- type = _HW_STATE_AP_;
- if(bStartRx)
- {
+
+
+ if (bStartRx) {
#ifdef CONFIG_RTL8723B
PHY_SetMacReg(pAdapter, 0xe70, BIT23|BIT22, 0x3);// Power on adc (in RX_WAIT_CCA state)
write_bbreg(pAdapter, 0xa01, BIT0, bDisable);// improve Rx performance by jerry
#endif
- if( pmppriv->bSetRxBssid == _TRUE ){
- //pHalData->ReceiveConfig = RCR_APM | RCR_AM | RCR_AB |RCR_CBSSID_DATA| RCR_CBSSID_BCN| RCR_APP_ICV | RCR_AMF | RCR_HTC_LOC_CTRL | RCR_APP_MIC | RCR_APP_PHYST_RXFF;
- pHalData->ReceiveConfig = RCR_AAP | RCR_APM | RCR_AM | RCR_AB |RCR_AMF | RCR_APP_ICV | RCR_AMF | RCR_HTC_LOC_CTRL | RCR_APP_MIC | RCR_APP_PHYST_RXFF ;
- pHalData->ReceiveConfig |= ACRC32;
-
- DBG_8192C("%s , pmppriv->network_macaddr =%x %x %x %x %x %x\n",__func__,
- pmppriv->network_macaddr[0],pmppriv->network_macaddr[1],pmppriv->network_macaddr[2],pmppriv->network_macaddr[3],pmppriv->network_macaddr[4],pmppriv->network_macaddr[5]);
+ pHalData->ReceiveConfig = RCR_AAP | RCR_APM | RCR_AM | RCR_AMF | RCR_HTC_LOC_CTRL;
+ pHalData->ReceiveConfig |= RCR_ACRC32;
+ pHalData->ReceiveConfig |= RCR_APP_PHYST_RXFF | RCR_APP_ICV | RCR_APP_MIC;
+
+ if (pmppriv->bSetRxBssid == _TRUE) {
+ DBG_8192C("%s: pmppriv->network_macaddr=" MAC_FMT "\n", __func__,
+ MAC_ARG(pmppriv->network_macaddr));
+
//Set_MSR(pAdapter, WIFI_FW_AP_STATE);
//rtw_hal_set_hwreg(pAdapter, HW_VAR_BSSID, pmppriv->network_macaddr);
//rtw_hal_set_hwreg(pAdapter, HW_VAR_SET_OPMODE, (u8 *)(&type));
+ } else {
+ pHalData->ReceiveConfig |= RCR_ADF;
+
+ /* Accept all data frames */
+ rtw_write16(pAdapter, REG_RXFLTMAP2, 0xFFFF);
}
- else
- {
- pHalData->ReceiveConfig = AAP | APM | AM | AB | APP_ICV | ADF | AMF | HTC_LOC_CTRL | APP_MIC | APP_PHYSTS;
- pHalData->ReceiveConfig |= ACRC32;
- rtw_write32(pAdapter, REG_RCR, pHalData->ReceiveConfig);
- // Accept all data frames
- rtw_write16(pAdapter, REG_RXFLTMAP2, 0xFFFF);
- // Accept CRC error and destination address
- }
- }
- else
- {
+
+ if (bAB)
+ pHalData->ReceiveConfig |= RCR_AB;
+ } else {
#ifdef CONFIG_RTL8723B
PHY_SetMacReg(pAdapter, 0xe70, BIT23|BIT22, 0x00);// Power off adc (in RX_WAIT_CCA state)
write_bbreg(pAdapter, 0xa01, BIT0, bEnable);// improve Rx performance by jerry
#endif
- rtw_write32(pAdapter, REG_RCR, 0);
+ pHalData->ReceiveConfig = 0;
}
- if (bAB)
- rtw_write32(pAdapter, REG_RCR, rtw_read32(pAdapter, REG_RCR)|RCR_AB);
- else
- rtw_write32(pAdapter, REG_RCR, rtw_read32(pAdapter, REG_RCR)&(~RCR_AB));
+ rtw_write32(pAdapter, REG_RCR, pHalData->ReceiveConfig);
}
void ResetPhyRxPktCount(PADAPTER pAdapter)
@@ -2437,6 +2449,188 @@ MptToMgntRate(
}
}
+
+u8 HwRateToMPTRate(u8 rate)
+{
+ u8 ret_rate = MGN_1M;
+
+ switch (rate) {
+ case DESC_RATE1M:
+ ret_rate = MPT_RATE_1M; break;
+ case DESC_RATE2M:
+ ret_rate = MPT_RATE_2M; break;
+ case DESC_RATE5_5M:
+ ret_rate = MPT_RATE_55M; break;
+ case DESC_RATE11M:
+ ret_rate = MPT_RATE_11M; break;
+ case DESC_RATE6M:
+ ret_rate = MPT_RATE_6M; break;
+ case DESC_RATE9M:
+ ret_rate = MPT_RATE_9M; break;
+ case DESC_RATE12M:
+ ret_rate = MPT_RATE_12M; break;
+ case DESC_RATE18M:
+ ret_rate = MPT_RATE_18M; break;
+ case DESC_RATE24M:
+ ret_rate = MPT_RATE_24M; break;
+ case DESC_RATE36M:
+ ret_rate = MPT_RATE_36M; break;
+ case DESC_RATE48M:
+ ret_rate = MPT_RATE_48M; break;
+ case DESC_RATE54M:
+ ret_rate = MPT_RATE_54M; break;
+ case DESC_RATEMCS0:
+ ret_rate = MPT_RATE_MCS0; break;
+ case DESC_RATEMCS1:
+ ret_rate = MPT_RATE_MCS1; break;
+ case DESC_RATEMCS2:
+ ret_rate = MPT_RATE_MCS2; break;
+ case DESC_RATEMCS3:
+ ret_rate = MPT_RATE_MCS3; break;
+ case DESC_RATEMCS4:
+ ret_rate = MPT_RATE_MCS4; break;
+ case DESC_RATEMCS5:
+ ret_rate = MPT_RATE_MCS5; break;
+ case DESC_RATEMCS6:
+ ret_rate = MPT_RATE_MCS6; break;
+ case DESC_RATEMCS7:
+ ret_rate = MPT_RATE_MCS7; break;
+ case DESC_RATEMCS8:
+ ret_rate = MPT_RATE_MCS8; break;
+ case DESC_RATEMCS9:
+ ret_rate = MPT_RATE_MCS9; break;
+ case DESC_RATEMCS10:
+ ret_rate = MPT_RATE_MCS10; break;
+ case DESC_RATEMCS11:
+ ret_rate = MPT_RATE_MCS11; break;
+ case DESC_RATEMCS12:
+ ret_rate = MPT_RATE_MCS12; break;
+ case DESC_RATEMCS13:
+ ret_rate = MPT_RATE_MCS13; break;
+ case DESC_RATEMCS14:
+ ret_rate = MPT_RATE_MCS14; break;
+ case DESC_RATEMCS15:
+ ret_rate = MPT_RATE_MCS15; break;
+ case DESC_RATEMCS16:
+ ret_rate = MPT_RATE_MCS16; break;
+ case DESC_RATEMCS17:
+ ret_rate = MPT_RATE_MCS17; break;
+ case DESC_RATEMCS18:
+ ret_rate = MPT_RATE_MCS18; break;
+ case DESC_RATEMCS19:
+ ret_rate = MPT_RATE_MCS19; break;
+ case DESC_RATEMCS20:
+ ret_rate = MPT_RATE_MCS20; break;
+ case DESC_RATEMCS21:
+ ret_rate = MPT_RATE_MCS21; break;
+ case DESC_RATEMCS22:
+ ret_rate = MPT_RATE_MCS22; break;
+ case DESC_RATEMCS23:
+ ret_rate = MPT_RATE_MCS23; break;
+ case DESC_RATEMCS24:
+ ret_rate = MPT_RATE_MCS24; break;
+ case DESC_RATEMCS25:
+ ret_rate = MPT_RATE_MCS25; break;
+ case DESC_RATEMCS26:
+ ret_rate = MPT_RATE_MCS26; break;
+ case DESC_RATEMCS27:
+ ret_rate = MPT_RATE_MCS27; break;
+ case DESC_RATEMCS28:
+ ret_rate = MPT_RATE_MCS28; break;
+ case DESC_RATEMCS29:
+ ret_rate = MPT_RATE_MCS29; break;
+ case DESC_RATEMCS30:
+ ret_rate = MPT_RATE_MCS30; break;
+ case DESC_RATEMCS31:
+ ret_rate = MPT_RATE_MCS31; break;
+ case DESC_RATEVHTSS1MCS0:
+ ret_rate = MPT_RATE_VHT1SS_MCS0; break;
+ case DESC_RATEVHTSS1MCS1:
+ ret_rate = MPT_RATE_VHT1SS_MCS1; break;
+ case DESC_RATEVHTSS1MCS2:
+ ret_rate = MPT_RATE_VHT1SS_MCS2; break;
+ case DESC_RATEVHTSS1MCS3:
+ ret_rate = MPT_RATE_VHT1SS_MCS3; break;
+ case DESC_RATEVHTSS1MCS4:
+ ret_rate = MPT_RATE_VHT1SS_MCS4; break;
+ case DESC_RATEVHTSS1MCS5:
+ ret_rate = MPT_RATE_VHT1SS_MCS5; break;
+ case DESC_RATEVHTSS1MCS6:
+ ret_rate = MPT_RATE_VHT1SS_MCS6; break;
+ case DESC_RATEVHTSS1MCS7:
+ ret_rate = MPT_RATE_VHT1SS_MCS7; break;
+ case DESC_RATEVHTSS1MCS8:
+ ret_rate = MPT_RATE_VHT1SS_MCS8; break;
+ case DESC_RATEVHTSS1MCS9:
+ ret_rate = MPT_RATE_VHT1SS_MCS9; break;
+ case DESC_RATEVHTSS2MCS0:
+ ret_rate = MPT_RATE_VHT2SS_MCS0; break;
+ case DESC_RATEVHTSS2MCS1:
+ ret_rate = MPT_RATE_VHT2SS_MCS1; break;
+ case DESC_RATEVHTSS2MCS2:
+ ret_rate = MPT_RATE_VHT2SS_MCS2; break;
+ case DESC_RATEVHTSS2MCS3:
+ ret_rate = MPT_RATE_VHT2SS_MCS3; break;
+ case DESC_RATEVHTSS2MCS4:
+ ret_rate = MPT_RATE_VHT2SS_MCS4; break;
+ case DESC_RATEVHTSS2MCS5:
+ ret_rate = MPT_RATE_VHT2SS_MCS5; break;
+ case DESC_RATEVHTSS2MCS6:
+ ret_rate = MPT_RATE_VHT2SS_MCS6; break;
+ case DESC_RATEVHTSS2MCS7:
+ ret_rate = MPT_RATE_VHT2SS_MCS7; break;
+ case DESC_RATEVHTSS2MCS8:
+ ret_rate = MPT_RATE_VHT2SS_MCS8; break;
+ case DESC_RATEVHTSS2MCS9:
+ ret_rate = MPT_RATE_VHT2SS_MCS9; break;
+ case DESC_RATEVHTSS3MCS0:
+ ret_rate = MPT_RATE_VHT3SS_MCS0; break;
+ case DESC_RATEVHTSS3MCS1:
+ ret_rate = MPT_RATE_VHT3SS_MCS1; break;
+ case DESC_RATEVHTSS3MCS2:
+ ret_rate = MPT_RATE_VHT3SS_MCS2; break;
+ case DESC_RATEVHTSS3MCS3:
+ ret_rate = MPT_RATE_VHT3SS_MCS3; break;
+ case DESC_RATEVHTSS3MCS4:
+ ret_rate = MPT_RATE_VHT3SS_MCS4; break;
+ case DESC_RATEVHTSS3MCS5:
+ ret_rate = MPT_RATE_VHT3SS_MCS5; break;
+ case DESC_RATEVHTSS3MCS6:
+ ret_rate = MPT_RATE_VHT3SS_MCS6; break;
+ case DESC_RATEVHTSS3MCS7:
+ ret_rate = MPT_RATE_VHT3SS_MCS7; break;
+ case DESC_RATEVHTSS3MCS8:
+ ret_rate = MPT_RATE_VHT3SS_MCS8; break;
+ case DESC_RATEVHTSS3MCS9:
+ ret_rate = MPT_RATE_VHT3SS_MCS9; break;
+ case DESC_RATEVHTSS4MCS0:
+ ret_rate = MPT_RATE_VHT4SS_MCS0; break;
+ case DESC_RATEVHTSS4MCS1:
+ ret_rate = MPT_RATE_VHT4SS_MCS1; break;
+ case DESC_RATEVHTSS4MCS2:
+ ret_rate = MPT_RATE_VHT4SS_MCS2; break;
+ case DESC_RATEVHTSS4MCS3:
+ ret_rate = MPT_RATE_VHT4SS_MCS3; break;
+ case DESC_RATEVHTSS4MCS4:
+ ret_rate = MPT_RATE_VHT4SS_MCS4; break;
+ case DESC_RATEVHTSS4MCS5:
+ ret_rate = MPT_RATE_VHT4SS_MCS5; break;
+ case DESC_RATEVHTSS4MCS6:
+ ret_rate = MPT_RATE_VHT4SS_MCS6; break;
+ case DESC_RATEVHTSS4MCS7:
+ ret_rate = MPT_RATE_VHT4SS_MCS7; break;
+ case DESC_RATEVHTSS4MCS8:
+ ret_rate = MPT_RATE_VHT4SS_MCS8; break;
+ case DESC_RATEVHTSS4MCS9:
+ ret_rate = MPT_RATE_VHT4SS_MCS9; break;
+
+ default:
+ DBG_871X("HwRateToMRate(): Non supported Rate [%x]!!!\n", rate);
+ break;
+ }
+ return ret_rate;
+}
+
u8 rtw_mpRateParseFunc(PADAPTER pAdapter, u8 *targetStr)
{
u16 i=0;
@@ -2477,69 +2671,44 @@ ULONG mpt_ProQueryCalTxPower(
ULONG TxPower = 1, PwrGroup=0, PowerDiffByRate=0;
u1Byte limit = 0, rate = 0;
-
+ u8 mgn_rate = MptToMgntRate(pMptCtx->MptRateIndex);
+
#if defined(CONFIG_RTL8188E)
if (IS_HARDWARE_TYPE_8188E(pAdapter))
- {
- //return mpt_ProQueryCalTxPower_8188E(pAdapter, RfPath);
- rate = MptToMgntRate(pAdapter->mppriv.rateidx);
- TxPower = PHY_GetTxPowerIndex_8188E(pAdapter, RfPath, rate,
- pHalData->CurrentChannelBW, pHalData->CurrentChannel);
-
- }
+ TxPower = PHY_GetTxPowerIndex_8188E(pAdapter, RfPath, mgn_rate, pHalData->CurrentChannelBW, pHalData->CurrentChannel);
#endif
-
+
#if defined(CONFIG_RTL8723B)
- if( IS_HARDWARE_TYPE_8723B(pAdapter) )
- {
- rate = MptToMgntRate(pAdapter->mppriv.rateidx);
- TxPower = PHY_GetTxPowerIndex_8723B(pAdapter, RfPath, rate,
- pHalData->CurrentChannelBW, pHalData->CurrentChannel);
- }
+ if (IS_HARDWARE_TYPE_8723B(pAdapter))
+ TxPower = PHY_GetTxPowerIndex_8723B(pAdapter, RfPath, mgn_rate, pHalData->CurrentChannelBW, pHalData->CurrentChannel);
#endif
-
+
#if defined(CONFIG_RTL8192E)
- if( IS_HARDWARE_TYPE_8192E(pAdapter) )
- {
- rate = MptToMgntRate(pAdapter->mppriv.rateidx);
- TxPower = PHY_GetTxPowerIndex_8192E(pAdapter, RfPath, rate,
- pHalData->CurrentChannelBW, pHalData->CurrentChannel);
- }
+ if (IS_HARDWARE_TYPE_8192E(pAdapter))
+ TxPower = PHY_GetTxPowerIndex_8192E(pAdapter, RfPath, mgn_rate, pHalData->CurrentChannelBW, pHalData->CurrentChannel);
#endif
+
#if defined(CONFIG_RTL8812A) || defined(CONFIG_RTL8821A)
- if( IS_HARDWARE_TYPE_JAGUAR(pAdapter) )
- {
- rate = MptToMgntRate(pAdapter->mppriv.rateidx);
- TxPower = PHY_GetTxPowerIndex_8812A(pAdapter, RfPath, rate,
- pHalData->CurrentChannelBW, pHalData->CurrentChannel);
- }
+ if (IS_HARDWARE_TYPE_JAGUAR(pAdapter))
+ TxPower = PHY_GetTxPowerIndex_8812A(pAdapter, RfPath, mgn_rate, pHalData->CurrentChannelBW, pHalData->CurrentChannel);
#endif
+
#if defined(CONFIG_RTL8814A)
- if ( IS_HARDWARE_TYPE_8814A(pAdapter) )
- {
- rate = MptToMgntRate(pAdapter->mppriv.rateidx);
- TxPower = PHY_GetTxPowerIndex_8814A(pAdapter, RfPath, rate,
- pHalData->CurrentChannelBW, pHalData->CurrentChannel);
- }
+ if (IS_HARDWARE_TYPE_8814A(pAdapter))
+ TxPower = PHY_GetTxPowerIndex_8814A(pAdapter, RfPath, mgn_rate, pHalData->CurrentChannelBW, pHalData->CurrentChannel);
#endif
#if defined(CONFIG_RTL8703B)
- if (IS_HARDWARE_TYPE_8703B(pAdapter)) {
- rate = MptToMgntRate(pAdapter->mppriv.rateidx);
- TxPower = PHY_GetTxPowerIndex_8703B(pAdapter, RfPath, rate,
- pHalData->CurrentChannelBW, pHalData->CurrentChannel);
- }
+ if (IS_HARDWARE_TYPE_8703B(pAdapter))
+ TxPower = PHY_GetTxPowerIndex_8703B(pAdapter, RfPath, mgn_rate, pHalData->CurrentChannelBW, pHalData->CurrentChannel);
#endif
#if defined(CONFIG_RTL8188F)
- if (IS_HARDWARE_TYPE_8188F(pAdapter)) {
- rate = MptToMgntRate(pAdapter->mppriv.rateidx);
- TxPower = PHY_GetTxPowerIndex_8188F(pAdapter, RfPath, rate,
- pHalData->CurrentChannelBW, pHalData->CurrentChannel);
- }
+ if (IS_HARDWARE_TYPE_8188F(pAdapter))
+ TxPower = PHY_GetTxPowerIndex_8188F(pAdapter, RfPath, mgn_rate, pHalData->CurrentChannelBW, pHalData->CurrentChannel);
#endif
DBG_8192C("txPower=%d ,CurrentChannelBW=%d ,CurrentChannel=%d ,rate =%d\n",
- TxPower, pHalData->CurrentChannelBW, pHalData->CurrentChannel, rate);
+ TxPower, pHalData->CurrentChannelBW, pHalData->CurrentChannel, mgn_rate);
pAdapter->mppriv.txpoweridx = (u8)TxPower;
pMptCtx->TxPwrLevel[ODM_RF_PATH_A] = (u8)TxPower;
@@ -2550,5 +2719,788 @@ ULONG mpt_ProQueryCalTxPower(
return TxPower;
}
+
+#ifdef CONFIG_MP_VHT_HW_TX_MODE
+static inline void dump_buf(u8 *buf, u32 len)
+{
+ u32 i;
+
+ DBG_871X("-----------------Len %d----------------\n", len);
+ for (i = 0; i < len; i++)
+ DBG_871X("%2.2x-", *(buf + i));
+ DBG_871X("\n");
+}
+
+void ByteToBit(
+ UCHAR *out,
+ bool *in,
+ UCHAR in_size)
+{
+ UCHAR i = 0, j = 0;
+
+ for (i = 0; i < in_size; i++) {
+ for (j = 0; j < 8; j++) {
+ if (in[8*i+j])
+ out[i] |= (1 << j);
+ }
+ }
+}
+
+
+void CRC16_generator(
+ bool *out,
+ bool *in,
+ UCHAR in_size
+)
+{
+ UCHAR i = 0;
+ bool temp = 0, reg[] = {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1};
+
+ for (i = 0; i < in_size; i++) {/* take one's complement and bit reverse*/
+ temp = in[i]^reg[15];
+ reg[15] = reg[14];
+ reg[14] = reg[13];
+ reg[13] = reg[12];
+ reg[12] = reg[11];
+ reg[11] = reg[10];
+ reg[10] = reg[9];
+ reg[9] = reg[8];
+ reg[8] = reg[7];
+
+ reg[7] = reg[6];
+ reg[6] = reg[5];
+ reg[5] = reg[4];
+ reg[4] = reg[3];
+ reg[3] = reg[2];
+ reg[2] = reg[1];
+ reg[1] = reg[0];
+ reg[12] = reg[12] ^ temp;
+ reg[5] = reg[5] ^ temp;
+ reg[0] = temp;
+ }
+ for (i = 0; i < 16; i++) /* take one's complement and bit reverse*/
+ out[i] = 1-reg[15-i];
+}
+
+
+
+/*========================================
+ SFD SIGNAL SERVICE LENGTH CRC
+ 16 bit 8 bit 8 bit 16 bit 16 bit
+========================================*/
+void CCK_generator(
+ PRT_PMAC_TX_INFO pPMacTxInfo,
+ PRT_PMAC_PKT_INFO pPMacPktInfo
+ )
+{
+ double ratio = 0;
+ bool crc16_in[32] = {0}, crc16_out[16] = {0};
+ bool LengthExtBit;
+ double LengthExact;
+ double LengthPSDU;
+ UCHAR i;
+ UINT PacketLength = pPMacTxInfo->PacketLength;
+
+ if (pPMacTxInfo->bSPreamble)
+ pPMacTxInfo->SFD = 0x05CF;
+ else
+ pPMacTxInfo->SFD = 0xF3A0;
+
+ switch (pPMacPktInfo->MCS) {
+ case 0:
+ pPMacTxInfo->SignalField = 0xA;
+ ratio = 8;
+ /*CRC16_in(1,0:7)=[0 1 0 1 0 0 0 0]*/
+ crc16_in[1] = crc16_in[3] = 1;
+ break;
+ case 1:
+ pPMacTxInfo->SignalField = 0x14;
+ ratio = 4;
+ /*CRC16_in(1,0:7)=[0 0 1 0 1 0 0 0];*/
+ crc16_in[2] = crc16_in[4] = 1;
+ break;
+ case 2:
+ pPMacTxInfo->SignalField = 0x37;
+ ratio = 8.0/5.5;
+ /*CRC16_in(1,0:7)=[1 1 1 0 1 1 0 0];*/
+ crc16_in[0] = crc16_in[1] = crc16_in[2] = crc16_in[4] = crc16_in[5] = 1;
+ break;
+ case 3:
+ pPMacTxInfo->SignalField = 0x6E;
+ ratio = 8.0/11.0;
+ /*CRC16_in(1,0:7)=[0 1 1 1 0 1 1 0];*/
+ crc16_in[1] = crc16_in[2] = crc16_in[3] = crc16_in[5] = crc16_in[6] = 1;
+ break;
+ }
+
+ LengthExact = PacketLength*ratio;
+ LengthPSDU = ceil(LengthExact);
+
+ if ((pPMacPktInfo->MCS == 3) &&
+ ((LengthPSDU-LengthExact) >= 0.727 || (LengthPSDU-LengthExact) <= -0.727))
+ LengthExtBit = 1;
+ else
+ LengthExtBit = 0;
+
+
+ pPMacTxInfo->LENGTH = (UINT)LengthPSDU;
+ /* CRC16_in(1,16:31) = LengthPSDU[0:15]*/
+ for (i = 0; i < 16; i++)
+ crc16_in[i+16] = (pPMacTxInfo->LENGTH >> i) & 0x1;
+
+ if (LengthExtBit == 0) {
+ pPMacTxInfo->ServiceField = 0x0;
+ /* CRC16_in(1,8:15) = [0 0 0 0 0 0 0 0];*/
+ } else {
+ pPMacTxInfo->ServiceField = 0x80;
+ /*CRC16_in(1,8:15)=[0 0 0 0 0 0 0 1];*/
+ crc16_in[15] = 1;
+ }
+
+ CRC16_generator(crc16_out, crc16_in, 32);
+
+ _rtw_memset(pPMacTxInfo->CRC16, 0, 2);
+ ByteToBit(pPMacTxInfo->CRC16, crc16_out, 2);
+
+}
+
+
+void PMAC_Get_Pkt_Param(
+ PRT_PMAC_TX_INFO pPMacTxInfo,
+ PRT_PMAC_PKT_INFO pPMacPktInfo)
+{
+
+ UCHAR TX_RATE_HEX = 0, MCS = 0;
+ UCHAR TX_RATE = pPMacTxInfo->TX_RATE;
+
+ /* TX_RATE & Nss */
+ if (MPT_IS_2SS_RATE(TX_RATE))
+ pPMacPktInfo->Nss = 2;
+ else if (MPT_IS_3SS_RATE(TX_RATE))
+ pPMacPktInfo->Nss = 3;
+ else if (MPT_IS_4SS_RATE(TX_RATE))
+ pPMacPktInfo->Nss = 4;
+ else
+ pPMacPktInfo->Nss = 1;
+
+ DBG_871X("PMacTxInfo.Nss =%d\n", pPMacPktInfo->Nss);
+
+ /* MCS & TX_RATE_HEX*/
+ if (MPT_IS_CCK_RATE(TX_RATE)) {
+ switch (TX_RATE) {
+ case MPT_RATE_1M:
+ TX_RATE_HEX = MCS = 0; break;
+ case MPT_RATE_2M:
+ TX_RATE_HEX = MCS = 1; break;
+ case MPT_RATE_55M:
+ TX_RATE_HEX = MCS = 2; break;
+ case MPT_RATE_11M:
+ TX_RATE_HEX = MCS = 3; break;
+ }
+ } else if (MPT_IS_OFDM_RATE(TX_RATE)) {
+ MCS = TX_RATE - MPT_RATE_6M;
+ TX_RATE_HEX = MCS + 4;
+ } else if (MPT_IS_HT_RATE(TX_RATE)) {
+ MCS = TX_RATE - MPT_RATE_MCS0;
+ TX_RATE_HEX = MCS + 12;
+ } else if (MPT_IS_VHT_RATE(TX_RATE)) {
+ TX_RATE_HEX = TX_RATE - MPT_RATE_VHT1SS_MCS0 + 44;
+
+ if (MPT_IS_VHT_2S_RATE(TX_RATE))
+ MCS = TX_RATE - MPT_RATE_VHT2SS_MCS0;
+ else if (MPT_IS_VHT_3S_RATE(TX_RATE))
+ MCS = TX_RATE - MPT_RATE_VHT3SS_MCS0;
+ else if (MPT_IS_VHT_4S_RATE(TX_RATE))
+ MCS = TX_RATE - MPT_RATE_VHT4SS_MCS0;
+ else
+ MCS = TX_RATE - MPT_RATE_VHT1SS_MCS0;
+ }
+
+ pPMacPktInfo->MCS = MCS;
+ pPMacTxInfo->TX_RATE_HEX = TX_RATE_HEX;
+
+ DBG_871X(" MCS=%d, TX_RATE_HEX =0x%x\n", MCS, pPMacTxInfo->TX_RATE_HEX);
+ /* mSTBC & Nsts*/
+ pPMacPktInfo->Nsts = pPMacPktInfo->Nss;
+ if (pPMacTxInfo->bSTBC) {
+ if (pPMacPktInfo->Nss == 1) {
+ pPMacTxInfo->m_STBC = 2;
+ pPMacPktInfo->Nsts = pPMacPktInfo->Nss*2;
+ } else
+ pPMacTxInfo->m_STBC = 1;
+ } else
+ pPMacTxInfo->m_STBC = 1;
+}
+
+
+UINT LDPC_parameter_generator(
+ UINT N_pld_int,
+ UINT N_CBPSS,
+ UINT N_SS,
+ UINT R,
+ UINT m_STBC,
+ UINT N_TCB_int
+)
+{
+ double CR = 0.;
+ double N_pld = (double)N_pld_int;
+ double N_TCB = (double)N_TCB_int;
+ double N_CW = 0., N_shrt = 0., N_spcw = 0., N_fshrt = 0.;
+ double L_LDPC = 0., K_LDPC = 0., L_LDPC_info = 0.;
+ double N_punc = 0., N_ppcw = 0., N_fpunc = 0., N_rep = 0., N_rpcw = 0., N_frep = 0.;
+ double R_eff = 0.;
+ UINT VHTSIGA2B3 = 0;/* extra symbol from VHT-SIG-A2 Bit 3*/
+
+ if (R == 0)
+ CR = 0.5;
+ else if (R == 1)
+ CR = 2./3.;
+ else if (R == 2)
+ CR = 3./4.;
+ else if (R == 3)
+ CR = 5./6.;
+
+ if (N_TCB <= 648.) {
+ N_CW = 1.;
+ if (N_TCB >= N_pld+912.*(1.-CR))
+ L_LDPC = 1296.;
+ else
+ L_LDPC = 648.;
+ } else if (N_TCB <= 1296.) {
+ N_CW = 1.;
+ if (N_TCB >= (double)N_pld + 1464.*(1.-CR))
+ L_LDPC = 1944.;
+ else
+ L_LDPC = 1296.;
+ } else if (N_TCB <= 1944.) {
+ N_CW = 1.;
+ L_LDPC = 1944.;
+ } else if (N_TCB <= 2592.) {
+ N_CW = 2.;
+ if (N_TCB >= N_pld+2916.*(1.-CR))
+ L_LDPC = 1944.;
+ else
+ L_LDPC = 1296.;
+ } else {
+ N_CW = ceil(N_pld/1944./CR);
+ L_LDPC = 1944.;
+ }
+ /* Number of information bits per CW*/
+ K_LDPC = L_LDPC*CR;
+ /* Number of shortening bits max(0, (N_CW * L_LDPC * R) - N_pld)*/
+ N_shrt = (N_CW*K_LDPC-N_pld) > 0. ? (N_CW*K_LDPC-N_pld) : 0.;
+ /* Number of shortening bits per CW N_spcw = rtfloor(N_shrt/N_CW)*/
+ N_spcw = rtfloor(N_shrt/N_CW);
+ /* The first N_fshrt CWs shorten 1 bit more*/
+ N_fshrt = (double)((int)N_shrt % (int)N_CW);
+ /* Number of data bits for the last N_CW-N_fshrt CWs*/
+ L_LDPC_info = K_LDPC-N_spcw;
+ /* Number of puncturing bits*/
+ N_punc = (N_CW*L_LDPC-N_TCB-N_shrt) > 0. ? (N_CW*L_LDPC-N_TCB-N_shrt) : 0.;
+ if (((N_punc > .1 * N_CW * L_LDPC * (1.-CR)) && (N_shrt < 1.2 * N_punc * CR/(1.-CR))) ||
+ (N_punc > 0.3*N_CW*L_LDPC*(1.-CR))) {
+ /*cout << "*** N_TCB and N_punc are Recomputed ***" << endl;*/
+ VHTSIGA2B3 = 1;
+ N_TCB += (double)N_CBPSS*N_SS*m_STBC;
+ N_punc = (N_CW*L_LDPC-N_TCB-N_shrt) > 0. ? (N_CW*L_LDPC-N_TCB-N_shrt) : 0.;
+ } else
+ VHTSIGA2B3 = 0;
+
+ return VHTSIGA2B3;
+} /* function end of LDPC_parameter_generator */
+
+/*========================================
+ Data field of PPDU
+ Get N_sym and SIGA2BB3
+========================================*/
+void PMAC_Nsym_generator(
+ PRT_PMAC_TX_INFO pPMacTxInfo,
+ PRT_PMAC_PKT_INFO pPMacPktInfo)
+{
+ UINT SIGA2B3 = 0;
+ UCHAR TX_RATE = pPMacTxInfo->TX_RATE;
+
+ UINT R, R_list[10] = {0, 0, 2, 0, 2, 1, 2, 3, 2, 3};
+ double CR = 0;
+ UINT N_SD, N_BPSC_list[10] = {1, 2, 2, 4, 4, 6, 6, 6, 8, 8};
+ UINT N_BPSC = 0, N_CBPS = 0, N_DBPS = 0, N_ES = 0, N_SYM = 0, N_pld = 0, N_TCB = 0;
+ int D_R = 0;
+
+ DBG_871X("TX_RATE = %d\n", TX_RATE);
+ /* N_SD*/
+ if (pPMacTxInfo->BandWidth == 0)
+ N_SD = 52;
+ else if (pPMacTxInfo->BandWidth == 1)
+ N_SD = 108;
+ else
+ N_SD = 234;
+
+ if (MPT_IS_HT_RATE(TX_RATE)) {
+ UCHAR MCS_temp;
+
+ if (pPMacPktInfo->MCS > 23)
+ MCS_temp = pPMacPktInfo->MCS - 24;
+ else if (pPMacPktInfo->MCS > 15)
+ MCS_temp = pPMacPktInfo->MCS - 16;
+ else if (pPMacPktInfo->MCS > 7)
+ MCS_temp = pPMacPktInfo->MCS - 8;
+ else
+ MCS_temp = pPMacPktInfo->MCS;
+
+ R = R_list[MCS_temp];
+
+ switch (R) {
+ case 0:
+ CR = .5; break;
+ case 1:
+ CR = 2./3.; break;
+ case 2:
+ CR = 3./4.; break;
+ case 3:
+ CR = 5./6.; break;
+ }
+
+ N_BPSC = N_BPSC_list[MCS_temp];
+ N_CBPS = N_BPSC*N_SD*pPMacPktInfo->Nss;
+ N_DBPS = (UINT)((double)N_CBPS*CR);
+
+ if (pPMacTxInfo->bLDPC == FALSE) {
+ N_ES = (UINT)ceil((double)(N_DBPS * pPMacPktInfo->Nss)/4./300.);
+ DBG_871X("N_ES = %d\n", N_ES);
+
+ /* N_SYM = m_STBC* (8*length+16+6*N_ES) / (m_STBC*N_DBPS)*/
+ N_SYM = pPMacTxInfo->m_STBC*(UINT)ceil((double)(pPMacTxInfo->PacketLength*8+16+N_ES*6)/
+ (double)(N_DBPS*pPMacTxInfo->m_STBC));
+
+ } else {
+ N_ES = 1;
+ /* N_pld = length * 8 + 16*/
+ N_pld = pPMacTxInfo->PacketLength*8+16;
+ DBG_871X("N_pld = %d\n", N_pld);
+ N_SYM = pPMacTxInfo->m_STBC*(UINT)ceil((double)(N_pld)/
+ (double)(N_DBPS*pPMacTxInfo->m_STBC));
+ DBG_871X("N_SYM = %d\n", N_SYM);
+ /* N_avbits = N_CBPS *m_STBC *(N_pld/N_CBPS*R*m_STBC)*/
+ N_TCB = N_CBPS*N_SYM;
+ DBG_871X("N_TCB = %d\n", N_TCB);
+ SIGA2B3 = LDPC_parameter_generator(N_pld, N_CBPS, pPMacPktInfo->Nss, R, pPMacTxInfo->m_STBC, N_TCB);
+ DBG_871X("SIGA2B3 = %d\n", SIGA2B3);
+ N_SYM = N_SYM + SIGA2B3*pPMacTxInfo->m_STBC;
+ DBG_871X("N_SYM = %d\n", N_SYM);
+ }
+ } else if (MPT_IS_VHT_RATE(TX_RATE)) {
+ R = R_list[pPMacPktInfo->MCS];
+
+ switch (R) {
+ case 0:
+ CR = .5; break;
+ case 1:
+ CR = 2./3.; break;
+ case 2:
+ CR = 3./4.; break;
+ case 3:
+ CR = 5./6.; break;
+ }
+ N_BPSC = N_BPSC_list[pPMacPktInfo->MCS];
+ N_CBPS = N_BPSC*N_SD*pPMacPktInfo->Nss;
+ N_DBPS = (UINT)((double)N_CBPS*CR);
+ if (pPMacTxInfo->bLDPC == FALSE) {
+ if (pPMacTxInfo->bSGI)
+ N_ES = (UINT)ceil((double)(N_DBPS)/3.6/600.);
+ else
+ N_ES = (UINT)ceil((double)(N_DBPS)/4./600.);
+ /* N_SYM = m_STBC* (8*length+16+6*N_ES) / (m_STBC*N_DBPS)*/
+ N_SYM = pPMacTxInfo->m_STBC*(UINT)ceil((double)(pPMacTxInfo->PacketLength*8+16+N_ES*6)/(double)(N_DBPS*pPMacTxInfo->m_STBC));
+ SIGA2B3 = 0;
+ } else {
+ N_ES = 1;
+ /* N_SYM = m_STBC* (8*length+N_service) / (m_STBC*N_DBPS)*/
+ N_SYM = pPMacTxInfo->m_STBC*(UINT)ceil((double)(pPMacTxInfo->PacketLength*8+16)/(double)(N_DBPS*pPMacTxInfo->m_STBC));
+ /* N_avbits = N_sys_init * N_CBPS*/
+ N_TCB = N_CBPS * N_SYM;
+ /* N_pld = N_sys_init * N_DBPS*/
+ N_pld = N_SYM * N_DBPS;
+ SIGA2B3 = LDPC_parameter_generator(N_pld, N_CBPS, pPMacPktInfo->Nss, R, pPMacTxInfo->m_STBC, N_TCB);
+ N_SYM = N_SYM + SIGA2B3*pPMacTxInfo->m_STBC;
+ }
+
+ switch (R) {
+ case 0:
+ D_R = 2; break;
+ case 1:
+ D_R = 3; break;
+ case 2:
+ D_R = 4; break;
+ case 3:
+ D_R = 6; break;
+ }
+
+ if (((N_CBPS/N_ES)%D_R) != 0) {
+ DBG_871X("MCS= %d is not supported when Nss=%d and BW= %d !!\n", pPMacPktInfo->MCS, pPMacPktInfo->Nss, pPMacTxInfo->BandWidth);
+ return;
+ }
+
+ DBG_871X("MCS= %d Nss=%d and BW= %d !!\n", pPMacPktInfo->MCS, pPMacPktInfo->Nss, pPMacTxInfo->BandWidth);
+ }
+
+ pPMacPktInfo->N_sym = N_SYM;
+ pPMacPktInfo->SIGA2B3 = SIGA2B3;
+}
+
+/*========================================
+ L-SIG Rate R Length P Tail
+ 4b 1b 12b 1b 6b
+========================================*/
+
+void L_SIG_generator(
+ UINT N_SYM, /* Max: 750*/
+ PRT_PMAC_TX_INFO pPMacTxInfo,
+ PRT_PMAC_PKT_INFO pPMacPktInfo)
+{
+ u8 sig_bi[24] = {0}; /* 24 BIT*/
+ UINT mode, LENGTH;
+ int i;
+
+ if (MPT_IS_OFDM_RATE(pPMacTxInfo->TX_RATE)) {
+ mode = pPMacPktInfo->MCS;
+ LENGTH = pPMacTxInfo->PacketLength;
+ } else {
+ UCHAR N_LTF;
+ double T_data;
+ UINT OFDM_symbol;
+
+ mode = 0;
+
+ /* Table 20-13 Num of HT-DLTFs request*/
+ if (pPMacPktInfo->Nsts <= 2)
+ N_LTF = pPMacPktInfo->Nsts;
+ else
+ N_LTF = 4;
+
+ if (pPMacTxInfo->bSGI)
+ T_data = 3.6;
+ else
+ T_data = 4.0;
+
+ /*(L-SIG, HT-SIG, HT-STF, HT-LTF....HT-LTF, Data)*/
+ if (MPT_IS_VHT_RATE(pPMacTxInfo->TX_RATE))
+ OFDM_symbol = (UINT)ceil((double)(8+4+N_LTF*4+N_SYM*T_data+4)/4.);
+ else
+ OFDM_symbol = (UINT)ceil((double)(8+4+N_LTF*4+N_SYM*T_data)/4.);
+
+ DBG_871X("%s , OFDM_symbol =%d\n", __func__, OFDM_symbol);
+ LENGTH = OFDM_symbol*3-3;
+ DBG_871X("%s , LENGTH =%d\n", __func__, LENGTH);
+
+ }
+ /* Rate Field*/
+ switch (mode) {
+ case 0:
+ sig_bi[0] = 1; sig_bi[1] = 1; sig_bi[2] = 0; sig_bi[3] = 1;
+ break;
+ case 1:
+ sig_bi[0] = 1; sig_bi[1] = 1; sig_bi[2] = 1; sig_bi[3] = 1;
+ break;
+ case 2:
+ sig_bi[0] = 0; sig_bi[1] = 1; sig_bi[2] = 0; sig_bi[3] = 1;
+ break;
+ case 3:
+ sig_bi[0] = 0; sig_bi[1] = 1; sig_bi[2] = 1; sig_bi[3] = 1;
+ break;
+ case 4:
+ sig_bi[0] = 1; sig_bi[1] = 0; sig_bi[2] = 0; sig_bi[3] = 1;
+ break;
+ case 5:
+ sig_bi[0] = 1; sig_bi[1] = 0; sig_bi[2] = 1; sig_bi[3] = 1;
+ break;
+ case 6:
+ sig_bi[0] = 0; sig_bi[1] = 0; sig_bi[2] = 0; sig_bi[3] = 1;
+ break;
+ case 7:
+ sig_bi[0] = 0; sig_bi[1] = 0; sig_bi[2] = 1; sig_bi[3] = 1;
+ break;
+ }
+ /*Reserved bit*/
+ sig_bi[4] = 0;
+
+ /* Length Field*/
+ for (i = 0; i < 12; i++)
+ sig_bi[i+5] = (LENGTH>>i) & 1;
+
+ /* Parity Bit*/
+ sig_bi[17] = 0;
+ for (i = 0; i < 17; i++)
+ sig_bi[17] = sig_bi[17] + sig_bi[i];
+
+ sig_bi[17] %= 2;
+
+ /* Tail Field*/
+ for (i = 18; i < 24; i++)
+ sig_bi[i] = 0;
+
+ /* dump_buf(sig_bi,24);*/
+ _rtw_memset(pPMacTxInfo->LSIG, 0, 3);
+ ByteToBit(pPMacTxInfo->LSIG, (bool *)sig_bi, 3);
+}
+
+
+void CRC8_generator(
+ bool *out,
+ bool *in,
+ UCHAR in_size
+ )
+{
+ UCHAR i = 0;
+ bool temp = 0, reg[] = {1, 1, 1, 1, 1, 1, 1, 1};
+
+ for (i = 0; i < in_size; i++) { /* take one's complement and bit reverse*/
+ temp = in[i]^reg[7];
+ reg[7] = reg[6];
+ reg[6] = reg[5];
+ reg[5] = reg[4];
+ reg[4] = reg[3];
+ reg[3] = reg[2];
+ reg[2] = reg[1] ^ temp;
+ reg[1] = reg[0] ^ temp;
+ reg[0] = temp;
+ }
+ for (i = 0; i < 8; i++)/* take one's complement and bit reverse*/
+ out[i] = reg[7-i]^1;
+ }
+
+/*/================================================================================
+ HT-SIG1 MCS CW Length 24BIT + 24BIT
+ 7b 1b 16b
+ HT-SIG2 Smoothing Not sounding Rsvd AGG STBC FEC SGI N_ELTF CRC Tail
+ 1b 1b 1b 1b 2b 1b 1b 2b 8b 6b
+================================================================================*/
+void HT_SIG_generator(
+ PRT_PMAC_TX_INFO pPMacTxInfo,
+ PRT_PMAC_PKT_INFO pPMacPktInfo
+ )
+{
+ UINT i;
+ bool sig_bi[48] = {0}, crc8[8] = {0};
+ /* MCS Field*/
+ for (i = 0; i < 7; i++)
+ sig_bi[i] = (pPMacPktInfo->MCS >> i) & 0x1;
+ /* Packet BW Setting*/
+ sig_bi[7] = pPMacTxInfo->BandWidth;
+ /* HT-Length Field*/
+ for (i = 0; i < 16; i++)
+ sig_bi[i+8] = (pPMacTxInfo->PacketLength >> i) & 0x1;
+ /* Smoothing; 1->allow smoothing*/
+ sig_bi[24] = 1;
+ /*Not Sounding*/
+ sig_bi[25] = 1-pPMacTxInfo->NDP_sound;
+ /*Reserved bit*/
+ sig_bi[26] = 1;
+ /*/Aggregate*/
+ sig_bi[27] = 0;
+ /*STBC Field*/
+ if (pPMacTxInfo->bSTBC) {
+ sig_bi[28] = 1;
+ sig_bi[29] = 0;
+ } else {
+ sig_bi[28] = 0;
+ sig_bi[29] = 0;
+ }
+ /*Advance Coding, 0: BCC, 1: LDPC*/
+ sig_bi[30] = pPMacTxInfo->bLDPC;
+ /* Short GI*/
+ sig_bi[31] = pPMacTxInfo->bSGI;
+ /* N_ELTFs*/
+ if (pPMacTxInfo->NDP_sound == FALSE) {
+ sig_bi[32] = 0;
+ sig_bi[33] = 0;
+ } else {
+ int N_ELTF = pPMacTxInfo->Ntx - pPMacPktInfo->Nss;
+
+ for (i = 0; i < 2; i++)
+ sig_bi[32+i] = (N_ELTF>>i)%2;
+ }
+ /* CRC-8*/
+ CRC8_generator(crc8, sig_bi, 34);
+
+ for (i = 0; i < 8; i++)
+ sig_bi[34+i] = crc8[i];
+
+ /*Tail*/
+ for (i = 42; i < 48; i++)
+ sig_bi[i] = 0;
+
+ _rtw_memset(pPMacTxInfo->HT_SIG, 0, 6);
+ ByteToBit(pPMacTxInfo->HT_SIG, sig_bi, 6);
+}
+
+
+/*======================================================================================
+ VHT-SIG-A1
+ BW Reserved STBC G_ID SU_Nsts P_AID TXOP_PS_NOT_ALLOW Reserved
+ 2b 1b 1b 6b 3b 9b 1b 2b 1b
+ VHT-SIG-A2
+ SGI SGI_Nsym SU/MU coding LDPC_Extra SU_NCS Beamformed Reserved CRC Tail
+ 1b 1b 1b 1b 4b 1b 1b 8b 6b
+======================================================================================*/
+void VHT_SIG_A_generator(
+ PRT_PMAC_TX_INFO pPMacTxInfo,
+ PRT_PMAC_PKT_INFO pPMacPktInfo)
+{
+ UINT i;
+ bool sig_bi[48], crc8[8];
+
+ _rtw_memset(sig_bi, 0, 48);
+ _rtw_memset(crc8, 0, 8);
+
+ /* BW Setting*/
+ for (i = 0; i < 2; i++)
+ sig_bi[i] = (pPMacTxInfo->BandWidth>>i) & 0x1;
+ /* Reserved Bit*/
+ sig_bi[2] = 1;
+ /*STBC Field*/
+ sig_bi[3] = pPMacTxInfo->bSTBC;
+ /*Group ID: Single User -> A value of 0 or 63 indicates an SU PPDU. */
+ for (i = 0; i < 6; i++)
+ sig_bi[4+i] = 0;
+ /* N_STS/Partial AID*/
+ for (i = 0; i < 12; i++) {
+ if (i < 3)
+ sig_bi[10+i] = ((pPMacPktInfo->Nsts - 1)>>i) & 0x1;
+ else
+ sig_bi[10+i] = 0;
+ }
+ /*TXOP_PS_NOT_ALLPWED*/
+ sig_bi[22] = 0;
+ /*Reserved Bits*/
+ sig_bi[23] = 1;
+ /*Short GI*/
+ sig_bi[24] = pPMacTxInfo->bSGI;
+ if (pPMacTxInfo->bSGI > 0 && (pPMacPktInfo->N_sym%10) == 9)
+ sig_bi[25] = 1;
+ else
+ sig_bi[25] = 0;
+ /* SU/MU[0] Coding*/
+ sig_bi[26] = pPMacTxInfo->bLDPC; /* 0:BCC, 1:LDPC */
+ sig_bi[27] = pPMacPktInfo->SIGA2B3; /*/ Record Extra OFDM Symols is added or not when LDPC is used*/
+ /*SU MCS/MU[1-3] Coding*/
+ for (i = 0; i < 4; i++)
+ sig_bi[28+i] = (pPMacPktInfo->MCS>>i) & 0x1;
+ /*SU Beamform */
+ sig_bi[32] = 0; /*packet.TXBF_en;*/
+ /*Reserved Bit*/
+ sig_bi[33] = 1;
+ /*CRC-8*/
+ CRC8_generator(crc8, sig_bi, 34);
+ for (i = 0; i < 8; i++)
+ sig_bi[34+i] = crc8[i];
+ /*Tail*/
+ for (i = 42; i < 48; i++)
+ sig_bi[i] = 0;
+
+ _rtw_memset(pPMacTxInfo->VHT_SIG_A, 0, 6);
+ ByteToBit(pPMacTxInfo->VHT_SIG_A, sig_bi, 6);
+}
+
+/*======================================================================================
+ VHT-SIG-B
+ Length Resesrved Trail
+ 17/19/21 BIT 3/2/2 BIT 6b
+======================================================================================*/
+void VHT_SIG_B_generator(
+ PRT_PMAC_TX_INFO pPMacTxInfo)
+{
+ bool sig_bi[32], crc8_bi[8];
+ UINT i, len, res, tail = 6, total_len, crc8_in_len;
+ UINT sigb_len;
+
+ _rtw_memset(sig_bi, 0, 32);
+ _rtw_memset(crc8_bi, 0, 8);
+
+ /*Sounding Packet*/
+ if (pPMacTxInfo->NDP_sound == 1) {
+ if (pPMacTxInfo->BandWidth == 0) {
+ bool sigb_temp[26] = {0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0};
+
+ _rtw_memcpy(sig_bi, sigb_temp, 26);
+ } else if (pPMacTxInfo->BandWidth == 1) {
+ bool sigb_temp[27] = {1, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0};
+
+ _rtw_memcpy(sig_bi, sigb_temp, 27);
+ } else if (pPMacTxInfo->BandWidth == 2) {
+ bool sigb_temp[29] = {0, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0};
+
+ _rtw_memcpy(sig_bi, sigb_temp, 29);
+ }
+ } else { /* Not NDP Sounding*/
+ bool *sigb_temp[29] = {0};
+
+ if (pPMacTxInfo->BandWidth == 0) {
+ len = 17; res = 3;
+ } else if (pPMacTxInfo->BandWidth == 1) {
+ len = 19; res = 2;
+ } else if (pPMacTxInfo->BandWidth == 2) {
+ len = 21; res = 2;
+ } else {
+ len = 21; res = 2;
+ }
+ total_len = len+res+tail;
+ crc8_in_len = len+res;
+
+ /*Length Field*/
+ sigb_len = (pPMacTxInfo->PacketLength + 3) >> 2;
+
+ for (i = 0; i < len; i++)
+ sig_bi[i] = (sigb_len>>i) & 0x1;
+ /*Reserved Field*/
+ for (i = 0; i < res; i++)
+ sig_bi[len+i] = 1;
+ /* CRC-8*/
+ CRC8_generator(crc8_bi, sig_bi, crc8_in_len);
+
+ /* Tail */
+ for (i = 0; i < tail; i++)
+ sig_bi[len+res+i] = 0;
+ }
+
+ _rtw_memset(pPMacTxInfo->VHT_SIG_B, 0, 4);
+ ByteToBit(pPMacTxInfo->VHT_SIG_B, sig_bi, 4);
+
+ pPMacTxInfo->VHT_SIG_B_CRC = 0;
+ ByteToBit(&(pPMacTxInfo->VHT_SIG_B_CRC), crc8_bi, 1);
+}
+
+/*=======================
+ VHT Delimiter
+=======================*/
+void VHT_Delimiter_generator(
+ PRT_PMAC_TX_INFO pPMacTxInfo
+ )
+{
+ bool sig_bi[32] = {0}, crc8[8] = {0};
+ UINT crc8_in_len = 16;
+ UINT PacketLength = pPMacTxInfo->PacketLength;
+ int j;
+
+ /* Delimiter[0]: EOF*/
+ sig_bi[0] = 1;
+ /* Delimiter[1]: Reserved*/
+ sig_bi[1] = 0;
+ /* Delimiter[3:2]: MPDU Length High*/
+ sig_bi[2] = ((PacketLength - 4) >> 12) % 2;
+ sig_bi[3] = ((PacketLength - 4) >> 13) % 2;
+ /* Delimiter[15:4]: MPDU Length Low*/
+ for (j = 4; j < 16; j++)
+ sig_bi[j] = ((PacketLength - 4) >> (j-4)) % 2;
+ CRC8_generator(crc8, sig_bi, crc8_in_len);
+ for (j = 16; j < 24; j++) /* Delimiter[23:16]: CRC 8*/
+ sig_bi[j] = crc8[j-16];
+ for (j = 24; j < 32; j++) /* Delimiter[31:24]: Signature ('4E' in Hex, 78 in Dec)*/
+ sig_bi[j] = (78 >> (j-24)) % 2;
+
+ _rtw_memset(pPMacTxInfo->VHT_Delimiter, 0, 4);
+ ByteToBit(pPMacTxInfo->VHT_Delimiter, sig_bi, 4);
+}
+
+#endif
#endif
diff --git a/rtl8188FU/core/rtw_odm.c b/rtl8188FU/core/rtw_odm.c
index c5596d5..7b733a9 100755
--- a/rtl8188FU/core/rtw_odm.c
+++ b/rtl8188FU/core/rtw_odm.c
@@ -168,6 +168,18 @@ inline void rtw_odm_ability_set(_adapter *adapter, u32 ability)
rtw_phydm_ability_set(adapter, ability);
}
+/* set ODM_CMNINFO_IC_TYPE based on chip_type */
+void rtw_odm_init_ic_type(_adapter *adapter)
+{
+ HAL_DATA_TYPE *hal_data = GET_HAL_DATA(adapter);
+ DM_ODM_T *odm = &hal_data->odmpriv;
+ u4Byte ic_type = chip_type_to_odm_ic_type(rtw_get_chip_type(adapter));
+
+ rtw_warn_on(!ic_type);
+
+ ODM_CmnInfoInit(odm, ODM_CMNINFO_IC_TYPE, ic_type);
+}
+
void rtw_odm_adaptivity_ver_msg(void *sel, _adapter *adapter)
{
DBG_871X_SEL_NL(sel, "ADAPTIVITY_VERSION "ADAPTIVITY_VERSION"\n");
diff --git a/rtl8188FU/core/rtw_p2p.c b/rtl8188FU/core/rtw_p2p.c
index d96d00f..101487d 100755
--- a/rtl8188FU/core/rtw_p2p.c
+++ b/rtl8188FU/core/rtw_p2p.c
@@ -3515,7 +3515,7 @@ _func_enter_;
rtw_p2p_set_state(pwdinfo, P2P_STATE_LISTEN);
if(!check_buddy_mlmeinfo_state(padapter, WIFI_FW_AP_STATE) &&
- !(pmlmeinfo->state&0x03) == WIFI_FW_AP_STATE)
+ ((pmlmeinfo->state&0x03) != WIFI_FW_AP_STATE))
{
val8 = 1;
rtw_hal_set_hwreg(padapter, HW_VAR_MLME_SITESURVEY, (u8 *)(&val8));
@@ -3539,7 +3539,7 @@ _func_enter_;
if ( pbuddy_mlmeext->cur_channel != pwdinfo->listen_channel )
{
set_channel_bwmode(padapter, pbuddy_mlmeext->cur_channel, pbuddy_mlmeext->cur_ch_offset, pbuddy_mlmeext->cur_bwmode);
- if(!check_buddy_mlmeinfo_state(padapter, WIFI_FW_AP_STATE) &&!(pmlmeinfo->state&0x03) == WIFI_FW_AP_STATE)
+ if (!check_buddy_mlmeinfo_state(padapter, WIFI_FW_AP_STATE) && ((pmlmeinfo->state&0x03) != WIFI_FW_AP_STATE))
{
val8 = 0;
rtw_hal_set_hwreg(padapter, HW_VAR_MLME_SITESURVEY, (u8 *)(&val8));
diff --git a/rtl8188FU/core/rtw_pwrctrl.c b/rtl8188FU/core/rtw_pwrctrl.c
index 9dd0956..1136183 100755
--- a/rtl8188FU/core/rtw_pwrctrl.c
+++ b/rtl8188FU/core/rtw_pwrctrl.c
@@ -211,10 +211,11 @@ bool rtw_pwr_unassociated_idle(_adapter *adapter)
|| check_fwstate(pmlmepriv, WIFI_UNDER_LINKING|WIFI_UNDER_WPS)
|| check_fwstate(pmlmepriv, WIFI_AP_STATE)
|| check_fwstate(pmlmepriv, WIFI_ADHOC_MASTER_STATE|WIFI_ADHOC_STATE)
- #if defined(CONFIG_P2P) && defined(CONFIG_IOCTL_CFG80211) && defined(CONFIG_P2P_IPS)
+ #if defined(CONFIG_P2P) && defined(CONFIG_IOCTL_CFG80211)
|| pcfg80211_wdinfo->is_ro_ch
#elif defined(CONFIG_P2P)
- || !rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE)
+ || rtw_p2p_chk_state(pwdinfo, P2P_STATE_IDLE)
+ || rtw_p2p_chk_state(pwdinfo, P2P_STATE_LISTEN)
#endif
#if defined(CONFIG_P2P) && defined(CONFIG_IOCTL_CFG80211)
|| rtw_get_passing_time_ms(pcfg80211_wdinfo->last_ro_ch_time) < 3000
@@ -237,10 +238,11 @@ bool rtw_pwr_unassociated_idle(_adapter *adapter)
|| check_fwstate(b_pmlmepriv, WIFI_UNDER_LINKING|WIFI_UNDER_WPS)
|| check_fwstate(b_pmlmepriv, WIFI_AP_STATE)
|| check_fwstate(b_pmlmepriv, WIFI_ADHOC_MASTER_STATE|WIFI_ADHOC_STATE)
- #if defined(CONFIG_P2P) && defined(CONFIG_IOCTL_CFG80211) && defined(CONFIG_P2P_IPS)
+ #if defined(CONFIG_P2P) && defined(CONFIG_IOCTL_CFG80211)
|| b_pcfg80211_wdinfo->is_ro_ch
#elif defined(CONFIG_P2P)
- || !rtw_p2p_chk_state(b_pwdinfo, P2P_STATE_NONE)
+ || rtw_p2p_chk_state(b_pwdinfo, P2P_STATE_IDLE)
+ || rtw_p2p_chk_state(b_pwdinfo, P2P_STATE_LISTEN)
#endif
#if defined(CONFIG_P2P) && defined(CONFIG_IOCTL_CFG80211)
|| rtw_get_passing_time_ms(b_pcfg80211_wdinfo->last_ro_ch_time) < 3000
@@ -689,10 +691,8 @@ u8 PS_RDY_CHECK(_adapter * padapter)
|| check_fwstate(pmlmepriv, WIFI_UNDER_LINKING|WIFI_UNDER_WPS)
|| check_fwstate(pmlmepriv, WIFI_AP_STATE)
|| check_fwstate(pmlmepriv, WIFI_ADHOC_MASTER_STATE|WIFI_ADHOC_STATE)
- #if defined(CONFIG_P2P) && defined(CONFIG_IOCTL_CFG80211) && defined(CONFIG_P2P_IPS)
+ #if defined(CONFIG_P2P) && defined(CONFIG_IOCTL_CFG80211)
|| pcfg80211_wdinfo->is_ro_ch
- #elif defined(CONFIG_P2P)
- || !rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE)
#endif
|| rtw_is_scan_deny(padapter)
#ifdef CONFIG_TDLS
@@ -905,8 +905,6 @@ _func_enter_;
else
pwrpriv->lps_leave_cnts = 0;
#ifdef CONFIG_TDLS
- _enter_critical_bh(&pstapriv->sta_hash_lock, &irqL);
-
for(i=0; i< NUM_STA; i++)
{
phead = &(pstapriv->sta_hash[i]);
@@ -921,8 +919,6 @@ _func_enter_;
plist = get_next(plist);
}
}
-
- _exit_critical_bh(&pstapriv->sta_hash_lock, &irqL);
#endif //CONFIG_TDLS
pwrpriv->pwr_mode = ps_mode;
@@ -984,8 +980,6 @@ _func_enter_;
else
pwrpriv->lps_enter_cnts = 0;
#ifdef CONFIG_TDLS
- _enter_critical_bh(&pstapriv->sta_hash_lock, &irqL);
-
for(i=0; i< NUM_STA; i++)
{
phead = &(pstapriv->sta_hash[i]);
@@ -1000,8 +994,6 @@ _func_enter_;
plist = get_next(plist);
}
}
-
- _exit_critical_bh(&pstapriv->sta_hash_lock, &irqL);
#endif //CONFIG_TDLS
#ifdef CONFIG_BT_COEXIST
@@ -2187,6 +2179,7 @@ _func_enter_;
/*default low active*/
pwrctrlpriv->is_high_active = HIGH_ACTIVE;
val8 = (pwrctrlpriv->is_high_active == 0) ? 1 : 0;
+ rtw_hal_switch_gpio_wl_ctrl(padapter, WAKEUP_GPIO_IDX, _TRUE);
rtw_hal_set_output_gpio(padapter, WAKEUP_GPIO_IDX, val8);
DBG_871X("%s: set GPIO_%d %d as default.\n",
__func__, WAKEUP_GPIO_IDX, val8);
diff --git a/rtl8188FU/core/rtw_recv.c b/rtl8188FU/core/rtw_recv.c
index 668b4a6..43d5e5b 100755
--- a/rtl8188FU/core/rtw_recv.c
+++ b/rtl8188FU/core/rtw_recv.c
@@ -1038,7 +1038,7 @@ sint OnTDLS(_adapter *adapter, union recv_frame *precv_frame)
+ PAYLOAD_TYPE_LEN
+ category_field;
- DBG_871X("[TDLS] Recv %s from "MAC_FMT"\n", rtw_tdls_action_txt(*paction), MAC_ARG(pattrib->src));
+ DBG_871X("[TDLS] Recv %s from "MAC_FMT" with SeqNum = %d \n", rtw_tdls_action_txt(*paction), MAC_ARG(pattrib->src), GetSequence(get_recvframe_data(precv_frame)));
if (hal_chk_wl_func(adapter, WL_FUNC_TDLS) == _FALSE) {
DBG_871X("Ignore tdls frame since hal doesn't support tdls\n");
@@ -1263,13 +1263,11 @@ _func_enter_;
}
#ifdef CONFIG_TDLS_CH_SW
- pchsw_info->ch_sw_state |= TDLS_PEER_AT_OFF_STATE;
-
if(ATOMIC_READ(&pchsw_info->chsw_on) == _TRUE) {
- if (!(pchsw_info->ch_sw_state & TDLS_PEER_AT_OFF_STATE)) {
- DBG_871X("%s %d\n", __FUNCTION__, __LINE__);
- issue_nulldata_to_TDLS_peer_STA(adapter, ptdls_sta->hwaddr, 0, 0, 0);
+ if (adapter->mlmeextpriv.cur_channel != rtw_get_oper_ch(adapter)) {
pchsw_info->ch_sw_state |= TDLS_PEER_AT_OFF_STATE;
+ if (!(pchsw_info->ch_sw_state & TDLS_CH_SW_INITIATOR_STATE))
+ _cancel_timer_ex(&ptdls_sta->ch_sw_timer);
/* On_TDLS_Peer_Traffic_Rsp(adapter, precv_frame); */
}
}
@@ -2325,7 +2323,8 @@ _func_enter_;
#if 1 //Dump rx packets
{
- u8 bDumpRxPkt;
+ u8 bDumpRxPkt = 0;
+
rtw_hal_get_def_var(adapter, HAL_DEF_DBG_DUMP_RXPKT, &(bDumpRxPkt));
if (bDumpRxPkt == 1) //dump all rx packets
dump_rx_packet(ptr);
@@ -3556,11 +3555,15 @@ int recv_indicatepkt_reorder(_adapter *padapter, union recv_frame *prframe)
//recv_indicatepkts_in_order(padapter, preorder_ctrl, _TRUE);
if(recv_indicatepkts_in_order(padapter, preorder_ctrl, _FALSE)==_TRUE)
{
+ if (!preorder_ctrl->bReorderWaiting) {
+ preorder_ctrl->bReorderWaiting = _TRUE;
_set_timer(&preorder_ctrl->reordering_ctrl_timer, REORDER_WAIT_TIME);
+ }
_exit_critical_bh(&ppending_recvframe_queue->lock, &irql);
}
else
{
+ preorder_ctrl->bReorderWaiting = _FALSE;
_exit_critical_bh(&ppending_recvframe_queue->lock, &irql);
_cancel_timer_ex(&preorder_ctrl->reordering_ctrl_timer);
}
@@ -3593,6 +3596,10 @@ void rtw_reordering_ctrl_timeout_handler(void *pcontext)
_enter_critical_bh(&ppending_recvframe_queue->lock, &irql);
+ if (preorder_ctrl) {
+ preorder_ctrl->bReorderWaiting = _FALSE;
+ }
+
if(recv_indicatepkts_in_order(padapter, preorder_ctrl, _TRUE)==_TRUE)
{
_set_timer(&preorder_ctrl->reordering_ctrl_timer, REORDER_WAIT_TIME);
@@ -3683,9 +3690,11 @@ int validate_mp_recv_frame(_adapter *adapter, union recv_frame *precv_frame)
int ret = _SUCCESS;
u8 *ptr = precv_frame->u.hdr.rx_data;
u8 type,subtype;
+ struct mp_priv *pmppriv = &adapter->mppriv;
+ struct mp_tx *pmptx;
+
+ pmptx = &pmppriv->tx;
- if(!adapter->mppriv.bmac_filter)
- return ret;
#if 0
if (1){
u8 bDumpRxPkt;
@@ -3700,10 +3709,19 @@ int validate_mp_recv_frame(_adapter *adapter, union recv_frame *precv_frame)
for(i=0; i<64;i=i+8)
DBG_871X("%02X:%02X:%02X:%02X:%02X:%02X:%02X:%02X:\n", *(ptr+i),
*(ptr+i+1), *(ptr+i+2) ,*(ptr+i+3) ,*(ptr+i+4),*(ptr+i+5), *(ptr+i+6), *(ptr+i+7));
- DBG_871X("############################# \n");
+ DBG_871X("#############################\n");
}
}
-#endif
+#endif
+ if (pmppriv->bloopback) {
+ if (_rtw_memcmp(ptr + 24, pmptx->buf + 24, precv_frame->u.hdr.len - 24) == _FALSE) {
+ DBG_871X("Compare payload content Fail !!!\n");
+ ret = _FAIL;
+ }
+ }
+
+ if (!adapter->mppriv.bmac_filter)
+ return ret;
if(_rtw_memcmp( GetAddr2Ptr(ptr), adapter->mppriv.mac_filter, ETH_ALEN) == _FALSE )
ret = _FAIL;
diff --git a/rtl8188FU/core/rtw_rf.c b/rtl8188FU/core/rtw_rf.c
index 7f3ed03..e97af16 100755
--- a/rtl8188FU/core/rtw_rf.c
+++ b/rtl8188FU/core/rtw_rf.c
@@ -188,266 +188,418 @@ const u8 _band_to_band_cap[] = {
0,
};
-struct country_chplan {
- char alpha2[2];
- u8 chplan;
+#ifdef CONFIG_80211AC_VHT
+#define COUNTRY_CHPLAN_ASSIGN_EN_11AC(_val) , .en_11ac = (_val)
+#else
+#define COUNTRY_CHPLAN_ASSIGN_EN_11AC(_val)
+#endif
+
+#if RTW_DEF_MODULE_REGULATORY_CERT
+#define COUNTRY_CHPLAN_ASSIGN_DEF_MODULE_FLAGS(_val) , .def_module_flags = (_val)
+#else
+#define COUNTRY_CHPLAN_ASSIGN_DEF_MODULE_FLAGS(_val)
+#endif
+
+/* has def_module_flags specified, used by common map and HAL dfference map */
+#define COUNTRY_CHPLAN_ENT(_alpha2, _chplan, _en_11ac, _def_module_flags) \
+ {.alpha2 = (_alpha2), .chplan = (_chplan) \
+ COUNTRY_CHPLAN_ASSIGN_EN_11AC(_en_11ac) \
+ COUNTRY_CHPLAN_ASSIGN_DEF_MODULE_FLAGS(_def_module_flags) \
+ }
+
+#ifdef CONFIG_CUSTOMIZED_COUNTRY_CHPLAN_MAP
+
+#include "../platform/custom_country_chplan.h"
+
+#elif RTW_DEF_MODULE_REGULATORY_CERT
+
+#if (RTW_DEF_MODULE_REGULATORY_CERT & RTW_MODULE_RTL8821AE_HMC_M2)
+static const struct country_chplan RTL8821AE_HMC_M2_country_chplan_map[] = {
+ COUNTRY_CHPLAN_ENT("CN", 0x51, 1, 0xFB), /* China */
+ COUNTRY_CHPLAN_ENT("RU", 0x59, 0, 0xFB), /* Russia(fac/gost), Kaliningrad */
+ COUNTRY_CHPLAN_ENT("UA", 0x26, 0, 0xFB), /* Ukraine */
+};
+static const u16 RTL8821AE_HMC_M2_country_chplan_map_sz = sizeof(RTL8821AE_HMC_M2_country_chplan_map)/sizeof(struct country_chplan);
+#endif
+
+#if (RTW_DEF_MODULE_REGULATORY_CERT & RTW_MODULE_RTL8821AU)
+static const struct country_chplan RTL8821AU_country_chplan_map[] = {
+ COUNTRY_CHPLAN_ENT("RU", 0x59, 0, 0xFB), /* Russia(fac/gost), Kaliningrad */
+ COUNTRY_CHPLAN_ENT("UA", 0x26, 0, 0xFB), /* Ukraine */
+};
+static const u16 RTL8821AU_country_chplan_map_sz = sizeof(RTL8821AU_country_chplan_map)/sizeof(struct country_chplan);
+#endif
+
+#if (RTW_DEF_MODULE_REGULATORY_CERT & RTW_MODULE_RTL8812AENF_NGFF)
+static const struct country_chplan RTL8812AENF_NGFF_country_chplan_map[] = {
+};
+static const u16 RTL8812AENF_NGFF_country_chplan_map_sz = sizeof(RTL8812AENF_NGFF_country_chplan_map)/sizeof(struct country_chplan);
+#endif
+
+#if (RTW_DEF_MODULE_REGULATORY_CERT & RTW_MODULE_RTL8812AEBT_HMC)
+static const struct country_chplan RTL8812AEBT_HMC_country_chplan_map[] = {
+};
+static const u16 RTL8812AEBT_HMC_country_chplan_map_sz = sizeof(RTL8812AEBT_HMC_country_chplan_map)/sizeof(struct country_chplan);
+#endif
+
+#if (RTW_DEF_MODULE_REGULATORY_CERT & RTW_MODULE_RTL8188EE_HMC_M2)
+static const struct country_chplan RTL8188EE_HMC_M2_country_chplan_map[] = {
+};
+static const u16 RTL8188EE_HMC_M2_country_chplan_map_sz = sizeof(RTL8188EE_HMC_M2_country_chplan_map)/sizeof(struct country_chplan);
+#endif
+
+#if (RTW_DEF_MODULE_REGULATORY_CERT & RTW_MODULE_RTL8723BE_HMC_M2)
+static const struct country_chplan RTL8723BE_HMC_M2_country_chplan_map[] = {
+};
+static const u16 RTL8723BE_HMC_M2_country_chplan_map_sz = sizeof(RTL8723BE_HMC_M2_country_chplan_map)/sizeof(struct country_chplan);
+#endif
+
+#if (RTW_DEF_MODULE_REGULATORY_CERT & RTW_MODULE_RTL8723BS_NGFF1216)
+static const struct country_chplan RTL8723BS_NGFF1216_country_chplan_map[] = {
+};
+static const u16 RTL8723BS_NGFF1216_country_chplan_map_sz = sizeof(RTL8723BS_NGFF1216_country_chplan_map)/sizeof(struct country_chplan);
+#endif
+
+#if (RTW_DEF_MODULE_REGULATORY_CERT & RTW_MODULE_RTL8192EEBT_HMC_M2)
+static const struct country_chplan RTL8192EEBT_HMC_M2_country_chplan_map[] = {
};
+static const u16 RTL8192EEBT_HMC_M2_country_chplan_map_sz = sizeof(RTL8192EEBT_HMC_M2_country_chplan_map)/sizeof(struct country_chplan);
+#endif
+
+/**
+ * rtw_def_module_get_chplan_from_country -
+ * @country_code: string of country code
+ * @return:
+ * Return NULL for case referring to common map
+ */
+static const struct country_chplan *rtw_def_module_get_chplan_from_country(const char *country_code)
+{
+ const struct country_chplan *ent = NULL;
+ const struct country_chplan *hal_map = NULL;
+ u16 hal_map_sz = 0;
+ int i;
+
+ /* TODO: runtime selection for multi driver */
+#if (RTW_DEF_MODULE_REGULATORY_CERT == RTW_MODULE_RTL8821AE_HMC_M2)
+ hal_map = RTL8821AE_HMC_M2_country_chplan_map;
+ hal_map_sz = RTL8821AE_HMC_M2_country_chplan_map_sz;
+#elif (RTW_DEF_MODULE_REGULATORY_CERT == RTW_MODULE_RTL8821AU)
+ hal_map = RTL8821AU_country_chplan_map;
+ hal_map_sz = RTL8821AU_country_chplan_map_sz;
+#elif (RTW_DEF_MODULE_REGULATORY_CERT == RTW_MODULE_RTL8812AENF_NGFF)
+ hal_map = RTL8812AENF_NGFF_country_chplan_map;
+ hal_map_sz = RTL8812AENF_NGFF_country_chplan_map_sz;
+#elif (RTW_DEF_MODULE_REGULATORY_CERT == RTW_MODULE_RTL8812AEBT_HMC)
+ hal_map = RTL8812AEBT_HMC_country_chplan_map;
+ hal_map_sz = RTL8812AEBT_HMC_country_chplan_map_sz;
+#elif (RTW_DEF_MODULE_REGULATORY_CERT == RTW_MODULE_RTL8188EE_HMC_M2)
+ hal_map = RTL8188EE_HMC_M2_country_chplan_map;
+ hal_map_sz = RTL8188EE_HMC_M2_country_chplan_map_sz;
+#elif (RTW_DEF_MODULE_REGULATORY_CERT == RTW_MODULE_RTL8723BE_HMC_M2)
+ hal_map = RTL8723BE_HMC_M2_country_chplan_map;
+ hal_map_sz = RTL8723BE_HMC_M2_country_chplan_map_sz;
+#elif (RTW_DEF_MODULE_REGULATORY_CERT == RTW_MODULE_RTL8723BS_NGFF1216)
+ hal_map = RTL8723BS_NGFF1216_country_chplan_map;
+ hal_map_sz = RTL8723BS_NGFF1216_country_chplan_map_sz;
+#elif (RTW_DEF_MODULE_REGULATORY_CERT == RTW_MODULE_RTL8192EEBT_HMC_M2)
+ hal_map = RTL8192EEBT_HMC_M2_country_chplan_map;
+ hal_map_sz = RTL8192EEBT_HMC_M2_country_chplan_map_sz;
+#endif
+
+ if (hal_map == NULL || hal_map_sz == 0)
+ goto exit;
+
+ for (i = 0; i < hal_map_sz; i++) {
+ if (strncmp(country_code, hal_map[i].alpha2, 2) == 0) {
+ ent = &hal_map[i];
+ break;
+ }
+ }
+
+exit:
+ return ent;
+}
+#endif /* CONFIG_CUSTOMIZED_COUNTRY_CHPLAN_MAP or RTW_DEF_MODULE_REGULATORY_CERT */
static const struct country_chplan country_chplan_map[] = {
- {"AD", 0x26}, /* Andorra */
- {"AE", 0x26}, /* United Arab Emirates */
- {"AF", 0x42}, /* Afghanistan */
- {"AG", 0x30}, /* Antigua & Barbuda */
- {"AI", 0x26}, /* Anguilla(UK) */
- {"AL", 0x26}, /* Albania */
- {"AM", 0x34}, /* Armenia */
- {"AO", 0x26}, /* Angola */
- {"AQ", 0x26}, /* Antarctica */
- {"AR", 0x57}, /* Argentina */
- {"AS", 0x34}, /* American Samoa */
- {"AT", 0x26}, /* Austria */
- {"AU", 0x45}, /* Australia */
- {"AW", 0x34}, /* Aruba */
- {"AZ", 0x26}, /* Azerbaijan */
- {"BA", 0x26}, /* Bosnia & Herzegovina */
- {"BB", 0x34}, /* Barbados */
- {"BD", 0x26}, /* Bangladesh */
- {"BE", 0x26}, /* Belgium */
- {"BF", 0x26}, /* Burkina Faso */
- {"BG", 0x26}, /* Bulgaria */
- {"BH", 0x47}, /* Bahrain */
- {"BI", 0x26}, /* Burundi */
- {"BJ", 0x26}, /* Benin */
- {"BN", 0x47}, /* Brunei */
- {"BO", 0x30}, /* Bolivia */
- {"BR", 0x34}, /* Brazil */
- {"BS", 0x34}, /* Bahamas */
- {"BW", 0x26}, /* Botswana */
- {"BY", 0x26}, /* Belarus */
- {"BZ", 0x34}, /* Belize */
- {"CA", 0x34}, /* Canada */
- {"CC", 0x26}, /* Cocos (Keeling) Islands (Australia) */
- {"CD", 0x26}, /* Congo, Republic of the */
- {"CF", 0x26}, /* Central African Republic */
- {"CG", 0x26}, /* Congo, Democratic Republic of the. Zaire */
- {"CH", 0x26}, /* Switzerland */
- {"CI", 0x26}, /* Cote d'Ivoire */
- {"CK", 0x26}, /* Cook Islands */
- {"CL", 0x30}, /* Chile */
- {"CM", 0x26}, /* Cameroon */
- {"CN", 0x48}, /* China */
- {"CO", 0x34}, /* Colombia */
- {"CR", 0x34}, /* Costa Rica */
- {"CV", 0x26}, /* Cape Verde */
- {"CX", 0x45}, /* Christmas Island (Australia) */
- {"CY", 0x26}, /* Cyprus */
- {"CZ", 0x26}, /* Czech Republic */
- {"DE", 0x26}, /* Germany */
- {"DJ", 0x26}, /* Djibouti */
- {"DK", 0x26}, /* Denmark */
- {"DM", 0x34}, /* Dominica */
- {"DO", 0x34}, /* Dominican Republic */
- {"DZ", 0x26}, /* Algeria */
- {"EC", 0x34}, /* Ecuador */
- {"EE", 0x26}, /* Estonia */
- {"EG", 0x47}, /* Egypt */
- {"EH", 0x47}, /* Western Sahara */
- {"ER", 0x26}, /* Eritrea */
- {"ES", 0x26}, /* Spain */
- {"ET", 0x26}, /* Ethiopia */
- {"FI", 0x26}, /* Finland */
- {"FJ", 0x34}, /* Fiji */
- {"FK", 0x26}, /* Falkland Islands (Islas Malvinas) (UK) */
- {"FM", 0x34}, /* Micronesia, Federated States of (USA) */
- {"FO", 0x26}, /* Faroe Islands (Denmark) */
- {"FR", 0x26}, /* France */
- {"GA", 0x26}, /* Gabon */
- {"GB", 0x26}, /* Great Britain (United Kingdom; England) */
- {"GD", 0x34}, /* Grenada */
- {"GE", 0x26}, /* Georgia */
- {"GF", 0x26}, /* French Guiana */
- {"GG", 0x26}, /* Guernsey (UK) */
- {"GH", 0x26}, /* Ghana */
- {"GI", 0x26}, /* Gibraltar (UK) */
- {"GL", 0x26}, /* Greenland (Denmark) */
- {"GM", 0x26}, /* Gambia */
- {"GN", 0x26}, /* Guinea */
- {"GP", 0x26}, /* Guadeloupe (France) */
- {"GQ", 0x26}, /* Equatorial Guinea */
- {"GR", 0x26}, /* Greece */
- {"GS", 0x26}, /* South Georgia and the Sandwich Islands (UK) */
- {"GT", 0x34}, /* Guatemala */
- {"GU", 0x34}, /* Guam (USA) */
- {"GW", 0x26}, /* Guinea-Bissau */
- {"GY", 0x44}, /* Guyana */
- {"HK", 0x26}, /* Hong Kong */
- {"HM", 0x45}, /* Heard and McDonald Islands (Australia) */
- {"HN", 0x32}, /* Honduras */
- {"HR", 0x26}, /* Croatia */
- {"HT", 0x34}, /* Haiti */
- {"HU", 0x26}, /* Hungary */
- {"ID", 0x54}, /* Indonesia */
- {"IE", 0x26}, /* Ireland */
- {"IL", 0x47}, /* Israel */
- {"IM", 0x26}, /* Isle of Man (UK) */
- {"IN", 0x47}, /* India */
- {"IQ", 0x26}, /* Iraq */
- {"IR", 0x26}, /* Iran */
- {"IS", 0x26}, /* Iceland */
- {"IT", 0x26}, /* Italy */
- {"JE", 0x26}, /* Jersey (UK) */
- {"JM", 0x51}, /* Jamaica */
- {"JO", 0x49}, /* Jordan */
- {"JP", 0x27}, /* Japan- Telec */
- {"KE", 0x47}, /* Kenya */
- {"KG", 0x26}, /* Kyrgyzstan */
- {"KH", 0x26}, /* Cambodia */
- {"KI", 0x26}, /* Kiribati */
- {"KN", 0x34}, /* Saint Kitts and Nevis */
- {"KR", 0x28}, /* South Korea */
- {"KW", 0x47}, /* Kuwait */
- {"KY", 0x34}, /* Cayman Islands (UK) */
- {"KZ", 0x26}, /* Kazakhstan */
- {"LA", 0x26}, /* Laos */
- {"LB", 0x26}, /* Lebanon */
- {"LC", 0x34}, /* Saint Lucia */
- {"LI", 0x26}, /* Liechtenstein */
- {"LK", 0x26}, /* Sri Lanka */
- {"LR", 0x26}, /* Liberia */
- {"LS", 0x26}, /* Lesotho */
- {"LT", 0x26}, /* Lithuania */
- {"LU", 0x26}, /* Luxembourg */
- {"LV", 0x26}, /* Latvia */
- {"LY", 0x26}, /* Libya */
- {"MA", 0x47}, /* Morocco */
- {"MC", 0x26}, /* Monaco */
- {"MD", 0x26}, /* Moldova */
- {"ME", 0x26}, /* Montenegro */
- {"MF", 0x34}, /* Saint Martin */
- {"MG", 0x26}, /* Madagascar */
- {"MH", 0x34}, /* Marshall Islands (USA) */
- {"MK", 0x26}, /* Republic of Macedonia (FYROM) */
- {"ML", 0x26}, /* Mali */
- {"MM", 0x26}, /* Burma (Myanmar) */
- {"MN", 0x26}, /* Mongolia */
- {"MO", 0x26}, /* Macau */
- {"MP", 0x34}, /* Northern Mariana Islands (USA) */
- {"MQ", 0x26}, /* Martinique (France) */
- {"MR", 0x26}, /* Mauritania */
- {"MS", 0x26}, /* Montserrat (UK) */
- {"MT", 0x26}, /* Malta */
- {"MU", 0x26}, /* Mauritius */
- {"MV", 0x26}, /* Maldives */
- {"MW", 0x26}, /* Malawi */
- {"MX", 0x34}, /* Mexico */
- {"MY", 0x47}, /* Malaysia */
- {"MZ", 0x26}, /* Mozambique */
- {"NA", 0x26}, /* Namibia */
- {"NC", 0x26}, /* New Caledonia */
- {"NE", 0x26}, /* Niger */
- {"NF", 0x45}, /* Norfolk Island (Australia) */
- {"NG", 0x50}, /* Nigeria */
- {"NI", 0x34}, /* Nicaragua */
- {"NL", 0x26}, /* Netherlands */
- {"NO", 0x26}, /* Norway */
- {"NP", 0x47}, /* Nepal */
- {"NR", 0x26}, /* Nauru */
- {"NU", 0x45}, /* Niue */
- {"NZ", 0x45}, /* New Zealand */
- {"OM", 0x26}, /* Oman */
- {"PA", 0x34}, /* Panama */
- {"PE", 0x34}, /* Peru */
- {"PF", 0x26}, /* French Polynesia (France) */
- {"PG", 0x26}, /* Papua New Guinea */
- {"PH", 0x26}, /* Philippines */
- {"PK", 0x51}, /* Pakistan */
- {"PL", 0x26}, /* Poland */
- {"PM", 0x26}, /* Saint Pierre and Miquelon (France) */
- {"PR", 0x34}, /* Puerto Rico */
- {"PT", 0x26}, /* Portugal */
- {"PW", 0x34}, /* Palau */
- {"PY", 0x34}, /* Paraguay */
- {"QA", 0x51}, /* Qatar */
- {"RE", 0x26}, /* Reunion (France) */
- {"RO", 0x26}, /* Romania */
- {"RS", 0x26}, /* Serbia */
- {"RU", 0x59}, /* Russia, fac/gost */
- {"RW", 0x26}, /* Rwanda */
- {"SA", 0x26}, /* Saudi Arabia */
- {"SB", 0x26}, /* Solomon Islands */
- {"SC", 0x34}, /* Seychelles */
- {"SE", 0x26}, /* Sweden */
- {"SG", 0x47}, /* Singapore */
- {"SH", 0x26}, /* Saint Helena (UK) */
- {"SI", 0x26}, /* Slovenia */
- {"SJ", 0x26}, /* Svalbard (Norway) */
- {"SK", 0x26}, /* Slovakia */
- {"SL", 0x26}, /* Sierra Leone */
- {"SM", 0x26}, /* San Marino */
- {"SN", 0x26}, /* Senegal */
- {"SO", 0x26}, /* Somalia */
- {"SR", 0x34}, /* Suriname */
- {"ST", 0x34}, /* Sao Tome and Principe */
- {"SV", 0x30}, /* El Salvador */
- {"SX", 0x34}, /* Sint Marteen */
- {"SZ", 0x26}, /* Swaziland */
- {"TC", 0x26}, /* Turks and Caicos Islands (UK) */
- {"TD", 0x26}, /* Chad */
- {"TF", 0x26}, /* French Southern and Antarctic Lands (FR Southern Territories) */
- {"TG", 0x26}, /* Togo */
- {"TH", 0x26}, /* Thailand */
- {"TJ", 0x26}, /* Tajikistan */
- {"TK", 0x45}, /* Tokelau */
- {"TM", 0x26}, /* Turkmenistan */
- {"TN", 0x47}, /* Tunisia */
- {"TO", 0x26}, /* Tonga */
- {"TR", 0x26}, /* Turkey */
- {"TT", 0x42}, /* Trinidad & Tobago */
- {"TW", 0x39}, /* Taiwan */
- {"TZ", 0x26}, /* Tanzania */
- {"UA", 0x26}, /* Ukraine */
- {"UG", 0x26}, /* Uganda */
- {"US", 0x34}, /* United States of America (USA) */
- {"UY", 0x34}, /* Uruguay */
- {"UZ", 0x47}, /* Uzbekistan */
- {"VA", 0x26}, /* Holy See (Vatican City) */
- {"VC", 0x34}, /* Saint Vincent and the Grenadines */
- {"VE", 0x30}, /* Venezuela */
- {"VI", 0x34}, /* United States Virgin Islands (USA) */
- {"VN", 0x26}, /* Vietnam */
- {"VU", 0x26}, /* Vanuatu */
- {"WF", 0x26}, /* Wallis and Futuna (France) */
- {"WS", 0x34}, /* Samoa */
- {"YE", 0x26}, /* Yemen */
- {"YT", 0x26}, /* Mayotte (France) */
- {"ZA", 0x26}, /* South Africa */
- {"ZM", 0x26}, /* Zambia */
- {"ZW", 0x26}, /* Zimbabwe */
+ COUNTRY_CHPLAN_ENT("AD", 0x26, 1, 0x00), /* Andorra */
+ COUNTRY_CHPLAN_ENT("AE", 0x26, 1, 0xFB), /* United Arab Emirates */
+ COUNTRY_CHPLAN_ENT("AF", 0x42, 1, 0x00), /* Afghanistan */
+ COUNTRY_CHPLAN_ENT("AG", 0x30, 1, 0x00), /* Antigua & Barbuda */
+ COUNTRY_CHPLAN_ENT("AI", 0x26, 1, 0x00), /* Anguilla(UK) */
+ COUNTRY_CHPLAN_ENT("AL", 0x26, 1, 0xF1), /* Albania */
+ COUNTRY_CHPLAN_ENT("AM", 0x26, 1, 0xB0), /* Armenia */
+ COUNTRY_CHPLAN_ENT("AO", 0x26, 1, 0xE0), /* Angola */
+ COUNTRY_CHPLAN_ENT("AQ", 0x26, 1, 0x00), /* Antarctica */
+ COUNTRY_CHPLAN_ENT("AR", 0x57, 1, 0xF3), /* Argentina */
+ COUNTRY_CHPLAN_ENT("AS", 0x34, 1, 0x00), /* American Samoa */
+ COUNTRY_CHPLAN_ENT("AT", 0x26, 1, 0xFB), /* Austria */
+ COUNTRY_CHPLAN_ENT("AU", 0x45, 1, 0xFB), /* Australia */
+ COUNTRY_CHPLAN_ENT("AW", 0x34, 1, 0xB0), /* Aruba */
+ COUNTRY_CHPLAN_ENT("AZ", 0x26, 1, 0xF1), /* Azerbaijan */
+ COUNTRY_CHPLAN_ENT("BA", 0x26, 1, 0xF1), /* Bosnia & Herzegovina */
+ COUNTRY_CHPLAN_ENT("BB", 0x34, 1, 0x50), /* Barbados */
+ COUNTRY_CHPLAN_ENT("BD", 0x26, 1, 0xF1), /* Bangladesh */
+ COUNTRY_CHPLAN_ENT("BE", 0x26, 1, 0xFB), /* Belgium */
+ COUNTRY_CHPLAN_ENT("BF", 0x26, 1, 0xB0), /* Burkina Faso */
+ COUNTRY_CHPLAN_ENT("BG", 0x26, 1, 0xF1), /* Bulgaria */
+ COUNTRY_CHPLAN_ENT("BH", 0x47, 1, 0xF1), /* Bahrain */
+ COUNTRY_CHPLAN_ENT("BI", 0x26, 1, 0xB0), /* Burundi */
+ COUNTRY_CHPLAN_ENT("BJ", 0x26, 1, 0xB0), /* Benin */
+ COUNTRY_CHPLAN_ENT("BN", 0x47, 1, 0x10), /* Brunei */
+ COUNTRY_CHPLAN_ENT("BO", 0x30, 1, 0xF1), /* Bolivia */
+ COUNTRY_CHPLAN_ENT("BR", 0x34, 1, 0xF1), /* Brazil */
+ COUNTRY_CHPLAN_ENT("BS", 0x34, 1, 0x20), /* Bahamas */
+ COUNTRY_CHPLAN_ENT("BW", 0x26, 1, 0xF1), /* Botswana */
+ COUNTRY_CHPLAN_ENT("BY", 0x26, 1, 0xF1), /* Belarus */
+ COUNTRY_CHPLAN_ENT("BZ", 0x34, 1, 0x00), /* Belize */
+ COUNTRY_CHPLAN_ENT("CA", 0x34, 1, 0xFB), /* Canada */
+ COUNTRY_CHPLAN_ENT("CC", 0x26, 1, 0x00), /* Cocos (Keeling) Islands (Australia) */
+ COUNTRY_CHPLAN_ENT("CD", 0x26, 1, 0xB0), /* Congo, Republic of the */
+ COUNTRY_CHPLAN_ENT("CF", 0x26, 1, 0xB0), /* Central African Republic */
+ COUNTRY_CHPLAN_ENT("CG", 0x26, 1, 0xB0), /* Congo, Democratic Republic of the. Zaire */
+ COUNTRY_CHPLAN_ENT("CH", 0x26, 1, 0xFB), /* Switzerland */
+ COUNTRY_CHPLAN_ENT("CI", 0x26, 1, 0xF1), /* Cote d'Ivoire */
+ COUNTRY_CHPLAN_ENT("CK", 0x26, 1, 0x00), /* Cook Islands */
+ COUNTRY_CHPLAN_ENT("CL", 0x30, 1, 0xF1), /* Chile */
+ COUNTRY_CHPLAN_ENT("CM", 0x26, 1, 0xB0), /* Cameroon */
+ COUNTRY_CHPLAN_ENT("CN", 0x48, 1, 0xFB), /* China */
+ COUNTRY_CHPLAN_ENT("CO", 0x34, 1, 0xF1), /* Colombia */
+ COUNTRY_CHPLAN_ENT("CR", 0x34, 1, 0xF1), /* Costa Rica */
+ COUNTRY_CHPLAN_ENT("CV", 0x26, 1, 0xB0), /* Cape Verde */
+ COUNTRY_CHPLAN_ENT("CX", 0x45, 1, 0x00), /* Christmas Island (Australia) */
+ COUNTRY_CHPLAN_ENT("CY", 0x26, 1, 0xFB), /* Cyprus */
+ COUNTRY_CHPLAN_ENT("CZ", 0x26, 1, 0xFB), /* Czech Republic */
+ COUNTRY_CHPLAN_ENT("DE", 0x26, 1, 0xFB), /* Germany */
+ COUNTRY_CHPLAN_ENT("DJ", 0x26, 1, 0x80), /* Djibouti */
+ COUNTRY_CHPLAN_ENT("DK", 0x26, 1, 0xFB), /* Denmark */
+ COUNTRY_CHPLAN_ENT("DM", 0x34, 1, 0x00), /* Dominica */
+ COUNTRY_CHPLAN_ENT("DO", 0x34, 1, 0xF1), /* Dominican Republic */
+ COUNTRY_CHPLAN_ENT("DZ", 0x26, 1, 0xF1), /* Algeria */
+ COUNTRY_CHPLAN_ENT("EC", 0x34, 1, 0xF1), /* Ecuador */
+ COUNTRY_CHPLAN_ENT("EE", 0x26, 1, 0xFB), /* Estonia */
+ COUNTRY_CHPLAN_ENT("EG", 0x47, 0, 0xF1), /* Egypt */
+ COUNTRY_CHPLAN_ENT("EH", 0x47, 1, 0x80), /* Western Sahara */
+ COUNTRY_CHPLAN_ENT("ER", 0x26, 1, 0x00), /* Eritrea */
+ COUNTRY_CHPLAN_ENT("ES", 0x26, 1, 0xFB), /* Spain, Canary Islands, Ceuta, Melilla */
+ COUNTRY_CHPLAN_ENT("ET", 0x26, 1, 0xB0), /* Ethiopia */
+ COUNTRY_CHPLAN_ENT("FI", 0x26, 1, 0xFB), /* Finland */
+ COUNTRY_CHPLAN_ENT("FJ", 0x34, 1, 0x00), /* Fiji */
+ COUNTRY_CHPLAN_ENT("FK", 0x26, 1, 0x00), /* Falkland Islands (Islas Malvinas) (UK) */
+ COUNTRY_CHPLAN_ENT("FM", 0x34, 1, 0x00), /* Micronesia, Federated States of (USA) */
+ COUNTRY_CHPLAN_ENT("FO", 0x26, 1, 0x00), /* Faroe Islands (Denmark) */
+ COUNTRY_CHPLAN_ENT("FR", 0x26, 1, 0xFB), /* France */
+ COUNTRY_CHPLAN_ENT("GA", 0x26, 1, 0xB0), /* Gabon */
+ COUNTRY_CHPLAN_ENT("GB", 0x26, 1, 0xFB), /* Great Britain (United Kingdom; England) */
+ COUNTRY_CHPLAN_ENT("GD", 0x34, 1, 0xB0), /* Grenada */
+ COUNTRY_CHPLAN_ENT("GE", 0x26, 1, 0x00), /* Georgia */
+ COUNTRY_CHPLAN_ENT("GF", 0x26, 1, 0x80), /* French Guiana */
+ COUNTRY_CHPLAN_ENT("GG", 0x26, 1, 0x00), /* Guernsey (UK) */
+ COUNTRY_CHPLAN_ENT("GH", 0x26, 1, 0xF1), /* Ghana */
+ COUNTRY_CHPLAN_ENT("GI", 0x26, 1, 0x00), /* Gibraltar (UK) */
+ COUNTRY_CHPLAN_ENT("GL", 0x26, 1, 0x00), /* Greenland (Denmark) */
+ COUNTRY_CHPLAN_ENT("GM", 0x26, 1, 0xB0), /* Gambia */
+ COUNTRY_CHPLAN_ENT("GN", 0x26, 1, 0x10), /* Guinea */
+ COUNTRY_CHPLAN_ENT("GP", 0x26, 1, 0x00), /* Guadeloupe (France) */
+ COUNTRY_CHPLAN_ENT("GQ", 0x26, 1, 0xB0), /* Equatorial Guinea */
+ COUNTRY_CHPLAN_ENT("GR", 0x26, 1, 0xFB), /* Greece */
+ COUNTRY_CHPLAN_ENT("GS", 0x26, 1, 0x00), /* South Georgia and the Sandwich Islands (UK) */
+ COUNTRY_CHPLAN_ENT("GT", 0x34, 1, 0xF1), /* Guatemala */
+ COUNTRY_CHPLAN_ENT("GU", 0x34, 1, 0x00), /* Guam (USA) */
+ COUNTRY_CHPLAN_ENT("GW", 0x26, 1, 0xB0), /* Guinea-Bissau */
+ COUNTRY_CHPLAN_ENT("GY", 0x44, 1, 0x00), /* Guyana */
+ COUNTRY_CHPLAN_ENT("HK", 0x26, 1, 0xFB), /* Hong Kong */
+ COUNTRY_CHPLAN_ENT("HM", 0x45, 1, 0x00), /* Heard and McDonald Islands (Australia) */
+ COUNTRY_CHPLAN_ENT("HN", 0x32, 1, 0xF1), /* Honduras */
+ COUNTRY_CHPLAN_ENT("HR", 0x26, 1, 0xF9), /* Croatia */
+ COUNTRY_CHPLAN_ENT("HT", 0x34, 1, 0x50), /* Haiti */
+ COUNTRY_CHPLAN_ENT("HU", 0x26, 1, 0xFB), /* Hungary */
+ COUNTRY_CHPLAN_ENT("ID", 0x54, 0, 0xF3), /* Indonesia */
+ COUNTRY_CHPLAN_ENT("IE", 0x26, 1, 0xFB), /* Ireland */
+ COUNTRY_CHPLAN_ENT("IL", 0x47, 1, 0xF1), /* Israel */
+ COUNTRY_CHPLAN_ENT("IM", 0x26, 1, 0x00), /* Isle of Man (UK) */
+ COUNTRY_CHPLAN_ENT("IN", 0x47, 1, 0xF1), /* India */
+ COUNTRY_CHPLAN_ENT("IQ", 0x26, 1, 0x00), /* Iraq */
+ COUNTRY_CHPLAN_ENT("IR", 0x26, 0, 0x00), /* Iran */
+ COUNTRY_CHPLAN_ENT("IS", 0x26, 1, 0xFB), /* Iceland */
+ COUNTRY_CHPLAN_ENT("IT", 0x26, 1, 0xFB), /* Italy */
+ COUNTRY_CHPLAN_ENT("JE", 0x26, 1, 0x00), /* Jersey (UK) */
+ COUNTRY_CHPLAN_ENT("JM", 0x51, 1, 0xF1), /* Jamaica */
+ COUNTRY_CHPLAN_ENT("JO", 0x49, 1, 0xFB), /* Jordan */
+ COUNTRY_CHPLAN_ENT("JP", 0x27, 1, 0xFF), /* Japan- Telec */
+ COUNTRY_CHPLAN_ENT("KE", 0x47, 1, 0xF9), /* Kenya */
+ COUNTRY_CHPLAN_ENT("KG", 0x26, 1, 0xF1), /* Kyrgyzstan */
+ COUNTRY_CHPLAN_ENT("KH", 0x26, 1, 0xF1), /* Cambodia */
+ COUNTRY_CHPLAN_ENT("KI", 0x26, 1, 0x00), /* Kiribati */
+ COUNTRY_CHPLAN_ENT("KN", 0x34, 1, 0x00), /* Saint Kitts and Nevis */
+ COUNTRY_CHPLAN_ENT("KR", 0x28, 1, 0xFB), /* South Korea */
+ COUNTRY_CHPLAN_ENT("KW", 0x47, 1, 0xFB), /* Kuwait */
+ COUNTRY_CHPLAN_ENT("KY", 0x34, 1, 0x00), /* Cayman Islands (UK) */
+ COUNTRY_CHPLAN_ENT("KZ", 0x26, 1, 0x00), /* Kazakhstan */
+ COUNTRY_CHPLAN_ENT("LA", 0x26, 1, 0x00), /* Laos */
+ COUNTRY_CHPLAN_ENT("LB", 0x26, 1, 0xF1), /* Lebanon */
+ COUNTRY_CHPLAN_ENT("LC", 0x34, 1, 0x00), /* Saint Lucia */
+ COUNTRY_CHPLAN_ENT("LI", 0x26, 1, 0xFB), /* Liechtenstein */
+ COUNTRY_CHPLAN_ENT("LK", 0x26, 1, 0xF1), /* Sri Lanka */
+ COUNTRY_CHPLAN_ENT("LR", 0x26, 1, 0xB0), /* Liberia */
+ COUNTRY_CHPLAN_ENT("LS", 0x26, 1, 0xF1), /* Lesotho */
+ COUNTRY_CHPLAN_ENT("LT", 0x26, 1, 0xFB), /* Lithuania */
+ COUNTRY_CHPLAN_ENT("LU", 0x26, 1, 0xFB), /* Luxembourg */
+ COUNTRY_CHPLAN_ENT("LV", 0x26, 1, 0xFB), /* Latvia */
+ COUNTRY_CHPLAN_ENT("LY", 0x26, 1, 0x00), /* Libya */
+ COUNTRY_CHPLAN_ENT("MA", 0x47, 1, 0xF1), /* Morocco */
+ COUNTRY_CHPLAN_ENT("MC", 0x26, 1, 0xFB), /* Monaco */
+ COUNTRY_CHPLAN_ENT("MD", 0x26, 1, 0xF1), /* Moldova */
+ COUNTRY_CHPLAN_ENT("ME", 0x26, 1, 0xF1), /* Montenegro */
+ COUNTRY_CHPLAN_ENT("MF", 0x34, 1, 0x00), /* Saint Martin */
+ COUNTRY_CHPLAN_ENT("MG", 0x26, 1, 0x20), /* Madagascar */
+ COUNTRY_CHPLAN_ENT("MH", 0x34, 1, 0x00), /* Marshall Islands (USA) */
+ COUNTRY_CHPLAN_ENT("MK", 0x26, 1, 0xF1), /* Republic of Macedonia (FYROM) */
+ COUNTRY_CHPLAN_ENT("ML", 0x26, 1, 0xB0), /* Mali */
+ COUNTRY_CHPLAN_ENT("MM", 0x26, 1, 0x00), /* Burma (Myanmar) */
+ COUNTRY_CHPLAN_ENT("MN", 0x26, 1, 0x00), /* Mongolia */
+ COUNTRY_CHPLAN_ENT("MO", 0x26, 1, 0x00), /* Macau */
+ COUNTRY_CHPLAN_ENT("MP", 0x34, 1, 0x00), /* Northern Mariana Islands (USA) */
+ COUNTRY_CHPLAN_ENT("MQ", 0x26, 1, 0x40), /* Martinique (France) */
+ COUNTRY_CHPLAN_ENT("MR", 0x26, 1, 0xA0), /* Mauritania */
+ COUNTRY_CHPLAN_ENT("MS", 0x26, 1, 0x00), /* Montserrat (UK) */
+ COUNTRY_CHPLAN_ENT("MT", 0x26, 1, 0xFB), /* Malta */
+ COUNTRY_CHPLAN_ENT("MU", 0x26, 1, 0xB0), /* Mauritius */
+ COUNTRY_CHPLAN_ENT("MV", 0x26, 1, 0x00), /* Maldives */
+ COUNTRY_CHPLAN_ENT("MW", 0x26, 1, 0xB0), /* Malawi */
+ COUNTRY_CHPLAN_ENT("MX", 0x34, 1, 0xF1), /* Mexico */
+ COUNTRY_CHPLAN_ENT("MY", 0x47, 1, 0xF1), /* Malaysia */
+ COUNTRY_CHPLAN_ENT("MZ", 0x26, 1, 0xF1), /* Mozambique */
+ COUNTRY_CHPLAN_ENT("NA", 0x26, 0, 0x00), /* Namibia */
+ COUNTRY_CHPLAN_ENT("NC", 0x26, 1, 0x00), /* New Caledonia */
+ COUNTRY_CHPLAN_ENT("NE", 0x26, 1, 0xB0), /* Niger */
+ COUNTRY_CHPLAN_ENT("NF", 0x45, 1, 0x00), /* Norfolk Island (Australia) */
+ COUNTRY_CHPLAN_ENT("NG", 0x50, 1, 0xF9), /* Nigeria */
+ COUNTRY_CHPLAN_ENT("NI", 0x34, 1, 0xF1), /* Nicaragua */
+ COUNTRY_CHPLAN_ENT("NL", 0x26, 1, 0xFB), /* Netherlands */
+ COUNTRY_CHPLAN_ENT("NO", 0x26, 1, 0xFB), /* Norway */
+ COUNTRY_CHPLAN_ENT("NP", 0x47, 1, 0xF0), /* Nepal */
+ COUNTRY_CHPLAN_ENT("NR", 0x26, 1, 0x00), /* Nauru */
+ COUNTRY_CHPLAN_ENT("NU", 0x45, 1, 0x00), /* Niue */
+ COUNTRY_CHPLAN_ENT("NZ", 0x45, 1, 0xFB), /* New Zealand */
+ COUNTRY_CHPLAN_ENT("OM", 0x26, 1, 0xF9), /* Oman */
+ COUNTRY_CHPLAN_ENT("PA", 0x34, 1, 0xF1), /* Panama */
+ COUNTRY_CHPLAN_ENT("PE", 0x34, 1, 0xF1), /* Peru */
+ COUNTRY_CHPLAN_ENT("PF", 0x26, 1, 0x00), /* French Polynesia (France) */
+ COUNTRY_CHPLAN_ENT("PG", 0x26, 1, 0xF1), /* Papua New Guinea */
+ COUNTRY_CHPLAN_ENT("PH", 0x26, 1, 0xF1), /* Philippines */
+ COUNTRY_CHPLAN_ENT("PK", 0x51, 1, 0xF1), /* Pakistan */
+ COUNTRY_CHPLAN_ENT("PL", 0x26, 1, 0xFB), /* Poland */
+ COUNTRY_CHPLAN_ENT("PM", 0x26, 1, 0x00), /* Saint Pierre and Miquelon (France) */
+ COUNTRY_CHPLAN_ENT("PR", 0x34, 1, 0xF1), /* Puerto Rico */
+ COUNTRY_CHPLAN_ENT("PT", 0x26, 1, 0xFB), /* Portugal */
+ COUNTRY_CHPLAN_ENT("PW", 0x34, 1, 0x00), /* Palau */
+ COUNTRY_CHPLAN_ENT("PY", 0x34, 1, 0xF1), /* Paraguay */
+ COUNTRY_CHPLAN_ENT("QA", 0x51, 1, 0xF9), /* Qatar */
+ COUNTRY_CHPLAN_ENT("RE", 0x26, 1, 0x00), /* Reunion (France) */
+ COUNTRY_CHPLAN_ENT("RO", 0x26, 1, 0xF1), /* Romania */
+ COUNTRY_CHPLAN_ENT("RS", 0x26, 1, 0xF1), /* Serbia, Kosovo */
+ COUNTRY_CHPLAN_ENT("RU", 0x59, 1, 0xFB), /* Russia(fac/gost), Kaliningrad */
+ COUNTRY_CHPLAN_ENT("RW", 0x26, 1, 0xB0), /* Rwanda */
+ COUNTRY_CHPLAN_ENT("SA", 0x26, 1, 0xFB), /* Saudi Arabia */
+ COUNTRY_CHPLAN_ENT("SB", 0x26, 1, 0x00), /* Solomon Islands */
+ COUNTRY_CHPLAN_ENT("SC", 0x34, 1, 0x90), /* Seychelles */
+ COUNTRY_CHPLAN_ENT("SE", 0x26, 1, 0xFB), /* Sweden */
+ COUNTRY_CHPLAN_ENT("SG", 0x47, 1, 0xFB), /* Singapore */
+ COUNTRY_CHPLAN_ENT("SH", 0x26, 1, 0x00), /* Saint Helena (UK) */
+ COUNTRY_CHPLAN_ENT("SI", 0x26, 1, 0xFB), /* Slovenia */
+ COUNTRY_CHPLAN_ENT("SJ", 0x26, 1, 0x00), /* Svalbard (Norway) */
+ COUNTRY_CHPLAN_ENT("SK", 0x26, 1, 0xFB), /* Slovakia */
+ COUNTRY_CHPLAN_ENT("SL", 0x26, 1, 0xB0), /* Sierra Leone */
+ COUNTRY_CHPLAN_ENT("SM", 0x26, 1, 0x00), /* San Marino */
+ COUNTRY_CHPLAN_ENT("SN", 0x26, 1, 0xF1), /* Senegal */
+ COUNTRY_CHPLAN_ENT("SO", 0x26, 1, 0x00), /* Somalia */
+ COUNTRY_CHPLAN_ENT("SR", 0x34, 1, 0x00), /* Suriname */
+ COUNTRY_CHPLAN_ENT("ST", 0x34, 1, 0x80), /* Sao Tome and Principe */
+ COUNTRY_CHPLAN_ENT("SV", 0x30, 1, 0xF1), /* El Salvador */
+ COUNTRY_CHPLAN_ENT("SX", 0x34, 1, 0x00), /* Sint Marteen */
+ COUNTRY_CHPLAN_ENT("SZ", 0x26, 1, 0x20), /* Swaziland */
+ COUNTRY_CHPLAN_ENT("TC", 0x26, 1, 0x00), /* Turks and Caicos Islands (UK) */
+ COUNTRY_CHPLAN_ENT("TD", 0x26, 1, 0xB0), /* Chad */
+ COUNTRY_CHPLAN_ENT("TF", 0x26, 1, 0x80), /* French Southern and Antarctic Lands (FR Southern Territories) */
+ COUNTRY_CHPLAN_ENT("TG", 0x26, 1, 0xB0), /* Togo */
+ COUNTRY_CHPLAN_ENT("TH", 0x26, 1, 0xF1), /* Thailand */
+ COUNTRY_CHPLAN_ENT("TJ", 0x26, 1, 0x40), /* Tajikistan */
+ COUNTRY_CHPLAN_ENT("TK", 0x45, 1, 0x00), /* Tokelau */
+ COUNTRY_CHPLAN_ENT("TM", 0x26, 1, 0x00), /* Turkmenistan */
+ COUNTRY_CHPLAN_ENT("TN", 0x47, 1, 0xF1), /* Tunisia */
+ COUNTRY_CHPLAN_ENT("TO", 0x26, 1, 0x00), /* Tonga */
+ COUNTRY_CHPLAN_ENT("TR", 0x26, 1, 0xF1), /* Turkey, Northern Cyprus */
+ COUNTRY_CHPLAN_ENT("TT", 0x42, 1, 0xF1), /* Trinidad & Tobago */
+ COUNTRY_CHPLAN_ENT("TW", 0x39, 1, 0xFF), /* Taiwan */
+ COUNTRY_CHPLAN_ENT("TZ", 0x26, 1, 0xF0), /* Tanzania */
+ COUNTRY_CHPLAN_ENT("UA", 0x26, 1, 0xFB), /* Ukraine */
+ COUNTRY_CHPLAN_ENT("UG", 0x26, 1, 0xF1), /* Uganda */
+ COUNTRY_CHPLAN_ENT("US", 0x34, 1, 0xFF), /* United States of America (USA) */
+ COUNTRY_CHPLAN_ENT("UY", 0x34, 1, 0xF1), /* Uruguay */
+ COUNTRY_CHPLAN_ENT("UZ", 0x47, 1, 0xF0), /* Uzbekistan */
+ COUNTRY_CHPLAN_ENT("VA", 0x26, 1, 0x00), /* Holy See (Vatican City) */
+ COUNTRY_CHPLAN_ENT("VC", 0x34, 1, 0x10), /* Saint Vincent and the Grenadines */
+ COUNTRY_CHPLAN_ENT("VE", 0x30, 1, 0xF1), /* Venezuela */
+ COUNTRY_CHPLAN_ENT("VI", 0x34, 1, 0x00), /* United States Virgin Islands (USA) */
+ COUNTRY_CHPLAN_ENT("VN", 0x26, 1, 0xF1), /* Vietnam */
+ COUNTRY_CHPLAN_ENT("VU", 0x26, 1, 0x00), /* Vanuatu */
+ COUNTRY_CHPLAN_ENT("WF", 0x26, 1, 0x00), /* Wallis and Futuna (France) */
+ COUNTRY_CHPLAN_ENT("WS", 0x34, 1, 0x00), /* Samoa */
+ COUNTRY_CHPLAN_ENT("YE", 0x26, 1, 0x40), /* Yemen */
+ COUNTRY_CHPLAN_ENT("YT", 0x26, 1, 0x80), /* Mayotte (France) */
+ COUNTRY_CHPLAN_ENT("ZA", 0x26, 1, 0xF1), /* South Africa */
+ COUNTRY_CHPLAN_ENT("ZM", 0x26, 1, 0xB0), /* Zambia */
+ COUNTRY_CHPLAN_ENT("ZW", 0x26, 1, 0xF1), /* Zimbabwe */
};
-u16 country_chplan_map_sz = sizeof(country_chplan_map)/sizeof(struct country_chplan);
+u16 const country_chplan_map_sz = sizeof(country_chplan_map)/sizeof(struct country_chplan);
/*
* rtw_get_chplan_from_country -
* @country_code: string of country code
*
-* Return channel_plan index or -1 when unsupported country_code is given
+* Return pointer of struct country_chplan entry or NULL when unsupported country_code is given
*/
-int rtw_get_chplan_from_country(const char *country_code)
+const struct country_chplan *rtw_get_chplan_from_country(const char *country_code)
{
- int channel_plan = -1;
+ const struct country_chplan *ent = NULL;
+ const struct country_chplan *map = NULL;
+ u16 map_sz = 0;
+ char code[2];
int i;
- /* TODO: should consider 3-character country code? */
+ code[0] = alpha_to_upper(country_code[0]);
+ code[1] = alpha_to_upper(country_code[1]);
- for (i = 0; i < country_chplan_map_sz; i++) {
- if (strncmp(country_code, country_chplan_map[i].alpha2, 2) == 0) {
- channel_plan = country_chplan_map[i].chplan;
+#if !defined(CONFIG_CUSTOMIZED_COUNTRY_CHPLAN_MAP) && RTW_DEF_MODULE_REGULATORY_CERT
+ ent = rtw_def_module_get_chplan_from_country(code);
+ if (ent != NULL)
+ goto exit;
+#endif
+
+#ifdef CONFIG_CUSTOMIZED_COUNTRY_CHPLAN_MAP
+ map = CUSTOMIZED_country_chplan_map;
+ map_sz = CUSTOMIZED_country_chplan_map_sz;
+#else
+ map = country_chplan_map;
+ map_sz = country_chplan_map_sz;
+#endif
+
+ for (i = 0; i < map_sz; i++) {
+ if (strncmp(code, map[i].alpha2, 2) == 0) {
+ ent = &map[i];
break;
}
}
- return channel_plan;
+exit:
+ #if RTW_DEF_MODULE_REGULATORY_CERT
+ if (ent && !(COUNTRY_CHPLAN_DEF_MODULE_FALGS(ent) & RTW_DEF_MODULE_REGULATORY_CERT))
+ ent = NULL;
+ #endif
+
+ return ent;
}
int rtw_ch_to_bb_gain_sel(int ch)
@@ -476,7 +628,7 @@ s8 rtw_rf_get_kfree_tx_gain_offset(_adapter *padapter, u8 path, u8 ch)
{
s8 kfree_offset = 0;
-#ifdef CONFIG_RF_GAIN_OFFSET
+#ifdef CONFIG_RF_POWER_TRIM
HAL_DATA_TYPE *hal_data = GET_HAL_DATA(padapter);
struct kfree_data_t *kfree_data = GET_KFREE_DATA(padapter);
s8 bb_gain_sel = rtw_ch_to_bb_gain_sel(ch);
@@ -493,7 +645,7 @@ s8 rtw_rf_get_kfree_tx_gain_offset(_adapter *padapter, u8 path, u8 ch)
, __func__, path, ch, bb_gain_sel, kfree_offset);
}
exit:
-#endif /* CONFIG_RF_GAIN_OFFSET */
+#endif /* CONFIG_RF_POWER_TRIM */
return kfree_offset;
}
diff --git a/rtl8188FU/core/rtw_sta_mgt.c b/rtl8188FU/core/rtw_sta_mgt.c
index 730b425..68eda77 100755
--- a/rtl8188FU/core/rtw_sta_mgt.c
+++ b/rtl8188FU/core/rtw_sta_mgt.c
@@ -260,7 +260,7 @@ _func_enter_;
psta++;
}
-
+ pstapriv->adhoc_expire_to = 4; /* 4 * 2 = 8 sec */
#ifdef CONFIG_AP_MODE
@@ -454,7 +454,7 @@ _func_exit_;
//struct sta_info *rtw_alloc_stainfo(_queue *pfree_sta_queue, unsigned char *hwaddr)
-struct sta_info *rtw_alloc_stainfo(struct sta_priv *pstapriv, u8 *hwaddr)
+struct sta_info *rtw_alloc_stainfo(struct sta_priv *pstapriv, const u8 *hwaddr)
{
_irqL irqL, irqL2;
uint tmp_aid;
@@ -858,7 +858,7 @@ _func_exit_;
}
/* any station allocated can be searched by hash list */
-struct sta_info *rtw_get_stainfo(struct sta_priv *pstapriv, u8 *hwaddr)
+struct sta_info *rtw_get_stainfo(struct sta_priv *pstapriv, const u8 *hwaddr)
{
_irqL irqL;
@@ -869,23 +869,19 @@ struct sta_info *rtw_get_stainfo(struct sta_priv *pstapriv, u8 *hwaddr)
u32 index;
- u8 *addr;
+ const u8 *addr;
- u8 bc_addr[ETH_ALEN] = {0xff,0xff,0xff,0xff,0xff,0xff};
+ const u8 bc_addr[ETH_ALEN] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
_func_enter_;
if(hwaddr==NULL)
return NULL;
- if(IS_MCAST(hwaddr))
- {
+ if (IS_MCAST((unsigned char *)hwaddr))
addr = bc_addr;
- }
else
- {
addr = hwaddr;
- }
index = wifi_mac_hash(addr);
diff --git a/rtl8188FU/core/rtw_tdls.c b/rtl8188FU/core/rtw_tdls.c
index 7896aee..a31a3da 100755
--- a/rtl8188FU/core/rtw_tdls.c
+++ b/rtl8188FU/core/rtw_tdls.c
@@ -20,6 +20,7 @@
#define _RTW_TDLS_C_
#include <drv_types.h>
+#include <hal_data.h>
#ifdef CONFIG_TDLS
#define ONE_SEC 1000 /* 1000 ms */
@@ -52,7 +53,7 @@ void rtw_reset_tdls_info(_adapter* padapter)
ptdlsinfo->chsw_info.ch_sw_state = TDLS_STATE_NONE;
ATOMIC_SET(&ptdlsinfo->chsw_info.chsw_on, _FALSE);
ptdlsinfo->chsw_info.off_ch_num = 0;
- ptdlsinfo->chsw_info.ch_offset = 0;
+ ptdlsinfo->chsw_info.ch_offset = HAL_PRIME_CHNL_OFFSET_DONT_CARE;
ptdlsinfo->chsw_info.cur_time = 0;
ptdlsinfo->chsw_info.delay_switch_back = _FALSE;
ptdlsinfo->chsw_info.dump_stack = _FALSE;
@@ -127,6 +128,31 @@ int check_ap_tdls_ch_switching_prohibited(u8 *pframe, u8 pkt_len)
return _FALSE;
}
+u8 rtw_tdls_is_setup_allowed(_adapter *padapter)
+{
+ struct tdls_info *ptdlsinfo = &padapter->tdlsinfo;
+
+ if (ptdlsinfo->ap_prohibited == _TRUE)
+ return _FALSE;
+
+ return _TRUE;
+}
+
+#ifdef CONFIG_TDLS_CH_SW
+u8 rtw_tdls_is_chsw_allowed(_adapter *padapter)
+{
+ struct tdls_info *ptdlsinfo = &padapter->tdlsinfo;
+
+ if (ptdlsinfo->ch_switch_prohibited == _TRUE)
+ return _FALSE;
+
+ if (padapter->registrypriv.wifi_spec == 0)
+ return _FALSE;
+
+ return _TRUE;
+}
+#endif
+
int _issue_nulldata_to_TDLS_peer_STA(_adapter *padapter, unsigned char *da, unsigned int power_mode, int wait_ack)
{
int ret = _FAIL;
@@ -431,7 +457,9 @@ void rtw_tdls_process_vht_cap(_adapter *padapter, struct sta_info *ptdls_sta, u8
ptdls_sta->flags &= ~WLAN_STA_VHT;
if (ptdls_sta->flags & WLAN_STA_VHT) {
- if (padapter->registrypriv.vht_enable == _TRUE)
+ if (REGSTY_IS_11AC_ENABLE(&padapter->registrypriv)
+ && hal_chk_proto_cap(padapter, PROTO_CAP_11AC)
+ && (!pmlmepriv->country_ent || COUNTRY_CHPLAN_EN_11AC(pmlmepriv->country_ent)))
ptdls_sta->vhtpriv.vht_option = _TRUE;
else
ptdls_sta->vhtpriv.vht_option = _FALSE;
@@ -597,7 +625,7 @@ u8 *rtw_tdls_set_ftie(struct tdls_txmgmt *ptxmgmt, u8 *pframe, struct pkt_attrib
u8 *rtw_tdls_set_timeout_interval(struct tdls_txmgmt *ptxmgmt, u8 *pframe, struct pkt_attrib *pattrib, int init, struct sta_info *ptdls_sta)
{
u8 timeout_itvl[5]; /* set timeout interval to maximum value */
- u32 timeout_interval= TPK_RESEND_COUNT;
+ u32 timeout_interval= TDLS_TPK_RESEND_COUNT;
u8 *p = NULL;
int len = 0;
@@ -662,10 +690,15 @@ u8 *rtw_tdls_set_dialog(u8 *pframe, struct pkt_attrib *pattrib, struct tdls_txmg
u8 *rtw_tdls_set_reg_class(u8 *pframe, struct pkt_attrib *pattrib, struct sta_info *ptdls_sta)
{
- u8 reg_class = 1;
+ u8 reg_class = 22;
return rtw_set_fixed_ie(pframe, 1, &(reg_class), &(pattrib->pktlen));
}
+u8 *rtw_tdls_set_second_channel_offset(u8 *pframe, struct pkt_attrib *pattrib, u8 ch_offset)
+{
+ return rtw_set_ie(pframe, EID_SecondaryChnlOffset , 1, &ch_offset, &(pattrib->pktlen));
+}
+
u8 *rtw_tdls_set_capability(_adapter *padapter, u8 *pframe, struct pkt_attrib *pattrib)
{
struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
@@ -734,16 +767,134 @@ u8 *rtw_tdls_set_target_ch(_adapter *padapter, u8 *pframe, struct pkt_attrib *pa
u8 *rtw_tdls_set_ch_sw(u8 *pframe, struct pkt_attrib *pattrib, struct sta_info *ptdls_sta)
{
u8 ch_switch_timing[4] = {0};
- u16 switch_time = (ptdls_sta->ch_switch_time >= CH_SWITCH_TIME * 1000) ?
- ptdls_sta->ch_switch_time : CH_SWITCH_TIME;
- u16 switch_timeout = (ptdls_sta->ch_switch_timeout >= CH_SWITCH_TIMEOUT * 1000) ?
- ptdls_sta->ch_switch_timeout : CH_SWITCH_TIMEOUT;
+ u16 switch_time = (ptdls_sta->ch_switch_time >= TDLS_CH_SWITCH_TIME * 1000) ?
+ ptdls_sta->ch_switch_time : TDLS_CH_SWITCH_TIME;
+ u16 switch_timeout = (ptdls_sta->ch_switch_timeout >= TDLS_CH_SWITCH_TIMEOUT * 1000) ?
+ ptdls_sta->ch_switch_timeout : TDLS_CH_SWITCH_TIMEOUT;
_rtw_memcpy(ch_switch_timing, &switch_time, 2);
_rtw_memcpy(ch_switch_timing + 2, &switch_timeout, 2);
return rtw_set_ie(pframe, _CH_SWITCH_TIMING_, 4, ch_switch_timing, &(pattrib->pktlen));
}
+
+void rtw_tdls_set_ch_sw_oper_control(_adapter *padapter, u8 enable)
+{
+ if (ATOMIC_READ(&padapter->tdlsinfo.chsw_info.chsw_on) != enable)
+ ATOMIC_SET(&padapter->tdlsinfo.chsw_info.chsw_on, enable);
+
+ rtw_hal_set_hwreg(padapter, HW_VAR_TDLS_BCN_EARLY_C2H_RPT, &enable);
+ DBG_871X("[TDLS] %s Bcn Early C2H Report\n", (enable == _TRUE) ? "Start" : "Stop");
+}
+
+void rtw_tdls_ch_sw_back_to_base_chnl(_adapter *padapter)
+{
+ struct mlme_priv *pmlmepriv;
+ struct tdls_ch_switch *pchsw_info = &padapter->tdlsinfo.chsw_info;
+
+ pmlmepriv = &padapter->mlmepriv;
+
+ if ((ATOMIC_READ(&pchsw_info->chsw_on) == _TRUE) &&
+ /* Sometimes we receive multiple interrupts in very little time period, use the follow condition test to filter */
+ //(pchsw_info->cur_time - last_time > padapter->mlmeextpriv.mlmext_info.bcn_interval - 5) &&
+ (padapter->mlmeextpriv.cur_channel != rtw_get_oper_ch(padapter))) {
+ //if(pchsw_info->ch_sw_state & TDLS_CH_SW_INITIATOR_STATE)
+ rtw_tdls_cmd(padapter, pchsw_info->addr, TDLS_CH_SW_TO_BASE_CHNL_UNSOLICITED);
+ }
+}
+
+static void rtw_tdls_chsw_oper_init(_adapter* padapter, u32 timeout_ms)
+{
+ struct submit_ctx *chsw_sctx = &padapter->tdlsinfo.chsw_info.chsw_sctx;
+
+ rtw_sctx_init(chsw_sctx, timeout_ms);
+}
+
+static int rtw_tdls_chsw_oper_wait(_adapter* padapter)
+{
+ struct submit_ctx *chsw_sctx = &padapter->tdlsinfo.chsw_info.chsw_sctx;
+
+ return rtw_sctx_wait(chsw_sctx, __func__);
+}
+
+void rtw_tdls_chsw_oper_done(_adapter* padapter)
+{
+ struct submit_ctx *chsw_sctx = &padapter->tdlsinfo.chsw_info.chsw_sctx;
+
+ rtw_sctx_done(&chsw_sctx);
+}
+
+s32 rtw_tdls_do_ch_sw(_adapter *padapter, struct sta_info *ptdls_sta, u8 chnl_type, u8 channel, u8 channel_offset, u16 bwmode, u16 ch_switch_time)
+{
+ HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);
+ u8 center_ch, chnl_offset80 = HAL_PRIME_CHNL_OFFSET_DONT_CARE;
+ u32 ch_sw_time_start, ch_sw_time_spent, wait_time;
+ u8 take_care_iqk;
+ s32 ret = _FAIL;
+
+ ch_sw_time_start = rtw_systime_to_ms(rtw_get_current_time());
+
+ rtw_tdls_chsw_oper_init(padapter, TDLS_CH_SWITCH_OPER_OFFLOAD_TIMEOUT);
+
+ /* set mac_id sleep before channel switch */
+ rtw_hal_macid_sleep(padapter, ptdls_sta->mac_id);
+
+ /* channel switch IOs offload to FW */
+ if (rtw_hal_ch_sw_oper_offload(padapter, channel, channel_offset, bwmode) == _SUCCESS) {
+ if (rtw_tdls_chsw_oper_wait(padapter) == _SUCCESS) {
+ /* set channel and bw related variables in driver */
+ _enter_critical_mutex(&(adapter_to_dvobj(padapter)->setch_mutex), NULL);
+
+ rtw_set_oper_ch(padapter, channel);
+ rtw_set_oper_choffset(padapter, channel_offset);
+ rtw_set_oper_bw(padapter, bwmode);
+
+ center_ch = rtw_get_center_ch(channel, bwmode, channel_offset);
+ pHalData->CurrentChannel = center_ch;
+ pHalData->CurrentCenterFrequencyIndex1 = center_ch;
+ pHalData->CurrentChannelBW = bwmode;
+ pHalData->nCur40MhzPrimeSC = channel_offset;
+
+ if (bwmode == CHANNEL_WIDTH_80) {
+ if (center_ch > channel)
+ chnl_offset80 = HAL_PRIME_CHNL_OFFSET_LOWER;
+ else if (center_ch < channel)
+ chnl_offset80 = HAL_PRIME_CHNL_OFFSET_UPPER;
+ else
+ chnl_offset80 = HAL_PRIME_CHNL_OFFSET_DONT_CARE;
+ }
+ pHalData->nCur80MhzPrimeSC = chnl_offset80;
+
+ pHalData->CurrentCenterFrequencyIndex1 = center_ch;
+
+ _exit_critical_mutex(&(adapter_to_dvobj(padapter)->setch_mutex), NULL);
+
+ rtw_hal_get_hwreg(padapter, HW_VAR_CH_SW_NEED_TO_TAKE_CARE_IQK_INFO, &take_care_iqk);
+ if (take_care_iqk == _TRUE)
+ rtw_hal_ch_sw_iqk_info_restore(padapter, CH_SW_USE_CASE_TDLS);
+
+ ch_sw_time_spent = rtw_systime_to_ms(rtw_get_current_time()) - ch_sw_time_start;
+
+ if (chnl_type == TDLS_CH_SW_OFF_CHNL) {
+ if ((u32)ch_switch_time /1000 > ch_sw_time_spent)
+ wait_time = (u32)ch_switch_time /1000 - ch_sw_time_spent;
+ else
+ wait_time = 0;
+
+ if (wait_time > 0)
+ rtw_msleep_os(wait_time);
+ }
+
+ ret = _SUCCESS;
+ } else
+ DBG_871X("[TDLS] chsw oper wait fail !!\n");
+ }
+
+ /* set mac_id wakeup after channel switch */
+ rtw_hal_macid_wakeup(padapter, ptdls_sta->mac_id);
+
+ return ret;
+}
#endif
u8 *rtw_tdls_set_wmm_params(_adapter *padapter, u8 *pframe, struct pkt_attrib *pattrib)
@@ -897,12 +1048,12 @@ int issue_tdls_setup_req(_adapter *padapter, struct tdls_txmgmt *ptxmgmt, int wa
_irqL irqL;
int ret = _FAIL;
/* Retry timer should be set at least 301 sec, using TPK_count counting 301 times. */
- u32 timeout_interval= TPK_RESEND_COUNT;
+ u32 timeout_interval= TDLS_TPK_RESEND_COUNT;
DBG_871X("[TDLS] %s\n", __FUNCTION__);
ptxmgmt->action_code = TDLS_SETUP_REQUEST;
- if (ptdlsinfo->ap_prohibited == _TRUE)
+ if (rtw_tdls_is_setup_allowed(padapter) == _FALSE)
goto exit;
if ((pmgntframe = alloc_mgtxmitframe(pxmitpriv)) == NULL)
@@ -1025,8 +1176,8 @@ int _issue_tdls_teardown(_adapter *padapter, struct tdls_txmgmt *ptxmgmt, u8 wai
ret = _SUCCESS;
}
- if (ret == _SUCCESS && rtw_tdls_is_driver_setup(padapter))
- rtw_tdls_cmd(padapter, ptxmgmt->peer, TDLS_TEAR_STA);
+ if (rtw_tdls_is_driver_setup(padapter))
+ rtw_tdls_cmd(padapter, ptxmgmt->peer, TDLS_TEARDOWN_STA_LOCALLY);
exit:
@@ -1308,6 +1459,7 @@ exit:
return ret;
}
+#ifdef CONFIG_TDLS_CH_SW
int issue_tdls_ch_switch_req(_adapter *padapter, struct sta_info *ptdls_sta)
{
struct xmit_frame *pmgntframe;
@@ -1319,8 +1471,8 @@ int issue_tdls_ch_switch_req(_adapter *padapter, struct sta_info *ptdls_sta)
DBG_871X("[TDLS] %s\n", __FUNCTION__);
- if (padapter->tdlsinfo.ch_switch_prohibited == _TRUE)
- { DBG_871X("[TDLS] Ignore %s since ch_switch_prohibited = _TRUE\n", __FUNCTION__);
+ if (rtw_tdls_is_chsw_allowed(padapter) == _FALSE)
+ { DBG_871X("[TDLS] Ignore %s since channel switch is not allowed\n", __FUNCTION__);
goto exit;
}
@@ -1365,8 +1517,8 @@ int issue_tdls_ch_switch_rsp(_adapter *padapter, struct tdls_txmgmt *ptxmgmt, in
DBG_871X("[TDLS] %s\n", __FUNCTION__);
- if (padapter->tdlsinfo.ch_switch_prohibited == _TRUE)
- { DBG_871X("[TDLS] Ignore %s since ch_switch_prohibited = _TRUE\n", __FUNCTION__);
+ if (rtw_tdls_is_chsw_allowed(padapter) == _FALSE)
+ { DBG_871X("[TDLS] Ignore %s since channel switch is not allowed\n", __FUNCTION__);
goto exit;
}
@@ -1382,7 +1534,7 @@ int issue_tdls_ch_switch_rsp(_adapter *padapter, struct tdls_txmgmt *ptxmgmt, in
_rtw_memcpy(pattrib->dst, ptxmgmt->peer, ETH_ALEN);
_rtw_memcpy(pattrib->src, adapter_mac_addr(padapter), ETH_ALEN);
- _rtw_memcpy(pattrib->ra, get_bssid(pmlmepriv), ETH_ALEN);
+ _rtw_memcpy(pattrib->ra, ptxmgmt->peer, ETH_ALEN);
_rtw_memcpy(pattrib->ta, pattrib->src, ETH_ALEN);
update_tdls_attrib(padapter, pattrib);
@@ -1401,16 +1553,16 @@ int issue_tdls_ch_switch_rsp(_adapter *padapter, struct tdls_txmgmt *ptxmgmt, in
}
if (wait_ack) {
- ret = dump_mgntframe_and_wait_ack(padapter, pmgntframe);
+ ret = dump_mgntframe_and_wait_ack_timeout(padapter, pmgntframe, 10);
} else {
dump_mgntframe(padapter, pmgntframe);
ret = _SUCCESS;
}
- ret = _SUCCESS;
exit:
return ret;
}
+#endif
int On_TDLS_Dis_Rsp(_adapter *padapter, union recv_frame *precv_frame)
{
@@ -1495,7 +1647,7 @@ sint On_TDLS_Setup_Req(_adapter *padapter, union recv_frame *precv_frame)
u8 ccmp_included=0, rsnie_included=0;
u16 j, pairwise_count;
u8 SNonce[32];
- u32 timeout_interval = TPK_RESEND_COUNT;
+ u32 timeout_interval = TDLS_TPK_RESEND_COUNT;
sint parsing_length; /* Frame body length, without icv_len */
PNDIS_802_11_VARIABLE_IEs pIE;
u8 FIXED_IE = 5;
@@ -1503,7 +1655,7 @@ sint On_TDLS_Setup_Req(_adapter *padapter, union recv_frame *precv_frame)
int supportRateNum = 0;
struct tdls_txmgmt txmgmt;
- if (ptdlsinfo->ap_prohibited == _TRUE)
+ if (rtw_tdls_is_setup_allowed(padapter) == _FALSE)
goto exit;
_rtw_memset(&txmgmt, 0x00, sizeof(struct tdls_txmgmt));
@@ -1653,7 +1805,7 @@ sint On_TDLS_Setup_Req(_adapter *padapter, union recv_frame *precv_frame)
_rtw_memcpy(ptdls_sta->SNonce, SNonce, 32);
if (timeout_interval <= 300)
- ptdls_sta->TDLS_PeerKey_Lifetime = TPK_RESEND_COUNT;
+ ptdls_sta->TDLS_PeerKey_Lifetime = TDLS_TPK_RESEND_COUNT;
else
ptdls_sta->TDLS_PeerKey_Lifetime = timeout_interval;
}
@@ -1669,7 +1821,7 @@ sint On_TDLS_Setup_Req(_adapter *padapter, union recv_frame *precv_frame)
ptdlsinfo->sta_maximum = _TRUE;
#ifdef CONFIG_WFD
- rtw_tdls_process_wfd_ie(ptdlsinfo, ptr + FIXED_IE, parsing_length - FIXED_IE);
+ rtw_tdls_process_wfd_ie(ptdlsinfo, ptr + FIXED_IE, parsing_length);
#endif
}else {
@@ -1715,13 +1867,14 @@ int On_TDLS_Setup_Rsp(_adapter *padapter, union recv_frame *precv_frame)
int supportRateNum = 0;
struct tdls_txmgmt txmgmt;
int ret = _SUCCESS;
- u32 timeout_interval = TPK_RESEND_COUNT;
+ u32 timeout_interval = TDLS_TPK_RESEND_COUNT;
_rtw_memset(&txmgmt, 0x00, sizeof(struct tdls_txmgmt));
psa = get_sa(ptr);
ptdls_sta = rtw_get_stainfo(pstapriv, psa);
- if (NULL == ptdls_sta) {
+ if (ptdls_sta == NULL) {
+ DBG_871X("[%s] Direct Link Peer = "MAC_FMT" not found\n", __FUNCTION__, MAC_ARG(psa));
ret = _FAIL;
goto exit;
}
@@ -1828,7 +1981,7 @@ int On_TDLS_Setup_Rsp(_adapter *padapter, union recv_frame *precv_frame)
_rtw_memcpy(ptdls_sta->ANonce, ANonce, 32);
#ifdef CONFIG_WFD
- rtw_tdls_process_wfd_ie(ptdlsinfo, ptr + FIXED_IE, parsing_length - FIXED_IE);
+ rtw_tdls_process_wfd_ie(ptdlsinfo, ptr + FIXED_IE, parsing_length);
#endif
if (status_code != _STATS_SUCCESSFUL_) {
@@ -2089,7 +2242,7 @@ int On_TDLS_Teardown(_adapter *padapter, union recv_frame *precv_frame)
ptdls_sta = rtw_get_stainfo(pstapriv, psa);
if (ptdls_sta != NULL) {
if (rtw_tdls_is_driver_setup(padapter))
- rtw_tdls_cmd(padapter, ptdls_sta->hwaddr, TDLS_TEAR_STA);
+ rtw_tdls_cmd(padapter, ptdls_sta->hwaddr, TDLS_TEARDOWN_STA_LOCALLY);
}
return _SUCCESS;
@@ -2214,17 +2367,24 @@ sint On_TDLS_Ch_Switch_Req(_adapter *padapter, union recv_frame *precv_frame)
u16 j;
struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
struct tdls_txmgmt txmgmt;
- u16 switch_time= CH_SWITCH_TIME * 1000, switch_timeout=CH_SWITCH_TIMEOUT * 1000;
+ u8 zaddr[ETH_ALEN] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
+ u16 switch_time= TDLS_CH_SWITCH_TIME * 1000, switch_timeout=TDLS_CH_SWITCH_TIMEOUT * 1000;
+ u8 take_care_iqk;
- if (padapter->tdlsinfo.ch_switch_prohibited == _TRUE)
- { DBG_871X("[TDLS] Ignore %s since ch_switch_prohibited = _TRUE\n", __FUNCTION__);
- return _SUCCESS;
+ if (rtw_tdls_is_chsw_allowed(padapter) == _FALSE)
+ { DBG_871X("[TDLS] Ignore %s since channel switch is not allowed\n", __FUNCTION__);
+ return _FAIL;
}
_rtw_memset(&txmgmt, 0x00, sizeof(struct tdls_txmgmt));
psa = get_sa(ptr);
ptdls_sta = rtw_get_stainfo(pstapriv, psa);
+ if (ptdls_sta == NULL) {
+ DBG_871X("[%s] Direct Link Peer = "MAC_FMT" not found\n", __FUNCTION__, MAC_ARG(psa));
+ return _FAIL;
+ }
+
ptdls_sta->ch_switch_time=switch_time;
ptdls_sta->ch_switch_timeout=switch_timeout;
@@ -2240,8 +2400,8 @@ sint On_TDLS_Ch_Switch_Req(_adapter *padapter, union recv_frame *precv_frame)
pchsw_info->off_ch_num = *(ptr + 2);
- if (*(ptr + 2) == 2) {
- pchsw_info->off_ch_num = 11;
+ if ((*(ptr + 2) == 2) && (hal_is_band_support(padapter, BAND_ON_5G))) {
+ pchsw_info->off_ch_num = 44;
}
if (pchsw_info->off_ch_num != pmlmeext->cur_channel) {
@@ -2254,16 +2414,29 @@ sint On_TDLS_Ch_Switch_Req(_adapter *padapter, union recv_frame *precv_frame)
switch (pIE->ElementID) {
case EID_SecondaryChnlOffset:
- padapter->tdlsinfo.chsw_info.ch_offset = *(pIE->data);
+ switch (*(pIE->data))
+ {
+ case EXTCHNL_OFFSET_UPPER:
+ pchsw_info->ch_offset = HAL_PRIME_CHNL_OFFSET_LOWER;
+ break;
+
+ case EXTCHNL_OFFSET_LOWER:
+ pchsw_info->ch_offset = HAL_PRIME_CHNL_OFFSET_UPPER;
+ break;
+
+ default:
+ pchsw_info->ch_offset = HAL_PRIME_CHNL_OFFSET_DONT_CARE;
+ break;
+ }
break;
case _LINK_ID_IE_:
break;
case _CH_SWITCH_TIMING_:
- ptdls_sta->ch_switch_time = (RTW_GET_LE16(pIE->data) >= CH_SWITCH_TIME * 1000) ?
- RTW_GET_LE16(pIE->data) : CH_SWITCH_TIME * 1000;
- ptdls_sta->ch_switch_timeout = (RTW_GET_LE16(pIE->data + 2) >= CH_SWITCH_TIMEOUT * 1000) ?
- RTW_GET_LE16(pIE->data + 2) : CH_SWITCH_TIMEOUT * 1000;
- DBG_871X("%s ch_switch_time:%d, ch_switch_timeout:%d\n"
+ ptdls_sta->ch_switch_time = (RTW_GET_LE16(pIE->data) >= TDLS_CH_SWITCH_TIME * 1000) ?
+ RTW_GET_LE16(pIE->data) : TDLS_CH_SWITCH_TIME * 1000;
+ ptdls_sta->ch_switch_timeout = (RTW_GET_LE16(pIE->data + 2) >= TDLS_CH_SWITCH_TIMEOUT * 1000) ?
+ RTW_GET_LE16(pIE->data + 2) : TDLS_CH_SWITCH_TIMEOUT * 1000;
+ DBG_871X("[TDLS] %s ch_switch_time:%d, ch_switch_timeout:%d\n"
, __FUNCTION__, RTW_GET_LE16(pIE->data), RTW_GET_LE16(pIE->data + 2));
default:
break;
@@ -2272,12 +2445,35 @@ sint On_TDLS_Ch_Switch_Req(_adapter *padapter, union recv_frame *precv_frame)
j += (pIE->Length + 2);
}
+ rtw_hal_get_hwreg(padapter, HW_VAR_CH_SW_NEED_TO_TAKE_CARE_IQK_INFO, &take_care_iqk);
+ if (take_care_iqk == _TRUE) {
+ u8 central_chnl;
+ u8 bw_mode;
+
+ bw_mode = (pchsw_info->ch_offset) ? CHANNEL_WIDTH_40 : CHANNEL_WIDTH_20;
+ central_chnl = rtw_get_center_ch(pchsw_info->off_ch_num, bw_mode, pchsw_info->ch_offset);
+ if (rtw_hal_ch_sw_iqk_info_search(padapter, central_chnl, bw_mode) < 0) {
+ if (!(pchsw_info->ch_sw_state & TDLS_CH_SWITCH_PREPARE_STATE))
+ rtw_tdls_cmd(padapter, ptdls_sta->hwaddr, TDLS_CH_SW_PREPARE);
+
+ return _FAIL;
+ }
+ }
+
+ /* cancel ch sw monitor timer for responder */
+ if (!(pchsw_info->ch_sw_state & TDLS_CH_SW_INITIATOR_STATE))
+ _cancel_timer_ex(&ptdls_sta->ch_sw_monitor_timer);
+
/* Todo: check status */
txmgmt.status_code = 0;
_rtw_memcpy(txmgmt.peer, psa, ETH_ALEN);
-
- ATOMIC_SET(&pchsw_info->chsw_on, _TRUE);
+ if (_rtw_memcmp(pchsw_info->addr, zaddr, ETH_ALEN) == _TRUE)
+ _rtw_memcpy(pchsw_info->addr, ptdls_sta->hwaddr, ETH_ALEN);
+
+ if (ATOMIC_READ(&pchsw_info->chsw_on) == _FALSE)
+ rtw_tdls_cmd(padapter, ptdls_sta->hwaddr, TDLS_CH_SW_START);
+
rtw_tdls_cmd(padapter, ptdls_sta->hwaddr, TDLS_CH_SW_RESP);
return _SUCCESS;
@@ -2298,20 +2494,25 @@ sint On_TDLS_Ch_Switch_Rsp(_adapter *padapter, union recv_frame *precv_frame)
struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
int ret = _SUCCESS;
- if (padapter->tdlsinfo.ch_switch_prohibited == _TRUE)
- { DBG_871X("[TDLS] Ignore %s since ch_switch_prohibited = _TRUE\n", __FUNCTION__);
+ if (rtw_tdls_is_chsw_allowed(padapter) == _FALSE)
+ { DBG_871X("[TDLS] Ignore %s since channel switch is not allowed\n", __FUNCTION__);
return _SUCCESS;
}
psa = get_sa(ptr);
ptdls_sta = rtw_get_stainfo(pstapriv, psa);
+ if (ptdls_sta == NULL) {
+ DBG_871X("[%s] Direct Link Peer = "MAC_FMT" not found\n", __FUNCTION__, MAC_ARG(psa));
+ return _FAIL;
+ }
+
/* If we receive Unsolicited TDLS Channel Switch Response when channel switch is running, */
/* we will go back to base channel and terminate this channel switch procedure */
if (ATOMIC_READ(&pchsw_info->chsw_on) == _TRUE) {
if (pmlmeext->cur_channel != rtw_get_oper_ch(padapter)) {
- DBG_871X("receive unsolicited channel switch response \n");
- rtw_tdls_cmd(padapter, NULL, TDLS_CH_SW_BACK);
+ DBG_871X("[TDLS] Rx unsolicited channel switch response \n");
+ rtw_tdls_cmd(padapter, ptdls_sta->hwaddr, TDLS_CH_SW_TO_BASE_CHNL);
goto exit;
}
}
@@ -2329,9 +2530,9 @@ sint On_TDLS_Ch_Switch_Rsp(_adapter *padapter, union recv_frame *precv_frame)
_rtw_memcpy(&status_code, ptr+2, 2);
if (status_code != 0) {
- DBG_871X("[%s] status_code:%d\n", __FUNCTION__, status_code);
+ DBG_871X("[TDLS] %s status_code:%d\n", __FUNCTION__, status_code);
pchsw_info->ch_sw_state &= ~(TDLS_CH_SW_INITIATOR_STATE);
- ATOMIC_SET(&pchsw_info->chsw_on, _FALSE);
+ rtw_tdls_cmd(padapter, ptdls_sta->hwaddr, TDLS_CH_SW_END);
ret = _FAIL;
goto exit;
}
@@ -2361,8 +2562,8 @@ sint On_TDLS_Ch_Switch_Rsp(_adapter *padapter, union recv_frame *precv_frame)
if ((pmlmeext->cur_channel == rtw_get_oper_ch(padapter)) &&
(pchsw_info->ch_sw_state & TDLS_WAIT_CH_RSP_STATE)) {
- ATOMIC_SET(&pchsw_info->chsw_on, _TRUE);
- rtw_tdls_cmd(padapter, ptdls_sta->hwaddr, TDLS_CH_SW);
+ if (ATOMIC_READ(&pchsw_info->chsw_on) == _TRUE)
+ rtw_tdls_cmd(padapter, ptdls_sta->hwaddr, TDLS_CH_SW_TO_OFF_CHNL);
}
exit:
@@ -2521,7 +2722,11 @@ void rtw_build_tdls_setup_req_ies(_adapter * padapter, struct xmit_frame * pxmit
pframe = rtw_tdls_set_qos_cap(pframe, pattrib);
#ifdef CONFIG_80211AC_VHT
- if ((padapter->mlmepriv.htpriv.ht_option == _TRUE) && (pregistrypriv->vht_enable == _TRUE) && (pmlmeext->cur_channel > 14)) {
+ if ((padapter->mlmepriv.htpriv.ht_option == _TRUE) && (pmlmeext->cur_channel > 14)
+ && REGSTY_IS_11AC_ENABLE(pregistrypriv)
+ && hal_chk_proto_cap(padapter, PROTO_CAP_11AC)
+ && (!padapter->mlmepriv.country_ent || COUNTRY_CHPLAN_EN_11AC(padapter->mlmepriv.country_ent))
+ ) {
pframe = rtw_tdls_set_aid(padapter, pframe, pattrib);
pframe = rtw_tdls_set_vht_cap(padapter, pframe, pattrib);
}
@@ -2617,7 +2822,11 @@ void rtw_build_tdls_setup_rsp_ies(_adapter * padapter, struct xmit_frame * pxmit
pframe = rtw_tdls_set_qos_cap(pframe, pattrib);
#ifdef CONFIG_80211AC_VHT
- if ((padapter->mlmepriv.htpriv.ht_option == _TRUE) && (pregistrypriv->vht_enable == _TRUE) && (pmlmeext->cur_channel > 14)) {
+ if ((padapter->mlmepriv.htpriv.ht_option == _TRUE) && (pmlmeext->cur_channel > 14)
+ && REGSTY_IS_11AC_ENABLE(pregistrypriv)
+ && hal_chk_proto_cap(padapter, PROTO_CAP_11AC)
+ && (!padapter->mlmepriv.country_ent || COUNTRY_CHPLAN_EN_11AC(padapter->mlmepriv.country_ent))
+ ) {
pframe = rtw_tdls_set_aid(padapter, pframe, pattrib);
pframe = rtw_tdls_set_vht_cap(padapter, pframe, pattrib);
pframe = rtw_tdls_set_vht_op_mode_notify(padapter, pframe, pattrib, pmlmeext->cur_bwmode);
@@ -2689,8 +2898,12 @@ void rtw_build_tdls_setup_cfm_ies(_adapter * padapter, struct xmit_frame * pxmit
pframe = rtw_tdls_set_wmm_params(padapter, pframe, pattrib);
#ifdef CONFIG_80211AC_VHT
- if ((padapter->mlmepriv.htpriv.ht_option == _TRUE) && (pregistrypriv->vht_enable == _TRUE)
- && (ptdls_sta->vhtpriv.vht_option == _TRUE) && (pmlmeext->cur_channel > 14)) {
+ if ((padapter->mlmepriv.htpriv.ht_option == _TRUE)
+ && (ptdls_sta->vhtpriv.vht_option == _TRUE) && (pmlmeext->cur_channel > 14)
+ && REGSTY_IS_11AC_ENABLE(pregistrypriv)
+ && hal_chk_proto_cap(padapter, PROTO_CAP_11AC)
+ && (!padapter->mlmepriv.country_ent || COUNTRY_CHPLAN_EN_11AC(padapter->mlmepriv.country_ent))
+ ) {
pframe = rtw_tdls_set_vht_operation(padapter, pframe, pattrib, pmlmeext->cur_channel);
pframe = rtw_tdls_set_vht_op_mode_notify(padapter, pframe, pattrib, pmlmeext->cur_bwmode);
}
@@ -2831,11 +3044,11 @@ void rtw_build_tdls_peer_traffic_rsp_ies(_adapter * padapter, struct xmit_frame
#ifdef CONFIG_TDLS_CH_SW
void rtw_build_tdls_ch_switch_req_ies(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe, struct tdls_txmgmt *ptxmgmt)
{
-
+ struct tdls_info *ptdlsinfo = &padapter->tdlsinfo;
struct pkt_attrib *pattrib = &pxmitframe->attrib;
struct sta_priv *pstapriv = &padapter->stapriv;
struct sta_info *ptdls_sta = rtw_get_stainfo(pstapriv, pattrib->dst);
- u16 switch_time= CH_SWITCH_TIME * 1000, switch_timeout=CH_SWITCH_TIMEOUT * 1000;
+ u16 switch_time= TDLS_CH_SWITCH_TIME * 1000, switch_timeout=TDLS_CH_SWITCH_TIMEOUT * 1000;
ptdls_sta->ch_switch_time=switch_time;
ptdls_sta->ch_switch_timeout=switch_timeout;
@@ -2845,7 +3058,19 @@ void rtw_build_tdls_ch_switch_req_ies(_adapter * padapter, struct xmit_frame * p
pframe = rtw_tdls_set_action(pframe, pattrib, ptxmgmt);
pframe = rtw_tdls_set_target_ch(padapter, pframe, pattrib);
pframe = rtw_tdls_set_reg_class(pframe, pattrib, ptdls_sta);
-
+
+ if (ptdlsinfo->chsw_info.ch_offset != HAL_PRIME_CHNL_OFFSET_DONT_CARE) {
+ switch (ptdlsinfo->chsw_info.ch_offset)
+ {
+ case HAL_PRIME_CHNL_OFFSET_LOWER:
+ pframe = rtw_tdls_set_second_channel_offset(pframe, pattrib, SCA);
+ break;
+ case HAL_PRIME_CHNL_OFFSET_UPPER:
+ pframe = rtw_tdls_set_second_channel_offset(pframe, pattrib, SCB);
+ break;
+ }
+ }
+
if (ptdls_sta->tdls_sta_state & TDLS_INITIATOR_STATE)
pframe = rtw_tdls_set_linkid(pframe, pattrib, _FALSE);
else if (ptdls_sta->tdls_sta_state & TDLS_RESPONDER_STATE)
@@ -2943,7 +3168,7 @@ void _tdls_tpk_timer_hdl(void *FunctionContext)
ptdls_sta->TPK_count++;
/* TPK_timer expired in a second */
/* Retry timer should set at least 301 sec. */
- if (ptdls_sta->TPK_count >= ptdls_sta->TDLS_PeerKey_Lifetime) {
+ if (ptdls_sta->TPK_count >= (ptdls_sta->TDLS_PeerKey_Lifetime - 3)) {
DBG_871X("[TDLS] %s, Re-Setup TDLS link with "MAC_FMT" since TPK lifetime expires!\n", __FUNCTION__, MAC_ARG(ptdls_sta->hwaddr));
ptdls_sta->TPK_count=0;
_rtw_memcpy(txmgmt.peer, ptdls_sta->hwaddr, ETH_ALEN);
@@ -2960,51 +3185,42 @@ void _tdls_ch_switch_timer_hdl(void *FunctionContext)
_adapter *padapter = ptdls_sta->padapter;
struct tdls_ch_switch *pchsw_info = &padapter->tdlsinfo.chsw_info;
- //DBG_871X("%s %d, tdls_sta_state:0x%08x\n", __FUNCTION__, __LINE__, ptdls_sta->tdls_sta_state);
+ rtw_tdls_cmd(padapter, ptdls_sta->hwaddr, TDLS_CH_SW_END_TO_BASE_CHNL);
+ DBG_871X("[TDLS] %s, can't get traffic from op_ch:%d\n", __FUNCTION__, rtw_get_oper_ch(padapter));
+}
- if (padapter->mlmeextpriv.cur_channel != rtw_get_oper_ch(padapter)) {
- if (!(pchsw_info->ch_sw_state & TDLS_PEER_AT_OFF_STATE)) {
- rtw_tdls_cmd(padapter, ptdls_sta->hwaddr, TDLS_CH_SW_BACK);
- ATOMIC_SET(&pchsw_info->chsw_on, _FALSE);
- DBG_871X("[TDLS] %s, can't get traffic from op_ch:%d\n", __FUNCTION__, rtw_get_oper_ch(padapter));
- } else {
- //DBG_871X("%s %d\n", __FUNCTION__, __LINE__);
- //_set_timer(&ptdls_sta->delay_timer, padapter->mlmeextpriv.mlmext_info.bcn_interval - 5 - ptdls_sta->ch_switch_timeout/1000);
- }
- } else {
- //DBG_871X("%s %d, op_ch:%d, tdls_state:0x%08x\n", __FUNCTION__, __LINE__, rtw_get_oper_ch(padapter), ptdls_sta->tdls_sta_state);
- }
+void _tdls_delay_timer_hdl(void *FunctionContext)
+{
+ struct sta_info *ptdls_sta = (struct sta_info *)FunctionContext;
+ _adapter *padapter = ptdls_sta->padapter;
+ struct tdls_ch_switch *pchsw_info = &padapter->tdlsinfo.chsw_info;
-#if 0
- if (!(pchsw_info->ch_sw_state & TDLS_PEER_AT_OFF_STATE)) {
- //SelectChannel(padapter, padapter->mlmeextpriv.cur_channel);
- ATOMIC_SET(&pchsw_info->chsw_on, _FALSE);
- DBG_871X("%s %d, op_ch:%d, tdls_state:0x%08x\n", __FUNCTION__, __LINE__, rtw_get_oper_ch(padapter), ptdls_sta->tdls_sta_state);
- }
+ DBG_871X("[TDLS] %s, op_ch:%d, tdls_state:0x%08x\n", __FUNCTION__, rtw_get_oper_ch(padapter), ptdls_sta->tdls_sta_state);
+ pchsw_info->delay_switch_back = _TRUE;
+}
- if (pchsw_info->ch_sw_state & TDLS_CH_SW_INITIATOR_STATE) {
- if (padapter->mlmeextpriv.cur_channel != rtw_get_oper_ch(padapter)) {
- DBG_871X("%s %d\n", __FUNCTION__, __LINE__);
- _set_timer(&ptdls_sta->delay_timer, padapter->mlmeextpriv.mlmext_info.bcn_interval - 5 - ptdls_sta->ch_switch_timeout/1000);
- //_set_timer(&ptdls_sta->delay_timer, 1000);
- } else {
- DBG_871X("%s %d\n", __FUNCTION__, __LINE__);
- issue_tdls_ch_switch_req(padapter, ptdls_sta);
- //_set_timer(&ptdls_sta->delay_timer, 500);
- }
+void _tdls_stay_on_base_chnl_timer_hdl(void *FunctionContext)
+{
+ struct sta_info *ptdls_sta = (struct sta_info *)FunctionContext;
+ _adapter *padapter = ptdls_sta->padapter;
+ struct tdls_ch_switch *pchsw_info = &padapter->tdlsinfo.chsw_info;
+
+ if (ptdls_sta != NULL) {
+ issue_tdls_ch_switch_req(padapter, ptdls_sta);
+ pchsw_info->ch_sw_state |= TDLS_WAIT_CH_RSP_STATE;
}
-#endif
}
-void _tdls_delay_timer_hdl(void *FunctionContext)
+void _tdls_ch_switch_monitor_timer_hdl(void *FunctionContext)
{
struct sta_info *ptdls_sta = (struct sta_info *)FunctionContext;
_adapter *padapter = ptdls_sta->padapter;
struct tdls_ch_switch *pchsw_info = &padapter->tdlsinfo.chsw_info;
- DBG_871X("[TDLS] %s, op_ch:%d, tdls_state:0x%08x\n", __FUNCTION__, rtw_get_oper_ch(padapter), ptdls_sta->tdls_sta_state);
- pchsw_info->delay_switch_back = _TRUE;
+ rtw_tdls_cmd(padapter, ptdls_sta->hwaddr, TDLS_CH_SW_END);
+ DBG_871X("[TDLS] %s, does not receive ch sw req\n", __FUNCTION__);
}
+
#endif
void _tdls_handshake_timer_hdl(void *FunctionContext)
@@ -3021,11 +3237,11 @@ void _tdls_handshake_timer_hdl(void *FunctionContext)
DBG_871X("[TDLS] Handshake time out\n");
if (ptdls_sta->tdls_sta_state & TDLS_LINKED_STATE)
{
- issue_tdls_teardown(padapter, &txmgmt, _TRUE);
+ rtw_tdls_cmd(padapter, ptdls_sta->hwaddr, TDLS_TEARDOWN_STA);
}
else
{
- rtw_tdls_cmd(padapter, ptdls_sta->hwaddr, TDLS_TEAR_STA);
+ rtw_tdls_cmd(padapter, ptdls_sta->hwaddr, TDLS_TEARDOWN_STA_LOCALLY);
}
}
}
@@ -3056,6 +3272,8 @@ void rtw_init_tdls_timer(_adapter *padapter, struct sta_info *psta)
#ifdef CONFIG_TDLS_CH_SW
_init_timer(&psta->ch_sw_timer, padapter->pnetdev, _tdls_ch_switch_timer_hdl, psta);
_init_timer(&psta->delay_timer, padapter->pnetdev, _tdls_delay_timer_hdl, psta);
+ _init_timer(&psta->stay_on_base_chnl_timer, padapter->pnetdev, _tdls_stay_on_base_chnl_timer_hdl, psta);
+ _init_timer(&psta->ch_sw_monitor_timer, padapter->pnetdev, _tdls_ch_switch_monitor_timer_hdl, psta);
#endif
_init_timer(&psta->handshake_timer, padapter->pnetdev, _tdls_handshake_timer_hdl, psta);
_init_timer(&psta->pti_timer, padapter->pnetdev, _tdls_pti_timer_hdl, psta);
@@ -3066,7 +3284,9 @@ void rtw_free_tdls_timer(struct sta_info *psta)
_cancel_timer_ex(&psta->TPK_timer);
#ifdef CONFIG_TDLS_CH_SW
_cancel_timer_ex(&psta->ch_sw_timer);
- _cancel_timer_ex(&psta->delay_timer);
+ _cancel_timer_ex(&psta->delay_timer);
+ _cancel_timer_ex(&psta->stay_on_base_chnl_timer);
+ _cancel_timer_ex(&psta->ch_sw_monitor_timer);
#endif
_cancel_timer_ex(&psta->handshake_timer);
_cancel_timer_ex(&psta->pti_timer);
diff --git a/rtl8188FU/core/rtw_vht.c b/rtl8188FU/core/rtw_vht.c
index 0bdc2a3..18a4d7a 100755
--- a/rtl8188FU/core/rtw_vht.c
+++ b/rtl8188FU/core/rtw_vht.c
@@ -612,6 +612,7 @@ u32 rtw_build_vht_cap_ie(_adapter *padapter, u8 *pbuf)
u16 HighestRate;
u8 *pcap, *pcap_mcs;
u32 len = 0;
+ u32 rx_packet_offset, max_recvbuf_sz;
struct registry_priv *pregistrypriv = &padapter->registrypriv;
struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
struct vht_priv *pvhtpriv = &pmlmepriv->vhtpriv;
@@ -620,8 +621,23 @@ u32 rtw_build_vht_cap_ie(_adapter *padapter, u8 *pbuf)
_rtw_memset(pcap, 0, 32);
/* B0 B1 Maximum MPDU Length */
- SET_VHT_CAPABILITY_ELE_MAX_MPDU_LENGTH(pcap, 2);
-
+ rtw_hal_get_def_var(padapter, HAL_DEF_RX_PACKET_OFFSET, &rx_packet_offset);
+ rtw_hal_get_def_var(padapter, HAL_DEF_MAX_RECVBUF_SZ, &max_recvbuf_sz);
+
+ RTW_DBG("%s, line%d, Available RX buf size = %d bytes\n.", __FUNCTION__, __LINE__, max_recvbuf_sz - rx_packet_offset);
+
+ if ((max_recvbuf_sz - rx_packet_offset) >= 11454) {
+ SET_VHT_CAPABILITY_ELE_MAX_MPDU_LENGTH(pcap, 2);
+ RTW_INFO("%s, line%d, Set MAX MPDU len = 11454 bytes\n.", __FUNCTION__, __LINE__);
+ } else if ((max_recvbuf_sz - rx_packet_offset) >= 7991) {
+ SET_VHT_CAPABILITY_ELE_MAX_MPDU_LENGTH(pcap, 1);
+ RTW_INFO("%s, line%d, Set MAX MPDU len = 7991 bytes\n.", __FUNCTION__, __LINE__);
+ } else if ((max_recvbuf_sz - rx_packet_offset) >= 3895) {
+ SET_VHT_CAPABILITY_ELE_MAX_MPDU_LENGTH(pcap, 0);
+ RTW_INFO("%s, line%d, Set MAX MPDU len = 3895 bytes\n.", __FUNCTION__, __LINE__);
+ } else
+ RTW_ERR("%s, line%d, Error!! Available RX buf size < 3895 bytes\n.", __FUNCTION__, __LINE__);
+
/* B2 B3 Supported Channel Width Set */
if (hal_chk_bw_cap(padapter, BW_CAP_160M) && REGSTY_IS_BW_5G_SUPPORT(pregistrypriv, CHANNEL_WIDTH_160)) {
if (hal_chk_bw_cap(padapter, BW_CAP_80_80M) && REGSTY_IS_BW_5G_SUPPORT(pregistrypriv, CHANNEL_WIDTH_80_80))
diff --git a/rtl8188FU/core/rtw_wlan_util.c b/rtl8188FU/core/rtw_wlan_util.c
index e65ab3f..11c315a 100755
--- a/rtl8188FU/core/rtw_wlan_util.c
+++ b/rtl8188FU/core/rtw_wlan_util.c
@@ -819,6 +819,9 @@ void set_channel_bwmode(_adapter *padapter, unsigned char channel, unsigned char
{
u8 center_ch, chnl_offset80 = HAL_PRIME_CHNL_OFFSET_DONT_CARE;
struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
+#if (defined(CONFIG_TDLS) && defined(CONFIG_TDLS_CH_SW)) || defined(CONFIG_MCC_MODE)
+ u8 iqk_info_backup = _FALSE;
+#endif
if ( padapter->bNotifyChannelChange )
{
@@ -860,7 +863,24 @@ void set_channel_bwmode(_adapter *padapter, unsigned char channel, unsigned char
rtw_set_oper_bw(padapter, bwmode);
rtw_set_oper_choffset(padapter, channel_offset);
+#if (defined(CONFIG_TDLS) && defined(CONFIG_TDLS_CH_SW)) || defined(CONFIG_MCC_MODE)
+ /* To check if we need to backup iqk info after switch chnl & bw */
+ {
+ u8 take_care_iqk, do_iqk;
+
+ rtw_hal_get_hwreg(padapter, HW_VAR_CH_SW_NEED_TO_TAKE_CARE_IQK_INFO, &take_care_iqk);
+ rtw_hal_get_hwreg(padapter, HW_VAR_DO_IQK, &do_iqk);
+ if ((take_care_iqk == _TRUE) && (do_iqk == _TRUE))
+ iqk_info_backup = _TRUE;
+ }
+#endif
+
rtw_hal_set_chnl_bw(padapter, center_ch, bwmode, channel_offset, chnl_offset80); // set center channel
+
+#if (defined(CONFIG_TDLS) && defined(CONFIG_TDLS_CH_SW)) || defined(CONFIG_MCC_MODE)
+ if (iqk_info_backup == _TRUE)
+ rtw_hal_ch_sw_iqk_info_backup(padapter);
+#endif
#ifdef CONFIG_DFS_MASTER
if (ori_overlap_radar_detect_ch && !new_overlap_radar_detect_ch) {
@@ -943,20 +963,21 @@ int is_client_associated_to_ibss(_adapter *padapter)
int is_IBSS_empty(_adapter *padapter)
{
- unsigned int i;
- struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
- struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
-
- for (i = IBSS_START_MAC_ID; i < NUM_STA; i++)
- {
- if (pmlmeinfo->FW_sta_info[i].status == 1)
- {
+ int i;
+ struct macid_ctl_t *macid_ctl = &padapter->dvobj->macid_ctl;
+
+ for (i = 0; i < macid_ctl->num; i++) {
+ if (!rtw_macid_is_used(macid_ctl, i))
+ continue;
+ if (rtw_macid_get_if_g(macid_ctl, i) != padapter->iface_id)
+ continue;
+ if (!GET_H2CCMD_MSRRPT_PARM_OPMODE(&macid_ctl->h2c_msr[i]))
+ continue;
+ if (GET_H2CCMD_MSRRPT_PARM_ROLE(&macid_ctl->h2c_msr[i]) == H2C_MSR_ROLE_ADHOC)
return _FAIL;
- }
}
-
+
return _TRUE;
-
}
unsigned int decide_wait_for_beacon_timeout(unsigned int bcn_interval)
@@ -1527,25 +1548,6 @@ void rtw_camid_free(_adapter *adapter, u8 cam_id)
_exit_critical_bh(&cam_ctl->lock, &irqL);
}
-int allocate_fw_sta_entry(_adapter *padapter)
-{
- unsigned int mac_id;
- struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
- struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
-
- for (mac_id = IBSS_START_MAC_ID; mac_id < NUM_STA; mac_id++)
- {
- if (pmlmeinfo->FW_sta_info[mac_id].status == 0)
- {
- pmlmeinfo->FW_sta_info[mac_id].status = 1;
- pmlmeinfo->FW_sta_info[mac_id].retry = 0;
- break;
- }
- }
-
- return mac_id;
-}
-
void flush_all_cam_entry(_adapter *padapter)
{
struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
@@ -1600,9 +1602,6 @@ void flush_all_cam_entry(_adapter *padapter)
rtw_hal_set_hwreg(padapter, HW_VAR_SEC_DK_CFG, (u8*)_FALSE);
#endif
}
-
- _rtw_memset((u8 *)(pmlmeinfo->FW_sta_info), 0, sizeof(pmlmeinfo->FW_sta_info));
-
}
#if defined(CONFIG_P2P) && defined(CONFIG_WFD)
@@ -1896,8 +1895,9 @@ static void bwmode_update_check(_adapter *padapter, PNDIS_802_11_VARIABLE_IEs pI
}
- if((new_bwmode!= pmlmeext->cur_bwmode) || (new_ch_offset!=pmlmeext->cur_ch_offset))
- {
+ if ((new_bwmode != pmlmeext->cur_bwmode || new_ch_offset != pmlmeext->cur_ch_offset)
+ && new_bwmode < pmlmeext->cur_bwmode
+ ) {
pmlmeinfo->bwmode_updated = _TRUE;
pmlmeext->cur_bwmode = new_bwmode;
@@ -3113,7 +3113,7 @@ unsigned char get_highest_mcs_rate(struct HT_caps_element *pHT_caps)
void Update_RA_Entry(_adapter *padapter, struct sta_info *psta)
{
- rtw_hal_update_ra_mask(psta, 0);
+ rtw_hal_update_ra_mask(psta, psta->rssi_level);
}
void enable_rate_adaptive(_adapter *padapter, struct sta_info *psta);
@@ -3454,43 +3454,52 @@ void update_sta_basic_rate(struct sta_info *psta, u8 wireless_mode)
}
}
-int update_sta_support_rate(_adapter *padapter, u8* pvar_ie, uint var_ie_len, int cam_idx)
+int rtw_ies_get_supported_rate(u8 *ies, uint ies_len, u8 *rate_set, u8 *rate_num)
{
- unsigned int ie_len;
- PNDIS_802_11_VARIABLE_IEs pIE;
- int supportRateNum = 0;
- struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
- struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
-
- pIE = (PNDIS_802_11_VARIABLE_IEs)rtw_get_ie(pvar_ie, _SUPPORTEDRATES_IE_, &ie_len, var_ie_len);
- if (pIE == NULL)
- {
- return _FAIL;
+ u8 *ie;
+ unsigned int ie_len;
+
+ if (!rate_set || !rate_num)
+ return _FALSE;
+
+ *rate_num = 0;
+
+ ie = rtw_get_ie(ies, _SUPPORTEDRATES_IE_, &ie_len, ies_len);
+ if (ie == NULL)
+ goto ext_rate;
+
+ _rtw_memcpy(rate_set, ie + 2, ie_len);
+ *rate_num = ie_len;
+
+ext_rate:
+ ie = rtw_get_ie(ies, _EXT_SUPPORTEDRATES_IE_, &ie_len, ies_len);
+ if (ie) {
+ _rtw_memcpy(rate_set + *rate_num, ie + 2, ie_len);
+ *rate_num += ie_len;
}
-
- _rtw_memcpy(pmlmeinfo->FW_sta_info[cam_idx].SupportedRates, pIE->data, ie_len);
- supportRateNum = ie_len;
-
- pIE = (PNDIS_802_11_VARIABLE_IEs)rtw_get_ie(pvar_ie, _EXT_SUPPORTEDRATES_IE_, &ie_len, var_ie_len);
- if (pIE)
- {
- _rtw_memcpy((pmlmeinfo->FW_sta_info[cam_idx].SupportedRates + supportRateNum), pIE->data, ie_len);
+
+ if (*rate_num == 0)
+ return _FAIL;
+
+ if (0) {
+ int i;
+
+ for (i = 0; i < *rate_num; i++)
+ DBG_871X("rate:0x%02x\n", *(rate_set + i));
}
return _SUCCESS;
-
}
void process_addba_req(_adapter *padapter, u8 *paddba_req, u8 *addr)
{
struct sta_info *psta;
u16 tid, start_seq, param;
- struct recv_reorder_ctrl *preorder_ctrl;
struct sta_priv *pstapriv = &padapter->stapriv;
struct ADDBA_request *preq = (struct ADDBA_request*)paddba_req;
struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
- u8 size;
+ u8 size, accept = _FALSE;
psta = rtw_get_stainfo(pstapriv, addr);
if (!psta)
@@ -3501,27 +3510,14 @@ void process_addba_req(_adapter *padapter, u8 *paddba_req, u8 *addr)
param = le16_to_cpu(preq->BA_para_set);
tid = (param>>2)&0x0f;
- preorder_ctrl = &psta->recvreorder_ctrl[tid];
-
- #ifdef CONFIG_UPDATE_INDICATE_SEQ_WHILE_PROCESS_ADDBA_REQ
- preorder_ctrl->indicate_seq = start_seq;
- #ifdef DBG_RX_SEQ
- DBG_871X("DBG_RX_SEQ %s:%d IndicateSeq: %d, start_seq: %d\n", __func__, __LINE__,
- preorder_ctrl->indicate_seq, start_seq);
- #endif
- #else
- preorder_ctrl->indicate_seq = 0xffff;
- #endif
- preorder_ctrl->enable = rtw_rx_ampdu_is_accept(padapter);
+ accept = rtw_rx_ampdu_is_accept(padapter);
size = rtw_rx_ampdu_size(padapter);
- if (preorder_ctrl->enable == _TRUE) {
- preorder_ctrl->ampdu_size = size;
- issue_addba_rsp(padapter, addr, tid, 0, size);
- } else {
- issue_addba_rsp(padapter, addr, tid, 37, size); /* reject ADDBA Req */
- }
+ if (accept == _TRUE)
+ rtw_addbarsp_cmd(padapter, addr, tid, 0, size, start_seq);
+ else
+ rtw_addbarsp_cmd(padapter, addr, tid, 37, size, start_seq); /* reject ADDBA Req */
exit:
return;
@@ -3792,6 +3788,7 @@ void rtw_alloc_macid(_adapter *padapter, struct sta_info *psta)
rtw_macid_map_set(&macid_ctl->bmc, 1);
for (i=0;i<IFACE_ID_MAX;i++)
rtw_macid_map_set(&macid_ctl->if_g[padapter->iface_id], 1);
+ macid_ctl->sta[1] = psta;
/* TODO ch_g? */
_exit_critical_bh(&macid_ctl->lock, &irqL);
i = 1;
@@ -3818,6 +3815,7 @@ void rtw_alloc_macid(_adapter *padapter, struct sta_info *psta)
rtw_macid_map_set(&macid_ctl->bmc, i);
rtw_macid_map_set(&macid_ctl->if_g[padapter->iface_id], i);
+ macid_ctl->sta[i] = psta;
/* TODO ch_g? */
@@ -3885,6 +3883,7 @@ void rtw_release_macid(_adapter *padapter, struct sta_info *psta)
rtw_macid_map_clr(&macid_ctl->if_g[i], psta->mac_id);
for (i=0;i<2;i++)
rtw_macid_map_clr(&macid_ctl->ch_g[i], psta->mac_id);
+ macid_ctl->sta[psta->mac_id] = NULL;
}
_exit_critical_bh(&macid_ctl->lock, &irqL);
@@ -4085,15 +4084,17 @@ bool rtw_check_pattern_valid(u8 *input, u8 len)
{
int i = 0;
bool res = _FALSE;
-
- for (i = 0 ; i < len ; i++) {
- if ((input[i] <= '9' && input[i] >= '0') ||
- (input[i] <= 'F' && input[i] >= 'A') ||
- (input[i] <= 'f' && input[i] >= 'a'))
- res = _TRUE;
- else
- res = _FALSE;
- }
+
+ if (len != 2)
+ goto exit;
+
+ for (i = 0 ; i < len ; i++)
+ if (IsHexDigit(input[i]) == _FALSE)
+ goto exit;
+
+ res = _SUCCESS;
+
+exit:
return res;
}
diff --git a/rtl8188FU/core/rtw_xmit.c b/rtl8188FU/core/rtw_xmit.c
index d0fba9d..c7f7f79 100755
--- a/rtl8188FU/core/rtw_xmit.c
+++ b/rtl8188FU/core/rtw_xmit.c
@@ -3786,7 +3786,7 @@ s32 rtw_monitor_xmit_entry(struct sk_buff *skb, struct net_device *ndev)
u16 frame_ctl;
unsigned char src_mac_addr[6];
unsigned char dst_mac_addr[6];
- struct ieee80211_hdr *dot11_hdr;
+ struct rtw_ieee80211_hdr *dot11_hdr;
struct ieee80211_radiotap_header *rtap_hdr;
_adapter *padapter = (_adapter *)rtw_netdev_priv(ndev);
@@ -3812,8 +3812,8 @@ s32 rtw_monitor_xmit_entry(struct sk_buff *skb, struct net_device *ndev)
/* Skip the ratio tap header */
skb_pull(skb, rtap_len);
- dot11_hdr = (struct ieee80211_hdr *)skb->data;
- frame_ctl = le16_to_cpu(dot11_hdr->frame_control);
+ dot11_hdr = (struct rtw_ieee80211_hdr *)skb->data;
+ frame_ctl = le16_to_cpu(dot11_hdr->frame_ctl);
/* Check if the QoS bit is set */
if ((frame_ctl & RTW_IEEE80211_FCTL_FTYPE) == RTW_IEEE80211_FTYPE_DATA) {
@@ -4217,7 +4217,7 @@ sint xmitframe_enqueue_for_sleeping_sta(_adapter *padapter, struct xmit_frame *p
rtw_list_delete(&pxmitframe->list);
- //_enter_critical_bh(&psta->sleep_q.lock, &irqL);
+ /*_enter_critical_bh(&psta->sleep_q.lock, &irqL);*/
rtw_list_insert_tail(&pxmitframe->list, get_list_head(&psta->sleep_q));
@@ -4230,31 +4230,23 @@ sint xmitframe_enqueue_for_sleeping_sta(_adapter *padapter, struct xmit_frame *p
pstapriv->sta_dz_bitmap |= BIT(0);
//DBG_871X("enqueue, sq_len=%d, tim=%x\n", psta->sleepq_len, pstapriv->tim_bitmap);
- if (padapter->registrypriv.wifi_spec == 1) {
- /*
- *if (update_tim == _TRUE)
- * rtw_chk_hi_queue_cmd(padapter);
- */
+ if (update_tim == _TRUE) {
+ if (is_broadcast_mac_addr(pattrib->ra))
+ _update_beacon(padapter, _TIM_IE_, NULL, _TRUE, "buffer BC");
+ else
+ _update_beacon(padapter, _TIM_IE_, NULL, _TRUE, "buffer MC");
} else {
-
- if (update_tim == _TRUE) {
- if (is_broadcast_mac_addr(pattrib->ra))
- _update_beacon(padapter, _TIM_IE_, NULL, _TRUE, "buffer BC");
- else
- _update_beacon(padapter, _TIM_IE_, NULL, _TRUE, "buffer MC");
- } else {
- chk_bmc_sleepq_cmd(padapter);
- }
+ chk_bmc_sleepq_cmd(padapter);
}
-
- //_exit_critical_bh(&psta->sleep_q.lock, &irqL);
- ret = _TRUE;
+ /*_exit_critical_bh(&psta->sleep_q.lock, &irqL);*/
+
+ ret = _TRUE;
DBG_COUNTER(padapter->tx_logs.core_tx_ap_enqueue_mcast);
-
+
}
-
+
_exit_critical_bh(&psta->sleep_q.lock, &irqL);
return ret;
diff --git a/rtl8188FU/hal/efuse/rtl8188f/HalEfuseMask8188F_USB.c b/rtl8188FU/hal/efuse/rtl8188f/HalEfuseMask8188F_USB.c
index 9912f5d..dddc3fa 100755
--- a/rtl8188FU/hal/efuse/rtl8188f/HalEfuseMask8188F_USB.c
+++ b/rtl8188FU/hal/efuse/rtl8188f/HalEfuseMask8188F_USB.c
@@ -31,39 +31,38 @@
******************************************************************************/
u1Byte Array_MP_8188F_MUSB[] = {
-0xFF,
-0xF3,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x0F,
-0xF1,
-0xFF,
-0xFF,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-
+ 0xFF,
+ 0xF3,
+ 0x00,
+ 0x00,
+ 0x00,
+ 0x00,
+ 0x00,
+ 0x00,
+ 0x00,
+ 0x00,
+ 0x00,
+ 0x0F,
+ 0xF1,
+ 0xFF,
+ 0xFF,
+ 0xFF,
+ 0xFF,
+ 0x70,
+ 0x00,
+ 0x12,
+ 0x00,
+ 0x00,
+ 0x00,
+ 0x00,
+ 0x00,
+ 0x00,
+ 0x00,
+ 0x00,
+ 0x00,
+ 0x00,
+ 0x00,
+ 0x00,
};
u2Byte
diff --git a/rtl8188FU/hal/hal_btcoex.c b/rtl8188FU/hal/hal_btcoex.c
index 1c26fd9..29a64c2 100755
--- a/rtl8188FU/hal/hal_btcoex.c
+++ b/rtl8188FU/hal/hal_btcoex.c
@@ -3639,12 +3639,10 @@ hal_btcoex_AntIsolationConfig_ParaFile(
_rtw_memset(pHalData->para_file_buf , 0 , MAX_PARA_FILE_BUF_LEN);
-
- rtw_merge_string(file_path, PATH_LENGTH_MAX, rtw_phy_file_path, pFileName);
-
- if (rtw_is_file_readable(file_path) == _TRUE)
+ rtw_get_phy_file_path(Adapter, pFileName);
+ if (rtw_is_file_readable(rtw_phy_para_file_path) == _TRUE)
{
- rlen = rtw_retrieve_from_file(file_path, pHalData->para_file_buf, MAX_PARA_FILE_BUF_LEN);
+ rlen = rtw_retrieve_from_file(rtw_phy_para_file_path, pHalData->para_file_buf, MAX_PARA_FILE_BUF_LEN);
if (rlen > 0)
{
rtStatus = _SUCCESS;
diff --git a/rtl8188FU/hal/hal_com.c b/rtl8188FU/hal/hal_com.c
index a145692..72ab838 100755
--- a/rtl8188FU/hal/hal_com.c
+++ b/rtl8188FU/hal/hal_com.c
@@ -27,7 +27,7 @@
//#define CONFIG_GTK_OL_DBG
#ifdef CONFIG_LOAD_PHY_PARA_FROM_FILE
-char file_path[PATH_LENGTH_MAX];
+char rtw_phy_para_file_path[PATH_LENGTH_MAX];
#endif
void dump_chip_info(HAL_VERSION ChipVersion)
@@ -136,61 +136,106 @@ void rtw_hal_config_rftype(PADAPTER padapter)
*
* Parameters:
* padapter pointer of adapter
- * hw_channel_plan channel plan from HW (efuse/eeprom)
+ * hw_alpha2 country code from HW (efuse/eeprom/mapfile)
+ * hw_chplan channel plan from HW (efuse/eeprom/mapfile)
* BIT[7] software configure mode; 0:Enable, 1:disable
* BIT[6:0] Channel Plan
- * sw_channel_plan channel plan from SW (registry/module param)
- * def_channel_plan channel plan used when HW/SW both invalid
+ * sw_alpha2 country code from HW (registry/module param)
+ * sw_chplan channel plan from SW (registry/module param)
+ * def_chplan channel plan used when HW/SW both invalid
* AutoLoadFail efuse autoload fail or not
*
* Return:
* Final channel plan decision
*
*/
-u8
-hal_com_config_channel_plan(
- IN PADAPTER padapter,
- IN u8 hw_channel_plan,
- IN u8 sw_channel_plan,
- IN u8 def_channel_plan,
- IN BOOLEAN AutoLoadFail
+u8 hal_com_config_channel_plan(
+ IN PADAPTER padapter,
+ IN char *hw_alpha2,
+ IN u8 hw_chplan,
+ IN char *sw_alpha2,
+ IN u8 sw_chplan,
+ IN u8 def_chplan,
+ IN BOOLEAN AutoLoadFail
)
{
PHAL_DATA_TYPE pHalData;
- u8 hwConfig;
- u8 chnlPlan;
-
+ u8 force_hw_chplan = _FALSE;
+ int chplan = -1;
+ const struct country_chplan *country_ent = NULL, *ent;
pHalData = GET_HAL_DATA(padapter);
- pHalData->bDisableSWChannelPlan = _FALSE;
- chnlPlan = def_channel_plan;
-
- if (0xFF == hw_channel_plan)
- AutoLoadFail = _TRUE;
-
- if (_FALSE == AutoLoadFail)
- {
- u8 hw_chnlPlan;
-
- hw_chnlPlan = hw_channel_plan & (~EEPROM_CHANNEL_PLAN_BY_HW_MASK);
- if (rtw_is_channel_plan_valid(hw_chnlPlan))
- {
-#ifndef CONFIG_SW_CHANNEL_PLAN
- if (hw_channel_plan & EEPROM_CHANNEL_PLAN_BY_HW_MASK)
- pHalData->bDisableSWChannelPlan = _TRUE;
-#endif // !CONFIG_SW_CHANNEL_PLAN
- chnlPlan = hw_chnlPlan;
- }
- }
+ /* treat 0xFF as invalid value, bypass hw_chplan & force_hw_chplan parsing */
+ if (hw_chplan == 0xFF)
+ goto chk_hw_country_code;
+
+ if (AutoLoadFail == _TRUE)
+ goto chk_sw_config;
+
+ #ifndef CONFIG_FORCE_SW_CHANNEL_PLAN
+ if (hw_chplan & EEPROM_CHANNEL_PLAN_BY_HW_MASK)
+ force_hw_chplan = _TRUE;
+ #endif
+
+ hw_chplan &= (~EEPROM_CHANNEL_PLAN_BY_HW_MASK);
+
+chk_hw_country_code:
+ if (hw_alpha2 && !IS_ALPHA2_NO_SPECIFIED(hw_alpha2)) {
+ ent = rtw_get_chplan_from_country(hw_alpha2);
+ if (ent) {
+ /* get chplan from hw country code, by pass hw chplan setting */
+ country_ent = ent;
+ chplan = ent->chplan;
+ goto chk_sw_config;
+ } else
+ DBG_871X_LEVEL(_drv_always_, "%s unsupported hw_alpha2:\"%c%c\"\n", __func__, hw_alpha2[0], hw_alpha2[1]);
+ }
+
+ if (rtw_is_channel_plan_valid(hw_chplan))
+ chplan = hw_chplan;
+ else if (force_hw_chplan == _TRUE) {
+ DBG_871X_LEVEL(_drv_always_, "%s unsupported hw_chplan:0x%02X\n", __func__, hw_chplan);
+ /* hw infomaton invalid, refer to sw information */
+ force_hw_chplan = _FALSE;
+ }
+
+chk_sw_config:
+ if (force_hw_chplan == _TRUE)
+ goto done;
+
+ if (sw_alpha2 && !IS_ALPHA2_NO_SPECIFIED(sw_alpha2)) {
+ ent = rtw_get_chplan_from_country(sw_alpha2);
+ if (ent) {
+ /* get chplan from sw country code, by pass sw chplan setting */
+ country_ent = ent;
+ chplan = ent->chplan;
+ goto done;
+ } else
+ DBG_871X_LEVEL(_drv_always_, "%s unsupported sw_alpha2:\"%c%c\"\n", __func__, sw_alpha2[0], sw_alpha2[1]);
+ }
+
+ if (rtw_is_channel_plan_valid(sw_chplan)) {
+ /* cancel hw_alpha2 because chplan is specified by sw_chplan*/
+ country_ent = NULL;
+ chplan = sw_chplan;
+ } else if (sw_chplan != RTW_CHPLAN_MAX)
+ DBG_871X_LEVEL(_drv_always_, "%s unsupported sw_chplan:0x%02X\n", __func__, sw_chplan);
+
+done:
+ if (chplan == -1) {
+ DBG_871X_LEVEL(_drv_always_, "%s use def_chplan:0x%02X\n", __func__, def_chplan);
+ chplan = def_chplan;
+ } else if (country_ent) {
+ DBG_871X_LEVEL(_drv_always_, "%s country code:\"%c%c\" with chplan:0x%02X\n", __func__
+ , country_ent->alpha2[0], country_ent->alpha2[1], country_ent->chplan);
+ } else
+ DBG_871X_LEVEL(_drv_always_, "%s chplan:0x%02X\n", __func__, chplan);
- if ((_FALSE == pHalData->bDisableSWChannelPlan)
- && rtw_is_channel_plan_valid(sw_channel_plan))
- {
- chnlPlan = sw_channel_plan;
- }
+ padapter->mlmepriv.country_ent = country_ent;
+ pHalData->bDisableSWChannelPlan = force_hw_chplan;
- return chnlPlan;
+ return chplan;
}
BOOLEAN
@@ -776,6 +821,158 @@ exit:
return ret;
}
+#define GET_C2H_MAC_HIDDEN_RPT_UUID_X(_data) LE_BITS_TO_1BYTE(((u8 *)(_data)) + 0, 0, 8)
+#define GET_C2H_MAC_HIDDEN_RPT_UUID_Y(_data) LE_BITS_TO_1BYTE(((u8 *)(_data)) + 1, 0, 8)
+#define GET_C2H_MAC_HIDDEN_RPT_UUID_Z(_data) LE_BITS_TO_1BYTE(((u8 *)(_data)) + 2, 0, 5)
+#define GET_C2H_MAC_HIDDEN_RPT_UUID_CRC(_data) LE_BITS_TO_2BYTE(((u8 *)(_data)) + 2, 5, 11)
+#define GET_C2H_MAC_HIDDEN_RPT_HCI_TYPE(_data) LE_BITS_TO_1BYTE(((u8 *)(_data)) + 4, 0, 4)
+#define GET_C2H_MAC_HIDDEN_RPT_PACKAGE_TYPE(_data) LE_BITS_TO_1BYTE(((u8 *)(_data)) + 4, 4, 4)
+#define GET_C2H_MAC_HIDDEN_RPT_WL_FUNC(_data) LE_BITS_TO_1BYTE(((u8 *)(_data)) + 5, 0, 4)
+#define GET_C2H_MAC_HIDDEN_RPT_HW_STYPE(_data) LE_BITS_TO_1BYTE(((u8 *)(_data)) + 5, 4, 4)
+#define GET_C2H_MAC_HIDDEN_RPT_BW(_data) LE_BITS_TO_1BYTE(((u8 *)(_data)) + 6, 0, 3)
+#define GET_C2H_MAC_HIDDEN_RPT_ANT_NUM(_data) LE_BITS_TO_1BYTE(((u8 *)(_data)) + 6, 5, 3)
+#define GET_C2H_MAC_HIDDEN_RPT_80211_PROTOCOL(_data) LE_BITS_TO_1BYTE(((u8 *)(_data)) + 7, 2, 2)
+#define GET_C2H_MAC_HIDDEN_RPT_NIC_ROUTER(_data) LE_BITS_TO_1BYTE(((u8 *)(_data)) + 7, 6, 2)
+
+#ifndef DBG_C2H_MAC_HIDDEN_RPT_HANDLE
+#define DBG_C2H_MAC_HIDDEN_RPT_HANDLE 0
+#endif
+
+int c2h_mac_hidden_rpt_hdl(_adapter *adapter, u8 *data, u8 len)
+{
+ HAL_DATA_TYPE *hal_data = GET_HAL_DATA(adapter);
+ struct hal_spec_t *hal_spec = GET_HAL_SPEC(adapter);
+ int ret = _FAIL;
+
+ u32 uuid;
+ u8 uuid_x;
+ u8 uuid_y;
+ u8 uuid_z;
+ u16 uuid_crc;
+
+ u8 hci_type;
+ u8 package_type;
+ u8 wl_func;
+ u8 hw_stype;
+ u8 bw;
+ u8 ant_num;
+ u8 protocol;
+ u8 nic;
+
+ int i;
+
+ if (len < MAC_HIDDEN_RPT_LEN) {
+ DBG_871X_LEVEL(_drv_warning_, "%s len(%u) < %d\n", __func__, len, MAC_HIDDEN_RPT_LEN);
+ goto exit;
+ }
+
+ uuid_x = GET_C2H_MAC_HIDDEN_RPT_UUID_X(data);
+ uuid_y = GET_C2H_MAC_HIDDEN_RPT_UUID_Y(data);
+ uuid_z = GET_C2H_MAC_HIDDEN_RPT_UUID_Z(data);
+ uuid_crc = GET_C2H_MAC_HIDDEN_RPT_UUID_CRC(data);
+
+ hci_type = GET_C2H_MAC_HIDDEN_RPT_HCI_TYPE(data);
+ package_type = GET_C2H_MAC_HIDDEN_RPT_PACKAGE_TYPE(data);
+
+ wl_func = GET_C2H_MAC_HIDDEN_RPT_WL_FUNC(data);
+ hw_stype = GET_C2H_MAC_HIDDEN_RPT_HW_STYPE(data);
+
+ bw = GET_C2H_MAC_HIDDEN_RPT_BW(data);
+ ant_num = GET_C2H_MAC_HIDDEN_RPT_ANT_NUM(data);
+
+ protocol = GET_C2H_MAC_HIDDEN_RPT_80211_PROTOCOL(data);
+ nic = GET_C2H_MAC_HIDDEN_RPT_NIC_ROUTER(data);
+
+ if (DBG_C2H_MAC_HIDDEN_RPT_HANDLE) {
+ for (i = 0; i < len; i++)
+ DBG_871X("%s: 0x%02X\n", __func__, *(data + i));
+
+ DBG_871X("uuid x:0x%02x y:0x%02x z:0x%x crc:0x%x\n", uuid_x, uuid_y, uuid_z, uuid_crc);
+ DBG_871X("hci_type:0x%x\n", hci_type);
+ DBG_871X("package_type:0x%x\n", package_type);
+ DBG_871X("wl_func:0x%x\n", wl_func);
+ DBG_871X("hw_stype:0x%x\n", hw_stype);
+ DBG_871X("bw:0x%x\n", bw);
+ DBG_871X("ant_num:0x%x\n", ant_num);
+ DBG_871X("protocol:0x%x\n", protocol);
+ DBG_871X("nic:0x%x\n", nic);
+ }
+
+ hal_data->PackageType = package_type;
+ hal_spec->wl_func &= mac_hidden_wl_func_to_hal_wl_func(wl_func);
+ hal_spec->bw_cap &= mac_hidden_max_bw_to_hal_bw_cap(bw);
+ hal_spec->nss_num = rtw_min(hal_spec->nss_num, ant_num);
+ hal_spec->proto_cap &= mac_hidden_proto_to_hal_proto_cap(protocol);
+
+ ret = _SUCCESS;
+
+exit:
+ return ret;
+}
+
+int hal_read_mac_hidden_rpt(_adapter *adapter)
+{
+ int ret = _FAIL;
+ int ret_fwdl;
+ u8 mac_hidden_rpt[MAC_HIDDEN_RPT_LEN] = {0};
+ u32 start = rtw_get_current_time();
+ u32 cnt = 0;
+ u32 timeout_ms = 800;
+ u32 min_cnt = 10;
+ u8 id = C2H_MAC_HIDDEN_RPT + 1;
+ int i;
+
+#if defined(CONFIG_USB_HCI) || defined(CONFIG_PCI_HCI)
+ u8 hci_type = rtw_get_intf_type(adapter);
+
+ if ((hci_type == RTW_USB || hci_type == RTW_PCIE)
+ && !rtw_is_hw_init_completed(adapter))
+ rtw_hal_power_on(adapter);
+#endif
+
+ /* clear data ready */
+ rtw_write8(adapter, REG_C2HEVT_MSG_NORMAL, id);
+
+ /* download FW */
+ ret_fwdl = rtw_hal_fw_dl(adapter, _FALSE);
+ if (ret_fwdl != _SUCCESS)
+ goto mac_hidden_rpt_hdl;
+
+ /* polling for data ready */
+ start = rtw_get_current_time();
+ do {
+ cnt++;
+ id = rtw_read8(adapter, REG_C2HEVT_MSG_NORMAL);
+ if (id == C2H_MAC_HIDDEN_RPT || RTW_CANNOT_IO(adapter))
+ break;
+ rtw_msleep_os(10);
+ } while (rtw_get_passing_time_ms(start) < timeout_ms || cnt < min_cnt);
+
+ if (id == C2H_MAC_HIDDEN_RPT) {
+ /* read data */
+ for (i = 0; i < MAC_HIDDEN_RPT_LEN; i++)
+ mac_hidden_rpt[i] = rtw_read8(adapter, REG_C2HEVT_MSG_NORMAL + 2 + i);
+ }
+
+mac_hidden_rpt_hdl:
+ c2h_mac_hidden_rpt_hdl(adapter, mac_hidden_rpt, MAC_HIDDEN_RPT_LEN);
+
+ if (ret_fwdl == _SUCCESS && id == C2H_MAC_HIDDEN_RPT)
+ ret = _SUCCESS;
+
+exit:
+
+#if defined(CONFIG_USB_HCI) || defined(CONFIG_PCI_HCI)
+ if ((hci_type == RTW_USB || hci_type == RTW_PCIE)
+ && !rtw_is_hw_init_completed(adapter))
+ rtw_hal_power_off(adapter);
+#endif
+
+ DBG_871X("%s %s! (%u, %dms), fwdl:%d, id:0x%02x\n", __func__
+ , (ret == _SUCCESS)?"OK":"Fail", cnt, rtw_get_passing_time_ms(start), ret_fwdl, id);
+
+ return ret;
+}
u8 rtw_hal_networktype_to_raid(_adapter *adapter, struct sta_info *psta)
{
@@ -1023,7 +1220,7 @@ void rtw_sec_write_cam_ent(_adapter *adapter, u8 id, u16 ctrl, u8 *mac, u8 *key)
}
#else
- j = 5;
+ j = 7;
#endif
for (; j >= 0; j--) {
@@ -1034,6 +1231,10 @@ void rtw_sec_write_cam_ent(_adapter *adapter, u8 id, u16 ctrl, u8 *mac, u8 *key)
case 1:
wdata = (mac[2] | (mac[3] << 8) | (mac[4] << 16) | (mac[5] << 24));
break;
+ case 6:
+ case 7:
+ wdata = 0;
+ break;
default:
i = (j - 2) << 2;
wdata = (key[i] | (key[i + 1] << 8) | (key[i + 2] << 16) | (key[i + 3] << 24));
@@ -1263,6 +1464,7 @@ const char * const _h2c_msr_role_str[] = {
"GC",
"GO",
"TDLS",
+ "ADHOC",
"INVALID",
};
@@ -1377,16 +1579,16 @@ void rtw_hal_set_FwRsvdPage_cmd(PADAPTER padapter, PRSVDPAGE_LOC rsvdpageloc)
}
#ifdef CONFIG_GPIO_WAKEUP
-/*
- * Switch GPIO_13, GPIO_14 to wlan control, or pull GPIO_13,14 MUST fail.
- * It happended at 8723B/8192E/8821A. New IC will check multi function GPIO,
- * and implement HAL function.
- */
-static void rtw_hal_switch_gpio_wl_ctrl(_adapter* padapter, u8 index, u8 enable)
+void rtw_hal_switch_gpio_wl_ctrl(_adapter *padapter, u8 index, u8 enable)
{
- if (index !=13 && index != 14) return;
-
- rtw_hal_set_hwreg(padapter, HW_SET_GPIO_WL_CTRL, (u8 *)(&enable));
+ /*
+ * Switch GPIO_13, GPIO_14 to wlan control, or pull GPIO_13,14 MUST fail.
+ * It happended at 8723B/8192E/8821A. New IC will check multi function GPIO,
+ * and implement HAL function.
+ * TODO: GPIO_8 multi function?
+ */
+ if (index == 13 || index == 14)
+ rtw_hal_set_hwreg(padapter, HW_SET_GPIO_WL_CTRL, (u8 *)(&enable));
}
void rtw_hal_set_output_gpio(_adapter *padapter, u8 index, u8 outputval)
@@ -1742,9 +1944,11 @@ static void rtw_hal_fw_sync_cam_id(_adapter *adapter)
DBG_871X("%s: cam_id: %d key_id(%d) is not GK\n",
__func__, cam_id, index);
} else {
- rtw_sec_read_cam_ent(adapter, cam_id, NULL, NULL, get_key);
- algorithm = psecuritypriv->dot11PrivacyAlgrthm;
- ctrl = BIT(15) | BIT6 |(algorithm << 2) | index;
+ //rtw_sec_read_cam_ent(adapter, cam_id, NULL, NULL, get_key);
+ rtw_sec_read_cam_ent(adapter, cam_id, (u8 *)&ctrl, NULL, get_key);
+ //algorithm = psecuritypriv->dot11PrivacyAlgrthm;
+ //ctrl = BIT(15) | BIT6 |(algorithm << 2) | index;
+ ctrl = BIT(15) | BIT6 | index;
write_cam(adapter, index, ctrl, addr, get_key);
ctrl = 0;
write_cam(adapter, cam_id, ctrl, null_addr, get_key);
@@ -1786,10 +1990,12 @@ static void rtw_hal_update_gtk_offload_info(_adapter *adapter)
do{
/* chech if GK */
if (rtw_sec_read_cam_is_gk(adapter, default_cam_id) == _TRUE) {
- rtw_sec_read_cam_ent(adapter, default_cam_id, NULL, NULL, get_key);
- algorithm = psecuritypriv->dot11PrivacyAlgrthm;
+ //rtw_sec_read_cam_ent(adapter, default_cam_id, NULL, NULL, get_key);
+ rtw_sec_read_cam_ent(adapter, default_cam_id, (u8 *)&ctrl, NULL, get_key);
+ //algorithm = psecuritypriv->dot11PrivacyAlgrthm;
/* in default cam entry, cam id = key id */
- ctrl = BIT(15) | BIT6 | (algorithm << 2) | default_cam_id;
+ //ctrl = BIT(15) | BIT6 | (algorithm << 2) | default_cam_id;
+ ctrl |= BIT6;
write_cam(adapter, cam_id, ctrl, addr, get_key);
cam_id++;
ctrl = 0;
@@ -1996,9 +2202,15 @@ static u8 rtw_hal_set_remote_wake_ctrl_cmd(_adapter *adapter, u8 enable)
}
#endif //CONFIG_GTK_OL
+#ifdef CONFIG_PLATFORM_NOVATEK_NT72668
+ SET_H2CCMD_REMOTE_WAKE_CTRL_FW_UNICAST_EN(
+ u1H2CRemoteWakeCtrlParm,
+ 0);
+#else
SET_H2CCMD_REMOTE_WAKE_CTRL_FW_UNICAST_EN(
u1H2CRemoteWakeCtrlParm,
!ppwrpriv->wowlan_pattern);
+#endif
/*
* filter NetBios name service pkt to avoid being waked-up
@@ -2297,6 +2509,7 @@ static void rtw_hal_ap_wow_enable(_adapter *padapter)
struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
struct hal_ops *pHalFunc = &padapter->HalFunc;
struct sta_info *psta = NULL;
+ PHAL_DATA_TYPE pHalData = GET_HAL_DATA(padapter);
#ifdef DBG_CHECK_FW_PS_STATE
struct dvobj_priv *psdpriv = padapter->dvobj;
struct debug_priv *pdbgpriv = &psdpriv->drv_dbg;
@@ -2313,10 +2526,7 @@ static void rtw_hal_ap_wow_enable(_adapter *padapter)
#endif /*DBG_CHECK_FW_PS_STATE*/
/* 1. Download WOWLAN FW*/
- if (pHalFunc->hal_set_wowlan_fw != NULL)
- pHalFunc->hal_set_wowlan_fw(padapter, _TRUE);
- else
- DBG_871X("hal_set_wowlan_fw is null\n");
+ rtw_hal_fw_dl(padapter, _TRUE);
media_status_rpt = RT_MEDIA_CONNECT;
rtw_hal_set_hwreg(padapter, HW_VAR_H2C_FW_JOINBSSRPT,
@@ -2358,7 +2568,8 @@ static void rtw_hal_ap_wow_enable(_adapter *padapter)
#endif /*CONFIG_CONCURRENT_MODE*/
/* Invoid SE0 reset signal during suspending*/
rtw_write8(padapter, REG_RSV_CTRL, 0x20);
- rtw_write8(padapter, REG_RSV_CTRL, 0x60);
+ if (IS_8188F(pHalData->VersionID) == FALSE)
+ rtw_write8(padapter, REG_RSV_CTRL, 0x60);
#endif /*CONFIG_USB_HCI*/
}
@@ -2395,15 +2606,12 @@ static void rtw_hal_ap_wow_disable(_adapter *padapter)
rtw_hal_force_enable_rxdma(padapter);
- if (pHalFunc->hal_set_wowlan_fw != NULL)
- pHalFunc->hal_set_wowlan_fw(padapter, _FALSE);
- else
- DBG_871X("hal_set_wowlan_fw is null\n");
+ rtw_hal_fw_dl(padapter, _FALSE);
+
#ifdef CONFIG_GPIO_WAKEUP
val8 = (pwrctl->is_high_active == 0) ? 1 : 0;
DBG_871X_LEVEL(_drv_always_, "Set Wake GPIO to default(%d).\n", val8);
rtw_hal_set_output_gpio(padapter, WAKEUP_GPIO_IDX, val8);
- rtw_hal_switch_gpio_wl_ctrl(padapter, WAKEUP_GPIO_IDX, _FALSE);
#endif
media_status_rpt = RT_MEDIA_CONNECT;
@@ -5189,6 +5397,7 @@ static void rtw_hal_wow_enable(_adapter *adapter)
struct mlme_priv *pmlmepriv = &adapter->mlmepriv;
struct hal_ops *pHalFunc = &adapter->HalFunc;
struct sta_info *psta = NULL;
+ PHAL_DATA_TYPE pHalData = GET_HAL_DATA(adapter);
int res;
u16 media_status_rpt;
@@ -5217,7 +5426,7 @@ static void rtw_hal_wow_enable(_adapter *adapter)
if (pwrctl->wowlan_pattern)
rtw_hal_dl_pattern(adapter, _FALSE);
- rtw_hal_set_wowlan_fw(adapter, _TRUE);
+ rtw_hal_fw_dl(adapter, _TRUE);
media_status_rpt = RT_MEDIA_CONNECT;
rtw_hal_set_hwreg(adapter, HW_VAR_H2C_FW_JOINBSSRPT,
(u8 *)&media_status_rpt);
@@ -5264,7 +5473,8 @@ static void rtw_hal_wow_enable(_adapter *adapter)
#endif /*CONFIG_CONCURRENT_MODE*/
/* Invoid SE0 reset signal during suspending*/
rtw_write8(adapter, REG_RSV_CTRL, 0x20);
- rtw_write8(adapter, REG_RSV_CTRL, 0x60);
+ if (IS_8188F(pHalData->VersionID) == FALSE)
+ rtw_write8(adapter, REG_RSV_CTRL, 0x60);
#endif /*CONFIG_USB_HCI*/
rtw_hal_gate_bb(adapter, _FALSE);
@@ -5335,14 +5545,14 @@ static void rtw_hal_wow_disable(_adapter *adapter)
rtw_hal_update_gtk_offload_info(adapter);
#endif /*CONFIG_GTK_OL*/
- rtw_hal_set_wowlan_fw(adapter, _FALSE);
+ rtw_hal_fw_dl(adapter, _FALSE);
#ifdef CONFIG_GPIO_WAKEUP
val8 = (pwrctl->is_high_active == 0) ? 1 : 0;
DBG_871X_LEVEL(_drv_always_, "Set Wake GPIO to default(%d).\n", val8);
rtw_hal_set_output_gpio(adapter, WAKEUP_GPIO_IDX, val8);
- rtw_hal_switch_gpio_wl_ctrl(adapter, WAKEUP_GPIO_IDX, _FALSE);
#endif
+
if ((pwrctl->wowlan_wake_reason != FWDecisionDisconnect) &&
(pwrctl->wowlan_wake_reason != Rx_Pairwisekey) &&
(pwrctl->wowlan_wake_reason != Rx_DisAssoc) &&
@@ -5724,6 +5934,34 @@ error:
rtw_free_xmitframe(pxmitpriv, pcmdframe);
}
+#ifdef CONFIG_TDLS
+#ifdef CONFIG_TDLS_CH_SW
+s32 rtw_hal_ch_sw_oper_offload(_adapter *padapter, u8 channel, u8 channel_offset, u16 bwmode)
+{
+ PHAL_DATA_TYPE pHalData = GET_HAL_DATA(padapter);
+ u8 ch_sw_h2c_buf[4] = {0x00, 0x00, 0x00, 0x00};
+
+
+ SET_H2CCMD_CH_SW_OPER_OFFLOAD_CH_NUM(ch_sw_h2c_buf, channel);
+ SET_H2CCMD_CH_SW_OPER_OFFLOAD_BW_MODE(ch_sw_h2c_buf, bwmode);
+ switch (bwmode) {
+ case CHANNEL_WIDTH_40:
+ SET_H2CCMD_CH_SW_OPER_OFFLOAD_BW_40M_SC(ch_sw_h2c_buf, channel_offset);
+ break;
+ case CHANNEL_WIDTH_80:
+ SET_H2CCMD_CH_SW_OPER_OFFLOAD_BW_80M_SC(ch_sw_h2c_buf, channel_offset);
+ break;
+ case CHANNEL_WIDTH_20:
+ default:
+ break;
+ }
+ SET_H2CCMD_CH_SW_OPER_OFFLOAD_RFE_TYPE(ch_sw_h2c_buf, pHalData->RFEType);
+
+ return rtw_hal_fill_h2c_cmd(padapter, H2C_CHNL_SWITCH_OPER_OFFLOAD, sizeof(ch_sw_h2c_buf), ch_sw_h2c_buf);
+}
+#endif
+#endif
+
void SetHwReg(_adapter *adapter, u8 variable, u8 *val)
{
HAL_DATA_TYPE *hal_data = GET_HAL_DATA(adapter);
@@ -5866,6 +6104,16 @@ _func_enter_;
case HW_VAR_RF_TYPE:
*((u8*)val) = hal_data->rf_type;
break;
+ case HW_VAR_DO_IQK:
+ *val = hal_data->bNeedIQK;
+ break;
+ case HW_VAR_CH_SW_NEED_TO_TAKE_CARE_IQK_INFO:
+ if (hal_is_band_support(adapter, BAND_ON_5G))
+ *val = _TRUE;
+ else
+ *val = _FALSE;
+
+ break;
default:
if (0)
DBG_871X_LEVEL(_drv_always_, FUNC_ADPT_FMT" variable(%d) not defined!\n",
@@ -6097,20 +6345,19 @@ void SetHalODMVar(
{
PFALSE_ALARM_STATISTICS FalseAlmCnt = (PFALSE_ALARM_STATISTICS)PhyDM_Get_Structure(podmpriv , PHYDM_FALSEALMCNT);
pDIG_T pDM_DigTable = &podmpriv->DM_DigTable;
+ void *sel;
- DBG_871X("============ Rx Info dump ===================\n");
- DBG_871X("bLinked = %d, RSSI_Min = %d(%%), CurrentIGI = 0x%x\n",
- podmpriv->bLinked, podmpriv->RSSI_Min, pDM_DigTable->CurIGValue);
- if (FalseAlmCnt)
- DBG_871X("Cnt_Cck_fail = %d, Cnt_Ofdm_fail = %d, Total False Alarm = %d\n",
- FalseAlmCnt->Cnt_Cck_fail, FalseAlmCnt->Cnt_Ofdm_fail, FalseAlmCnt->Cnt_all);
+ sel = pValue1;
- if (podmpriv->bLinked) {
- DBG_871X("RxRate = %s, RSSI_A = %d(%%), RSSI_B = %d(%%)\n",
- HDATA_RATE(podmpriv->RxRate), podmpriv->RSSI_A, podmpriv->RSSI_B);
+ DBG_871X_SEL(sel , "============ Rx Info dump ===================\n");
+ DBG_871X_SEL(sel , "bLinked = %d, RSSI_Min = %d(%%), CurrentIGI = 0x%x\n", podmpriv->bLinked, podmpriv->RSSI_Min, pDM_DigTable->CurIGValue);
+ DBG_871X_SEL(sel , "Cnt_Cck_fail = %d, Cnt_Ofdm_fail = %d, Total False Alarm = %d\n", FalseAlmCnt->Cnt_Cck_fail, FalseAlmCnt->Cnt_Ofdm_fail, FalseAlmCnt->Cnt_all);
+ if (podmpriv->bLinked) {
+ DBG_871X_SEL(sel , "RxRate = %s", HDATA_RATE(podmpriv->RxRate));
+ DBG_871X_SEL(sel , " RSSI_A = %d(%%), RSSI_B = %d(%%)\n", podmpriv->RSSI_A, podmpriv->RSSI_B);
#ifdef DBG_RX_SIGNAL_DISPLAY_RAW_DATA
- rtw_dump_raw_rssi_info(Adapter);
+ rtw_dump_raw_rssi_info(Adapter, sel);
#endif
}
}
@@ -6147,6 +6394,18 @@ void SetHalODMVar(
}
break;
#endif
+#ifdef CONFIG_ANTENNA_DIVERSITY
+ case HAL_ODM_ANTDIV_SELECT:
+ {
+ u8 antenna = (*(u8 *)pValue1);
+
+ /*switch antenna*/
+ ODM_UpdateRxIdleAnt(&pHalData->odmpriv, antenna);
+ /*DBG_871X("==> HAL_ODM_ANTDIV_SELECT, Ant_(%s)\n", (antenna == MAIN_ANT) ? "MAIN_ANT" : "AUX_ANT");*/
+
+ }
+ break;
+#endif
default:
break;
@@ -6196,7 +6455,20 @@ void GetHalODMVar(
}
break;
#endif
-
+#ifdef CONFIG_ANTENNA_DIVERSITY
+ case HAL_ODM_ANTDIV_SELECT:
+ {
+ pFAT_T pDM_FatTable = &podmpriv->DM_FatTable;
+ *((u8 *)pValue1) = pDM_FatTable->RxIdleAnt;
+ }
+ break;
+#endif
+ case HAL_ODM_INITIAL_GAIN:
+ {
+ pDIG_T pDM_DigTable = &podmpriv->DM_DigTable;
+ *((u8 *)pValue1) = pDM_DigTable->CurIGValue;
+ }
+ break;
default:
break;
}
@@ -6258,30 +6530,6 @@ eqNByte(
//
// Description:
-// Return TRUE if chTmp is represent for hex digit and
-// FALSE otherwise.
-//
-//
-BOOLEAN
-IsHexDigit(
- IN char chTmp
-)
-{
- if( (chTmp >= '0' && chTmp <= '9') ||
- (chTmp >= 'a' && chTmp <= 'f') ||
- (chTmp >= 'A' && chTmp <= 'F') )
- {
- return _TRUE;
- }
- else
- {
- return _FALSE;
- }
-}
-
-
-//
-// Description:
// Translate a character to hex digit.
//
u32
@@ -6591,14 +6839,13 @@ void rtw_get_raw_rssi_info(void *sel, _adapter *padapter)
}
}
-void rtw_dump_raw_rssi_info(_adapter *padapter)
+void rtw_dump_raw_rssi_info(_adapter *padapter, void *sel)
{
u8 isCCKrate,rf_path;
PHAL_DATA_TYPE pHalData = GET_HAL_DATA(padapter);
struct rx_raw_rssi *psample_pkt_rssi = &padapter->recvpriv.raw_rssi_info;
- DBG_871X("============ RAW Rx Info dump ===================\n");
- DBG_871X("RxRate = %s, PWDBALL = %d(%%), rx_pwr_all = %d(dBm)\n",
- HDATA_RATE(psample_pkt_rssi->data_rate), psample_pkt_rssi->pwdball, psample_pkt_rssi->pwr_all);
+ DBG_871X_SEL(sel, "============ RAW Rx Info dump ===================\n");
+ DBG_871X_SEL(sel, "RxRate = %s, PWDBALL = %d(%%), rx_pwr_all = %d(dBm)\n", HDATA_RATE(psample_pkt_rssi->data_rate), psample_pkt_rssi->pwdball, psample_pkt_rssi->pwr_all);
isCCKrate = (psample_pkt_rssi->data_rate <= DESC_RATE11M)?TRUE :FALSE;
@@ -6607,15 +6854,14 @@ void rtw_dump_raw_rssi_info(_adapter *padapter)
for(rf_path = 0;rf_path<pHalData->NumTotalRFPath;rf_path++)
{
- DBG_871X("RF_PATH_%d=>signal_strength:%d(%%),signal_quality:%d(%%)"
+ DBG_871X_SEL(sel , "RF_PATH_%d=>signal_strength:%d(%%),signal_quality:%d(%%)"
, rf_path, psample_pkt_rssi->mimo_signal_strength[rf_path], psample_pkt_rssi->mimo_signal_quality[rf_path]);
- if(!isCCKrate){
- printk(",rx_ofdm_pwr:%d(dBm),rx_ofdm_snr:%d(dB)\n",
- psample_pkt_rssi->ofdm_pwr[rf_path],psample_pkt_rssi->ofdm_snr[rf_path]);
- }else{
- printk("\n");
- }
+ if (!isCCKrate)
+ DBG_871X_SEL(sel , ",rx_ofdm_pwr:%d(dBm),rx_ofdm_snr:%d(dB)\n", psample_pkt_rssi->ofdm_pwr[rf_path], psample_pkt_rssi->ofdm_snr[rf_path]);
+ else
+ DBG_871X_SEL(sel , "\n");
+
}
}
@@ -6874,7 +7120,7 @@ exit:
return ret;
}
-#ifdef CONFIG_RF_GAIN_OFFSET
+#ifdef CONFIG_RF_POWER_TRIM
u32 Array_kfreemap[] = {
0x08,0xe,
0x06,0xc,
@@ -6900,13 +7146,13 @@ void rtw_bb_rf_gain_offset(_adapter *padapter)
pu4Byte Array = Array_kfreemap;
u4Byte v1 = 0, v2 = 0, GainValue = 0, target = 0;
- if (registry_par->RegRfKFreeEnable == 2) {
+ if (registry_par->RegPwrTrimEnable == 2) {
DBG_871X("Registry kfree default force disable.\n");
return;
}
#if defined(CONFIG_RTL8723B)
- if (value & BIT4 || (registry_par->RegRfKFreeEnable == 1)) {
+ if (value & BIT4 || (registry_par->RegPwrTrimEnable == 1)) {
DBG_871X("Offset RF Gain.\n");
DBG_871X("Offset RF Gain. pHalData->EEPROMRFGainVal=0x%x\n",pHalData->EEPROMRFGainVal);
@@ -6949,7 +7195,7 @@ void rtw_bb_rf_gain_offset(_adapter *padapter)
}
#elif defined(CONFIG_RTL8188E)
- if (value & BIT4 || (registry_par->RegRfKFreeEnable == 1)) {
+ if (value & BIT4 || (registry_par->RegPwrTrimEnable == 1)) {
DBG_871X("8188ES Offset RF Gain.\n");
DBG_871X("8188ES Offset RF Gain. EEPROMRFGainVal=0x%x\n",
pHalData->EEPROMRFGainVal);
@@ -6981,11 +7227,11 @@ void rtw_bb_rf_gain_offset(_adapter *padapter)
#endif
}
-#endif //CONFIG_RF_GAIN_OFFSET
+#endif /*CONFIG_RF_POWER_TRIM */
bool kfree_data_is_bb_gain_empty(struct kfree_data_t *data)
{
-#ifdef CONFIG_RF_GAIN_OFFSET
+#ifdef CONFIG_RF_POWER_TRIM
int i, j;
for (i = 0; i < BB_GAIN_NUM; i++)
@@ -6996,8 +7242,8 @@ bool kfree_data_is_bb_gain_empty(struct kfree_data_t *data)
return 1;
}
-#ifdef CONFIG_USB_RX_AGGREGATION
-void rtw_set_usb_agg_by_mode(_adapter *padapter, u8 cur_wireless_mode)
+#ifdef CONFIG_USB_RX_AGGREGATION
+void rtw_set_usb_agg_by_mode_normal(_adapter *padapter, u8 cur_wireless_mode)
{
HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);
if(cur_wireless_mode < WIRELESS_11_24N
@@ -7071,6 +7317,43 @@ void rtw_set_usb_agg_by_mode(_adapter *padapter, u8 cur_wireless_mode)
/* DBG_871X("%s: Unknow wireless mode(0x%x)\n",__func__,padapter->mlmeextpriv.cur_wireless_mode); */
}
}
+
+void rtw_set_usb_agg_by_mode_customer(_adapter *padapter, u8 cur_wireless_mode, u8 UsbDmaSize, u8 Legacy_UsbDmaSize)
+{
+ HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);
+
+ if (cur_wireless_mode < WIRELESS_11_24N
+ && cur_wireless_mode > 0) { /* ABG mode */
+ if (Legacy_UsbDmaSize != pHalData->RegAcUsbDmaSize
+ || 0x10 != pHalData->RegAcUsbDmaTime) {
+ pHalData->RegAcUsbDmaSize = Legacy_UsbDmaSize;
+ pHalData->RegAcUsbDmaTime = 0x10;
+ rtw_write16(padapter, REG_RXDMA_AGG_PG_TH,
+ pHalData->RegAcUsbDmaSize | (pHalData->RegAcUsbDmaTime<<8));
+ }
+ } else if (cur_wireless_mode >= WIRELESS_11_24N
+ && cur_wireless_mode <= WIRELESS_MODE_MAX) { /* N AC mode */
+ if (UsbDmaSize != pHalData->RegAcUsbDmaSize
+ || 0x20 != pHalData->RegAcUsbDmaTime) {
+ pHalData->RegAcUsbDmaSize = UsbDmaSize;
+ pHalData->RegAcUsbDmaTime = 0x20;
+ rtw_write16(padapter, REG_RXDMA_AGG_PG_TH,
+ pHalData->RegAcUsbDmaSize | (pHalData->RegAcUsbDmaTime<<8));
+ }
+ } else {
+ /* DBG_871X("%s: Unknown wireless mode(0x%x)\n",__func__,padapter->mlmeextpriv.cur_wireless_mode); */
+ }
+}
+
+void rtw_set_usb_agg_by_mode(_adapter *padapter, u8 cur_wireless_mode)
+{
+#ifdef CONFIG_PLATFORM_NOVATEK_NT72668
+ rtw_set_usb_agg_by_mode_customer(padapter, cur_wireless_mode, 0x3, 0x3);
+ return;
+#endif /* CONFIG_PLATFORM_NOVATEK_NT72668 */
+
+ rtw_set_usb_agg_by_mode_normal(padapter, cur_wireless_mode);
+}
#endif //CONFIG_USB_RX_AGGREGATION
//To avoid RX affect TX throughput
@@ -7120,6 +7403,10 @@ void dm_DynamicUsbTxAgg(_adapter *padapter, u8 from_timer)
#else //!CONFIG_CONCURRENT_MODE
rtw_set_usb_agg_by_mode(padapter,cur_wireless_mode);
#endif //CONFIG_CONCURRENT_MODE
+#ifdef CONFIG_PLATFORM_NOVATEK_NT72668
+ } else {
+ rtw_set_usb_agg_by_mode(padapter, cur_wireless_mode);
+#endif /* CONFIG_PLATFORM_NOVATEK_NT72668 */
}
#endif
}
@@ -7373,6 +7660,53 @@ int rtw_hal_disable_gpio_interrupt(_adapter* adapter, int gpio_num)
}
#endif
+s8 rtw_hal_ch_sw_iqk_info_search(_adapter* padapter, u8 central_chnl, u8 bw_mode) {
+ HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);
+ u8 i;
+
+ for (i = 0; i < MAX_IQK_INFO_BACKUP_CHNL_NUM; i++) {
+ if ((pHalData->iqk_reg_backup[i].central_chnl != 0)) {
+ if ((pHalData->iqk_reg_backup[i].central_chnl == central_chnl)
+ && (pHalData->iqk_reg_backup[i].bw_mode == bw_mode)) {
+ return i;
+ }
+ }
+ }
+
+ return -1;
+}
+
+void rtw_hal_ch_sw_iqk_info_backup(_adapter* padapter) {
+ HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);
+ s8 res;
+ u8 i;
+
+ /* If it's an existed record, overwrite it */
+ res = rtw_hal_ch_sw_iqk_info_search(padapter, pHalData->CurrentChannel, pHalData->CurrentChannelBW);
+ if ((res >= 0) && (res < MAX_IQK_INFO_BACKUP_CHNL_NUM)) {
+ rtw_hal_set_hwreg(padapter, HW_VAR_CH_SW_IQK_INFO_BACKUP, (u8*)&(pHalData->iqk_reg_backup[res]));
+ return;
+ }
+
+ /* Search for the empty record to use */
+ for (i = 0; i < MAX_IQK_INFO_BACKUP_CHNL_NUM; i++) {
+ if (pHalData->iqk_reg_backup[i].central_chnl == 0) {
+ rtw_hal_set_hwreg(padapter, HW_VAR_CH_SW_IQK_INFO_BACKUP, (u8*)&(pHalData->iqk_reg_backup[i]));
+ return;
+ }
+ }
+
+ /* Else, overwrite the oldest record */
+ for (i = 1; i < MAX_IQK_INFO_BACKUP_CHNL_NUM; i++) {
+ _rtw_memcpy(&(pHalData->iqk_reg_backup[i - 1]), &(pHalData->iqk_reg_backup[i]), sizeof(struct hal_iqk_reg_backup));
+ }
+ rtw_hal_set_hwreg(padapter, HW_VAR_CH_SW_IQK_INFO_BACKUP, (u8*)&(pHalData->iqk_reg_backup[MAX_IQK_INFO_BACKUP_CHNL_NUM - 1]));
+}
+
+void rtw_hal_ch_sw_iqk_info_restore(_adapter* padapter, u8 ch_sw_use_case) {
+ rtw_hal_set_hwreg(padapter, HW_VAR_CH_SW_IQK_INFO_RESTORE, &ch_sw_use_case);
+}
+
void rtw_dump_mac_rx_counters(_adapter* padapter,struct dbg_rx_counter *rx_counter)
{
u32 mac_cck_ok=0, mac_ofdm_ok=0, mac_ht_ok=0, mac_vht_ok=0;
@@ -7483,13 +7817,19 @@ void rtw_dump_phy_rx_counters(_adapter* padapter,struct dbg_rx_counter *rx_count
}
-void rtw_reset_phy_rx_counters(_adapter* padapter)
+void rtw_reset_phy_trx_ok_counters(_adapter *padapter)
+{
+ if (IS_HARDWARE_TYPE_JAGUAR(padapter) || IS_HARDWARE_TYPE_JAGUAR2(padapter)) {
+ PHY_SetBBReg(padapter, 0xB58, BIT0, 0x1);
+ PHY_SetBBReg(padapter, 0xB58, BIT0, 0x0);
+ }
+}
+void rtw_reset_phy_rx_counters(_adapter *padapter)
{
//reset phy counter
if (IS_HARDWARE_TYPE_JAGUAR(padapter) || IS_HARDWARE_TYPE_JAGUAR2(padapter))
{
- PHY_SetBBReg(padapter, 0xB58, BIT0, 0x1);
- PHY_SetBBReg(padapter, 0xB58, BIT0, 0x0);
+ rtw_reset_phy_trx_ok_counters(padapter);
PHY_SetBBReg(padapter, 0x9A4, BIT17, 0x1);//reset OFDA FA counter
PHY_SetBBReg(padapter, 0x9A4, BIT17, 0x0);
@@ -7535,12 +7875,11 @@ void rtw_dump_phy_rxcnts_preprocess(_adapter* padapter,u8 rx_cnt_mode)
{
u8 initialgain;
HAL_DATA_TYPE *hal_data = GET_HAL_DATA(padapter);
- DM_ODM_T *odm = &(hal_data->odmpriv);
- DIG_T *pDigTable = &odm->DM_DigTable;
if((!(padapter->dump_rx_cnt_mode& DUMP_PHY_RX_COUNTER)) && (rx_cnt_mode & DUMP_PHY_RX_COUNTER))
{
- initialgain = pDigTable->CurIGValue;
+ /*initialgain = pDigTable->CurIGValue;*/
+ rtw_hal_get_odm_var(padapter, HAL_ODM_INITIAL_GAIN, &initialgain, NULL);
DBG_871X("%s CurIGValue:0x%02x\n",__FUNCTION__,initialgain);
rtw_hal_set_odm_var(padapter, HAL_ODM_INITIAL_GAIN, &initialgain, _FALSE);
/*disable dynamic functions, such as high power, DIG*/
@@ -7615,6 +7954,23 @@ void rtw_get_noise(_adapter* padapter)
}
+u8 rtw_get_current_tx_rate(_adapter *padapter, u8 macid)
+{
+ HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);
+ PDM_ODM_T pDM_Odm = &pHalData->odmpriv;
+ pRA_T pRA_Table = &pDM_Odm->DM_RA_Table;
+ u8 rate_id = 0;
+
+#if (RATE_ADAPTIVE_SUPPORT == 1)
+ rate_id = ODM_RA_GetDecisionRate_8188E(pDM_Odm, macid);
+#else
+ rate_id = (pRA_Table->link_tx_rate[macid]) & 0x7f;
+#endif
+
+ return rate_id;
+
+}
+
#ifdef CONFIG_FW_C2H_DEBUG
/* C2H RX package original is 128.
@@ -7844,6 +8200,13 @@ static const char * const _bw_cap_str[] = {
/* BIT6 */"80_80M",
};
+static const char * const _proto_cap_str[] = {
+ /* BIT0 */"b",
+ /* BIT1 */"g",
+ /* BIT2 */"n",
+ /* BIT3 */"ac",
+};
+
static const char * const _wl_func_str[] = {
/* BIT0 */"P2P",
/* BIT1 */"MIRACAST",
@@ -7875,6 +8238,13 @@ void dump_hal_spec(void *sel, _adapter *adapter)
}
DBG_871X_SEL(sel, "\n");
+ DBG_871X_SEL_NL(sel, "proto_cap:");
+ for (i = 0; i < PROTO_CAP_BIT_NUM; i++) {
+ if (((hal_spec->proto_cap) >> i) & BIT0 && _proto_cap_str[i])
+ DBG_871X_SEL(sel, "%s ", _proto_cap_str[i]);
+ }
+ DBG_871X_SEL(sel, "\n");
+
DBG_871X_SEL_NL(sel, "wl_func:");
for (i = 0; i < WL_FUNC_BIT_NUM; i++) {
if (((hal_spec->wl_func) >> i) & BIT0 && _wl_func_str[i])
@@ -7893,6 +8263,11 @@ inline bool hal_chk_bw_cap(_adapter *adapter, u8 cap)
return (GET_HAL_SPEC(adapter)->bw_cap & cap);
}
+inline bool hal_chk_proto_cap(_adapter *adapter, u8 cap)
+{
+ return (GET_HAL_SPEC(adapter)->proto_cap & cap);
+}
+
inline bool hal_chk_wl_func(_adapter *adapter, u8 func)
{
return (GET_HAL_SPEC(adapter)->wl_func & func);
@@ -7908,6 +8283,37 @@ inline bool hal_is_bw_support(_adapter *adapter, u8 bw)
return (GET_HAL_SPEC(adapter)->bw_cap & ch_width_to_bw_cap(bw));
}
+inline bool hal_is_wireless_mode_support(_adapter *adapter, u8 mode)
+{
+ u8 proto_cap = GET_HAL_SPEC(adapter)->proto_cap;
+
+ if (mode == WIRELESS_11B)
+ if ((proto_cap & PROTO_CAP_11B) && hal_chk_band_cap(adapter, BAND_CAP_2G))
+ return 1;
+
+ if (mode == WIRELESS_11G)
+ if ((proto_cap & PROTO_CAP_11G) && hal_chk_band_cap(adapter, BAND_CAP_2G))
+ return 1;
+
+ if (mode == WIRELESS_11A)
+ if ((proto_cap & PROTO_CAP_11G) && hal_chk_band_cap(adapter, BAND_CAP_5G))
+ return 1;
+
+ if (mode == WIRELESS_11_24N)
+ if ((proto_cap & PROTO_CAP_11N) && hal_chk_band_cap(adapter, BAND_CAP_2G))
+ return 1;
+
+ if (mode == WIRELESS_11_5N)
+ if ((proto_cap & PROTO_CAP_11N) && hal_chk_band_cap(adapter, BAND_CAP_5G))
+ return 1;
+
+ if (mode == WIRELESS_11AC)
+ if ((proto_cap & PROTO_CAP_11AC) && hal_chk_band_cap(adapter, BAND_CAP_5G))
+ return 1;
+
+ return 0;
+}
+
/*
* hal_largest_bw - starting from in_bw, get largest bw supported by HAL
* @adapter:
@@ -7928,3 +8334,40 @@ u8 hal_largest_bw(_adapter *adapter, u8 in_bw)
return in_bw;
}
+#ifdef CONFIG_ANTENNA_DIVERSITY
+u8 rtw_hal_antdiv_before_linked(_adapter *padapter)
+{
+ HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);
+ u8 cur_ant, change_ant;
+
+ if (!pHalData->AntDivCfg)
+ return _FALSE;
+
+ if (pHalData->sw_antdiv_bl_state == 0) {
+ pHalData->sw_antdiv_bl_state = 1;
+
+ rtw_hal_get_odm_var(padapter, HAL_ODM_ANTDIV_SELECT, &cur_ant, NULL);
+ change_ant = (cur_ant == MAIN_ANT) ? AUX_ANT : MAIN_ANT;
+
+ return rtw_antenna_select_cmd(padapter, change_ant, _FALSE);
+ }
+
+ pHalData->sw_antdiv_bl_state = 0;
+ return _FALSE;
+}
+
+void rtw_hal_antdiv_rssi_compared(_adapter *padapter, WLAN_BSSID_EX *dst, WLAN_BSSID_EX *src)
+{
+ HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);
+
+ if (pHalData->AntDivCfg) {
+ /*DBG_871X("update_network=> org-RSSI(%d), new-RSSI(%d)\n", dst->Rssi, src->Rssi);*/
+ /*select optimum_antenna for before linked =>For antenna diversity*/
+ if (dst->Rssi >= src->Rssi) {/*keep org parameter*/
+ src->Rssi = dst->Rssi;
+ src->PhyInfo.Optimum_antenna = dst->PhyInfo.Optimum_antenna;
+ }
+ }
+}
+#endif
+
diff --git a/rtl8188FU/hal/hal_com_c2h.h b/rtl8188FU/hal/hal_com_c2h.h
index 78a1ace..b8138b8 100755
--- a/rtl8188FU/hal/hal_com_c2h.h
+++ b/rtl8188FU/hal/hal_com_c2h.h
@@ -29,10 +29,12 @@ typedef enum _C2H_EVT {
C2H_BT_MP_INFO = 0x0B,
C2H_RA_RPT = 0x0C,
C2H_RA_PARA_RPT = 0x0E,
- C2H_FW_SWCHNL = 0x10,
+ C2H_FW_CHNL_SWITCH_COMPLETE = 0x10,
C2H_IQK_FINISH = 0x11,
C2H_MAILBOX_STATUS = 0x15,
C2H_P2P_RPORT = 0x16,
+ C2H_MAC_HIDDEN_RPT = 0x19,
+ C2H_BCN_EARLY_RPT = 0x1E,
C2H_BT_SCOREBOARD_STATUS = 0x20,
C2H_EXTEND = 0xff,
} C2H_EVT;
@@ -41,5 +43,9 @@ typedef enum _EXTEND_C2H_EVT {
EXTEND_C2H_DBG_PRINT = 0
} EXTEND_C2H_EVT;
+#define MAC_HIDDEN_RPT_LEN 8
+int c2h_mac_hidden_rpt_hdl(_adapter *adapter, u8 *data, u8 len);
+int hal_read_mac_hidden_rpt(_adapter *adapter);
+
#endif /* __COMMON_C2H_H__ */
diff --git a/rtl8188FU/hal/hal_com_phycfg.c b/rtl8188FU/hal/hal_com_phycfg.c
index aea6814..9bb5368 100755
--- a/rtl8188FU/hal/hal_com_phycfg.c
+++ b/rtl8188FU/hal/hal_com_phycfg.c
@@ -2350,22 +2350,12 @@ bool phy_is_tx_power_by_rate_needed(_adapter *adapter)
return _FALSE;
}
-int phy_load_tx_power_by_rate(_adapter *adapter, const char *hal_file_name, u8 force)
+int phy_load_tx_power_by_rate(_adapter *adapter, u8 chk_file)
{
HAL_DATA_TYPE *hal_data = GET_HAL_DATA(adapter);
struct registry_priv *regsty = dvobj_to_regsty(adapter_to_dvobj(adapter));
int ret = _FAIL;
- if (!force
- && !rtw_is_phy_file_readable(hal_file_name)
- && hal_data->txpwr_by_rate_loaded == 1
- && hal_data->txpwr_by_rate_from_file == 0
- ) {
- /* No file and already load default(compile-time) table */
- ret = _SUCCESS;
- goto exit;
- }
-
hal_data->txpwr_by_rate_loaded = 0;
PHY_InitTxPowerByRate(adapter);
@@ -2373,8 +2363,8 @@ int phy_load_tx_power_by_rate(_adapter *adapter, const char *hal_file_name, u8 f
hal_data->txpwr_limit_loaded = 0;
#ifdef CONFIG_LOAD_PHY_PARA_FROM_FILE
- if (rtw_is_phy_file_readable(hal_file_name)
- && phy_ConfigBBWithPgParaFile(adapter, hal_file_name) == _SUCCESS
+ if (chk_file
+ && phy_ConfigBBWithPgParaFile(adapter, PHY_FILE_PHY_REG_PG) == _SUCCESS
) {
hal_data->txpwr_by_rate_from_file = 1;
goto post_hdl;
@@ -2407,22 +2397,12 @@ exit:
return ret;
}
-int phy_load_tx_power_limit(_adapter *adapter, const char *hal_file_name, u8 force)
+int phy_load_tx_power_limit(_adapter *adapter, u8 chk_file)
{
HAL_DATA_TYPE *hal_data = GET_HAL_DATA(adapter);
struct registry_priv *regsty = dvobj_to_regsty(adapter_to_dvobj(adapter));
int ret = _FAIL;
- if (!force
- && !rtw_is_phy_file_readable(hal_file_name)
- && hal_data->txpwr_by_rate_loaded == 1
- && hal_data->txpwr_by_rate_from_file == 0
- ) {
- /* No file and already load default(compile-time) table */
- ret = _SUCCESS;
- goto exit;
- }
-
hal_data->txpwr_limit_loaded = 0;
PHY_InitTxPowerLimit(adapter);
@@ -2432,8 +2412,8 @@ int phy_load_tx_power_limit(_adapter *adapter, const char *hal_file_name, u8 for
}
#ifdef CONFIG_LOAD_PHY_PARA_FROM_FILE
- if (rtw_is_phy_file_readable(hal_file_name)
- && PHY_ConfigRFWithPowerLimitTableParaFile(adapter, hal_file_name) == _SUCCESS
+ if (chk_file
+ && PHY_ConfigRFWithPowerLimitTableParaFile(adapter, PHY_FILE_TXPWR_LMT) == _SUCCESS
) {
hal_data->txpwr_limit_from_file = 1;
goto post_hdl;
@@ -2460,152 +2440,30 @@ exit:
return ret;
}
-const char *hal_phy_reg_pg_str(_adapter *adapter)
-{
- u8 interface_type = 0;
- const char *str = NULL;
-
- interface_type = rtw_get_intf_type(adapter);
-
- switch (rtw_get_chip_type(adapter)) {
-#ifdef CONFIG_RTL8723B
- case RTL8723B:
- str = RTL8723B_PHY_REG_PG;
- break;
-#endif
-#ifdef CONFIG_RTL8703B
- case RTL8703B:
- str = RTL8703B_PHY_REG_PG;
- break;
-#endif
-#ifdef CONFIG_RTL8188E
- case RTL8188E:
- str = RTL8188E_PHY_REG_PG;
- break;
-#endif
-#ifdef CONFIG_RTL8188F
- case RTL8188F:
- str = RTL8188F_PHY_REG_PG;
- break;
-#endif
-#ifdef CONFIG_RTL8812A
- case RTL8812:
- str = RTL8812_PHY_REG_PG;
- break;
-#endif
-#ifdef CONFIG_RTL8821A
- case RTL8821:
- str = RTL8821_PHY_REG_PG;
- break;
-#endif
-#ifdef CONFIG_RTL8192E
- case RTL8192E:
- str = RTL8192E_PHY_REG_PG;
- break;
-#endif
-#ifdef CONFIG_RTL8814A
- case RTL8814A:
- str = RTL8814A_PHY_REG_PG;
- break;
-#endif
- }
-
- if (str == NULL) {
- DBG_871X_LEVEL(_drv_err_, "%s: unknown chip_type:%u\n"
- , __func__, rtw_get_chip_type(adapter));
- }
-
- return str;
-}
-
-const char *hal_txpwr_lmt_str(_adapter *adapter)
-{
- u8 interface_type = 0;
- const char *str = NULL;
-
- interface_type = rtw_get_intf_type(adapter);
-
- switch (rtw_get_chip_type(adapter)) {
-#ifdef CONFIG_RTL8723B
- case RTL8723B:
- str = RTL8723B_TXPWR_LMT;
- break;
-#endif
-#ifdef CONFIG_RTL8703B
- case RTL8703B:
- str = RTL8703B_TXPWR_LMT;
- break;
-#endif
-#ifdef CONFIG_RTL8188E
- case RTL8188E:
- str = RTL8188E_TXPWR_LMT;
- break;
-#endif
-#ifdef CONFIG_RTL8188F
- case RTL8188F:
- str = RTL8188F_TXPWR_LMT;
- break;
-#endif
-#ifdef CONFIG_RTL8812A
- case RTL8812:
- str = RTL8812_TXPWR_LMT;
- break;
-#endif
-#ifdef CONFIG_RTL8821A
- case RTL8821:
- str = RTL8821_TXPWR_LMT;
- break;
-#endif
-#ifdef CONFIG_RTL8192E
- case RTL8192E:
- str = RTL8192E_TXPWR_LMT;
- break;
-#endif
-#ifdef CONFIG_RTL8814A
- case RTL8814A:
- str = RTL8814A_TXPWR_LMT;
- break;
-#endif
- }
-
- if (str == NULL) {
- DBG_871X_LEVEL(_drv_err_, "%s: unknown chip_type:%u\n"
- , __func__, rtw_get_chip_type(adapter));
- }
-
- return str;
-}
-
-void phy_load_tx_power_ext_info(_adapter *adapter, u8 chk_file, u8 force)
+void phy_load_tx_power_ext_info(_adapter *adapter, u8 chk_file)
{
struct registry_priv *regsty = adapter_to_regsty(adapter);
- const char *str = NULL;
/* check registy target tx power */
regsty->target_tx_pwr_valid = rtw_regsty_chk_target_tx_power_valid(adapter);
/* power by rate and limit */
if (phy_is_tx_power_by_rate_needed(adapter)
- || (phy_is_tx_power_limit_needed(adapter) && regsty->target_tx_pwr_valid != _TRUE)
- ) {
- str = chk_file ? hal_phy_reg_pg_str(adapter) : NULL;
- phy_load_tx_power_by_rate(adapter, str, force);
- }
+ || (phy_is_tx_power_limit_needed(adapter) && regsty->target_tx_pwr_valid != _TRUE))
+ phy_load_tx_power_by_rate(adapter, chk_file);
- if (phy_is_tx_power_limit_needed(adapter)) {
- str = chk_file ? hal_txpwr_lmt_str(adapter) : NULL;
- phy_load_tx_power_limit(adapter, str, force);
- }
+ if (phy_is_tx_power_limit_needed(adapter))
+ phy_load_tx_power_limit(adapter, chk_file);
}
inline void phy_reload_tx_power_ext_info(_adapter *adapter)
{
- phy_load_tx_power_ext_info(adapter, 1, 1);
+ phy_load_tx_power_ext_info(adapter, 1);
}
inline void phy_reload_default_tx_power_ext_info(_adapter *adapter)
{
- phy_load_tx_power_ext_info(adapter, 0, 1);
+ phy_load_tx_power_ext_info(adapter, 0);
}
void dump_tx_power_ext_info(void *sel, _adapter *adapter)
@@ -2916,12 +2774,24 @@ void dump_tx_power_limit(void *sel, _adapter *adapter)
}
}
-int rtw_is_phy_file_readable(const char *hal_file_name)
+/*
+ * phy file path is stored in global char array rtw_phy_para_file_path
+ * need to care about racing
+ */
+int rtw_get_phy_file_path(_adapter *adapter, const char *file_name)
{
#ifdef CONFIG_LOAD_PHY_PARA_FROM_FILE
- if (hal_file_name) {
- rtw_merge_string(file_path, PATH_LENGTH_MAX, rtw_phy_file_path, hal_file_name);
- return rtw_is_file_readable(file_path);
+ struct hal_spec_t *hal_spec = GET_HAL_SPEC(adapter);
+ int len = 0;
+
+ if (file_name) {
+ len += snprintf(rtw_phy_para_file_path, PATH_LENGTH_MAX, "%s", rtw_phy_file_path);
+ #if defined(CONFIG_MULTIDRV) || defined(REALTEK_CONFIG_PATH_WITH_IC_NAME_FOLDER)
+ len += snprintf(rtw_phy_para_file_path + len, PATH_LENGTH_MAX - len, "%s/", hal_spec->ic_name);
+ #endif
+ len += snprintf(rtw_phy_para_file_path + len, PATH_LENGTH_MAX - len, "%s", file_name);
+
+ return _TRUE;
}
#endif
return _FALSE;
@@ -2946,11 +2816,10 @@ phy_ConfigMACWithParaFile(
if ((pHalData->mac_reg_len == 0) && (pHalData->mac_reg == NULL))
{
- rtw_merge_string(file_path, PATH_LENGTH_MAX, rtw_phy_file_path, pFileName);
-
- if (rtw_is_file_readable(file_path) == _TRUE)
+ rtw_get_phy_file_path(Adapter, pFileName);
+ if (rtw_is_file_readable(rtw_phy_para_file_path) == _TRUE)
{
- rlen = rtw_retrieve_from_file(file_path, pHalData->para_file_buf, MAX_PARA_FILE_BUF_LEN);
+ rlen = rtw_retrieve_from_file(rtw_phy_para_file_path, pHalData->para_file_buf, MAX_PARA_FILE_BUF_LEN);
if (rlen > 0)
{
rtStatus = _SUCCESS;
@@ -3045,11 +2914,10 @@ phy_ConfigBBWithParaFile(
if ((pBufLen != NULL) && (*pBufLen == 0) && (pBuf == NULL))
{
- rtw_merge_string(file_path, PATH_LENGTH_MAX, rtw_phy_file_path, pFileName);
-
- if (rtw_is_file_readable(file_path) == _TRUE)
+ rtw_get_phy_file_path(Adapter, pFileName);
+ if (rtw_is_file_readable(rtw_phy_para_file_path) == _TRUE)
{
- rlen = rtw_retrieve_from_file(file_path, pHalData->para_file_buf, MAX_PARA_FILE_BUF_LEN);
+ rlen = rtw_retrieve_from_file(rtw_phy_para_file_path, pHalData->para_file_buf, MAX_PARA_FILE_BUF_LEN);
if (rlen > 0)
{
rtStatus = _SUCCESS;
@@ -3076,7 +2944,7 @@ phy_ConfigBBWithParaFile(
}
else
{
- if ((pBufLen != NULL) && (*pBufLen == 0) && (pBuf == NULL)) {
+ if ((pBufLen != NULL) && (*pBufLen != 0) && (pBuf != NULL)) {
_rtw_memcpy(pHalData->para_file_buf, pBuf, *pBufLen);
rtStatus = _SUCCESS;
}
@@ -3497,11 +3365,10 @@ phy_ConfigBBWithPgParaFile(
_rtw_memset(pHalData->para_file_buf, 0, MAX_PARA_FILE_BUF_LEN);
if (pHalData->bb_phy_reg_pg == NULL) {
- rtw_merge_string(file_path, PATH_LENGTH_MAX, rtw_phy_file_path, pFileName);
-
- if (rtw_is_file_readable(file_path) == _TRUE)
+ rtw_get_phy_file_path(Adapter, pFileName);
+ if (rtw_is_file_readable(rtw_phy_para_file_path) == _TRUE)
{
- rlen = rtw_retrieve_from_file(file_path, pHalData->para_file_buf, MAX_PARA_FILE_BUF_LEN);
+ rlen = rtw_retrieve_from_file(rtw_phy_para_file_path, pHalData->para_file_buf, MAX_PARA_FILE_BUF_LEN);
if (rlen > 0)
{
rtStatus = _SUCCESS;
@@ -3558,11 +3425,10 @@ phy_ConfigBBWithMpParaFile(
if ((pHalData->bb_phy_reg_mp_len == 0) && (pHalData->bb_phy_reg_mp == NULL))
{
- rtw_merge_string(file_path, PATH_LENGTH_MAX, rtw_phy_file_path, pFileName);
-
- if (rtw_is_file_readable(file_path) == _TRUE)
+ rtw_get_phy_file_path(Adapter, pFileName);
+ if (rtw_is_file_readable(rtw_phy_para_file_path) == _TRUE)
{
- rlen = rtw_retrieve_from_file(file_path, pHalData->para_file_buf, MAX_PARA_FILE_BUF_LEN);
+ rlen = rtw_retrieve_from_file(rtw_phy_para_file_path, pHalData->para_file_buf, MAX_PARA_FILE_BUF_LEN);
if (rlen > 0)
{
rtStatus = _SUCCESS;
@@ -3694,11 +3560,10 @@ PHY_ConfigRFWithParaFile(
if ((pBufLen != NULL) && (*pBufLen == 0) && (pBuf == NULL))
{
- rtw_merge_string(file_path, PATH_LENGTH_MAX, rtw_phy_file_path, pFileName);
-
- if (rtw_is_file_readable(file_path) == _TRUE)
+ rtw_get_phy_file_path(Adapter, pFileName);
+ if (rtw_is_file_readable(rtw_phy_para_file_path) == _TRUE)
{
- rlen = rtw_retrieve_from_file(file_path, pHalData->para_file_buf, MAX_PARA_FILE_BUF_LEN);
+ rlen = rtw_retrieve_from_file(rtw_phy_para_file_path, pHalData->para_file_buf, MAX_PARA_FILE_BUF_LEN);
if (rlen > 0)
{
rtStatus = _SUCCESS;
@@ -3725,7 +3590,7 @@ PHY_ConfigRFWithParaFile(
}
else
{
- if ((pBufLen != NULL) && (*pBufLen == 0) && (pBuf == NULL)) {
+ if ((pBufLen != NULL) && (*pBufLen != 0) && (pBuf != NULL)) {
_rtw_memcpy(pHalData->para_file_buf, pBuf, *pBufLen);
rtStatus = _SUCCESS;
}
@@ -3972,11 +3837,10 @@ PHY_ConfigRFWithTxPwrTrackParaFile(
if ((pHalData->rf_tx_pwr_track_len == 0) && (pHalData->rf_tx_pwr_track == NULL))
{
- rtw_merge_string(file_path, PATH_LENGTH_MAX, rtw_phy_file_path, pFileName);
-
- if (rtw_is_file_readable(file_path) == _TRUE)
+ rtw_get_phy_file_path(Adapter, pFileName);
+ if (rtw_is_file_readable(rtw_phy_para_file_path) == _TRUE)
{
- rlen = rtw_retrieve_from_file(file_path, pHalData->para_file_buf, MAX_PARA_FILE_BUF_LEN);
+ rlen = rtw_retrieve_from_file(rtw_phy_para_file_path, pHalData->para_file_buf, MAX_PARA_FILE_BUF_LEN);
if (rlen > 0)
{
rtStatus = _SUCCESS;
@@ -4344,11 +4208,10 @@ PHY_ConfigRFWithPowerLimitTableParaFile(
_rtw_memset(pHalData->para_file_buf, 0, MAX_PARA_FILE_BUF_LEN);
if (pHalData->rf_tx_pwr_lmt == NULL) {
- rtw_merge_string(file_path, PATH_LENGTH_MAX, rtw_phy_file_path, pFileName);
-
- if (rtw_is_file_readable(file_path) == _TRUE)
+ rtw_get_phy_file_path(Adapter, pFileName);
+ if (rtw_is_file_readable(rtw_phy_para_file_path) == _TRUE)
{
- rlen = rtw_retrieve_from_file(file_path, pHalData->para_file_buf, MAX_PARA_FILE_BUF_LEN);
+ rlen = rtw_retrieve_from_file(rtw_phy_para_file_path, pHalData->para_file_buf, MAX_PARA_FILE_BUF_LEN);
if (rlen > 0)
{
rtStatus = _SUCCESS;
diff --git a/rtl8188FU/hal/hal_dm.c b/rtl8188FU/hal/hal_dm.c
index 4547dbe..139e2f2 100755
--- a/rtl8188FU/hal/hal_dm.c
+++ b/rtl8188FU/hal/hal_dm.c
@@ -88,6 +88,8 @@ void Init_ODM_ComInfo(_adapter *adapter)
ODM_CmnInfoInit(pDM_Odm, ODM_CMNINFO_PLATFORM, ODM_CE);
+ rtw_odm_init_ic_type(adapter);
+
if (rtw_get_intf_type(adapter) == RTW_GSPI)
ODM_CmnInfoInit(pDM_Odm, ODM_CMNINFO_INTERFACE, ODM_ITRF_SDIO);
else
@@ -161,6 +163,8 @@ void Init_ODM_ComInfo(_adapter *adapter)
ODM_CmnInfoInit(pDM_Odm, ODM_CMNINFO_EXT_TRSW, 0);
+ ODM_CmnInfoInit(pDM_Odm, ODM_CMNINFO_RF_ANTENNA_TYPE, pHalData->TRxAntDivType);
+
/* Pointer reference */
ODM_CmnInfoHook(pDM_Odm, ODM_CMNINFO_TX_UNI, &(dvobj->traffic_stat.tx_bytes));
ODM_CmnInfoHook(pDM_Odm, ODM_CMNINFO_RX_UNI, &(dvobj->traffic_stat.rx_bytes));
diff --git a/rtl8188FU/hal/hal_intf.c b/rtl8188FU/hal/hal_intf.c
index b986988..00891f8 100755
--- a/rtl8188FU/hal/hal_intf.c
+++ b/rtl8188FU/hal/hal_intf.c
@@ -23,6 +23,19 @@
#include <drv_types.h>
#include <hal_data.h>
+const u32 _chip_type_to_odm_ic_type[] = {
+ 0,
+ ODM_RTL8188E,
+ ODM_RTL8192E,
+ ODM_RTL8812,
+ ODM_RTL8821,
+ ODM_RTL8723B,
+ ODM_RTL8814A,
+ ODM_RTL8703B,
+ ODM_RTL8188F,
+ 0,
+};
+
void rtw_hal_chip_configure(_adapter *padapter)
{
padapter->HalFunc.intf_chip_configure(padapter);
@@ -50,6 +63,7 @@ void rtw_hal_read_chip_info(_adapter *padapter)
void rtw_hal_read_chip_version(_adapter *padapter)
{
padapter->HalFunc.read_chip_version(padapter);
+ rtw_odm_init_ic_type(padapter);
}
void rtw_hal_def_value_init(_adapter *padapter)
@@ -114,7 +128,7 @@ void rtw_hal_dm_init(_adapter *padapter)
_rtw_spinlock_init(&pHalData->IQKSpinLock);
- phy_load_tx_power_ext_info(padapter, 1, 1);
+ phy_load_tx_power_ext_info(padapter, 1);
}
}
void rtw_hal_dm_deinit(_adapter *padapter)
@@ -197,9 +211,9 @@ uint rtw_hal_init(_adapter *padapter)
rtw_hal_init_opmode(padapter);
-#ifdef CONFIG_RF_GAIN_OFFSET
+#ifdef CONFIG_RF_POWER_TRIM
rtw_bb_rf_gain_offset(padapter);
-#endif //CONFIG_RF_GAIN_OFFSET
+#endif /*CONFIG_RF_POWER_TRIM*/
} else {
pHalData->hw_init_completed = _FALSE;
@@ -300,6 +314,11 @@ u8 rtw_hal_check_ips_status(_adapter *padapter)
return val;
}
+s32 rtw_hal_fw_dl(_adapter *padapter, u8 wowlan)
+{
+ return padapter->HalFunc.fw_dl(padapter, wowlan);
+}
+
#if defined(CONFIG_WOWLAN) || defined(CONFIG_AP_WOWLAN)
void rtw_hal_clear_interrupt(_adapter *padapter)
{
@@ -307,11 +326,6 @@ void rtw_hal_clear_interrupt(_adapter *padapter)
padapter->HalFunc.clear_interrupt(padapter);
#endif
}
-void rtw_hal_set_wowlan_fw(_adapter *padapter, u8 sleep)
-{
- padapter->HalFunc.hal_set_wowlan_fw(padapter, sleep);
-}
-
#endif
#if defined(CONFIG_USB_HCI) || defined (CONFIG_PCI_HCI)
@@ -605,30 +619,6 @@ void rtw_hal_bcn_related_reg_setting(_adapter *padapter)
padapter->HalFunc.SetBeaconRelatedRegistersHandler(padapter);
}
-
-#ifdef CONFIG_ANTENNA_DIVERSITY
-u8 rtw_hal_antdiv_before_linked(_adapter *padapter)
-{
- struct dvobj_priv *dvobj = adapter_to_dvobj(padapter);
- int i;
-
- if (!padapter->HalFunc.AntDivBeforeLinkHandler)
- return _FALSE;
-
- for (i = 0; i < dvobj->iface_nums; i++) {
- if (rtw_linked_check(dvobj->padapters[i]))
- return _FALSE;
- }
-
- return padapter->HalFunc.AntDivBeforeLinkHandler(padapter);
-}
-void rtw_hal_antdiv_rssi_compared(_adapter *padapter, WLAN_BSSID_EX *dst, WLAN_BSSID_EX *src)
-{
- if(padapter->HalFunc.AntDivCompareHandler)
- padapter->HalFunc.AntDivCompareHandler(padapter, dst, src);
-}
-#endif
-
#ifdef CONFIG_HOSTAPD_MLME
s32 rtw_hal_hostap_mgnt_xmit_entry(_adapter *padapter, _pkt *pkt)
{
@@ -1061,11 +1051,13 @@ u8 rtw_hal_ops_check(_adapter *padapter)
ret = _FAIL;
}
#endif
- if (NULL == padapter->HalFunc.hal_set_wowlan_fw) {
- rtw_hal_error_msg("hal_set_wowlan_fw");
+ #endif /* CONFIG_WOWLAN */
+
+ if (NULL == padapter->HalFunc.fw_dl) {
+ rtw_hal_error_msg("fw_dl");
ret = _FAIL;
}
- #endif //CONFIG_WOWLAN
+
if ((IS_HARDWARE_TYPE_8814A(padapter)
|| IS_HARDWARE_TYPE_8822BU(padapter) || IS_HARDWARE_TYPE_8822BS(padapter))
&& NULL == padapter->HalFunc.fw_correct_bcn) {
diff --git a/rtl8188FU/hal/hal_mp.c b/rtl8188FU/hal/hal_mp.c
index c4a4ba6..2808bec 100755
--- a/rtl8188FU/hal/hal_mp.c
+++ b/rtl8188FU/hal/hal_mp.c
@@ -144,6 +144,10 @@ void hal_mpt_CCKTxPowerAdjust(PADAPTER Adapter, BOOLEAN bInCH14)
ULONG ulRateIdx = pMptCtx->MptRateIndex;
u1Byte DataRate = 0xFF;
+ /* Suggested by BB David. 2015.04.27*/
+ if(IS_HARDWARE_TYPE_8188F(Adapter))
+ return;
+
DataRate = MptToMgntRate(ulRateIdx);
if (u1Channel == 14 && IS_CCK_RATE(DataRate))
@@ -166,8 +170,6 @@ void hal_mpt_CCKTxPowerAdjust(PADAPTER Adapter, BOOLEAN bInCH14)
RT_TRACE(_module_mp_, DBG_LOUD, ("MPT_CCKTxPowerAdjust 8703B in Channel %u restore to default setting\n", u1Channel));
}
- } else if (IS_HARDWARE_TYPE_8188F(Adapter)) {
- /* No difference between CCK in CH14 and others, no need to change TX filter */
} else {
/* get current cck swing value and check 0xa22 & 0xa23 later to match the table.*/
@@ -246,7 +248,6 @@ void hal_mpt_SetChannel(PADAPTER pAdapter)
struct mp_priv *pmp = &pAdapter->mppriv;
u8 channel = pmp->channel;
u8 bandwidth = pmp->bandwidth;
- u8 rate = pmp->rateidx;
hal_mpt_SwitchRfSetting(pAdapter);
@@ -358,6 +359,8 @@ mpt_SetTxPower(
if (IS_HARDWARE_TYPE_8814A(pAdapter))
EndPath = ODM_RF_PATH_D;
+ else if (IS_HARDWARE_TYPE_8188F(pAdapter))
+ EndPath = ODM_RF_PATH_A;
switch (Rate) {
case MPT_CCK:
@@ -453,11 +456,11 @@ void hal_mpt_SetTxPower(PADAPTER pAdapter)
PDM_ODM_T pDM_Odm = &pHalData->odmpriv;
if (pHalData->rf_chip < RF_TYPE_MAX) {
- if (IS_HARDWARE_TYPE_8188E(pAdapter) ||
- IS_HARDWARE_TYPE_8723B(pAdapter) ||
- IS_HARDWARE_TYPE_8192E(pAdapter) ||
- IS_HARDWARE_TYPE_8703B(pAdapter) ||
- IS_HARDWARE_TYPE_8188F(pAdapter)) {
+ if (IS_HARDWARE_TYPE_8188E(pAdapter) ||
+ IS_HARDWARE_TYPE_8723B(pAdapter) ||
+ IS_HARDWARE_TYPE_8192E(pAdapter) ||
+ IS_HARDWARE_TYPE_8703B(pAdapter) ||
+ IS_HARDWARE_TYPE_8188F(pAdapter)) {
u8 path = (pHalData->AntennaTxPath == ANTENNA_A) ? (ODM_RF_PATH_A) : (ODM_RF_PATH_B);
DBG_8192C("===> MPT_ProSetTxPower: Old\n");
@@ -487,8 +490,8 @@ void hal_mpt_SetDataRate(PADAPTER pAdapter)
HAL_DATA_TYPE *pHalData = GET_HAL_DATA(pAdapter);
PMPT_CONTEXT pMptCtx = &(pAdapter->mppriv.MptCtx);
u32 DataRate;
-
- DataRate = MptToMgntRate(pAdapter->mppriv.rateidx);
+
+ DataRate = MptToMgntRate(pMptCtx->MptRateIndex);
hal_mpt_SwitchRfSetting(pAdapter);
@@ -556,8 +559,7 @@ VOID mpt_SetRFPath_8814A(PADAPTER pAdapter)
PMPT_CONTEXT pMptCtx = &pAdapter->mppriv.MptCtx;
R_ANTENNA_SELECT_OFDM *p_ofdm_tx; /* OFDM Tx register */
R_ANTENNA_SELECT_CCK *p_cck_txrx;
-
- u8 ForcedDataRate = HwRateToMRate(pAdapter->mppriv.rateidx);
+ u8 ForcedDataRate = MptToMgntRate(pMptCtx->MptRateIndex);
u8 HtStbcCap = pAdapter->registrypriv.stbc_cap;
/*/PRT_HIGH_THROUGHPUT pHTInfo = GET_HT_INFO(pMgntInfo);*/
/*/PRT_VERY_HIGH_THROUGHPUT pVHTInfo = GET_VHT_INFO(pMgntInfo);*/
@@ -1504,9 +1506,8 @@ void hal_mpt_SetSingleToneTx(PADAPTER pAdapter, u8 bStart)
PHY_SetBBReg(pAdapter, rFPGA0_AnalogParameter4, 0xF00000, 0xF);
PHY_SetRFReg(pAdapter, pMptCtx->MptRfPath, LNA_Low_Gain_3, BIT1, 0x1);
PHY_SetRFReg(pAdapter, pMptCtx->MptRfPath, RF_AC, 0xF0000, 0x2);
-
- } else if (IS_HARDWARE_TYPE_JAGUAR(pAdapter)) {
-#if defined(CONFIG_RTL8812A) || defined(CONFIG_RTL8821A)
+ } else if (IS_HARDWARE_TYPE_JAGUAR(pAdapter) || IS_HARDWARE_TYPE_8822B(pAdapter)) {
+#if defined(CONFIG_RTL8812A) || defined(CONFIG_RTL8821A) || defined(CONFIG_RTL8822B) || defined(CONFIG_RTL8821C)
u1Byte p = ODM_RF_PATH_A;
regRF = PHY_QueryRFReg(pAdapter, ODM_RF_PATH_A, RF_AC_Jaguar, bRFRegOffsetMask);
@@ -1582,9 +1583,9 @@ void hal_mpt_SetSingleToneTx(PADAPTER pAdapter, u8 bStart)
PHY_SetRFReg(pAdapter, pMptCtx->MptRfPath, RF_AC, 0xF0000, 0x3); /*Tx mode*/
PHY_SetRFReg(pAdapter, pMptCtx->MptRfPath, LNA_Low_Gain_3, BIT1, 0x0); /*RF LO disabled*/
/*Set BB REG 88C: Prevent SingleTone Fail*/
- PHY_SetBBReg(pAdapter, rFPGA0_AnalogParameter4, 0xF00000, 0xc);
- } else if (IS_HARDWARE_TYPE_JAGUAR(pAdapter)) {
-#if defined(CONFIG_RTL8812A) || defined(CONFIG_RTL8821A)
+ PHY_SetBBReg(pAdapter, rFPGA0_AnalogParameter4, 0xF00000, 0xc);
+ } else if (IS_HARDWARE_TYPE_JAGUAR(pAdapter) || IS_HARDWARE_TYPE_8822B(pAdapter)) {
+#if defined(CONFIG_RTL8812A) || defined(CONFIG_RTL8821A) || defined(CONFIG_RTL8822B) || defined(CONFIG_RTL8821C)
u1Byte p = ODM_RF_PATH_A;
PHY_SetBBReg(pAdapter, rOFDMCCKEN_Jaguar, BIT29|BIT28, 0x3); /*/ Disable CCK and OFDM*/
@@ -1621,10 +1622,13 @@ void hal_mpt_SetSingleToneTx(PADAPTER pAdapter, u8 bStart)
void hal_mpt_SetCarrierSuppressionTx(PADAPTER pAdapter, u8 bStart)
{
+ u8 Rate;
pAdapter->mppriv.MptCtx.bCarrierSuppression = bStart;
+
+ Rate = HwRateToMPTRate(pAdapter->mppriv.rateidx);
if (bStart) {/* Start Carrier Suppression.*/
RT_TRACE(_module_mp_, _drv_alert_, ("SetCarrierSuppressionTx: test start\n"));
- if (pAdapter->mppriv.rateidx <= MPT_RATE_11M) {
+ if (Rate <= MPT_RATE_11M) {
/*/ 1. if CCK block on?*/
if (!read_bbreg(pAdapter, rFPGA0_RFMOD, bCCKEn))
write_bbreg(pAdapter, rFPGA0_RFMOD, bCCKEn, bEnable);/*set CCK block on*/
@@ -1649,7 +1653,7 @@ void hal_mpt_SetCarrierSuppressionTx(PADAPTER pAdapter, u8 bStart)
} else {/* Stop Carrier Suppression.*/
RT_TRACE(_module_mp_, _drv_alert_, ("SetCarrierSuppressionTx: test stop\n"));
- if (pAdapter->mppriv.rateidx <= MPT_RATE_11M) {
+ if (Rate <= MPT_RATE_11M) {
write_bbreg(pAdapter, rCCK0_System, bCCKBBMode, 0x0); /*normal mode*/
write_bbreg(pAdapter, rCCK0_System, bCCKScramble, 0x1); /*turn on scramble setting*/
@@ -1784,16 +1788,377 @@ void hal_mpt_SetOFDMContinuousTx(PADAPTER pAdapter, u8 bStart)
void hal_mpt_SetContinuousTx(PADAPTER pAdapter, u8 bStart)
{
+ u8 Rate;
RT_TRACE(_module_mp_, _drv_info_,
("SetContinuousTx: rate:%d\n", pAdapter->mppriv.rateidx));
+ Rate = HwRateToMPTRate(pAdapter->mppriv.rateidx);
pAdapter->mppriv.MptCtx.bStartContTx = bStart;
- if (pAdapter->mppriv.rateidx <= MPT_RATE_11M)
+ if (Rate <= MPT_RATE_11M)
hal_mpt_SetCCKContinuousTx(pAdapter, bStart);
- else if (pAdapter->mppriv.rateidx >= MPT_RATE_6M)
+ else if (Rate >= MPT_RATE_6M)
hal_mpt_SetOFDMContinuousTx(pAdapter, bStart);
}
+u32 hal_mpt_query_phytxok(PADAPTER pAdapter)
+{
+ PMPT_CONTEXT pMptCtx = &(pAdapter->mppriv.MptCtx);
+ RT_PMAC_TX_INFO PMacTxInfo = pMptCtx->PMacTxInfo;
+ u16 count = 0;
+
+ if (IS_MPT_CCK_RATE(PMacTxInfo.TX_RATE))
+ count = PHY_QueryBBReg(pAdapter, 0xF50, bMaskLWord); /* [15:0]*/
+ else
+ count = PHY_QueryBBReg(pAdapter, 0xF50, bMaskHWord); /* [31:16]*/
+
+ if (count > 50000) {
+ rtw_reset_phy_trx_ok_counters(pAdapter);
+ pAdapter->mppriv.tx.sended += count;
+ count = 0;
+ }
+
+ return pAdapter->mppriv.tx.sended + count;
+
+}
+
+#if defined(CONFIG_RTL8814A) || defined(CONFIG_RTL8821B) || defined(CONFIG_RTL8822B)
+/* for HW TX mode */
+static VOID mpt_StopCckContTx(
+ PADAPTER pAdapter
+ )
+{
+ HAL_DATA_TYPE *pHalData = GET_HAL_DATA(pAdapter);
+ PMPT_CONTEXT pMptCtx = &(pAdapter->mppriv.MptCtx);
+ u1Byte u1bReg;
+
+ pMptCtx->bCckContTx = FALSE;
+ pMptCtx->bOfdmContTx = FALSE;
+
+ PHY_SetBBReg(pAdapter, rCCK0_System, bCCKBBMode, 0x0); /*normal mode*/
+ PHY_SetBBReg(pAdapter, rCCK0_System, bCCKScramble, 0x1); /*turn on scramble setting*/
+
+ if (!IS_HARDWARE_TYPE_JAGUAR(pAdapter) && !IS_HARDWARE_TYPE_JAGUAR2(pAdapter)) {
+ PHY_SetBBReg(pAdapter, 0xa14, 0x300, 0x0); /* 0xa15[1:0] = 2b00*/
+ PHY_SetBBReg(pAdapter, rOFDM0_TRMuxPar, 0x10000, 0x0); /* 0xc08[16] = 0*/
+
+ PHY_SetBBReg(pAdapter, rFPGA0_XA_HSSIParameter2, BIT14, 0);
+ PHY_SetBBReg(pAdapter, 0x0B34, BIT14, 0);
+ }
+
+ /*BB Reset*/
+ PHY_SetBBReg(pAdapter, rPMAC_Reset, bBBResetB, 0x0);
+ PHY_SetBBReg(pAdapter, rPMAC_Reset, bBBResetB, 0x1);
+
+ PHY_SetBBReg(pAdapter, rFPGA0_XA_HSSIParameter1, bMaskDWord, 0x01000100);
+ PHY_SetBBReg(pAdapter, rFPGA0_XB_HSSIParameter1, bMaskDWord, 0x01000100);
+
+} /* mpt_StopCckContTx */
+
+
+static VOID mpt_StopOfdmContTx(
+ PADAPTER pAdapter
+ )
+{
+ HAL_DATA_TYPE *pHalData = GET_HAL_DATA(pAdapter);
+ PMPT_CONTEXT pMptCtx = &(pAdapter->mppriv.MptCtx);
+ u1Byte u1bReg;
+ u4Byte data;
+
+ pMptCtx->bCckContTx = FALSE;
+ pMptCtx->bOfdmContTx = FALSE;
+
+ if (IS_HARDWARE_TYPE_JAGUAR(pAdapter) || IS_HARDWARE_TYPE_JAGUAR2(pAdapter))
+ PHY_SetBBReg(pAdapter, 0x914, BIT18|BIT17|BIT16, OFDM_ALL_OFF);
+ else
+ PHY_SetBBReg(pAdapter, rOFDM1_LSTF, BIT30|BIT29|BIT28, OFDM_ALL_OFF);
+
+ rtw_mdelay_os(10);
+
+ if (!IS_HARDWARE_TYPE_JAGUAR(pAdapter) && !IS_HARDWARE_TYPE_JAGUAR2(pAdapter)) {
+ PHY_SetBBReg(pAdapter, 0xa14, 0x300, 0x0); /* 0xa15[1:0] = 0*/
+ PHY_SetBBReg(pAdapter, rOFDM0_TRMuxPar, 0x10000, 0x0); /* 0xc08[16] = 0*/
+ }
+
+ /*BB Reset*/
+ PHY_SetBBReg(pAdapter, rPMAC_Reset, bBBResetB, 0x0);
+ PHY_SetBBReg(pAdapter, rPMAC_Reset, bBBResetB, 0x1);
+
+ PHY_SetBBReg(pAdapter, rFPGA0_XA_HSSIParameter1, bMaskDWord, 0x01000100);
+ PHY_SetBBReg(pAdapter, rFPGA0_XB_HSSIParameter1, bMaskDWord, 0x01000100);
+} /* mpt_StopOfdmContTx */
+
+
+static VOID mpt_StartCckContTx(
+ PADAPTER pAdapter
+ )
+{
+ HAL_DATA_TYPE *pHalData = GET_HAL_DATA(pAdapter);
+ PMPT_CONTEXT pMptCtx = &(pAdapter->mppriv.MptCtx);
+ u4Byte cckrate;
+
+ /* 1. if CCK block on */
+ if (!PHY_QueryBBReg(pAdapter, rFPGA0_RFMOD, bCCKEn))
+ PHY_SetBBReg(pAdapter, rFPGA0_RFMOD, bCCKEn, 1);/*set CCK block on*/
+
+ /*Turn Off All Test Mode*/
+ if (IS_HARDWARE_TYPE_JAGUAR_AND_JAGUAR2(pAdapter))
+ PHY_SetBBReg(pAdapter, 0x914, BIT18|BIT17|BIT16, OFDM_ALL_OFF);
+ else
+ PHY_SetBBReg(pAdapter, rOFDM1_LSTF, BIT30|BIT29|BIT28, OFDM_ALL_OFF);
+
+ cckrate = pAdapter->mppriv.rateidx;
+
+ PHY_SetBBReg(pAdapter, rCCK0_System, bCCKTxRate, cckrate);
+
+ PHY_SetBBReg(pAdapter, rCCK0_System, bCCKBBMode, 0x2); /*transmit mode*/
+ PHY_SetBBReg(pAdapter, rCCK0_System, bCCKScramble, 0x1); /*turn on scramble setting*/
+
+ if (!IS_HARDWARE_TYPE_JAGUAR_AND_JAGUAR2(pAdapter)) {
+ PHY_SetBBReg(pAdapter, 0xa14, 0x300, 0x3); /* 0xa15[1:0] = 11 force cck rxiq = 0*/
+ PHY_SetBBReg(pAdapter, rOFDM0_TRMuxPar, 0x10000, 0x1); /* 0xc08[16] = 1 force ofdm rxiq = ofdm txiq*/
+ PHY_SetBBReg(pAdapter, rFPGA0_XA_HSSIParameter2, BIT14, 1);
+ PHY_SetBBReg(pAdapter, 0x0B34, BIT14, 1);
+ }
+
+ PHY_SetBBReg(pAdapter, rFPGA0_XA_HSSIParameter1, bMaskDWord, 0x01000500);
+ PHY_SetBBReg(pAdapter, rFPGA0_XB_HSSIParameter1, bMaskDWord, 0x01000500);
+
+ pMptCtx->bCckContTx = TRUE;
+ pMptCtx->bOfdmContTx = FALSE;
+
+} /* mpt_StartCckContTx */
+
+
+static VOID mpt_StartOfdmContTx(
+ PADAPTER pAdapter
+ )
+{
+ HAL_DATA_TYPE *pHalData = GET_HAL_DATA(pAdapter);
+ PMPT_CONTEXT pMptCtx = &(pAdapter->mppriv.MptCtx);
+
+ /* 1. if OFDM block on?*/
+ if (!PHY_QueryBBReg(pAdapter, rFPGA0_RFMOD, bOFDMEn))
+ PHY_SetBBReg(pAdapter, rFPGA0_RFMOD, bOFDMEn, 1);/*set OFDM block on*/
+
+ /* 2. set CCK test mode off, set to CCK normal mode*/
+ PHY_SetBBReg(pAdapter, rCCK0_System, bCCKBBMode, 0);
+
+ /* 3. turn on scramble setting*/
+ PHY_SetBBReg(pAdapter, rCCK0_System, bCCKScramble, 1);
+
+ if (!IS_HARDWARE_TYPE_JAGUAR(pAdapter) && !IS_HARDWARE_TYPE_JAGUAR2(pAdapter)) {
+ PHY_SetBBReg(pAdapter, 0xa14, 0x300, 0x3); /* 0xa15[1:0] = 2b'11*/
+ PHY_SetBBReg(pAdapter, rOFDM0_TRMuxPar, 0x10000, 0x1); /* 0xc08[16] = 1*/
+ }
+
+ /* 4. Turn On Continue Tx and turn off the other test modes.*/
+ if (IS_HARDWARE_TYPE_JAGUAR(pAdapter) || IS_HARDWARE_TYPE_JAGUAR2(pAdapter))
+ PHY_SetBBReg(pAdapter, 0x914, BIT18|BIT17|BIT16, OFDM_ContinuousTx);
+ else
+ PHY_SetBBReg(pAdapter, rOFDM1_LSTF, BIT30|BIT29|BIT28, OFDM_ContinuousTx);
+
+ PHY_SetBBReg(pAdapter, rFPGA0_XA_HSSIParameter1, bMaskDWord, 0x01000500);
+ PHY_SetBBReg(pAdapter, rFPGA0_XB_HSSIParameter1, bMaskDWord, 0x01000500);
+
+ pMptCtx->bCckContTx = FALSE;
+ pMptCtx->bOfdmContTx = TRUE;
+} /* mpt_StartOfdmContTx */
+
+
+void mpt_ProSetPMacTx(PADAPTER Adapter)
+{
+ PMPT_CONTEXT pMptCtx = &(Adapter->mppriv.MptCtx);
+ RT_PMAC_TX_INFO PMacTxInfo = pMptCtx->PMacTxInfo;
+ u32 u4bTmp;
+
+ DbgPrint("SGI %d bSPreamble %d bSTBC %d bLDPC %d NDP_sound %d\n", PMacTxInfo.bSGI, PMacTxInfo.bSPreamble, PMacTxInfo.bSTBC, PMacTxInfo.bLDPC, PMacTxInfo.NDP_sound);
+ DbgPrint("TXSC %d BandWidth %d PacketPeriod %d PacketCount %d PacketLength %d PacketPattern %d\n", PMacTxInfo.TX_SC, PMacTxInfo.BandWidth, PMacTxInfo.PacketPeriod, PMacTxInfo.PacketCount, PMacTxInfo.PacketLength, PMacTxInfo.PacketPattern);
+#if 0
+ PRINT_DATA("LSIG ", PMacTxInfo.LSIG, 3);
+ PRINT_DATA("HT_SIG", PMacTxInfo.HT_SIG, 6);
+ PRINT_DATA("VHT_SIG_A", PMacTxInfo.VHT_SIG_A, 6);
+ PRINT_DATA("VHT_SIG_B", PMacTxInfo.VHT_SIG_B, 4);
+ DbgPrint("VHT_SIG_B_CRC %x\n", PMacTxInfo.VHT_SIG_B_CRC);
+ PRINT_DATA("VHT_Delimiter", PMacTxInfo.VHT_Delimiter, 4);
+
+ PRINT_DATA("Src Address", Adapter->mac_addr, 6);
+ PRINT_DATA("Dest Address", PMacTxInfo.MacAddress, 6);
+#endif
+
+ if (PMacTxInfo.bEnPMacTx == FALSE) {
+ if (PMacTxInfo.Mode == CONTINUOUS_TX) {
+ PHY_SetBBReg(Adapter, 0xb04, 0xf, 2); /* TX Stop*/
+ if (IS_MPT_CCK_RATE(PMacTxInfo.TX_RATE))
+ mpt_StopCckContTx(Adapter);
+ else
+ mpt_StopOfdmContTx(Adapter);
+ } else if (IS_MPT_CCK_RATE(PMacTxInfo.TX_RATE)) {
+ u4bTmp = PHY_QueryBBReg(Adapter, 0xf50, bMaskLWord);
+ PHY_SetBBReg(Adapter, 0xb1c, bMaskLWord, u4bTmp+50);
+ PHY_SetBBReg(Adapter, 0xb04, 0xf, 2); /*TX Stop*/
+ } else
+ PHY_SetBBReg(Adapter, 0xb04, 0xf, 2); /* TX Stop*/
+
+ if (PMacTxInfo.Mode == OFDM_Single_Tone_TX) {
+ /* Stop HW TX -> Stop Continuous TX -> Stop RF Setting*/
+ if (IS_MPT_CCK_RATE(PMacTxInfo.TX_RATE))
+ mpt_StopCckContTx(Adapter);
+ else
+ mpt_StopOfdmContTx(Adapter);
+
+ mpt_SetSingleTone_8814A(Adapter, FALSE, TRUE);
+ }
+
+ return;
+ }
+
+ if (PMacTxInfo.Mode == CONTINUOUS_TX) {
+ PMacTxInfo.PacketCount = 1;
+
+ if (IS_MPT_CCK_RATE(PMacTxInfo.TX_RATE))
+ mpt_StartCckContTx(Adapter);
+ else
+ mpt_StartOfdmContTx(Adapter);
+ } else if (PMacTxInfo.Mode == OFDM_Single_Tone_TX) {
+ /* Continuous TX -> HW TX -> RF Setting */
+ PMacTxInfo.PacketCount = 1;
+
+ if (IS_MPT_CCK_RATE(PMacTxInfo.TX_RATE))
+ mpt_StartCckContTx(Adapter);
+ else
+ mpt_StartOfdmContTx(Adapter);
+ } else if (PMacTxInfo.Mode == PACKETS_TX) {
+ if (IS_MPT_CCK_RATE(PMacTxInfo.TX_RATE) && PMacTxInfo.PacketCount == 0)
+ PMacTxInfo.PacketCount = 0xffff;
+ }
+
+ if (IS_MPT_CCK_RATE(PMacTxInfo.TX_RATE)) {
+ /* 0xb1c[0:15] TX packet count 0xb1C[31:16] SFD*/
+ u4bTmp = PMacTxInfo.PacketCount|(PMacTxInfo.SFD << 16);
+ PHY_SetBBReg(Adapter, 0xb1c, bMaskDWord, u4bTmp);
+ /* 0xb40 7:0 SIGNAL 15:8 SERVICE 31:16 LENGTH*/
+ u4bTmp = PMacTxInfo.SignalField|(PMacTxInfo.ServiceField << 8)|(PMacTxInfo.LENGTH << 16);
+ PHY_SetBBReg(Adapter, 0xb40, bMaskDWord, u4bTmp);
+ u4bTmp = PMacTxInfo.CRC16[0] | (PMacTxInfo.CRC16[1] << 8);
+ PHY_SetBBReg(Adapter, 0xb44, bMaskLWord, u4bTmp);
+
+ if (PMacTxInfo.bSPreamble)
+ PHY_SetBBReg(Adapter, 0xb0c, BIT27, 0);
+ else
+ PHY_SetBBReg(Adapter, 0xb0c, BIT27, 1);
+ } else {
+ PHY_SetBBReg(Adapter, 0xb18, 0xfffff, PMacTxInfo.PacketCount);
+
+ u4bTmp = PMacTxInfo.LSIG[0]|((PMacTxInfo.LSIG[1]) << 8)|((PMacTxInfo.LSIG[2]) << 16)|((PMacTxInfo.PacketPattern) << 24);
+ PHY_SetBBReg(Adapter, 0xb08, bMaskDWord, u4bTmp); /* Set 0xb08[23:0] = LSIG, 0xb08[31:24] = Data init octet*/
+
+ if (PMacTxInfo.PacketPattern == 0x12)
+ u4bTmp = 0x3000000;
+ else
+ u4bTmp = 0;
+ }
+
+ if (IS_MPT_HT_RATE(PMacTxInfo.TX_RATE)) {
+ u4bTmp |= PMacTxInfo.HT_SIG[0]|((PMacTxInfo.HT_SIG[1]) << 8)|((PMacTxInfo.HT_SIG[2]) << 16);
+ PHY_SetBBReg(Adapter, 0xb0c, bMaskDWord, u4bTmp);
+ u4bTmp = PMacTxInfo.HT_SIG[3]|((PMacTxInfo.HT_SIG[4]) << 8)|((PMacTxInfo.HT_SIG[5]) << 16);
+ PHY_SetBBReg(Adapter, 0xb10, 0xffffff, u4bTmp);
+ } else if (IS_MPT_VHT_RATE(PMacTxInfo.TX_RATE)) {
+ u4bTmp |= PMacTxInfo.VHT_SIG_A[0]|((PMacTxInfo.VHT_SIG_A[1]) << 8)|((PMacTxInfo.VHT_SIG_A[2]) << 16);
+ PHY_SetBBReg(Adapter, 0xb0c, bMaskDWord, u4bTmp);
+ u4bTmp = PMacTxInfo.VHT_SIG_A[3]|((PMacTxInfo.VHT_SIG_A[4]) << 8)|((PMacTxInfo.VHT_SIG_A[5]) << 16);
+ PHY_SetBBReg(Adapter, 0xb10, 0xffffff, u4bTmp);
+
+ _rtw_memcpy(&u4bTmp, PMacTxInfo.VHT_SIG_B, 4);
+ PHY_SetBBReg(Adapter, 0xb14, bMaskDWord, u4bTmp);
+ }
+
+ if (IS_MPT_VHT_RATE(PMacTxInfo.TX_RATE)) {
+ u4bTmp = (PMacTxInfo.VHT_SIG_B_CRC << 24)|PMacTxInfo.PacketPeriod; /* for TX interval */
+ PHY_SetBBReg(Adapter, 0xb20, bMaskDWord, u4bTmp);
+
+ _rtw_memcpy(&u4bTmp, PMacTxInfo.VHT_Delimiter, 4);
+ PHY_SetBBReg(Adapter, 0xb24, bMaskDWord, u4bTmp);
+
+ /* 0xb28 - 0xb34 24 byte Probe Request MAC Header*/
+ /*& Duration & Frame control*/
+ PHY_SetBBReg(Adapter, 0xb28, bMaskDWord, 0x00000040);
+
+ /* Address1 [0:3]*/
+ u4bTmp = PMacTxInfo.MacAddress[0]|(PMacTxInfo.MacAddress[1] << 8)|(PMacTxInfo.MacAddress[2] << 16)|(PMacTxInfo.MacAddress[3] << 24);
+ PHY_SetBBReg(Adapter, 0xb2C, bMaskDWord, u4bTmp);
+
+ /* Address3 [3:0]*/
+ PHY_SetBBReg(Adapter, 0xb38, bMaskDWord, u4bTmp);
+
+ /* Address2[0:1] & Address1 [5:4]*/
+ u4bTmp = PMacTxInfo.MacAddress[4]|(PMacTxInfo.MacAddress[5] << 8)|(Adapter->mac_addr[0] << 16)|(Adapter->mac_addr[1] << 24);
+ PHY_SetBBReg(Adapter, 0xb30, bMaskDWord, u4bTmp);
+
+ /* Address2 [5:2]*/
+ u4bTmp = Adapter->mac_addr[2]|(Adapter->mac_addr[3] << 8)|(Adapter->mac_addr[4] << 16)|(Adapter->mac_addr[5] << 24);
+ PHY_SetBBReg(Adapter, 0xb34, bMaskDWord, u4bTmp);
+
+ /* Sequence Control & Address3 [5:4]*/
+ /*u4bTmp = PMacTxInfo.MacAddress[4]|(PMacTxInfo.MacAddress[5] << 8) ;*/
+ /*PHY_SetBBReg(Adapter, 0xb38, bMaskDWord, u4bTmp);*/
+ } else {
+ PHY_SetBBReg(Adapter, 0xb20, bMaskDWord, PMacTxInfo.PacketPeriod); /* for TX interval*/
+ /* & Duration & Frame control */
+ PHY_SetBBReg(Adapter, 0xb24, bMaskDWord, 0x00000040);
+
+ /* 0xb24 - 0xb38 24 byte Probe Request MAC Header*/
+ /* Address1 [0:3]*/
+ u4bTmp = PMacTxInfo.MacAddress[0]|(PMacTxInfo.MacAddress[1] << 8)|(PMacTxInfo.MacAddress[2] << 16)|(PMacTxInfo.MacAddress[3] << 24);
+ PHY_SetBBReg(Adapter, 0xb28, bMaskDWord, u4bTmp);
+
+ /* Address3 [3:0]*/
+ PHY_SetBBReg(Adapter, 0xb34, bMaskDWord, u4bTmp);
+
+ /* Address2[0:1] & Address1 [5:4]*/
+ u4bTmp = PMacTxInfo.MacAddress[4]|(PMacTxInfo.MacAddress[5] << 8)|(Adapter->mac_addr[0] << 16)|(Adapter->mac_addr[1] << 24);
+ PHY_SetBBReg(Adapter, 0xb2c, bMaskDWord, u4bTmp);
+
+ /* Address2 [5:2] */
+ u4bTmp = Adapter->mac_addr[2]|(Adapter->mac_addr[3] << 8)|(Adapter->mac_addr[4] << 16)|(Adapter->mac_addr[5] << 24);
+ PHY_SetBBReg(Adapter, 0xb30, bMaskDWord, u4bTmp);
+
+ /* Sequence Control & Address3 [5:4]*/
+ u4bTmp = PMacTxInfo.MacAddress[4] | (PMacTxInfo.MacAddress[5] << 8);
+ PHY_SetBBReg(Adapter, 0xb38, bMaskDWord, u4bTmp);
+ }
+
+ PHY_SetBBReg(Adapter, 0xb48, bMaskByte3, PMacTxInfo.TX_RATE_HEX);
+
+ /* 0xb4c 3:0 TXSC 5:4 BW 7:6 m_STBC 8 NDP_Sound*/
+ u4bTmp = (PMacTxInfo.TX_SC)|((PMacTxInfo.BandWidth) << 4)|((PMacTxInfo.m_STBC - 1) << 6)|((PMacTxInfo.NDP_sound) << 8);
+ PHY_SetBBReg(Adapter, 0xb4c, 0x1ff, u4bTmp);
+
+ if (IS_HARDWARE_TYPE_8814A(Adapter) || IS_HARDWARE_TYPE_8822B(Adapter)) {
+ u4Byte offset = 0xb44;
+
+ if (IS_MPT_OFDM_RATE(PMacTxInfo.TX_RATE))
+ PHY_SetBBReg(Adapter, offset, 0xc0000000, 0);
+ else if (IS_MPT_HT_RATE(PMacTxInfo.TX_RATE))
+ PHY_SetBBReg(Adapter, offset, 0xc0000000, 1);
+ else if (IS_MPT_VHT_RATE(PMacTxInfo.TX_RATE))
+ PHY_SetBBReg(Adapter, offset, 0xc0000000, 2);
+ }
+
+ PHY_SetBBReg(Adapter, 0xb00, BIT8, 1); /* Turn on PMAC*/
+/* //PHY_SetBBReg(Adapter, 0xb04, 0xf, 2); //TX Stop*/
+ if (IS_MPT_CCK_RATE(PMacTxInfo.TX_RATE)) {
+ PHY_SetBBReg(Adapter, 0xb04, 0xf, 8); /*TX CCK ON*/
+ PHY_SetBBReg(Adapter, 0xA84, BIT31, 0);
+ } else
+ PHY_SetBBReg(Adapter, 0xb04, 0xf, 4); /* TX Ofdm ON */
+
+ if (PMacTxInfo.Mode == OFDM_Single_Tone_TX)
+ mpt_SetSingleTone_8814A(Adapter, TRUE, TRUE);
+
+}
+#endif
+
#endif /* CONFIG_MP_INCLUDE*/
diff --git a/rtl8188FU/hal/led/hal_usb_led.c b/rtl8188FU/hal/led/hal_usb_led.c
index d3adc8b..3477bbe 100755
--- a/rtl8188FU/hal/led/hal_usb_led.c
+++ b/rtl8188FU/hal/led/hal_usb_led.c
@@ -2404,8 +2404,7 @@ void BlinkTimerCallback(void *data)
#ifdef CONFIG_LED_HANDLED_BY_CMD_THREAD
rtw_led_blink_cmd(padapter, (PVOID)pLed);
#else
- if(ATOMIC_READ(&pLed->bCancelWorkItem) == _FALSE)
- _set_workitem(&(pLed->BlinkWorkItem));
+ _set_workitem(&(pLed->BlinkWorkItem));
#endif
}
@@ -5159,7 +5158,6 @@ InitLed(
pLed->LedPin = LedPin;
ResetLedStatus(pLed);
- ATOMIC_SET(&pLed->bCancelWorkItem, _FALSE);
_init_timer(&(pLed->BlinkTimer), padapter->pnetdev, BlinkTimerCallback, pLed);
_init_workitem(&(pLed->BlinkWorkItem), BlinkWorkItemCallback, pLed);
}
@@ -5174,7 +5172,6 @@ DeInitLed(
PLED_USB pLed
)
{
- ATOMIC_SET(&pLed->bCancelWorkItem, _TRUE);
_cancel_workitem_sync(&(pLed->BlinkWorkItem));
_cancel_timer_ex(&(pLed->BlinkTimer));
ResetLedStatus(pLed);
diff --git a/rtl8188FU/hal/phydm/phydm.c b/rtl8188FU/hal/phydm/phydm.c
index ecace00..d0ab8ca 100755
--- a/rtl8188FU/hal/phydm/phydm.c
+++ b/rtl8188FU/hal/phydm/phydm.c
@@ -482,7 +482,10 @@ ODM_DMReset(
IN PDM_ODM_T pDM_Odm
)
{
- ODM_AntDivReset(pDM_Odm);
+ pDIG_T pDM_DigTable = &pDM_Odm->DM_DigTable;
+
+ ODM_AntDivReset(pDM_Odm);
+ phydm_setEDCCAThresholdAPI(pDM_Odm, pDM_DigTable->CurIGValue);
}
@@ -617,6 +620,9 @@ ODM_DMWatchdog(
pDIG_T pDM_DigTable = &pDM_Odm->DM_DigTable;
Phydm_Adaptivity(pDM_Odm, pDM_DigTable->CurIGValue);
}
+ #if (DM_ODM_SUPPORT_TYPE & (ODM_CE))
+ odm_AntennaDiversity(pDM_Odm); /*enable AntDiv in PS mode, request from SD4 Jeff*/
+ #endif
ODM_RT_TRACE(pDM_Odm,ODM_COMP_COMMON, ODM_DBG_LOUD, ("DMWatchdog in power saving mode\n"));
return;
}
diff --git a/rtl8188FU/hal/phydm/phydm_adaptivity.c b/rtl8188FU/hal/phydm/phydm_adaptivity.c
index 07d1a94..def2a17 100755
--- a/rtl8188FU/hal/phydm/phydm_adaptivity.c
+++ b/rtl8188FU/hal/phydm/phydm_adaptivity.c
@@ -567,6 +567,7 @@ Phydm_AdaptivityInit(
PDM_ODM_T pDM_Odm = (PDM_ODM_T)pDM_VOID;
PADAPTIVITY_STATISTICS Adaptivity = (PADAPTIVITY_STATISTICS)PhyDM_Get_Structure(pDM_Odm, PHYDM_ADAPTIVITY);
s1Byte IGItarget = 0x32;
+ /*pDIG_T pDM_DigTable = &pDM_Odm->DM_DigTable;*/
#if(DM_ODM_SUPPORT_TYPE == ODM_WIN)
PADAPTER pAdapter = pDM_Odm->Adapter;
PMGNT_INFO pMgntInfo = &(pAdapter->MgntInfo);
@@ -633,7 +634,10 @@ Phydm_AdaptivityInit(
pDM_Odm->Adaptivity_IGI_upper = 0;
pDM_Odm->Adaptivity_enable = FALSE; /*use this flag to decide enable or disable*/
- pDM_Odm->EDCCA_enable = TRUE; /*even no adaptivity, we still enable EDCCA*/
+ if (pDM_Odm->bWIFITest == TRUE || pDM_Odm->mp_mode == TRUE)
+ pDM_Odm->EDCCA_enable = FALSE;
+ else
+ pDM_Odm->EDCCA_enable = TRUE; /*even no adaptivity, we still enable EDCCA*/
pDM_Odm->TH_L2H_ini_mode2 = 20;
pDM_Odm->TH_EDCCA_HL_diff_mode2 = 8;
@@ -676,6 +680,8 @@ Phydm_AdaptivityInit(
ODM_RT_TRACE(pDM_Odm, PHYDM_COMP_ADAPTIVITY, ODM_DBG_LOUD, ("TH_L2H_ini = 0x%x, TH_EDCCA_HL_diff = 0x%x, Adaptivity->AdajustIGILevel = 0x%x\n", pDM_Odm->TH_L2H_ini, pDM_Odm->TH_EDCCA_HL_diff, Adaptivity->AdajustIGILevel));
+ /*phydm_setEDCCAThresholdAPI(pDM_Odm, pDM_DigTable->CurIGValue);*/
+
}
@@ -894,3 +900,47 @@ Phydm_AdaptivityBSOD(
}
#endif
+
+VOID
+phydm_setEDCCAThresholdAPI(
+ IN PVOID pDM_VOID,
+ IN u1Byte IGI
+)
+{
+ PDM_ODM_T pDM_Odm = (PDM_ODM_T)pDM_VOID;
+ PADAPTIVITY_STATISTICS Adaptivity = (PADAPTIVITY_STATISTICS)PhyDM_Get_Structure(pDM_Odm, PHYDM_ADAPTIVITY);
+ s1Byte TH_L2H_dmc, TH_H2L_dmc;
+ s1Byte Diff = 0, IGI_target = 0x32;
+
+ if (pDM_Odm->SupportAbility & ODM_BB_ADAPTIVITY) {
+
+ if (pDM_Odm->SupportICType & (ODM_IC_11AC_GAIN_IDX_EDCCA | ODM_IC_11N_GAIN_IDX_EDCCA)) {
+ if (Adaptivity->AdajustIGILevel > IGI)
+ Diff = Adaptivity->AdajustIGILevel - IGI;
+
+ TH_L2H_dmc = pDM_Odm->TH_L2H_ini - Diff + IGI_target;
+ TH_H2L_dmc = TH_L2H_dmc - pDM_Odm->TH_EDCCA_HL_diff;
+ }
+#if (RTL8195A_SUPPORT == 0)
+ else {
+ Diff = IGI_target - (s1Byte)IGI;
+ TH_L2H_dmc = pDM_Odm->TH_L2H_ini + Diff;
+ if (TH_L2H_dmc > 10)
+ TH_L2H_dmc = 10;
+
+ TH_H2L_dmc = TH_L2H_dmc - pDM_Odm->TH_EDCCA_HL_diff;
+
+ /*replace lower bound to prevent EDCCA always equal 1*/
+ if (TH_H2L_dmc < Adaptivity->H2L_lb)
+ TH_H2L_dmc = Adaptivity->H2L_lb;
+ if (TH_L2H_dmc < Adaptivity->L2H_lb)
+ TH_L2H_dmc = Adaptivity->L2H_lb;
+ }
+#endif
+ ODM_RT_TRACE(pDM_Odm, PHYDM_COMP_ADAPTIVITY, ODM_DBG_LOUD, ("API :IGI=0x%x, TH_L2H_dmc = %d, TH_H2L_dmc = %d\n", IGI, TH_L2H_dmc, TH_H2L_dmc));
+ ODM_RT_TRACE(pDM_Odm, PHYDM_COMP_ADAPTIVITY, ODM_DBG_LOUD, ("API :Adaptivity_IGI_upper=0x%x, H2L_lb = 0x%x, L2H_lb = 0x%x\n", pDM_Odm->Adaptivity_IGI_upper, Adaptivity->H2L_lb, Adaptivity->L2H_lb));
+
+ Phydm_SetEDCCAThreshold(pDM_Odm, TH_H2L_dmc, TH_L2H_dmc);
+ }
+
+}
diff --git a/rtl8188FU/hal/phydm/phydm_adaptivity.h b/rtl8188FU/hal/phydm/phydm_adaptivity.h
index ea1ab38..6af2829 100755
--- a/rtl8188FU/hal/phydm/phydm_adaptivity.h
+++ b/rtl8188FU/hal/phydm/phydm_adaptivity.h
@@ -144,6 +144,12 @@ Phydm_Adaptivity(
IN u1Byte IGI
);
+VOID
+phydm_setEDCCAThresholdAPI(
+ IN PVOID pDM_VOID,
+ IN u1Byte IGI
+);
+
#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
VOID
Phydm_DisableEDCCA(
diff --git a/rtl8188FU/hal/phydm/phydm_antdiv.c b/rtl8188FU/hal/phydm/phydm_antdiv.c
index 73f215a..f16325a 100755
--- a/rtl8188FU/hal/phydm/phydm_antdiv.c
+++ b/rtl8188FU/hal/phydm/phydm_antdiv.c
@@ -310,7 +310,7 @@ odm_UpdateTxAnt(
pDM_FatTable->antsel_b[MacId] = (TxAnt&BIT1)>>1;
pDM_FatTable->antsel_c[MacId] = (TxAnt&BIT2)>>2;
- //ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("[Tx from TxInfo]: MacID:(( %d )), TxAnt = (( %s ))\n", MacId,(Ant==MAIN_ANT)?"MAIN_ANT":"AUX_ANT"));
+ ODM_RT_TRACE(pDM_Odm, ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("[Tx from TxInfo]: MacID:(( %d )), TxAnt = (( %s ))\n", MacId, (Ant == MAIN_ANT)?"MAIN_ANT":"AUX_ANT"));
//ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD,("antsel_tr_mux=(( 3'b%d%d%d ))\n",pDM_FatTable->antsel_c[MacId] , pDM_FatTable->antsel_b[MacId] , pDM_FatTable->antsel_a[MacId] ));
}
@@ -2014,7 +2014,6 @@ odm_HW_AntDiv(
{
ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("[Linked !!!]\n"));
odm_AntDiv_on_off(pDM_Odm, ANTDIV_ON);
- odm_Tx_By_TxDesc_or_Reg(pDM_Odm , TX_BY_DESC);
//if(pDM_Odm->SupportICType == ODM_RTL8821 )
//ODM_SetBBReg(pDM_Odm, 0x800 , BIT25, 0); //CCK AntDiv function disable
@@ -2048,6 +2047,12 @@ odm_HW_AntDiv(
}
}
+ if (pDM_Odm->bOneEntryOnly == TRUE)
+ odm_Tx_By_TxDesc_or_Reg(pDM_Odm, TX_BY_REG);
+ else
+ odm_Tx_By_TxDesc_or_Reg(pDM_Odm, TX_BY_DESC);
+
+
//ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("\n AntDiv Start =>\n"));
#ifdef ODM_EVM_ENHANCE_ANTDIV
@@ -2316,6 +2321,7 @@ odm_S0S1_SwAntDiv(
ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("[No Link!!!]\n"));
if(pDM_FatTable->bBecomeLinked == TRUE)
{
+ odm_Tx_By_TxDesc_or_Reg(pDM_Odm, TX_BY_REG);
if (pDM_Odm->SupportICType == ODM_RTL8723B) {
ODM_RT_TRACE(pDM_Odm, ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("Set REG 948[9:6]=0x0\n"));
@@ -2347,6 +2353,11 @@ odm_S0S1_SwAntDiv(
pDM_FatTable->bBecomeLinked = pDM_Odm->bLinked;
}
}
+
+ if (pDM_Odm->bOneEntryOnly == TRUE)
+ odm_Tx_By_TxDesc_or_Reg(pDM_Odm, TX_BY_REG);
+ else
+ odm_Tx_By_TxDesc_or_Reg(pDM_Odm, TX_BY_DESC);
ODM_RT_TRACE(pDM_Odm, ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("[%d] { try_flag=(( %d )), Step=(( %d )), Double_chk_flag = (( %d )) }\n",
__LINE__,pDM_SWAT_Table->try_flag,Step,pDM_SWAT_Table->Double_chk_flag));
@@ -3017,11 +3028,15 @@ odm_FastAntTraining(
if(pDM_FatTable->bBecomeLinked ==FALSE)
{
ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("[Linked!!!]\n"));
- odm_Tx_By_TxDesc_or_Reg(pDM_Odm , TX_BY_DESC);
pDM_FatTable->bBecomeLinked = pDM_Odm->bLinked;
}
}
+ if (pDM_Odm->bOneEntryOnly == TRUE)
+ odm_Tx_By_TxDesc_or_Reg(pDM_Odm, TX_BY_REG);
+ else
+ odm_Tx_By_TxDesc_or_Reg(pDM_Odm, TX_BY_DESC);
+
if(pDM_Odm->SupportICType == ODM_RTL8188E)
{
@@ -3514,11 +3529,15 @@ odm_FastAntTraining_hl_smart_antenna_type1(
/*pdm_sat_table->fast_training_beam_num = 0;*/
/*phydm_set_all_ant_same_beam_num(pDM_Odm);*/
- odm_Tx_By_TxDesc_or_Reg(pDM_Odm, TX_BY_DESC);
pDM_FatTable->bBecomeLinked = pDM_Odm->bLinked;
}
}
+
+ if (pDM_Odm->bOneEntryOnly == TRUE)
+ odm_Tx_By_TxDesc_or_Reg(pDM_Odm, TX_BY_REG);
+ else
+ odm_Tx_By_TxDesc_or_Reg(pDM_Odm, TX_BY_DESC);
/*ODM_RT_TRACE(pDM_Odm, ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("HL Smart Ant Training: State (( %d ))\n", pDM_FatTable->FAT_State));*/
@@ -4092,7 +4111,7 @@ ODM_AntDiv(
if(pDM_Odm->AntType != pDM_Odm->pre_AntType)
{
odm_AntDiv_on_off(pDM_Odm, ANTDIV_ON);
- odm_Tx_By_TxDesc_or_Reg(pDM_Odm , TX_BY_DESC);
+ /*odm_Tx_By_TxDesc_or_Reg(pDM_Odm, TX_BY_DESC);*/
}
pDM_Odm->pre_AntType=pDM_Odm->AntType;
}
@@ -4526,18 +4545,7 @@ ODM_AntDiv_Config(
pDM_Odm->SupportAbility &= ~(ODM_BB_ANT_DIV);
}
#elif (DM_ODM_SUPPORT_TYPE & (ODM_CE))
-
- ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("CE Config Antenna Diversity\n"));
- if(pDM_Odm->SupportICType & ODM_ANTDIV_SUPPORT)
- {
- pDM_Odm->SupportAbility |= ODM_BB_ANT_DIV;
- }
-
- if(pDM_Odm->SupportICType==ODM_RTL8723B)
- {
- pDM_Odm->AntDivType = S0S1_SW_ANTDIV;
- }
-
+ /* do noting, branch only */
#elif (DM_ODM_SUPPORT_TYPE & (ODM_AP))
ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("AP Config Antenna Diversity\n"));
diff --git a/rtl8188FU/hal/phydm/phydm_antdiv.h b/rtl8188FU/hal/phydm/phydm_antdiv.h
index 31b5775..8d72d28 100755
--- a/rtl8188FU/hal/phydm/phydm_antdiv.h
+++ b/rtl8188FU/hal/phydm/phydm_antdiv.h
@@ -116,7 +116,7 @@
#define SWAW_STEP_DETERMINE 1
#define RSSI_CHECK_RESET_PERIOD 10
-#define RSSI_CHECK_THRESHOLD 35
+#define RSSI_CHECK_THRESHOLD 50
/*Hong Lin Smart antenna*/
#define HL_SMTANT_2WIRE_DATA_LEN 24
diff --git a/rtl8188FU/hal/phydm/phydm_debug.c b/rtl8188FU/hal/phydm/phydm_debug.c
index 871ee42..acbb01c 100755
--- a/rtl8188FU/hal/phydm/phydm_debug.c
+++ b/rtl8188FU/hal/phydm/phydm_debug.c
@@ -1958,8 +1958,11 @@ phydm_fw_trace_handler_8051(
int i = 0;
u1Byte Extend_c2hSubID = 0, Extend_c2hDbgLen = 0, Extend_c2hDbgSeq = 0;
- u1Byte fw_debug_trace[100];
+ u1Byte fw_debug_trace[128];
pu1Byte Extend_c2hDbgContent = 0;
+
+ if (CmdLen > 127)
+ return;
Extend_c2hSubID = Buffer[0];
Extend_c2hDbgLen = Buffer[1];
diff --git a/rtl8188FU/hal/phydm/rtl8188f/halhwimg8188f_bb.c b/rtl8188FU/hal/phydm/rtl8188f/halhwimg8188f_bb.c
index 8cde4c6..e3dd26e 100755
--- a/rtl8188FU/hal/phydm/rtl8188f/halhwimg8188f_bb.c
+++ b/rtl8188FU/hal/phydm/rtl8188f/halhwimg8188f_bb.c
@@ -246,7 +246,7 @@ ODM_ReadAndConfig_MP_8188F_AGC_TAB(
u4Byte
ODM_GetVersion_MP_8188F_AGC_TAB(void)
{
- return 24;
+ return 28;
}
/******************************************************************************
@@ -309,7 +309,11 @@ u4Byte Array_MP_8188F_PHY_REG[] = {
0x96C, 0x00000003,
0xA00, 0x00D047C8,
0xA04, 0x80FF800C,
+ 0x80000400, 0x00000000, 0x40000000, 0x00000000,
0xA08, 0x8C038300,
+ 0xA0000000, 0x00000000,
+ 0xA08, 0x8C898300,
+ 0xB0000000, 0x00000000,
0xA0C, 0x2E7F120F,
0xA10, 0x9500BB78,
0xA14, 0x1114D028,
@@ -366,7 +370,11 @@ u4Byte Array_MP_8188F_PHY_REG[] = {
0xC78, 0x0000001F,
0xC7C, 0x00B91612,
0xC80, 0x390000E4,
+ 0x80000400, 0x00000000, 0x40000000, 0x00000000,
+ 0xC84, 0x21F60000,
+ 0xA0000000, 0x00000000,
0xC84, 0x11F60000,
+ 0xB0000000, 0x00000000,
0xC88, 0x40000100,
0xC8C, 0x20200000,
0xC90, 0x00091521,
@@ -521,7 +529,7 @@ ODM_ReadAndConfig_MP_8188F_PHY_REG(
u4Byte
ODM_GetVersion_MP_8188F_PHY_REG(void)
{
- return 24;
+ return 28;
}
/******************************************************************************
diff --git a/rtl8188FU/hal/phydm/rtl8188f/halhwimg8188f_fw.c b/rtl8188FU/hal/phydm/rtl8188f/halhwimg8188f_fw.c
index b729cd5..ab5fe73 100755
--- a/rtl8188FU/hal/phydm/rtl8188f/halhwimg8188f_fw.c
+++ b/rtl8188FU/hal/phydm/rtl8188f/halhwimg8188f_fw.c
@@ -27,31 +27,31 @@
u1Byte Array_MP_8188F_FW_AP[] = {
-0xF1, 0x88, 0x20, 0x00, 0x01, 0x00, 0x01, 0x00, 0x09, 0x22, 0x15, 0x56, 0xD2, 0x43, 0x02, 0x00,
-0xAF, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x02, 0x87, 0x32, 0x02, 0xB8, 0x2B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x02, 0xAC, 0x37, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x02, 0xB8, 0x7D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0xF1, 0x88, 0x20, 0x00, 0x01, 0x00, 0x0D, 0x00, 0x11, 0x25, 0x17, 0x05, 0x90, 0x44, 0x02, 0x00,
+0x2F, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x02, 0x87, 0x32, 0x02, 0xB8, 0x9F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x02, 0xA7, 0x8B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x02, 0xB8, 0xF1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x02, 0xB8, 0x2C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xA9, 0xC0, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x02, 0xB8, 0x7C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x02, 0xB8, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xA3, 0x08, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x02, 0xB8, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x02, 0x87, 0xDA, 0x02, 0x96, 0x33, 0x02, 0x80, 0x86, 0x02, 0x80, 0x89, 0x02, 0x80, 0x8C, 0x02,
-0x8D, 0x34, 0x02, 0xAD, 0xED, 0x02, 0x80, 0x95, 0x02, 0x80, 0x98, 0x02, 0x80, 0x9B, 0x02, 0x80,
+0x02, 0x87, 0xDA, 0x02, 0x94, 0x6F, 0x02, 0x80, 0x86, 0x02, 0x80, 0x89, 0x02, 0x80, 0x8C, 0x02,
+0x8D, 0x32, 0x02, 0xA5, 0x2A, 0x02, 0x80, 0x95, 0x02, 0x80, 0x98, 0x02, 0x80, 0x9B, 0x02, 0x80,
0x9E, 0x02, 0x80, 0xA1, 0x02, 0x80, 0xA4, 0x02, 0x80, 0xA7, 0x02, 0x80, 0xAA, 0x02, 0x80, 0xAD,
-0x02, 0x80, 0xB0, 0x02, 0x89, 0x03, 0x02, 0x80, 0xB6, 0x02, 0x80, 0xB9, 0x02, 0xB2, 0x46, 0x02,
-0xA0, 0x9E, 0x02, 0xA0, 0x27, 0x02, 0xA7, 0x15, 0x02, 0xAE, 0x20, 0x02, 0xB1, 0xDD, 0x02, 0x80,
+0x02, 0x80, 0xB0, 0x02, 0x89, 0x14, 0x02, 0x80, 0xB6, 0x02, 0x80, 0xB9, 0x02, 0xB7, 0xD8, 0x02,
+0xA0, 0x9C, 0x02, 0xA0, 0x25, 0x02, 0x9F, 0x96, 0x02, 0xA5, 0xC2, 0x02, 0xB7, 0x6F, 0x02, 0x80,
0xCE, 0x02, 0x80, 0xD1, 0x02, 0x80, 0xD4, 0x02, 0x80, 0xD7, 0x00, 0x00, 0x00, 0x02, 0x80, 0xDD,
-0x02, 0x80, 0xE0, 0x02, 0x80, 0xE3, 0x02, 0x80, 0xE6, 0x02, 0xC2, 0xD9, 0x02, 0x80, 0xEC, 0x02,
+0x02, 0x80, 0xE0, 0x02, 0x80, 0xE3, 0x02, 0x80, 0xE6, 0x02, 0xC3, 0xA4, 0x02, 0x80, 0xEC, 0x02,
0x80, 0xEF, 0x02, 0x80, 0xF2, 0x02, 0x80, 0xF5, 0x02, 0x80, 0xF8, 0x02, 0x80, 0xFB, 0x02, 0x80,
0xFE, 0x02, 0x81, 0x01, 0x02, 0x81, 0x04, 0x02, 0x81, 0x07, 0x02, 0x81, 0x0A, 0x02, 0x81, 0x0D,
0x02, 0x81, 0x10, 0x02, 0x81, 0x13, 0x02, 0x81, 0x16, 0x02, 0x81, 0x19, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x02, 0x93, 0x38, 0x02, 0xB9, 0x12, 0x02, 0x90, 0xFA, 0x02, 0x90, 0xEF,
-0x02, 0x81, 0x40, 0x02, 0x8E, 0x92, 0x02, 0xBE, 0xD6, 0x02, 0x81, 0x49, 0x02, 0x81, 0x4C, 0x02,
+0x00, 0x00, 0x00, 0x00, 0x02, 0x92, 0x5D, 0x02, 0xB9, 0x50, 0x02, 0x90, 0xF1, 0x02, 0x90, 0xE6,
+0x02, 0x81, 0x40, 0x02, 0x8E, 0x93, 0x02, 0xBF, 0x9E, 0x02, 0x81, 0x49, 0x02, 0x81, 0x4C, 0x02,
0x81, 0x4F, 0x02, 0x81, 0x52, 0x02, 0x81, 0x55, 0x02, 0x81, 0x58, 0x02, 0x81, 0x5B, 0x02, 0x91,
-0x5D, 0x02, 0x81, 0x61, 0x02, 0x81, 0x64, 0x02, 0xBF, 0x9F, 0x02, 0xC2, 0x13, 0x02, 0xC2, 0x46,
+0x4A, 0x02, 0x81, 0x61, 0x02, 0x81, 0x64, 0x02, 0xC0, 0x75, 0x02, 0xC3, 0x01, 0x02, 0xC2, 0xDA,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
@@ -75,10 +75,10 @@ u1Byte Array_MP_8188F_FW_AP[] = {
0x20, 0x21, 0x1F, 0x16, 0x0C, 0x00, 0x20, 0x31, 0x2F, 0x20, 0x14, 0x00, 0x30, 0x31, 0x2F, 0x18,
0x10, 0x00, 0x30, 0x31, 0x2C, 0x18, 0x0C, 0x00, 0x30, 0x31, 0x2A, 0x14, 0x0C, 0x00, 0x30, 0x31,
0x28, 0x14, 0x00, 0x00, 0x30, 0x31, 0x24, 0x14, 0x00, 0x00, 0x30, 0x31, 0x1E, 0x14, 0x00, 0x00,
-0x30, 0x04, 0x04, 0x04, 0x05, 0x08, 0x08, 0x09, 0x09, 0x0C, 0x0E, 0x10, 0x12, 0x06, 0x0B, 0x0D,
-0x0E, 0x0F, 0x11, 0x12, 0x14, 0x00, 0x04, 0x00, 0x04, 0x00, 0x08, 0x00, 0x10, 0x00, 0x23, 0x00,
-0x2D, 0x00, 0x50, 0x00, 0x91, 0x00, 0xC3, 0x01, 0x27, 0x01, 0x31, 0x01, 0x5E, 0x00, 0xC8, 0x00,
-0xF0, 0x00, 0xDC, 0x01, 0x5E, 0x01, 0x68, 0x01, 0x9A, 0x01, 0xCC, 0x01, 0xEA, 0x02, 0x02, 0x04,
+0x30, 0x02, 0x02, 0x03, 0x04, 0x04, 0x08, 0x09, 0x09, 0x0C, 0x0E, 0x10, 0x12, 0x02, 0x09, 0x0B,
+0x0E, 0x0D, 0x0F, 0x10, 0x12, 0x00, 0x04, 0x00, 0x04, 0x00, 0x08, 0x00, 0x10, 0x00, 0x23, 0x00,
+0x2D, 0x00, 0x50, 0x00, 0x91, 0x00, 0xC3, 0x01, 0x27, 0x01, 0x31, 0x01, 0x5E, 0x00, 0x8C, 0x00,
+0xC8, 0x00, 0xDC, 0x01, 0x5E, 0x01, 0x68, 0x01, 0x9A, 0x01, 0xCC, 0x01, 0xEA, 0x02, 0x02, 0x04,
0x08, 0x0C, 0x12, 0x18, 0x24, 0x30, 0x48, 0x60, 0x6C, 0x14, 0x28, 0x32, 0x50, 0x78, 0xA0, 0xC8,
0xE6, 0x01, 0x01, 0x01, 0x02, 0x01, 0x01, 0x02, 0x02, 0x03, 0x03, 0x04, 0x04, 0x02, 0x04, 0x06,
0x07, 0x07, 0x08, 0x08, 0x08, 0x01, 0x01, 0x01, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02,
@@ -152,971 +152,983 @@ u1Byte Array_MP_8188F_FW_AP[] = {
0x54, 0x1F, 0xFE, 0xE4, 0x93, 0xA3, 0x60, 0x01, 0x0E, 0xCF, 0x54, 0xC0, 0x25, 0xE0, 0x60, 0xA8,
0x40, 0xB8, 0xE4, 0x93, 0xA3, 0xFA, 0xE4, 0x93, 0xA3, 0xF8, 0xE4, 0x93, 0xA3, 0xC8, 0xC5, 0x82,
0xC8, 0xCA, 0xC5, 0x83, 0xCA, 0xF0, 0xA3, 0xC8, 0xC5, 0x82, 0xC8, 0xCA, 0xC5, 0x83, 0xCA, 0xDF,
-0xE9, 0xDE, 0xE7, 0x80, 0xBE, 0x41, 0x93, 0x9F, 0x00, 0x41, 0x93, 0xA0, 0x00, 0x41, 0x93, 0xA5,
-0x00, 0x44, 0x93, 0x8B, 0x41, 0x4E, 0x59, 0x00, 0x44, 0x93, 0x87, 0x61, 0x6E, 0x79, 0x00, 0x41,
-0x93, 0xA7, 0x00, 0x00, 0xB2, 0xB4, 0xB6, 0xC2, 0xA7, 0x66, 0x90, 0x93, 0xA3, 0xEF, 0xF0, 0x7F,
-0x02, 0xD1, 0x27, 0x90, 0x84, 0xC1, 0xE0, 0xFF, 0x90, 0x93, 0xA3, 0xE0, 0xFE, 0xEF, 0x4E, 0x90,
+0xE9, 0xDE, 0xE7, 0x80, 0xBE, 0x41, 0x93, 0xB7, 0x00, 0x41, 0x93, 0xB8, 0x00, 0x41, 0x93, 0xBD,
+0x00, 0x44, 0x93, 0xA3, 0x41, 0x4E, 0x59, 0x00, 0x44, 0x93, 0x9F, 0x61, 0x6E, 0x79, 0x00, 0x41,
+0x93, 0xBF, 0x00, 0x00, 0xB2, 0x73, 0xB5, 0xF2, 0xB8, 0x3A, 0x90, 0x93, 0xBB, 0xEF, 0xF0, 0x7F,
+0x02, 0xD1, 0x27, 0x90, 0x84, 0xC1, 0xE0, 0xFF, 0x90, 0x93, 0xBB, 0xE0, 0xFE, 0xEF, 0x4E, 0x90,
0x84, 0xC1, 0xF0, 0x22, 0x90, 0x02, 0x09, 0xE0, 0xF5, 0x5B, 0x12, 0x02, 0xF6, 0x25, 0x5B, 0x90,
-0x84, 0xC6, 0xF0, 0xD1, 0xF7, 0x25, 0x5B, 0x90, 0x84, 0xC7, 0x71, 0xD8, 0x25, 0x5B, 0x90, 0x84,
+0x84, 0xC6, 0xF0, 0xD1, 0xF8, 0x25, 0x5B, 0x90, 0x84, 0xC7, 0x71, 0xE5, 0x25, 0x5B, 0x90, 0x84,
0xC8, 0xF0, 0x90, 0x00, 0x03, 0x12, 0x03, 0x0F, 0x25, 0x5B, 0x90, 0x84, 0xC9, 0xF0, 0x90, 0x00,
0x04, 0x12, 0x03, 0x0F, 0x25, 0x5B, 0x90, 0x84, 0xCA, 0xF0, 0x90, 0x00, 0x05, 0x12, 0x03, 0x0F,
0x25, 0x5B, 0x90, 0x84, 0xCB, 0xF0, 0x11, 0x3F, 0x25, 0x5B, 0x90, 0x84, 0xCC, 0xF0, 0x22, 0x90,
-0x00, 0x06, 0x02, 0x03, 0x0F, 0xF1, 0xC3, 0x12, 0x02, 0xF6, 0xFF, 0x54, 0x7F, 0x90, 0x85, 0xC5,
-0xF0, 0xEF, 0x71, 0xE3, 0xA3, 0xF0, 0xD1, 0xF7, 0xFF, 0x54, 0xF0, 0xC4, 0x54, 0x0F, 0xFE, 0x90,
-0x85, 0xC3, 0xE0, 0x54, 0xF0, 0x4E, 0x12, 0xA8, 0x6C, 0x25, 0xE0, 0xFE, 0x90, 0x85, 0xC1, 0xE0,
-0x54, 0xFD, 0x4E, 0xF0, 0xEF, 0x54, 0x0F, 0xC4, 0x54, 0xF0, 0xFF, 0xF1, 0xCA, 0x71, 0xD7, 0x90,
-0x85, 0xC4, 0xF0, 0x11, 0x3F, 0x30, 0xE0, 0x52, 0xC3, 0x13, 0x54, 0x07, 0xFF, 0xC3, 0x94, 0x04,
-0x90, 0x85, 0xD8, 0x50, 0x04, 0xEF, 0xF0, 0x80, 0x2A, 0x74, 0x03, 0xF0, 0x11, 0xFD, 0xE9, 0x24,
-0x06, 0xF9, 0xE4, 0x3A, 0xFA, 0x12, 0x02, 0xF6, 0xFF, 0x74, 0x03, 0x24, 0xFD, 0xFE, 0xEF, 0xC4,
-0x54, 0x0F, 0xFD, 0xEF, 0x54, 0x0F, 0xFF, 0xED, 0x2E, 0x54, 0x0F, 0xFE, 0xC4, 0x54, 0xF0, 0x4F,
-0x12, 0x03, 0x3C, 0x11, 0xFD, 0x11, 0x3F, 0xC4, 0x54, 0x0F, 0xFF, 0xC3, 0x94, 0x04, 0x90, 0x85,
-0xCD, 0x50, 0x05, 0x74, 0x04, 0xF0, 0x80, 0x02, 0xEF, 0xF0, 0x11, 0xFD, 0x90, 0x00, 0x04, 0x12,
-0x03, 0x0F, 0xFD, 0x7F, 0x02, 0x12, 0x57, 0x82, 0x11, 0xFD, 0x12, 0x71, 0xCB, 0x12, 0xAA, 0x4D,
-0xF0, 0x90, 0x85, 0xC5, 0xF1, 0xFB, 0xF1, 0xC9, 0x90, 0x01, 0xBE, 0xF0, 0x22, 0x90, 0x92, 0x07,
-0x02, 0x86, 0xFA, 0xF1, 0xC3, 0x11, 0xFD, 0x12, 0x02, 0xF6, 0x54, 0x7F, 0xFD, 0xD1, 0xF7, 0xFE,
-0x54, 0x1F, 0x90, 0x92, 0x0B, 0x71, 0xDF, 0x90, 0x92, 0x0A, 0x71, 0xD8, 0xFE, 0x54, 0x03, 0xFC,
-0xEE, 0x54, 0x30, 0xC4, 0x54, 0x0F, 0x90, 0x92, 0x0D, 0x71, 0xD8, 0xFE, 0x54, 0x40, 0xC4, 0x13,
-0x13, 0x54, 0x03, 0x90, 0x92, 0x0C, 0x71, 0xDF, 0xFF, 0x71, 0xD9, 0xFB, 0x54, 0x08, 0x13, 0x13,
-0x13, 0x54, 0x1F, 0x90, 0x92, 0x0F, 0xF0, 0xFA, 0xEB, 0x54, 0x04, 0x13, 0x13, 0x54, 0x3F, 0xA3,
-0xF0, 0xEF, 0x54, 0x01, 0xC4, 0x33, 0x33, 0x33, 0x54, 0x80, 0x51, 0x6B, 0x54, 0x7F, 0x4F, 0xF0,
-0x90, 0x92, 0x0C, 0xE0, 0x54, 0x01, 0xC4, 0x33, 0x33, 0x54, 0xC0, 0x51, 0x6B, 0x54, 0xBF, 0x4F,
-0xF0, 0xEA, 0x60, 0x02, 0x41, 0x6A, 0x90, 0x92, 0x0B, 0xE0, 0x54, 0x1F, 0xFF, 0x75, 0xF0, 0x12,
-0xED, 0x71, 0xEF, 0x54, 0xE0, 0x4F, 0xF0, 0xEC, 0x54, 0x03, 0x51, 0x6B, 0x54, 0xFC, 0x4F, 0xF0,
-0xEC, 0x54, 0x03, 0x25, 0xE0, 0x25, 0xE0, 0x51, 0x6B, 0x54, 0xF3, 0x4F, 0xF0, 0x90, 0x92, 0x0A,
-0xE0, 0x54, 0x01, 0xC4, 0x33, 0x54, 0xE0, 0xFF, 0x75, 0xF0, 0x12, 0xED, 0x71, 0xEF, 0x54, 0xDF,
-0x4F, 0xF0, 0x90, 0x92, 0x0D, 0xE0, 0x54, 0x03, 0xC4, 0x54, 0xF0, 0x51, 0x6B, 0x54, 0xCF, 0x4F,
-0xF1, 0xD1, 0xF5, 0x83, 0xE0, 0x54, 0xFB, 0xF1, 0xD1, 0xF5, 0x83, 0xC0, 0x83, 0xC0, 0x82, 0xE0,
-0xFF, 0x90, 0x92, 0x10, 0xE0, 0x25, 0xE0, 0x25, 0xE0, 0xFE, 0xEF, 0x4E, 0xD0, 0x82, 0xD0, 0x83,
-0xF0, 0x90, 0x93, 0x19, 0xE0, 0x60, 0x3A, 0x11, 0xFD, 0xE9, 0x24, 0x03, 0xF9, 0xE4, 0x3A, 0xFA,
-0x12, 0x02, 0xF6, 0x54, 0x1F, 0x12, 0x03, 0x3C, 0x90, 0x92, 0x0E, 0x74, 0x01, 0xF0, 0x90, 0x92,
-0x0E, 0xE0, 0xFF, 0xC3, 0x94, 0x04, 0x50, 0x19, 0xEF, 0x24, 0x03, 0xFF, 0xE4, 0x33, 0xFE, 0x11,
-0xFD, 0x8F, 0x82, 0x8E, 0x83, 0xE4, 0x12, 0x03, 0x4E, 0x90, 0x92, 0x0E, 0xE0, 0x04, 0xF0, 0x80,
-0xDD, 0x90, 0x93, 0x17, 0xE0, 0x54, 0x07, 0xFF, 0xBF, 0x05, 0x0A, 0xEC, 0xB4, 0x01, 0x06, 0x90,
-0x93, 0x1C, 0x74, 0x01, 0xF0, 0xE4, 0x90, 0x92, 0x0E, 0xF0, 0x90, 0x92, 0x0E, 0xE0, 0xFC, 0x24,
-0x03, 0xFF, 0xE4, 0x33, 0xFE, 0x11, 0xFD, 0x8F, 0x82, 0x8E, 0x83, 0x12, 0x03, 0x0F, 0xFF, 0xED,
-0x12, 0xBC, 0x06, 0xE5, 0x82, 0x2C, 0x12, 0xAE, 0x18, 0xEF, 0xF0, 0x90, 0x92, 0x0E, 0xE0, 0x04,
-0xF0, 0xE0, 0xB4, 0x04, 0xD5, 0xAF, 0x05, 0x12, 0x17, 0x8E, 0x22, 0xFF, 0x75, 0xF0, 0x12, 0xED,
-0x90, 0x89, 0x3F, 0x12, 0x05, 0x28, 0xE0, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0xF1,
-0xBC, 0x20, 0xE6, 0x02, 0x61, 0x9E, 0x90, 0x00, 0x8C, 0xE0, 0x90, 0x93, 0x96, 0xF0, 0x7F, 0x8D,
-0x12, 0x7B, 0x51, 0x90, 0x93, 0x97, 0xEF, 0xF0, 0x90, 0x00, 0x8E, 0xE0, 0x90, 0x93, 0x98, 0xF0,
-0x90, 0x93, 0x97, 0xE0, 0x24, 0xFC, 0x60, 0x10, 0x24, 0x03, 0x60, 0x02, 0x61, 0x92, 0x90, 0x93,
-0x96, 0xE0, 0xFF, 0x12, 0xBC, 0x14, 0x61, 0x92, 0x90, 0x93, 0x96, 0xE0, 0x24, 0xDC, 0xF5, 0x82,
-0xE4, 0x34, 0x8F, 0xF5, 0x83, 0xE0, 0xFB, 0xE4, 0xFD, 0xFF, 0x71, 0xD0, 0x75, 0xF0, 0x12, 0x51,
-0x70, 0x13, 0x13, 0x54, 0x03, 0xFB, 0x0D, 0xE4, 0xFF, 0x71, 0xD0, 0x75, 0xF0, 0x12, 0x51, 0x70,
-0x71, 0xE3, 0xFB, 0x0D, 0xE4, 0xFF, 0x71, 0xD0, 0x75, 0xF0, 0x12, 0x51, 0x70, 0xC4, 0x54, 0x03,
-0xFB, 0x0D, 0xE4, 0xFF, 0x71, 0xD0, 0xF1, 0xDB, 0xFB, 0xE4, 0xFD, 0x0F, 0x71, 0xD0, 0x75, 0xF0,
-0x12, 0x90, 0x89, 0x3D, 0x12, 0x05, 0x28, 0x71, 0xCD, 0x75, 0xF0, 0x12, 0x71, 0xEF, 0xC4, 0x13,
-0x54, 0x01, 0xFB, 0x0D, 0x7F, 0x01, 0x71, 0xD0, 0x75, 0xF0, 0x12, 0x71, 0xEF, 0x54, 0x1F, 0x71,
-0xCE, 0x12, 0xBC, 0x06, 0xE0, 0xFB, 0xE4, 0xFD, 0x0F, 0x71, 0xD0, 0x75, 0xF0, 0x08, 0xA4, 0x24,
-0x01, 0xF5, 0x82, 0xE4, 0x34, 0x82, 0x71, 0xCB, 0x75, 0xF0, 0x08, 0xA4, 0x24, 0x02, 0xF5, 0x82,
-0xE4, 0x34, 0x82, 0x71, 0xCB, 0x75, 0xF0, 0x08, 0xA4, 0x24, 0x03, 0xF5, 0x82, 0xE4, 0x34, 0x82,
-0x71, 0xCB, 0x75, 0xF0, 0x08, 0xA4, 0x24, 0x04, 0xF5, 0x82, 0xE4, 0x34, 0x82, 0xF5, 0x83, 0xE0,
-0xFB, 0xE4, 0xFD, 0x0F, 0x71, 0xD0, 0x75, 0xF0, 0x08, 0xA4, 0x24, 0x05, 0xF5, 0x82, 0xE4, 0x34,
-0x82, 0x71, 0xCB, 0x75, 0xF0, 0x08, 0xA4, 0x24, 0x06, 0xF5, 0x82, 0xE4, 0x34, 0x82, 0x71, 0xCB,
-0x75, 0xF0, 0x08, 0xA4, 0x24, 0x07, 0xF5, 0x82, 0xE4, 0x34, 0x82, 0xF5, 0x83, 0xE0, 0xFB, 0x0D,
-0x71, 0xA3, 0xF1, 0xBC, 0x30, 0xE0, 0x07, 0xE4, 0xFD, 0x7F, 0x8D, 0x12, 0x7B, 0x3E, 0xD0, 0xD0,
-0x92, 0xAF, 0x22, 0xEF, 0x70, 0x04, 0x74, 0xF0, 0x80, 0x16, 0xEF, 0xB4, 0x01, 0x04, 0x74, 0xF4,
-0x80, 0x0E, 0xEF, 0xB4, 0x02, 0x04, 0x74, 0xF8, 0x80, 0x06, 0xEF, 0xB4, 0x03, 0x0C, 0x74, 0xFC,
-0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x02, 0xF5, 0x83, 0xEB, 0xF0, 0x22, 0xF5, 0x83, 0xE0, 0xFB, 0x0D,
-0x71, 0xA3, 0x90, 0x93, 0x96, 0xE0, 0x22, 0x4F, 0xF0, 0x90, 0x00, 0x02, 0x02, 0x03, 0x0F, 0xF0,
-0xEE, 0x54, 0x80, 0xC4, 0x13, 0x13, 0x13, 0x54, 0x01, 0x22, 0x75, 0xF0, 0x12, 0xE5, 0x6E, 0x90,
-0x89, 0x3E, 0x12, 0x05, 0x28, 0xE0, 0x22, 0x8F, 0x6E, 0x8D, 0x6F, 0xEF, 0xF1, 0x8A, 0xE0, 0xF5,
-0x70, 0x54, 0x7F, 0xF5, 0x71, 0xE5, 0x70, 0x54, 0x80, 0xF5, 0x73, 0x75, 0xF0, 0x12, 0xEF, 0xF1,
-0xDE, 0xF5, 0x75, 0x75, 0xF0, 0x12, 0xEF, 0x51, 0x70, 0xC4, 0x54, 0x03, 0xF5, 0x76, 0xD1, 0xFD,
-0x74, 0xFF, 0xF0, 0x12, 0x9F, 0xB1, 0xE5, 0x70, 0x45, 0x73, 0xFF, 0xF1, 0xE6, 0xEF, 0xF0, 0xE5,
-0x6E, 0xF1, 0xAF, 0xE0, 0x54, 0x03, 0xF5, 0x74, 0x74, 0x4C, 0x25, 0x6E, 0xF5, 0x82, 0xE4, 0x34,
-0x90, 0xF5, 0x83, 0xE5, 0x74, 0xF0, 0xE5, 0x71, 0x65, 0x75, 0x70, 0x42, 0x71, 0xEA, 0xC4, 0x13,
-0x54, 0x07, 0x30, 0xE0, 0x0C, 0xE5, 0x73, 0x70, 0x08, 0xE5, 0x71, 0x44, 0x80, 0xF5, 0x70, 0x81,
-0xFB, 0x12, 0x9F, 0xB1, 0xE5, 0x6E, 0x12, 0xBA, 0xAA, 0xE0, 0xFF, 0xA3, 0xE0, 0x12, 0xC3, 0x27,
-0xE4, 0xF0, 0xA3, 0xE5, 0x6E, 0xF0, 0xE4, 0x90, 0x92, 0x49, 0x12, 0x99, 0x09, 0x7B, 0x01, 0xFA,
-0x7D, 0x02, 0x7F, 0x04, 0x12, 0x9E, 0xF1, 0x7D, 0x07, 0xAF, 0x6E, 0x02, 0xB9, 0x46, 0xE5, 0x71,
-0xC3, 0x95, 0x75, 0x50, 0x5F, 0xAB, 0x6E, 0xAD, 0x75, 0xAF, 0x71, 0x12, 0x72, 0xEA, 0x8F, 0x72,
-0x85, 0x72, 0x70, 0x71, 0xEA, 0xC4, 0x13, 0x54, 0x01, 0xFF, 0x90, 0x92, 0x49, 0xE4, 0x12, 0xC3,
-0x2B, 0xE4, 0xF0, 0xA3, 0xE5, 0x72, 0xF0, 0xA3, 0xE4, 0xF0, 0xA3, 0xE5, 0x71, 0xF0, 0xE5, 0x73,
-0x71, 0xE3, 0x12, 0xC3, 0x65, 0xE4, 0xFB, 0xFA, 0x7D, 0x05, 0x7F, 0x04, 0x12, 0x9E, 0xF1, 0xE5,
-0x71, 0xC3, 0x94, 0x0C, 0x40, 0x25, 0x71, 0xEA, 0xC4, 0x13, 0x54, 0x07, 0x30, 0xE0, 0x1C, 0xE5,
-0x6F, 0x60, 0x18, 0xE5, 0x73, 0x70, 0x14, 0xE5, 0x71, 0x44, 0x80, 0xF5, 0x70, 0xD1, 0xFD, 0xE5,
-0x72, 0xF0, 0x80, 0x07, 0xF1, 0xE6, 0xE5, 0x75, 0xF0, 0xF5, 0x70, 0x90, 0x92, 0x45, 0xE4, 0xF0,
-0xA3, 0xE5, 0x70, 0xF0, 0xD1, 0xFD, 0xE0, 0xFF, 0xF1, 0xF4, 0xEF, 0xF0, 0xA3, 0xE4, 0xF0, 0xA3,
-0xE5, 0x74, 0xF0, 0xA3, 0xE4, 0xF0, 0xA3, 0xE5, 0x6F, 0xF0, 0x7B, 0x01, 0x7A, 0x00, 0x7D, 0x05,
-0x7F, 0x04, 0x12, 0x9E, 0xF1, 0x90, 0x91, 0x0B, 0xE5, 0x74, 0xF0, 0xAB, 0x6F, 0xAD, 0x70, 0xAF,
-0x6E, 0x02, 0x27, 0x3D, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x93, 0xA6, 0xED, 0xF0,
-0x90, 0x85, 0xC1, 0xE0, 0xFE, 0xC4, 0x13, 0x13, 0x54, 0x03, 0x30, 0xE0, 0x02, 0xC1, 0x8D, 0xEE,
-0x71, 0xE3, 0x30, 0xE0, 0x02, 0xC1, 0x8D, 0x90, 0x85, 0xC8, 0xE0, 0xFE, 0x6F, 0x70, 0x02, 0xC1,
-0x8D, 0xEF, 0x70, 0x02, 0xA1, 0xF9, 0x24, 0xFE, 0x70, 0x02, 0xC1, 0x36, 0x24, 0xFE, 0x60, 0x4D,
-0x24, 0xFC, 0x70, 0x02, 0xC1, 0x75, 0x24, 0xFC, 0x60, 0x02, 0xC1, 0x87, 0xEE, 0xB4, 0x0E, 0x03,
-0x12, 0x74, 0x93, 0x90, 0x85, 0xC8, 0xE0, 0x70, 0x05, 0x7F, 0x01, 0x12, 0x79, 0x80, 0x90, 0x85,
-0xC8, 0xE0, 0xB4, 0x06, 0x03, 0x12, 0x73, 0x8E, 0x90, 0x85, 0xC8, 0xE0, 0xB4, 0x04, 0x0F, 0x90,
-0x93, 0xA6, 0xE0, 0xFF, 0x60, 0x05, 0x12, 0x6D, 0x4C, 0x80, 0x03, 0x12, 0x79, 0x61, 0x90, 0x85,
-0xC8, 0xE0, 0x64, 0x08, 0x60, 0x02, 0xC1, 0x87, 0x12, 0x7A, 0xB9, 0xC1, 0x87, 0x90, 0x85, 0xC8,
-0xE0, 0x70, 0x05, 0x7F, 0x01, 0x12, 0x79, 0x80, 0x90, 0x85, 0xC8, 0xE0, 0xB4, 0x06, 0x03, 0x12,
-0x73, 0x8E, 0x90, 0x85, 0xC8, 0xE0, 0xB4, 0x0E, 0x08, 0xD1, 0x92, 0xBF, 0x01, 0x03, 0x12, 0x74,
-0x93, 0x90, 0x85, 0xC8, 0xE0, 0x64, 0x0C, 0x60, 0x02, 0xC1, 0x87, 0xD1, 0x92, 0xEF, 0x64, 0x01,
-0x60, 0x02, 0xC1, 0x87, 0x12, 0x70, 0x9E, 0xC1, 0x87, 0x90, 0x85, 0xC8, 0xE0, 0xB4, 0x0E, 0x08,
-0xD1, 0x92, 0xBF, 0x01, 0x03, 0x12, 0x74, 0x93, 0x90, 0x85, 0xC8, 0xE0, 0xB4, 0x06, 0x03, 0x12,
-0x73, 0x8E, 0x90, 0x85, 0xC8, 0xE0, 0xB4, 0x0C, 0x08, 0xD1, 0x92, 0xBF, 0x01, 0x03, 0x12, 0x70,
-0x9E, 0x90, 0x85, 0xC8, 0xE0, 0x64, 0x04, 0x70, 0x5E, 0x12, 0xBE, 0xD6, 0xEF, 0x64, 0x01, 0x70,
-0x56, 0x12, 0x77, 0xFE, 0x80, 0x51, 0x90, 0x85, 0xC8, 0xE0, 0xB4, 0x0E, 0x08, 0xD1, 0x92, 0xBF,
-0x01, 0x03, 0x12, 0x74, 0x93, 0x90, 0x85, 0xC8, 0xE0, 0xB4, 0x06, 0x03, 0x12, 0x73, 0x8E, 0x90,
-0x85, 0xC8, 0xE0, 0xB4, 0x0C, 0x08, 0xD1, 0x92, 0xBF, 0x01, 0x03, 0x12, 0x70, 0x9E, 0x90, 0x85,
-0xC8, 0xE0, 0x70, 0x05, 0x7F, 0x01, 0x12, 0x79, 0x80, 0x90, 0x85, 0xC8, 0xE0, 0xB4, 0x04, 0x17,
-0x12, 0x79, 0xF3, 0x80, 0x12, 0x90, 0x85, 0xC8, 0xE0, 0xB4, 0x0C, 0x0B, 0x12, 0xAB, 0x06, 0x54,
-0x3F, 0x30, 0xE0, 0x03, 0x12, 0x7A, 0x8A, 0x90, 0x85, 0xC8, 0xF1, 0xFB, 0xF0, 0xD0, 0xD0, 0x92,
-0xAF, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x12, 0x7A, 0x29, 0xEF, 0x64, 0x01, 0x60,
-0x05, 0x75, 0x0E, 0x01, 0x80, 0x3B, 0x90, 0x85, 0xC1, 0xE0, 0x13, 0x13, 0x13, 0x54, 0x1F, 0x30,
-0xE0, 0x05, 0x75, 0x0E, 0x02, 0x80, 0x2A, 0x90, 0x85, 0xC7, 0xE0, 0xD3, 0x94, 0x04, 0x40, 0x05,
-0x75, 0x0E, 0x08, 0x80, 0x1C, 0x90, 0x93, 0x09, 0xE0, 0x30, 0xE0, 0x0C, 0x13, 0x13, 0x54, 0x3F,
-0x30, 0xE0, 0x05, 0x75, 0x0E, 0x11, 0x80, 0x09, 0x90, 0x01, 0xB8, 0xE4, 0xF0, 0x7F, 0x01, 0x80,
-0x0E, 0x90, 0x01, 0xB9, 0x74, 0x02, 0xF0, 0x90, 0x01, 0xB8, 0xE5, 0x0E, 0xF0, 0x7F, 0x00, 0xD0,
-0xD0, 0x92, 0xAF, 0x22, 0x12, 0x86, 0xFA, 0x90, 0x00, 0x01, 0x02, 0x03, 0x0F, 0x74, 0x60, 0x25,
-0x6E, 0xF5, 0x82, 0xE4, 0x34, 0x93, 0xF5, 0x83, 0x22, 0x8D, 0x78, 0xEF, 0x30, 0xE6, 0x1A, 0xF1,
-0x88, 0xF1, 0xAB, 0xE0, 0x54, 0x03, 0x90, 0x91, 0x0B, 0xF0, 0xE4, 0xFB, 0xAF, 0x78, 0x12, 0x27,
-0x3D, 0xF1, 0x7B, 0xF1, 0x97, 0x74, 0x01, 0x80, 0x49, 0xF1, 0x9E, 0x04, 0xF0, 0xF1, 0x9E, 0x64,
-0x02, 0x70, 0x1E, 0x74, 0x60, 0x25, 0x78, 0xF1, 0x01, 0xE0, 0xFD, 0xF4, 0x60, 0x02, 0x80, 0x04,
-0xF1, 0x88, 0xE0, 0xFD, 0xF1, 0xAD, 0x12, 0xC3, 0x89, 0xF1, 0x88, 0xF1, 0x97, 0x74, 0x02, 0x80,
-0x21, 0xF1, 0x9E, 0xD3, 0x94, 0x03, 0x40, 0x0D, 0xAF, 0x78, 0x12, 0x6D, 0x94, 0xF1, 0x7B, 0xF1,
-0x97, 0x74, 0x03, 0x80, 0x0D, 0xF1, 0x88, 0xF1, 0xAB, 0x12, 0xC3, 0x89, 0xF1, 0x88, 0xF1, 0x97,
-0x74, 0x02, 0xF0, 0xAB, 0x78, 0xE4, 0xFD, 0xFF, 0x02, 0x52, 0xC3, 0x74, 0xBC, 0x25, 0x78, 0xF5,
-0x82, 0xE4, 0x34, 0x90, 0xF5, 0x83, 0xE4, 0xF0, 0xE5, 0x78, 0xC4, 0x54, 0xF0, 0x24, 0x00, 0xF5,
-0x82, 0xE4, 0x34, 0x81, 0xF5, 0x83, 0x22, 0xE0, 0x90, 0x8A, 0x71, 0xF0, 0xA3, 0x22, 0x74, 0xBC,
-0x25, 0x78, 0xF5, 0x82, 0xE4, 0x34, 0x90, 0xF5, 0x83, 0xE0, 0x22, 0xE0, 0xFD, 0xE5, 0x78, 0xC4,
-0x54, 0xF0, 0x24, 0x05, 0xF5, 0x82, 0xE4, 0x34, 0x81, 0xF5, 0x83, 0x22, 0x7F, 0x8F, 0x12, 0x7B,
-0x51, 0xEF, 0x22, 0x90, 0x92, 0x07, 0x02, 0x87, 0x03, 0xF0, 0x90, 0x85, 0xC3, 0xE0, 0x54, 0x0F,
-0x22, 0xF0, 0x74, 0xCC, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0x22, 0x75, 0xF0, 0x12, 0x90, 0x89,
-0x3C, 0x12, 0x05, 0x28, 0xE0, 0x22, 0x74, 0xCC, 0x25, 0x6E, 0xF5, 0x82, 0xE4, 0x34, 0x90, 0xF5,
-0x83, 0x22, 0x41, 0x78, 0x90, 0x92, 0x47, 0xE4, 0xF0, 0xA3, 0x22, 0xE0, 0x90, 0x01, 0xBA, 0xF0,
-0x90, 0x85, 0xC7, 0xE0, 0x90, 0x01, 0xBB, 0x22, 0x8B, 0x5B, 0x8A, 0x5C, 0x89, 0x5D, 0x90, 0x93,
-0x13, 0xE0, 0x70, 0x10, 0x12, 0x02, 0xF6, 0x13, 0x13, 0x54, 0x3F, 0x30, 0xE0, 0x06, 0x90, 0x93,
-0x19, 0x74, 0x01, 0xF0, 0x90, 0x93, 0x15, 0xE0, 0x70, 0x0F, 0x11, 0xE3, 0xC4, 0x54, 0x0F, 0xFF,
-0xBF, 0x05, 0x06, 0x90, 0x93, 0x1A, 0x74, 0x01, 0xF0, 0xAB, 0x5B, 0xAA, 0x5C, 0xA9, 0x5D, 0x12,
-0x8E, 0xF7, 0xFF, 0xF5, 0x5F, 0x12, 0x02, 0xF6, 0xFE, 0xC3, 0x13, 0x30, 0xE0, 0x07, 0x12, 0x8B,
-0xD9, 0xF5, 0x60, 0x80, 0x02, 0x8F, 0x60, 0x85, 0x5F, 0x5E, 0xE5, 0x5E, 0xD3, 0x95, 0x60, 0x50,
-0x28, 0x11, 0xE3, 0x54, 0x01, 0xFD, 0xAF, 0x5E, 0x12, 0x6E, 0x5F, 0xAF, 0x5E, 0x12, 0x77, 0x39,
-0xEF, 0xAF, 0x5E, 0x70, 0x04, 0x11, 0xA7, 0x80, 0x02, 0xF1, 0x2E, 0x90, 0x93, 0x1A, 0xE0, 0x60,
-0x04, 0xAF, 0x5E, 0x11, 0xA7, 0x05, 0x5E, 0x80, 0xD1, 0xE5, 0x5F, 0x70, 0x19, 0xFF, 0x12, 0x77,
-0x39, 0xEF, 0x70, 0x12, 0x71, 0x38, 0x12, 0x79, 0x61, 0x90, 0x85, 0xC1, 0xE0, 0x54, 0xF7, 0xF0,
-0x54, 0xBF, 0xF0, 0x54, 0x7F, 0xF0, 0x22, 0x7D, 0x01, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0,
-0x90, 0x92, 0x07, 0xEF, 0xF0, 0xA3, 0xED, 0xF0, 0x7D, 0x44, 0x7F, 0x6F, 0x11, 0xEF, 0x11, 0xFA,
-0x90, 0x92, 0x08, 0xE0, 0x90, 0x92, 0x07, 0xB4, 0x01, 0x0A, 0xE0, 0x12, 0x8F, 0xAF, 0xE0, 0x44,
-0x04, 0xF0, 0x80, 0x08, 0xE0, 0x12, 0x8F, 0xAF, 0xE0, 0x54, 0xFB, 0xF0, 0x11, 0xEC, 0xD0, 0xD0,
-0x92, 0xAF, 0x22, 0xAB, 0x5B, 0xAA, 0x5C, 0xA9, 0x5D, 0x02, 0x02, 0xF6, 0xE4, 0xFD, 0xFF, 0x90,
-0x05, 0x22, 0xEF, 0xF0, 0x90, 0x92, 0xE1, 0xED, 0xF0, 0x22, 0xE4, 0x90, 0x93, 0x93, 0xF0, 0xA3,
-0xF0, 0x90, 0x05, 0x22, 0xE0, 0x90, 0x93, 0x95, 0xF0, 0x7D, 0x47, 0x7F, 0xFF, 0x11, 0xEF, 0x90,
-0x05, 0xF8, 0xE0, 0x70, 0x18, 0xA3, 0xE0, 0x70, 0x14, 0xA3, 0xE0, 0x70, 0x10, 0xA3, 0xE0, 0x70,
-0x0C, 0x90, 0x93, 0x95, 0xE0, 0xFF, 0x7D, 0x48, 0x11, 0xEF, 0x7F, 0x01, 0x22, 0xD3, 0x90, 0x93,
-0x94, 0xE0, 0x94, 0xE8, 0x90, 0x93, 0x93, 0xE0, 0x94, 0x03, 0x40, 0x13, 0x90, 0x01, 0xC0, 0xE0,
-0x44, 0x20, 0xF0, 0x90, 0x93, 0x95, 0xE0, 0xFF, 0x7D, 0x48, 0x11, 0xEF, 0x7F, 0x00, 0x22, 0x7F,
-0x32, 0x7E, 0x00, 0x12, 0x7C, 0x9F, 0x90, 0x93, 0x93, 0xF1, 0xC4, 0x80, 0xB2, 0xD3, 0x10, 0xAF,
-0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x92, 0xDB, 0xEF, 0xF0, 0xA3, 0xED, 0xF0, 0x90, 0x84, 0xC3, 0xE0,
-0x04, 0xF0, 0x90, 0x04, 0x1D, 0xE0, 0x60, 0x32, 0x90, 0x05, 0x22, 0xE0, 0x90, 0x92, 0xDF, 0xF0,
-0x7D, 0x26, 0x7F, 0xFF, 0x11, 0xEF, 0x11, 0xFA, 0xEF, 0x64, 0x01, 0x70, 0x0A, 0x31, 0xDF, 0xFB,
-0x7D, 0x01, 0x12, 0x3A, 0xC2, 0x31, 0xE9, 0x90, 0x92, 0xDF, 0xE0, 0xFF, 0x7D, 0x27, 0x11, 0xEF,
-0x90, 0x92, 0xDB, 0xE0, 0xFF, 0x12, 0x5C, 0xA3, 0x80, 0x18, 0x90, 0x92, 0xDB, 0xE0, 0xFF, 0x12,
-0x5C, 0xA3, 0x31, 0xDF, 0xFB, 0x90, 0x93, 0x92, 0x74, 0x0A, 0xF0, 0x7D, 0x01, 0x12, 0xBC, 0xC5,
-0x31, 0xE9, 0x90, 0x04, 0x1F, 0x74, 0x20, 0xF0, 0x90, 0x84, 0xBF, 0xA3, 0xE0, 0x24, 0x7F, 0xF5,
-0x82, 0xE4, 0x34, 0x82, 0xF5, 0x83, 0x74, 0x01, 0xF0, 0xFF, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90,
-0x84, 0xC8, 0xE0, 0xFF, 0x90, 0x92, 0xDC, 0xE0, 0x22, 0x90, 0x92, 0xDD, 0xEE, 0xF0, 0xFC, 0xA3,
-0xEF, 0xF0, 0xFD, 0x90, 0x92, 0xDB, 0xE0, 0xFF, 0x12, 0x65, 0x61, 0x90, 0x92, 0xDD, 0xE0, 0xFE,
-0xA3, 0xE0, 0xFF, 0x02, 0x50, 0xD7, 0x90, 0x93, 0x09, 0xE0, 0x30, 0xE0, 0x4D, 0x13, 0x13, 0x54,
-0x3F, 0x20, 0xE0, 0x14, 0xE4, 0x90, 0x91, 0x6E, 0xF0, 0x90, 0x93, 0x0B, 0x51, 0x71, 0xE4, 0x51,
-0x5B, 0x30, 0xE0, 0x02, 0x91, 0x44, 0x81, 0x4B, 0x90, 0x93, 0x09, 0xE0, 0x13, 0x13, 0x54, 0x3F,
-0x30, 0xE0, 0x27, 0xE4, 0x90, 0x91, 0x6E, 0xF0, 0x90, 0x93, 0x0C, 0x51, 0x71, 0x90, 0x93, 0x09,
-0xE0, 0x54, 0xFB, 0xF0, 0xE0, 0xC3, 0x13, 0x30, 0xE0, 0x07, 0x7D, 0x04, 0x7F, 0x01, 0x02, 0x57,
-0x82, 0x7D, 0x31, 0x7F, 0xFF, 0x11, 0xEF, 0x12, 0xB9, 0x12, 0x22, 0xFD, 0xFF, 0x11, 0xEF, 0x71,
-0x38, 0x90, 0x93, 0x09, 0xE0, 0xC3, 0x13, 0x22, 0xF0, 0xE4, 0x90, 0x91, 0x6E, 0xF0, 0x90, 0x86,
-0x6E, 0xE0, 0x90, 0x91, 0x6F, 0xF0, 0xE4, 0xFB, 0xFD, 0x7F, 0x54, 0x7E, 0x01, 0x02, 0x61, 0x41,
-0xE4, 0xF5, 0x77, 0x90, 0x85, 0xC5, 0xE0, 0x70, 0x02, 0x61, 0x0F, 0xF1, 0x4C, 0x60, 0x02, 0x61,
-0x0F, 0xF1, 0x9C, 0x90, 0x85, 0xC3, 0xE0, 0xC4, 0x54, 0x0F, 0x60, 0x22, 0x24, 0xFE, 0x60, 0x03,
-0x04, 0x70, 0x1E, 0x90, 0x85, 0xCC, 0xE0, 0x14, 0xF0, 0xE0, 0xFF, 0x60, 0x06, 0x90, 0x85, 0xCE,
-0xE0, 0x60, 0x0E, 0xEF, 0x70, 0x08, 0x90, 0x85, 0xCB, 0xE0, 0xA3, 0xF0, 0x80, 0x00, 0x75, 0x77,
-0x01, 0xE5, 0x77, 0x60, 0x4A, 0x90, 0x85, 0xC8, 0xE0, 0x20, 0xE2, 0x07, 0x7D, 0x01, 0x7F, 0x04,
-0x12, 0x8D, 0x34, 0x90, 0x85, 0xC9, 0xE0, 0x44, 0x10, 0xF0, 0x90, 0x85, 0xCE, 0xE0, 0x60, 0x04,
-0x64, 0x01, 0x70, 0x13, 0xE4, 0x90, 0x91, 0x6E, 0xF0, 0x90, 0x85, 0xCE, 0xE0, 0x71, 0x1B, 0x51,
-0x72, 0x90, 0x85, 0xCE, 0xE0, 0x80, 0x12, 0xE4, 0x90, 0x91, 0x6E, 0x71, 0x10, 0x51, 0x72, 0x90,
-0x85, 0xCE, 0xE0, 0x75, 0xF0, 0x03, 0xA4, 0x24, 0xFE, 0x71, 0x1B, 0x90, 0x85, 0xDE, 0xF0, 0x22,
-0xF0, 0x90, 0x85, 0xCE, 0xE0, 0x75, 0xF0, 0x03, 0xA4, 0x24, 0xFE, 0xFF, 0x90, 0x85, 0xCD, 0xE0,
-0x2F, 0x22, 0x90, 0x93, 0x09, 0xE0, 0x30, 0xE0, 0x0E, 0x90, 0x01, 0x57, 0xE4, 0xF0, 0x51, 0x5B,
-0x30, 0xE0, 0x02, 0x91, 0x44, 0x91, 0x4B, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x7F,
-0x02, 0x12, 0x7B, 0x51, 0xEF, 0x44, 0x01, 0xFD, 0x7F, 0x02, 0x12, 0x7B, 0x3E, 0x90, 0x01, 0x01,
-0xE0, 0x44, 0x02, 0xF0, 0x90, 0x01, 0x00, 0x74, 0xFF, 0xF0, 0x90, 0x06, 0xB7, 0x74, 0x09, 0xF0,
-0x90, 0x06, 0xB4, 0x74, 0x86, 0xF0, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x12, 0x8F, 0xC3, 0x12, 0x02,
-0xF6, 0xFF, 0x54, 0x01, 0xFE, 0x90, 0x93, 0x09, 0xE0, 0x54, 0xFE, 0x4E, 0xFE, 0xF0, 0xEF, 0x54,
-0x02, 0xFF, 0xEE, 0x54, 0xFD, 0x4F, 0xFF, 0xF0, 0x12, 0x02, 0xF6, 0xFE, 0x54, 0x04, 0x25, 0xE0,
-0xFD, 0xEF, 0x54, 0xF7, 0x4D, 0xFF, 0x90, 0x93, 0x09, 0xF0, 0xEE, 0x54, 0x08, 0x25, 0xE0, 0xFE,
-0xEF, 0x54, 0xEF, 0x4E, 0xF0, 0x90, 0x05, 0x52, 0xE0, 0x54, 0x07, 0xFF, 0x90, 0x92, 0x07, 0x60,
-0x13, 0x12, 0x8E, 0xF4, 0xFD, 0x90, 0x05, 0x56, 0xE0, 0xC3, 0x9D, 0x90, 0x93, 0x0B, 0xF0, 0xA3,
-0xED, 0xF0, 0x80, 0x23, 0x12, 0x8E, 0xF4, 0xFB, 0xFF, 0x90, 0x05, 0x54, 0xE0, 0xC3, 0x9F, 0xFF,
-0xE4, 0x94, 0x00, 0xFE, 0x7C, 0x00, 0x7D, 0x05, 0x12, 0x03, 0x82, 0x90, 0x93, 0x0B, 0xEF, 0xF0,
-0xEB, 0x75, 0xF0, 0x05, 0x84, 0xA3, 0xF0, 0x12, 0x88, 0xFD, 0x12, 0x02, 0xF6, 0x20, 0xE0, 0x0B,
-0x71, 0x38, 0x11, 0xEC, 0x90, 0x01, 0x57, 0xE4, 0xF0, 0x80, 0x04, 0x91, 0x44, 0x91, 0x4B, 0x90,
-0x93, 0x09, 0xE0, 0xFF, 0xC4, 0x54, 0x0F, 0x20, 0xE0, 0x04, 0xEF, 0x54, 0xDF, 0xF0, 0x51, 0x61,
-0x30, 0xE0, 0x19, 0x90, 0x85, 0xC5, 0x74, 0x01, 0xF0, 0xE4, 0x90, 0x85, 0xC7, 0xF0, 0x90, 0x85,
-0xC2, 0xE0, 0x44, 0x04, 0xF0, 0x90, 0x05, 0x58, 0x74, 0x05, 0xF0, 0x22, 0xE4, 0x90, 0x85, 0xC5,
-0xF0, 0x90, 0x85, 0xC7, 0x74, 0x0C, 0xF0, 0x90, 0x85, 0xC1, 0xE0, 0x54, 0xFE, 0xF0, 0xA3, 0xE0,
-0x54, 0xFB, 0xF0, 0x22, 0x7D, 0x0C, 0x7F, 0x01, 0x02, 0x57, 0x82, 0x90, 0x93, 0x09, 0xE0, 0x44,
-0x04, 0xF0, 0x22, 0x51, 0x80, 0x90, 0x92, 0xE3, 0xE0, 0x30, 0xE0, 0x03, 0x12, 0xBE, 0x5A, 0x61,
-0x22, 0x90, 0x93, 0x09, 0xE0, 0x30, 0xE0, 0x0C, 0xE4, 0x90, 0x91, 0x6E, 0xF0, 0x90, 0x93, 0x0B,
-0x51, 0x71, 0x91, 0x4B, 0x90, 0x84, 0xC5, 0xE0, 0xB4, 0x01, 0x16, 0x90, 0x93, 0x09, 0xE0, 0xFF,
-0xC4, 0x54, 0x0F, 0x20, 0xE0, 0x0B, 0xEF, 0xC4, 0x13, 0x54, 0x07, 0x20, 0xE0, 0x03, 0x12, 0xC2,
-0x9D, 0x22, 0x7E, 0x00, 0x7F, 0xAC, 0x7D, 0x00, 0x7B, 0x01, 0x7A, 0x85, 0x79, 0xC1, 0x12, 0x06,
-0xDE, 0x90, 0x85, 0xC4, 0x74, 0x02, 0xF0, 0x90, 0x85, 0xCB, 0x14, 0xF0, 0xA3, 0xF0, 0xA3, 0x74,
-0x0A, 0xF0, 0x90, 0x85, 0xD1, 0xE4, 0xF0, 0xA3, 0x74, 0x02, 0xB1, 0x41, 0x12, 0xC0, 0x67, 0xE4,
-0xFD, 0xFF, 0x12, 0x57, 0x82, 0x7D, 0x0C, 0x7F, 0x02, 0x12, 0x57, 0x82, 0x91, 0x44, 0x90, 0x84,
-0xC5, 0xE0, 0xFF, 0xB4, 0x01, 0x08, 0x90, 0x85, 0xD0, 0x74, 0xDD, 0xF0, 0x80, 0x0F, 0xEF, 0x90,
-0x85, 0xD0, 0xB4, 0x03, 0x05, 0x74, 0xD4, 0xF0, 0x80, 0x03, 0x74, 0x40, 0xF0, 0x7F, 0x2C, 0x12,
-0x7B, 0x51, 0xEF, 0x54, 0x0F, 0xFF, 0xBF, 0x05, 0x08, 0x90, 0x85, 0xFB, 0x74, 0x02, 0xF0, 0x80,
-0x05, 0xE4, 0x90, 0x85, 0xFB, 0xF0, 0x90, 0x86, 0x6D, 0x74, 0x03, 0xF0, 0xA3, 0x74, 0x0F, 0xF0,
-0xA3, 0xE0, 0x54, 0x01, 0x44, 0x28, 0xF0, 0xA3, 0x74, 0x07, 0xB1, 0x41, 0xE4, 0x90, 0x85, 0xD7,
-0xF0, 0xA3, 0xF0, 0x7F, 0x01, 0x12, 0x69, 0x33, 0x90, 0x06, 0x04, 0xE0, 0x54, 0x7F, 0xF0, 0x90,
-0x06, 0x0A, 0xE0, 0x54, 0xF8, 0xF0, 0xE4, 0xFD, 0xFF, 0x11, 0xEF, 0xE4, 0x90, 0x86, 0x71, 0xF0,
-0x22, 0xF0, 0x90, 0x85, 0xFB, 0xE0, 0x24, 0x04, 0x90, 0x85, 0xDD, 0xF0, 0xA3, 0x74, 0x0A, 0xF0,
-0x22, 0x90, 0x85, 0xC5, 0xE0, 0x70, 0x02, 0xC1, 0x0B, 0x90, 0x85, 0xDC, 0xE0, 0x04, 0xF0, 0x90,
-0x05, 0x61, 0xD1, 0x2C, 0x78, 0x08, 0x12, 0x04, 0xD8, 0xA8, 0x04, 0xA9, 0x05, 0xAA, 0x06, 0xAB,
-0x07, 0x90, 0x05, 0x60, 0xD1, 0x2C, 0x12, 0x86, 0xD5, 0xC0, 0x04, 0xC0, 0x05, 0xC0, 0x06, 0xC0,
-0x07, 0x90, 0x05, 0x62, 0xD1, 0x2C, 0x78, 0x10, 0x12, 0x04, 0xD8, 0xD0, 0x03, 0xD0, 0x02, 0xD0,
-0x01, 0xD0, 0x00, 0x12, 0x86, 0xD5, 0xC0, 0x04, 0xC0, 0x05, 0xC0, 0x06, 0xC0, 0x07, 0xA3, 0xD1,
-0x2C, 0x78, 0x18, 0x12, 0x04, 0xD8, 0xD0, 0x03, 0xD0, 0x02, 0xD0, 0x01, 0xD0, 0x00, 0x12, 0x86,
-0xD5, 0x90, 0x85, 0xFC, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0x90, 0x93, 0x1F, 0xE0, 0x54, 0xFE, 0xF0,
-0xE0, 0xC3, 0x13, 0x30, 0xE0, 0x0D, 0x12, 0xAF, 0x97, 0x12, 0x51, 0x7D, 0x90, 0x93, 0x1F, 0xE0,
-0x54, 0xFD, 0xF0, 0x90, 0x85, 0xC2, 0xE0, 0x13, 0x13, 0x13, 0x54, 0x1F, 0x30, 0xE0, 0x15, 0x90,
-0x01, 0x3B, 0xE0, 0x30, 0xE4, 0x0E, 0x7D, 0x02, 0x7F, 0x02, 0x12, 0x7C, 0x41, 0x7D, 0x01, 0x7F,
-0x02, 0x12, 0x7C, 0x41, 0x90, 0x93, 0xA4, 0xE0, 0x04, 0xF0, 0xE0, 0xC3, 0x94, 0x80, 0x40, 0x0B,
-0x90, 0x01, 0x98, 0xE0, 0x54, 0xFE, 0xF0, 0xE0, 0x44, 0x01, 0xF0, 0xF1, 0xCB, 0xFF, 0xBF, 0x03,
-0x14, 0x90, 0x93, 0x11, 0xE0, 0xB4, 0x01, 0x0D, 0x90, 0x01, 0xB8, 0xE0, 0x04, 0xF0, 0x90, 0x05,
-0x21, 0xE0, 0x44, 0x80, 0xF0, 0x7F, 0x01, 0x12, 0xAD, 0xED, 0x81, 0x61, 0xE0, 0xFF, 0xE4, 0xFC,
-0xFD, 0xFE, 0x22, 0x90, 0x92, 0x04, 0x12, 0x87, 0x03, 0x90, 0x92, 0x03, 0xEF, 0xF0, 0x12, 0x87,
-0x0C, 0x96, 0x81, 0x00, 0x96, 0x8A, 0x01, 0x96, 0x92, 0x08, 0x96, 0x9A, 0x09, 0x96, 0xA3, 0x0A,
-0x96, 0xAC, 0x12, 0x96, 0xB5, 0x13, 0x96, 0xBE, 0x14, 0x96, 0xC7, 0x20, 0x96, 0xD0, 0x25, 0x96,
-0xD8, 0x26, 0x96, 0xE0, 0x40, 0x96, 0xE9, 0x42, 0x96, 0xF2, 0x43, 0x96, 0xFB, 0x44, 0x97, 0x2D,
-0x47, 0x97, 0x2D, 0x49, 0x97, 0x04, 0xC2, 0x97, 0x0C, 0xC3, 0x97, 0x15, 0xC4, 0x00, 0x00, 0x97,
-0x1E, 0x90, 0x92, 0x04, 0x12, 0x86, 0xFA, 0x02, 0x87, 0xF4, 0x90, 0x92, 0x04, 0x12, 0x86, 0xFA,
-0x01, 0x08, 0x90, 0x92, 0x04, 0x12, 0x86, 0xFA, 0xE1, 0xF6, 0x90, 0x92, 0x04, 0x12, 0x86, 0xFA,
-0x02, 0x9F, 0xF8, 0x90, 0x92, 0x04, 0x12, 0x86, 0xFA, 0x02, 0xA0, 0x13, 0x90, 0x92, 0x04, 0x12,
-0x86, 0xFA, 0x02, 0xA7, 0xE4, 0x90, 0x92, 0x04, 0x12, 0x86, 0xFA, 0x02, 0xA7, 0xF8, 0x90, 0x92,
-0x04, 0x12, 0x86, 0xFA, 0x02, 0xAF, 0xF4, 0x90, 0x92, 0x04, 0x12, 0x86, 0xFA, 0x02, 0x88, 0x45,
-0x90, 0x92, 0x04, 0x12, 0x86, 0xFA, 0xE1, 0xD2, 0x90, 0x92, 0x04, 0x12, 0x86, 0xFA, 0x61, 0x6B,
-0x90, 0x92, 0x04, 0x12, 0x86, 0xFA, 0x02, 0x89, 0x03, 0x90, 0x92, 0x04, 0x12, 0x86, 0xFA, 0x02,
-0x4E, 0x29, 0x90, 0x92, 0x04, 0x12, 0x86, 0xFA, 0x02, 0x28, 0xE6, 0x90, 0x92, 0x04, 0x12, 0x86,
-0xFA, 0x02, 0x62, 0xFC, 0x90, 0x92, 0x04, 0x12, 0x86, 0xFA, 0xE1, 0xDA, 0x90, 0x92, 0x04, 0x12,
-0x86, 0xFA, 0x02, 0xB0, 0x03, 0x90, 0x92, 0x04, 0x12, 0x86, 0xFA, 0x02, 0xB1, 0xC8, 0x90, 0x01,
-0xC0, 0xE0, 0x44, 0x01, 0xF0, 0x90, 0x92, 0x03, 0xE0, 0x90, 0x01, 0xC2, 0xF0, 0x22, 0xE4, 0xFD,
-0x01, 0xA9, 0x90, 0x85, 0xC5, 0xE0, 0x60, 0x03, 0x12, 0xAA, 0x8A, 0x41, 0x06, 0xF1, 0x4C, 0x70,
-0x0A, 0x90, 0x85, 0xC5, 0xE0, 0x60, 0x04, 0xF1, 0xEB, 0x51, 0x68, 0x22, 0xE4, 0xFF, 0x12, 0x77,
-0x39, 0xEF, 0x64, 0x01, 0x22, 0xE4, 0x90, 0x92, 0xCC, 0xF0, 0x90, 0x85, 0xC5, 0xE0, 0x60, 0x3B,
-0xF1, 0x4C, 0x70, 0x37, 0x90, 0x85, 0xCB, 0xE0, 0x90, 0x05, 0x73, 0xF0, 0xF1, 0x9C, 0x90, 0x92,
-0xCC, 0x74, 0x01, 0xF0, 0xE4, 0x90, 0x85, 0xCC, 0xF0, 0x04, 0x60, 0x1F, 0x90, 0x85, 0xC8, 0xE0,
-0x20, 0xE2, 0x07, 0x7D, 0x01, 0x7F, 0x04, 0x12, 0x8D, 0x34, 0x90, 0x85, 0xC9, 0xE0, 0x44, 0x10,
-0xF0, 0xE4, 0x90, 0x91, 0x6E, 0xF0, 0x90, 0x85, 0xCD, 0x51, 0x71, 0x22, 0x90, 0x05, 0x63, 0xE0,
-0x90, 0x93, 0x28, 0xF0, 0x90, 0x05, 0x62, 0xE0, 0x90, 0x93, 0x29, 0xF0, 0x90, 0x05, 0x61, 0xE0,
-0x90, 0x93, 0x2A, 0xF0, 0x90, 0x05, 0x60, 0xE0, 0x90, 0x93, 0x2B, 0xF0, 0x90, 0x93, 0x1F, 0xE0,
-0x44, 0x01, 0xF0, 0x22, 0xE4, 0x75, 0xF0, 0x01, 0x02, 0x07, 0x0A, 0x90, 0x01, 0x02, 0xE0, 0x54,
-0x03, 0x22, 0x12, 0x02, 0xF6, 0x90, 0x86, 0x71, 0xF0, 0x22, 0x12, 0x02, 0xF6, 0x90, 0x93, 0x11,
-0xF0, 0x22, 0xF1, 0x55, 0x7D, 0x02, 0x7F, 0x02, 0x02, 0x7C, 0xA9, 0x90, 0x01, 0x57, 0xE4, 0xF0,
-0x90, 0x01, 0x3C, 0x74, 0x02, 0x22, 0x12, 0x8F, 0xC3, 0x12, 0x02, 0xF6, 0x30, 0xE0, 0x13, 0x11,
-0xA6, 0x90, 0x84, 0xC5, 0xE0, 0x64, 0x01, 0x70, 0x28, 0x90, 0xFE, 0x10, 0xE0, 0x44, 0x04, 0xF0,
-0x80, 0x1F, 0x90, 0x93, 0x05, 0xE0, 0x60, 0x16, 0x7D, 0x10, 0xE4, 0xFF, 0x12, 0x7B, 0xBF, 0x90,
-0x01, 0x3C, 0xE0, 0x30, 0xE4, 0x03, 0x74, 0x10, 0xF0, 0x90, 0x01, 0x63, 0xE4, 0xF0, 0x12, 0xA7,
-0xCA, 0x90, 0x92, 0x07, 0x12, 0x8E, 0xF4, 0x90, 0x92, 0xE4, 0x12, 0x8B, 0xD8, 0x90, 0x92, 0xE5,
-0xF0, 0x90, 0x92, 0xE4, 0xE0, 0x54, 0x01, 0x90, 0x92, 0xF1, 0xF0, 0x90, 0x92, 0xE4, 0xE0, 0x54,
-0x02, 0x90, 0x92, 0xF2, 0xF0, 0x90, 0x92, 0xE4, 0xE0, 0x54, 0x04, 0x90, 0x92, 0xF3, 0xF0, 0x90,
-0x92, 0xE4, 0xE0, 0x54, 0x08, 0x90, 0x92, 0xF4, 0xF0, 0x90, 0x92, 0xE4, 0xE0, 0x54, 0x10, 0x90,
-0x92, 0xF5, 0xF0, 0x90, 0x92, 0xE5, 0xE0, 0x54, 0x01, 0x90, 0x92, 0xF6, 0xF0, 0x90, 0x92, 0xE5,
-0xE0, 0x54, 0x02, 0x90, 0x92, 0xF7, 0xF0, 0x90, 0x92, 0xE5, 0xE0, 0x54, 0x04, 0x90, 0x92, 0xF8,
-0xF0, 0x90, 0x92, 0xE5, 0xE0, 0x54, 0x08, 0x90, 0x92, 0xF9, 0xF0, 0x90, 0x92, 0xE5, 0xE0, 0x54,
-0x10, 0x90, 0x92, 0xFA, 0xF0, 0x22, 0x12, 0xA0, 0xFF, 0x90, 0x85, 0xB7, 0xF0, 0xA3, 0xEF, 0xF0,
-0x90, 0x02, 0x86, 0xE0, 0x44, 0x04, 0xF0, 0x90, 0x92, 0xE3, 0xE0, 0x44, 0x01, 0xF0, 0x7D, 0x08,
-0xE4, 0xFF, 0x12, 0x7C, 0xA9, 0x90, 0x05, 0x52, 0xE0, 0x54, 0x07, 0x04, 0x90, 0x92, 0xEE, 0x11,
-0xD9, 0x90, 0x04, 0x22, 0xE0, 0x54, 0xEF, 0xF0, 0x22, 0xF0, 0xE4, 0xA3, 0xF0, 0xA3, 0xF0, 0x22,
-0x90, 0x92, 0xE3, 0xE0, 0x54, 0xFE, 0x11, 0xD9, 0x90, 0x92, 0xEA, 0x31, 0x09, 0x90, 0x93, 0x05,
-0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0x22, 0x90, 0x93, 0x5F, 0xE0, 0xFF, 0x90, 0x92, 0x45, 0xE4, 0xF0,
-0xA3, 0xEF, 0xF0, 0xE4, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0,
-0x22, 0x90, 0x04, 0x85, 0xE0, 0xF5, 0x6B, 0x90, 0x93, 0x5F, 0xE0, 0x04, 0xF0, 0xE4, 0xF5, 0x62,
-0x90, 0x85, 0xBB, 0xE0, 0xFF, 0xE5, 0x62, 0xC3, 0x9F, 0x40, 0x02, 0xC1, 0xEA, 0xE5, 0x62, 0x12,
-0x8F, 0x8A, 0xE0, 0xF5, 0x6D, 0x12, 0xC3, 0xC5, 0xF5, 0x83, 0xE0, 0x65, 0x6D, 0x60, 0x18, 0x90,
-0x8A, 0x71, 0xE5, 0x6D, 0xF0, 0xE4, 0xA3, 0xF0, 0xAB, 0x62, 0xFD, 0xFF, 0x12, 0x52, 0xC3, 0x12,
-0xC3, 0xC5, 0xF5, 0x83, 0xE5, 0x6D, 0xF0, 0x90, 0x04, 0xA0, 0xE0, 0x64, 0x01, 0x70, 0x50, 0xA3,
-0xE0, 0x65, 0x62, 0x70, 0x4A, 0xA3, 0xE0, 0xF5, 0x63, 0xA3, 0xE0, 0x90, 0x92, 0x3E, 0xF0, 0xE5,
-0x62, 0x12, 0x8F, 0x8A, 0xE0, 0x65, 0x63, 0x70, 0x02, 0xC1, 0xE6, 0xE5, 0x62, 0x12, 0x8F, 0x8A,
-0xE5, 0x63, 0xF0, 0xE5, 0x62, 0x12, 0x8F, 0xAF, 0xE0, 0x54, 0xFC, 0xFF, 0x90, 0x92, 0x3E, 0xE0,
-0x54, 0x03, 0x4F, 0xFF, 0xE5, 0x62, 0x12, 0x8F, 0xAF, 0xEF, 0xF0, 0x90, 0x8A, 0x71, 0xE5, 0x63,
-0xF0, 0xA3, 0x74, 0xFF, 0xF0, 0xAB, 0x62, 0xE4, 0xFD, 0xFF, 0x12, 0x52, 0xC3, 0xC1, 0xE6, 0xAF,
-0x62, 0x12, 0x77, 0x39, 0x75, 0xF0, 0x12, 0xE5, 0x62, 0x12, 0x8A, 0x70, 0x12, 0x8B, 0xE3, 0xFD,
-0x12, 0xC3, 0xAB, 0xED, 0xF0, 0x90, 0x92, 0x47, 0xE4, 0x12, 0xC3, 0x2B, 0xE4, 0xF0, 0xA3, 0xE5,
-0x62, 0xF0, 0x12, 0xAF, 0x4D, 0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0xFF, 0xEE,
-0x5C, 0xFE, 0xEF, 0x5D, 0xFF, 0x90, 0x92, 0x4B, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0x7B, 0x02, 0x7A,
-0x00, 0xE4, 0xFD, 0x7F, 0x01, 0xD1, 0xF1, 0x12, 0xB9, 0xBB, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x12,
-0xB9, 0xB0, 0xE0, 0xFD, 0xE5, 0x62, 0x12, 0xAF, 0xA5, 0x54, 0x80, 0xFB, 0x12, 0xC3, 0xAB, 0xEB,
-0xF0, 0x12, 0x8F, 0xF4, 0xED, 0xF0, 0x90, 0x92, 0x45, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0xE4, 0x90,
-0x92, 0x4B, 0xF0, 0xA3, 0xF0, 0x7B, 0x03, 0xFA, 0xFD, 0x7F, 0x01, 0xD1, 0xF1, 0xAF, 0x62, 0x12,
-0x77, 0x39, 0xEF, 0x70, 0x02, 0xC1, 0xE6, 0x75, 0xF0, 0x12, 0xE5, 0x62, 0x12, 0x8A, 0x70, 0x12,
-0x8B, 0xE3, 0x30, 0xE0, 0x02, 0xC1, 0xE6, 0xE5, 0x62, 0x12, 0xAF, 0x4D, 0x80, 0x05, 0xC3, 0x33,
-0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0xFF, 0xEE, 0x5C, 0xFE, 0xEF, 0x5D, 0x4E, 0x60, 0x02, 0xC1, 0xE6,
-0x12, 0xB9, 0xBB, 0xE0, 0xFE, 0xA3, 0xE0, 0x4E, 0x70, 0x08, 0x12, 0xB9, 0xB0, 0xE0, 0x70, 0x02,
-0xC1, 0xE6, 0xE5, 0x62, 0x75, 0xF0, 0x12, 0xA4, 0x24, 0x44, 0xF9, 0x74, 0x89, 0x35, 0xF0, 0xFA,
-0x7B, 0x01, 0x90, 0x92, 0x33, 0x12, 0x87, 0x03, 0x12, 0xC3, 0x7B, 0x12, 0x03, 0xED, 0x2F, 0xFF,
-0xF1, 0xA0, 0x2F, 0xFF, 0x12, 0xC3, 0xA5, 0x2F, 0xFF, 0xF1, 0xF2, 0x2F, 0xF5, 0x6C, 0x12, 0xB9,
-0xBB, 0xE0, 0xF5, 0x68, 0xA3, 0xE0, 0xF5, 0x69, 0x12, 0xB9, 0xB0, 0xE0, 0xFF, 0x90, 0x92, 0x36,
-0xE4, 0xF0, 0xA3, 0xEF, 0xF0, 0xE5, 0x62, 0x12, 0x8F, 0x8A, 0xE0, 0xF5, 0x63, 0x54, 0x80, 0xF5,
-0x65, 0xE5, 0x63, 0x54, 0x7F, 0xF5, 0x64, 0x12, 0xC3, 0xBC, 0xF1, 0xA6, 0x12, 0xC3, 0x81, 0x90,
-0x92, 0x47, 0xF1, 0xAA, 0xF1, 0xA0, 0xFF, 0x90, 0x92, 0x49, 0xF1, 0xAA, 0x12, 0xC3, 0xA5, 0xFF,
-0x90, 0x92, 0x4B, 0xF1, 0xAA, 0x7B, 0x01, 0xF1, 0xD8, 0xF1, 0xEC, 0xF1, 0xA6, 0x90, 0x92, 0x36,
-0xE0, 0xFF, 0xA3, 0xE0, 0x90, 0x92, 0x47, 0xCF, 0xF0, 0xA3, 0xEF, 0xF0, 0xA3, 0xE5, 0x68, 0xF0,
-0xA3, 0xE5, 0x69, 0xF0, 0xA3, 0xE4, 0xF0, 0xA3, 0xE5, 0x63, 0xF0, 0x7B, 0x02, 0xF1, 0xD8, 0x74,
+0x00, 0x06, 0x02, 0x03, 0x0F, 0xF1, 0xC6, 0x12, 0x02, 0xF6, 0xFF, 0x54, 0x7F, 0x90, 0x85, 0xC5,
+0xF0, 0xEF, 0x71, 0xF0, 0xA3, 0xF0, 0xD1, 0xF8, 0xFD, 0x54, 0xF0, 0xC4, 0x54, 0x0F, 0xFF, 0x90,
+0x85, 0xC3, 0xE0, 0x54, 0xF0, 0x4F, 0xF0, 0x90, 0x00, 0x03, 0x12, 0x03, 0x0F, 0xFC, 0x54, 0x01,
+0x25, 0xE0, 0xFF, 0x90, 0x85, 0xC1, 0xE0, 0x54, 0xFD, 0x4F, 0xF0, 0xEC, 0x54, 0x04, 0xFF, 0x90,
+0x93, 0x37, 0xE0, 0x54, 0xFB, 0x4F, 0xF0, 0xED, 0x54, 0x0F, 0xC4, 0x54, 0xF0, 0xFF, 0xF1, 0xDB,
+0x71, 0xE4, 0x90, 0x85, 0xC4, 0xF0, 0x11, 0x3F, 0x30, 0xE0, 0x4D, 0xC3, 0x13, 0x54, 0x07, 0xFF,
+0xC3, 0x94, 0x04, 0x90, 0x85, 0xD8, 0x50, 0x04, 0xEF, 0xF0, 0x80, 0x25, 0x74, 0x03, 0xF0, 0x31,
+0x0E, 0xE9, 0x24, 0x06, 0xF1, 0xCC, 0xFF, 0x74, 0x03, 0x24, 0xFD, 0xFE, 0xEF, 0xC4, 0x54, 0x0F,
+0xFD, 0xEF, 0x54, 0x0F, 0xFF, 0xED, 0x2E, 0x54, 0x0F, 0xFE, 0xC4, 0x54, 0xF0, 0x4F, 0x12, 0x03,
+0x3C, 0x31, 0x0E, 0x11, 0x3F, 0xC4, 0x54, 0x0F, 0xFF, 0xC3, 0x94, 0x04, 0x90, 0x85, 0xCD, 0x50,
+0x05, 0x74, 0x04, 0xF0, 0x80, 0x02, 0xEF, 0xF0, 0x31, 0x0E, 0x90, 0x00, 0x04, 0x12, 0x03, 0x0F,
+0xFD, 0x7F, 0x02, 0x12, 0x57, 0x82, 0x31, 0x0E, 0x12, 0x71, 0xCB, 0x12, 0xA3, 0xF2, 0xF0, 0x90,
+0x85, 0xC5, 0xF1, 0xE2, 0x90, 0x01, 0xBB, 0xF1, 0xDA, 0x90, 0x01, 0xBE, 0xF0, 0x22, 0x90, 0x92,
+0x07, 0x02, 0x86, 0xFA, 0xF1, 0xC6, 0x31, 0x0E, 0x12, 0x02, 0xF6, 0x54, 0x7F, 0xFD, 0xD1, 0xF8,
+0xFE, 0x54, 0x1F, 0x90, 0x92, 0x0B, 0x71, 0xEC, 0x90, 0x92, 0x0A, 0x71, 0xE5, 0xFE, 0x54, 0x03,
+0xFC, 0xEE, 0x54, 0x30, 0xC4, 0x54, 0x0F, 0x90, 0x92, 0x0D, 0x71, 0xE5, 0xFE, 0x54, 0x40, 0xC4,
+0x13, 0x13, 0x54, 0x03, 0x90, 0x92, 0x0C, 0x71, 0xEC, 0xFF, 0x71, 0xE6, 0xFB, 0x54, 0x08, 0x13,
+0x13, 0x13, 0x54, 0x1F, 0x90, 0x92, 0x0F, 0xF0, 0xFA, 0xEB, 0x54, 0x04, 0x13, 0x13, 0x54, 0x3F,
+0xA3, 0xF0, 0xEF, 0x54, 0x01, 0xC4, 0x33, 0x33, 0x33, 0x54, 0x80, 0x51, 0x74, 0x54, 0x7F, 0x4F,
+0xF0, 0x90, 0x92, 0x0C, 0xE0, 0x54, 0x01, 0xC4, 0x33, 0x33, 0x54, 0xC0, 0x51, 0x74, 0x54, 0xBF,
+0x4F, 0xF0, 0xEA, 0x60, 0x02, 0x41, 0x73, 0x90, 0x92, 0x0B, 0xE0, 0x54, 0x1F, 0xFF, 0x75, 0xF0,
+0x12, 0xED, 0x71, 0xFC, 0x54, 0xE0, 0x4F, 0xF0, 0xEC, 0x54, 0x03, 0x51, 0x74, 0x54, 0xFC, 0x4F,
+0xF0, 0xEC, 0x54, 0x03, 0x25, 0xE0, 0x25, 0xE0, 0x51, 0x74, 0x54, 0xF3, 0x4F, 0xF0, 0x90, 0x92,
+0x0A, 0xE0, 0x54, 0x01, 0xC4, 0x33, 0x54, 0xE0, 0xFF, 0x75, 0xF0, 0x12, 0xED, 0x71, 0xFC, 0x54,
+0xDF, 0x4F, 0xF0, 0x90, 0x92, 0x0D, 0xE0, 0x54, 0x03, 0xC4, 0x54, 0xF0, 0x51, 0x74, 0x54, 0xCF,
+0x4F, 0xF1, 0xEC, 0xF5, 0x83, 0xE0, 0x54, 0xFB, 0xF1, 0xEC, 0xF5, 0x83, 0xC0, 0x83, 0xC0, 0x82,
+0xE0, 0xFF, 0x90, 0x92, 0x10, 0xE0, 0x12, 0xB3, 0xB0, 0x4E, 0xD0, 0x82, 0xD0, 0x83, 0xF0, 0x90,
+0x93, 0x31, 0xE0, 0x60, 0x35, 0x31, 0x0E, 0xE9, 0x24, 0x03, 0xF1, 0xCC, 0x54, 0x1F, 0x12, 0x03,
+0x3C, 0x90, 0x92, 0x0E, 0x74, 0x01, 0xF0, 0x90, 0x92, 0x0E, 0xE0, 0xFF, 0xC3, 0x94, 0x04, 0x50,
+0x19, 0xEF, 0x24, 0x03, 0xFF, 0xE4, 0x33, 0xFE, 0x31, 0x0E, 0x8F, 0x82, 0x8E, 0x83, 0xE4, 0x12,
+0x03, 0x4E, 0x90, 0x92, 0x0E, 0xE0, 0x04, 0xF0, 0x80, 0xDD, 0x90, 0x93, 0x2F, 0xE0, 0x54, 0x07,
+0xFF, 0xBF, 0x05, 0x0A, 0xEC, 0xB4, 0x01, 0x06, 0x90, 0x93, 0x34, 0x74, 0x01, 0xF0, 0xE4, 0x90,
+0x92, 0x0E, 0xF0, 0x90, 0x92, 0x0E, 0xE0, 0xFC, 0x24, 0x03, 0xFF, 0xE4, 0x33, 0xFE, 0x31, 0x0E,
+0x8F, 0x82, 0x8E, 0x83, 0x12, 0x03, 0x0F, 0xFF, 0xED, 0x12, 0xBC, 0xE0, 0xE5, 0x82, 0x2C, 0x12,
+0xA5, 0xBA, 0xEF, 0xF0, 0x90, 0x92, 0x0E, 0xE0, 0x04, 0xF0, 0xE0, 0xB4, 0x04, 0xD5, 0xAF, 0x05,
+0x12, 0x17, 0x8E, 0x22, 0xFF, 0x75, 0xF0, 0x12, 0xED, 0x90, 0x89, 0x3F, 0x12, 0x05, 0x28, 0xE0,
+0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x7F, 0x8F, 0x12, 0x7B, 0x51, 0xEF, 0x20, 0xE6,
+0x02, 0x61, 0xAB, 0x90, 0x00, 0x8C, 0xE0, 0x90, 0x93, 0xAE, 0xF0, 0x7F, 0x8D, 0x12, 0x7B, 0x51,
+0x90, 0x93, 0xAF, 0xEF, 0xF0, 0x90, 0x00, 0x8E, 0xE0, 0x90, 0x93, 0xB0, 0xF0, 0x90, 0x93, 0xAF,
+0xE0, 0x24, 0xFC, 0x60, 0x10, 0x24, 0x03, 0x60, 0x02, 0x61, 0x9F, 0x90, 0x93, 0xAE, 0xE0, 0xFF,
+0x12, 0xA6, 0xE7, 0x61, 0x9F, 0x90, 0x93, 0xAE, 0xE0, 0x24, 0xDC, 0xF5, 0x82, 0xE4, 0x34, 0x8F,
+0xF5, 0x83, 0xE0, 0xFB, 0xE4, 0xFD, 0xFF, 0x71, 0xDD, 0x75, 0xF0, 0x12, 0x51, 0x79, 0x13, 0x13,
+0x54, 0x03, 0xFB, 0x0D, 0xE4, 0xFF, 0x71, 0xDD, 0x75, 0xF0, 0x12, 0x51, 0x79, 0x71, 0xF0, 0xFB,
+0x0D, 0xE4, 0xFF, 0x71, 0xDD, 0x75, 0xF0, 0x12, 0x51, 0x79, 0xC4, 0x54, 0x03, 0xFB, 0x0D, 0xE4,
+0xFF, 0x71, 0xDD, 0xF1, 0xF8, 0xFB, 0xE4, 0xFD, 0x0F, 0x71, 0xDD, 0x75, 0xF0, 0x12, 0x90, 0x89,
+0x3D, 0x12, 0x05, 0x28, 0x71, 0xDA, 0x75, 0xF0, 0x12, 0x71, 0xFC, 0xC4, 0x13, 0x54, 0x01, 0xFB,
+0x0D, 0x7F, 0x01, 0x71, 0xDD, 0x75, 0xF0, 0x12, 0x71, 0xFC, 0x54, 0x1F, 0x71, 0xDB, 0x12, 0xBC,
+0xE0, 0xE0, 0xFB, 0xE4, 0xFD, 0x0F, 0x71, 0xDD, 0x75, 0xF0, 0x08, 0xA4, 0x24, 0x01, 0xF5, 0x82,
+0xE4, 0x34, 0x82, 0x71, 0xD8, 0x75, 0xF0, 0x08, 0xA4, 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, 0x82,
+0x71, 0xD8, 0x75, 0xF0, 0x08, 0xA4, 0x24, 0x03, 0xF5, 0x82, 0xE4, 0x34, 0x82, 0x71, 0xD8, 0x75,
+0xF0, 0x08, 0xA4, 0x24, 0x04, 0xF5, 0x82, 0xE4, 0x34, 0x82, 0xF5, 0x83, 0xE0, 0xFB, 0xE4, 0xFD,
+0x0F, 0x71, 0xDD, 0x75, 0xF0, 0x08, 0xA4, 0x24, 0x05, 0xF5, 0x82, 0xE4, 0x34, 0x82, 0x71, 0xD8,
+0x75, 0xF0, 0x08, 0xA4, 0x24, 0x06, 0xF5, 0x82, 0xE4, 0x34, 0x82, 0x71, 0xD8, 0x75, 0xF0, 0x08,
+0xA4, 0x24, 0x07, 0xF5, 0x82, 0xE4, 0x34, 0x82, 0xF5, 0x83, 0xE0, 0xFB, 0x0D, 0x71, 0xB0, 0x7F,
+0x8F, 0x12, 0x7B, 0x51, 0xEF, 0x30, 0xE0, 0x03, 0x12, 0xA7, 0x71, 0xD0, 0xD0, 0x92, 0xAF, 0x22,
+0xEF, 0x70, 0x04, 0x74, 0xF0, 0x80, 0x16, 0xEF, 0xB4, 0x01, 0x04, 0x74, 0xF4, 0x80, 0x0E, 0xEF,
+0xB4, 0x02, 0x04, 0x74, 0xF8, 0x80, 0x06, 0xEF, 0xB4, 0x03, 0x0C, 0x74, 0xFC, 0x2D, 0xF5, 0x82,
+0xE4, 0x34, 0x02, 0xF5, 0x83, 0xEB, 0xF0, 0x22, 0xF5, 0x83, 0xE0, 0xFB, 0x0D, 0x71, 0xB0, 0x90,
+0x93, 0xAE, 0xE0, 0x22, 0x4F, 0xF0, 0x90, 0x00, 0x02, 0x02, 0x03, 0x0F, 0xF0, 0xEE, 0x54, 0x80,
+0xC4, 0x13, 0x13, 0x13, 0x54, 0x01, 0x22, 0x75, 0xF0, 0x12, 0xE5, 0x6E, 0x90, 0x89, 0x3E, 0x12,
+0x05, 0x28, 0xE0, 0x22, 0x8F, 0x6E, 0x8D, 0x6F, 0xEF, 0xF1, 0x9B, 0xE0, 0xF5, 0x70, 0x54, 0x7F,
+0xF5, 0x71, 0xE5, 0x70, 0x54, 0x80, 0xF5, 0x73, 0x75, 0xF0, 0x12, 0xEF, 0xF1, 0xFB, 0xF5, 0x75,
+0x75, 0xF0, 0x12, 0xEF, 0x51, 0x79, 0xC4, 0x54, 0x03, 0xF5, 0x76, 0xD1, 0xFE, 0x74, 0xFF, 0xF0,
+0x12, 0xAF, 0x7E, 0xE5, 0x70, 0x45, 0x73, 0xFF, 0x12, 0xBC, 0x52, 0xEF, 0xF0, 0xE5, 0x6E, 0xF1,
+0xAC, 0xE0, 0x54, 0x03, 0xF5, 0x74, 0x74, 0x4C, 0x25, 0x6E, 0x12, 0xBC, 0xD8, 0xE5, 0x74, 0xF0,
+0xE5, 0x71, 0x65, 0x75, 0x70, 0x42, 0x71, 0xF7, 0xC4, 0x13, 0x54, 0x07, 0x30, 0xE0, 0x0C, 0xE5,
+0x73, 0x70, 0x08, 0xE5, 0x71, 0x44, 0x80, 0xF5, 0x70, 0xA1, 0x01, 0x12, 0xAF, 0x7E, 0xE5, 0x6E,
+0x12, 0xBB, 0x6C, 0xE0, 0xFF, 0xA3, 0xE0, 0x12, 0xC3, 0xF2, 0xE4, 0xF0, 0xA3, 0xE5, 0x6E, 0xF0,
+0xE4, 0x90, 0x92, 0x61, 0x12, 0x9E, 0x25, 0x7B, 0x01, 0xFA, 0x7D, 0x02, 0x7F, 0x04, 0x12, 0xAE,
+0xF6, 0x7D, 0x07, 0xAF, 0x6E, 0x02, 0xB9, 0x88, 0xE5, 0x71, 0xC3, 0x95, 0x75, 0x50, 0x5A, 0xAB,
+0x6E, 0xAD, 0x75, 0xAF, 0x71, 0x12, 0x72, 0xEA, 0x8F, 0x72, 0x85, 0x72, 0x70, 0x71, 0xF7, 0xC4,
+0x13, 0x54, 0x01, 0xFF, 0x90, 0x92, 0x61, 0xE4, 0x12, 0xC3, 0xF6, 0xE4, 0xF0, 0xA3, 0xE5, 0x72,
+0xF0, 0xA3, 0xE4, 0xF0, 0xA3, 0xE5, 0x71, 0xF0, 0xE5, 0x73, 0x71, 0xF0, 0x12, 0xC4, 0x12, 0xE4,
+0xFB, 0xFA, 0xF1, 0xD3, 0xE5, 0x71, 0xC3, 0x94, 0x0C, 0x40, 0x26, 0x71, 0xF7, 0xC4, 0x13, 0x54,
+0x07, 0x30, 0xE0, 0x1D, 0xE5, 0x6F, 0x60, 0x19, 0xE5, 0x73, 0x70, 0x15, 0xE5, 0x71, 0x44, 0x80,
+0xF5, 0x70, 0xD1, 0xFE, 0xE5, 0x72, 0xF0, 0x80, 0x08, 0x12, 0xBC, 0x52, 0xE5, 0x75, 0xF0, 0xF5,
+0x70, 0x90, 0x92, 0x5D, 0xE4, 0xF0, 0xA3, 0xE5, 0x70, 0xF0, 0xD1, 0xFE, 0xE0, 0xFF, 0x12, 0xC4,
+0x52, 0xEF, 0xF0, 0xA3, 0xE4, 0xF0, 0xA3, 0xE5, 0x74, 0x12, 0xBC, 0xD0, 0xF0, 0x7B, 0x01, 0x7A,
+0x00, 0xF1, 0xD3, 0x90, 0x91, 0x0B, 0xE5, 0x74, 0xF0, 0xAB, 0x6F, 0xAD, 0x70, 0xAF, 0x6E, 0x02,
+0x27, 0x3D, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x93, 0xBE, 0xED, 0xF0, 0x90, 0x85,
+0xC1, 0xE0, 0xFE, 0xC4, 0x13, 0x13, 0x54, 0x03, 0x30, 0xE0, 0x02, 0xC1, 0x8E, 0xEE, 0x71, 0xF0,
+0x30, 0xE0, 0x02, 0xC1, 0x8E, 0x90, 0x85, 0xC8, 0xE0, 0xFE, 0x6F, 0x70, 0x02, 0xC1, 0x8E, 0xEF,
+0x70, 0x02, 0xA1, 0xF7, 0x24, 0xFE, 0x70, 0x02, 0xC1, 0x34, 0x24, 0xFE, 0x60, 0x4D, 0x24, 0xFC,
+0x70, 0x02, 0xC1, 0x73, 0x24, 0xFC, 0x60, 0x02, 0xC1, 0x85, 0xEE, 0xB4, 0x0E, 0x03, 0x12, 0x74,
+0x93, 0x90, 0x85, 0xC8, 0xE0, 0x70, 0x05, 0x7F, 0x01, 0x12, 0x79, 0x80, 0x90, 0x85, 0xC8, 0xE0,
+0xB4, 0x06, 0x03, 0x12, 0x73, 0x8E, 0x90, 0x85, 0xC8, 0xE0, 0xB4, 0x04, 0x0F, 0x90, 0x93, 0xBE,
+0xE0, 0xFF, 0x60, 0x05, 0x12, 0x6D, 0x4C, 0x80, 0x03, 0x12, 0x79, 0x61, 0x90, 0x85, 0xC8, 0xE0,
+0x64, 0x08, 0x60, 0x02, 0xC1, 0x85, 0x12, 0x7A, 0xB9, 0xC1, 0x85, 0x90, 0x85, 0xC8, 0xE0, 0x70,
+0x05, 0x7F, 0x01, 0x12, 0x79, 0x80, 0x90, 0x85, 0xC8, 0xE0, 0xB4, 0x06, 0x03, 0x12, 0x73, 0x8E,
+0x90, 0x85, 0xC8, 0xE0, 0xB4, 0x0E, 0x08, 0xD1, 0x93, 0xBF, 0x01, 0x03, 0x12, 0x74, 0x93, 0x90,
+0x85, 0xC8, 0xE0, 0x64, 0x0C, 0x60, 0x02, 0xC1, 0x85, 0xD1, 0x93, 0xEF, 0x64, 0x01, 0x60, 0x02,
+0xC1, 0x85, 0x12, 0x70, 0x9E, 0xC1, 0x85, 0x90, 0x85, 0xC8, 0xE0, 0xB4, 0x0E, 0x08, 0xD1, 0x93,
+0xBF, 0x01, 0x03, 0x12, 0x74, 0x93, 0x90, 0x85, 0xC8, 0xE0, 0xB4, 0x06, 0x03, 0x12, 0x73, 0x8E,
+0x90, 0x85, 0xC8, 0xE0, 0xB4, 0x0C, 0x08, 0xD1, 0x93, 0xBF, 0x01, 0x03, 0x12, 0x70, 0x9E, 0x90,
+0x85, 0xC8, 0xE0, 0x64, 0x04, 0x70, 0x5E, 0x12, 0xBF, 0x9E, 0xEF, 0x64, 0x01, 0x70, 0x56, 0x12,
+0x77, 0xFE, 0x80, 0x51, 0x90, 0x85, 0xC8, 0xE0, 0xB4, 0x0E, 0x08, 0xD1, 0x93, 0xBF, 0x01, 0x03,
+0x12, 0x74, 0x93, 0x90, 0x85, 0xC8, 0xE0, 0xB4, 0x06, 0x03, 0x12, 0x73, 0x8E, 0x90, 0x85, 0xC8,
+0xE0, 0xB4, 0x0C, 0x08, 0xD1, 0x93, 0xBF, 0x01, 0x03, 0x12, 0x70, 0x9E, 0x90, 0x85, 0xC8, 0xE0,
+0x70, 0x05, 0x7F, 0x01, 0x12, 0x79, 0x80, 0x90, 0x85, 0xC8, 0xE0, 0xB4, 0x04, 0x17, 0x12, 0x79,
+0xF3, 0x80, 0x12, 0x90, 0x85, 0xC8, 0xE0, 0xB4, 0x0C, 0x0B, 0x12, 0x96, 0x4C, 0x54, 0x3F, 0x30,
+0xE0, 0x03, 0x12, 0x7A, 0x8A, 0x90, 0x85, 0xC8, 0xF1, 0xE2, 0x90, 0x01, 0xBB, 0xF0, 0xD0, 0xD0,
+0x92, 0xAF, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x12, 0x7A, 0x29, 0xEF, 0x64, 0x01,
+0x60, 0x05, 0x75, 0x0E, 0x01, 0x80, 0x3B, 0x90, 0x85, 0xC1, 0xE0, 0x13, 0x13, 0x13, 0x54, 0x1F,
+0x30, 0xE0, 0x05, 0x75, 0x0E, 0x02, 0x80, 0x2A, 0x90, 0x85, 0xC7, 0xE0, 0xD3, 0x94, 0x04, 0x40,
+0x05, 0x75, 0x0E, 0x08, 0x80, 0x1C, 0x90, 0x93, 0x21, 0xE0, 0x30, 0xE0, 0x0C, 0x13, 0x13, 0x54,
+0x3F, 0x30, 0xE0, 0x05, 0x75, 0x0E, 0x11, 0x80, 0x09, 0x90, 0x01, 0xB8, 0xE4, 0xF0, 0x7F, 0x01,
+0x80, 0x0E, 0x90, 0x01, 0xB9, 0x74, 0x02, 0xF0, 0x90, 0x01, 0xB8, 0xE5, 0x0E, 0xF0, 0x7F, 0x00,
+0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x12, 0x86, 0xFA, 0x90, 0x00, 0x01, 0x02, 0x03, 0x0F, 0x74, 0x78,
+0x25, 0x6E, 0xF5, 0x82, 0xE4, 0x34, 0x93, 0xF5, 0x83, 0x22, 0x8D, 0x78, 0xEF, 0x30, 0xE6, 0x1E,
+0xF1, 0x99, 0xF1, 0xA8, 0xE0, 0x54, 0x03, 0x90, 0x91, 0x0B, 0xF0, 0xE4, 0xFB, 0xAF, 0x78, 0x12,
+0x27, 0x3D, 0xF1, 0x8C, 0xE0, 0x90, 0x8A, 0x71, 0xF0, 0xA3, 0x74, 0x01, 0x80, 0x55, 0xF1, 0xB9,
+0x04, 0xF0, 0xF1, 0xB9, 0x64, 0x02, 0x70, 0x22, 0x74, 0x78, 0x25, 0x78, 0xF1, 0x02, 0xE0, 0xFD,
+0xF4, 0x60, 0x02, 0x80, 0x04, 0xF1, 0x99, 0xE0, 0xFD, 0xF1, 0xAA, 0x12, 0xC4, 0x36, 0xF1, 0x99,
+0xE0, 0x90, 0x8A, 0x71, 0xF0, 0xA3, 0x74, 0x02, 0x80, 0x29, 0xF1, 0xB9, 0xD3, 0x94, 0x03, 0x40,
+0x11, 0xAF, 0x78, 0x12, 0x6D, 0x94, 0xF1, 0x8C, 0xE0, 0x90, 0x8A, 0x71, 0xF0, 0xA3, 0x74, 0x03,
+0x80, 0x11, 0xF1, 0x99, 0xF1, 0xA8, 0x12, 0xC4, 0x36, 0xF1, 0x99, 0xE0, 0x90, 0x8A, 0x71, 0xF0,
+0xA3, 0x74, 0x02, 0xF0, 0xAB, 0x78, 0xE4, 0xFD, 0xFF, 0x02, 0x52, 0xC3, 0x74, 0xBC, 0x25, 0x78,
+0xF5, 0x82, 0xE4, 0x34, 0x90, 0xF5, 0x83, 0xE4, 0xF0, 0xE5, 0x78, 0xC4, 0x54, 0xF0, 0x24, 0x00,
+0xF5, 0x82, 0xE4, 0x34, 0x81, 0xF5, 0x83, 0x22, 0xE0, 0xFD, 0xE5, 0x78, 0xC4, 0x54, 0xF0, 0x24,
+0x05, 0xF5, 0x82, 0xE4, 0x34, 0x81, 0xF5, 0x83, 0x22, 0x74, 0xBC, 0x25, 0x78, 0xF5, 0x82, 0xE4,
+0x34, 0x90, 0xF5, 0x83, 0xE0, 0x22, 0x90, 0x92, 0x07, 0x02, 0x87, 0x03, 0xF9, 0xE4, 0x3A, 0xFA,
+0x02, 0x02, 0xF6, 0x7D, 0x05, 0x7F, 0x04, 0x02, 0xAE, 0xF6, 0xF0, 0x90, 0x85, 0xC3, 0xE0, 0x54,
+0x0F, 0x22, 0xE0, 0x90, 0x01, 0xBA, 0xF0, 0x90, 0x85, 0xC7, 0xE0, 0x22, 0xF0, 0x74, 0xCC, 0x2D,
+0xF5, 0x82, 0xE4, 0x34, 0x8F, 0x22, 0x41, 0x81, 0x75, 0xF0, 0x12, 0x90, 0x89, 0x3C, 0x12, 0x05,
+0x28, 0xE0, 0x22, 0x8B, 0x5B, 0x8A, 0x5C, 0x89, 0x5D, 0x90, 0x93, 0x2B, 0xE0, 0x70, 0x10, 0x12,
+0x02, 0xF6, 0x13, 0x13, 0x54, 0x3F, 0x30, 0xE0, 0x06, 0x90, 0x93, 0x31, 0x74, 0x01, 0xF0, 0x90,
+0x93, 0x2D, 0xE0, 0x70, 0x0F, 0x11, 0xDD, 0xC4, 0x54, 0x0F, 0xFF, 0xBF, 0x05, 0x06, 0x90, 0x93,
+0x32, 0x74, 0x01, 0xF0, 0xAB, 0x5B, 0xAA, 0x5C, 0xA9, 0x5D, 0x12, 0x8E, 0xF8, 0xFF, 0xF5, 0x5F,
+0x12, 0x02, 0xF6, 0xFE, 0xC3, 0x13, 0x30, 0xE0, 0x07, 0x12, 0x8B, 0xE6, 0xF5, 0x60, 0x80, 0x02,
+0x8F, 0x60, 0x85, 0x5F, 0x5E, 0xE5, 0x5E, 0xD3, 0x95, 0x60, 0x50, 0x28, 0x11, 0xDD, 0x54, 0x01,
+0xFD, 0xAF, 0x5E, 0x12, 0x6E, 0x5F, 0xAF, 0x5E, 0x12, 0x77, 0x39, 0xEF, 0xAF, 0x5E, 0x70, 0x04,
+0x11, 0x9E, 0x80, 0x02, 0xB1, 0x6D, 0x90, 0x93, 0x32, 0xE0, 0x60, 0x04, 0xAF, 0x5E, 0x11, 0x9E,
+0x05, 0x5E, 0x80, 0xD1, 0xE5, 0x5F, 0x70, 0x15, 0xFF, 0x12, 0x77, 0x39, 0xEF, 0x70, 0x0E, 0x51,
+0x5D, 0x12, 0x79, 0x61, 0x12, 0xA2, 0xF6, 0x54, 0xBF, 0xF0, 0x54, 0x7F, 0xF0, 0x22, 0x7D, 0x01,
+0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x92, 0x07, 0xEF, 0xF0, 0xA3, 0xED, 0xF0, 0x7D,
+0x44, 0x7F, 0x6F, 0x11, 0xE6, 0x11, 0xF1, 0x90, 0x92, 0x08, 0xE0, 0x90, 0x92, 0x07, 0xB4, 0x01,
+0x0A, 0xE0, 0x12, 0x8F, 0xAC, 0xE0, 0x44, 0x04, 0xF0, 0x80, 0x08, 0xE0, 0x12, 0x8F, 0xAC, 0xE0,
+0x54, 0xFB, 0xF0, 0xE4, 0xFD, 0xFF, 0x11, 0xE6, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xAB, 0x5B, 0xAA,
+0x5C, 0xA9, 0x5D, 0x02, 0x02, 0xF6, 0x90, 0x05, 0x22, 0xEF, 0xF0, 0x90, 0x92, 0xF9, 0xED, 0xF0,
+0x22, 0xE4, 0x90, 0x93, 0xAB, 0xF0, 0xA3, 0xF0, 0x90, 0x05, 0x22, 0xE0, 0x90, 0x93, 0xAD, 0xF0,
+0x7D, 0x47, 0x7F, 0xFF, 0x11, 0xE6, 0x90, 0x05, 0xF8, 0xE0, 0x70, 0x13, 0xA3, 0xE0, 0x70, 0x0F,
+0xA3, 0xE0, 0x70, 0x0B, 0xA3, 0xE0, 0x70, 0x07, 0x31, 0xCC, 0x11, 0xE6, 0x7F, 0x01, 0x22, 0xD3,
+0x90, 0x93, 0xAC, 0xE0, 0x94, 0xE8, 0x90, 0x93, 0xAB, 0xE0, 0x94, 0x03, 0x40, 0x0E, 0x90, 0x01,
+0xC0, 0xE0, 0x44, 0x20, 0xF0, 0x31, 0xCC, 0x11, 0xE6, 0x7F, 0x00, 0x22, 0x7F, 0x32, 0x7E, 0x00,
+0x12, 0x7C, 0x9F, 0x90, 0x93, 0xAB, 0xF1, 0xE5, 0x80, 0xBC, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0,
+0xD0, 0x90, 0x92, 0xF3, 0xEF, 0xF0, 0xA3, 0xED, 0xF0, 0x90, 0x84, 0xC3, 0xE0, 0x04, 0xF0, 0x90,
+0x04, 0x1D, 0xE0, 0x60, 0x32, 0x90, 0x05, 0x22, 0xE0, 0x90, 0x92, 0xF7, 0xF0, 0x7D, 0x26, 0x7F,
+0xFF, 0x11, 0xE6, 0x11, 0xF1, 0xEF, 0x64, 0x01, 0x70, 0x0A, 0x31, 0xD4, 0xFB, 0x7D, 0x01, 0x12,
+0x3A, 0xC2, 0x31, 0xDE, 0x90, 0x92, 0xF7, 0xE0, 0xFF, 0x7D, 0x27, 0x11, 0xE6, 0x90, 0x92, 0xF3,
+0xE0, 0xFF, 0x12, 0x5C, 0xA3, 0x80, 0x18, 0x90, 0x92, 0xF3, 0xE0, 0xFF, 0x12, 0x5C, 0xA3, 0x31,
+0xD4, 0xFB, 0x90, 0x93, 0xAA, 0x74, 0x0A, 0xF0, 0x7D, 0x01, 0x12, 0xBD, 0x47, 0x31, 0xDE, 0x90,
+0x04, 0x1F, 0x74, 0x20, 0xF0, 0x90, 0x84, 0xBF, 0xA3, 0xE0, 0x24, 0x7F, 0xF5, 0x82, 0xE4, 0x34,
+0x82, 0xF5, 0x83, 0x74, 0x01, 0xF0, 0xFF, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90, 0x93, 0xAD, 0xE0,
+0xFF, 0x7D, 0x48, 0x22, 0x90, 0x84, 0xC8, 0xE0, 0xFF, 0x90, 0x92, 0xF4, 0xE0, 0x22, 0x90, 0x92,
+0xF5, 0xEE, 0xF0, 0xFC, 0xA3, 0xEF, 0xF0, 0xFD, 0x90, 0x92, 0xF3, 0xE0, 0xFF, 0x12, 0x65, 0x61,
+0x90, 0x92, 0xF5, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x02, 0x50, 0xD7, 0x90, 0x93, 0x21, 0xE0, 0x30,
+0xE0, 0x4D, 0x13, 0x13, 0x54, 0x3F, 0x20, 0xE0, 0x14, 0xE4, 0x90, 0x91, 0x6E, 0xF0, 0x90, 0x93,
+0x23, 0x71, 0x89, 0xE4, 0x51, 0x50, 0x30, 0xE0, 0x02, 0x71, 0x71, 0x61, 0x78, 0x90, 0x93, 0x21,
+0xE0, 0x13, 0x13, 0x54, 0x3F, 0x30, 0xE0, 0x27, 0xE4, 0x90, 0x91, 0x6E, 0xF0, 0x90, 0x93, 0x24,
+0x71, 0x89, 0x90, 0x93, 0x21, 0xE0, 0x54, 0xFB, 0xF0, 0xE0, 0xC3, 0x13, 0x30, 0xE0, 0x07, 0x7D,
+0x04, 0x7F, 0x01, 0x02, 0x57, 0x82, 0x7D, 0x31, 0x7F, 0xFF, 0x11, 0xE6, 0x12, 0xB9, 0x50, 0x22,
+0xFD, 0xFF, 0x11, 0xE6, 0x51, 0x5D, 0x90, 0x93, 0x21, 0xE0, 0xC3, 0x13, 0x22, 0xD3, 0x10, 0xAF,
+0x01, 0xC3, 0xC0, 0xD0, 0x7F, 0x02, 0x12, 0xB5, 0x75, 0x7F, 0x02, 0x12, 0xB3, 0xBE, 0x44, 0x02,
+0xF0, 0x90, 0x01, 0x00, 0x74, 0xFF, 0xF0, 0x90, 0x06, 0xB7, 0x74, 0x09, 0xF0, 0x90, 0x06, 0xB4,
+0x74, 0x86, 0xF0, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90, 0x93, 0x21, 0xE0, 0x30, 0xE0, 0x0E, 0x90,
+0x01, 0x57, 0xE4, 0xF0, 0x51, 0x50, 0x30, 0xE0, 0x02, 0x71, 0x71, 0x71, 0x78, 0x22, 0x12, 0x8F,
+0xC6, 0x12, 0x02, 0xF6, 0xFF, 0x54, 0x01, 0xFE, 0x90, 0x93, 0x21, 0xE0, 0x54, 0xFE, 0x4E, 0xFE,
+0xF0, 0xEF, 0x54, 0x02, 0xFF, 0xEE, 0x54, 0xFD, 0x12, 0xA2, 0x84, 0x54, 0x04, 0x25, 0xE0, 0xFD,
+0xEF, 0x54, 0xF7, 0x4D, 0xFF, 0x90, 0x93, 0x21, 0xF0, 0xEE, 0x54, 0x08, 0x25, 0xE0, 0xFE, 0xEF,
+0x54, 0xEF, 0x4E, 0xF0, 0x90, 0x05, 0x52, 0xE0, 0x54, 0x07, 0xFF, 0x90, 0x92, 0x07, 0x60, 0x13,
+0x12, 0x8E, 0xF5, 0xFD, 0x90, 0x05, 0x56, 0xE0, 0xC3, 0x9D, 0x90, 0x93, 0x23, 0xF0, 0xA3, 0xED,
+0xF0, 0x80, 0x23, 0x12, 0x8E, 0xF5, 0xFB, 0xFF, 0x90, 0x05, 0x54, 0xE0, 0xC3, 0x9F, 0xFF, 0xE4,
+0x94, 0x00, 0xFE, 0x7C, 0x00, 0x7D, 0x05, 0x12, 0x03, 0x82, 0x90, 0x93, 0x23, 0xEF, 0xF0, 0xEB,
+0x75, 0xF0, 0x05, 0x84, 0xA3, 0xF0, 0x12, 0x89, 0x0E, 0x12, 0x02, 0xF6, 0x20, 0xE0, 0x0E, 0x51,
+0x5D, 0xE4, 0xFD, 0xFF, 0x11, 0xE6, 0x90, 0x01, 0x57, 0xE4, 0xF0, 0x80, 0x04, 0x71, 0x71, 0x71,
+0x78, 0x90, 0x93, 0x21, 0xE0, 0xFF, 0xC4, 0x54, 0x0F, 0x20, 0xE0, 0x04, 0xEF, 0x54, 0xDF, 0xF0,
+0x51, 0x56, 0x30, 0xE0, 0x14, 0x90, 0x85, 0xC5, 0x74, 0x01, 0xF0, 0xE4, 0x90, 0x85, 0xC7, 0xF0,
+0xF1, 0x51, 0x90, 0x05, 0x58, 0x74, 0x05, 0xF0, 0x22, 0xE4, 0x90, 0x85, 0xC5, 0xF0, 0x90, 0x85,
+0xC7, 0x74, 0x0C, 0xF0, 0x90, 0x85, 0xC1, 0xE0, 0x54, 0xFE, 0xF0, 0xA3, 0xE0, 0x54, 0xFB, 0xF0,
+0x22, 0x7D, 0x0C, 0x7F, 0x01, 0x02, 0x57, 0x82, 0x90, 0x93, 0x21, 0xE0, 0x44, 0x04, 0xF0, 0x22,
+0xF0, 0xE4, 0x90, 0x91, 0x6E, 0xF0, 0x90, 0x86, 0x6E, 0xE0, 0x90, 0x91, 0x6F, 0xF0, 0xE4, 0xFB,
+0xFD, 0x7F, 0x54, 0x7E, 0x01, 0x02, 0x61, 0x41, 0xE4, 0xF5, 0x77, 0x90, 0x85, 0xC5, 0xE0, 0x60,
+0x78, 0xB1, 0x8A, 0x70, 0x74, 0xF1, 0xF3, 0xF1, 0x59, 0x60, 0x22, 0x24, 0xFE, 0x60, 0x03, 0x04,
+0x70, 0x1E, 0x90, 0x85, 0xCC, 0xE0, 0x14, 0xF0, 0xE0, 0xFF, 0x60, 0x06, 0x90, 0x85, 0xCE, 0xE0,
+0x60, 0x0E, 0xEF, 0x70, 0x08, 0x90, 0x85, 0xCB, 0xE0, 0xA3, 0xF0, 0x80, 0x00, 0x75, 0x77, 0x01,
+0xE5, 0x77, 0x60, 0x45, 0x90, 0x85, 0xC8, 0xE0, 0x20, 0xE2, 0x07, 0x7D, 0x01, 0x7F, 0x04, 0x12,
+0x8D, 0x32, 0xF1, 0x69, 0x90, 0x85, 0xCE, 0xE0, 0x60, 0x04, 0x64, 0x01, 0x70, 0x13, 0xE4, 0x90,
+0x91, 0x6E, 0xF0, 0x90, 0x85, 0xCE, 0xE0, 0x91, 0x25, 0x71, 0x8A, 0x90, 0x85, 0xCE, 0xE0, 0x80,
+0x12, 0xE4, 0x90, 0x91, 0x6E, 0x91, 0x1A, 0x71, 0x8A, 0x90, 0x85, 0xCE, 0xE0, 0x75, 0xF0, 0x03,
+0xA4, 0x24, 0xFE, 0x91, 0x25, 0x90, 0x85, 0xDE, 0xF0, 0x22, 0xF0, 0x90, 0x85, 0xCE, 0xE0, 0x75,
+0xF0, 0x03, 0xA4, 0x24, 0xFE, 0xFF, 0x90, 0x85, 0xCD, 0xE0, 0x2F, 0x22, 0x71, 0x98, 0xE4, 0xFF,
+0xF1, 0x77, 0x90, 0x92, 0xFB, 0xE0, 0x30, 0xE0, 0x03, 0x12, 0xBE, 0x4C, 0x41, 0x88, 0x90, 0x93,
+0x21, 0xE0, 0x30, 0xE0, 0x0C, 0xE4, 0x90, 0x91, 0x6E, 0xF0, 0x90, 0x93, 0x23, 0x71, 0x89, 0x71,
+0x78, 0x90, 0x84, 0xC5, 0xE0, 0xB4, 0x01, 0x16, 0x90, 0x93, 0x21, 0xE0, 0xFF, 0xC4, 0x54, 0x0F,
+0x20, 0xE0, 0x0B, 0xEF, 0xC4, 0x13, 0x54, 0x07, 0x20, 0xE0, 0x03, 0x12, 0xC3, 0x68, 0x22, 0x90,
+0x92, 0x04, 0x12, 0x87, 0x03, 0x90, 0x92, 0x03, 0xEF, 0xF0, 0x12, 0x87, 0x0C, 0x94, 0xBD, 0x00,
+0x94, 0xC6, 0x01, 0x94, 0xCE, 0x08, 0x94, 0xD7, 0x09, 0x94, 0xE0, 0x0A, 0x94, 0xE9, 0x12, 0x94,
+0xF2, 0x13, 0x94, 0xFB, 0x14, 0x95, 0x04, 0x20, 0x95, 0x0D, 0x25, 0x95, 0x16, 0x26, 0x95, 0x1E,
+0x40, 0x95, 0x27, 0x42, 0x95, 0x30, 0x43, 0x95, 0x39, 0x44, 0x95, 0x6C, 0x47, 0x95, 0x6C, 0x49,
+0x95, 0x42, 0xC2, 0x95, 0x4B, 0xC3, 0x95, 0x54, 0xC4, 0x00, 0x00, 0x95, 0x5D, 0x90, 0x92, 0x04,
+0x12, 0x86, 0xFA, 0x02, 0x87, 0xF4, 0x90, 0x92, 0x04, 0x12, 0x86, 0xFA, 0x01, 0x03, 0x90, 0x92,
+0x04, 0x12, 0x86, 0xFA, 0x02, 0x98, 0x1B, 0x90, 0x92, 0x04, 0x12, 0x86, 0xFA, 0x02, 0x9F, 0xF5,
+0x90, 0x92, 0x04, 0x12, 0x86, 0xFA, 0x02, 0xA0, 0x0A, 0x90, 0x92, 0x04, 0x12, 0x86, 0xFA, 0x02,
+0xA1, 0x44, 0x90, 0x92, 0x04, 0x12, 0x86, 0xFA, 0x02, 0xA2, 0x0E, 0x90, 0x92, 0x04, 0x12, 0x86,
+0xFA, 0x02, 0xB0, 0x03, 0x90, 0x92, 0x04, 0x12, 0x86, 0xFA, 0x02, 0x88, 0x45, 0x90, 0x92, 0x04,
+0x12, 0x86, 0xFA, 0x02, 0xB0, 0x12, 0x90, 0x92, 0x04, 0x12, 0x86, 0xFA, 0x41, 0x9E, 0x90, 0x92,
+0x04, 0x12, 0x86, 0xFA, 0x02, 0x89, 0x14, 0x90, 0x92, 0x04, 0x12, 0x86, 0xFA, 0x02, 0x4E, 0x29,
+0x90, 0x92, 0x04, 0x12, 0x86, 0xFA, 0x02, 0x28, 0xE6, 0x90, 0x92, 0x04, 0x12, 0x86, 0xFA, 0x02,
+0x62, 0xFC, 0x90, 0x92, 0x04, 0x12, 0x86, 0xFA, 0x02, 0xB0, 0x1A, 0x90, 0x92, 0x04, 0x12, 0x86,
+0xFA, 0x02, 0xB0, 0x22, 0x90, 0x92, 0x04, 0x12, 0x86, 0xFA, 0x02, 0xB7, 0x5A, 0x90, 0x01, 0xC0,
+0xE0, 0x44, 0x01, 0xF0, 0x90, 0x92, 0x03, 0xE0, 0x90, 0x01, 0xC2, 0xF0, 0x22, 0xE4, 0xFD, 0x01,
+0xA0, 0x90, 0x85, 0xC5, 0xE0, 0x60, 0x02, 0xB1, 0xD0, 0x21, 0xFB, 0xB1, 0x8A, 0x70, 0x0A, 0x90,
+0x85, 0xC5, 0xE0, 0x60, 0x04, 0xF1, 0xAB, 0x71, 0x80, 0x22, 0xE4, 0xFF, 0x12, 0x77, 0x39, 0xEF,
+0x64, 0x01, 0x22, 0xE4, 0x90, 0x92, 0xE4, 0xF0, 0x90, 0x85, 0xC5, 0xE0, 0x60, 0x31, 0xB1, 0x8A,
+0x70, 0x2D, 0xF1, 0x61, 0xF0, 0xF1, 0xF3, 0x90, 0x92, 0xE4, 0x74, 0x01, 0xF0, 0xE4, 0x90, 0x85,
+0xCC, 0xF0, 0x04, 0x60, 0x1A, 0x90, 0x85, 0xC8, 0xE0, 0x20, 0xE2, 0x07, 0x7D, 0x01, 0x7F, 0x04,
+0x12, 0x8D, 0x32, 0xF1, 0x69, 0xE4, 0x90, 0x91, 0x6E, 0xF0, 0x90, 0x85, 0xCD, 0x71, 0x89, 0x22,
+0xD1, 0x4C, 0x13, 0x54, 0x1F, 0x30, 0xE0, 0x10, 0xEF, 0xC4, 0x13, 0x13, 0x54, 0x03, 0x30, 0xE0,
+0x07, 0x7D, 0x02, 0x7F, 0x02, 0x12, 0x7C, 0x41, 0x90, 0x85, 0xC1, 0xE0, 0xFF, 0x13, 0x13, 0x54,
+0x3F, 0x30, 0xE0, 0x0A, 0xEF, 0xF1, 0xDB, 0xF0, 0x54, 0x07, 0x70, 0x47, 0x80, 0x43, 0x90, 0x85,
+0xCE, 0xE0, 0x04, 0xF0, 0x90, 0x85, 0xC9, 0xE0, 0x54, 0xEF, 0xF0, 0x12, 0xC3, 0x33, 0xD3, 0x9F,
+0x40, 0x2F, 0xB1, 0x8A, 0x70, 0x2D, 0x12, 0x8F, 0xDB, 0x70, 0x05, 0x12, 0x70, 0xDB, 0x80, 0x24,
+0x12, 0x70, 0xDB, 0x90, 0x85, 0xCF, 0xE0, 0x04, 0xF0, 0xE0, 0xD3, 0x94, 0x02, 0x40, 0x09, 0xD1,
+0x44, 0xE4, 0x90, 0x85, 0xCF, 0xF0, 0x80, 0x03, 0x12, 0x79, 0x41, 0xE4, 0x90, 0x85, 0xCE, 0xF0,
+0x22, 0xF1, 0xD1, 0x22, 0x90, 0x85, 0xC2, 0xE0, 0x54, 0xFB, 0xF0, 0x22, 0x90, 0x85, 0xC2, 0xE0,
+0xFF, 0x13, 0x13, 0x22, 0xB1, 0x8A, 0x60, 0x02, 0xE1, 0x40, 0x90, 0x85, 0xC5, 0xE0, 0x70, 0x02,
+0xE1, 0x40, 0x90, 0x05, 0x63, 0xE0, 0x90, 0x93, 0x3C, 0xF0, 0x90, 0x05, 0x62, 0xE0, 0x90, 0x93,
+0x3D, 0xF0, 0x90, 0x05, 0x61, 0xE0, 0x90, 0x93, 0x3E, 0xF0, 0x90, 0x05, 0x60, 0xE0, 0x90, 0x93,
+0x3F, 0xF0, 0xF1, 0xAB, 0xF0, 0x90, 0x85, 0xC9, 0xE0, 0x54, 0xEC, 0xF0, 0x90, 0x85, 0xC3, 0xE0,
+0xFF, 0xC4, 0x54, 0x0F, 0x24, 0xFD, 0x50, 0x02, 0x80, 0x03, 0x12, 0xC0, 0x1B, 0x90, 0x85, 0xC3,
+0xE0, 0xFF, 0xC4, 0x54, 0x0F, 0x64, 0x01, 0x70, 0x22, 0x90, 0x06, 0xAB, 0xE0, 0x90, 0x85, 0xCC,
+0xF0, 0x90, 0x06, 0xAA, 0xE0, 0x90, 0x85, 0xCB, 0xF0, 0xA3, 0xE0, 0xFF, 0x70, 0x08, 0x90, 0x85,
+0xCB, 0xE0, 0xFE, 0xFF, 0x80, 0x00, 0x90, 0x85, 0xCC, 0xEF, 0xF0, 0x12, 0xC1, 0x45, 0xE4, 0x90,
+0x85, 0xCE, 0xF0, 0x12, 0xC1, 0x3B, 0xD1, 0x4C, 0x13, 0x54, 0x1F, 0x30, 0xE0, 0x60, 0xEF, 0xC4,
+0x13, 0x13, 0x54, 0x03, 0x20, 0xE0, 0x27, 0xF1, 0x49, 0x6F, 0x70, 0x52, 0x90, 0x85, 0xC2, 0xE0,
+0x44, 0x40, 0xF0, 0xF1, 0x61, 0xF1, 0x41, 0xFD, 0x7F, 0x03, 0x12, 0x7B, 0xFD, 0xF1, 0xEC, 0x7D,
+0x02, 0x7F, 0x02, 0x12, 0x7C, 0x41, 0x90, 0x85, 0xCC, 0xE0, 0x14, 0xF0, 0x80, 0x30, 0xF1, 0x59,
+0x64, 0x01, 0x70, 0x2A, 0xF1, 0x49, 0xFE, 0x6F, 0x60, 0x24, 0x90, 0x05, 0x73, 0xE0, 0xFF, 0xEE,
+0x6F, 0x60, 0x1B, 0xD1, 0x4C, 0x54, 0x3F, 0x30, 0xE0, 0x14, 0xEF, 0x54, 0xBF, 0xF1, 0x41, 0xFD,
+0x7F, 0x03, 0x12, 0x7B, 0xBF, 0x7D, 0x01, 0x7F, 0x02, 0x12, 0x7C, 0xA9, 0xF1, 0xA4, 0xF1, 0x51,
+0x22, 0xF0, 0x90, 0x01, 0x3F, 0x74, 0x10, 0xF0, 0x22, 0x90, 0x85, 0xCB, 0xE0, 0xFF, 0xA3, 0xE0,
+0x22, 0x90, 0x85, 0xC2, 0xE0, 0x44, 0x04, 0xF0, 0x22, 0x90, 0x85, 0xC3, 0xE0, 0xC4, 0x54, 0x0F,
+0x22, 0x90, 0x85, 0xCB, 0xE0, 0x90, 0x05, 0x73, 0x22, 0x90, 0x85, 0xC9, 0xE0, 0x44, 0x10, 0xF0,
+0x22, 0xB1, 0x93, 0xF1, 0xA4, 0x7F, 0x01, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x93,
+0x37, 0xE0, 0xFE, 0x13, 0x13, 0x54, 0x3F, 0x30, 0xE0, 0x15, 0x90, 0x92, 0xE4, 0x74, 0x1E, 0x12,
+0xA2, 0xEE, 0x90, 0x92, 0xE6, 0xEF, 0xF0, 0x7B, 0x01, 0x12, 0xA2, 0xFE, 0x12, 0xA5, 0x2A, 0xD0,
+0xD0, 0x92, 0xAF, 0x22, 0x7D, 0x02, 0x7F, 0x02, 0x02, 0x7C, 0xA9, 0x90, 0x01, 0x57, 0xE4, 0xF0,
+0x90, 0x01, 0x3C, 0x74, 0x02, 0x22, 0xB1, 0x8A, 0x70, 0x16, 0x90, 0x85, 0xC5, 0xE0, 0x60, 0x10,
+0xF1, 0xAB, 0xF0, 0x90, 0x85, 0xC1, 0xE0, 0xF1, 0xDB, 0xF0, 0x54, 0x07, 0x70, 0x02, 0xF1, 0xD1,
+0x22, 0x90, 0x85, 0xC7, 0xE0, 0xFF, 0x7D, 0x01, 0x02, 0x8D, 0x32, 0x54, 0xFB, 0xF0, 0x90, 0x85,
+0xC9, 0xE0, 0x54, 0xFD, 0x22, 0xE4, 0x75, 0xF0, 0x01, 0x02, 0x07, 0x0A, 0x7D, 0x01, 0x7F, 0x02,
+0x02, 0x7C, 0x41, 0x90, 0x05, 0x63, 0xE0, 0x90, 0x93, 0x40, 0xF0, 0x90, 0x05, 0x62, 0xE0, 0x90,
+0x93, 0x41, 0xF0, 0x90, 0x05, 0x61, 0xE0, 0x90, 0x93, 0x42, 0xF0, 0x90, 0x05, 0x60, 0xE0, 0x90,
+0x93, 0x43, 0xF0, 0x90, 0x93, 0x37, 0xE0, 0x44, 0x01, 0xF0, 0x22, 0x12, 0x8F, 0xC6, 0x12, 0x02,
+0xF6, 0x30, 0xE0, 0x14, 0x12, 0xA1, 0x0E, 0x90, 0x84, 0xC5, 0xE0, 0x64, 0x01, 0x70, 0x27, 0x90,
+0xFE, 0x10, 0xE0, 0x44, 0x04, 0xF0, 0x80, 0x1E, 0x90, 0x93, 0x1D, 0xE0, 0x60, 0x16, 0x7D, 0x10,
+0xE4, 0xFF, 0x12, 0x7B, 0xBF, 0x90, 0x01, 0x3C, 0xE0, 0x30, 0xE4, 0x03, 0x74, 0x10, 0xF0, 0x90,
+0x01, 0x63, 0xE4, 0xF0, 0x11, 0xCB, 0x90, 0x92, 0x07, 0x12, 0x8E, 0xF5, 0x90, 0x92, 0xFC, 0x12,
+0x8B, 0xE5, 0x90, 0x92, 0xFD, 0xF0, 0x90, 0x92, 0xFC, 0xE0, 0x54, 0x01, 0x90, 0x93, 0x09, 0xF0,
+0x90, 0x92, 0xFC, 0xE0, 0x54, 0x02, 0x90, 0x93, 0x0A, 0xF0, 0x90, 0x92, 0xFC, 0xE0, 0x54, 0x04,
+0x90, 0x93, 0x0B, 0xF0, 0x90, 0x92, 0xFC, 0xE0, 0x54, 0x08, 0x90, 0x93, 0x0C, 0xF0, 0x90, 0x92,
+0xFC, 0xE0, 0x54, 0x10, 0x90, 0x93, 0x0D, 0xF0, 0x90, 0x92, 0xFD, 0xE0, 0x54, 0x01, 0x90, 0x93,
+0x0E, 0xF0, 0x90, 0x92, 0xFD, 0xE0, 0x54, 0x02, 0x90, 0x93, 0x0F, 0xF0, 0x90, 0x92, 0xFD, 0xE0,
+0x54, 0x04, 0x90, 0x93, 0x10, 0xF0, 0x90, 0x92, 0xFD, 0xE0, 0x54, 0x08, 0x90, 0x93, 0x11, 0xF0,
+0x90, 0x92, 0xFD, 0xE0, 0x54, 0x10, 0x90, 0x93, 0x12, 0xF0, 0x22, 0xC2, 0xAF, 0xD1, 0xC4, 0x7D,
+0x08, 0xE4, 0xFF, 0x12, 0x7C, 0x41, 0xE4, 0x90, 0x93, 0x07, 0xF0, 0xA3, 0xF0, 0xD2, 0xAF, 0x22,
+0x90, 0x93, 0x18, 0xE0, 0x90, 0x92, 0xAE, 0xF0, 0x90, 0x93, 0x19, 0xE0, 0x90, 0x92, 0xAF, 0xF0,
+0x90, 0x93, 0x1A, 0xE0, 0x90, 0x92, 0xB0, 0xF0, 0x90, 0x93, 0x1B, 0xE0, 0x90, 0x92, 0xB1, 0xF0,
+0x90, 0x93, 0x1C, 0xE0, 0x90, 0x92, 0xB2, 0xF0, 0x90, 0x93, 0x09, 0xE0, 0x90, 0x92, 0xB3, 0xF0,
+0x90, 0x93, 0x0A, 0xE0, 0x90, 0x92, 0xB4, 0xF0, 0x90, 0x93, 0x0B, 0xE0, 0x90, 0x92, 0xB5, 0xF0,
+0x90, 0x93, 0x0C, 0xE0, 0x90, 0x92, 0xB6, 0xF0, 0x90, 0x93, 0x0D, 0xE0, 0x90, 0x92, 0xB7, 0xF0,
+0x90, 0x93, 0x0E, 0xE0, 0x90, 0x92, 0xB8, 0xF0, 0x90, 0x93, 0x0F, 0xE0, 0x90, 0x92, 0xB9, 0xF0,
+0x90, 0x93, 0x10, 0xE0, 0x90, 0x92, 0xBA, 0xF0, 0x90, 0x93, 0x11, 0xE0, 0x90, 0x92, 0xBB, 0xF0,
+0x90, 0x93, 0x12, 0xE0, 0x90, 0x92, 0xBC, 0xF0, 0xE4, 0x90, 0x92, 0x57, 0xF0, 0x90, 0x92, 0xC2,
+0xD1, 0x23, 0x90, 0x92, 0x56, 0xF0, 0xB1, 0x9A, 0x50, 0x04, 0xB1, 0xB4, 0x80, 0xF8, 0x90, 0x01,
+0x1F, 0xE0, 0xFE, 0x90, 0x01, 0x1E, 0x12, 0xA1, 0x05, 0x90, 0x92, 0x4B, 0xF0, 0xA3, 0xD1, 0x70,
+0xB1, 0x9A, 0x50, 0x4A, 0xB1, 0xD6, 0x90, 0x92, 0x56, 0xE0, 0xFE, 0x24, 0xBD, 0xF5, 0x82, 0xE4,
+0x34, 0x92, 0xD1, 0x03, 0xE0, 0x24, 0x4D, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0xFF,
+0x74, 0x58, 0x2E, 0xF5, 0x82, 0xE4, 0x34, 0x92, 0xD1, 0x03, 0xE0, 0x24, 0x4E, 0xF9, 0xE4, 0x34,
+0xFC, 0xFA, 0x7B, 0x01, 0xEE, 0xD1, 0xA1, 0x12, 0x87, 0x03, 0xD1, 0x07, 0xE0, 0x24, 0x38, 0xF9,
+0xE4, 0x34, 0xFC, 0xFA, 0xEE, 0xD1, 0x93, 0x12, 0x87, 0x03, 0xB1, 0xC1, 0x80, 0xB2, 0x90, 0x02,
+0x87, 0xE0, 0x70, 0x02, 0xA1, 0x99, 0x90, 0x92, 0xFB, 0xE0, 0x20, 0xE0, 0x02, 0xA1, 0x99, 0xE4,
+0x90, 0x92, 0xC7, 0xD1, 0x23, 0x90, 0x92, 0x4B, 0xE0, 0xFF, 0xA3, 0xE0, 0xA3, 0xCF, 0xF0, 0xA3,
+0xEF, 0xF0, 0x90, 0x92, 0x4D, 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0xEC, 0x90, 0xFD, 0x11, 0xF0, 0x74,
+0x01, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0xFB, 0xF5, 0x83, 0xE0, 0xFE, 0xD1, 0x88, 0xE0, 0x7A, 0x00,
+0x24, 0x00, 0xFF, 0xEA, 0x3E, 0x54, 0x3F, 0x90, 0x92, 0x4F, 0xF0, 0xA3, 0xF1, 0xD9, 0x54, 0x0F,
+0x33, 0x33, 0x33, 0x54, 0xF8, 0x90, 0x92, 0x52, 0xF0, 0xFC, 0x74, 0x07, 0x2D, 0xF5, 0x82, 0xE4,
+0x34, 0xFB, 0xF5, 0x83, 0xE0, 0x54, 0xC0, 0x90, 0x92, 0x54, 0xF0, 0xEC, 0x24, 0x18, 0x90, 0x92,
+0x51, 0xF0, 0xFD, 0x90, 0x92, 0x4D, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x12, 0x55, 0x36, 0xEF, 0x54,
+0xFC, 0x90, 0x92, 0x53, 0xF0, 0x90, 0x92, 0x52, 0xE0, 0x24, 0x18, 0xFF, 0xE4, 0x33, 0x90, 0x92,
+0x4F, 0x8F, 0xF0, 0x12, 0x07, 0x0A, 0x90, 0x92, 0x4F, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x12, 0x7A,
+0xD0, 0x90, 0x92, 0x4B, 0xEE, 0x8F, 0xF0, 0x12, 0x07, 0x0A, 0x90, 0x85, 0xB7, 0xE0, 0xFE, 0xA3,
+0xE0, 0xFF, 0x90, 0x92, 0x4B, 0x12, 0xAF, 0xAF, 0x40, 0x1B, 0x90, 0x85, 0xB8, 0xE0, 0x24, 0x01,
+0xFF, 0x90, 0x85, 0xB7, 0xE0, 0x34, 0x00, 0xFE, 0xC3, 0xED, 0x9F, 0xFF, 0xEC, 0x9E, 0x90, 0x92,
+0x4B, 0xF0, 0xA3, 0xEF, 0xF0, 0x90, 0x92, 0x53, 0xE0, 0x24, 0xC0, 0x60, 0x02, 0x81, 0x98, 0xB1,
+0xA7, 0x24, 0x18, 0xFD, 0x12, 0x55, 0x36, 0xEF, 0x60, 0x02, 0x81, 0x8A, 0xB1, 0xA7, 0x24, 0x19,
+0xFD, 0x12, 0x55, 0x36, 0x90, 0x92, 0x6C, 0xD1, 0x78, 0x90, 0x92, 0x6C, 0xE0, 0xFF, 0xB1, 0xE5,
+0x9F, 0x50, 0x15, 0xB1, 0xA7, 0x24, 0x1A, 0xD1, 0x61, 0x90, 0x92, 0x55, 0xE0, 0x24, 0x6D, 0xF5,
+0x82, 0xE4, 0x34, 0x92, 0xB1, 0xEC, 0x80, 0xE1, 0x90, 0x92, 0x6C, 0xE0, 0x70, 0x02, 0x61, 0xB9,
+0xE4, 0x90, 0x92, 0x56, 0xF0, 0xB1, 0x9A, 0x40, 0x02, 0x61, 0xA1, 0xB1, 0xD6, 0x90, 0x92, 0x56,
+0xE0, 0xFF, 0x24, 0x58, 0xF5, 0x82, 0xE4, 0x34, 0x92, 0xF5, 0x83, 0xE0, 0xFE, 0x90, 0x92, 0x6C,
+0xE0, 0xFD, 0xEE, 0x6D, 0x70, 0x20, 0xEF, 0xD1, 0xA1, 0x12, 0x86, 0xFA, 0xC0, 0x03, 0xC0, 0x02,
+0xC0, 0x01, 0xB1, 0xF7, 0x90, 0x92, 0xD2, 0xED, 0xF0, 0xD0, 0x01, 0xD0, 0x02, 0xD0, 0x03, 0xD1,
+0x2D, 0xEF, 0x60, 0x02, 0x80, 0x4E, 0x90, 0x92, 0x6C, 0xE0, 0x64, 0x03, 0x70, 0x55, 0xB1, 0xF7,
+0x90, 0x92, 0xD2, 0x74, 0x03, 0xF0, 0x7A, 0x93, 0x79, 0xA3, 0xD1, 0x2D, 0xEF, 0x70, 0x11, 0xB1,
+0xF7, 0x90, 0x92, 0xD2, 0x74, 0x03, 0xF0, 0x7A, 0x93, 0x79, 0x9F, 0xD1, 0x2D, 0xEF, 0x60, 0x2B,
+0x90, 0x92, 0x56, 0xE0, 0xFF, 0x24, 0xB8, 0xF5, 0x82, 0xE4, 0x34, 0x92, 0xF5, 0x83, 0xE0, 0x60,
+0x02, 0x80, 0x0C, 0x90, 0x92, 0x56, 0xE0, 0xFF, 0x24, 0xB3, 0xD1, 0x80, 0xE0, 0x60, 0x05, 0x74,
+0xC7, 0x2F, 0x80, 0x15, 0xB1, 0xC8, 0x74, 0x01, 0xF0, 0x80, 0x12, 0x90, 0x92, 0x56, 0xE0, 0x24,
+0xC7, 0x80, 0x06, 0x90, 0x92, 0x56, 0xE0, 0x24, 0xC7, 0xB1, 0xCE, 0xE4, 0xF0, 0xB1, 0xC1, 0x41,
+0xF5, 0x90, 0x92, 0xC7, 0xE0, 0x70, 0x50, 0xA3, 0xE0, 0x70, 0x4C, 0xA3, 0xE0, 0x70, 0x48, 0xA3,
+0xE0, 0x70, 0x44, 0xA3, 0xE0, 0x70, 0x40, 0x81, 0x8A, 0xE4, 0x90, 0x92, 0x56, 0xF0, 0xB1, 0x9A,
+0x50, 0x1D, 0x74, 0xB3, 0x2E, 0xD1, 0x80, 0xE0, 0x60, 0x09, 0x74, 0xC7, 0x2E, 0xB1, 0xCE, 0xE4,
+0xF0, 0x80, 0x08, 0x74, 0xC7, 0x2E, 0xB1, 0xCE, 0x74, 0x01, 0xF0, 0xB1, 0xC1, 0x80, 0xDF, 0x90,
+0x92, 0xC7, 0xE0, 0x70, 0x12, 0xA3, 0xE0, 0x70, 0x0E, 0xA3, 0xE0, 0x70, 0x0A, 0xA3, 0xE0, 0x70,
+0x06, 0xA3, 0xE0, 0x70, 0x02, 0x81, 0x8A, 0xE4, 0x90, 0x92, 0x56, 0xF0, 0xB1, 0x9A, 0x40, 0x02,
+0x81, 0x8A, 0xB1, 0xD6, 0xB1, 0xC8, 0xE0, 0x60, 0x7D, 0x90, 0x93, 0x21, 0xE0, 0x30, 0xE0, 0x07,
+0x13, 0x13, 0x54, 0x3F, 0x30, 0xE0, 0x6F, 0xE4, 0xFF, 0xFE, 0x90, 0x04, 0x1D, 0xE0, 0x60, 0x10,
+0xD3, 0xEF, 0x94, 0xE8, 0xEE, 0x94, 0x03, 0x50, 0x07, 0x0F, 0xBF, 0x00, 0x01, 0x0E, 0x80, 0xEA,
+0x90, 0x04, 0x1D, 0xE0, 0x70, 0x50, 0x90, 0x92, 0x56, 0xE0, 0x24, 0xAE, 0xF5, 0x82, 0xE4, 0x34,
+0x92, 0xF5, 0x83, 0xE0, 0xFF, 0x90, 0x93, 0xAA, 0x74, 0x06, 0xF0, 0x7B, 0x08, 0x7D, 0x01, 0x12,
+0xBD, 0x47, 0x90, 0x92, 0x4F, 0xEE, 0xF0, 0xA3, 0xD1, 0x78, 0xB1, 0xE5, 0x94, 0x06, 0x50, 0x1C,
+0xB1, 0xA7, 0x24, 0x0A, 0xD1, 0x61, 0x90, 0x92, 0x4F, 0xA3, 0xE0, 0xFE, 0x90, 0x92, 0x55, 0xE0,
+0x2E, 0x24, 0x2C, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xB1, 0xEC, 0x80, 0xDE, 0x90, 0x04, 0x1F, 0x74,
+0x20, 0xF0, 0x90, 0x06, 0x35, 0xF0, 0xB1, 0xC1, 0x61, 0xFC, 0xD1, 0x68, 0xFF, 0x12, 0x7C, 0x0B,
+0x90, 0x06, 0x36, 0x74, 0xDD, 0xF0, 0x21, 0xCE, 0x90, 0x92, 0x54, 0xE0, 0x60, 0x02, 0xA1, 0x91,
+0xB1, 0xA7, 0x24, 0x16, 0xFD, 0x12, 0x55, 0x36, 0x90, 0x06, 0x34, 0xEF, 0xF0, 0xB1, 0xA7, 0x24,
+0x17, 0xFD, 0x12, 0x55, 0x36, 0x90, 0x06, 0x37, 0xD1, 0x70, 0xB1, 0x9A, 0x50, 0x41, 0xB1, 0xD6,
+0xE4, 0x90, 0x92, 0x55, 0xF0, 0xB1, 0xE5, 0x94, 0x06, 0x50, 0x30, 0xB1, 0xA7, 0x24, 0x04, 0x2D,
+0xFD, 0x12, 0x55, 0x36, 0x90, 0x92, 0x56, 0xE0, 0xFE, 0xD1, 0x93, 0x12, 0x86, 0xFA, 0x90, 0x92,
+0x55, 0xE0, 0xF5, 0x82, 0xD1, 0x5B, 0x6F, 0x60, 0x0E, 0x74, 0xC2, 0x2E, 0xF5, 0x82, 0xE4, 0x34,
+0x92, 0xF5, 0x83, 0xE4, 0xF0, 0x80, 0x04, 0xB1, 0xF0, 0x80, 0xCA, 0xB1, 0xC1, 0x80, 0xBB, 0x90,
+0x92, 0xC2, 0xE0, 0x64, 0x01, 0x60, 0x17, 0xA3, 0xE0, 0x64, 0x01, 0x60, 0x11, 0xA3, 0xE0, 0x64,
+0x01, 0x60, 0x0B, 0xA3, 0xE0, 0x64, 0x01, 0x60, 0x05, 0xA3, 0xE0, 0xB4, 0x01, 0x06, 0x90, 0x92,
+0x57, 0x74, 0x01, 0xF0, 0x90, 0x92, 0x57, 0xE0, 0x64, 0x01, 0x70, 0x4F, 0x11, 0xCB, 0xF1, 0xED,
+0xFF, 0x12, 0x5F, 0xE9, 0x90, 0x93, 0x1D, 0xE0, 0x70, 0x02, 0x21, 0xCE, 0x90, 0x01, 0x3C, 0xE0,
+0x30, 0xE4, 0x03, 0x74, 0x10, 0xF0, 0x7D, 0x10, 0xE4, 0xFF, 0x12, 0x7B, 0xFD, 0x90, 0x93, 0x1E,
+0xE0, 0x60, 0x08, 0xF5, 0x25, 0xE4, 0xF5, 0x26, 0xFB, 0x80, 0x15, 0x90, 0x93, 0x1F, 0xE0, 0x60,
+0x08, 0xFB, 0xE4, 0xF5, 0x25, 0xF5, 0x26, 0x80, 0x07, 0x75, 0x25, 0x20, 0xE4, 0xF5, 0x26, 0xFB,
+0x7D, 0x01, 0x7F, 0x60, 0x7E, 0x01, 0x12, 0x76, 0x3D, 0x21, 0xCE, 0xE4, 0x90, 0x92, 0x57, 0xF0,
+0x90, 0x92, 0xC2, 0xD1, 0x23, 0x90, 0x92, 0x56, 0xF0, 0xB1, 0x9A, 0x50, 0x04, 0xB1, 0xB4, 0x80,
+0xF8, 0xD1, 0x68, 0xFF, 0x12, 0x7C, 0x0B, 0x21, 0xCE, 0x22, 0x90, 0x93, 0x06, 0xE0, 0xFF, 0x90,
+0x92, 0x56, 0xE0, 0xFE, 0xC3, 0x9F, 0x22, 0x90, 0x92, 0x4D, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x90,
+0x92, 0x51, 0xE0, 0x22, 0x74, 0xC2, 0x2E, 0xF5, 0x82, 0xE4, 0x34, 0x92, 0xF5, 0x83, 0x74, 0x01,
+0xF0, 0x90, 0x92, 0x56, 0xE0, 0x04, 0xF0, 0x22, 0x90, 0x92, 0x56, 0xE0, 0x24, 0xC7, 0xF5, 0x82,
+0xE4, 0x34, 0x92, 0xF5, 0x83, 0x22, 0x74, 0xAE, 0x2E, 0xF5, 0x82, 0xE4, 0x34, 0x92, 0xF5, 0x83,
+0xE0, 0xFF, 0x02, 0x7B, 0x2A, 0x90, 0x92, 0x55, 0xE0, 0xFD, 0xC3, 0x22, 0xF5, 0x83, 0xEF, 0xF0,
+0x90, 0x92, 0x55, 0xE0, 0x04, 0xF0, 0x22, 0x7B, 0x01, 0x7A, 0x92, 0x79, 0x6D, 0x90, 0x92, 0xCF,
+0x02, 0x87, 0x03, 0xF5, 0x83, 0xEF, 0xF0, 0x74, 0xBD, 0x2E, 0xF5, 0x82, 0xE4, 0x34, 0x92, 0xF5,
+0x83, 0x22, 0x90, 0x93, 0x77, 0xE0, 0xFF, 0x90, 0x92, 0x5D, 0xE4, 0xF0, 0xA3, 0xEF, 0xF0, 0xE4,
+0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0x22, 0x90, 0x92, 0xCC,
+0x12, 0x87, 0x03, 0xE4, 0xFF, 0x90, 0x92, 0xD2, 0xE0, 0xFE, 0xEF, 0xC3, 0x9E, 0x50, 0x14, 0x90,
+0x92, 0xCF, 0xD1, 0x56, 0xFE, 0x90, 0x92, 0xCC, 0xD1, 0x56, 0x6E, 0x60, 0x03, 0x7F, 0x00, 0x22,
+0x0F, 0x80, 0xE2, 0x7F, 0x01, 0x22, 0x12, 0x86, 0xFA, 0x8F, 0x82, 0x75, 0x83, 0x00, 0x02, 0x03,
+0x0F, 0xFC, 0xED, 0x2C, 0xFD, 0x02, 0x55, 0x36, 0x90, 0x92, 0x4B, 0xE0, 0xFE, 0xA3, 0xE0, 0x22,
+0xEF, 0xF0, 0xE4, 0x90, 0x92, 0x56, 0xF0, 0x22, 0xEF, 0xF0, 0xE4, 0x90, 0x92, 0x55, 0xF0, 0x22,
+0xF5, 0x82, 0xE4, 0x34, 0x92, 0xF5, 0x83, 0x22, 0x74, 0x00, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0xFB,
+0xF5, 0x83, 0x22, 0x75, 0xF0, 0x03, 0xA4, 0x24, 0x9F, 0xF5, 0x82, 0xE4, 0x34, 0x92, 0xF5, 0x83,
+0x22, 0x75, 0xF0, 0x03, 0xA4, 0x24, 0x5D, 0xF5, 0x82, 0xE4, 0x34, 0x92, 0xF5, 0x83, 0x22, 0xD1,
+0xC4, 0xE4, 0xA3, 0xF0, 0xA3, 0xF0, 0x90, 0x93, 0x02, 0xD1, 0x25, 0x90, 0x93, 0x1D, 0xF0, 0xA3,
+0xF0, 0xA3, 0xF0, 0x22, 0x90, 0x92, 0xFB, 0xE0, 0x54, 0xFE, 0xF0, 0x22, 0xF1, 0xE7, 0x12, 0x7B,
+0xEF, 0x12, 0x3C, 0x03, 0x12, 0xBA, 0x08, 0x12, 0xBE, 0x9A, 0xD1, 0xE8, 0xD1, 0xAF, 0x12, 0xBC,
+0xEE, 0x90, 0x93, 0x29, 0x74, 0x01, 0xF0, 0x22, 0x90, 0x93, 0x21, 0xE0, 0x54, 0xFE, 0xF0, 0x54,
+0xFD, 0xF0, 0x54, 0xFB, 0xF0, 0x44, 0x10, 0xF0, 0x90, 0x84, 0xC5, 0xE0, 0xFF, 0x64, 0x02, 0x70,
+0x2D, 0x90, 0xFD, 0x80, 0xE0, 0x7E, 0x00, 0x30, 0xE0, 0x02, 0x7E, 0x01, 0x90, 0x93, 0x27, 0xF1,
+0x8F, 0x7E, 0x00, 0x30, 0xE1, 0x02, 0x7E, 0x01, 0x90, 0x93, 0x25, 0xF1, 0x8F, 0x7E, 0x00, 0x30,
+0xE2, 0x02, 0x7E, 0x01, 0x90, 0x93, 0x26, 0xF1, 0x8F, 0x90, 0x02, 0xFB, 0xF0, 0x22, 0xEF, 0x64,
+0x01, 0x70, 0x21, 0xF1, 0x88, 0x30, 0xE0, 0x02, 0x7F, 0x01, 0x90, 0x93, 0x27, 0xEF, 0xF0, 0xF1,
+0x88, 0x30, 0xE1, 0x02, 0x7F, 0x01, 0x90, 0x93, 0x25, 0xEF, 0xF0, 0xF1, 0x88, 0x30, 0xE2, 0x02,
+0x7F, 0x01, 0x80, 0x27, 0x90, 0x84, 0xC5, 0xE0, 0x64, 0x03, 0x70, 0x24, 0xF1, 0x81, 0x30, 0xE0,
+0x02, 0x7F, 0x01, 0x90, 0x93, 0x27, 0xEF, 0xF0, 0xF1, 0x81, 0x30, 0xE1, 0x02, 0x7F, 0x01, 0x90,
+0x93, 0x25, 0xEF, 0xF0, 0xF1, 0x81, 0x30, 0xE2, 0x02, 0x7F, 0x01, 0x90, 0x93, 0x26, 0xEF, 0xF0,
+0x22, 0x90, 0xFD, 0x78, 0xE0, 0x7F, 0x00, 0x22, 0x90, 0xFD, 0x70, 0xE0, 0x7F, 0x00, 0x22, 0xEE,
+0xF0, 0x90, 0xFD, 0x80, 0xE0, 0x22, 0xE4, 0xFC, 0xED, 0x2C, 0x24, 0x00, 0xD1, 0x8B, 0xE4, 0xF0,
+0x0C, 0xEC, 0xB4, 0x18, 0xF3, 0xD1, 0x88, 0xEF, 0xF0, 0xEE, 0x54, 0x3F, 0xFF, 0x74, 0x01, 0x2D,
+0xF5, 0x82, 0xE4, 0x34, 0xFB, 0xF5, 0x83, 0xF1, 0xD9, 0x54, 0xF0, 0xF0, 0x74, 0x03, 0x2D, 0xF5,
+0x82, 0xE4, 0x34, 0xFB, 0xF5, 0x83, 0xE0, 0x44, 0x80, 0xF0, 0x74, 0x0B, 0x2D, 0xF5, 0x82, 0xE4,
+0x34, 0xFB, 0xF5, 0x83, 0xE0, 0x44, 0x10, 0xF0, 0x22, 0xEF, 0xF0, 0x74, 0x02, 0x2D, 0xF5, 0x82,
+0xE4, 0x34, 0xFB, 0xF5, 0x83, 0xE0, 0x22, 0xE4, 0xFD, 0xFF, 0x02, 0x6E, 0x5F, 0x90, 0x01, 0xC7,
+0x74, 0x66, 0xF0, 0xE4, 0x22, 0x12, 0x8F, 0xC6, 0x12, 0x89, 0x0E, 0x12, 0xA0, 0x1E, 0x75, 0x1E,
+0x05, 0x7B, 0x01, 0x7A, 0x93, 0x79, 0x13, 0x02, 0x6A, 0x21, 0x12, 0x8F, 0xC6, 0x12, 0x89, 0x0E,
+0x11, 0x1E, 0x75, 0x1E, 0x05, 0x7B, 0x01, 0x7A, 0x93, 0x79, 0x18, 0x02, 0x6A, 0x21, 0x8B, 0x1B,
+0x8A, 0x1C, 0x89, 0x1D, 0x22, 0x90, 0x92, 0x21, 0xEF, 0xF0, 0xA3, 0x12, 0x87, 0x03, 0x90, 0x93,
+0xB8, 0xE0, 0xFE, 0x04, 0xF0, 0x90, 0x00, 0x01, 0xEE, 0x12, 0x03, 0x4E, 0x74, 0x00, 0x2F, 0xF9,
+0xE4, 0x34, 0xFB, 0xFA, 0x7B, 0x01, 0xC0, 0x03, 0xC0, 0x02, 0xC0, 0x01, 0x90, 0x92, 0x22, 0x12,
+0x86, 0xFA, 0x11, 0x1E, 0x75, 0x1E, 0x02, 0xD0, 0x01, 0xD0, 0x02, 0xD0, 0x03, 0x12, 0x6A, 0x21,
+0x90, 0x92, 0x21, 0xE0, 0x24, 0x02, 0xF9, 0xE4, 0x34, 0xFB, 0xFA, 0x7B, 0x01, 0xC0, 0x03, 0xC0,
+0x02, 0xC0, 0x01, 0xA3, 0x12, 0x86, 0xFA, 0xE9, 0x24, 0x02, 0xF9, 0xE4, 0x3A, 0x8B, 0x1B, 0xF5,
+0x1C, 0x89, 0x1D, 0x90, 0x92, 0x22, 0x11, 0x93, 0xF5, 0x1E, 0xD0, 0x01, 0xD0, 0x02, 0xD0, 0x03,
+0x02, 0x6A, 0x21, 0x12, 0x86, 0xFA, 0x90, 0x00, 0x0E, 0x02, 0x03, 0x0F, 0xD3, 0x10, 0xAF, 0x01,
+0xC3, 0xC0, 0xD0, 0x90, 0x92, 0x25, 0x12, 0x87, 0x03, 0x7F, 0x96, 0x7E, 0x02, 0x12, 0x66, 0x80,
+0xEF, 0x60, 0x45, 0x11, 0xFD, 0xFE, 0xEF, 0x24, 0x01, 0xFF, 0xE4, 0x3E, 0xFE, 0x90, 0x92, 0x28,
+0xEF, 0xF0, 0xEE, 0xFF, 0x90, 0xFD, 0x11, 0xF0, 0x90, 0x92, 0x28, 0xE0, 0xFD, 0x90, 0x02, 0x94,
+0xF0, 0xA3, 0xEF, 0xF0, 0x90, 0x92, 0x25, 0x11, 0x93, 0x24, 0x02, 0xFF, 0xE4, 0x33, 0xFE, 0x12,
+0x5A, 0xA5, 0x90, 0x92, 0x28, 0xE0, 0x24, 0x18, 0xFF, 0x90, 0x92, 0x25, 0x12, 0x86, 0xFA, 0x12,
+0x56, 0xF4, 0x90, 0x02, 0x96, 0x74, 0x01, 0xF0, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90, 0x01, 0x17,
+0xE0, 0xFE, 0x90, 0x01, 0x16, 0xE0, 0x7C, 0x00, 0x24, 0x00, 0xFF, 0xEC, 0x3E, 0x22, 0x11, 0xFD,
+0x90, 0x85, 0xB7, 0xF0, 0xA3, 0xEF, 0xF0, 0x90, 0x02, 0x86, 0xE0, 0x44, 0x04, 0xF0, 0x90, 0x92,
+0xFB, 0xE0, 0x44, 0x01, 0xF0, 0x7D, 0x08, 0xE4, 0xFF, 0x12, 0x7C, 0xA9, 0x90, 0x05, 0x52, 0xE0,
+0x54, 0x07, 0x04, 0x90, 0x93, 0x06, 0xF0, 0xE4, 0xA3, 0xF0, 0xA3, 0xF0, 0x90, 0x04, 0x22, 0xE0,
+0x54, 0xEF, 0xF0, 0x22, 0x12, 0x02, 0xF6, 0xFF, 0x90, 0x93, 0x20, 0xF0, 0xBF, 0x01, 0x07, 0x31,
+0x57, 0xE4, 0x90, 0x93, 0x20, 0xF0, 0x22, 0x51, 0x07, 0x7F, 0xF5, 0x7E, 0x01, 0x12, 0x64, 0x37,
+0xBF, 0x01, 0x06, 0x90, 0x92, 0x07, 0xE0, 0xA3, 0xF0, 0x51, 0x07, 0x7F, 0xF6, 0x7E, 0x01, 0x12,
+0x64, 0x37, 0xBF, 0x01, 0x08, 0x90, 0x92, 0x07, 0xE0, 0x90, 0x92, 0x09, 0xF0, 0x51, 0x07, 0x7F,
+0xF4, 0x7E, 0x01, 0x12, 0x64, 0x37, 0xBF, 0x01, 0x08, 0x90, 0x92, 0x07, 0xE0, 0x90, 0x92, 0x0A,
+0xF0, 0x51, 0x07, 0x7F, 0xF3, 0x7E, 0x01, 0x12, 0x64, 0x37, 0xBF, 0x01, 0x08, 0x90, 0x92, 0x07,
+0xE0, 0x90, 0x92, 0x0B, 0xF0, 0x51, 0x07, 0x7F, 0xF2, 0x7E, 0x01, 0x12, 0x64, 0x37, 0xBF, 0x01,
+0x08, 0x90, 0x92, 0x07, 0xE0, 0x90, 0x92, 0x0C, 0xF0, 0x90, 0x92, 0x08, 0xE0, 0xFF, 0xA3, 0xE0,
+0xFD, 0xA3, 0xE0, 0xFB, 0xA3, 0xE0, 0x90, 0x92, 0x10, 0xF0, 0x90, 0x92, 0x0C, 0xE0, 0x90, 0x92,
+0x11, 0xF0, 0x90, 0x92, 0x12, 0x74, 0x12, 0xF0, 0x90, 0x92, 0x20, 0x74, 0x05, 0xF0, 0x90, 0x92,
+0x14, 0xEF, 0xF0, 0xA3, 0xED, 0xF0, 0xA3, 0xEB, 0xF0, 0x90, 0x92, 0x10, 0xE0, 0x90, 0x92, 0x17,
+0xF0, 0x90, 0x92, 0x11, 0xE0, 0x90, 0x92, 0x18, 0xF0, 0x7B, 0x01, 0x7A, 0x92, 0x79, 0x12, 0x12,
+0x5E, 0x10, 0x7F, 0x04, 0x02, 0x87, 0xDA, 0x7B, 0x01, 0x7A, 0x92, 0x79, 0x07, 0x22, 0x12, 0x02,
+0xF6, 0xFF, 0x54, 0x80, 0xFE, 0x90, 0x89, 0x16, 0xE0, 0x54, 0x7F, 0x4E, 0xFE, 0xF0, 0xEF, 0x54,
+0x40, 0xFF, 0xEE, 0x54, 0xBF, 0x51, 0x84, 0x54, 0x20, 0xFD, 0xEF, 0x54, 0xDF, 0x4D, 0xFF, 0x90,
+0x89, 0x16, 0xF0, 0xEE, 0x54, 0x10, 0xFE, 0xEF, 0x54, 0xEF, 0x4E, 0xFF, 0xF0, 0x12, 0x02, 0xF6,
+0x54, 0x0F, 0xFE, 0xEF, 0x54, 0xF0, 0x4E, 0x90, 0x89, 0x16, 0xF0, 0x12, 0x8E, 0xF8, 0xFF, 0x54,
+0x7F, 0x90, 0x89, 0x18, 0xF0, 0xEF, 0x12, 0x8B, 0xEE, 0xFF, 0x90, 0x89, 0x17, 0xE0, 0x54, 0xFE,
+0x12, 0x8B, 0xE4, 0x90, 0x89, 0x19, 0xF0, 0x90, 0x00, 0x03, 0x12, 0x03, 0x0F, 0x54, 0x01, 0x25,
+0xE0, 0xFF, 0x90, 0x89, 0x17, 0xE0, 0x54, 0xFD, 0x4F, 0xF0, 0x51, 0x8C, 0x20, 0xE0, 0x02, 0x7D,
+0x01, 0x02, 0x54, 0x9F, 0x4F, 0xFF, 0xF0, 0x12, 0x02, 0xF6, 0xFE, 0x22, 0x90, 0x89, 0x16, 0xE0,
+0xFE, 0x54, 0x0F, 0xFF, 0xEE, 0xC4, 0x13, 0x13, 0x54, 0x03, 0x7D, 0x00, 0x22, 0x90, 0x89, 0x16,
+0xE0, 0xFF, 0x12, 0x8B, 0xF0, 0x30, 0xE0, 0x1A, 0xEF, 0xC4, 0x54, 0x0F, 0x30, 0xE0, 0x02, 0x51,
+0xC3, 0x90, 0x89, 0x17, 0xE0, 0x30, 0xE0, 0x0A, 0x51, 0x8C, 0x20, 0xE0, 0x02, 0x7D, 0x01, 0x12,
+0x54, 0x9F, 0x22, 0xE4, 0x90, 0x92, 0xE6, 0xF0, 0x90, 0x92, 0xE4, 0x74, 0x14, 0x51, 0xEE, 0xFB,
+0x51, 0xFE, 0x02, 0x87, 0xDA, 0x90, 0x85, 0xC5, 0xE0, 0x60, 0x11, 0x90, 0x06, 0x92, 0xE0, 0x30,
+0xE1, 0x05, 0x12, 0x6B, 0x98, 0x80, 0x05, 0x51, 0xF6, 0x12, 0x97, 0xD1, 0x80, 0xAF, 0xF0, 0x90,
+0x92, 0xF2, 0x74, 0x01, 0xF0, 0x22, 0x90, 0x85, 0xC1, 0xE0, 0x54, 0xF7, 0xF0, 0x22, 0x7A, 0x92,
+0x79, 0xE4, 0x12, 0x5E, 0x10, 0x7F, 0x04, 0x22, 0xC0, 0xE0, 0xC0, 0xF0, 0xC0, 0x83, 0xC0, 0x82,
+0xC0, 0xD0, 0x75, 0xD0, 0x00, 0xC0, 0x00, 0xC0, 0x01, 0xC0, 0x02, 0xC0, 0x03, 0xC0, 0x04, 0xC0,
+0x05, 0xC0, 0x06, 0xC0, 0x07, 0x90, 0x01, 0xC4, 0x74, 0x08, 0xF0, 0x74, 0xA3, 0xA3, 0xF0, 0x12,
+0x75, 0x28, 0xE5, 0x56, 0x30, 0xE1, 0x03, 0x12, 0x95, 0x71, 0xE5, 0x56, 0x30, 0xE2, 0x02, 0x51,
+0xD5, 0xE5, 0x56, 0x30, 0xE4, 0x02, 0x91, 0x2F, 0xE5, 0x57, 0x30, 0xE0, 0x02, 0x71, 0xFC, 0xE5,
+0x59, 0x30, 0xE1, 0x04, 0x7F, 0x04, 0xB1, 0x2A, 0xE5, 0x59, 0x30, 0xE4, 0x03, 0x12, 0x97, 0x71,
+0xE5, 0x59, 0x30, 0xE5, 0x02, 0x71, 0x94, 0xE5, 0x59, 0x30, 0xE6, 0x02, 0x71, 0xC1, 0x74, 0x08,
+0x04, 0x90, 0x01, 0xC4, 0xF0, 0x74, 0xA3, 0xA3, 0xF0, 0xD0, 0x07, 0xD0, 0x06, 0xD0, 0x05, 0xD0,
+0x04, 0xD0, 0x03, 0xD0, 0x02, 0xD0, 0x01, 0xD0, 0x00, 0xD0, 0xD0, 0xD0, 0x82, 0xD0, 0x83, 0xD0,
+0xF0, 0xD0, 0xE0, 0x32, 0x90, 0x85, 0xC1, 0xE0, 0xFF, 0xC4, 0x13, 0x13, 0x54, 0x03, 0x30, 0xE0,
+0x1F, 0xEF, 0x54, 0xBF, 0xF0, 0x90, 0x04, 0xE0, 0xE0, 0x90, 0x85, 0xC2, 0x30, 0xE0, 0x06, 0xE0,
+0x44, 0x01, 0xF0, 0x80, 0x08, 0xE0, 0x54, 0xFE, 0x71, 0xF1, 0x74, 0x04, 0xF0, 0x12, 0x97, 0xD1,
+0x22, 0x90, 0x85, 0xC1, 0xE0, 0xFF, 0x12, 0x8B, 0xF0, 0x30, 0xE0, 0x24, 0xEF, 0x54, 0x7F, 0xF0,
+0x90, 0x04, 0xE0, 0xE0, 0x90, 0x85, 0xC2, 0x30, 0xE1, 0x06, 0xE0, 0x44, 0x02, 0xF0, 0x80, 0x07,
+0xE0, 0x54, 0xFD, 0x71, 0xF1, 0x04, 0xF0, 0x90, 0x85, 0xC5, 0xE0, 0x60, 0x03, 0x12, 0x97, 0xD1,
+0x22, 0xF0, 0x90, 0x01, 0xB9, 0x74, 0x01, 0xF0, 0x90, 0x01, 0xB8, 0x22, 0x12, 0xBD, 0xFD, 0x90,
+0x92, 0xE4, 0xEF, 0xF0, 0x30, 0xE0, 0x05, 0x7D, 0x01, 0xE4, 0x80, 0x02, 0xE4, 0xFD, 0xFF, 0x12,
+0x57, 0x82, 0x90, 0x92, 0xE4, 0xE0, 0x30, 0xE6, 0x11, 0x90, 0x01, 0x2F, 0xE0, 0x30, 0xE7, 0x04,
+0xE4, 0xF0, 0x80, 0x06, 0x90, 0x01, 0x2F, 0x74, 0x80, 0xF0, 0x91, 0x36, 0x02, 0x51, 0x7D, 0x12,
+0x9F, 0xED, 0xFF, 0x02, 0x5F, 0xE9, 0x90, 0x85, 0xD7, 0xE0, 0xFF, 0xA3, 0xE0, 0xFD, 0x90, 0x85,
+0xDE, 0xE0, 0xFB, 0x22, 0x90, 0x85, 0xC5, 0xE0, 0x70, 0x02, 0xA1, 0x09, 0x90, 0x85, 0xDC, 0xE0,
+0x04, 0xF0, 0x90, 0x05, 0x61, 0xE0, 0xFF, 0xE4, 0xFC, 0xFD, 0xFE, 0x78, 0x08, 0x12, 0x04, 0xD8,
+0xA8, 0x04, 0xA9, 0x05, 0xAA, 0x06, 0xAB, 0x07, 0x90, 0x05, 0x60, 0xE0, 0xFF, 0xE4, 0xFC, 0xFD,
+0xFE, 0x12, 0x86, 0xD5, 0xC0, 0x04, 0xC0, 0x05, 0xC0, 0x06, 0xC0, 0x07, 0x90, 0x05, 0x62, 0xE0,
+0xFF, 0xE4, 0xFC, 0xFD, 0xFE, 0x78, 0x10, 0x12, 0x04, 0xD8, 0xD0, 0x03, 0xD0, 0x02, 0xD0, 0x01,
+0xD0, 0x00, 0x12, 0x86, 0xD5, 0xC0, 0x04, 0xC0, 0x05, 0xC0, 0x06, 0xC0, 0x07, 0xA3, 0xE0, 0xFF,
+0xE4, 0xFC, 0xFD, 0xFE, 0x78, 0x18, 0x12, 0x04, 0xD8, 0xD0, 0x03, 0xD0, 0x02, 0xD0, 0x01, 0xD0,
+0x00, 0x12, 0x86, 0xD5, 0x90, 0x85, 0xFC, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0x90, 0x93, 0x37, 0xE0,
+0x54, 0xFE, 0xF0, 0xE0, 0xC3, 0x13, 0x30, 0xE0, 0x0C, 0x91, 0x36, 0x12, 0x51, 0x7D, 0x90, 0x93,
+0x37, 0xE0, 0x54, 0xFD, 0xF0, 0x90, 0x85, 0xC2, 0xE0, 0x13, 0x13, 0x13, 0x54, 0x1F, 0x30, 0xE0,
+0x11, 0x90, 0x01, 0x3B, 0xE0, 0x30, 0xE4, 0x0A, 0x7D, 0x02, 0x7F, 0x02, 0x12, 0x7C, 0x41, 0x12,
+0x97, 0xEC, 0x90, 0x93, 0xBC, 0xE0, 0x04, 0xF0, 0xE0, 0xC3, 0x94, 0x80, 0x40, 0x0B, 0x90, 0x01,
+0x98, 0xE0, 0x54, 0xFE, 0xF0, 0xE0, 0x44, 0x01, 0xF0, 0xF1, 0x42, 0xFF, 0xBF, 0x03, 0x14, 0x90,
+0x93, 0x29, 0xE0, 0xB4, 0x01, 0x0D, 0x90, 0x01, 0xB8, 0xE0, 0x04, 0xF0, 0x90, 0x05, 0x21, 0xE0,
+0x44, 0x80, 0xF0, 0x7F, 0x01, 0xB1, 0x2A, 0x02, 0x94, 0x3E, 0x8F, 0x0D, 0x7F, 0x02, 0x12, 0x86,
+0x27, 0x90, 0x84, 0xC1, 0xE0, 0x45, 0x0D, 0xF0, 0x22, 0x90, 0x92, 0xD3, 0xEF, 0xF0, 0x90, 0x04,
+0x7E, 0xE0, 0xFF, 0xA3, 0xE0, 0x90, 0x92, 0xE3, 0xF0, 0xE0, 0xFE, 0x6F, 0x60, 0x65, 0x90, 0x92,
+0xD4, 0x74, 0x03, 0xF0, 0x90, 0x92, 0xE2, 0x74, 0x08, 0xF0, 0xEE, 0x04, 0x54, 0x0F, 0xFF, 0xE4,
+0xFE, 0xEF, 0x75, 0xF0, 0x08, 0xA4, 0x24, 0x00, 0xF5, 0x82, 0xE4, 0x34, 0x80, 0xF5, 0x83, 0xE5,
+0x82, 0x2E, 0xB1, 0xBA, 0xE0, 0xFD, 0x74, 0xD6, 0x2E, 0xF5, 0x82, 0xE4, 0x34, 0x92, 0xF5, 0x83,
+0xED, 0xF0, 0x0E, 0xEE, 0xB4, 0x08, 0xDA, 0x7B, 0x01, 0x7A, 0x92, 0x79, 0xD4, 0x12, 0x5E, 0x10,
+0x90, 0x92, 0xE3, 0xE0, 0x04, 0x54, 0x0F, 0xFF, 0xF0, 0xBF, 0x0F, 0x02, 0xE4, 0xF0, 0x90, 0x92,
+0xE3, 0xE0, 0x90, 0x04, 0x7F, 0xF0, 0x90, 0x92, 0xD3, 0xE0, 0x7F, 0x04, 0x70, 0x02, 0xA1, 0x2A,
+0x12, 0x87, 0xDA, 0x22, 0x12, 0x05, 0x28, 0xE5, 0x82, 0x29, 0xF5, 0x82, 0xE4, 0x35, 0x83, 0xF5,
+0x83, 0x22, 0x90, 0x01, 0xCC, 0xE0, 0x54, 0x0F, 0x90, 0x92, 0x01, 0xF0, 0x90, 0x92, 0x01, 0xE0,
+0xFD, 0x70, 0x02, 0xC1, 0xD4, 0x90, 0x85, 0x1D, 0xE0, 0xFF, 0x70, 0x06, 0xA3, 0xE0, 0x64, 0x09,
+0x60, 0x0A, 0xEF, 0x14, 0xFF, 0x90, 0x85, 0x1E, 0xE0, 0xB5, 0x07, 0x04, 0x7F, 0x01, 0x80, 0x02,
+0x7F, 0x00, 0xEF, 0x60, 0x08, 0x90, 0x01, 0xC1, 0xE0, 0x44, 0x01, 0xF0, 0x22, 0x90, 0x93, 0xB7,
+0xE0, 0x12, 0xA9, 0x03, 0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0xFF, 0xEF, 0x5D,
+0x70, 0x02, 0xC1, 0xB1, 0xE4, 0x90, 0x92, 0x02, 0xF0, 0x90, 0x92, 0x02, 0xE0, 0xF9, 0xC3, 0x94,
+0x04, 0x50, 0x3F, 0x90, 0x93, 0xB7, 0xE0, 0x75, 0xF0, 0x04, 0xA4, 0xFF, 0xE9, 0xFD, 0x7C, 0x00,
+0x2F, 0xFF, 0xEC, 0x35, 0xF0, 0xFE, 0x74, 0xD0, 0xD1, 0xD5, 0x90, 0x84, 0xCD, 0xB1, 0xB4, 0xEF,
+0xF0, 0x90, 0x93, 0xB7, 0xE0, 0x75, 0xF0, 0x04, 0xA4, 0x2D, 0xFF, 0xEC, 0x35, 0xF0, 0xFE, 0x74,
+0xF0, 0xD1, 0xD5, 0x90, 0x84, 0xD1, 0xB1, 0xB4, 0xEF, 0xF0, 0x90, 0x92, 0x02, 0xE0, 0x04, 0xF0,
+0x80, 0xB7, 0x90, 0x92, 0x01, 0xE0, 0xFF, 0x90, 0x93, 0xB7, 0xE0, 0xFE, 0x74, 0x01, 0xA8, 0x06,
+0x08, 0x80, 0x02, 0xC3, 0x33, 0xD8, 0xFC, 0xF4, 0x5F, 0x90, 0x92, 0x01, 0xF0, 0x90, 0x93, 0xB7,
+0xE0, 0xFF, 0x74, 0x01, 0xA8, 0x07, 0x08, 0x80, 0x02, 0xC3, 0x33, 0xD8, 0xFC, 0x90, 0x01, 0xCC,
+0xF0, 0x90, 0x93, 0xB7, 0xE0, 0x04, 0xF0, 0xE0, 0x54, 0x03, 0xF0, 0x90, 0x85, 0x1E, 0xF1, 0x6A,
+0xB4, 0x0A, 0x02, 0x7F, 0x01, 0xEF, 0x70, 0x02, 0xA1, 0xCC, 0xE4, 0x90, 0x85, 0x1E, 0xF0, 0xA1,
+0xCC, 0x90, 0x01, 0xC0, 0xE0, 0x44, 0x02, 0xF0, 0x90, 0x93, 0xB7, 0xE0, 0x44, 0x80, 0x90, 0x00,
+0x8A, 0xF0, 0x90, 0x93, 0xB7, 0xE0, 0x75, 0xF0, 0x04, 0x90, 0x01, 0xD0, 0x12, 0x05, 0x28, 0xE0,
+0x90, 0x01, 0xC3, 0xF0, 0x22, 0x2F, 0xF5, 0x82, 0x74, 0x01, 0x3E, 0xF5, 0x83, 0xE0, 0xFF, 0x90,
+0x85, 0x1E, 0xE0, 0x75, 0xF0, 0x08, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x93,
+0xB9, 0xEF, 0xF0, 0x7F, 0x8F, 0x12, 0x7B, 0x51, 0xEF, 0x30, 0xE6, 0x3D, 0x7F, 0x8D, 0x12, 0x7B,
+0x51, 0xEF, 0x64, 0x01, 0x70, 0x33, 0x90, 0x93, 0xBA, 0xF0, 0x90, 0x93, 0xBA, 0xE0, 0xFD, 0x90,
+0x93, 0xB9, 0xE0, 0x12, 0x8F, 0x9B, 0xE5, 0x82, 0x2D, 0xB1, 0xBA, 0xE0, 0xFB, 0xE4, 0xFF, 0x12,
+0x8B, 0xB0, 0x90, 0x93, 0xBA, 0xE0, 0x04, 0xF0, 0xE0, 0xC3, 0x94, 0x10, 0x40, 0xDC, 0x7F, 0x8F,
+0x12, 0x7B, 0x51, 0xEF, 0x30, 0xE0, 0x02, 0xF1, 0x71, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xE4, 0xFF,
+0xA1, 0x39, 0x90, 0x01, 0x02, 0xE0, 0x54, 0x03, 0x22, 0xF1, 0x42, 0xFF, 0xBF, 0x03, 0x02, 0xF1,
+0x62, 0x22, 0xE4, 0xF5, 0x77, 0xF5, 0x78, 0xF5, 0x79, 0xF1, 0x42, 0xFF, 0xBF, 0x03, 0x02, 0xF1,
+0x62, 0x22, 0x90, 0x05, 0x21, 0xE0, 0x54, 0x7F, 0xF0, 0x22, 0xE0, 0x04, 0xF0, 0xE0, 0x7F, 0x00,
+0x22, 0xE4, 0xFD, 0x7F, 0x8D, 0x02, 0x7B, 0x3E, 0x12, 0x40, 0xB9, 0x7F, 0x02, 0xA1, 0x2A, 0x90,
+0x92, 0xFB, 0xE0, 0x30, 0xE0, 0x04, 0x7F, 0x20, 0xB1, 0x2A, 0x22, 0xC0, 0xE0, 0xC0, 0xF0, 0xC0,
+0x83, 0xC0, 0x82, 0xC0, 0xD0, 0x75, 0xD0, 0x00, 0xC0, 0x00, 0xC0, 0x01, 0xC0, 0x02, 0xC0, 0x03,
+0xC0, 0x04, 0xC0, 0x05, 0xC0, 0x06, 0xC0, 0x07, 0x90, 0x01, 0xC4, 0x74, 0x8B, 0xF0, 0x74, 0xA7,
+0xA3, 0xF0, 0x12, 0x71, 0x90, 0xE5, 0x4C, 0x30, 0xE1, 0x02, 0xF1, 0x3E, 0xE5, 0x4C, 0x30, 0xE3,
+0x02, 0xF1, 0x7F, 0xE5, 0x4C, 0x30, 0xE4, 0x02, 0xF1, 0x78, 0xE5, 0x4C, 0x30, 0xE5, 0x03, 0x12,
+0xBD, 0x0B, 0xE5, 0x4E, 0x30, 0xE0, 0x03, 0x12, 0x94, 0x2C, 0xE5, 0x4E, 0x30, 0xE1, 0x02, 0x91,
+0x44, 0xE5, 0x4E, 0x30, 0xE2, 0x03, 0x12, 0xB9, 0x22, 0xE5, 0x4E, 0x30, 0xE3, 0x03, 0x12, 0x95,
+0x7B, 0xE5, 0x4E, 0x30, 0xE4, 0x03, 0x12, 0x97, 0xB6, 0xE5, 0x4E, 0x30, 0xE5, 0x03, 0x12, 0xB9,
+0x34, 0xE5, 0x4E, 0x30, 0xE6, 0x02, 0x11, 0xCD, 0xE5, 0x4E, 0x30, 0xE7, 0x03, 0x12, 0xA7, 0x52,
+0xE5, 0x4F, 0x30, 0xE0, 0x03, 0x12, 0xA7, 0x49, 0xE5, 0x4F, 0x30, 0xE1, 0x02, 0x11, 0xC3, 0xE5,
+0x4F, 0x30, 0xE4, 0x02, 0xF1, 0xF0, 0xE5, 0x4F, 0x30, 0xE5, 0x02, 0x11, 0x53, 0x74, 0x8B, 0x04,
+0x90, 0x01, 0xC4, 0xF0, 0x74, 0xA7, 0xA3, 0xF0, 0xD0, 0x07, 0xD0, 0x06, 0xD0, 0x05, 0xD0, 0x04,
+0xD0, 0x03, 0xD0, 0x02, 0xD0, 0x01, 0xD0, 0x00, 0xD0, 0xD0, 0xD0, 0x82, 0xD0, 0x83, 0xD0, 0xF0,
+0xD0, 0xE0, 0x32, 0xE4, 0xF5, 0x77, 0x90, 0x85, 0xBB, 0xE0, 0xFF, 0xE5, 0x77, 0xC3, 0x9F, 0x50,
+0x61, 0xAF, 0x77, 0x12, 0x77, 0x39, 0xEF, 0x60, 0x55, 0xE5, 0x77, 0x13, 0x13, 0x13, 0x54, 0x1F,
+0xFF, 0xE5, 0x77, 0x54, 0x07, 0xFE, 0x74, 0x75, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83,
+0xE0, 0xFD, 0xAF, 0x06, 0x31, 0x04, 0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0xFF,
+0xEF, 0x5D, 0x60, 0x2A, 0xE5, 0x77, 0xF1, 0xF5, 0x20, 0xE7, 0x02, 0x80, 0x13, 0xE5, 0x77, 0xC4,
+0x54, 0xF0, 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, 0x81, 0xF5, 0x83, 0xE0, 0xFF, 0x20, 0xE7, 0x09,
+0x90, 0x01, 0xC1, 0xE0, 0x44, 0x20, 0xF0, 0x80, 0x05, 0xAD, 0x77, 0x12, 0x8F, 0x0A, 0x05, 0x77,
+0x80, 0x94, 0x22, 0x90, 0x85, 0xC5, 0xE0, 0x60, 0x03, 0x12, 0xC3, 0x3D, 0x22, 0xE4, 0xFF, 0x12,
+0x77, 0x39, 0xBF, 0x01, 0x10, 0x90, 0x85, 0xC5, 0xE0, 0x60, 0x0A, 0x11, 0xE6, 0xF0, 0x54, 0x07,
+0x70, 0x03, 0x12, 0x97, 0xD1, 0x22, 0x90, 0x85, 0xC9, 0xE0, 0x54, 0xFE, 0x22, 0x13, 0x13, 0x13,
+0x54, 0x1F, 0x24, 0x75, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83, 0xE0, 0xFD, 0x7C, 0x00, 0xE5,
+0x62, 0x54, 0x07, 0xFF, 0x74, 0x01, 0x7E, 0x00, 0xA8, 0x07, 0x08, 0x22, 0x90, 0x04, 0x85, 0xE0,
+0xF5, 0x6B, 0x90, 0x93, 0x77, 0xE0, 0x04, 0xF0, 0xE4, 0xF5, 0x62, 0x90, 0x85, 0xBB, 0xE0, 0xFF,
+0xE5, 0x62, 0xC3, 0x9F, 0x40, 0x02, 0xC1, 0xB5, 0xE5, 0x62, 0x12, 0x8F, 0x9B, 0xE0, 0xF5, 0x6D,
+0x12, 0xC4, 0x6C, 0xF5, 0x83, 0xE0, 0x65, 0x6D, 0x60, 0x18, 0x90, 0x8A, 0x71, 0xE5, 0x6D, 0xF0,
+0xE4, 0xA3, 0xF0, 0xAB, 0x62, 0xFD, 0xFF, 0x12, 0x52, 0xC3, 0x12, 0xC4, 0x6C, 0xF5, 0x83, 0xE5,
+0x6D, 0xF0, 0x90, 0x04, 0xA0, 0xE0, 0x64, 0x01, 0x70, 0x50, 0xA3, 0xE0, 0x65, 0x62, 0x70, 0x4A,
+0xA3, 0xE0, 0xF5, 0x63, 0xA3, 0xE0, 0x90, 0x92, 0x56, 0xF0, 0xE5, 0x62, 0x12, 0x8F, 0x9B, 0xE0,
+0x65, 0x63, 0x70, 0x02, 0xC1, 0xB1, 0xE5, 0x62, 0x12, 0x8F, 0x9B, 0xE5, 0x63, 0xF0, 0xE5, 0x62,
+0x12, 0x8F, 0xAC, 0xE0, 0x54, 0xFC, 0xFF, 0x90, 0x92, 0x56, 0xE0, 0x54, 0x03, 0x4F, 0xFF, 0xE5,
+0x62, 0x12, 0x8F, 0xAC, 0xEF, 0xF0, 0x90, 0x8A, 0x71, 0xE5, 0x63, 0xF0, 0xA3, 0x74, 0xFF, 0xF0,
+0xAB, 0x62, 0xE4, 0xFD, 0xFF, 0x12, 0x52, 0xC3, 0xC1, 0xB1, 0xAF, 0x62, 0x12, 0x77, 0x39, 0x75,
+0xF0, 0x12, 0xE5, 0x62, 0x12, 0x8A, 0x79, 0x12, 0x8B, 0xF0, 0xFD, 0xF1, 0xE9, 0xED, 0xF0, 0x90,
+0x92, 0x5F, 0xE4, 0x12, 0xC3, 0xF6, 0xE4, 0xF0, 0xA3, 0xE5, 0x62, 0xF0, 0x11, 0xED, 0x80, 0x05,
+0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0xFF, 0xEE, 0x5C, 0xFE, 0xEF, 0x5D, 0xFF, 0x90, 0x92,
+0x63, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0x7B, 0x02, 0x7A, 0x00, 0xE4, 0xFD, 0x7F, 0x01, 0xD1, 0xF6,
+0x12, 0xB9, 0xFD, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x12, 0xB9, 0xF2, 0xE0, 0xFD, 0xE5, 0x62, 0xF1,
+0xF5, 0x54, 0x80, 0xFB, 0xF1, 0xE9, 0xEB, 0xF0, 0x12, 0xC4, 0x52, 0xED, 0xF0, 0x90, 0x92, 0x5D,
+0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0xE4, 0x90, 0x92, 0x63, 0xF0, 0xA3, 0xF0, 0x7B, 0x03, 0xFA, 0xFD,
+0x7F, 0x01, 0xD1, 0xF6, 0xAF, 0x62, 0x12, 0x77, 0x39, 0xEF, 0x70, 0x02, 0xC1, 0xB1, 0x75, 0xF0,
+0x12, 0xE5, 0x62, 0x12, 0x8A, 0x79, 0x12, 0x8B, 0xF0, 0x30, 0xE0, 0x02, 0xC1, 0xB1, 0xE5, 0x62,
+0x11, 0xED, 0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0xFF, 0xEE, 0x5C, 0xFE, 0xEF,
+0x5D, 0x4E, 0x60, 0x02, 0xC1, 0xB1, 0x12, 0xB9, 0xFD, 0xE0, 0xFE, 0xA3, 0xE0, 0x4E, 0x70, 0x08,
+0x12, 0xB9, 0xF2, 0xE0, 0x70, 0x02, 0xC1, 0xB1, 0xE5, 0x62, 0x75, 0xF0, 0x12, 0xA4, 0x24, 0x44,
+0xF9, 0x74, 0x89, 0x35, 0xF0, 0xFA, 0x7B, 0x01, 0x90, 0x92, 0x4B, 0x12, 0x87, 0x03, 0x12, 0xC4,
+0x28, 0x12, 0x03, 0xED, 0x2F, 0xFF, 0xF1, 0x6D, 0x2F, 0xFF, 0xF1, 0xE3, 0x2F, 0xFF, 0xF1, 0xBF,
+0x2F, 0xF5, 0x6C, 0x12, 0xB9, 0xFD, 0xE0, 0xF5, 0x68, 0xA3, 0xE0, 0xF5, 0x69, 0x12, 0xB9, 0xF2,
+0xE0, 0xFF, 0x90, 0x92, 0x4E, 0xE4, 0xF0, 0xA3, 0xEF, 0xF0, 0xE5, 0x62, 0x12, 0x8F, 0x9B, 0xE0,
+0xF5, 0x63, 0x54, 0x80, 0xF5, 0x65, 0xE5, 0x63, 0x54, 0x7F, 0xF5, 0x64, 0x12, 0xC4, 0x63, 0xF1,
+0x73, 0x12, 0xC4, 0x2E, 0x90, 0x92, 0x5F, 0xF1, 0x77, 0xF1, 0x6D, 0xFF, 0x90, 0x92, 0x61, 0xF1,
+0x77, 0xF1, 0xE3, 0xFF, 0x90, 0x92, 0x63, 0xF1, 0x77, 0x7B, 0x01, 0xF1, 0xA5, 0xF1, 0xB9, 0xF1,
+0x73, 0x90, 0x92, 0x4E, 0xE0, 0xFF, 0xA3, 0xE0, 0x90, 0x92, 0x5F, 0xCF, 0xF0, 0xA3, 0xEF, 0xF0,
+0xA3, 0x12, 0xC4, 0x85, 0xA3, 0xE4, 0xF0, 0xA3, 0xE5, 0x63, 0xF0, 0x7B, 0x02, 0xF1, 0xA5, 0x74,
0x7C, 0x25, 0x62, 0xF5, 0x82, 0xE4, 0x34, 0x90, 0xF5, 0x83, 0xE0, 0xC3, 0x94, 0x05, 0x40, 0x02,
-0xA1, 0x4F, 0x75, 0xF0, 0x12, 0xE5, 0x62, 0x12, 0x8F, 0xDE, 0xFF, 0xE5, 0x64, 0xD3, 0x9F, 0x40,
+0xA1, 0x25, 0x75, 0xF0, 0x12, 0xE5, 0x62, 0x12, 0x8F, 0xFB, 0xFF, 0xE5, 0x64, 0xD3, 0x9F, 0x40,
0x08, 0x8F, 0x64, 0xE5, 0x64, 0x45, 0x65, 0xF5, 0x63, 0xE5, 0x64, 0x90, 0x82, 0xE1, 0x93, 0xF5,
0x6A, 0xE5, 0x65, 0x60, 0x04, 0x05, 0x6A, 0x05, 0x6A, 0x90, 0x04, 0x8C, 0xE0, 0x64, 0x01, 0x70,
0x28, 0xE5, 0x64, 0xC3, 0x94, 0x0C, 0x40, 0x21, 0x74, 0x84, 0x25, 0x64, 0xF5, 0x82, 0xE4, 0x34,
0x04, 0xF5, 0x83, 0xE0, 0xFF, 0x54, 0x7F, 0xFE, 0xEF, 0x30, 0xE7, 0x06, 0xE5, 0x6A, 0x2E, 0xFF,
0x80, 0x05, 0xC3, 0xE5, 0x6A, 0x9E, 0xFF, 0x8F, 0x6A, 0xE5, 0x6A, 0xD3, 0x94, 0x1A, 0xAF, 0x6A,
-0x40, 0x02, 0x7F, 0x1A, 0x8F, 0x6A, 0x11, 0xFB, 0x7B, 0x03, 0xFA, 0xF1, 0xDA, 0xE5, 0x63, 0x90,
-0x83, 0x59, 0x93, 0xFF, 0xD3, 0x90, 0x92, 0x37, 0xE0, 0x9F, 0x90, 0x92, 0x36, 0xE0, 0x94, 0x00,
-0x40, 0x02, 0x80, 0x6A, 0xC3, 0xE5, 0x69, 0x94, 0x0A, 0xE5, 0x68, 0x94, 0x00, 0x40, 0x02, 0x81,
-0x87, 0xF1, 0x87, 0xE0, 0xC3, 0x94, 0x01, 0x40, 0x05, 0xF1, 0x87, 0xE0, 0x14, 0xF0, 0xF1, 0xEC,
-0xFF, 0x90, 0x92, 0x37, 0xE0, 0x2F, 0xFF, 0x90, 0x92, 0x36, 0xE0, 0x12, 0xC3, 0x46, 0xF1, 0x9F,
+0x40, 0x02, 0x7F, 0x1A, 0x8F, 0x6A, 0x12, 0x9E, 0x17, 0x7B, 0x03, 0xFA, 0xF1, 0xA7, 0xE5, 0x63,
+0x90, 0x83, 0x59, 0x93, 0xFF, 0xD3, 0x90, 0x92, 0x4F, 0xE0, 0x9F, 0x90, 0x92, 0x4E, 0xE0, 0x94,
+0x00, 0x40, 0x02, 0x80, 0x65, 0xC3, 0xE5, 0x69, 0x94, 0x0A, 0xE5, 0x68, 0x94, 0x00, 0x40, 0x02,
+0x81, 0x6E, 0xD1, 0xE4, 0xE0, 0xC3, 0x94, 0x01, 0x40, 0x05, 0xD1, 0xE4, 0xE0, 0x14, 0xF0, 0xF1,
+0xB9, 0xFF, 0x90, 0x92, 0x4F, 0xE0, 0x2F, 0xFF, 0x90, 0x92, 0x4E, 0xE0, 0xF1, 0xC5, 0xF1, 0x6C,
0x2F, 0xFD, 0xEE, 0x35, 0xF0, 0xFC, 0xE5, 0x68, 0xC3, 0x13, 0xFE, 0xE5, 0x69, 0x13, 0xFF, 0xD3,
-0xED, 0x9F, 0xEC, 0x9E, 0x40, 0x31, 0xE5, 0x62, 0x94, 0x05, 0x50, 0x05, 0xF1, 0x87, 0x74, 0x03,
-0xF0, 0x90, 0x92, 0x45, 0xE5, 0x68, 0xF0, 0xA3, 0xE5, 0x69, 0xF0, 0xE5, 0x68, 0xC3, 0x13, 0xA3,
-0xF0, 0xE5, 0x69, 0x13, 0xA3, 0xF1, 0x59, 0x12, 0xC3, 0x64, 0x7B, 0x01, 0xD1, 0xEB, 0x7D, 0x01,
-0xAF, 0x62, 0x12, 0xBA, 0xB6, 0xA1, 0x4F, 0x12, 0xC3, 0xBC, 0x65, 0x6C, 0x70, 0x02, 0xE5, 0xF0,
-0x70, 0x55, 0x90, 0x92, 0x45, 0xF0, 0xA3, 0xE5, 0x6C, 0xF0, 0xC3, 0x13, 0xFF, 0xA3, 0xE4, 0xF0,
-0xA3, 0xEF, 0xF1, 0x59, 0x12, 0xC3, 0x64, 0x7B, 0x02, 0xD1, 0xEB, 0xE5, 0x62, 0xC3, 0x94, 0x05,
-0x50, 0x0E, 0xF1, 0x87, 0xE0, 0xD3, 0x94, 0x00, 0x40, 0x06, 0x11, 0xF6, 0x7B, 0x03, 0x80, 0x0B,
-0xE5, 0x6C, 0xC3, 0x94, 0x03, 0x50, 0x10, 0x11, 0xF6, 0x7B, 0x04, 0xFA, 0xD1, 0xED, 0x7D, 0x06,
-0xAF, 0x62, 0x12, 0xB9, 0x46, 0xC1, 0xE6, 0xE4, 0xFD, 0xAF, 0x62, 0x12, 0x8B, 0xF7, 0x7D, 0x07,
-0xAF, 0x62, 0x12, 0xB9, 0x46, 0xA1, 0x4F, 0x11, 0xF6, 0x7B, 0x08, 0xFA, 0xD1, 0xED, 0x7D, 0x01,
-0xAF, 0x62, 0x12, 0x65, 0xC2, 0xA1, 0x4F, 0xF1, 0x87, 0xE4, 0xF0, 0x90, 0x92, 0x43, 0x74, 0x02,
-0xF0, 0xAB, 0x6A, 0xAD, 0x62, 0xAF, 0x69, 0xAE, 0x68, 0x12, 0xB9, 0xC6, 0x8E, 0x66, 0x8F, 0x67,
-0x12, 0xC3, 0x97, 0xC3, 0x74, 0x01, 0x93, 0x95, 0x67, 0xE4, 0x93, 0x95, 0x66, 0x50, 0x1F, 0xF1,
-0x93, 0xE4, 0xF0, 0x7D, 0x01, 0xAF, 0x62, 0x12, 0x8B, 0xF7, 0x12, 0xC3, 0x14, 0xE5, 0x66, 0xF0,
-0xA3, 0xE5, 0x67, 0xF0, 0xE4, 0x90, 0x92, 0x49, 0x31, 0x09, 0x7B, 0x01, 0x80, 0x28, 0x12, 0xC3,
-0x5C, 0xC3, 0xE5, 0x67, 0x9F, 0xE5, 0x66, 0x94, 0x00, 0x50, 0x24, 0xF1, 0x93, 0xE4, 0xF0, 0x7D,
-0x01, 0xAF, 0x62, 0x12, 0xBA, 0xB6, 0x90, 0x92, 0x45, 0x12, 0xC3, 0x55, 0x12, 0x8F, 0xF4, 0xEF,
-0xF0, 0xE4, 0x31, 0x08, 0x7B, 0x02, 0xFA, 0x7D, 0x05, 0x7F, 0x01, 0xD1, 0xF1, 0x80, 0x50, 0x7D,
-0x07, 0xAF, 0x62, 0x12, 0xB9, 0x46, 0x12, 0xC3, 0x14, 0x12, 0xC3, 0x55, 0x12, 0xC3, 0xAB, 0xEF,
-0xF0, 0xF1, 0x93, 0x12, 0xC3, 0x64, 0x7B, 0x03, 0x7A, 0x00, 0x7D, 0x05, 0x7F, 0x01, 0xD1, 0xF1,
-0xF1, 0x93, 0xE0, 0x04, 0xF0, 0xE5, 0x64, 0x90, 0x83, 0x6D, 0x93, 0xFF, 0xF1, 0x93, 0xE0, 0xC3,
-0x9F, 0x40, 0x1C, 0xF1, 0x93, 0xE4, 0x12, 0xC3, 0x5B, 0x12, 0xC3, 0x97, 0x74, 0x01, 0x93, 0x2F,
-0xFF, 0xE4, 0x93, 0x34, 0x00, 0xC3, 0x13, 0xFE, 0xEF, 0x13, 0xFF, 0xE5, 0x62, 0xF1, 0xC7, 0x75,
-0xF0, 0x12, 0xE5, 0x62, 0x90, 0x89, 0x43, 0x12, 0x05, 0x28, 0xE0, 0x64, 0x01, 0x60, 0x02, 0xC1,
-0xCB, 0x12, 0xC3, 0x7B, 0xAE, 0xF0, 0x12, 0x03, 0xED, 0x2F, 0xFF, 0xE5, 0xF0, 0x3E, 0xF1, 0x9F,
-0x2F, 0xFF, 0xEE, 0x12, 0xC3, 0x46, 0xFE, 0x90, 0x00, 0x08, 0x12, 0xC3, 0x4C, 0x90, 0x92, 0x38,
-0xF0, 0xA3, 0xEF, 0xF0, 0x12, 0x03, 0xED, 0xFF, 0xC3, 0x90, 0x92, 0x39, 0xE0, 0x9F, 0xFE, 0x90,
-0x92, 0x38, 0xE0, 0x95, 0xF0, 0x90, 0x92, 0x3A, 0xF0, 0xA3, 0xCE, 0xF0, 0x12, 0xC3, 0xA5, 0xFD,
-0xAC, 0xF0, 0x25, 0xE0, 0xFF, 0xEC, 0x33, 0xFE, 0xEF, 0x2D, 0xFD, 0xEE, 0x3C, 0xFC, 0xF1, 0xA0,
-0x25, 0xE0, 0xFF, 0xE5, 0xF0, 0x33, 0xFE, 0x90, 0x00, 0x02, 0x12, 0xC3, 0x4C, 0xCF, 0x2D, 0xFD,
-0xEF, 0x3C, 0xFC, 0xF1, 0xEC, 0xAE, 0xF0, 0x78, 0x02, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9,
-0x2D, 0xFF, 0xEC, 0x3E, 0x90, 0x92, 0x3C, 0xF0, 0xA3, 0xEF, 0xF0, 0x90, 0x92, 0x36, 0x12, 0xC3,
-0x33, 0x24, 0x0C, 0xF5, 0x82, 0xE4, 0x34, 0x90, 0xF1, 0xE0, 0x50, 0x08, 0x90, 0x92, 0x36, 0x12,
-0xC3, 0x6F, 0x80, 0x04, 0x7E, 0xFF, 0x7F, 0xFF, 0xE5, 0x62, 0x25, 0xE0, 0x24, 0x0C, 0xF5, 0x82,
-0xE4, 0x34, 0x90, 0xF1, 0xD0, 0x90, 0x92, 0x38, 0x12, 0xC3, 0x33, 0x24, 0x2C, 0xF5, 0x82, 0xE4,
-0x34, 0x90, 0xF1, 0xE0, 0x50, 0x08, 0x90, 0x92, 0x38, 0x12, 0xC3, 0x6F, 0x80, 0x04, 0x7E, 0xFF,
-0x7F, 0xFF, 0xE5, 0x62, 0x25, 0xE0, 0x24, 0x2C, 0xF5, 0x82, 0xE4, 0x34, 0x90, 0xF1, 0xD0, 0x90,
-0x92, 0x3C, 0x12, 0xC3, 0x33, 0x24, 0x5C, 0xF5, 0x82, 0xE4, 0x34, 0x90, 0xF1, 0xE0, 0x50, 0x08,
-0x90, 0x92, 0x3C, 0x12, 0xC3, 0x6F, 0x80, 0x04, 0x7E, 0xFF, 0x7F, 0xFF, 0xE5, 0x62, 0x25, 0xE0,
-0x24, 0x5C, 0xF5, 0x82, 0xE4, 0x34, 0x90, 0xF1, 0xD0, 0xC3, 0x74, 0xFF, 0x95, 0x69, 0xFF, 0x74,
-0xFF, 0x95, 0x68, 0xFE, 0x12, 0xC3, 0xB2, 0x34, 0x90, 0xF1, 0xE0, 0x50, 0x0A, 0xE5, 0x69, 0x2D,
-0xFF, 0xE5, 0x68, 0x3C, 0xFE, 0x80, 0x04, 0x7E, 0xFF, 0x7F, 0xFF, 0x12, 0xC3, 0xB2, 0x34, 0x90,
-0xF1, 0xD0, 0x90, 0x92, 0x3A, 0xE0, 0xFE, 0xA3, 0xE0, 0xFB, 0xC3, 0x74, 0xFF, 0x9B, 0xFF, 0x74,
-0xFF, 0x9E, 0xFE, 0x74, 0xFF, 0x94, 0x00, 0xFD, 0x74, 0xFF, 0x94, 0x00, 0xFC, 0x90, 0x8F, 0x77,
-0x12, 0x86, 0xEE, 0xD3, 0x12, 0x04, 0xB4, 0x50, 0x16, 0x90, 0x92, 0x3A, 0xE0, 0xFE, 0xA3, 0xE0,
-0xFF, 0xE4, 0xFC, 0xFD, 0x90, 0x8F, 0x77, 0x12, 0x86, 0xEE, 0x12, 0x86, 0xAD, 0x80, 0x06, 0x74,
-0xFF, 0xFF, 0xFE, 0xFD, 0xFC, 0x90, 0x8F, 0x77, 0x12, 0x04, 0xEB, 0xE4, 0xF5, 0x6C, 0xFD, 0xAF,
-0x62, 0x12, 0x65, 0xC2, 0xE4, 0x90, 0x92, 0x45, 0xF0, 0x31, 0x04, 0xA3, 0xF0, 0x7B, 0x01, 0xFA,
-0x7D, 0xFF, 0x7F, 0x01, 0xD1, 0xF1, 0x05, 0x62, 0x21, 0x20, 0x22, 0x7A, 0x00, 0x7D, 0x03, 0x7F,
-0x01, 0x90, 0x04, 0x84, 0xE0, 0xFE, 0x60, 0x60, 0x90, 0x92, 0x4F, 0xEF, 0xF0, 0xA3, 0xED, 0xF0,
-0xEB, 0xA3, 0xF0, 0xEA, 0xA3, 0xF0, 0x90, 0x92, 0x45, 0xE0, 0xFC, 0xA3, 0xE0, 0x90, 0x92, 0x53,
-0xF0, 0xEC, 0xA3, 0xF0, 0x90, 0x92, 0x47, 0xE0, 0xFC, 0xA3, 0xE0, 0x90, 0x92, 0x55, 0xF0, 0xEC,
-0xA3, 0xF0, 0x90, 0x92, 0x49, 0xE0, 0xFC, 0xA3, 0xE0, 0x90, 0x92, 0x57, 0xF0, 0xEC, 0xA3, 0xF0,
-0x90, 0x92, 0x4B, 0xE0, 0xFC, 0xA3, 0xE0, 0x90, 0x92, 0x59, 0xF0, 0xEC, 0xA3, 0xF0, 0x90, 0x92,
-0x4D, 0x74, 0xFE, 0xF0, 0x90, 0x92, 0x5B, 0x74, 0x0C, 0xF0, 0x7B, 0x01, 0x7A, 0x92, 0x79, 0x4D,
-0x12, 0x5E, 0x10, 0x7F, 0x04, 0x12, 0x87, 0xDA, 0x22, 0xF0, 0x90, 0x92, 0x33, 0x12, 0x86, 0xFA,
-0x90, 0x00, 0x06, 0x12, 0x04, 0x18, 0xFF, 0xAE, 0xF0, 0x90, 0x00, 0x08, 0x12, 0x04, 0x18, 0x2F,
-0xFF, 0xE5, 0xF0, 0x3E, 0xFE, 0x90, 0x00, 0x04, 0x12, 0x04, 0x18, 0x2F, 0xFF, 0xEE, 0x35, 0xF0,
-0x90, 0x92, 0x49, 0xF0, 0xA3, 0xEF, 0xF0, 0x74, 0x70, 0x25, 0x62, 0xF5, 0x82, 0xE4, 0x34, 0x93,
-0xF5, 0x83, 0x22, 0x74, 0xAC, 0x25, 0x62, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83, 0x22, 0xFE,
-0x90, 0x00, 0x04, 0x02, 0x04, 0x18, 0xFF, 0x90, 0x92, 0x45, 0xE5, 0xF0, 0xF0, 0xA3, 0xEF, 0xF0,
-0x22, 0xE5, 0x71, 0x25, 0xE0, 0x24, 0xF5, 0xF5, 0x82, 0xE4, 0x34, 0x82, 0xF5, 0x83, 0xE4, 0x93,
-0xFE, 0x74, 0x01, 0x93, 0xFF, 0xE5, 0x6E, 0x25, 0xE0, 0x24, 0x7B, 0xF5, 0x82, 0xE4, 0x34, 0x8F,
-0xF5, 0x83, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0x22, 0x7A, 0x00, 0x7D, 0x01, 0x7F, 0x01, 0xC1, 0xF1,
-0xF5, 0x83, 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0xD3, 0x9F, 0xEC, 0x9E, 0x22, 0x90, 0x92, 0x33, 0x12,
-0x86, 0xFA, 0x90, 0x00, 0x08, 0x02, 0x04, 0x18, 0x12, 0x8F, 0xC3, 0x12, 0x88, 0xFD, 0x11, 0x0C,
-0x75, 0x1E, 0x05, 0x7B, 0x01, 0x7A, 0x92, 0x79, 0xFB, 0x02, 0x6A, 0x21, 0x8B, 0x1B, 0x8A, 0x1C,
-0x89, 0x1D, 0x22, 0x12, 0x8F, 0xC3, 0x12, 0x88, 0xFD, 0x11, 0x0C, 0x75, 0x1E, 0x05, 0x7B, 0x01,
-0x7A, 0x93, 0x79, 0x00, 0x02, 0x6A, 0x21, 0x90, 0x92, 0x21, 0xEF, 0xF0, 0xA3, 0x12, 0x87, 0x03,
-0x90, 0x93, 0xA0, 0xE0, 0xFE, 0x04, 0xF0, 0x90, 0x00, 0x01, 0xEE, 0x12, 0x03, 0x4E, 0x74, 0x00,
-0x2F, 0xF9, 0xE4, 0x34, 0xFB, 0xFA, 0x7B, 0x01, 0xC0, 0x03, 0xC0, 0x02, 0xC0, 0x01, 0x90, 0x92,
-0x22, 0x12, 0x86, 0xFA, 0x11, 0x0C, 0x75, 0x1E, 0x02, 0xD0, 0x01, 0xD0, 0x02, 0xD0, 0x03, 0x12,
-0x6A, 0x21, 0x90, 0x92, 0x21, 0xE0, 0x24, 0x02, 0xF9, 0xE4, 0x34, 0xFB, 0xFA, 0x7B, 0x01, 0xC0,
-0x03, 0xC0, 0x02, 0xC0, 0x01, 0xA3, 0x12, 0x86, 0xFA, 0xE9, 0x24, 0x02, 0xF9, 0xE4, 0x3A, 0x8B,
-0x1B, 0xF5, 0x1C, 0x89, 0x1D, 0x90, 0x92, 0x22, 0x11, 0x95, 0xF5, 0x1E, 0xD0, 0x01, 0xD0, 0x02,
-0xD0, 0x03, 0x02, 0x6A, 0x21, 0x12, 0x86, 0xFA, 0x90, 0x00, 0x0E, 0x02, 0x03, 0x0F, 0xD3, 0x10,
-0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x92, 0x25, 0x12, 0x87, 0x03, 0x7F, 0x96, 0x7E, 0x02, 0x12,
-0x66, 0x80, 0xEF, 0x60, 0x45, 0x11, 0xFF, 0xFE, 0xEF, 0x24, 0x01, 0xFF, 0xE4, 0x3E, 0xFE, 0x90,
-0x92, 0x28, 0xEF, 0xF0, 0xEE, 0xFF, 0x90, 0xFD, 0x11, 0xF0, 0x90, 0x92, 0x28, 0xE0, 0xFD, 0x90,
-0x02, 0x94, 0xF0, 0xA3, 0xEF, 0xF0, 0x90, 0x92, 0x25, 0x11, 0x95, 0x24, 0x02, 0xFF, 0xE4, 0x33,
-0xFE, 0x12, 0x5A, 0xA5, 0x90, 0x92, 0x28, 0xE0, 0x24, 0x18, 0xFF, 0x90, 0x92, 0x25, 0x12, 0x86,
-0xFA, 0x12, 0x56, 0xF4, 0x90, 0x02, 0x96, 0x74, 0x01, 0xF0, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90,
-0x01, 0x17, 0xE0, 0xFE, 0x90, 0x01, 0x16, 0xE0, 0x7C, 0x00, 0x24, 0x00, 0xFF, 0xEC, 0x3E, 0x22,
-0x90, 0x93, 0x00, 0xE0, 0x90, 0x92, 0x96, 0xF0, 0x90, 0x93, 0x01, 0xE0, 0x90, 0x92, 0x97, 0xF0,
-0x90, 0x93, 0x02, 0xE0, 0x90, 0x92, 0x98, 0xF0, 0x90, 0x93, 0x03, 0xE0, 0x90, 0x92, 0x99, 0xF0,
-0x90, 0x93, 0x04, 0xE0, 0x90, 0x92, 0x9A, 0xF0, 0x90, 0x92, 0xF1, 0xE0, 0x90, 0x92, 0x9B, 0xF0,
-0x90, 0x92, 0xF2, 0xE0, 0x90, 0x92, 0x9C, 0xF0, 0x90, 0x92, 0xF3, 0xE0, 0x90, 0x92, 0x9D, 0xF0,
-0x90, 0x92, 0xF4, 0xE0, 0x90, 0x92, 0x9E, 0xF0, 0x90, 0x92, 0xF5, 0xE0, 0x90, 0x92, 0x9F, 0xF0,
-0x90, 0x92, 0xF6, 0xE0, 0x90, 0x92, 0xA0, 0xF0, 0x90, 0x92, 0xF7, 0xE0, 0x90, 0x92, 0xA1, 0xF0,
-0x90, 0x92, 0xF8, 0xE0, 0x90, 0x92, 0xA2, 0xF0, 0x90, 0x92, 0xF9, 0xE0, 0x90, 0x92, 0xA3, 0xF0,
-0x90, 0x92, 0xFA, 0xE0, 0x90, 0x92, 0xA4, 0xF0, 0xE4, 0x90, 0x92, 0x3F, 0xF0, 0x90, 0x92, 0xAA,
-0x12, 0x99, 0x07, 0x90, 0x92, 0x3E, 0xF0, 0xD1, 0x40, 0x50, 0x04, 0xD1, 0x4D, 0x80, 0xF8, 0x90,
-0x01, 0x1F, 0xE0, 0xFE, 0x90, 0x01, 0x1E, 0x31, 0x07, 0x90, 0x92, 0x33, 0xF0, 0xA3, 0xEF, 0xF0,
-0xE4, 0x90, 0x92, 0x3E, 0xF0, 0xD1, 0x40, 0x50, 0x4A, 0xD1, 0x6F, 0x90, 0x92, 0x3E, 0xE0, 0xFE,
-0x24, 0xA5, 0xF5, 0x82, 0xE4, 0x34, 0x92, 0xD1, 0xD7, 0xE0, 0x24, 0x4D, 0xF5, 0x82, 0xE4, 0x34,
-0xFC, 0xF5, 0x83, 0xE0, 0xFF, 0x74, 0x40, 0x2E, 0xF5, 0x82, 0xE4, 0x34, 0x92, 0xD1, 0xD7, 0xE0,
-0x24, 0x4E, 0xF9, 0xE4, 0x34, 0xFC, 0xFA, 0x7B, 0x01, 0xEE, 0xF1, 0x07, 0x12, 0x87, 0x03, 0xD1,
-0xDB, 0xE0, 0x24, 0x38, 0xF9, 0xE4, 0x34, 0xFC, 0xFA, 0xEE, 0xD1, 0xC9, 0x12, 0x87, 0x03, 0xD1,
-0x5A, 0x80, 0xB2, 0x90, 0x02, 0x87, 0xE0, 0x70, 0x02, 0xC1, 0x32, 0x90, 0x92, 0xE3, 0xE0, 0x20,
-0xE0, 0x02, 0xC1, 0x32, 0xE4, 0x90, 0x92, 0xAF, 0x12, 0x99, 0x07, 0x90, 0x92, 0x33, 0xE0, 0xFF,
-0xA3, 0xE0, 0xA3, 0xCF, 0xF0, 0xA3, 0xEF, 0xF0, 0x90, 0x92, 0x35, 0xE0, 0xFC, 0xA3, 0xE0, 0xFD,
-0xEC, 0x90, 0xFD, 0x11, 0xF0, 0x74, 0x01, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0xFB, 0xF5, 0x83, 0xE0,
-0xFE, 0xD1, 0xF0, 0xE0, 0x7A, 0x00, 0x24, 0x00, 0xFF, 0xEA, 0x3E, 0x54, 0x3F, 0x90, 0x92, 0x37,
-0xF0, 0xA3, 0xF1, 0x58, 0x54, 0x0F, 0x33, 0x33, 0x33, 0x54, 0xF8, 0x90, 0x92, 0x3A, 0xF0, 0xFC,
-0x74, 0x07, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0xFB, 0xF5, 0x83, 0xE0, 0x54, 0xC0, 0x90, 0x92, 0x3C,
-0xF0, 0xEC, 0x24, 0x18, 0x90, 0x92, 0x39, 0xF0, 0xFD, 0x90, 0x92, 0x35, 0xE0, 0xFE, 0xA3, 0xE0,
-0xFF, 0x12, 0x55, 0x36, 0xEF, 0x54, 0xFC, 0x90, 0x92, 0x3B, 0xF0, 0x90, 0x92, 0x3A, 0xE0, 0x24,
-0x18, 0xFF, 0xE4, 0x33, 0x90, 0x92, 0x37, 0x8F, 0xF0, 0x12, 0x07, 0x0A, 0x90, 0x92, 0x37, 0xE0,
-0xFE, 0xA3, 0xE0, 0xFF, 0x12, 0x7A, 0xD0, 0x90, 0x92, 0x33, 0xEE, 0x8F, 0xF0, 0x12, 0x07, 0x0A,
-0x90, 0x85, 0xB7, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x90, 0x92, 0x33, 0x12, 0x9F, 0xE2, 0x40, 0x1B,
-0x90, 0x85, 0xB8, 0xE0, 0x24, 0x01, 0xFF, 0x90, 0x85, 0xB7, 0xE0, 0x34, 0x00, 0xFE, 0xC3, 0xED,
-0x9F, 0xFF, 0xEC, 0x9E, 0x90, 0x92, 0x33, 0xF0, 0xA3, 0xEF, 0xF0, 0x90, 0x93, 0x09, 0xE0, 0x30,
-0xE0, 0x09, 0x13, 0x13, 0x54, 0x3F, 0x20, 0xE0, 0x02, 0xC1, 0x25, 0x90, 0x92, 0x3B, 0xE0, 0x24,
-0xC0, 0x60, 0x02, 0x81, 0xFB, 0xD1, 0x33, 0x24, 0x18, 0xFD, 0x12, 0x55, 0x36, 0xEF, 0x60, 0x02,
-0x81, 0xE8, 0xD1, 0x33, 0x24, 0x19, 0xFD, 0x12, 0x55, 0x36, 0x90, 0x92, 0x54, 0xEF, 0xF0, 0xE4,
-0x90, 0x92, 0x3D, 0xF0, 0x90, 0x92, 0x54, 0xE0, 0xFF, 0x90, 0x92, 0x3D, 0xE0, 0xFD, 0xC3, 0x9F,
-0x50, 0x1A, 0xD1, 0x33, 0x24, 0x1A, 0xFC, 0xED, 0x2C, 0xFD, 0x12, 0x55, 0x36, 0x90, 0x92, 0x3D,
-0xE0, 0x24, 0x55, 0xF5, 0x82, 0xE4, 0x34, 0x92, 0xD1, 0xB2, 0x80, 0xD8, 0x90, 0x92, 0x54, 0xE0,
-0x70, 0x02, 0x81, 0x12, 0xE4, 0x90, 0x92, 0x3E, 0xF0, 0xD1, 0x40, 0x40, 0x02, 0x61, 0xFA, 0xD1,
-0x6F, 0x90, 0x92, 0x3E, 0xE0, 0xFF, 0x24, 0x40, 0xF5, 0x82, 0xE4, 0x34, 0x92, 0xF5, 0x83, 0xE0,
-0xFE, 0x90, 0x92, 0x54, 0xE0, 0xFD, 0xEE, 0x6D, 0x70, 0x20, 0xEF, 0xF1, 0x07, 0x12, 0x86, 0xFA,
-0xC0, 0x03, 0xC0, 0x02, 0xC0, 0x01, 0xD1, 0xBD, 0x90, 0x92, 0xBA, 0xED, 0xF0, 0xD0, 0x01, 0xD0,
-0x02, 0xD0, 0x03, 0xD1, 0x89, 0xEF, 0x60, 0x02, 0x80, 0x53, 0x90, 0x92, 0x54, 0xE0, 0x64, 0x03,
-0x70, 0x5A, 0xD1, 0xBD, 0x90, 0x92, 0xBA, 0x74, 0x03, 0xF0, 0x7A, 0x93, 0x79, 0x8B, 0xD1, 0x89,
-0xEF, 0x70, 0x11, 0xD1, 0xBD, 0x90, 0x92, 0xBA, 0x74, 0x03, 0xF0, 0x7A, 0x93, 0x79, 0x87, 0xD1,
-0x89, 0xEF, 0x60, 0x30, 0x90, 0x92, 0x3E, 0xE0, 0xFF, 0x24, 0xA0, 0xF5, 0x82, 0xE4, 0x34, 0x92,
-0xF5, 0x83, 0xE0, 0x60, 0x02, 0x80, 0x11, 0x90, 0x92, 0x3E, 0xE0, 0xFF, 0x24, 0x9B, 0xF5, 0x82,
-0xE4, 0x34, 0x92, 0xF5, 0x83, 0xE0, 0x60, 0x05, 0x74, 0xAF, 0x2F, 0x80, 0x15, 0xD1, 0x61, 0x74,
-0x01, 0xF0, 0x80, 0x12, 0x90, 0x92, 0x3E, 0xE0, 0x24, 0xAF, 0x80, 0x06, 0x90, 0x92, 0x3E, 0xE0,
-0x24, 0xAF, 0xD1, 0x67, 0xE4, 0xF0, 0xD1, 0x5A, 0x61, 0x49, 0x90, 0x92, 0xAF, 0xE0, 0x70, 0x55,
-0xA3, 0xE0, 0x70, 0x51, 0xA3, 0xE0, 0x70, 0x4D, 0xA3, 0xE0, 0x70, 0x49, 0xA3, 0xE0, 0x70, 0x45,
-0x81, 0xE8, 0xE4, 0x90, 0x92, 0x3E, 0xF0, 0xD1, 0x40, 0x50, 0x22, 0x74, 0x9B, 0x2E, 0xF5, 0x82,
-0xE4, 0x34, 0x92, 0xF5, 0x83, 0xE0, 0x60, 0x09, 0x74, 0xAF, 0x2E, 0xD1, 0x67, 0xE4, 0xF0, 0x80,
-0x08, 0x74, 0xAF, 0x2E, 0xD1, 0x67, 0x74, 0x01, 0xF0, 0xD1, 0x5A, 0x80, 0xDA, 0x90, 0x92, 0xAF,
-0xE0, 0x70, 0x12, 0xA3, 0xE0, 0x70, 0x0E, 0xA3, 0xE0, 0x70, 0x0A, 0xA3, 0xE0, 0x70, 0x06, 0xA3,
-0xE0, 0x70, 0x02, 0x81, 0xE8, 0xE4, 0x90, 0x92, 0x3E, 0xF0, 0xD1, 0x40, 0x40, 0x02, 0x81, 0xE8,
-0xD1, 0x6F, 0xD1, 0x61, 0xE0, 0x60, 0x7D, 0xE4, 0xFF, 0xFE, 0x90, 0x04, 0x1D, 0xE0, 0x60, 0x10,
-0xD3, 0xEF, 0x94, 0xE8, 0xEE, 0x94, 0x03, 0x50, 0x07, 0x0F, 0xBF, 0x00, 0x01, 0x0E, 0x80, 0xEA,
-0x90, 0x04, 0x1D, 0xE0, 0x70, 0x5E, 0x90, 0x92, 0x3E, 0xE0, 0x24, 0x96, 0xF5, 0x82, 0xE4, 0x34,
-0x92, 0xF5, 0x83, 0xE0, 0xFF, 0x90, 0x93, 0x92, 0x74, 0x06, 0xF0, 0x7B, 0x08, 0x7D, 0x01, 0x12,
-0xBC, 0xC5, 0x90, 0x92, 0x37, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0xE4, 0x90, 0x92, 0x3D, 0xF0, 0x90,
-0x92, 0x3D, 0xE0, 0xFD, 0xC3, 0x94, 0x06, 0x50, 0x21, 0xD1, 0x33, 0x24, 0x0A, 0xFC, 0xED, 0x2C,
-0xFD, 0x12, 0x55, 0x36, 0x90, 0x92, 0x37, 0xA3, 0xE0, 0xFE, 0x90, 0x92, 0x3D, 0xE0, 0x2E, 0x24,
-0x2C, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xD1, 0xB2, 0x80, 0xD5, 0x90, 0x04, 0x1F, 0x74, 0x20, 0xF0,
-0x90, 0x06, 0x35, 0xF0, 0xD1, 0x5A, 0x81, 0x5A, 0x90, 0x92, 0x33, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF,
-0x12, 0x7C, 0x0B, 0x90, 0x06, 0x36, 0x74, 0xDD, 0xF0, 0x41, 0x03, 0x90, 0x92, 0x3C, 0xE0, 0x60,
-0x02, 0xC1, 0x25, 0xD1, 0x33, 0x24, 0x16, 0xFD, 0x12, 0x55, 0x36, 0x90, 0x06, 0x34, 0xEF, 0xF0,
-0xD1, 0x33, 0x24, 0x17, 0xFD, 0x12, 0x55, 0x36, 0x90, 0x06, 0x37, 0xEF, 0xF0, 0xE4, 0x90, 0x92,
-0x3E, 0xF0, 0xD1, 0x40, 0x50, 0x67, 0xD1, 0x6F, 0xE4, 0x90, 0x92, 0x3D, 0xF0, 0x90, 0x92, 0x3D,
-0xE0, 0xFF, 0xC3, 0x94, 0x06, 0x50, 0x52, 0xEF, 0x60, 0x04, 0x64, 0x01, 0x70, 0x20, 0xD1, 0x33,
-0xD1, 0xFB, 0x90, 0x92, 0x3D, 0xE0, 0xFE, 0x24, 0xA0, 0xD1, 0xE6, 0x90, 0x92, 0x3E, 0xE0, 0xD1,
-0xC9, 0x12, 0x86, 0xFA, 0x8E, 0x82, 0xD1, 0x83, 0xFF, 0x74, 0xA2, 0x2E, 0xD1, 0xE6, 0xD1, 0x33,
-0xD1, 0xFB, 0x90, 0x92, 0x3E, 0xE0, 0xFE, 0xD1, 0xC9, 0x12, 0x86, 0xFA, 0x90, 0x92, 0x3D, 0xE0,
-0xF5, 0x82, 0xD1, 0x83, 0x6F, 0x60, 0x0E, 0x74, 0xAA, 0x2E, 0xF5, 0x82, 0xE4, 0x34, 0x92, 0xF5,
-0x83, 0xE4, 0xF0, 0x80, 0x04, 0xD1, 0xB6, 0x80, 0xA4, 0xD1, 0x5A, 0x80, 0x95, 0x90, 0x92, 0xAA,
-0xE0, 0x64, 0x01, 0x60, 0x17, 0xA3, 0xE0, 0x64, 0x01, 0x60, 0x11, 0xA3, 0xE0, 0x64, 0x01, 0x60,
-0x0B, 0xA3, 0xE0, 0x64, 0x01, 0x60, 0x05, 0xA3, 0xE0, 0xB4, 0x01, 0x06, 0x90, 0x92, 0x3F, 0x74,
-0x01, 0xF0, 0x90, 0x92, 0x3F, 0xE0, 0x64, 0x01, 0x70, 0x54, 0xF1, 0xCA, 0x90, 0x01, 0xC7, 0x74,
-0x66, 0xF0, 0xE4, 0xFF, 0x12, 0x5F, 0xE9, 0x90, 0x93, 0x05, 0xE0, 0x70, 0x02, 0x41, 0x03, 0x90,
-0x01, 0x3C, 0xE0, 0x30, 0xE4, 0x03, 0x74, 0x10, 0xF0, 0x7D, 0x10, 0xE4, 0xFF, 0x12, 0x7B, 0xFD,
-0x90, 0x93, 0x06, 0xE0, 0x60, 0x08, 0xF5, 0x25, 0xE4, 0xF5, 0x26, 0xFB, 0x80, 0x15, 0x90, 0x93,
-0x07, 0xE0, 0x60, 0x08, 0xFB, 0xE4, 0xF5, 0x25, 0xF5, 0x26, 0x80, 0x07, 0x75, 0x25, 0x20, 0xE4,
-0xF5, 0x26, 0xFB, 0x7D, 0x01, 0x7F, 0x60, 0x7E, 0x01, 0x12, 0x76, 0x3D, 0x41, 0x03, 0xE4, 0x90,
-0x92, 0x3F, 0xF0, 0x90, 0x92, 0xAA, 0x12, 0x99, 0x07, 0x90, 0x92, 0x3E, 0xF0, 0xD1, 0x40, 0x50,
-0x04, 0xD1, 0x4D, 0x80, 0xF8, 0x90, 0x92, 0x33, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x12, 0x7C, 0x0B,
-0x41, 0x03, 0x22, 0x90, 0x92, 0x35, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x90, 0x92, 0x39, 0xE0, 0x22,
-0x90, 0x92, 0xEE, 0xE0, 0xFF, 0x90, 0x92, 0x3E, 0xE0, 0xFE, 0xC3, 0x9F, 0x22, 0x74, 0xAA, 0x2E,
-0xF5, 0x82, 0xE4, 0x34, 0x92, 0xF5, 0x83, 0x74, 0x01, 0xF0, 0x90, 0x92, 0x3E, 0xE0, 0x04, 0xF0,
-0x22, 0x90, 0x92, 0x3E, 0xE0, 0x24, 0xAF, 0xF5, 0x82, 0xE4, 0x34, 0x92, 0xF5, 0x83, 0x22, 0x74,
-0x96, 0x2E, 0xF5, 0x82, 0xE4, 0x34, 0x92, 0xF5, 0x83, 0xE0, 0xFF, 0x02, 0x7B, 0x2A, 0x12, 0x86,
-0xFA, 0x8F, 0x82, 0x75, 0x83, 0x00, 0x02, 0x03, 0x0F, 0x90, 0x92, 0xB4, 0x12, 0x87, 0x03, 0xE4,
-0xFF, 0x90, 0x92, 0xBA, 0xE0, 0xFE, 0xEF, 0xC3, 0x9E, 0x50, 0x14, 0x90, 0x92, 0xB7, 0xD1, 0x7E,
-0xFE, 0x90, 0x92, 0xB4, 0xD1, 0x7E, 0x6E, 0x60, 0x03, 0x7F, 0x00, 0x22, 0x0F, 0x80, 0xE2, 0x7F,
-0x01, 0x22, 0xF5, 0x83, 0xEF, 0xF0, 0x90, 0x92, 0x3D, 0xE0, 0x04, 0xF0, 0x22, 0x7B, 0x01, 0x7A,
-0x92, 0x79, 0x55, 0x90, 0x92, 0xB7, 0x02, 0x87, 0x03, 0x75, 0xF0, 0x03, 0xA4, 0x24, 0x87, 0xF5,
-0x82, 0xE4, 0x34, 0x92, 0xF5, 0x83, 0x22, 0xF5, 0x83, 0xEF, 0xF0, 0x74, 0xA5, 0x2E, 0xF5, 0x82,
-0xE4, 0x34, 0x92, 0xF5, 0x83, 0x22, 0xF5, 0x82, 0xE4, 0x34, 0x04, 0xF5, 0x83, 0xEF, 0xF0, 0x22,
-0x74, 0x00, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0xFB, 0xF5, 0x83, 0x22, 0x24, 0x04, 0xFD, 0x90, 0x92,
-0x3D, 0xE0, 0x2D, 0xFD, 0x02, 0x55, 0x36, 0x75, 0xF0, 0x03, 0xA4, 0x24, 0x45, 0xF5, 0x82, 0xE4,
-0x34, 0x92, 0xF5, 0x83, 0x22, 0xE4, 0xFC, 0xED, 0x2C, 0x24, 0x00, 0xD1, 0xF3, 0xE4, 0xF0, 0x0C,
-0xEC, 0xB4, 0x18, 0xF3, 0xD1, 0xF0, 0xEF, 0xF0, 0xEE, 0x54, 0x3F, 0xFF, 0x74, 0x01, 0x2D, 0xF5,
-0x82, 0xE4, 0x34, 0xFB, 0xF5, 0x83, 0xF1, 0x58, 0x54, 0xF0, 0xF0, 0x74, 0x03, 0x2D, 0xF5, 0x82,
-0xE4, 0x34, 0xFB, 0xF5, 0x83, 0xE0, 0x44, 0x80, 0xF0, 0x74, 0x0B, 0x2D, 0xF5, 0x82, 0xE4, 0x34,
-0xFB, 0xF5, 0x83, 0xE0, 0x44, 0x10, 0xF0, 0x22, 0xEF, 0xF0, 0x74, 0x02, 0x2D, 0xF5, 0x82, 0xE4,
-0x34, 0xFB, 0xF5, 0x83, 0xE0, 0x22, 0xE4, 0xFB, 0xFA, 0xFD, 0x7F, 0x01, 0x12, 0x86, 0x4E, 0x90,
-0x92, 0x32, 0xEF, 0xF0, 0x60, 0xF0, 0x90, 0x84, 0xC1, 0xE0, 0xFF, 0x70, 0x04, 0xA3, 0xE0, 0x60,
-0xE5, 0xC2, 0xAF, 0xEF, 0x30, 0xE0, 0x0F, 0x90, 0x84, 0xC1, 0xE0, 0x54, 0xFE, 0xF0, 0xE4, 0xFF,
-0x12, 0x2D, 0xBD, 0x12, 0x99, 0x11, 0xF1, 0xC0, 0x30, 0xE1, 0x06, 0x54, 0xFD, 0xF0, 0x12, 0x60,
-0x5D, 0xF1, 0xC0, 0x30, 0xE2, 0x06, 0x54, 0xFB, 0xF0, 0x12, 0x6A, 0x6D, 0xF1, 0xC0, 0x30, 0xE5,
-0x0B, 0x54, 0xDF, 0xF0, 0x12, 0x6F, 0x22, 0xBF, 0x01, 0x02, 0x31, 0x10, 0xD2, 0xAF, 0x80, 0xB6,
-0xD2, 0xAF, 0xC2, 0xAF, 0x90, 0x84, 0xC1, 0xE0, 0xFF, 0x22, 0xC2, 0xAF, 0x90, 0x92, 0xE3, 0xE0,
-0x54, 0xFE, 0xF0, 0x7D, 0x08, 0xE4, 0xFF, 0x12, 0x7C, 0x41, 0xE4, 0x90, 0x92, 0xEF, 0xF0, 0xA3,
-0xF0, 0xD2, 0xAF, 0x22, 0x12, 0x02, 0xF6, 0xFF, 0x90, 0x93, 0x08, 0xF0, 0xBF, 0x01, 0x08, 0x12,
-0xB1, 0x18, 0xE4, 0x90, 0x93, 0x08, 0xF0, 0x22, 0x12, 0x02, 0xF6, 0xFF, 0x54, 0x80, 0xFE, 0x90,
-0x89, 0x16, 0xE0, 0x54, 0x7F, 0x4E, 0xFE, 0xF0, 0xEF, 0x54, 0x40, 0xFF, 0xEE, 0x54, 0xBF, 0x4F,
-0xFF, 0xF0, 0x12, 0x02, 0xF6, 0xFE, 0x54, 0x20, 0xFD, 0xEF, 0x54, 0xDF, 0x4D, 0xFF, 0x90, 0x89,
-0x16, 0xF0, 0xEE, 0x54, 0x10, 0xFE, 0xEF, 0x54, 0xEF, 0x4E, 0xFF, 0xF0, 0x12, 0x02, 0xF6, 0x54,
-0x0F, 0xFE, 0xEF, 0x54, 0xF0, 0x4E, 0x90, 0x89, 0x16, 0xF0, 0x12, 0x8E, 0xF7, 0xFF, 0x54, 0x7F,
-0x90, 0x89, 0x18, 0xF0, 0xEF, 0x12, 0x8B, 0xE1, 0xFF, 0x90, 0x89, 0x17, 0xE0, 0x54, 0xFE, 0x12,
-0x8B, 0xD7, 0x90, 0x89, 0x19, 0x11, 0x6C, 0x25, 0xE0, 0xFF, 0x90, 0x89, 0x17, 0xE0, 0x54, 0xFD,
-0x4F, 0xF0, 0x11, 0x76, 0x20, 0xE0, 0x02, 0x7D, 0x01, 0x02, 0x54, 0x9F, 0xF0, 0x90, 0x00, 0x03,
-0x12, 0x03, 0x0F, 0x54, 0x01, 0x22, 0x90, 0x89, 0x16, 0xE0, 0xFE, 0x54, 0x0F, 0xFF, 0xEE, 0xC4,
-0x13, 0x13, 0x54, 0x03, 0x7D, 0x00, 0x22, 0x90, 0x89, 0x16, 0xE0, 0xFF, 0x12, 0x8B, 0xE3, 0x30,
-0xE0, 0x1B, 0xEF, 0xC4, 0x54, 0x0F, 0x30, 0xE0, 0x03, 0x12, 0xBC, 0x6B, 0x90, 0x89, 0x17, 0xE0,
-0x30, 0xE0, 0x0A, 0x11, 0x76, 0x20, 0xE0, 0x02, 0x7D, 0x01, 0x12, 0x54, 0x9F, 0x22, 0x90, 0x85,
-0xC5, 0xE0, 0x60, 0x15, 0x90, 0x06, 0x92, 0xE0, 0x30, 0xE1, 0x05, 0x12, 0x6B, 0x98, 0x80, 0x09,
-0x90, 0x85, 0xC1, 0xE0, 0x54, 0xF7, 0xF0, 0x11, 0xCB, 0x80, 0xBC, 0x90, 0x85, 0xC7, 0xE0, 0xFF,
-0x7D, 0x01, 0x02, 0x8D, 0x34, 0xE4, 0xFF, 0x12, 0x77, 0x39, 0xBF, 0x01, 0x0F, 0x90, 0x85, 0xC5,
-0xE0, 0x60, 0x09, 0x11, 0xED, 0xF0, 0x54, 0x07, 0x70, 0x02, 0x11, 0xCB, 0x22, 0x90, 0x85, 0xC9,
-0xE0, 0x54, 0xFE, 0x22, 0xE4, 0xF5, 0x77, 0x90, 0x06, 0xA9, 0xE0, 0xF5, 0x77, 0x54, 0xC0, 0x70,
-0x08, 0x11, 0xED, 0xF0, 0x54, 0xFD, 0xF0, 0x80, 0xC2, 0xE5, 0x77, 0x30, 0xE6, 0x1F, 0x90, 0x85,
-0xC5, 0xE0, 0x64, 0x01, 0x70, 0x1A, 0x90, 0x85, 0xC9, 0xE0, 0x44, 0x01, 0x12, 0x8F, 0xC9, 0x64,
-0x02, 0x60, 0x05, 0x12, 0x77, 0x61, 0x80, 0x08, 0x12, 0x79, 0x41, 0x80, 0x03, 0x11, 0xED, 0xF0,
-0xE5, 0x77, 0x90, 0x85, 0xC9, 0x30, 0xE7, 0x0E, 0xE0, 0x44, 0x02, 0x12, 0x92, 0x68, 0x90, 0x85,
-0xC1, 0xE0, 0x44, 0x04, 0xF0, 0x22, 0xE0, 0x54, 0xFD, 0xF0, 0x22, 0x12, 0x97, 0x4C, 0x70, 0x14,
-0x90, 0x85, 0xC5, 0xE0, 0x60, 0x0E, 0x12, 0x97, 0xEB, 0xF0, 0x90, 0x85, 0xC1, 0xE0, 0x91, 0x2A,
-0x70, 0x02, 0x11, 0xCB, 0x22, 0x90, 0x85, 0xC1, 0xE0, 0xFF, 0xC4, 0x13, 0x13, 0x54, 0x03, 0x30,
-0xE0, 0x1E, 0xEF, 0x54, 0xBF, 0xF0, 0x90, 0x04, 0xE0, 0xE0, 0x90, 0x85, 0xC2, 0x30, 0xE0, 0x06,
-0xE0, 0x44, 0x01, 0xF0, 0x80, 0x08, 0xE0, 0x54, 0xFE, 0x51, 0x4C, 0x74, 0x04, 0xF0, 0x11, 0xCB,
-0x22, 0x90, 0x85, 0xC1, 0xE0, 0xFF, 0x12, 0x8B, 0xE3, 0x30, 0xE0, 0x23, 0xEF, 0x54, 0x7F, 0xF0,
-0x90, 0x04, 0xE0, 0xE0, 0x90, 0x85, 0xC2, 0x30, 0xE1, 0x06, 0xE0, 0x44, 0x02, 0xF0, 0x80, 0x07,
-0xE0, 0x54, 0xFD, 0x51, 0x4C, 0x04, 0xF0, 0x90, 0x85, 0xC5, 0xE0, 0x60, 0x02, 0x11, 0xCB, 0x22,
+0xED, 0x9F, 0xEC, 0x9E, 0x40, 0x29, 0xE5, 0x62, 0x94, 0x05, 0x50, 0x05, 0xD1, 0xE4, 0x74, 0x03,
+0xF0, 0x90, 0x92, 0x5D, 0x12, 0xC4, 0x85, 0xE5, 0x68, 0xC3, 0x13, 0xA3, 0xF0, 0xE5, 0x69, 0x13,
+0xA3, 0xD1, 0xB6, 0x12, 0xC4, 0x11, 0x7B, 0x01, 0xD1, 0xF0, 0x12, 0xBB, 0x78, 0xA1, 0x25, 0x12,
+0xC4, 0x63, 0x65, 0x6C, 0x70, 0x02, 0xE5, 0xF0, 0x70, 0x53, 0x90, 0x92, 0x5D, 0xF0, 0xA3, 0xE5,
+0x6C, 0xF0, 0xC3, 0x13, 0xFF, 0xA3, 0xE4, 0xF0, 0xA3, 0xEF, 0xD1, 0xB6, 0x12, 0xC4, 0x11, 0x7B,
+0x02, 0xD1, 0xF0, 0xE5, 0x62, 0xC3, 0x94, 0x05, 0x50, 0x0F, 0xD1, 0xE4, 0xE0, 0xD3, 0x94, 0x00,
+0x40, 0x07, 0x12, 0x9E, 0x12, 0x7B, 0x03, 0x80, 0x0C, 0xE5, 0x6C, 0xC3, 0x94, 0x03, 0x50, 0x11,
+0x12, 0x9E, 0x12, 0x7B, 0x04, 0xFA, 0xD1, 0xF2, 0x7D, 0x06, 0xAF, 0x62, 0x12, 0xB9, 0x88, 0xC1,
+0xB1, 0xE4, 0xFD, 0xAF, 0x62, 0x12, 0x8C, 0x04, 0x12, 0xB9, 0x84, 0xA1, 0x25, 0x12, 0x9E, 0x12,
+0x7B, 0x08, 0xFA, 0xD1, 0xF2, 0x7D, 0x01, 0xAF, 0x62, 0x12, 0x65, 0xC2, 0xA1, 0x25, 0xD1, 0xE4,
+0xE4, 0xF0, 0x90, 0x92, 0x5B, 0x74, 0x02, 0xF0, 0xAB, 0x6A, 0xAD, 0x62, 0xAF, 0x69, 0xAE, 0x68,
+0x12, 0xBA, 0x8A, 0x8E, 0x66, 0x8F, 0x67, 0x12, 0xC4, 0x44, 0xC3, 0x74, 0x01, 0x93, 0x95, 0x67,
+0xE4, 0x93, 0x95, 0x66, 0x50, 0x20, 0xF1, 0x60, 0xE4, 0xF0, 0x7D, 0x01, 0xAF, 0x62, 0x12, 0x8C,
+0x04, 0x12, 0xC3, 0xDF, 0xE5, 0x66, 0xF0, 0xA3, 0xE5, 0x67, 0xF0, 0xE4, 0x90, 0x92, 0x61, 0x12,
+0x9E, 0x25, 0x7B, 0x01, 0x80, 0x23, 0xF1, 0xDB, 0xC3, 0xE5, 0x67, 0x9F, 0xE5, 0x66, 0x94, 0x00,
+0x50, 0x1D, 0xF1, 0x60, 0xE4, 0xF0, 0x12, 0xBB, 0x78, 0x90, 0x92, 0x5D, 0xF1, 0xD4, 0x12, 0xC4,
+0x52, 0xEF, 0xF0, 0xE4, 0x12, 0x9E, 0x24, 0x7B, 0x02, 0xFA, 0x12, 0xC4, 0x7E, 0x80, 0x46, 0x12,
+0xB9, 0x84, 0x12, 0xC3, 0xDF, 0xF1, 0xD4, 0xF1, 0xE9, 0xEF, 0xF0, 0xF1, 0x60, 0x12, 0xC4, 0x11,
+0x7B, 0x03, 0x7A, 0x00, 0x12, 0xC4, 0x7E, 0xF1, 0x60, 0xE0, 0x04, 0xF0, 0xE5, 0x64, 0x90, 0x83,
+0x6D, 0x93, 0xFF, 0xF1, 0x60, 0xE0, 0xC3, 0x9F, 0x40, 0x1B, 0xF1, 0x60, 0xE4, 0xF1, 0xDA, 0x12,
+0xC4, 0x44, 0x74, 0x01, 0x93, 0x2F, 0xFF, 0xE4, 0x93, 0x34, 0x00, 0xC3, 0x13, 0xFE, 0xEF, 0x13,
+0xFF, 0xE5, 0x62, 0xF1, 0x94, 0x75, 0xF0, 0x12, 0xE5, 0x62, 0x90, 0x89, 0x43, 0x12, 0x05, 0x28,
+0xE0, 0x64, 0x01, 0x60, 0x02, 0xC1, 0x95, 0x12, 0xC4, 0x28, 0xAE, 0xF0, 0x12, 0x03, 0xED, 0x2F,
+0xFF, 0xE5, 0xF0, 0x3E, 0xF1, 0x6C, 0x2F, 0xFF, 0xEE, 0xF1, 0xC5, 0xFE, 0x90, 0x00, 0x08, 0xF1,
+0xCB, 0x90, 0x92, 0x50, 0xF0, 0xA3, 0xEF, 0xF0, 0x12, 0x03, 0xED, 0xFF, 0xC3, 0x90, 0x92, 0x51,
+0xE0, 0x9F, 0xFE, 0x90, 0x92, 0x50, 0xE0, 0x95, 0xF0, 0x90, 0x92, 0x52, 0xF0, 0xA3, 0xCE, 0xF0,
+0xF1, 0xE3, 0xFD, 0xAC, 0xF0, 0x25, 0xE0, 0xFF, 0xEC, 0x33, 0xFE, 0xEF, 0x2D, 0xFD, 0xEE, 0x3C,
+0xFC, 0xF1, 0x6D, 0x25, 0xE0, 0xFF, 0xE5, 0xF0, 0x33, 0xFE, 0x90, 0x00, 0x02, 0xF1, 0xCB, 0xCF,
+0x2D, 0xFD, 0xEF, 0x3C, 0xFC, 0xF1, 0xB9, 0xAE, 0xF0, 0x78, 0x02, 0xC3, 0x33, 0xCE, 0x33, 0xCE,
+0xD8, 0xF9, 0x2D, 0xFF, 0xEC, 0x3E, 0x90, 0x92, 0x54, 0xF0, 0xA3, 0xEF, 0xF0, 0x90, 0x92, 0x4E,
+0x12, 0xC3, 0xFE, 0x24, 0x0C, 0xF5, 0x82, 0xE4, 0x34, 0x90, 0xF1, 0xAD, 0x50, 0x08, 0x90, 0x92,
+0x4E, 0x12, 0xC4, 0x1C, 0x80, 0x04, 0x7E, 0xFF, 0x7F, 0xFF, 0xE5, 0x62, 0x25, 0xE0, 0x24, 0x0C,
+0xF5, 0x82, 0xE4, 0x34, 0x90, 0xF1, 0x9D, 0x90, 0x92, 0x50, 0x12, 0xC3, 0xFE, 0x24, 0x2C, 0xF5,
+0x82, 0xE4, 0x34, 0x90, 0xF1, 0xAD, 0x50, 0x08, 0x90, 0x92, 0x50, 0x12, 0xC4, 0x1C, 0x80, 0x04,
+0x7E, 0xFF, 0x7F, 0xFF, 0xE5, 0x62, 0x25, 0xE0, 0x24, 0x2C, 0xF5, 0x82, 0xE4, 0x34, 0x90, 0xF1,
+0x9D, 0x90, 0x92, 0x54, 0x12, 0xC3, 0xFE, 0x24, 0x5C, 0xF5, 0x82, 0xE4, 0x34, 0x90, 0xF1, 0xAD,
+0x50, 0x08, 0x90, 0x92, 0x54, 0x12, 0xC4, 0x1C, 0x80, 0x04, 0x7E, 0xFF, 0x7F, 0xFF, 0xE5, 0x62,
+0x25, 0xE0, 0x24, 0x5C, 0xF5, 0x82, 0xE4, 0x34, 0x90, 0xF1, 0x9D, 0xC3, 0x74, 0xFF, 0x95, 0x69,
+0xFF, 0x74, 0xFF, 0x95, 0x68, 0xFE, 0x12, 0xC4, 0x59, 0x34, 0x90, 0xF1, 0xAD, 0x50, 0x0A, 0xE5,
+0x69, 0x2D, 0xFF, 0xE5, 0x68, 0x3C, 0xFE, 0x80, 0x04, 0x7E, 0xFF, 0x7F, 0xFF, 0x12, 0xC4, 0x59,
+0x34, 0x90, 0xF1, 0x9D, 0x12, 0xC4, 0x76, 0xFB, 0xC3, 0x74, 0xFF, 0x9B, 0xFF, 0x74, 0xFF, 0x9E,
+0xFE, 0x74, 0xFF, 0x94, 0x00, 0xFD, 0x74, 0xFF, 0x94, 0x00, 0xFC, 0x90, 0x8F, 0x77, 0x12, 0x86,
+0xEE, 0xD3, 0x12, 0x04, 0xB4, 0x50, 0x12, 0x12, 0xC4, 0x76, 0xFF, 0xE4, 0xFC, 0xFD, 0x90, 0x8F,
+0x77, 0x12, 0x86, 0xEE, 0x12, 0x86, 0xAD, 0x80, 0x06, 0x74, 0xFF, 0xFF, 0xFE, 0xFD, 0xFC, 0x90,
+0x8F, 0x77, 0x12, 0x04, 0xEB, 0xE4, 0xF5, 0x6C, 0xFD, 0xAF, 0x62, 0x12, 0x65, 0xC2, 0xE4, 0x90,
+0x92, 0x5D, 0xF0, 0x12, 0x9E, 0x20, 0xA3, 0xF0, 0x7B, 0x01, 0xFA, 0x7D, 0xFF, 0x7F, 0x01, 0xD1,
+0xF6, 0x05, 0x62, 0x21, 0x1B, 0x22, 0xF0, 0x90, 0x92, 0x4B, 0x12, 0x86, 0xFA, 0x90, 0x00, 0x06,
+0x12, 0x04, 0x18, 0xFF, 0xAE, 0xF0, 0x90, 0x00, 0x08, 0x12, 0x04, 0x18, 0x2F, 0xFF, 0xE5, 0xF0,
+0x3E, 0xFE, 0x90, 0x00, 0x04, 0x12, 0x04, 0x18, 0x2F, 0xFF, 0xEE, 0x35, 0xF0, 0x90, 0x92, 0x61,
+0xF0, 0xA3, 0xEF, 0xF0, 0x74, 0x88, 0x25, 0x62, 0xF5, 0x82, 0xE4, 0x34, 0x93, 0xF5, 0x83, 0x22,
+0x7A, 0x00, 0x7D, 0x03, 0x7F, 0x01, 0x90, 0x01, 0xC6, 0xE0, 0xFE, 0x64, 0x80, 0x70, 0x60, 0x90,
+0x92, 0x67, 0xEF, 0xF0, 0xA3, 0xED, 0xF0, 0xEB, 0xA3, 0xF0, 0xEA, 0xA3, 0xF0, 0x90, 0x92, 0x5D,
+0xE0, 0xFC, 0xA3, 0xE0, 0x90, 0x92, 0x6B, 0xF0, 0xEC, 0xA3, 0xF0, 0x90, 0x92, 0x5F, 0xE0, 0xFC,
+0xA3, 0xE0, 0x90, 0x92, 0x6D, 0xF0, 0xEC, 0xA3, 0xF0, 0x90, 0x92, 0x61, 0xE0, 0xFC, 0xA3, 0xE0,
+0x90, 0x92, 0x6F, 0xF0, 0xEC, 0xA3, 0xF0, 0x90, 0x92, 0x63, 0xE0, 0xFC, 0xA3, 0xE0, 0x90, 0x92,
+0x71, 0xF0, 0xEC, 0xA3, 0xF0, 0x90, 0x92, 0x65, 0x74, 0xFE, 0xF0, 0x90, 0x92, 0x73, 0x74, 0x0C,
+0xF0, 0x7B, 0x01, 0x7A, 0x92, 0x79, 0x65, 0x12, 0x5E, 0x10, 0x7F, 0x04, 0x12, 0x87, 0xDA, 0x22,
+0x74, 0xAC, 0x25, 0x62, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83, 0x22, 0xFE, 0x90, 0x00, 0x04,
+0x02, 0x04, 0x18, 0xFF, 0x90, 0x92, 0x5D, 0xE5, 0xF0, 0xF0, 0xA3, 0xEF, 0xF0, 0x22, 0xE5, 0x71,
+0x25, 0xE0, 0x24, 0xF5, 0xF5, 0x82, 0xE4, 0x34, 0x82, 0xF5, 0x83, 0xE4, 0x93, 0xFE, 0x74, 0x01,
+0x93, 0xFF, 0xE5, 0x6E, 0x25, 0xE0, 0x24, 0x7B, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83, 0xEE,
+0xF0, 0xA3, 0xEF, 0xF0, 0x22, 0x7A, 0x00, 0x7D, 0x01, 0x7F, 0x01, 0xC1, 0xF6, 0xF5, 0x83, 0xE0,
+0xFC, 0xA3, 0xE0, 0xFD, 0xD3, 0x9F, 0xEC, 0x9E, 0x22, 0x90, 0x92, 0x4B, 0x12, 0x86, 0xFA, 0x90,
+0x00, 0x08, 0x02, 0x04, 0x18, 0x35, 0xF0, 0xFE, 0x90, 0x00, 0x06, 0x12, 0x04, 0x18, 0x2F, 0xFF,
+0xEE, 0x35, 0xF0, 0x22, 0xE5, 0x66, 0xF0, 0xA3, 0xE5, 0x67, 0xF0, 0xE5, 0x64, 0x90, 0x83, 0x1D,
+0x93, 0xFF, 0x22, 0x90, 0x00, 0x06, 0x02, 0x04, 0x18, 0x90, 0x92, 0x61, 0xE4, 0xF0, 0xA3, 0x22,
+0xE4, 0xFF, 0x02, 0x2D, 0xBD, 0xC4, 0x54, 0xF0, 0x24, 0x01, 0xF5, 0x82, 0xE4, 0x34, 0x81, 0xF5,
+0x83, 0xE0, 0x22, 0x12, 0x02, 0xF6, 0x54, 0x01, 0xFF, 0x90, 0x93, 0x36, 0xE0, 0x54, 0xFE, 0x4F,
+0xF0, 0x22, 0x12, 0x02, 0xF6, 0x90, 0x86, 0x71, 0xF0, 0x22, 0x12, 0x02, 0xF6, 0x90, 0x93, 0x29,
+0xF0, 0x22, 0x12, 0x02, 0xF6, 0xFF, 0x90, 0x93, 0x2A, 0xF0, 0xBF, 0x01, 0x09, 0x7F, 0x01, 0x11,
+0x37, 0xE4, 0x90, 0x93, 0x2A, 0xF0, 0x22, 0x90, 0x92, 0x29, 0xEF, 0xF0, 0x31, 0xCC, 0x7F, 0xF4,
+0x7E, 0x00, 0x12, 0x64, 0x37, 0xBF, 0x01, 0x08, 0x90, 0x92, 0x39, 0xE0, 0x90, 0x92, 0x3B, 0xF0,
+0x31, 0xCC, 0x7F, 0xF5, 0x7E, 0x00, 0x12, 0x64, 0x37, 0xBF, 0x01, 0x08, 0x90, 0x92, 0x39, 0xE0,
+0x90, 0x92, 0x3C, 0xF0, 0x31, 0xCC, 0x7F, 0xF6, 0x7E, 0x00, 0x12, 0x64, 0x37, 0xBF, 0x01, 0x08,
+0x90, 0x92, 0x39, 0xE0, 0x90, 0x92, 0x3D, 0xF0, 0x31, 0xCC, 0x7F, 0xF7, 0x7E, 0x00, 0x12, 0x64,
+0x37, 0xBF, 0x01, 0x08, 0x90, 0x92, 0x39, 0xE0, 0x90, 0x92, 0x3E, 0xF0, 0x31, 0xCC, 0x7F, 0xF8,
+0x7E, 0x00, 0x12, 0x64, 0x37, 0xBF, 0x01, 0x08, 0x90, 0x92, 0x39, 0xE0, 0x90, 0x92, 0x3F, 0xF0,
+0x31, 0xCC, 0x51, 0x6C, 0xBF, 0x01, 0x08, 0x90, 0x92, 0x39, 0xE0, 0x90, 0x92, 0x40, 0xF0, 0x31,
+0xCC, 0x31, 0xD3, 0x70, 0x52, 0x90, 0x92, 0x39, 0xE0, 0x90, 0x92, 0x41, 0xF0, 0x54, 0x07, 0x60,
+0x08, 0x90, 0x92, 0x39, 0xE0, 0x54, 0xE0, 0x70, 0x3E, 0x7B, 0x01, 0x7A, 0x92, 0x79, 0x3A, 0x7F,
+0xFA, 0x31, 0xD5, 0x70, 0x32, 0x90, 0x92, 0x39, 0xE0, 0xFC, 0x54, 0x07, 0x70, 0x12, 0x90, 0x92,
+0x41, 0xE0, 0xFE, 0x90, 0x92, 0x3A, 0xE0, 0x54, 0x07, 0xFD, 0xEE, 0x4D, 0x90, 0x92, 0x41, 0xF0,
+0xEC, 0x54, 0xE0, 0x70, 0x12, 0x90, 0x92, 0x41, 0xE0, 0xFF, 0x90, 0x92, 0x3A, 0xE0, 0x54, 0xE0,
+0xFE, 0xEF, 0x4E, 0x90, 0x92, 0x41, 0xF0, 0x31, 0xCC, 0x7F, 0xFD, 0x31, 0xD5, 0x70, 0x47, 0x90,
+0x92, 0x39, 0xE0, 0xFE, 0x54, 0xCC, 0x90, 0x92, 0x42, 0xF0, 0xEE, 0x54, 0x0C, 0xFF, 0x60, 0x08,
+0x90, 0x92, 0x39, 0xE0, 0x54, 0xC0, 0x70, 0x2E, 0xEF, 0x70, 0x12, 0x90, 0x92, 0x42, 0xE0, 0xFF,
+0x90, 0x92, 0x39, 0xE0, 0x54, 0x03, 0x71, 0xB0, 0x4E, 0x90, 0x92, 0x42, 0xF0, 0x90, 0x92, 0x39,
+0xE0, 0xFF, 0x54, 0xC0, 0x70, 0x10, 0x90, 0x92, 0x42, 0xE0, 0xFE, 0xEF, 0x54, 0x30, 0x25, 0xE0,
+0x25, 0xE0, 0xFF, 0xEE, 0x4F, 0xF0, 0x90, 0x92, 0x2A, 0x74, 0x19, 0xF0, 0x90, 0x92, 0x38, 0x74,
+0x08, 0xF0, 0x90, 0x92, 0x3B, 0xE0, 0x90, 0x92, 0x2C, 0xF0, 0x90, 0x92, 0x3C, 0xE0, 0x90, 0x92,
+0x2D, 0xF0, 0x90, 0x92, 0x3D, 0xE0, 0x90, 0x92, 0x2E, 0xF0, 0x90, 0x92, 0x3E, 0xE0, 0x90, 0x92,
+0x2F, 0xF0, 0x90, 0x92, 0x3F, 0xE0, 0x90, 0x92, 0x30, 0xF0, 0x90, 0x92, 0x40, 0xE0, 0x90, 0x92,
+0x31, 0xF0, 0x90, 0x92, 0x41, 0xE0, 0x90, 0x92, 0x32, 0xF0, 0x90, 0x92, 0x42, 0xE0, 0x90, 0x92,
+0x33, 0xF0, 0x90, 0x92, 0x29, 0xE0, 0xB4, 0x01, 0x0E, 0x7B, 0x01, 0x7A, 0x92, 0x79, 0x2A, 0x12,
+0x5E, 0x10, 0x7F, 0x04, 0x02, 0x87, 0xDA, 0x75, 0x1B, 0x01, 0x75, 0x1C, 0x92, 0x75, 0x1D, 0x2A,
+0x75, 0x1E, 0x0A, 0x7B, 0x01, 0x7A, 0x01, 0x79, 0xA0, 0x02, 0x6A, 0x21, 0x7B, 0x01, 0x7A, 0x92,
+0x79, 0x39, 0x22, 0x7F, 0xFB, 0x7E, 0x00, 0x12, 0x64, 0x37, 0xEF, 0x64, 0x01, 0x22, 0x7E, 0x00,
+0x7F, 0x0B, 0x7D, 0x00, 0x7B, 0x01, 0x7A, 0x93, 0x79, 0x2B, 0x12, 0x06, 0xDE, 0x51, 0x65, 0x51,
+0x6C, 0xBF, 0x01, 0x1C, 0x90, 0x92, 0x29, 0xE0, 0xFE, 0x54, 0x01, 0x90, 0x93, 0x2B, 0xF0, 0xEE,
+0x54, 0x04, 0x90, 0x93, 0x2D, 0xF0, 0x90, 0x92, 0x29, 0xE0, 0x54, 0x08, 0x90, 0x93, 0x2C, 0xF0,
+0x51, 0x65, 0x31, 0xD3, 0x70, 0x34, 0x90, 0x92, 0x29, 0xE0, 0x54, 0x07, 0x70, 0x14, 0x7B, 0x01,
+0x7A, 0x92, 0x79, 0x2A, 0x7F, 0xFA, 0xFE, 0x12, 0x64, 0x37, 0xBF, 0x01, 0x0F, 0x90, 0x92, 0x2A,
+0x80, 0x03, 0x90, 0x92, 0x29, 0xE0, 0x54, 0x07, 0x90, 0x93, 0x2F, 0xF0, 0x90, 0x92, 0x29, 0xE0,
+0x54, 0xE0, 0xC4, 0x13, 0x54, 0x07, 0x90, 0x93, 0x2E, 0xF0, 0x51, 0x65, 0x7F, 0xFD, 0x7E, 0x00,
+0x12, 0x64, 0x37, 0xBF, 0x01, 0x0E, 0x90, 0x92, 0x29, 0xE0, 0x54, 0x0C, 0x13, 0x13, 0x54, 0x3F,
+0x90, 0x93, 0x30, 0xF0, 0x22, 0x7B, 0x01, 0x7A, 0x92, 0x79, 0x29, 0x22, 0x7F, 0xF9, 0x7E, 0x00,
+0x02, 0x64, 0x37, 0x90, 0x00, 0x80, 0xE0, 0x44, 0x80, 0xFD, 0x7F, 0x80, 0x12, 0x7B, 0x3E, 0x71,
+0xEA, 0x71, 0xDD, 0x12, 0x7B, 0x9C, 0x91, 0x3C, 0x71, 0xD1, 0x7F, 0x01, 0x12, 0x85, 0x15, 0x90,
+0x93, 0x28, 0x74, 0x02, 0xF0, 0xFF, 0x12, 0x85, 0x15, 0x90, 0x93, 0x28, 0xE0, 0x04, 0xF0, 0x51,
+0xFB, 0x12, 0x9E, 0xCC, 0x90, 0x01, 0xCC, 0x74, 0x0F, 0xF0, 0x90, 0x00, 0x80, 0xE0, 0x44, 0x40,
+0xFD, 0x7F, 0x80, 0x12, 0x7B, 0x3E, 0x75, 0x20, 0xFF, 0x12, 0x7C, 0xCD, 0xE4, 0xFF, 0x11, 0x37,
+0x71, 0x5F, 0x90, 0x00, 0x81, 0xE0, 0x44, 0x04, 0xFD, 0x7F, 0x81, 0x12, 0x7B, 0x3E, 0x71, 0xC6,
+0x31, 0xDE, 0x90, 0x00, 0x00, 0xE0, 0x54, 0xFB, 0xFD, 0xE4, 0xFF, 0x71, 0xBE, 0x44, 0x04, 0xFD,
+0x7F, 0x01, 0x12, 0x7B, 0x3E, 0x90, 0x01, 0x98, 0x74, 0x80, 0xF0, 0xA3, 0x74, 0x88, 0xF0, 0xA3,
+0xE4, 0xF0, 0xA3, 0x74, 0x80, 0xF0, 0xE4, 0xFF, 0x02, 0x85, 0x9E, 0x12, 0x7C, 0x4E, 0x90, 0x84,
+0xC5, 0xEF, 0xF0, 0x71, 0x2F, 0x90, 0x01, 0x64, 0x74, 0x01, 0xF0, 0x90, 0x04, 0x23, 0xE0, 0x44,
+0x80, 0xF0, 0x90, 0x00, 0x17, 0xE0, 0x54, 0xFC, 0x44, 0x04, 0xFD, 0x7F, 0x17, 0x12, 0x7B, 0x3E,
+0x90, 0x00, 0x38, 0xE0, 0x44, 0x40, 0xFD, 0x7F, 0x38, 0x12, 0x7B, 0x3E, 0x02, 0x68, 0xE2, 0x12,
+0x75, 0xB6, 0x12, 0x75, 0x58, 0x91, 0x5F, 0x91, 0x1D, 0xE4, 0xF5, 0x40, 0xF5, 0x41, 0xF5, 0x42,
+0x75, 0x43, 0x80, 0xAD, 0x40, 0x7F, 0x50, 0x12, 0x7B, 0x3E, 0xAD, 0x41, 0x7F, 0x51, 0x12, 0x7B,
+0x3E, 0xAD, 0x42, 0x7F, 0x52, 0x12, 0x7B, 0x3E, 0xAD, 0x43, 0x7F, 0x53, 0x02, 0x7B, 0x3E, 0xE4,
+0x90, 0x92, 0x29, 0xF0, 0xA3, 0xF0, 0x71, 0xFF, 0xEF, 0x64, 0x01, 0x60, 0x3C, 0xC3, 0x90, 0x92,
+0x2A, 0xE0, 0x94, 0x88, 0x90, 0x92, 0x29, 0xE0, 0x94, 0x13, 0x40, 0x0F, 0x90, 0x01, 0xC1, 0xE0,
+0x44, 0x10, 0xF0, 0x90, 0x01, 0xC7, 0x74, 0xFD, 0xF0, 0x80, 0x1E, 0x90, 0x92, 0x29, 0x12, 0x97,
+0xE5, 0x71, 0xB7, 0xD3, 0x90, 0x92, 0x2A, 0xE0, 0x94, 0x32, 0x90, 0x92, 0x29, 0xE0, 0x94, 0x00,
+0x40, 0xC4, 0x90, 0x01, 0xC6, 0xE0, 0x30, 0xE3, 0xBD, 0x90, 0x01, 0xC7, 0x74, 0xFE, 0xF0, 0x22,
+0x25, 0xE0, 0x25, 0xE0, 0xFE, 0xEF, 0x22, 0x7F, 0x14, 0x7E, 0x00, 0x02, 0x7C, 0x9F, 0x12, 0x7B,
+0x3E, 0x90, 0x01, 0x01, 0xE0, 0x22, 0x90, 0x01, 0xE4, 0x74, 0x01, 0xF0, 0xA3, 0x74, 0x0D, 0xF0,
+0x22, 0xE4, 0x90, 0x84, 0xC1, 0x12, 0x9E, 0x25, 0x90, 0x92, 0xF9, 0xF0, 0x22, 0x90, 0x01, 0x94,
+0xE0, 0x44, 0x01, 0xF0, 0x90, 0x01, 0xC7, 0xE4, 0xF0, 0x22, 0x90, 0x84, 0xA1, 0x74, 0x02, 0xF0,
+0xA3, 0x74, 0x10, 0xF0, 0x90, 0x84, 0xA7, 0x74, 0x80, 0xF0, 0xA3, 0x74, 0x03, 0xF0, 0x22, 0x90,
+0x01, 0x9A, 0xE0, 0x54, 0xC0, 0x44, 0x0B, 0xF0, 0x7F, 0x0A, 0x7E, 0x00, 0x12, 0x7C, 0x9F, 0x90,
+0x01, 0x98, 0xE0, 0x54, 0xC0, 0x7F, 0x00, 0xB4, 0x40, 0x02, 0x7F, 0x01, 0x22, 0x75, 0x52, 0x06,
+0x75, 0x53, 0x01, 0x75, 0x54, 0x03, 0x75, 0x55, 0x62, 0x90, 0x01, 0x38, 0xE5, 0x52, 0xF0, 0xA3,
+0xE5, 0x53, 0xF0, 0xA3, 0xE5, 0x54, 0xF0, 0xA3, 0xE5, 0x55, 0xF0, 0x22, 0x90, 0x01, 0x01, 0xE0,
+0x44, 0x04, 0xF0, 0x90, 0x01, 0x9A, 0xE0, 0x54, 0xC0, 0xF0, 0x7F, 0x0A, 0x7E, 0x00, 0x12, 0x7C,
+0x9F, 0x90, 0x01, 0x99, 0xE0, 0x44, 0xC0, 0xF0, 0x90, 0x01, 0x9B, 0x74, 0x80, 0xF0, 0x22, 0x75,
+0x48, 0x12, 0xE4, 0xF5, 0x49, 0x75, 0x4A, 0x87, 0x75, 0x4B, 0x33, 0xF5, 0x50, 0x90, 0x01, 0x30,
+0xE5, 0x48, 0xF0, 0xA3, 0xE5, 0x49, 0xF0, 0xA3, 0xE5, 0x4A, 0xF0, 0xA3, 0xE5, 0x4B, 0xF0, 0x90,
+0x01, 0x20, 0xE5, 0x50, 0xF0, 0x22, 0x90, 0x93, 0xB1, 0xEF, 0xF0, 0xE4, 0xA3, 0xF0, 0xA3, 0xF0,
+0x90, 0x01, 0x09, 0xE0, 0x7F, 0x00, 0x30, 0xE7, 0x02, 0x7F, 0x01, 0x90, 0x93, 0xB1, 0xE0, 0x6F,
+0x60, 0x35, 0xC3, 0x90, 0x93, 0xB3, 0xE0, 0x94, 0x88, 0x90, 0x93, 0xB2, 0xE0, 0x94, 0x13, 0x40,
+0x08, 0x90, 0x01, 0xC0, 0xE0, 0x44, 0x10, 0xF0, 0x22, 0x90, 0x93, 0xB2, 0x12, 0x97, 0xE5, 0x71,
+0xB7, 0xD3, 0x90, 0x93, 0xB3, 0xE0, 0x94, 0x32, 0x90, 0x93, 0xB2, 0xE0, 0x94, 0x00, 0x40, 0xC0,
+0x90, 0x01, 0xC6, 0xE0, 0x30, 0xE0, 0xB9, 0x22, 0xB1, 0x87, 0x7F, 0x08, 0x12, 0x7B, 0x51, 0xEF,
+0x54, 0xEF, 0xFD, 0x7F, 0x08, 0x12, 0x7B, 0x3E, 0xE4, 0xFF, 0x91, 0x86, 0x7D, 0x35, 0x7F, 0x27,
+0x12, 0x7B, 0x3E, 0x90, 0x85, 0xC2, 0xE0, 0x54, 0xEF, 0xF0, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3,
+0xC0, 0xD0, 0xB1, 0x0B, 0x91, 0xD8, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90, 0x85, 0xC2, 0xE0, 0x44,
+0x10, 0xF0, 0x90, 0x85, 0xD0, 0xE0, 0xFD, 0x7F, 0x93, 0x12, 0x7B, 0x3E, 0x90, 0x85, 0xC6, 0xE0,
+0x60, 0x12, 0x90, 0x01, 0x2F, 0xE0, 0x30, 0xE7, 0x05, 0x74, 0x10, 0xF0, 0x80, 0x06, 0x90, 0x01,
+0x2F, 0x74, 0x90, 0xF0, 0x7F, 0x08, 0x12, 0x7B, 0x51, 0xEF, 0x44, 0x10, 0xFD, 0x7F, 0x08, 0x12,
+0x7B, 0x3E, 0x7F, 0x01, 0x91, 0x86, 0x7D, 0x34, 0x7F, 0x27, 0x12, 0x7B, 0x3E, 0x7F, 0x90, 0xB1,
+0x75, 0x7F, 0x90, 0x12, 0x7B, 0x3E, 0x7F, 0x14, 0x7E, 0x00, 0x02, 0x7C, 0x9F, 0x90, 0x85, 0xC8,
+0xE0, 0xFF, 0x60, 0x03, 0xB4, 0x08, 0x0D, 0xB1, 0xA6, 0xBF, 0x01, 0x08, 0x91, 0xFB, 0x90, 0x01,
+0xE5, 0xE0, 0x04, 0xF0, 0x22, 0x12, 0x7B, 0x51, 0xEF, 0x44, 0x01, 0xFD, 0x22, 0x90, 0x85, 0xC1,
+0xE0, 0x30, 0xE0, 0x02, 0xB1, 0x5D, 0x22, 0x90, 0x01, 0xC4, 0x74, 0x87, 0xF0, 0x74, 0xB5, 0xA3,
+0xF0, 0x7F, 0x90, 0x12, 0x7B, 0x51, 0xEF, 0x20, 0xE0, 0xF7, 0x74, 0x87, 0x04, 0x90, 0x01, 0xC4,
+0xF0, 0x74, 0xB5, 0xA3, 0xF0, 0x22, 0x90, 0x02, 0x87, 0xE0, 0x60, 0x02, 0x80, 0x08, 0x90, 0x01,
+0x00, 0xE0, 0x64, 0x3F, 0x60, 0x05, 0x75, 0x61, 0x01, 0x80, 0x28, 0x90, 0x02, 0x96, 0xE0, 0x60,
+0x05, 0x75, 0x61, 0x10, 0x80, 0x1D, 0x90, 0x02, 0x86, 0xE0, 0x20, 0xE1, 0x02, 0x80, 0x07, 0x90,
+0x02, 0x86, 0xE0, 0x30, 0xE3, 0x05, 0x75, 0x61, 0x04, 0x80, 0x08, 0x90, 0x01, 0xB8, 0xE4, 0xF0,
+0x7F, 0x01, 0x22, 0x90, 0x01, 0xB9, 0x74, 0x08, 0xF0, 0x90, 0x01, 0xB8, 0xE5, 0x61, 0xF0, 0x7F,
+0x00, 0x22, 0xE4, 0x90, 0x92, 0x43, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0x90, 0x92, 0x43, 0xE0, 0x64,
+0x01, 0xF0, 0x24, 0xF2, 0x90, 0x01, 0xC4, 0xF0, 0x74, 0xB5, 0xA3, 0xF0, 0x12, 0x7C, 0x66, 0xBF,
+0x01, 0x03, 0x12, 0x5B, 0x25, 0x90, 0x85, 0xC5, 0xE0, 0x60, 0x0F, 0x90, 0x85, 0xC8, 0xE0, 0xFF,
+0x90, 0x85, 0xC7, 0xE0, 0x6F, 0x60, 0x03, 0x12, 0x97, 0xD1, 0xC2, 0xAF, 0xD1, 0xC2, 0xBF, 0x01,
+0x02, 0xB1, 0x7D, 0xD2, 0xAF, 0xD1, 0x58, 0x90, 0x92, 0x44, 0x12, 0x97, 0xE5, 0x54, 0x7F, 0x45,
+0xF0, 0x70, 0x0D, 0x7F, 0xFF, 0x12, 0x7B, 0x51, 0xEF, 0x04, 0xFD, 0x7F, 0xFF, 0x12, 0x7B, 0x3E,
+0x12, 0x8F, 0xF6, 0x12, 0x84, 0x4D, 0x80, 0xA3, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90,
+0x93, 0x31, 0xE0, 0x60, 0x24, 0x7F, 0x54, 0x7E, 0x09, 0x12, 0x70, 0x61, 0xD1, 0xAF, 0x12, 0x86,
+0xE2, 0xEF, 0x44, 0xFE, 0xFF, 0xEE, 0x44, 0x03, 0xFE, 0xED, 0x44, 0x04, 0xFD, 0xEC, 0xD1, 0xAF,
+0xD1, 0xB9, 0x7F, 0x54, 0x7E, 0x09, 0x12, 0x71, 0x18, 0x90, 0x93, 0x2C, 0xE0, 0x70, 0x04, 0x90,
+0x07, 0xCC, 0xF0, 0x90, 0x93, 0x34, 0xE0, 0x70, 0x0A, 0x90, 0x93, 0x31, 0xE0, 0x70, 0x04, 0xA3,
+0xE0, 0x60, 0x07, 0x90, 0x00, 0x1F, 0xE0, 0x54, 0xF0, 0xF0, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90,
+0x92, 0x46, 0x12, 0x04, 0xEB, 0x90, 0x92, 0x46, 0x22, 0x12, 0x86, 0xE2, 0x90, 0x91, 0x66, 0x02,
+0x04, 0xEB, 0x7D, 0x02, 0x90, 0x01, 0xC4, 0x74, 0xC2, 0xF0, 0x74, 0xB6, 0xA3, 0xF0, 0x90, 0x93,
+0x28, 0xE0, 0xFF, 0xED, 0xC3, 0x9F, 0x50, 0x18, 0xED, 0x25, 0xE0, 0x24, 0x81, 0xF8, 0xE6, 0x30,
+0xE4, 0x0B, 0x90, 0x01, 0xB8, 0x74, 0x08, 0xF0, 0xA3, 0xF0, 0x7F, 0x00, 0x22, 0x0D, 0x80, 0xDE,
+0x7F, 0x01, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x93, 0x8D, 0xEE, 0xF0, 0xA3,
+0xEF, 0xF0, 0x12, 0x70, 0x61, 0x90, 0x93, 0x97, 0x12, 0x04, 0xEB, 0x90, 0x93, 0x8F, 0x12, 0x86,
+0xE2, 0x12, 0x04, 0xA7, 0x90, 0x93, 0x97, 0x12, 0x86, 0xEE, 0x12, 0x86, 0xC8, 0xC0, 0x04, 0xC0,
+0x05, 0xC0, 0x06, 0xC0, 0x07, 0x90, 0x93, 0x8F, 0x12, 0x86, 0xE2, 0x90, 0x93, 0x93, 0x12, 0x86,
+0xEE, 0x12, 0x86, 0xC8, 0xD0, 0x03, 0xD0, 0x02, 0xD0, 0x01, 0xD0, 0x00, 0x12, 0x86, 0xD5, 0x90,
+0x93, 0x9B, 0x12, 0x04, 0xEB, 0x90, 0x93, 0x9B, 0xD1, 0xB9, 0x90, 0x93, 0x8D, 0xE0, 0xFE, 0xA3,
+0xE0, 0xFF, 0x12, 0x71, 0x18, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x12, 0x02, 0xF6, 0x90, 0x93, 0x1D,
+0xF0, 0x12, 0x8E, 0xF8, 0x90, 0x93, 0x1E, 0x12, 0x8B, 0xE5, 0x90, 0x93, 0x1F, 0xF0, 0x22, 0xD3,
+0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x85, 0x1E, 0xE0, 0xFF, 0x90, 0x85, 0x1D, 0xE0, 0xB5,
+0x07, 0x04, 0x7F, 0x01, 0x80, 0x02, 0x7F, 0x00, 0xEF, 0x70, 0x48, 0x90, 0x85, 0x1D, 0xE0, 0xFE,
+0x75, 0xF0, 0x08, 0x90, 0x84, 0xCD, 0x12, 0x05, 0x28, 0xE0, 0xFD, 0xEE, 0x75, 0xF0, 0x08, 0xA4,
+0x24, 0xCE, 0xF9, 0x74, 0x84, 0x35, 0xF0, 0xFA, 0x7B, 0x01, 0xAF, 0x05, 0x12, 0x94, 0x6F, 0x90,
+0x85, 0x1D, 0x12, 0xA7, 0x6A, 0xB4, 0x0A, 0x02, 0x7F, 0x01, 0xEF, 0x60, 0x05, 0xE4, 0x90, 0x85,
+0x1D, 0xF0, 0x7D, 0x68, 0x7F, 0xFE, 0x12, 0x7B, 0x3E, 0x12, 0x40, 0xB9, 0x90, 0x84, 0xC1, 0xE0,
+0x44, 0x02, 0xF0, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90, 0x85, 0xB5, 0xE0, 0xFF, 0x70, 0x06, 0xA3,
+0xE0, 0x64, 0x09, 0x60, 0x0A, 0xEF, 0x14, 0xFF, 0x90, 0x85, 0xB6, 0xE0, 0xB5, 0x07, 0x04, 0x7F,
+0x01, 0x80, 0x02, 0x7F, 0x00, 0xEF, 0x60, 0x08, 0x90, 0x01, 0xC1, 0xE0, 0x44, 0x02, 0xF0, 0x22,
+0xC0, 0x01, 0x90, 0x85, 0xB6, 0xE0, 0x75, 0xF0, 0x0F, 0xA4, 0x24, 0x1F, 0xF9, 0x74, 0x85, 0x35,
+0xF0, 0xA8, 0x01, 0xFC, 0x7D, 0x01, 0xD0, 0x01, 0x7E, 0x00, 0x7F, 0x0F, 0x12, 0x02, 0xD0, 0x7D,
+0xCC, 0x7F, 0xFE, 0x12, 0x7B, 0x3E, 0x90, 0x85, 0xB6, 0x12, 0xA7, 0x6A, 0xB4, 0x0A, 0x02, 0x7F,
+0x01, 0xEF, 0x60, 0x05, 0xE4, 0x90, 0x85, 0xB6, 0xF0, 0x22, 0xE4, 0xFB, 0xFA, 0xFD, 0x7F, 0x01,
+0x12, 0x86, 0x4E, 0x90, 0x92, 0x4A, 0xEF, 0xF0, 0x60, 0xF0, 0x90, 0x84, 0xC1, 0xE0, 0xFF, 0x70,
+0x04, 0xA3, 0xE0, 0x60, 0xE5, 0xC2, 0xAF, 0xEF, 0x30, 0xE0, 0x0F, 0x90, 0x84, 0xC1, 0xE0, 0x54,
+0xFE, 0xF0, 0xE4, 0xFF, 0x12, 0x2D, 0xBD, 0x12, 0xA9, 0x0C, 0x11, 0x95, 0x30, 0xE1, 0x06, 0x54,
+0xFD, 0xF0, 0x12, 0x60, 0x5D, 0x11, 0x95, 0x30, 0xE2, 0x06, 0x54, 0xFB, 0xF0, 0x12, 0x6A, 0x6D,
+0x11, 0x95, 0x30, 0xE5, 0x0C, 0x54, 0xDF, 0xF0, 0x12, 0x6F, 0x22, 0xBF, 0x01, 0x03, 0x12, 0x98,
+0xE0, 0xD2, 0xAF, 0x80, 0xB5, 0xD2, 0xAF, 0xC2, 0xAF, 0x90, 0x84, 0xC1, 0xE0, 0xFF, 0x22, 0x32,
0xC0, 0xE0, 0xC0, 0xF0, 0xC0, 0x83, 0xC0, 0x82, 0xC0, 0xD0, 0x75, 0xD0, 0x00, 0xC0, 0x00, 0xC0,
0x01, 0xC0, 0x02, 0xC0, 0x03, 0xC0, 0x04, 0xC0, 0x05, 0xC0, 0x06, 0xC0, 0x07, 0x90, 0x01, 0xC4,
-0x74, 0xC0, 0xF0, 0x74, 0xA9, 0xA3, 0xF0, 0x12, 0x75, 0x28, 0xE5, 0x56, 0x30, 0xE1, 0x03, 0x12,
-0x97, 0x32, 0xE5, 0x56, 0x30, 0xE2, 0x02, 0x11, 0xAE, 0xE5, 0x56, 0x30, 0xE4, 0x02, 0xF1, 0x8C,
-0xE5, 0x57, 0x30, 0xE0, 0x02, 0x51, 0x57, 0xE5, 0x59, 0x30, 0xE1, 0x04, 0x7F, 0x04, 0xB1, 0xED,
-0xE5, 0x59, 0x30, 0xE4, 0x03, 0x12, 0x97, 0xE2, 0xE5, 0x59, 0x30, 0xE5, 0x02, 0x31, 0x65, 0xE5,
-0x59, 0x30, 0xE6, 0x02, 0x31, 0x91, 0x74, 0xC0, 0x04, 0x90, 0x01, 0xC4, 0xF0, 0x74, 0xA9, 0xA3,
-0xF0, 0xD0, 0x07, 0xD0, 0x06, 0xD0, 0x05, 0xD0, 0x04, 0xD0, 0x03, 0xD0, 0x02, 0xD0, 0x01, 0xD0,
-0x00, 0xD0, 0xD0, 0xD0, 0x82, 0xD0, 0x83, 0xD0, 0xF0, 0xD0, 0xE0, 0x32, 0xF0, 0x90, 0x01, 0xB9,
-0x74, 0x01, 0xF0, 0x90, 0x01, 0xB8, 0x22, 0x12, 0xBD, 0xEC, 0x90, 0x92, 0xCC, 0xEF, 0xF0, 0x30,
-0xE0, 0x05, 0x7D, 0x01, 0xE4, 0x80, 0x02, 0xE4, 0xFD, 0xFF, 0x12, 0x57, 0x82, 0x90, 0x92, 0xCC,
-0xE0, 0x30, 0xE6, 0x11, 0x90, 0x01, 0x2F, 0xE0, 0x30, 0xE7, 0x04, 0xE4, 0xF0, 0x80, 0x06, 0x90,
-0x01, 0x2F, 0x74, 0x80, 0xF0, 0xF1, 0x97, 0x02, 0x51, 0x7D, 0x71, 0x06, 0x13, 0x54, 0x1F, 0x30,
-0xE0, 0x10, 0xEF, 0xC4, 0x13, 0x13, 0x54, 0x03, 0x30, 0xE0, 0x07, 0x7D, 0x02, 0x7F, 0x02, 0x12,
-0x7C, 0x41, 0x90, 0x85, 0xC1, 0xE0, 0xFF, 0x13, 0x13, 0x54, 0x3F, 0x30, 0xE0, 0x07, 0xEF, 0x91,
-0x2A, 0x70, 0x52, 0x80, 0x4E, 0x90, 0x85, 0xCE, 0xE0, 0x04, 0xF0, 0x90, 0x85, 0xC9, 0xE0, 0x54,
-0xEF, 0xF0, 0xF1, 0x78, 0xD3, 0x9F, 0x40, 0x3B, 0x12, 0x97, 0x4C, 0x70, 0x38, 0x12, 0x8F, 0xCA,
-0x70, 0x0B, 0x12, 0x70, 0xDB, 0x90, 0x85, 0xC2, 0xE0, 0x54, 0xFB, 0xF0, 0x22, 0x12, 0x70, 0xDB,
-0x90, 0x85, 0xCF, 0xE0, 0x04, 0xF0, 0xE0, 0xD3, 0x94, 0x02, 0x40, 0x0E, 0x90, 0x85, 0xC2, 0xE0,
-0x54, 0xFB, 0xF0, 0xE4, 0x90, 0x85, 0xCF, 0xF0, 0x80, 0x03, 0x12, 0x79, 0x41, 0xE4, 0x90, 0x85,
-0xCE, 0xF0, 0x22, 0x11, 0xCB, 0x22, 0x90, 0x85, 0xC2, 0xE0, 0xFF, 0x13, 0x13, 0x22, 0x12, 0x97,
-0x4C, 0x60, 0x02, 0x81, 0x29, 0x90, 0x85, 0xC5, 0xE0, 0x70, 0x02, 0x81, 0x29, 0x90, 0x05, 0x63,
-0xE0, 0x90, 0x93, 0x24, 0xF0, 0x90, 0x05, 0x62, 0xE0, 0x90, 0x93, 0x25, 0xF0, 0x90, 0x05, 0x61,
-0xE0, 0x90, 0x93, 0x26, 0xF0, 0x90, 0x05, 0x60, 0xE0, 0x90, 0x93, 0x27, 0xF0, 0x12, 0x97, 0xEB,
-0xF0, 0x90, 0x85, 0xC9, 0xE0, 0x54, 0xEC, 0xF0, 0x90, 0x85, 0xC3, 0xE0, 0xFF, 0xC4, 0x54, 0x0F,
-0x24, 0xFD, 0x50, 0x02, 0x80, 0x02, 0x11, 0xF4, 0x90, 0x85, 0xC3, 0xE0, 0xFF, 0xC4, 0x54, 0x0F,
-0x64, 0x01, 0x70, 0x22, 0x90, 0x06, 0xAB, 0xE0, 0x90, 0x85, 0xCC, 0xF0, 0x90, 0x06, 0xAA, 0xE0,
-0x90, 0x85, 0xCB, 0xF0, 0xA3, 0xE0, 0xFF, 0x70, 0x08, 0x90, 0x85, 0xCB, 0xE0, 0xFE, 0xFF, 0x80,
-0x00, 0x90, 0x85, 0xCC, 0xEF, 0xF0, 0x12, 0xC0, 0x7F, 0xE4, 0x90, 0x85, 0xCE, 0xF0, 0xF1, 0x82,
-0x71, 0x06, 0x13, 0x54, 0x1F, 0x20, 0xE0, 0x02, 0x81, 0x22, 0xEF, 0xC4, 0x13, 0x13, 0x54, 0x03,
-0x20, 0xE0, 0x3B, 0x90, 0x85, 0xCB, 0xE0, 0xFF, 0xA3, 0xE0, 0x6F, 0x70, 0x75, 0x90, 0x85, 0xC2,
-0xE0, 0x44, 0x40, 0xF0, 0x90, 0x85, 0xCB, 0xE0, 0x90, 0x05, 0x73, 0xF0, 0x90, 0x01, 0x3F, 0x74,
-0x10, 0xF0, 0xFD, 0x7F, 0x03, 0x12, 0x7B, 0xFD, 0x7D, 0x01, 0x7F, 0x02, 0x12, 0x7C, 0x41, 0x7D,
-0x02, 0x7F, 0x02, 0x12, 0x7C, 0x41, 0x90, 0x85, 0xCC, 0xE0, 0x14, 0xF0, 0x80, 0x44, 0x90, 0x85,
-0xC3, 0xE0, 0xC4, 0x54, 0x0F, 0x64, 0x01, 0x70, 0x39, 0x90, 0x85, 0xCB, 0xE0, 0xFF, 0xA3, 0xE0,
-0xFE, 0x6F, 0x60, 0x2E, 0x90, 0x05, 0x73, 0xE0, 0xFF, 0xEE, 0x6F, 0x60, 0x25, 0x71, 0x06, 0x54,
-0x3F, 0x30, 0xE0, 0x1E, 0xEF, 0x54, 0xBF, 0xF0, 0x90, 0x01, 0x3F, 0x74, 0x10, 0xF0, 0xFD, 0x7F,
-0x03, 0x12, 0x7B, 0xBF, 0x7D, 0x01, 0x7F, 0x02, 0x12, 0x7C, 0xA9, 0x7D, 0x02, 0x7F, 0x02, 0x12,
-0x7C, 0xA9, 0x90, 0x85, 0xC2, 0xE0, 0x44, 0x04, 0xF0, 0x22, 0x54, 0xFB, 0xF0, 0x90, 0x85, 0xC9,
-0xE0, 0x54, 0xFD, 0xF0, 0x54, 0x07, 0x22, 0xC0, 0xE0, 0xC0, 0xF0, 0xC0, 0x83, 0xC0, 0x82, 0xC0,
-0xD0, 0x75, 0xD0, 0x00, 0xC0, 0x00, 0xC0, 0x01, 0xC0, 0x02, 0xC0, 0x03, 0xC0, 0x04, 0xC0, 0x05,
-0xC0, 0x06, 0xC0, 0x07, 0x90, 0x01, 0xC4, 0x74, 0x37, 0xF0, 0x74, 0xAC, 0xA3, 0xF0, 0x12, 0x71,
-0x90, 0xE5, 0x4C, 0x30, 0xE1, 0x02, 0xB1, 0x6B, 0xE5, 0x4C, 0x30, 0xE3, 0x02, 0xD1, 0x06, 0xE5,
-0x4C, 0x30, 0xE4, 0x02, 0xB1, 0xE8, 0xE5, 0x4C, 0x30, 0xE5, 0x03, 0x12, 0xBC, 0x89, 0xE5, 0x4E,
-0x30, 0xE0, 0x03, 0x12, 0x94, 0x53, 0xE5, 0x4E, 0x30, 0xE1, 0x03, 0x12, 0x95, 0x51, 0xE5, 0x4E,
-0x30, 0xE2, 0x02, 0xF1, 0x3C, 0xE5, 0x4E, 0x30, 0xE3, 0x03, 0x12, 0x97, 0x3D, 0xE5, 0x4E, 0x30,
-0xE4, 0x02, 0x31, 0x4B, 0xE5, 0x4E, 0x30, 0xE5, 0x02, 0xF1, 0xD8, 0xE5, 0x4E, 0x30, 0xE6, 0x02,
-0x11, 0xD5, 0xE5, 0x4E, 0x30, 0xE7, 0x02, 0xF1, 0xC2, 0xE5, 0x4F, 0x30, 0xE0, 0x02, 0xF1, 0xB3,
-0xE5, 0x4F, 0x30, 0xE1, 0x02, 0xB1, 0xFC, 0xE5, 0x4F, 0x30, 0xE4, 0x02, 0xF1, 0x6C, 0xE5, 0x4F,
-0x30, 0xE5, 0x02, 0x91, 0xFB, 0x74, 0x37, 0x04, 0x90, 0x01, 0xC4, 0xF0, 0x74, 0xAC, 0xA3, 0xF0,
-0xD0, 0x07, 0xD0, 0x06, 0xD0, 0x05, 0xD0, 0x04, 0xD0, 0x03, 0xD0, 0x02, 0xD0, 0x01, 0xD0, 0x00,
-0xD0, 0xD0, 0xD0, 0x82, 0xD0, 0x83, 0xD0, 0xF0, 0xD0, 0xE0, 0x32, 0xE4, 0xF5, 0x77, 0x90, 0x85,
-0xBB, 0xE0, 0xFF, 0xE5, 0x77, 0xC3, 0x9F, 0x50, 0x61, 0xAF, 0x77, 0x12, 0x77, 0x39, 0xEF, 0x60,
-0x55, 0xE5, 0x77, 0x13, 0x13, 0x13, 0x54, 0x1F, 0xFF, 0xE5, 0x77, 0x54, 0x07, 0xFE, 0x74, 0x75,
-0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83, 0xE0, 0xFD, 0xAF, 0x06, 0xF1, 0x64, 0x80, 0x05,
-0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0xFF, 0xEF, 0x5D, 0x60, 0x2A, 0xE5, 0x77, 0xF1, 0xA5,
-0x20, 0xE7, 0x02, 0x80, 0x13, 0xE5, 0x77, 0xC4, 0x54, 0xF0, 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34,
-0x81, 0xF5, 0x83, 0xE0, 0xFF, 0x20, 0xE7, 0x09, 0x90, 0x01, 0xC1, 0xE0, 0x44, 0x20, 0xF0, 0x80,
-0x05, 0xAD, 0x77, 0x12, 0x8F, 0x09, 0x05, 0x77, 0x80, 0x94, 0x22, 0xE4, 0xFF, 0x90, 0x92, 0xBB,
-0xEF, 0xF0, 0x90, 0x04, 0x7E, 0xE0, 0xFF, 0xA3, 0xE0, 0x90, 0x92, 0xCB, 0xF0, 0xE0, 0xFE, 0x6F,
-0x60, 0x65, 0x90, 0x92, 0xBC, 0x74, 0x03, 0xF0, 0x90, 0x92, 0xCA, 0x74, 0x08, 0xF0, 0xEE, 0x04,
-0x54, 0x0F, 0xFF, 0xE4, 0xFE, 0xEF, 0x75, 0xF0, 0x08, 0xA4, 0x24, 0x00, 0xF5, 0x82, 0xE4, 0x34,
-0x80, 0xF5, 0x83, 0xE5, 0x82, 0x2E, 0xD1, 0x18, 0xE0, 0xFD, 0x74, 0xBE, 0x2E, 0xF5, 0x82, 0xE4,
-0x34, 0x92, 0xF5, 0x83, 0xED, 0xF0, 0x0E, 0xEE, 0xB4, 0x08, 0xDA, 0x7B, 0x01, 0x7A, 0x92, 0x79,
-0xBC, 0x12, 0x5E, 0x10, 0x90, 0x92, 0xCB, 0xE0, 0x04, 0x54, 0x0F, 0xFF, 0xF0, 0xBF, 0x0F, 0x02,
-0xE4, 0xF0, 0x90, 0x92, 0xCB, 0xE0, 0x90, 0x04, 0x7F, 0xF0, 0x90, 0x92, 0xBB, 0xE0, 0x7F, 0x04,
-0x70, 0x02, 0x80, 0x09, 0x12, 0x87, 0xDA, 0x22, 0x12, 0x40, 0xB9, 0x7F, 0x02, 0x8F, 0x0D, 0x7F,
-0x02, 0x12, 0x86, 0x27, 0x90, 0x84, 0xC1, 0xE0, 0x45, 0x0D, 0xF0, 0x22, 0x90, 0x85, 0xC5, 0xE0,
-0x60, 0x03, 0x12, 0xC2, 0x72, 0x22, 0x90, 0x92, 0xE3, 0xE0, 0x30, 0xE0, 0x04, 0x7F, 0x20, 0xB1,
-0xED, 0x22, 0x12, 0x05, 0x28, 0xE5, 0x82, 0x29, 0xF5, 0x82, 0xE4, 0x35, 0x83, 0xF5, 0x83, 0x22,
-0x90, 0x01, 0xCC, 0xE0, 0x54, 0x0F, 0x90, 0x92, 0x01, 0xF0, 0x90, 0x92, 0x01, 0xE0, 0xFD, 0x70,
-0x02, 0xE1, 0x20, 0x90, 0x85, 0x1D, 0xE0, 0xFF, 0x70, 0x06, 0xA3, 0xE0, 0x64, 0x09, 0x60, 0x0A,
-0xEF, 0x14, 0xFF, 0x90, 0x85, 0x1E, 0xE0, 0xB5, 0x07, 0x04, 0x7F, 0x01, 0x80, 0x02, 0x7F, 0x00,
-0xEF, 0x60, 0x08, 0x90, 0x01, 0xC1, 0xE0, 0x44, 0x01, 0xF0, 0x22, 0x90, 0x93, 0x9F, 0xE0, 0xF1,
-0x63, 0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0xFF, 0xEF, 0x5D, 0x70, 0x02, 0xE1,
-0x03, 0xE4, 0x90, 0x92, 0x02, 0xF0, 0x90, 0x92, 0x02, 0xE0, 0xF9, 0xC3, 0x94, 0x04, 0x50, 0x34,
-0xF1, 0x22, 0xA4, 0xFF, 0xE9, 0xFD, 0x7C, 0x00, 0x2F, 0xFF, 0xEC, 0x35, 0xF0, 0xFE, 0x74, 0xD0,
-0xF1, 0x2A, 0x90, 0x84, 0xCD, 0xD1, 0x12, 0xEF, 0xF1, 0x21, 0xA4, 0x2D, 0xFF, 0xEC, 0x35, 0xF0,
-0xFE, 0x74, 0xF0, 0xF1, 0x2A, 0x90, 0x84, 0xD1, 0xD1, 0x12, 0xEF, 0xF0, 0x90, 0x92, 0x02, 0xE0,
-0x04, 0xF0, 0x80, 0xC2, 0x90, 0x92, 0x01, 0xE0, 0xFF, 0x90, 0x93, 0x9F, 0xE0, 0xFE, 0x74, 0x01,
-0xA8, 0x06, 0x08, 0x80, 0x02, 0xC3, 0x33, 0xD8, 0xFC, 0xF4, 0x5F, 0x90, 0x92, 0x01, 0xF0, 0x90,
-0x93, 0x9F, 0xE0, 0xFF, 0x74, 0x01, 0xA8, 0x07, 0x08, 0x80, 0x02, 0xC3, 0x33, 0xD8, 0xFC, 0x90,
-0x01, 0xCC, 0xF0, 0x90, 0x93, 0x9F, 0xE0, 0x04, 0xF0, 0xE0, 0x54, 0x03, 0xF0, 0x90, 0x85, 0x1E,
-0xF1, 0x71, 0xB4, 0x0A, 0x02, 0x7F, 0x01, 0xEF, 0x70, 0x02, 0xC1, 0x2A, 0xE4, 0x90, 0x85, 0x1E,
-0xF0, 0xC1, 0x2A, 0x90, 0x01, 0xC0, 0xE0, 0x44, 0x02, 0xF0, 0x90, 0x93, 0x9F, 0xE0, 0x44, 0x80,
-0x90, 0x00, 0x8A, 0xF1, 0x21, 0x90, 0x01, 0xD0, 0x12, 0x05, 0x28, 0xE0, 0x90, 0x01, 0xC3, 0xF0,
-0x22, 0xF0, 0x90, 0x93, 0x9F, 0xE0, 0x75, 0xF0, 0x04, 0x22, 0x2F, 0xF5, 0x82, 0x74, 0x01, 0x3E,
-0xF5, 0x83, 0xE0, 0xFF, 0x90, 0x85, 0x1E, 0xE0, 0x75, 0xF0, 0x08, 0x22, 0x90, 0x85, 0xC8, 0xE0,
-0x64, 0x02, 0x60, 0x08, 0x71, 0x0E, 0x90, 0x01, 0xE6, 0xE0, 0x04, 0xF0, 0x22, 0x13, 0x13, 0x13,
-0x54, 0x1F, 0x24, 0x75, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83, 0xE0, 0xFD, 0x7C, 0x00, 0xE5,
-0x62, 0x54, 0x07, 0xFF, 0x74, 0x01, 0x7E, 0x00, 0xA8, 0x07, 0x08, 0x22, 0xE4, 0xFF, 0x02, 0x2D,
-0xBD, 0xE0, 0x04, 0xF0, 0xE0, 0x7F, 0x00, 0x22, 0x90, 0x86, 0x6D, 0xE0, 0xFF, 0x90, 0x85, 0xCE,
-0xE0, 0x22, 0x90, 0x85, 0xD1, 0xA3, 0xE0, 0x90, 0x05, 0x58, 0xF0, 0x22, 0x90, 0x01, 0xC7, 0x74,
-0x66, 0xF0, 0xE4, 0xFF, 0x02, 0x5F, 0xE9, 0x90, 0x85, 0xD7, 0xE0, 0xFF, 0xA3, 0xE0, 0xFD, 0x90,
-0x85, 0xDE, 0xE0, 0xFB, 0x22, 0xC4, 0x54, 0xF0, 0x24, 0x01, 0xF5, 0x82, 0xE4, 0x34, 0x81, 0xF5,
-0x83, 0xE0, 0x22, 0x12, 0x97, 0xCB, 0xFF, 0xBF, 0x03, 0x07, 0x90, 0x05, 0x21, 0xE0, 0x54, 0x7F,
-0xF0, 0x22, 0xE4, 0xF5, 0x77, 0xF5, 0x78, 0xF5, 0x79, 0x12, 0x97, 0xCB, 0xFF, 0xBF, 0x03, 0x07,
-0x90, 0x05, 0x21, 0xE0, 0x54, 0x7F, 0xF0, 0x22, 0xE4, 0xFF, 0x12, 0x77, 0x39, 0xBF, 0x01, 0x13,
-0x90, 0x85, 0xC5, 0xE0, 0x60, 0x0D, 0x12, 0x8F, 0xCA, 0x64, 0x02, 0x60, 0x03, 0x02, 0x77, 0x61,
-0x12, 0x79, 0x41, 0x22, 0x12, 0x02, 0xF6, 0x54, 0x01, 0xFF, 0x90, 0x93, 0x1E, 0xE0, 0x54, 0xFE,
-0x4F, 0xF0, 0x22, 0x12, 0x02, 0xF6, 0xFF, 0x90, 0x93, 0x12, 0xF0, 0xBF, 0x01, 0x07, 0x11, 0x16,
-0xE4, 0x90, 0x93, 0x12, 0xF0, 0x22, 0x31, 0x0A, 0x7F, 0xF4, 0x7E, 0x00, 0x12, 0x64, 0x37, 0xBF,
-0x01, 0x06, 0x90, 0x92, 0x16, 0xE0, 0xA3, 0xF0, 0x31, 0x0A, 0x7F, 0xF5, 0x7E, 0x00, 0x12, 0x64,
-0x37, 0xBF, 0x01, 0x08, 0x90, 0x92, 0x16, 0xE0, 0x90, 0x92, 0x18, 0xF0, 0x31, 0x0A, 0x7F, 0xF6,
-0x7E, 0x00, 0x12, 0x64, 0x37, 0xBF, 0x01, 0x08, 0x90, 0x92, 0x16, 0xE0, 0x90, 0x92, 0x19, 0xF0,
-0x31, 0x0A, 0x7F, 0xF7, 0x7E, 0x00, 0x12, 0x64, 0x37, 0xBF, 0x01, 0x08, 0x90, 0x92, 0x16, 0xE0,
-0x90, 0x92, 0x1A, 0xF0, 0x31, 0x0A, 0x7F, 0xF8, 0x7E, 0x00, 0x12, 0x64, 0x37, 0xBF, 0x01, 0x08,
-0x90, 0x92, 0x16, 0xE0, 0x90, 0x92, 0x1B, 0xF0, 0x31, 0x0A, 0x7F, 0xF9, 0x7E, 0x00, 0x12, 0x64,
-0x37, 0xBF, 0x01, 0x08, 0x90, 0x92, 0x16, 0xE0, 0x90, 0x92, 0x1C, 0xF0, 0x31, 0x0A, 0x7F, 0xFB,
-0x7E, 0x00, 0x12, 0x64, 0x37, 0xBF, 0x01, 0x08, 0x90, 0x92, 0x16, 0xE0, 0x90, 0x92, 0x1D, 0xF0,
-0x31, 0x0A, 0x7F, 0xFD, 0x7E, 0x00, 0x12, 0x64, 0x37, 0xBF, 0x01, 0x08, 0x90, 0x92, 0x16, 0xE0,
-0x90, 0x92, 0x1E, 0xF0, 0x90, 0x92, 0x07, 0x74, 0x19, 0xF0, 0x90, 0x92, 0x15, 0x74, 0x08, 0xF0,
-0x90, 0x92, 0x17, 0xE0, 0x90, 0x92, 0x09, 0xF0, 0x90, 0x92, 0x18, 0xE0, 0x90, 0x92, 0x0A, 0xF0,
-0x90, 0x92, 0x19, 0xE0, 0x90, 0x92, 0x0B, 0xF0, 0x90, 0x92, 0x1A, 0xE0, 0x90, 0x92, 0x0C, 0xF0,
-0x90, 0x92, 0x1B, 0xE0, 0x90, 0x92, 0x0D, 0xF0, 0x90, 0x92, 0x1C, 0xE0, 0x90, 0x92, 0x0E, 0xF0,
-0x90, 0x92, 0x1D, 0xE0, 0x90, 0x92, 0x0F, 0xF0, 0x90, 0x92, 0x1E, 0xE0, 0x90, 0x92, 0x10, 0xF0,
-0x31, 0x11, 0x12, 0x5E, 0x10, 0x7F, 0x04, 0x02, 0x87, 0xDA, 0x7B, 0x01, 0x7A, 0x92, 0x79, 0x16,
-0x22, 0x7B, 0x01, 0x7A, 0x92, 0x79, 0x07, 0x22, 0x31, 0x11, 0x7F, 0xF5, 0x7E, 0x01, 0x12, 0x64,
-0x37, 0xBF, 0x01, 0x06, 0x90, 0x92, 0x07, 0xE0, 0xA3, 0xF0, 0x31, 0x11, 0x7F, 0xF6, 0x7E, 0x01,
-0x12, 0x64, 0x37, 0xBF, 0x01, 0x08, 0x90, 0x92, 0x07, 0xE0, 0x90, 0x92, 0x09, 0xF0, 0x31, 0x11,
-0x7F, 0xF4, 0x7E, 0x01, 0x12, 0x64, 0x37, 0xBF, 0x01, 0x08, 0x90, 0x92, 0x07, 0xE0, 0x90, 0x92,
-0x0A, 0xF0, 0x31, 0x11, 0x7F, 0xF3, 0x7E, 0x01, 0x12, 0x64, 0x37, 0xBF, 0x01, 0x08, 0x90, 0x92,
-0x07, 0xE0, 0x90, 0x92, 0x0B, 0xF0, 0x31, 0x11, 0x7F, 0xF2, 0x7E, 0x01, 0x12, 0x64, 0x37, 0xBF,
-0x01, 0x08, 0x90, 0x92, 0x07, 0xE0, 0x90, 0x92, 0x0C, 0xF0, 0x90, 0x92, 0x08, 0xE0, 0xFF, 0xA3,
-0xE0, 0xFD, 0xA3, 0xE0, 0xFB, 0xA3, 0xE0, 0x90, 0x92, 0x10, 0xF0, 0x90, 0x92, 0x0C, 0xE0, 0x90,
-0x92, 0x11, 0xF0, 0x90, 0x92, 0x12, 0x74, 0x12, 0xF0, 0x90, 0x92, 0x20, 0x74, 0x05, 0xF0, 0x90,
-0x92, 0x14, 0xEF, 0xF0, 0xA3, 0xED, 0xF0, 0xA3, 0xEB, 0xF0, 0x90, 0x92, 0x10, 0xE0, 0x90, 0x92,
-0x17, 0xF0, 0x90, 0x92, 0x11, 0xE0, 0x90, 0x92, 0x18, 0xF0, 0x7B, 0x01, 0x7A, 0x92, 0x79, 0x12,
-0x12, 0x5E, 0x10, 0x7F, 0x04, 0x02, 0x87, 0xDA, 0x12, 0x02, 0xF6, 0x90, 0x93, 0x05, 0xF0, 0x12,
-0x8E, 0xF7, 0x90, 0x93, 0x06, 0x12, 0x8B, 0xD8, 0x90, 0x93, 0x07, 0xF0, 0x22, 0xD3, 0x10, 0xAF,
-0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x85, 0x1E, 0xE0, 0xFF, 0x90, 0x85, 0x1D, 0xE0, 0xB5, 0x07, 0x04,
-0x7F, 0x01, 0x80, 0x02, 0x7F, 0x00, 0xEF, 0x70, 0x48, 0x90, 0x85, 0x1D, 0xE0, 0xFE, 0x75, 0xF0,
-0x08, 0x90, 0x84, 0xCD, 0x12, 0x05, 0x28, 0xE0, 0xFD, 0xEE, 0x75, 0xF0, 0x08, 0xA4, 0x24, 0xCE,
-0xF9, 0x74, 0x84, 0x35, 0xF0, 0xFA, 0x7B, 0x01, 0xAF, 0x05, 0x12, 0x96, 0x33, 0x90, 0x85, 0x1D,
-0x12, 0xAF, 0x71, 0xB4, 0x0A, 0x02, 0x7F, 0x01, 0xEF, 0x60, 0x05, 0xE4, 0x90, 0x85, 0x1D, 0xF0,
-0x7D, 0x68, 0x7F, 0xFE, 0x12, 0x7B, 0x3E, 0x12, 0x40, 0xB9, 0x90, 0x84, 0xC1, 0xE0, 0x44, 0x02,
-0xF0, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90, 0x85, 0xB5, 0xE0, 0xFF, 0x70, 0x06, 0xA3, 0xE0, 0x64,
-0x09, 0x60, 0x0A, 0xEF, 0x14, 0xFF, 0x90, 0x85, 0xB6, 0xE0, 0xB5, 0x07, 0x04, 0x7F, 0x01, 0x80,
-0x02, 0x7F, 0x00, 0xEF, 0x60, 0x08, 0x90, 0x01, 0xC1, 0xE0, 0x44, 0x02, 0xF0, 0x22, 0xC0, 0x01,
-0x90, 0x85, 0xB6, 0xE0, 0x75, 0xF0, 0x0F, 0xA4, 0x24, 0x1F, 0xF9, 0x74, 0x85, 0x35, 0xF0, 0xA8,
-0x01, 0xFC, 0x7D, 0x01, 0xD0, 0x01, 0x7E, 0x00, 0x7F, 0x0F, 0x12, 0x02, 0xD0, 0x7D, 0xCC, 0x7F,
-0xFE, 0x12, 0x7B, 0x3E, 0x90, 0x85, 0xB6, 0x12, 0xAF, 0x71, 0xB4, 0x0A, 0x02, 0x7F, 0x01, 0xEF,
-0x60, 0x05, 0xE4, 0x90, 0x85, 0xB6, 0xF0, 0x22, 0xE4, 0x90, 0x84, 0xC1, 0x12, 0x99, 0x09, 0x90,
-0x92, 0xE1, 0xF0, 0x22, 0x90, 0x00, 0x80, 0xE0, 0x44, 0x80, 0xFD, 0x7F, 0x80, 0x12, 0x7B, 0x3E,
-0xB1, 0x56, 0xB1, 0x49, 0x12, 0x7B, 0x9C, 0xB1, 0xC5, 0x51, 0xA8, 0x7F, 0x01, 0x12, 0x85, 0x15,
-0x90, 0x93, 0x10, 0x74, 0x02, 0xF0, 0xFF, 0x12, 0x85, 0x15, 0x90, 0x93, 0x10, 0xE0, 0x04, 0xF0,
-0x91, 0x80, 0x71, 0xB7, 0x90, 0x01, 0xCC, 0x74, 0x0F, 0xF0, 0x90, 0x00, 0x80, 0xE0, 0x44, 0x40,
-0xFD, 0x7F, 0x80, 0x12, 0x7B, 0x3E, 0x75, 0x20, 0xFF, 0x12, 0x7C, 0xCD, 0x91, 0xE4, 0x90, 0x00,
-0x81, 0xE0, 0x44, 0x04, 0xFD, 0x7F, 0x81, 0x12, 0x7B, 0x3E, 0xB1, 0x40, 0x71, 0x3C, 0x90, 0x00,
-0x00, 0xE0, 0x54, 0xFB, 0xFD, 0xE4, 0xFF, 0x12, 0x7B, 0x3E, 0x90, 0x01, 0x01, 0xE0, 0x44, 0x04,
-0xFD, 0x7F, 0x01, 0x12, 0x7B, 0x3E, 0x90, 0x01, 0x98, 0x74, 0x80, 0xF0, 0xA3, 0x74, 0x88, 0xF0,
-0xA3, 0xE4, 0xF0, 0xA3, 0x74, 0x80, 0xF0, 0xE4, 0xFF, 0x02, 0x85, 0x9E, 0x7E, 0x00, 0x7F, 0x0B,
-0x7D, 0x00, 0x7B, 0x01, 0x7A, 0x93, 0x79, 0x13, 0x12, 0x06, 0xDE, 0x71, 0xB0, 0x7F, 0xF9, 0x7E,
-0x00, 0x12, 0x64, 0x37, 0xBF, 0x01, 0x1C, 0x90, 0x92, 0x29, 0xE0, 0xFE, 0x54, 0x01, 0x90, 0x93,
-0x13, 0xF0, 0xEE, 0x54, 0x04, 0x90, 0x93, 0x15, 0xF0, 0x90, 0x92, 0x29, 0xE0, 0x54, 0x08, 0x90,
-0x93, 0x14, 0xF0, 0x71, 0xB0, 0x7F, 0xFB, 0x7E, 0x00, 0x12, 0x64, 0x37, 0xBF, 0x01, 0x16, 0x90,
-0x92, 0x29, 0xE0, 0xFE, 0x54, 0x07, 0x90, 0x93, 0x17, 0xF0, 0xEE, 0x54, 0xE0, 0xC4, 0x13, 0x54,
-0x07, 0x90, 0x93, 0x16, 0xF0, 0x71, 0xB0, 0x7F, 0xFD, 0x7E, 0x00, 0x12, 0x64, 0x37, 0xBF, 0x01,
-0x0E, 0x90, 0x92, 0x29, 0xE0, 0x54, 0x0C, 0x13, 0x13, 0x54, 0x3F, 0x90, 0x93, 0x18, 0xF0, 0x22,
-0x7B, 0x01, 0x7A, 0x92, 0x79, 0x29, 0x22, 0xB1, 0x3A, 0x12, 0x7B, 0xEF, 0x12, 0x3C, 0x03, 0xD1,
-0x0F, 0x12, 0x94, 0x92, 0x71, 0xD2, 0x12, 0x98, 0xE0, 0xB1, 0x6B, 0x90, 0x93, 0x11, 0x74, 0x01,
-0xF0, 0x22, 0x90, 0x93, 0x09, 0xE0, 0x54, 0xFE, 0xF0, 0x54, 0xFD, 0xF0, 0x54, 0xFB, 0xF0, 0x44,
-0x10, 0xF0, 0x90, 0x84, 0xC5, 0xE0, 0xFF, 0x64, 0x02, 0x70, 0x2D, 0x90, 0xFD, 0x80, 0xE0, 0x7E,
-0x00, 0x30, 0xE0, 0x02, 0x7E, 0x01, 0x90, 0x93, 0x0F, 0x91, 0x79, 0x7E, 0x00, 0x30, 0xE1, 0x02,
-0x7E, 0x01, 0x90, 0x93, 0x0D, 0x91, 0x79, 0x7E, 0x00, 0x30, 0xE2, 0x02, 0x7E, 0x01, 0x90, 0x93,
-0x0E, 0x91, 0x79, 0x90, 0x02, 0xFB, 0xF0, 0x22, 0xEF, 0x64, 0x01, 0x70, 0x21, 0x91, 0x72, 0x30,
-0xE0, 0x02, 0x7F, 0x01, 0x90, 0x93, 0x0F, 0xEF, 0xF0, 0x91, 0x72, 0x30, 0xE1, 0x02, 0x7F, 0x01,
-0x90, 0x93, 0x0D, 0xEF, 0xF0, 0x91, 0x72, 0x30, 0xE2, 0x02, 0x7F, 0x01, 0x80, 0x27, 0x90, 0x84,
-0xC5, 0xE0, 0x64, 0x03, 0x70, 0x24, 0x91, 0x6B, 0x30, 0xE0, 0x02, 0x7F, 0x01, 0x90, 0x93, 0x0F,
-0xEF, 0xF0, 0x91, 0x6B, 0x30, 0xE1, 0x02, 0x7F, 0x01, 0x90, 0x93, 0x0D, 0xEF, 0xF0, 0x91, 0x6B,
-0x30, 0xE2, 0x02, 0x7F, 0x01, 0x90, 0x93, 0x0E, 0xEF, 0xF0, 0x22, 0x90, 0xFD, 0x78, 0xE0, 0x7F,
-0x00, 0x22, 0x90, 0xFD, 0x70, 0xE0, 0x7F, 0x00, 0x22, 0xEE, 0xF0, 0x90, 0xFD, 0x80, 0xE0, 0x22,
-0x12, 0x7C, 0x4E, 0x90, 0x84, 0xC5, 0xEF, 0xF0, 0x91, 0xB4, 0x90, 0x01, 0x64, 0x74, 0x01, 0xF0,
-0x90, 0x04, 0x23, 0xE0, 0x44, 0x80, 0xF0, 0x90, 0x00, 0x17, 0xE0, 0x54, 0xFC, 0x44, 0x04, 0xFD,
-0x7F, 0x17, 0x12, 0x7B, 0x3E, 0x90, 0x00, 0x38, 0xE0, 0x44, 0x40, 0xFD, 0x7F, 0x38, 0x12, 0x7B,
-0x3E, 0x02, 0x68, 0xE2, 0x12, 0x75, 0xB6, 0x12, 0x75, 0x58, 0xB1, 0xE8, 0xB1, 0xA6, 0xE4, 0xF5,
-0x40, 0xF5, 0x41, 0xF5, 0x42, 0x75, 0x43, 0x80, 0xAD, 0x40, 0x7F, 0x50, 0x12, 0x7B, 0x3E, 0xAD,
-0x41, 0x7F, 0x51, 0x12, 0x7B, 0x3E, 0xAD, 0x42, 0x7F, 0x52, 0x12, 0x7B, 0x3E, 0xAD, 0x43, 0x7F,
-0x53, 0x02, 0x7B, 0x3E, 0xE4, 0x90, 0x92, 0x29, 0xF0, 0xA3, 0xF0, 0xB1, 0x88, 0xEF, 0x64, 0x01,
-0x60, 0x41, 0xC3, 0x90, 0x92, 0x2A, 0xE0, 0x94, 0x88, 0x90, 0x92, 0x29, 0xE0, 0x94, 0x13, 0x40,
-0x0F, 0x90, 0x01, 0xC1, 0xE0, 0x44, 0x10, 0xF0, 0x90, 0x01, 0xC7, 0x74, 0xFD, 0xF0, 0x80, 0x23,
-0x90, 0x92, 0x29, 0x12, 0x97, 0xC4, 0x7F, 0x14, 0x7E, 0x00, 0x12, 0x7C, 0x9F, 0xD3, 0x90, 0x92,
-0x2A, 0xE0, 0x94, 0x32, 0x90, 0x92, 0x29, 0xE0, 0x94, 0x00, 0x40, 0xBF, 0x90, 0x01, 0xC6, 0xE0,
-0x30, 0xE3, 0xB8, 0x90, 0x01, 0xC7, 0x74, 0xFE, 0xF0, 0x22, 0xE4, 0xFD, 0xFF, 0x02, 0x6E, 0x5F,
-0x90, 0x01, 0xE4, 0x74, 0x01, 0xF0, 0xA3, 0xF0, 0x22, 0x90, 0x01, 0x94, 0xE0, 0x44, 0x01, 0xF0,
-0x90, 0x01, 0xC7, 0xE4, 0xF0, 0x22, 0x90, 0x84, 0xA1, 0x74, 0x02, 0xF0, 0xA3, 0x74, 0x10, 0xF0,
-0x90, 0x84, 0xA7, 0x74, 0x80, 0xF0, 0xA3, 0x74, 0x03, 0xF0, 0x22, 0x90, 0x89, 0x16, 0xE0, 0x54,
-0x7F, 0xF0, 0x54, 0xBF, 0xF0, 0x54, 0xDF, 0xF0, 0x54, 0xF0, 0xF0, 0xE4, 0x90, 0x89, 0x18, 0xF0,
-0x90, 0x89, 0x16, 0xE0, 0x54, 0xEF, 0xF0, 0x22, 0x90, 0x01, 0x9A, 0xE0, 0x54, 0xC0, 0x44, 0x0B,
-0xF0, 0x7F, 0x0A, 0x7E, 0x00, 0x12, 0x7C, 0x9F, 0x90, 0x01, 0x98, 0xE0, 0x54, 0xC0, 0x7F, 0x00,
-0xB4, 0x40, 0x02, 0x7F, 0x01, 0x22, 0x75, 0x52, 0x06, 0x75, 0x53, 0x01, 0x75, 0x54, 0x03, 0x75,
-0x55, 0x62, 0x90, 0x01, 0x38, 0xE5, 0x52, 0xF0, 0xA3, 0xE5, 0x53, 0xF0, 0xA3, 0xE5, 0x54, 0xF0,
-0xA3, 0xE5, 0x55, 0xF0, 0x22, 0x90, 0x01, 0x01, 0xE0, 0x44, 0x04, 0xF0, 0x90, 0x01, 0x9A, 0xE0,
-0x54, 0xC0, 0xF0, 0x7F, 0x0A, 0x7E, 0x00, 0x12, 0x7C, 0x9F, 0x90, 0x01, 0x99, 0xE0, 0x44, 0xC0,
-0xF0, 0x90, 0x01, 0x9B, 0x74, 0x80, 0xF0, 0x22, 0x75, 0x48, 0x12, 0xE4, 0xF5, 0x49, 0x75, 0x4A,
-0x87, 0x75, 0x4B, 0x33, 0xF5, 0x50, 0x90, 0x01, 0x30, 0xE5, 0x48, 0xF0, 0xA3, 0xE5, 0x49, 0xF0,
-0xA3, 0xE5, 0x4A, 0xF0, 0xA3, 0xE5, 0x4B, 0xF0, 0x90, 0x01, 0x20, 0xE5, 0x50, 0xF0, 0x22, 0x7B,
-0x00, 0x7A, 0x00, 0x79, 0x00, 0x90, 0x89, 0x1B, 0x12, 0x87, 0x03, 0x7B, 0xFF, 0x7A, 0x82, 0x79,
-0x00, 0x90, 0x89, 0x1E, 0x12, 0x87, 0x03, 0x7A, 0x82, 0x79, 0x3F, 0x90, 0x89, 0x21, 0x12, 0x87,
-0x03, 0x7A, 0x82, 0x79, 0xE1, 0x90, 0x89, 0x27, 0x12, 0x87, 0x03, 0x7A, 0x82, 0x79, 0xF5, 0x90,
-0x89, 0x2A, 0x12, 0x87, 0x03, 0x7A, 0x83, 0x79, 0x1D, 0x90, 0x89, 0x2D, 0x12, 0x87, 0x03, 0x7A,
-0x83, 0x79, 0x31, 0x90, 0x89, 0x33, 0x12, 0x87, 0x03, 0x7A, 0x83, 0x79, 0x59, 0x90, 0x89, 0x36,
-0x12, 0x87, 0x03, 0x7A, 0x83, 0x79, 0x81, 0x90, 0x89, 0x39, 0x12, 0x87, 0x03, 0xE4, 0x90, 0x93,
-0x5F, 0xF0, 0x90, 0x92, 0x29, 0xF0, 0x90, 0x92, 0x29, 0xE0, 0xFF, 0xC3, 0x94, 0x05, 0x50, 0x10,
-0x74, 0x70, 0x2F, 0x12, 0x9F, 0x8B, 0xE4, 0xF0, 0x90, 0x92, 0x29, 0xE0, 0x04, 0xF0, 0x80, 0xE6,
-0x22, 0x7D, 0x02, 0x90, 0x01, 0xC4, 0x74, 0x91, 0xF0, 0x74, 0xB6, 0xA3, 0xF0, 0x90, 0x93, 0x10,
-0xE0, 0xFF, 0xED, 0xC3, 0x9F, 0x50, 0x18, 0xED, 0x25, 0xE0, 0x24, 0x81, 0xF8, 0xE6, 0x30, 0xE4,
-0x0B, 0x90, 0x01, 0xB8, 0x74, 0x08, 0xF0, 0xA3, 0xF0, 0x7F, 0x00, 0x22, 0x0D, 0x80, 0xDE, 0x7F,
-0x01, 0x22, 0xE4, 0x90, 0x92, 0x2B, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0x90, 0x92, 0x2B, 0xE0, 0x64,
-0x01, 0xF0, 0x24, 0xC2, 0x90, 0x01, 0xC4, 0xF0, 0x74, 0xB6, 0xA3, 0xF0, 0x12, 0x7C, 0x66, 0xBF,
-0x01, 0x03, 0x12, 0x5B, 0x25, 0x90, 0x85, 0xC5, 0xE0, 0x60, 0x0F, 0x90, 0x85, 0xC8, 0xE0, 0xFF,
-0x90, 0x85, 0xC7, 0xE0, 0x6F, 0x60, 0x03, 0x12, 0xA8, 0xCB, 0xC2, 0xAF, 0xD1, 0x91, 0xBF, 0x01,
-0x02, 0xF1, 0x29, 0xD2, 0xAF, 0x12, 0xB8, 0xAE, 0x90, 0x92, 0x2C, 0x12, 0x97, 0xC4, 0x54, 0x7F,
-0x45, 0xF0, 0x70, 0x0D, 0x7F, 0xFF, 0x12, 0x7B, 0x51, 0xEF, 0x04, 0xFD, 0x7F, 0xFF, 0x12, 0x7B,
-0x3E, 0x12, 0x8F, 0xF2, 0x12, 0x84, 0x4D, 0x80, 0xA2, 0x90, 0x85, 0xC1, 0xE0, 0x30, 0xE0, 0x02,
-0xF1, 0x33, 0x22, 0x90, 0x85, 0xC8, 0xE0, 0xFF, 0x60, 0x03, 0xB4, 0x08, 0x0E, 0x12, 0xBF, 0x53,
-0xBF, 0x01, 0x08, 0xF1, 0x4C, 0x90, 0x01, 0xE5, 0xE0, 0x04, 0xF0, 0x22, 0xD3, 0x10, 0xAF, 0x01,
-0xC3, 0xC0, 0xD0, 0xF1, 0x80, 0xF1, 0x5C, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x12, 0xBE, 0x31, 0x7F,
-0x08, 0x12, 0x7B, 0x51, 0xEF, 0x54, 0xEF, 0xFD, 0x7F, 0x08, 0x12, 0x7B, 0x3E, 0xE4, 0xFF, 0xF1,
-0xD7, 0x7D, 0x35, 0x7F, 0x27, 0x12, 0x7B, 0x3E, 0x90, 0x85, 0xC2, 0xE0, 0x54, 0xEF, 0xF0, 0x22,
-0x90, 0x85, 0xC2, 0xE0, 0x44, 0x10, 0xF0, 0x90, 0x85, 0xD0, 0xE0, 0xFD, 0x7F, 0x93, 0x12, 0x7B,
-0x3E, 0x90, 0x85, 0xC6, 0xE0, 0x60, 0x12, 0x90, 0x01, 0x2F, 0xE0, 0x30, 0xE7, 0x05, 0x74, 0x10,
-0xF0, 0x80, 0x06, 0x90, 0x01, 0x2F, 0x74, 0x90, 0xF0, 0x7F, 0x08, 0x12, 0x7B, 0x51, 0xEF, 0x44,
-0x10, 0xFD, 0x7F, 0x08, 0x12, 0x7B, 0x3E, 0x7F, 0x01, 0xF1, 0xD7, 0x7D, 0x34, 0x7F, 0x27, 0x12,
-0x7B, 0x3E, 0x7F, 0x90, 0x12, 0x7B, 0x51, 0xEF, 0x44, 0x01, 0xFD, 0x7F, 0x90, 0x12, 0x7B, 0x3E,
-0x7F, 0x14, 0x7E, 0x00, 0x02, 0x7C, 0x9F, 0x90, 0x93, 0x99, 0xEF, 0x12, 0x98, 0xD9, 0x90, 0x01,
-0x09, 0xE0, 0x7F, 0x00, 0x30, 0xE7, 0x02, 0x7F, 0x01, 0x90, 0x93, 0x99, 0xE0, 0x6F, 0x60, 0x3A,
-0xC3, 0x90, 0x93, 0x9B, 0xE0, 0x94, 0x88, 0x90, 0x93, 0x9A, 0xE0, 0x94, 0x13, 0x40, 0x08, 0x90,
-0x01, 0xC0, 0xE0, 0x44, 0x10, 0xF0, 0x22, 0x90, 0x93, 0x9A, 0x12, 0x97, 0xC4, 0x7F, 0x14, 0x7E,
-0x00, 0x12, 0x7C, 0x9F, 0xD3, 0x90, 0x93, 0x9B, 0xE0, 0x94, 0x32, 0x90, 0x93, 0x9A, 0xE0, 0x94,
-0x00, 0x40, 0xBB, 0x90, 0x01, 0xC6, 0xE0, 0x30, 0xE0, 0xB4, 0x22, 0x32, 0xC0, 0xE0, 0xC0, 0xF0,
-0xC0, 0x83, 0xC0, 0x82, 0xC0, 0xD0, 0x75, 0xD0, 0x00, 0xC0, 0x00, 0xC0, 0x01, 0xC0, 0x02, 0xC0,
-0x03, 0xC0, 0x04, 0xC0, 0x05, 0xC0, 0x06, 0xC0, 0x07, 0x90, 0x01, 0xC4, 0x74, 0x2C, 0xF0, 0x74,
-0xB8, 0xA3, 0xF0, 0x12, 0x6C, 0xBC, 0x74, 0x2C, 0x04, 0x90, 0x01, 0xC4, 0xF0, 0x74, 0xB8, 0xA3,
-0xF0, 0xD0, 0x07, 0xD0, 0x06, 0xD0, 0x05, 0xD0, 0x04, 0xD0, 0x03, 0xD0, 0x02, 0xD0, 0x01, 0xD0,
-0x00, 0xD0, 0xD0, 0xD0, 0x82, 0xD0, 0x83, 0xD0, 0xF0, 0xD0, 0xE0, 0x32, 0x32, 0xC0, 0xE0, 0xC0,
-0x83, 0xC0, 0x82, 0xC0, 0xD0, 0x75, 0xD0, 0x00, 0xC0, 0x05, 0xC0, 0x07, 0x7D, 0x7D, 0x90, 0x01,
-0xC4, 0xED, 0xF0, 0x74, 0xB8, 0xFF, 0xA3, 0xF0, 0xED, 0x04, 0x90, 0x01, 0xC4, 0xF0, 0xA3, 0xEF,
-0xF0, 0xD0, 0x07, 0xD0, 0x05, 0xD0, 0xD0, 0xD0, 0x82, 0xD0, 0x83, 0xD0, 0xE0, 0x32, 0xD3, 0x10,
-0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x93, 0x19, 0xE0, 0x60, 0x25, 0x7F, 0x54, 0x7E, 0x09, 0x12,
-0x70, 0x61, 0x31, 0x06, 0xEF, 0x44, 0xFE, 0xFF, 0xEE, 0x44, 0x03, 0xFE, 0xED, 0x44, 0x04, 0xFD,
-0xEC, 0x31, 0x06, 0x90, 0x91, 0x66, 0x12, 0x04, 0xEB, 0x7F, 0x54, 0x7E, 0x09, 0x12, 0x71, 0x18,
-0x90, 0x93, 0x14, 0xE0, 0x70, 0x04, 0x90, 0x07, 0xCC, 0xF0, 0x90, 0x93, 0x1C, 0xE0, 0x70, 0x0A,
-0x90, 0x93, 0x19, 0xE0, 0x70, 0x04, 0xA3, 0xE0, 0x60, 0x07, 0x90, 0x00, 0x1F, 0xE0, 0x54, 0xF0,
-0xF0, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90, 0x92, 0x2E, 0x12, 0x04, 0xEB, 0x90, 0x92, 0x2E, 0x02,
-0x86, 0xE2, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x7F, 0x02, 0x12, 0x7B, 0x51, 0xEF, 0x54,
-0xFE, 0xFD, 0x7F, 0x02, 0x12, 0x7B, 0x3E, 0x90, 0x01, 0x00, 0x74, 0x3F, 0xF0, 0x90, 0x01, 0x34,
-0x74, 0x08, 0xF0, 0x90, 0x01, 0x01, 0xE0, 0x54, 0xFD, 0xF0, 0x90, 0x05, 0x53, 0xE0, 0x44, 0x20,
-0xF0, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xED, 0x30, 0xE0, 0x26, 0x75, 0xF0, 0x12, 0xEF, 0x90, 0x89,
-0x44, 0x31, 0x97, 0xEF, 0x90, 0x89, 0x46, 0x31, 0x97, 0xEF, 0x90, 0x89, 0x48, 0x31, 0x97, 0xEF,
-0x90, 0x89, 0x4A, 0x31, 0x97, 0xEF, 0x90, 0x89, 0x4C, 0x12, 0x05, 0x28, 0xE4, 0xF0, 0xA3, 0xF0,
-0xED, 0x30, 0xE1, 0x0A, 0x75, 0xF0, 0x12, 0xEF, 0x31, 0xC0, 0xE4, 0xF0, 0xA3, 0xF0, 0xED, 0x30,
-0xE2, 0x08, 0x75, 0xF0, 0x12, 0xEF, 0x31, 0xB5, 0xE4, 0xF0, 0x31, 0xA2, 0xE0, 0x54, 0xBF, 0x44,
-0x80, 0xFE, 0x31, 0xA2, 0xEE, 0xF0, 0x22, 0x12, 0x05, 0x28, 0xE4, 0xF0, 0xA3, 0xF0, 0x75, 0xF0,
-0x12, 0x22, 0xEF, 0xC4, 0x54, 0xF0, 0x24, 0x03, 0xF5, 0x82, 0xE4, 0x34, 0x81, 0xF5, 0x83, 0x22,
-0x75, 0xF0, 0x12, 0xE5, 0x62, 0x90, 0x89, 0x42, 0x02, 0x05, 0x28, 0x75, 0xF0, 0x12, 0xE5, 0x62,
-0x90, 0x89, 0x40, 0x02, 0x05, 0x28, 0x90, 0x92, 0x3F, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0xA3, 0xED,
-0xF0, 0xEB, 0x75, 0xF0, 0x06, 0xA4, 0xFF, 0x90, 0x89, 0x21, 0x12, 0x86, 0xFA, 0xE9, 0x2F, 0xF9,
-0xEA, 0x35, 0xF0, 0xFA, 0x90, 0x92, 0x47, 0x12, 0x87, 0x03, 0x90, 0x92, 0x41, 0xE0, 0x51, 0xAA,
-0xE0, 0xFF, 0xA3, 0xE0, 0x90, 0x92, 0x44, 0xCF, 0xF0, 0xA3, 0xEF, 0xF0, 0xE4, 0xA3, 0xF0, 0x90,
-0x92, 0x47, 0x12, 0x86, 0xFA, 0x90, 0x92, 0x46, 0xE0, 0xFF, 0xF5, 0x82, 0x12, 0xA6, 0x83, 0xFD,
-0x7C, 0x00, 0x90, 0x92, 0x41, 0xE0, 0x75, 0xF0, 0x12, 0x90, 0x89, 0x44, 0x12, 0x05, 0x28, 0x75,
-0xF0, 0x02, 0xEF, 0x12, 0x05, 0x28, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x90, 0x92, 0x43, 0xE0, 0xFB,
-0xEF, 0xA8, 0x03, 0x08, 0x80, 0x05, 0xCE, 0xC3, 0x13, 0xCE, 0x13, 0xD8, 0xF9, 0xFF, 0x12, 0x03,
-0x70, 0x90, 0x92, 0x44, 0xEE, 0x8F, 0xF0, 0x12, 0x07, 0x0A, 0x90, 0x92, 0x46, 0xE0, 0x04, 0xF0,
-0xE0, 0xB4, 0x05, 0xAB, 0x90, 0x92, 0x47, 0x12, 0x86, 0xFA, 0x90, 0x00, 0x05, 0x12, 0x03, 0x0F,
-0xFD, 0x7C, 0x00, 0x90, 0x92, 0x43, 0xE0, 0xFF, 0x90, 0x92, 0x3F, 0xE0, 0xFE, 0xA3, 0xE0, 0xA8,
-0x07, 0x08, 0x80, 0x05, 0xCE, 0xC3, 0x13, 0xCE, 0x13, 0xD8, 0xF9, 0xFF, 0x12, 0x03, 0x70, 0x90,
-0x92, 0x44, 0x12, 0x9F, 0xE2, 0x40, 0x08, 0xED, 0x9F, 0xFF, 0xEC, 0x9E, 0xFE, 0x80, 0x04, 0x7E,
-0x00, 0x7F, 0x00, 0x90, 0x92, 0x44, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0x90, 0x92, 0x44, 0xE0, 0xFE,
-0xA3, 0xE0, 0xFF, 0x90, 0x92, 0x41, 0xE0, 0x02, 0x9F, 0xC7, 0x25, 0xE0, 0x24, 0x7B, 0xF5, 0x82,
-0xE4, 0x34, 0x8F, 0xF5, 0x83, 0x22, 0xAC, 0x05, 0x90, 0x92, 0x3F, 0xEF, 0xF0, 0xFD, 0xE0, 0xFF,
-0x12, 0x8F, 0x8A, 0xE0, 0xF5, 0x6E, 0x54, 0x7F, 0xF5, 0x70, 0x75, 0xF0, 0x12, 0xEF, 0x90, 0x89,
-0x3D, 0x12, 0x05, 0x28, 0xE0, 0xF9, 0x90, 0x92, 0x3F, 0xE0, 0x12, 0x8F, 0xDB, 0xFE, 0xEF, 0x12,
-0x8F, 0xAF, 0xE0, 0x54, 0x03, 0xF5, 0x6F, 0xE5, 0x70, 0x90, 0x83, 0x1D, 0x93, 0xFB, 0xED, 0x51,
-0xAA, 0xE4, 0xF0, 0xA3, 0xEB, 0xF0, 0x12, 0x8A, 0x6C, 0xC4, 0x54, 0x03, 0x90, 0x92, 0x40, 0xF0,
-0x74, 0xCC, 0x2D, 0x12, 0x8F, 0xEA, 0xE5, 0x70, 0xF0, 0x74, 0x4C, 0x2D, 0xF5, 0x82, 0xE4, 0x34,
-0x90, 0xF5, 0x83, 0xE5, 0x6F, 0xF0, 0xE5, 0x70, 0xD3, 0x9E, 0x40, 0x06, 0x8E, 0x70, 0xAF, 0x06,
+0x74, 0xA0, 0xF0, 0x74, 0xB8, 0xA3, 0xF0, 0x12, 0x6C, 0xBC, 0x74, 0xA0, 0x04, 0x90, 0x01, 0xC4,
+0xF0, 0x74, 0xB8, 0xA3, 0xF0, 0xD0, 0x07, 0xD0, 0x06, 0xD0, 0x05, 0xD0, 0x04, 0xD0, 0x03, 0xD0,
+0x02, 0xD0, 0x01, 0xD0, 0x00, 0xD0, 0xD0, 0xD0, 0x82, 0xD0, 0x83, 0xD0, 0xF0, 0xD0, 0xE0, 0x32,
+0x32, 0xC0, 0xE0, 0xC0, 0x83, 0xC0, 0x82, 0xC0, 0xD0, 0x75, 0xD0, 0x00, 0xC0, 0x05, 0xC0, 0x07,
+0x7D, 0xF1, 0x90, 0x01, 0xC4, 0xED, 0xF0, 0x74, 0xB8, 0xFF, 0xA3, 0xF0, 0xED, 0x04, 0x90, 0x01,
+0xC4, 0xF0, 0xA3, 0xEF, 0xF0, 0xD0, 0x07, 0xD0, 0x05, 0xD0, 0xD0, 0xD0, 0x82, 0xD0, 0x83, 0xD0,
+0xE0, 0x32, 0x90, 0x85, 0xC8, 0xE0, 0x64, 0x02, 0x60, 0x09, 0x12, 0x96, 0x54, 0x90, 0x01, 0xE6,
+0xE0, 0x04, 0xF0, 0x22, 0xE4, 0xFF, 0x12, 0x77, 0x39, 0xBF, 0x01, 0x13, 0x90, 0x85, 0xC5, 0xE0,
+0x60, 0x0D, 0x12, 0x8F, 0xDB, 0x64, 0x02, 0x60, 0x03, 0x02, 0x77, 0x61, 0x12, 0x79, 0x41, 0x22,
+0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x7F, 0x02, 0x12, 0x7B, 0x51, 0xEF, 0x54, 0xFE, 0xFD,
+0x7F, 0x02, 0x12, 0x7B, 0x3E, 0x90, 0x01, 0x00, 0x74, 0x3F, 0xF0, 0x90, 0x01, 0x34, 0x74, 0x08,
+0xF0, 0x90, 0x01, 0x01, 0xE0, 0x54, 0xFD, 0xF0, 0x90, 0x05, 0x53, 0xE0, 0x44, 0x20, 0xF0, 0xD0,
+0xD0, 0x92, 0xAF, 0x22, 0x7D, 0x07, 0xAF, 0x62, 0xED, 0x30, 0xE0, 0x26, 0x75, 0xF0, 0x12, 0xEF,
+0x90, 0x89, 0x44, 0x31, 0xD9, 0xEF, 0x90, 0x89, 0x46, 0x31, 0xD9, 0xEF, 0x90, 0x89, 0x48, 0x31,
+0xD9, 0xEF, 0x90, 0x89, 0x4A, 0x31, 0xD9, 0xEF, 0x90, 0x89, 0x4C, 0x12, 0x05, 0x28, 0xE4, 0xF0,
+0xA3, 0xF0, 0xED, 0x30, 0xE1, 0x0A, 0x75, 0xF0, 0x12, 0xEF, 0x51, 0x02, 0xE4, 0xF0, 0xA3, 0xF0,
+0xED, 0x30, 0xE2, 0x08, 0x75, 0xF0, 0x12, 0xEF, 0x31, 0xF7, 0xE4, 0xF0, 0x31, 0xE4, 0xE0, 0x54,
+0xBF, 0x44, 0x80, 0xFE, 0x31, 0xE4, 0xEE, 0xF0, 0x22, 0x12, 0x05, 0x28, 0xE4, 0xF0, 0xA3, 0xF0,
+0x75, 0xF0, 0x12, 0x22, 0xEF, 0xC4, 0x54, 0xF0, 0x24, 0x03, 0xF5, 0x82, 0xE4, 0x34, 0x81, 0xF5,
+0x83, 0x22, 0x75, 0xF0, 0x12, 0xE5, 0x62, 0x90, 0x89, 0x42, 0x02, 0x05, 0x28, 0x75, 0xF0, 0x12,
+0xE5, 0x62, 0x90, 0x89, 0x40, 0x02, 0x05, 0x28, 0x7B, 0x00, 0x7A, 0x00, 0x79, 0x00, 0x90, 0x89,
+0x1B, 0x12, 0x87, 0x03, 0x7B, 0xFF, 0x7A, 0x82, 0x79, 0x00, 0x90, 0x89, 0x1E, 0x12, 0x87, 0x03,
+0x7A, 0x82, 0x79, 0x3F, 0x90, 0x89, 0x21, 0x12, 0x87, 0x03, 0x7A, 0x82, 0x79, 0xE1, 0x90, 0x89,
+0x27, 0x12, 0x87, 0x03, 0x7A, 0x82, 0x79, 0xF5, 0x90, 0x89, 0x2A, 0x12, 0x87, 0x03, 0x7A, 0x83,
+0x79, 0x1D, 0x90, 0x89, 0x2D, 0x12, 0x87, 0x03, 0x7A, 0x83, 0x79, 0x31, 0x90, 0x89, 0x33, 0x12,
+0x87, 0x03, 0x7A, 0x83, 0x79, 0x59, 0x90, 0x89, 0x36, 0x12, 0x87, 0x03, 0x7A, 0x83, 0x79, 0x81,
+0x90, 0x89, 0x39, 0x12, 0x87, 0x03, 0xE4, 0x90, 0x93, 0x77, 0xF0, 0x90, 0x92, 0x29, 0xF0, 0x90,
+0x92, 0x29, 0xE0, 0xFF, 0xC3, 0x94, 0x05, 0x50, 0x10, 0x74, 0x88, 0x2F, 0x12, 0xAE, 0xE8, 0xE4,
+0xF0, 0x90, 0x92, 0x29, 0xE0, 0x04, 0xF0, 0x80, 0xE6, 0x22, 0x90, 0x92, 0x57, 0xEE, 0xF0, 0xA3,
+0xEF, 0xF0, 0xA3, 0xED, 0xF0, 0xEB, 0x75, 0xF0, 0x06, 0xA4, 0xFF, 0x90, 0x89, 0x21, 0x12, 0x86,
+0xFA, 0xE9, 0x2F, 0xF9, 0xEA, 0x35, 0xF0, 0xFA, 0x90, 0x92, 0x5F, 0x12, 0x87, 0x03, 0x90, 0x92,
+0x59, 0xE0, 0x71, 0x6C, 0xE0, 0xFF, 0xA3, 0xE0, 0x90, 0x92, 0x5C, 0xCF, 0xF0, 0xA3, 0xEF, 0xF0,
+0xE4, 0xA3, 0xF0, 0x90, 0x92, 0x5F, 0x12, 0x86, 0xFA, 0x90, 0x92, 0x5E, 0xE0, 0xFF, 0xF5, 0x82,
+0x12, 0x9E, 0x5B, 0xFD, 0x7C, 0x00, 0x90, 0x92, 0x59, 0xE0, 0x75, 0xF0, 0x12, 0x90, 0x89, 0x44,
+0x12, 0x05, 0x28, 0x75, 0xF0, 0x02, 0xEF, 0x12, 0x05, 0x28, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x90,
+0x92, 0x5B, 0xE0, 0xFB, 0xEF, 0xA8, 0x03, 0x08, 0x80, 0x05, 0xCE, 0xC3, 0x13, 0xCE, 0x13, 0xD8,
+0xF9, 0x71, 0x64, 0xEE, 0x8F, 0xF0, 0x12, 0x07, 0x0A, 0x90, 0x92, 0x5E, 0xE0, 0x04, 0xF0, 0xE0,
+0xB4, 0x05, 0xB0, 0x90, 0x92, 0x5F, 0x12, 0x86, 0xFA, 0x90, 0x00, 0x05, 0x12, 0x03, 0x0F, 0xFD,
+0x7C, 0x00, 0x90, 0x92, 0x5B, 0xE0, 0xFF, 0x90, 0x92, 0x57, 0xE0, 0xFE, 0xA3, 0xE0, 0xA8, 0x07,
+0x08, 0x80, 0x05, 0xCE, 0xC3, 0x13, 0xCE, 0x13, 0xD8, 0xF9, 0x71, 0x64, 0x12, 0xAF, 0xAF, 0x40,
+0x08, 0xED, 0x9F, 0xFF, 0xEC, 0x9E, 0xFE, 0x80, 0x04, 0x7E, 0x00, 0x7F, 0x00, 0x90, 0x92, 0x5C,
+0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0x90, 0x92, 0x5C, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x90, 0x92, 0x59,
+0xE0, 0x02, 0xAF, 0x94, 0xFF, 0x12, 0x03, 0x70, 0x90, 0x92, 0x5C, 0x22, 0x25, 0xE0, 0x24, 0x7B,
+0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83, 0x22, 0x7D, 0x01, 0xAF, 0x62, 0xAC, 0x05, 0x90, 0x92,
+0x57, 0xEF, 0xF0, 0xFD, 0xE0, 0xFF, 0x12, 0x8F, 0x9B, 0xE0, 0xF5, 0x6E, 0x54, 0x7F, 0xF5, 0x70,
+0x75, 0xF0, 0x12, 0xEF, 0x90, 0x89, 0x3D, 0x12, 0x05, 0x28, 0xE0, 0xF9, 0x90, 0x92, 0x57, 0xE0,
+0x12, 0x8F, 0xF8, 0xFE, 0xEF, 0x12, 0x8F, 0xAC, 0xE0, 0x54, 0x03, 0xF5, 0x6F, 0xE5, 0x70, 0x90,
+0x83, 0x1D, 0x93, 0xFB, 0xED, 0x71, 0x6C, 0xE4, 0xF0, 0xA3, 0xEB, 0xF0, 0x12, 0x8A, 0x75, 0xC4,
+0x54, 0x03, 0x90, 0x92, 0x58, 0xF0, 0x74, 0xCC, 0x2D, 0x91, 0x56, 0xE5, 0x70, 0xF0, 0x74, 0x4C,
+0x2D, 0x91, 0xD8, 0xE5, 0x6F, 0xF0, 0xE5, 0x70, 0xD3, 0x9E, 0x40, 0x06, 0x8E, 0x70, 0xAF, 0x06,
0x8F, 0x6E, 0x8C, 0x71, 0xE4, 0xFF, 0xEF, 0xC3, 0x95, 0x71, 0x50, 0x2F, 0xE5, 0x6E, 0x30, 0xE7,
0x09, 0x85, 0x70, 0x6E, 0x1C, 0xEC, 0x70, 0x20, 0x80, 0x21, 0xE5, 0x70, 0xD3, 0x99, 0x40, 0x14,
-0xAD, 0x01, 0x90, 0x92, 0x3F, 0xE0, 0xFB, 0x90, 0x92, 0x44, 0xEC, 0xF0, 0xAF, 0x70, 0x71, 0x94,
-0x8F, 0x6E, 0x80, 0x07, 0x89, 0x6E, 0x80, 0x03, 0x0F, 0x80, 0xCB, 0x90, 0x92, 0x3F, 0xE0, 0xFF,
-0x90, 0x92, 0x45, 0xE4, 0xF0, 0xA3, 0xEF, 0xF0, 0xA3, 0xE4, 0xF0, 0xA3, 0xE5, 0x6E, 0xF0, 0xA3,
-0xE4, 0xF0, 0xA3, 0xE5, 0x6F, 0x12, 0x98, 0xD9, 0x7B, 0x01, 0xFA, 0x7D, 0x05, 0x7F, 0x08, 0x12,
-0x9E, 0xF1, 0x90, 0x92, 0x3F, 0xE0, 0xFF, 0x90, 0x91, 0x0B, 0xE5, 0x6F, 0xF0, 0xE4, 0xFB, 0xAD,
-0x6E, 0x02, 0x27, 0x3D, 0xE4, 0xF5, 0x73, 0xEF, 0x14, 0xF5, 0x72, 0xED, 0xFF, 0xE5, 0x72, 0xF5,
-0x82, 0x33, 0x95, 0xE0, 0xF5, 0x83, 0xC3, 0xE5, 0x82, 0x9F, 0x74, 0x80, 0xF8, 0x65, 0x83, 0x98,
-0x40, 0x51, 0xE5, 0x72, 0x78, 0x03, 0xA2, 0xE7, 0x13, 0xD8, 0xFB, 0xFF, 0x33, 0x95, 0xE0, 0xFE,
-0xEB, 0x91, 0x06, 0xE5, 0x82, 0x2F, 0xF5, 0x82, 0xE5, 0x83, 0x3E, 0xF5, 0x83, 0xE0, 0xF5, 0x82,
-0x75, 0x83, 0x00, 0xE5, 0x72, 0x12, 0xAF, 0x61, 0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8,
-0xF9, 0xFF, 0xEE, 0x55, 0x83, 0xFE, 0xEF, 0x55, 0x82, 0x4E, 0x60, 0x13, 0x85, 0x72, 0x74, 0x05,
-0x73, 0x90, 0x92, 0x44, 0xE0, 0x65, 0x73, 0x60, 0x0A, 0xE5, 0x74, 0xD3, 0x9D, 0x40, 0x04, 0x15,
-0x72, 0x80, 0x98, 0xAF, 0x74, 0x22, 0x75, 0xF0, 0x08, 0xA4, 0x24, 0x00, 0xF5, 0x82, 0xE4, 0x34,
-0x82, 0xF5, 0x83, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x93, 0xA1, 0xEF, 0xF0,
-0x12, 0x8F, 0xBC, 0x30, 0xE6, 0x40, 0x7F, 0x8D, 0x12, 0x7B, 0x51, 0xEF, 0x64, 0x01, 0x70, 0x36,
-0x90, 0x93, 0xA2, 0xF0, 0x90, 0x93, 0xA2, 0xE0, 0xFD, 0x90, 0x93, 0xA1, 0xE0, 0x12, 0x8F, 0x8A,
-0xE5, 0x82, 0x2D, 0x12, 0xAE, 0x18, 0xE0, 0xFB, 0xE4, 0xFF, 0x12, 0x8B, 0xA3, 0x90, 0x93, 0xA2,
-0xE0, 0x04, 0xF0, 0xE0, 0xC3, 0x94, 0x10, 0x40, 0xDB, 0x12, 0x8F, 0xBC, 0x30, 0xE0, 0x07, 0xE4,
-0xFD, 0x7F, 0x8D, 0x12, 0x7B, 0x3E, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xE4, 0x90, 0x92, 0xCE, 0xF0,
-0x90, 0x92, 0xCC, 0x74, 0x14, 0xF0, 0x90, 0x92, 0xDA, 0x74, 0x01, 0xF0, 0xFB, 0x7A, 0x92, 0x79,
-0xCC, 0x12, 0x5E, 0x10, 0x7F, 0x04, 0x02, 0x87, 0xDA, 0x90, 0x01, 0xCF, 0xE0, 0x90, 0x92, 0xBB,
-0xF0, 0xE0, 0xFF, 0x30, 0xE0, 0x07, 0x90, 0x01, 0xCF, 0xE0, 0x54, 0xFE, 0xF0, 0xEF, 0x30, 0xE5,
-0x23, 0x90, 0x01, 0xCF, 0xE0, 0x54, 0xDF, 0xF0, 0x90, 0x01, 0x34, 0x74, 0x20, 0xF0, 0xE4, 0xF5,
-0xA8, 0xF5, 0xE8, 0x12, 0x75, 0xB6, 0x90, 0x00, 0x03, 0xE0, 0x54, 0xFB, 0xFD, 0x7F, 0x03, 0x12,
-0x7B, 0x3E, 0x80, 0xFE, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x93, 0x90, 0xED,
-0xF0, 0xA3, 0xEB, 0xF0, 0x90, 0x93, 0x8F, 0xEF, 0xF0, 0xE4, 0xFD, 0xFC, 0x12, 0x7B, 0x2A, 0x7C,
-0x00, 0xAD, 0x07, 0x90, 0x93, 0x8F, 0xE0, 0x90, 0x04, 0x25, 0xF0, 0x90, 0x93, 0x90, 0xE0, 0x60,
-0x0E, 0x74, 0x21, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x44, 0x80, 0xF0, 0xAF,
-0x05, 0x74, 0x20, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x54, 0xC0, 0xF0, 0x74,
-0x21, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x54, 0xC0, 0xF0, 0x90, 0x93, 0x92,
-0xE0, 0xFF, 0xAE, 0x05, 0x74, 0x18, 0x2E, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xEF, 0xF0,
-0x74, 0x12, 0x2E, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x54, 0x01, 0xFF, 0x90, 0x93,
-0x91, 0xE0, 0x25, 0xE0, 0x25, 0xE0, 0xFE, 0xEF, 0x44, 0x02, 0x4E, 0xFF, 0xAE, 0x05, 0x74, 0x12,
-0x2E, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xEF, 0xF0, 0x74, 0x11, 0x2E, 0xF5, 0x82, 0xE4,
-0x34, 0xFC, 0xF5, 0x83, 0x74, 0xFF, 0xF0, 0x74, 0x29, 0x2E, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5,
-0x83, 0xE0, 0x54, 0xF7, 0xF0, 0xAE, 0x04, 0xAF, 0x05, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xD3, 0x10,
-0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x93, 0x75, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0x12, 0x70, 0x61,
-0x90, 0x93, 0x7F, 0x12, 0x04, 0xEB, 0x90, 0x93, 0x77, 0x12, 0x86, 0xE2, 0x12, 0x04, 0xA7, 0x90,
-0x93, 0x7F, 0x12, 0x86, 0xEE, 0x12, 0x86, 0xC8, 0xC0, 0x04, 0xC0, 0x05, 0xC0, 0x06, 0xC0, 0x07,
-0x90, 0x93, 0x77, 0x12, 0x86, 0xE2, 0x90, 0x93, 0x7B, 0x12, 0x86, 0xEE, 0x12, 0x86, 0xC8, 0xD0,
-0x03, 0xD0, 0x02, 0xD0, 0x01, 0xD0, 0x00, 0x12, 0x86, 0xD5, 0x90, 0x93, 0x83, 0x12, 0x04, 0xEB,
-0x90, 0x93, 0x83, 0x12, 0x86, 0xE2, 0x90, 0x91, 0x66, 0x12, 0x04, 0xEB, 0x90, 0x93, 0x75, 0xE0,
-0xFE, 0xA3, 0xE0, 0xFF, 0x12, 0x71, 0x18, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xE4, 0x90, 0x92, 0xCE,
-0xF0, 0xA3, 0xF0, 0x7F, 0x83, 0x12, 0x7B, 0x51, 0x90, 0x92, 0xCD, 0xEF, 0xF0, 0x7F, 0x83, 0x12,
-0x7B, 0x51, 0xAE, 0x07, 0x90, 0x92, 0xCD, 0xE0, 0xFF, 0xB5, 0x06, 0x01, 0x22, 0xC3, 0x90, 0x92,
-0xCF, 0xE0, 0x94, 0x64, 0x90, 0x92, 0xCE, 0xE0, 0x94, 0x00, 0x40, 0x0D, 0x90, 0x01, 0xC0, 0xE0,
-0x44, 0x40, 0xF0, 0x90, 0x92, 0xCD, 0xE0, 0xFF, 0x22, 0x90, 0x92, 0xCE, 0x12, 0x97, 0xC4, 0x80,
-0xC2, 0x90, 0x01, 0xC4, 0x74, 0x31, 0xF0, 0x74, 0xBE, 0xA3, 0xF0, 0x7F, 0x90, 0x12, 0x7B, 0x51,
-0xEF, 0x20, 0xE0, 0xF7, 0x74, 0x31, 0x04, 0x90, 0x01, 0xC4, 0xF0, 0x74, 0xBE, 0xA3, 0xF0, 0x22,
-0x90, 0x04, 0x24, 0xEF, 0xF0, 0x90, 0x04, 0x57, 0xF0, 0x22, 0x90, 0x92, 0xEE, 0xE0, 0xFD, 0x7C,
-0x00, 0xA3, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x12, 0x03, 0x82, 0xED, 0x4C, 0x70, 0x05, 0x90, 0x92,
-0xFB, 0x80, 0x2A, 0xED, 0x64, 0x01, 0x4C, 0x70, 0x05, 0x90, 0x92, 0xFC, 0x80, 0x1F, 0xED, 0x64,
-0x02, 0x4C, 0x70, 0x05, 0x90, 0x92, 0xFD, 0x80, 0x14, 0xED, 0x64, 0x03, 0x4C, 0x70, 0x05, 0x90,
-0x92, 0xFE, 0x80, 0x09, 0xED, 0x64, 0x04, 0x4C, 0x70, 0x0D, 0x90, 0x92, 0xFF, 0xE0, 0xFF, 0xD1,
-0x50, 0x90, 0x92, 0xEF, 0x12, 0x97, 0xC4, 0x22, 0x90, 0x93, 0x9C, 0x12, 0x87, 0x03, 0x12, 0x71,
-0x54, 0x90, 0x85, 0xC5, 0xE0, 0xFF, 0x12, 0x60, 0xD0, 0x90, 0x85, 0xC5, 0xE0, 0x60, 0x16, 0x90,
-0x93, 0x9C, 0x12, 0x8E, 0xF4, 0x54, 0x0F, 0xFF, 0x12, 0x8B, 0xD9, 0xFD, 0x12, 0x6A, 0xB8, 0x12,
-0xAF, 0x97, 0x12, 0x51, 0x7D, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x12, 0x7A, 0x29,
-0xEF, 0x64, 0x01, 0x60, 0x05, 0x75, 0x0F, 0x01, 0x80, 0x56, 0x90, 0x85, 0xC9, 0xE0, 0xFF, 0x54,
-0x03, 0x60, 0x05, 0x75, 0x0F, 0x02, 0x80, 0x48, 0x90, 0x85, 0xC7, 0xE0, 0xFE, 0xE4, 0xC3, 0x9E,
-0x50, 0x05, 0x75, 0x0F, 0x04, 0x80, 0x39, 0xEF, 0x30, 0xE2, 0x05, 0x75, 0x0F, 0x08, 0x80, 0x30,
-0x90, 0x85, 0xC9, 0xE0, 0x30, 0xE4, 0x05, 0x75, 0x0F, 0x10, 0x80, 0x24, 0x90, 0x85, 0xC2, 0xE0,
-0x13, 0x13, 0x54, 0x3F, 0x20, 0xE0, 0x05, 0x75, 0x0F, 0x20, 0x80, 0x14, 0x90, 0x86, 0x71, 0xE0,
-0x60, 0x05, 0x75, 0x0F, 0x80, 0x80, 0x09, 0x90, 0x01, 0xB8, 0xE4, 0xF0, 0x7F, 0x01, 0x80, 0x0E,
-0x90, 0x01, 0xB9, 0x74, 0x04, 0xF0, 0x90, 0x01, 0xB8, 0xE5, 0x0F, 0xF0, 0x7F, 0x00, 0xD0, 0xD0,
-0x92, 0xAF, 0x22, 0x90, 0x02, 0x87, 0xE0, 0x60, 0x02, 0x80, 0x08, 0x90, 0x01, 0x00, 0xE0, 0x64,
-0x3F, 0x60, 0x05, 0x75, 0x61, 0x01, 0x80, 0x28, 0x90, 0x02, 0x96, 0xE0, 0x60, 0x05, 0x75, 0x61,
-0x10, 0x80, 0x1D, 0x90, 0x02, 0x86, 0xE0, 0x20, 0xE1, 0x02, 0x80, 0x07, 0x90, 0x02, 0x86, 0xE0,
-0x30, 0xE3, 0x05, 0x75, 0x61, 0x04, 0x80, 0x08, 0x90, 0x01, 0xB8, 0xE4, 0xF0, 0x7F, 0x01, 0x22,
-0x90, 0x01, 0xB9, 0x74, 0x08, 0xF0, 0x90, 0x01, 0xB8, 0xE5, 0x61, 0xF0, 0x7F, 0x00, 0x22, 0xAC,
-0x07, 0x90, 0x93, 0x1F, 0xE0, 0xF9, 0x30, 0xE0, 0x03, 0x02, 0xC0, 0x55, 0x90, 0x85, 0xC1, 0xE0,
-0x30, 0xE0, 0x16, 0x90, 0x85, 0xFB, 0xE0, 0x24, 0x04, 0x90, 0x85, 0xDA, 0xF0, 0x90, 0x85, 0xFB,
-0xE0, 0x24, 0x03, 0x90, 0x85, 0xD9, 0xF0, 0x80, 0x0D, 0x90, 0x85, 0xDA, 0x74, 0x02, 0xF0, 0x90,
-0x85, 0xD9, 0x14, 0xF0, 0x0B, 0x0B, 0x90, 0x85, 0xD9, 0xE0, 0xFA, 0x90, 0x85, 0xD8, 0xE0, 0xD3,
-0x9A, 0x50, 0x0E, 0x90, 0x85, 0xCD, 0xEB, 0xF0, 0x90, 0x85, 0xDA, 0xE0, 0xC3, 0x9D, 0x2C, 0x80,
-0x11, 0xC3, 0xED, 0x9A, 0x2B, 0x90, 0x85, 0xCD, 0xF0, 0x90, 0x85, 0xD9, 0xE0, 0xFF, 0xA3, 0xE0,
-0xC3, 0x9F, 0x90, 0x85, 0xDD, 0xF0, 0x90, 0x85, 0xDA, 0xE0, 0xFF, 0x24, 0x0A, 0xFD, 0xE4, 0x33,
-0xFC, 0x90, 0x85, 0xDD, 0x11, 0x5D, 0x98, 0x40, 0x04, 0xEF, 0x24, 0x0A, 0xF0, 0x90, 0x85, 0xDD,
-0xE0, 0xFF, 0x24, 0x23, 0xFD, 0xE4, 0x33, 0xFC, 0x90, 0x85, 0xCD, 0x11, 0x5D, 0x98, 0x40, 0x04,
-0xEF, 0x24, 0x23, 0xF0, 0x90, 0x85, 0xDD, 0xE0, 0xFF, 0x7E, 0x00, 0x90, 0x85, 0xD1, 0xEE, 0xF0,
-0xA3, 0xEF, 0xF0, 0x90, 0x05, 0x58, 0xE0, 0x6F, 0x70, 0x01, 0xE4, 0x60, 0x03, 0x12, 0xAF, 0x82,
-0xE9, 0x54, 0xFD, 0x80, 0x03, 0xE9, 0x44, 0x02, 0x90, 0x93, 0x1F, 0xF0, 0x22, 0xE0, 0xD3, 0x9D,
-0xEC, 0x64, 0x80, 0xF8, 0x74, 0x80, 0x22, 0x90, 0x93, 0x59, 0x74, 0x04, 0xF0, 0x14, 0xF0, 0xA3,
-0xF0, 0xA3, 0xE4, 0xF0, 0xA3, 0x74, 0x64, 0xF0, 0xA3, 0x74, 0x05, 0xF0, 0xA3, 0xF0, 0x22, 0xE4,
-0x90, 0x92, 0xBB, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0x90, 0x93, 0x28, 0x12, 0x86, 0xE2, 0x90, 0x93,
-0x24, 0x12, 0x86, 0xEE, 0xC3, 0x12, 0x04, 0xB4, 0x40, 0x4B, 0x90, 0x85, 0xC1, 0xE0, 0x90, 0x93,
-0x28, 0x30, 0xE0, 0x0F, 0x31, 0xF6, 0x90, 0x85, 0xFB, 0xE0, 0x24, 0x04, 0x2F, 0xFF, 0x90, 0x93,
-0x59, 0x80, 0x05, 0x31, 0xF6, 0x90, 0x93, 0x5A, 0xE0, 0xFE, 0xC3, 0xEF, 0x9E, 0x90, 0x92, 0xBC,
-0xF0, 0x90, 0x92, 0xBC, 0xE0, 0xFF, 0xC3, 0x94, 0x2D, 0x50, 0x1A, 0x74, 0x2C, 0x2F, 0xF5, 0x82,
-0xE4, 0x34, 0x93, 0xF5, 0x83, 0xE0, 0x04, 0xF0, 0x90, 0x85, 0xDB, 0xE0, 0x04, 0xF0, 0xE0, 0xFD,
-0x7F, 0xFE, 0x12, 0x7B, 0x3E, 0x90, 0x85, 0xDB, 0xE0, 0xFF, 0xD3, 0x90, 0x93, 0x5C, 0xE0, 0x9F,
-0x90, 0x93, 0x5B, 0xE0, 0x94, 0x00, 0x40, 0x02, 0x21, 0xD3, 0x31, 0xD4, 0x90, 0x92, 0xBB, 0xE0,
-0xFF, 0xC3, 0x94, 0x2D, 0x50, 0x1C, 0x31, 0xDE, 0x90, 0x92, 0xBD, 0xE0, 0xD3, 0x9F, 0x40, 0x0A,
-0x90, 0x92, 0xBB, 0xE0, 0x90, 0x92, 0xBE, 0xF0, 0x80, 0x08, 0x90, 0x92, 0xBB, 0xE0, 0x04, 0xF0,
-0x80, 0xDA, 0x31, 0xD4, 0x90, 0x92, 0xBB, 0xE0, 0xFF, 0xC3, 0x94, 0x2D, 0x50, 0x2C, 0x31, 0xDE,
-0xC3, 0x90, 0x93, 0x5C, 0xE0, 0x9F, 0xFF, 0x90, 0x93, 0x5B, 0xE0, 0x94, 0x00, 0xFE, 0x90, 0x92,
-0xBD, 0xE0, 0xD3, 0x9F, 0xE4, 0x9E, 0x40, 0x0A, 0x90, 0x92, 0xBB, 0xE0, 0x90, 0x92, 0xBF, 0xF0,
-0x80, 0x08, 0x90, 0x92, 0xBB, 0xE0, 0x04, 0xF0, 0x80, 0xCA, 0x90, 0x92, 0xBE, 0xE0, 0x90, 0x85,
-0xE0, 0xF0, 0x90, 0x92, 0xBF, 0xE0, 0x90, 0x85, 0xE1, 0xF0, 0x90, 0x85, 0xE0, 0xE0, 0xFF, 0xC3,
-0x94, 0x0A, 0x40, 0x0A, 0xEF, 0x24, 0xF6, 0x90, 0x85, 0xD8, 0xF0, 0xE4, 0x80, 0x0E, 0xE4, 0x90,
-0x85, 0xD8, 0xF0, 0x90, 0x85, 0xE0, 0xE0, 0xFF, 0xC3, 0x74, 0x0A, 0x9F, 0x90, 0x85, 0xD7, 0xF0,
-0x90, 0x85, 0xE0, 0xE0, 0xFF, 0xA3, 0xE0, 0xC3, 0x9F, 0x90, 0x85, 0xDE, 0xF0, 0x90, 0x85, 0xC1,
-0xE0, 0x30, 0xE0, 0x05, 0x90, 0x93, 0x59, 0x80, 0x03, 0x90, 0x93, 0x5A, 0xE0, 0xFF, 0x90, 0x85,
-0xDE, 0xE0, 0x2F, 0x04, 0xF0, 0x90, 0x85, 0xDE, 0xE0, 0xC3, 0x94, 0x0A, 0x50, 0x03, 0x74, 0x0A,
-0xF0, 0x90, 0x85, 0xDE, 0xE0, 0x24, 0x02, 0xF0, 0x12, 0xAF, 0x97, 0x12, 0x51, 0x7D, 0xE4, 0xFF,
-0x12, 0x69, 0x33, 0x22, 0xE4, 0x90, 0x92, 0xBD, 0xF0, 0x90, 0x92, 0xBB, 0xF0, 0x22, 0x74, 0x2C,
-0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x93, 0xF5, 0x83, 0xE0, 0xFF, 0x90, 0x92, 0xBD, 0xE0, 0x2F, 0xF0,
-0x90, 0x93, 0x5D, 0xE0, 0xFF, 0x22, 0x12, 0x86, 0xEE, 0x90, 0x93, 0x24, 0x12, 0x86, 0xE2, 0x12,
-0x86, 0xBA, 0x78, 0x0A, 0x12, 0x04, 0xC5, 0x90, 0x85, 0xDD, 0xE0, 0xFE, 0xC3, 0x74, 0x0A, 0x9E,
-0x2F, 0xFF, 0x22, 0x12, 0xAF, 0x78, 0xD3, 0x9F, 0x40, 0x2B, 0x90, 0x85, 0xDF, 0xE0, 0x04, 0xF0,
-0x90, 0x93, 0x5E, 0xE0, 0xFF, 0x90, 0x85, 0xDF, 0xE0, 0xD3, 0x9F, 0x50, 0x18, 0x90, 0x85, 0xD7,
-0xE0, 0x04, 0x12, 0x93, 0x10, 0x90, 0x85, 0xDE, 0xF0, 0xFB, 0x90, 0x85, 0xD7, 0xE0, 0xFF, 0xA3,
-0xE0, 0xFD, 0x12, 0x51, 0x7D, 0x22, 0xE4, 0xFE, 0x74, 0x2C, 0x2E, 0xF5, 0x82, 0xE4, 0x34, 0x93,
-0xF5, 0x83, 0xE4, 0xF0, 0x0E, 0xEE, 0xB4, 0x2D, 0xEF, 0xE4, 0x90, 0x85, 0xDC, 0xF0, 0x90, 0x85,
-0xDB, 0xF0, 0x90, 0x85, 0xDF, 0xF0, 0xEF, 0xB4, 0x01, 0x07, 0xA3, 0x74, 0x2D, 0xF0, 0xE4, 0xA3,
-0xF0, 0x22, 0x90, 0x85, 0xC5, 0xE0, 0x64, 0x01, 0x70, 0x22, 0x12, 0x8F, 0xCA, 0x60, 0x10, 0xE4,
-0xFD, 0x7F, 0x0C, 0x12, 0x8D, 0x34, 0xE4, 0xFD, 0xFF, 0x12, 0x90, 0xEF, 0x02, 0x6B, 0x98, 0x90,
-0x85, 0xC8, 0xE0, 0x70, 0x07, 0x7D, 0x01, 0x7F, 0x04, 0x12, 0x8D, 0x34, 0x22, 0x90, 0x93, 0x09,
-0xE0, 0x30, 0xE0, 0x34, 0xC4, 0x13, 0x54, 0x07, 0x20, 0xE0, 0x2D, 0x90, 0x93, 0xA7, 0xE0, 0x04,
-0xF0, 0xE0, 0xD3, 0x94, 0xC8, 0x40, 0x21, 0x90, 0x93, 0x09, 0xE0, 0x44, 0x20, 0xF0, 0xE4, 0x90,
-0x93, 0xA7, 0xF0, 0x90, 0x93, 0x09, 0xE0, 0x13, 0x30, 0xE0, 0x0D, 0x90, 0x85, 0xC1, 0xE0, 0x44,
-0x01, 0xF0, 0x90, 0x85, 0xD0, 0x74, 0xD0, 0xF0, 0x22, 0x90, 0x92, 0xE0, 0xEF, 0xF0, 0x90, 0x84,
-0xC5, 0xE0, 0xB4, 0x02, 0x12, 0x90, 0x92, 0xE0, 0xE0, 0xFF, 0x64, 0x01, 0x60, 0x25, 0x90, 0x01,
-0x4D, 0xE0, 0x64, 0x80, 0xF0, 0x80, 0x19, 0x90, 0x01, 0x00, 0x74, 0xFF, 0xF0, 0x7F, 0x64, 0x7E,
-0x00, 0x12, 0x7C, 0x9F, 0x90, 0x06, 0x90, 0xE0, 0x44, 0x01, 0xF0, 0x90, 0x92, 0xE0, 0xE0, 0xFF,
-0x12, 0x2A, 0x87, 0x22, 0xE5, 0x64, 0x25, 0xE0, 0x24, 0xF5, 0xF5, 0x82, 0xE4, 0x34, 0x82, 0xF5,
-0x83, 0xE4, 0x93, 0xFF, 0x74, 0x01, 0x93, 0x90, 0x92, 0x47, 0xCF, 0xF0, 0xA3, 0xEF, 0xF0, 0x90,
-0x92, 0x45, 0x22, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0xC3, 0x74, 0xFF, 0x9F, 0xFF, 0x74, 0xFF, 0x9E,
-0xFE, 0xE5, 0x62, 0x25, 0xE0, 0x22, 0x35, 0xF0, 0xFE, 0x90, 0x00, 0x06, 0x12, 0x04, 0x18, 0x2F,
-0xFF, 0xEE, 0x35, 0xF0, 0x22, 0xE5, 0x66, 0xF0, 0xA3, 0xE5, 0x67, 0xF0, 0xE5, 0x64, 0x90, 0x83,
-0x1D, 0x93, 0xFF, 0x22, 0xE0, 0xFF, 0x90, 0x92, 0x4B, 0xE4, 0xF0, 0xA3, 0xEF, 0xF0, 0x22, 0xE0,
-0xFE, 0xA3, 0xE0, 0xFF, 0xED, 0x2F, 0xFF, 0xEC, 0x3E, 0xFE, 0x22, 0x90, 0x92, 0x33, 0x12, 0x86,
-0xFA, 0x90, 0x00, 0x02, 0x12, 0x04, 0x18, 0xFF, 0x22, 0xE0, 0x54, 0x03, 0x90, 0x91, 0x0B, 0xF0,
-0x7B, 0x01, 0xAF, 0x78, 0x02, 0x27, 0x3D, 0xE5, 0x64, 0x25, 0xE0, 0x24, 0xF5, 0xF5, 0x82, 0xE4,
-0x34, 0x82, 0xF5, 0x83, 0x22, 0x90, 0x00, 0x06, 0x02, 0x04, 0x18, 0x90, 0x92, 0x49, 0xE4, 0xF0,
-0xA3, 0x22, 0xE5, 0x62, 0x25, 0xE0, 0x24, 0x8C, 0xF5, 0x82, 0xE4, 0x22, 0x90, 0x92, 0x33, 0x12,
-0x86, 0xFA, 0x02, 0x03, 0xED, 0x74, 0xBC, 0x25, 0x62, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0x22, 0x00,
-0x79, 0xEA,
+0xAD, 0x01, 0x90, 0x92, 0x57, 0xE0, 0xFB, 0x90, 0x92, 0x5C, 0xEC, 0xF0, 0xAF, 0x70, 0x91, 0x5E,
+0x8F, 0x6E, 0x80, 0x07, 0x89, 0x6E, 0x80, 0x03, 0x0F, 0x80, 0xCB, 0x90, 0x92, 0x57, 0xE0, 0xFF,
+0x90, 0x92, 0x5D, 0xE4, 0xF0, 0xA3, 0xEF, 0xF0, 0xA3, 0xE4, 0xF0, 0xA3, 0xE5, 0x6E, 0x91, 0xD0,
+0xF0, 0xE4, 0xA3, 0xF0, 0xA3, 0xF0, 0x7B, 0x01, 0xFA, 0x7D, 0x05, 0x7F, 0x08, 0x12, 0xAE, 0xF6,
+0x90, 0x92, 0x57, 0xE0, 0xFF, 0x90, 0x91, 0x0B, 0xE5, 0x6F, 0xF0, 0xE4, 0xFB, 0xAD, 0x6E, 0x02,
+0x27, 0x3D, 0x74, 0xCC, 0x25, 0x6E, 0xF5, 0x82, 0xE4, 0x34, 0x90, 0xF5, 0x83, 0x22, 0xE4, 0xF5,
+0x73, 0xEF, 0x14, 0xF5, 0x72, 0xED, 0xFF, 0xE5, 0x72, 0xF5, 0x82, 0x33, 0x95, 0xE0, 0xF5, 0x83,
+0xC3, 0xE5, 0x82, 0x9F, 0x74, 0x80, 0xF8, 0x65, 0x83, 0x98, 0x40, 0x51, 0xE5, 0x72, 0x78, 0x03,
+0xA2, 0xE7, 0x13, 0xD8, 0xFB, 0xFF, 0x33, 0x95, 0xE0, 0xFE, 0xEB, 0x91, 0xE0, 0xE5, 0x82, 0x2F,
+0xF5, 0x82, 0xE5, 0x83, 0x3E, 0xF5, 0x83, 0xE0, 0xF5, 0x82, 0x75, 0x83, 0x00, 0xE5, 0x72, 0x12,
+0xA9, 0x01, 0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0xFF, 0xEE, 0x55, 0x83, 0xFE,
+0xEF, 0x55, 0x82, 0x4E, 0x60, 0x13, 0x85, 0x72, 0x74, 0x05, 0x73, 0x90, 0x92, 0x5C, 0xE0, 0x65,
+0x73, 0x60, 0x0A, 0xE5, 0x74, 0xD3, 0x9D, 0x40, 0x04, 0x15, 0x72, 0x80, 0x98, 0xAF, 0x74, 0x22,
+0xF0, 0xA3, 0xE4, 0xF0, 0xA3, 0xE5, 0x6F, 0x22, 0xF5, 0x82, 0xE4, 0x34, 0x90, 0xF5, 0x83, 0x22,
+0x75, 0xF0, 0x08, 0xA4, 0x24, 0x00, 0xF5, 0x82, 0xE4, 0x34, 0x82, 0xF5, 0x83, 0x22, 0x90, 0x89,
+0x16, 0xE0, 0x54, 0x7F, 0xF0, 0x54, 0xBF, 0xF0, 0x54, 0xDF, 0xF0, 0x54, 0xF0, 0xF0, 0xE4, 0x90,
+0x89, 0x18, 0xF0, 0x90, 0x89, 0x16, 0xE0, 0x54, 0xEF, 0xF0, 0x22, 0x90, 0x01, 0xCF, 0xE0, 0x90,
+0x92, 0xD3, 0xF0, 0xE0, 0xFF, 0x30, 0xE0, 0x07, 0x90, 0x01, 0xCF, 0xE0, 0x54, 0xFE, 0xF0, 0xEF,
+0x30, 0xE5, 0x23, 0x90, 0x01, 0xCF, 0xE0, 0x54, 0xDF, 0xF0, 0x90, 0x01, 0x34, 0x74, 0x20, 0xF0,
+0xE4, 0xF5, 0xA8, 0xF5, 0xE8, 0x12, 0x75, 0xB6, 0x90, 0x00, 0x03, 0xE0, 0x54, 0xFB, 0xFD, 0x7F,
+0x03, 0x12, 0x7B, 0x3E, 0x80, 0xFE, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x93,
+0xA8, 0xED, 0xF0, 0xA3, 0xEB, 0xF0, 0x90, 0x93, 0xA7, 0xEF, 0xF0, 0xE4, 0xFD, 0xFC, 0x12, 0x7B,
+0x2A, 0x7C, 0x00, 0xAD, 0x07, 0x90, 0x93, 0xA7, 0xE0, 0x90, 0x04, 0x25, 0xF0, 0x90, 0x93, 0xA8,
+0xE0, 0x60, 0x0E, 0x74, 0x21, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x44, 0x80,
+0xF0, 0xAF, 0x05, 0x74, 0x20, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x54, 0xC0,
+0xF0, 0x74, 0x21, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x54, 0xC0, 0xF0, 0x90,
+0x93, 0xAA, 0xE0, 0xFF, 0xAE, 0x05, 0x74, 0x18, 0x2E, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83,
+0xEF, 0xF0, 0x74, 0x12, 0x2E, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x54, 0x01, 0xFF,
+0x90, 0x93, 0xA9, 0xE0, 0x12, 0xB3, 0xB0, 0x44, 0x02, 0x4E, 0xFF, 0xAE, 0x05, 0x74, 0x12, 0x2E,
+0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xEF, 0xF0, 0x74, 0x11, 0x2E, 0xF5, 0x82, 0xE4, 0x34,
+0xFC, 0xF5, 0x83, 0x74, 0xFF, 0xF0, 0x74, 0x29, 0x2E, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83,
+0xE0, 0x54, 0xF7, 0xF0, 0xAE, 0x04, 0xAF, 0x05, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xE4, 0x90, 0x92,
+0xE6, 0xF0, 0xA3, 0xF0, 0x7F, 0x83, 0x12, 0x7B, 0x51, 0x90, 0x92, 0xE5, 0xEF, 0xF0, 0x7F, 0x83,
+0x12, 0x7B, 0x51, 0xAE, 0x07, 0x90, 0x92, 0xE5, 0xE0, 0xFF, 0xB5, 0x06, 0x01, 0x22, 0xC3, 0x90,
+0x92, 0xE7, 0xE0, 0x94, 0x64, 0x90, 0x92, 0xE6, 0xE0, 0x94, 0x00, 0x40, 0x0D, 0x90, 0x01, 0xC0,
+0xE0, 0x44, 0x40, 0xF0, 0x90, 0x92, 0xE5, 0xE0, 0xFF, 0x22, 0x90, 0x92, 0xE6, 0x12, 0x97, 0xE5,
+0x80, 0xC2, 0x90, 0x04, 0x24, 0xEF, 0xF0, 0x90, 0x04, 0x57, 0xF0, 0x22, 0x90, 0x93, 0x06, 0xE0,
+0xFD, 0x7C, 0x00, 0xA3, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x12, 0x03, 0x82, 0xED, 0x4C, 0x70, 0x05,
+0x90, 0x93, 0x13, 0x80, 0x2A, 0xED, 0x64, 0x01, 0x4C, 0x70, 0x05, 0x90, 0x93, 0x14, 0x80, 0x1F,
+0xED, 0x64, 0x02, 0x4C, 0x70, 0x05, 0x90, 0x93, 0x15, 0x80, 0x14, 0xED, 0x64, 0x03, 0x4C, 0x70,
+0x05, 0x90, 0x93, 0x16, 0x80, 0x09, 0xED, 0x64, 0x04, 0x4C, 0x70, 0x0D, 0x90, 0x93, 0x17, 0xE0,
+0xFF, 0xD1, 0x42, 0x90, 0x93, 0x07, 0x12, 0x97, 0xE5, 0x22, 0x7E, 0x00, 0x7F, 0xAC, 0x7D, 0x00,
+0x7B, 0x01, 0x7A, 0x85, 0x79, 0xC1, 0x12, 0x06, 0xDE, 0x90, 0x85, 0xC4, 0x74, 0x02, 0xF0, 0x90,
+0x85, 0xCB, 0x14, 0xF0, 0xA3, 0xF0, 0xA3, 0x74, 0x0A, 0xF0, 0x90, 0x85, 0xD1, 0xE4, 0xF0, 0xA3,
+0x74, 0x02, 0xF1, 0x48, 0xF1, 0x58, 0xE4, 0xFD, 0xFF, 0x12, 0x57, 0x82, 0x7D, 0x0C, 0x7F, 0x02,
+0x12, 0x57, 0x82, 0x12, 0x93, 0x71, 0x90, 0x84, 0xC5, 0xE0, 0xFF, 0xB4, 0x01, 0x08, 0x90, 0x85,
+0xD0, 0x74, 0xDD, 0xF0, 0x80, 0x0F, 0xEF, 0x90, 0x85, 0xD0, 0xB4, 0x03, 0x05, 0x74, 0xD4, 0xF0,
+0x80, 0x03, 0x74, 0x40, 0xF0, 0x7F, 0x2C, 0x12, 0x7B, 0x51, 0xEF, 0x54, 0x0F, 0xFF, 0xBF, 0x05,
+0x08, 0x90, 0x85, 0xFB, 0x74, 0x02, 0xF0, 0x80, 0x05, 0xE4, 0x90, 0x85, 0xFB, 0xF0, 0x90, 0x86,
+0x6D, 0x74, 0x03, 0xF0, 0xA3, 0x74, 0x0F, 0xF0, 0xA3, 0xE0, 0x54, 0x01, 0x44, 0x28, 0xF0, 0xA3,
+0x74, 0x07, 0xF1, 0x48, 0xE4, 0x90, 0x85, 0xD7, 0xF0, 0xA3, 0xF0, 0x7F, 0x01, 0x12, 0x69, 0x33,
+0x90, 0x06, 0x04, 0xE0, 0x54, 0x7F, 0xF0, 0x90, 0x06, 0x0A, 0xE0, 0x54, 0xF8, 0xF0, 0x90, 0x05,
+0x22, 0xE4, 0xF0, 0x90, 0x86, 0x71, 0xF0, 0x22, 0xF0, 0x90, 0x85, 0xFB, 0xE0, 0x24, 0x04, 0x90,
+0x85, 0xDD, 0xF0, 0xA3, 0x74, 0x0A, 0xF0, 0x22, 0x90, 0x93, 0x71, 0x74, 0x04, 0xF0, 0x14, 0xF0,
+0xA3, 0xF0, 0xA3, 0xE4, 0xF0, 0xA3, 0x74, 0x64, 0xF0, 0xA3, 0x74, 0x05, 0xF0, 0xA3, 0xF0, 0x22,
+0x90, 0x93, 0xB4, 0x12, 0x87, 0x03, 0x12, 0x71, 0x54, 0x90, 0x85, 0xC5, 0xE0, 0xFF, 0x12, 0x60,
+0xD0, 0x90, 0x85, 0xC5, 0xE0, 0x60, 0x16, 0x90, 0x93, 0xB4, 0x12, 0x8E, 0xF5, 0x54, 0x0F, 0xFF,
+0x12, 0x8B, 0xE6, 0xFD, 0x12, 0x6A, 0xB8, 0x12, 0xA4, 0x36, 0x12, 0x51, 0x7D, 0x22, 0xD3, 0x10,
+0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x12, 0x7A, 0x29, 0xEF, 0x64, 0x01, 0x60, 0x05, 0x75, 0x0F, 0x01,
+0x80, 0x56, 0x90, 0x85, 0xC9, 0xE0, 0xFF, 0x54, 0x03, 0x60, 0x05, 0x75, 0x0F, 0x02, 0x80, 0x48,
+0x90, 0x85, 0xC7, 0xE0, 0xFE, 0xE4, 0xC3, 0x9E, 0x50, 0x05, 0x75, 0x0F, 0x04, 0x80, 0x39, 0xEF,
+0x30, 0xE2, 0x05, 0x75, 0x0F, 0x08, 0x80, 0x30, 0x90, 0x85, 0xC9, 0xE0, 0x30, 0xE4, 0x05, 0x75,
+0x0F, 0x10, 0x80, 0x24, 0x90, 0x85, 0xC2, 0xE0, 0x13, 0x13, 0x54, 0x3F, 0x20, 0xE0, 0x05, 0x75,
+0x0F, 0x20, 0x80, 0x14, 0x90, 0x86, 0x71, 0xE0, 0x60, 0x05, 0x75, 0x0F, 0x80, 0x80, 0x09, 0x90,
+0x01, 0xB8, 0xE4, 0xF0, 0x7F, 0x01, 0x80, 0x0E, 0x90, 0x01, 0xB9, 0x74, 0x04, 0xF0, 0x90, 0x01,
+0xB8, 0xE5, 0x0F, 0xF0, 0x7F, 0x00, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xE4, 0xF5, 0x77, 0x90, 0x06,
+0xA9, 0xE0, 0xF5, 0x77, 0x54, 0xC0, 0x70, 0x0A, 0x12, 0xA8, 0xE6, 0xF0, 0x54, 0xFD, 0xF0, 0x02,
+0x97, 0xD1, 0xE5, 0x77, 0x30, 0xE6, 0x1F, 0x90, 0x85, 0xC5, 0xE0, 0x64, 0x01, 0x70, 0x1B, 0x90,
+0x85, 0xC9, 0xE0, 0x44, 0x01, 0x12, 0x8F, 0xDA, 0x64, 0x02, 0x60, 0x05, 0x12, 0x77, 0x61, 0x80,
+0x09, 0x12, 0x79, 0x41, 0x80, 0x04, 0x12, 0xA8, 0xE6, 0xF0, 0xE5, 0x77, 0x90, 0x85, 0xC9, 0x30,
+0xE7, 0x0E, 0xE0, 0x44, 0x02, 0x12, 0x93, 0x80, 0x90, 0x85, 0xC1, 0xE0, 0x44, 0x04, 0xF0, 0x22,
+0xE0, 0x54, 0xFD, 0xF0, 0x22, 0xAC, 0x07, 0x90, 0x93, 0x37, 0xE0, 0xF9, 0x30, 0xE0, 0x02, 0x21,
+0x29, 0x90, 0x85, 0xC1, 0xE0, 0x30, 0xE0, 0x16, 0x90, 0x85, 0xFB, 0xE0, 0x24, 0x04, 0x90, 0x85,
+0xDA, 0xF0, 0x90, 0x85, 0xFB, 0xE0, 0x24, 0x03, 0x90, 0x85, 0xD9, 0xF0, 0x80, 0x0D, 0x90, 0x85,
+0xDA, 0x74, 0x02, 0xF0, 0x90, 0x85, 0xD9, 0x14, 0xF0, 0x0B, 0x0B, 0x90, 0x85, 0xD9, 0xE0, 0xFA,
+0x90, 0x85, 0xD8, 0xE0, 0xD3, 0x9A, 0x50, 0x0E, 0x90, 0x85, 0xCD, 0xEB, 0xF0, 0x90, 0x85, 0xDA,
+0xE0, 0xC3, 0x9D, 0x2C, 0x80, 0x11, 0xC3, 0xED, 0x9A, 0x2B, 0x90, 0x85, 0xCD, 0xF0, 0x90, 0x85,
+0xD9, 0xE0, 0xFF, 0xA3, 0xE0, 0xC3, 0x9F, 0x90, 0x85, 0xDD, 0xF0, 0x90, 0x85, 0xDA, 0xE0, 0xFF,
+0x24, 0x0A, 0xFD, 0xE4, 0x33, 0xFC, 0x90, 0x85, 0xDD, 0x31, 0x31, 0x98, 0x40, 0x04, 0xEF, 0x24,
+0x0A, 0xF0, 0x90, 0x85, 0xDD, 0xE0, 0xFF, 0x24, 0x23, 0xFD, 0xE4, 0x33, 0xFC, 0x90, 0x85, 0xCD,
+0x31, 0x31, 0x98, 0x40, 0x04, 0xEF, 0x24, 0x23, 0xF0, 0x90, 0x85, 0xDD, 0xE0, 0xFF, 0x7E, 0x00,
+0x90, 0x85, 0xD1, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0x90, 0x05, 0x58, 0xE0, 0x6F, 0x70, 0x01, 0xE4,
+0x60, 0x02, 0x31, 0x3B, 0xE9, 0x54, 0xFD, 0x80, 0x03, 0xE9, 0x44, 0x02, 0x90, 0x93, 0x37, 0xF0,
+0x22, 0xE0, 0xD3, 0x9D, 0xEC, 0x64, 0x80, 0xF8, 0x74, 0x80, 0x22, 0x90, 0x85, 0xD1, 0xA3, 0xE0,
+0x90, 0x05, 0x58, 0xF0, 0x22, 0xE4, 0x90, 0x92, 0xD3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0x90, 0x93,
+0x40, 0x12, 0x86, 0xE2, 0x90, 0x93, 0x3C, 0x12, 0x86, 0xEE, 0xC3, 0x12, 0x04, 0xB4, 0x40, 0x46,
+0x90, 0x85, 0xC1, 0xE0, 0x90, 0x93, 0x40, 0x30, 0xE0, 0x0F, 0x51, 0xB5, 0x90, 0x85, 0xFB, 0xE0,
+0x24, 0x04, 0x2F, 0xFF, 0x90, 0x93, 0x71, 0x80, 0x05, 0x51, 0xB5, 0x90, 0x93, 0x72, 0xE0, 0xFE,
+0xC3, 0xEF, 0x9E, 0x90, 0x92, 0xD4, 0xF0, 0x90, 0x92, 0xD4, 0xE0, 0xFF, 0xC3, 0x94, 0x2D, 0x50,
+0x15, 0x74, 0x44, 0x2F, 0x51, 0xD2, 0xE0, 0x04, 0xF0, 0x90, 0x85, 0xDB, 0xE0, 0x04, 0xF0, 0xE0,
+0xFD, 0x7F, 0xFE, 0x12, 0x7B, 0x3E, 0x90, 0x85, 0xDB, 0xE0, 0xFF, 0xD3, 0x90, 0x93, 0x74, 0xE0,
+0x9F, 0x90, 0x93, 0x73, 0xE0, 0x94, 0x00, 0x40, 0x02, 0x41, 0x8A, 0x51, 0x93, 0x90, 0x92, 0xD3,
+0xE0, 0xFF, 0xC3, 0x94, 0x2D, 0x50, 0x1C, 0x51, 0x9D, 0x90, 0x92, 0xD5, 0xE0, 0xD3, 0x9F, 0x40,
+0x0A, 0x90, 0x92, 0xD3, 0xE0, 0x90, 0x92, 0xD6, 0xF0, 0x80, 0x08, 0x90, 0x92, 0xD3, 0xE0, 0x04,
+0xF0, 0x80, 0xDA, 0x51, 0x93, 0x90, 0x92, 0xD3, 0xE0, 0xFF, 0xC3, 0x94, 0x2D, 0x50, 0x2C, 0x51,
+0x9D, 0xC3, 0x90, 0x93, 0x74, 0xE0, 0x9F, 0xFF, 0x90, 0x93, 0x73, 0xE0, 0x94, 0x00, 0xFE, 0x90,
+0x92, 0xD5, 0xE0, 0xD3, 0x9F, 0xE4, 0x9E, 0x40, 0x0A, 0x90, 0x92, 0xD3, 0xE0, 0x90, 0x92, 0xD7,
+0xF0, 0x80, 0x08, 0x90, 0x92, 0xD3, 0xE0, 0x04, 0xF0, 0x80, 0xCA, 0x90, 0x92, 0xD6, 0xE0, 0x90,
+0x85, 0xE0, 0xF0, 0x90, 0x92, 0xD7, 0xE0, 0x90, 0x85, 0xE1, 0x51, 0x8B, 0x94, 0x0A, 0x40, 0x0A,
+0xEF, 0x24, 0xF6, 0x90, 0x85, 0xD8, 0xF0, 0xE4, 0x80, 0x09, 0xE4, 0x90, 0x85, 0xD8, 0x51, 0x8B,
+0x74, 0x0A, 0x9F, 0x90, 0x85, 0xD7, 0xF0, 0x90, 0x85, 0xE0, 0xE0, 0xFF, 0xA3, 0xE0, 0xC3, 0x9F,
+0x90, 0x85, 0xDE, 0xF0, 0x90, 0x85, 0xC1, 0xE0, 0x30, 0xE0, 0x05, 0x90, 0x93, 0x71, 0x80, 0x03,
+0x90, 0x93, 0x72, 0xE0, 0xFF, 0x90, 0x85, 0xDE, 0xE0, 0x2F, 0x04, 0xF0, 0x90, 0x85, 0xDE, 0xE0,
+0xC3, 0x94, 0x0A, 0x50, 0x03, 0x74, 0x0A, 0xF0, 0x90, 0x85, 0xDE, 0xE0, 0x24, 0x02, 0xF0, 0x12,
+0xA4, 0x36, 0x12, 0x51, 0x7D, 0xE4, 0xFF, 0x12, 0x69, 0x33, 0x22, 0xF0, 0x90, 0x85, 0xE0, 0xE0,
+0xFF, 0xC3, 0x22, 0xE4, 0x90, 0x92, 0xD5, 0xF0, 0x90, 0x92, 0xD3, 0xF0, 0x22, 0x74, 0x44, 0x2F,
+0xF5, 0x82, 0xE4, 0x34, 0x93, 0xF5, 0x83, 0xE0, 0xFF, 0x90, 0x92, 0xD5, 0xE0, 0x2F, 0xF0, 0x90,
+0x93, 0x75, 0xE0, 0xFF, 0x22, 0x12, 0x86, 0xEE, 0x90, 0x93, 0x3C, 0x12, 0x86, 0xE2, 0x12, 0x86,
+0xBA, 0x78, 0x0A, 0x12, 0x04, 0xC5, 0x90, 0x85, 0xDD, 0xE0, 0xFE, 0xC3, 0x74, 0x0A, 0x9E, 0x2F,
+0xFF, 0x22, 0xF5, 0x82, 0xE4, 0x34, 0x93, 0xF5, 0x83, 0x22, 0xE4, 0xFE, 0x74, 0x44, 0x2E, 0x51,
+0xD2, 0xE4, 0xF0, 0x0E, 0xEE, 0xB4, 0x2D, 0xF4, 0xE4, 0x90, 0x85, 0xDC, 0xF0, 0x90, 0x85, 0xDB,
+0xF0, 0x90, 0x85, 0xDF, 0xF0, 0xEF, 0xB4, 0x01, 0x07, 0xA3, 0x74, 0x2D, 0xF0, 0xE4, 0xA3, 0xF0,
+0x22, 0x71, 0x33, 0xD3, 0x9F, 0x40, 0x2B, 0x90, 0x85, 0xDF, 0xE0, 0x04, 0xF0, 0x90, 0x93, 0x76,
+0xE0, 0xFF, 0x90, 0x85, 0xDF, 0xE0, 0xD3, 0x9F, 0x50, 0x18, 0x90, 0x85, 0xD7, 0xE0, 0x04, 0x12,
+0x94, 0x1A, 0x90, 0x85, 0xDE, 0xF0, 0xFB, 0x90, 0x85, 0xD7, 0xE0, 0xFF, 0xA3, 0xE0, 0xFD, 0x12,
+0x51, 0x7D, 0x22, 0x90, 0x86, 0x6D, 0xE0, 0xFF, 0x90, 0x85, 0xCE, 0xE0, 0x22, 0x90, 0x85, 0xC5,
+0xE0, 0x64, 0x01, 0x70, 0x22, 0x12, 0x8F, 0xDB, 0x60, 0x10, 0xE4, 0xFD, 0x7F, 0x0C, 0x12, 0x8D,
+0x32, 0xE4, 0xFD, 0xFF, 0x12, 0x90, 0xE6, 0x02, 0x6B, 0x98, 0x90, 0x85, 0xC8, 0xE0, 0x70, 0x07,
+0x7D, 0x01, 0x7F, 0x04, 0x12, 0x8D, 0x32, 0x22, 0x90, 0x93, 0x21, 0xE0, 0x30, 0xE0, 0x34, 0xC4,
+0x13, 0x54, 0x07, 0x20, 0xE0, 0x2D, 0x90, 0x93, 0xBF, 0xE0, 0x04, 0xF0, 0xE0, 0xD3, 0x94, 0xC8,
+0x40, 0x21, 0x90, 0x93, 0x21, 0xE0, 0x44, 0x20, 0xF0, 0xE4, 0x90, 0x93, 0xBF, 0xF0, 0x90, 0x93,
+0x21, 0xE0, 0x13, 0x30, 0xE0, 0x0D, 0x90, 0x85, 0xC1, 0xE0, 0x44, 0x01, 0xF0, 0x90, 0x85, 0xD0,
+0x74, 0xD0, 0xF0, 0x22, 0x90, 0x92, 0xF8, 0xEF, 0xF0, 0x90, 0x84, 0xC5, 0xE0, 0xB4, 0x02, 0x12,
+0x90, 0x92, 0xF8, 0xE0, 0xFF, 0x64, 0x01, 0x60, 0x25, 0x90, 0x01, 0x4D, 0xE0, 0x64, 0x80, 0xF0,
+0x80, 0x19, 0x90, 0x01, 0x00, 0x74, 0xFF, 0xF0, 0x7F, 0x64, 0x7E, 0x00, 0x12, 0x7C, 0x9F, 0x90,
+0x06, 0x90, 0xE0, 0x44, 0x01, 0xF0, 0x90, 0x92, 0xF8, 0xE0, 0xFF, 0x12, 0x2A, 0x87, 0x22, 0xE5,
+0x64, 0x25, 0xE0, 0x24, 0xF5, 0xF5, 0x82, 0xE4, 0x34, 0x82, 0xF5, 0x83, 0xE4, 0x93, 0xFF, 0x74,
+0x01, 0x93, 0x90, 0x92, 0x5F, 0xCF, 0xF0, 0xA3, 0xEF, 0xF0, 0x90, 0x92, 0x5D, 0x22, 0xE0, 0xFE,
+0xA3, 0xE0, 0xFF, 0xC3, 0x74, 0xFF, 0x9F, 0xFF, 0x74, 0xFF, 0x9E, 0xFE, 0xE5, 0x62, 0x25, 0xE0,
+0x22, 0xE0, 0xFF, 0x90, 0x92, 0x63, 0xE4, 0xF0, 0xA3, 0xEF, 0xF0, 0x22, 0xE0, 0xFE, 0xA3, 0xE0,
+0xFF, 0xED, 0x2F, 0xFF, 0xEC, 0x3E, 0xFE, 0x22, 0x90, 0x92, 0x4B, 0x12, 0x86, 0xFA, 0x90, 0x00,
+0x02, 0x12, 0x04, 0x18, 0xFF, 0x22, 0xE0, 0x54, 0x03, 0x90, 0x91, 0x0B, 0xF0, 0x7B, 0x01, 0xAF,
+0x78, 0x02, 0x27, 0x3D, 0xE5, 0x64, 0x25, 0xE0, 0x24, 0xF5, 0xF5, 0x82, 0xE4, 0x34, 0x82, 0xF5,
+0x83, 0x22, 0x90, 0x92, 0x5F, 0xE4, 0xF0, 0xA3, 0x22, 0xE5, 0x62, 0x25, 0xE0, 0x24, 0x8C, 0xF5,
+0x82, 0xE4, 0x22, 0x90, 0x92, 0x4B, 0x12, 0x86, 0xFA, 0x02, 0x03, 0xED, 0x74, 0xBC, 0x25, 0x62,
+0xF5, 0x82, 0xE4, 0x34, 0x8F, 0x22, 0x90, 0x92, 0x52, 0xE0, 0xFE, 0xA3, 0xE0, 0x22, 0x7D, 0x05,
+0x7F, 0x01, 0x02, 0xAE, 0xF6, 0xE5, 0x68, 0xF0, 0xA3, 0xE5, 0x69, 0xF0, 0x22, 0x00, 0x8B, 0x34,
+
};
-u4Byte ArrayLength_MP_8188F_FW_AP = 17394;
+u4Byte ArrayLength_MP_8188F_FW_AP = 17584;
void
@@ -1142,31 +1154,31 @@ ODM_ReadFirmware_MP_8188F_FW_AP(
u1Byte Array_MP_8188F_FW_NIC[] = {
-0xF1, 0x88, 0x10, 0x00, 0x01, 0x00, 0x01, 0x00, 0x09, 0x22, 0x15, 0x56, 0xB4, 0x48, 0x02, 0x00,
-0xAF, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x02, 0x86, 0xAD, 0x02, 0xBD, 0x4C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x02, 0xA6, 0x3B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x02, 0xBD, 0x9E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0xF1, 0x88, 0x10, 0x00, 0x01, 0x00, 0x0D, 0x00, 0x11, 0x25, 0x17, 0x05, 0xAA, 0x5A, 0x02, 0x00,
+0x2F, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x02, 0x86, 0xAD, 0x02, 0xC9, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x02, 0xC1, 0xB8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x02, 0xC9, 0x8A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x02, 0xBD, 0x4D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xB9, 0x35, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x02, 0xBD, 0x9D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x02, 0xC9, 0x39, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xC6, 0x5A, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x02, 0xC9, 0x89, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x02, 0x87, 0xBB, 0x02, 0x88, 0xD7, 0x02, 0x80, 0x86, 0x02, 0x80, 0x89, 0x02, 0x80, 0x8C, 0x02,
-0x9D, 0x7D, 0x02, 0xB9, 0x13, 0x02, 0x80, 0x95, 0x02, 0x80, 0x98, 0x02, 0x80, 0x9B, 0x02, 0x80,
+0x02, 0x87, 0xBB, 0x02, 0x89, 0xB4, 0x02, 0x80, 0x86, 0x02, 0x80, 0x89, 0x02, 0x98, 0xC4, 0x02,
+0x9A, 0xFC, 0x02, 0xC1, 0xA2, 0x02, 0x80, 0x95, 0x02, 0x80, 0x98, 0x02, 0x80, 0x9B, 0x02, 0x80,
0x9E, 0x02, 0x80, 0xA1, 0x02, 0x80, 0xA4, 0x02, 0x80, 0xA7, 0x02, 0x80, 0xAA, 0x02, 0x80, 0xAD,
-0x02, 0x80, 0xB0, 0x02, 0x89, 0xA5, 0x02, 0x80, 0xB6, 0x02, 0x80, 0xB9, 0x02, 0xB0, 0x57, 0x02,
-0xB1, 0x34, 0x02, 0xB0, 0xB9, 0x02, 0xAF, 0x5E, 0x02, 0xA8, 0x5B, 0x02, 0xAF, 0xEE, 0x02, 0x80,
-0xCE, 0x02, 0x80, 0xD1, 0x02, 0xC5, 0xC9, 0x02, 0x80, 0xD7, 0x00, 0x00, 0x00, 0x02, 0x80, 0xDD,
-0x02, 0x80, 0xE0, 0x02, 0x80, 0xE3, 0x02, 0x80, 0xE6, 0x02, 0xC5, 0x72, 0x02, 0x80, 0xEC, 0x02,
+0x02, 0x80, 0xB0, 0x02, 0x8B, 0xD7, 0x02, 0x80, 0xB6, 0x02, 0x80, 0xB9, 0x02, 0xB8, 0x4F, 0x02,
+0xC0, 0x5C, 0x02, 0xBF, 0xE1, 0x02, 0xB8, 0xB0, 0x02, 0xAF, 0xE9, 0x02, 0xB7, 0xE0, 0x02, 0x80,
+0xCE, 0x02, 0x80, 0xD1, 0x02, 0xBF, 0x4B, 0x02, 0x80, 0xD7, 0x00, 0x00, 0x00, 0x02, 0x80, 0xDD,
+0x02, 0x80, 0xE0, 0x02, 0x80, 0xE3, 0x02, 0x80, 0xE6, 0x02, 0xD6, 0x84, 0x02, 0x80, 0xEC, 0x02,
0x80, 0xEF, 0x02, 0x80, 0xF2, 0x02, 0x80, 0xF5, 0x02, 0x80, 0xF8, 0x02, 0x80, 0xFB, 0x02, 0x80,
0xFE, 0x02, 0x81, 0x01, 0x02, 0x81, 0x04, 0x02, 0x81, 0x07, 0x02, 0x81, 0x0A, 0x02, 0x81, 0x0D,
0x02, 0x81, 0x10, 0x02, 0x81, 0x13, 0x02, 0x81, 0x16, 0x02, 0x81, 0x19, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x02, 0xB3, 0xD0, 0x02, 0xB5, 0xA0, 0x02, 0x90, 0xE9, 0x02, 0x90, 0xDE,
-0x02, 0x81, 0x40, 0x02, 0x9E, 0xDD, 0x02, 0xB7, 0x60, 0x02, 0x81, 0x49, 0x02, 0x81, 0x4C, 0x02,
-0x81, 0x4F, 0x02, 0x81, 0x52, 0x02, 0x81, 0x55, 0x02, 0x81, 0x58, 0x02, 0x81, 0x5B, 0x02, 0x91,
-0x47, 0x02, 0x81, 0x61, 0x02, 0x81, 0x64, 0x02, 0xC4, 0x71, 0x02, 0xC5, 0x41, 0x02, 0xBC, 0x1A,
+0x00, 0x00, 0x00, 0x00, 0x02, 0xA5, 0x1C, 0x02, 0xA4, 0xA7, 0x02, 0x93, 0xCB, 0x02, 0x90, 0xDE,
+0x02, 0x81, 0x40, 0x02, 0x9C, 0x5B, 0x02, 0xD4, 0xE0, 0x02, 0x81, 0x49, 0x02, 0x81, 0x4C, 0x02,
+0x81, 0x4F, 0x02, 0x81, 0x52, 0x02, 0x81, 0x55, 0x02, 0x81, 0x58, 0x02, 0x81, 0x5B, 0x02, 0xD4,
+0x1C, 0x02, 0x81, 0x61, 0x02, 0x81, 0x64, 0x02, 0xD5, 0x60, 0x02, 0xD6, 0x3E, 0x02, 0xCB, 0xC2,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
@@ -1190,10 +1202,10 @@ u1Byte Array_MP_8188F_FW_NIC[] = {
0x20, 0x21, 0x1F, 0x16, 0x0C, 0x00, 0x20, 0x31, 0x2F, 0x20, 0x14, 0x00, 0x30, 0x31, 0x2F, 0x18,
0x10, 0x00, 0x30, 0x31, 0x2C, 0x18, 0x0C, 0x00, 0x30, 0x31, 0x2A, 0x14, 0x0C, 0x00, 0x30, 0x31,
0x28, 0x14, 0x00, 0x00, 0x30, 0x31, 0x24, 0x14, 0x00, 0x00, 0x30, 0x31, 0x1E, 0x14, 0x00, 0x00,
-0x30, 0x04, 0x04, 0x04, 0x05, 0x08, 0x08, 0x09, 0x09, 0x0C, 0x0E, 0x10, 0x12, 0x06, 0x0B, 0x0D,
-0x0E, 0x0F, 0x11, 0x12, 0x14, 0x00, 0x04, 0x00, 0x04, 0x00, 0x08, 0x00, 0x10, 0x00, 0x23, 0x00,
-0x2D, 0x00, 0x50, 0x00, 0x91, 0x00, 0xC3, 0x01, 0x27, 0x01, 0x31, 0x01, 0x5E, 0x00, 0xC8, 0x00,
-0xF0, 0x00, 0xDC, 0x01, 0x5E, 0x01, 0x68, 0x01, 0x9A, 0x01, 0xCC, 0x01, 0xEA, 0x02, 0x02, 0x04,
+0x30, 0x02, 0x02, 0x03, 0x04, 0x04, 0x08, 0x09, 0x09, 0x0C, 0x0E, 0x10, 0x12, 0x02, 0x09, 0x0B,
+0x0E, 0x0D, 0x0F, 0x10, 0x12, 0x00, 0x04, 0x00, 0x04, 0x00, 0x08, 0x00, 0x10, 0x00, 0x23, 0x00,
+0x2D, 0x00, 0x50, 0x00, 0x91, 0x00, 0xC3, 0x01, 0x27, 0x01, 0x31, 0x01, 0x5E, 0x00, 0x8C, 0x00,
+0xC8, 0x00, 0xDC, 0x01, 0x5E, 0x01, 0x68, 0x01, 0x9A, 0x01, 0xCC, 0x01, 0xEA, 0x02, 0x02, 0x04,
0x08, 0x0C, 0x12, 0x18, 0x24, 0x30, 0x48, 0x60, 0x6C, 0x14, 0x28, 0x32, 0x50, 0x78, 0xA0, 0xC8,
0xE6, 0x01, 0x01, 0x01, 0x02, 0x01, 0x01, 0x02, 0x02, 0x03, 0x03, 0x04, 0x04, 0x02, 0x04, 0x06,
0x07, 0x07, 0x08, 0x08, 0x08, 0x01, 0x01, 0x01, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02,
@@ -1266,1050 +1278,1337 @@ u1Byte Array_MP_8188F_FW_NIC[] = {
0xE0, 0xFB, 0xA3, 0xE0, 0xFA, 0xA3, 0xE0, 0xF9, 0x22, 0xEB, 0xF0, 0xA3, 0xEA, 0xF0, 0xA3, 0xE9,
0xF0, 0x22, 0xD0, 0x83, 0xD0, 0x82, 0xF8, 0xE4, 0x93, 0x70, 0x12, 0x74, 0x01, 0x93, 0x70, 0x0D,
0xA3, 0xA3, 0x93, 0xF8, 0x74, 0x01, 0x93, 0xF5, 0x82, 0x88, 0x83, 0xE4, 0x73, 0x74, 0x02, 0x93,
-0x68, 0x60, 0xEF, 0xA3, 0xA3, 0xA3, 0x80, 0xDF, 0x41, 0x93, 0x17, 0x00, 0x41, 0x93, 0x18, 0x00,
-0x41, 0x93, 0x1D, 0x00, 0x00, 0x9A, 0x47, 0xB1, 0x9B, 0xB8, 0xAE, 0x90, 0x93, 0x1B, 0xEF, 0xF0,
-0x7F, 0x02, 0xD1, 0x27, 0x90, 0x84, 0xC1, 0xE0, 0xFF, 0x90, 0x93, 0x1B, 0xE0, 0xFE, 0xEF, 0x4E,
+0x68, 0x60, 0xEF, 0xA3, 0xA3, 0xA3, 0x80, 0xDF, 0x41, 0x94, 0x0C, 0x00, 0x41, 0x94, 0x0D, 0x00,
+0x41, 0x94, 0x14, 0x00, 0x00, 0xAA, 0x4B, 0xC8, 0x58, 0xBD, 0x7A, 0x90, 0x94, 0x12, 0xEF, 0xF0,
+0x7F, 0x02, 0xD1, 0x27, 0x90, 0x84, 0xC1, 0xE0, 0xFF, 0x90, 0x94, 0x12, 0xE0, 0xFE, 0xEF, 0x4E,
0x90, 0x84, 0xC1, 0xF0, 0x22, 0x90, 0x02, 0x09, 0xE0, 0xF5, 0x5B, 0x12, 0x02, 0xF6, 0x25, 0x5B,
-0x90, 0x84, 0xC6, 0x12, 0x8D, 0x61, 0x25, 0x5B, 0x90, 0x84, 0xC7, 0x12, 0x8C, 0x6E, 0x25, 0x5B,
-0x90, 0x84, 0xC8, 0x12, 0x8F, 0xD8, 0x25, 0x5B, 0x90, 0x84, 0xC9, 0xF0, 0x90, 0x00, 0x04, 0x12,
-0x03, 0x0F, 0x25, 0x5B, 0x90, 0x84, 0xCA, 0xF0, 0x90, 0x00, 0x05, 0x12, 0x03, 0x0F, 0x25, 0x5B,
-0x90, 0x84, 0xCB, 0xF0, 0x11, 0x1D, 0x25, 0x5B, 0x90, 0x84, 0xCC, 0xF0, 0x22, 0x90, 0x00, 0x06,
-0x02, 0x03, 0x0F, 0x12, 0xC8, 0x5E, 0xFF, 0x54, 0x7F, 0x90, 0x85, 0xC5, 0xF0, 0xEF, 0xB1, 0x59,
-0xA3, 0xB1, 0x61, 0xFF, 0x54, 0xF0, 0xC4, 0x54, 0x0F, 0xFE, 0x90, 0x85, 0xC3, 0xE0, 0x54, 0xF0,
-0x4E, 0xF1, 0xD8, 0x54, 0x01, 0x25, 0xE0, 0xFE, 0x90, 0x85, 0xC1, 0xE0, 0x54, 0xFD, 0x4E, 0xF0,
-0xEF, 0x54, 0x0F, 0xC4, 0x54, 0xF0, 0xFF, 0x12, 0x9F, 0xE4, 0x91, 0x6D, 0x90, 0x85, 0xC4, 0xF0,
-0x11, 0x1D, 0x30, 0xE0, 0x4D, 0xC3, 0x13, 0x54, 0x07, 0xFF, 0xC3, 0x94, 0x04, 0x90, 0x85, 0xD8,
-0x50, 0x04, 0xEF, 0xF0, 0x80, 0x25, 0x74, 0x03, 0xF0, 0x31, 0x9F, 0xE9, 0x24, 0x06, 0xF1, 0xED,
-0xFF, 0x74, 0x03, 0x24, 0xFD, 0xFE, 0xEF, 0xC4, 0x54, 0x0F, 0xFD, 0xEF, 0x54, 0x0F, 0xFF, 0xED,
-0x2E, 0x54, 0x0F, 0xFE, 0xC4, 0x54, 0xF0, 0x4F, 0x12, 0x03, 0x3C, 0x31, 0x9F, 0x11, 0x1D, 0xC4,
-0x54, 0x0F, 0xFF, 0xC3, 0x94, 0x04, 0x90, 0x85, 0xCD, 0x50, 0x05, 0x74, 0x04, 0xF0, 0x80, 0x02,
-0xEF, 0xF0, 0x31, 0x9F, 0x90, 0x00, 0x04, 0x12, 0x03, 0x0F, 0xFD, 0x7F, 0x02, 0x12, 0x57, 0x82,
-0x31, 0x9F, 0x12, 0x71, 0xCB, 0x12, 0xBA, 0x2E, 0xF0, 0x90, 0x85, 0xC5, 0x12, 0xC8, 0x2A, 0x12,
-0x9F, 0xE3, 0x90, 0x01, 0xBE, 0xF0, 0x22, 0x90, 0x92, 0x04, 0x12, 0x87, 0x79, 0x90, 0x92, 0x03,
-0xEF, 0xF0, 0x12, 0x87, 0x82, 0x89, 0x28, 0x00, 0x89, 0x2D, 0x01, 0x89, 0x32, 0x03, 0x89, 0x37,
-0x04, 0x89, 0x3C, 0x12, 0x89, 0x41, 0x14, 0x89, 0x46, 0x20, 0x89, 0x4A, 0x24, 0x89, 0x4F, 0x25,
-0x89, 0x54, 0x27, 0x89, 0x59, 0x40, 0x89, 0x5D, 0x42, 0x89, 0x92, 0x47, 0x89, 0x92, 0x49, 0x89,
-0x66, 0x80, 0x89, 0x62, 0x81, 0x89, 0x6A, 0x82, 0x89, 0x6F, 0x83, 0x89, 0x74, 0x84, 0x89, 0x79,
-0x88, 0x89, 0x7E, 0xC3, 0x00, 0x00, 0x89, 0x83, 0x31, 0x93, 0x02, 0x87, 0xD5, 0x31, 0x93, 0x02,
-0x90, 0x03, 0x31, 0x93, 0x02, 0x78, 0x94, 0x31, 0x93, 0x02, 0x6B, 0x03, 0x31, 0x93, 0x02, 0x97,
-0xFD, 0x31, 0x93, 0x02, 0xA0, 0x12, 0x31, 0x93, 0x01, 0x23, 0x31, 0x93, 0x02, 0x9C, 0x13, 0x31,
-0x93, 0x02, 0xA0, 0x21, 0x31, 0x93, 0x02, 0xA0, 0x29, 0x31, 0x93, 0x80, 0x48, 0x31, 0x93, 0x02,
-0x4E, 0x29, 0x31, 0x93, 0xA1, 0x75, 0x31, 0x93, 0x81, 0x75, 0x31, 0x93, 0x02, 0x7A, 0xFE, 0x31,
-0x93, 0x02, 0x6F, 0x63, 0x31, 0x93, 0x02, 0x6F, 0xA4, 0x31, 0x93, 0x02, 0x7B, 0xD0, 0x31, 0x93,
-0x02, 0x9A, 0x34, 0x90, 0x01, 0xC0, 0xE0, 0x44, 0x01, 0xF0, 0x90, 0x92, 0x03, 0xE0, 0x90, 0x01,
-0xC2, 0xF0, 0x22, 0x90, 0x92, 0x04, 0x02, 0x87, 0x70, 0x24, 0x03, 0xFF, 0xE4, 0x33, 0xFE, 0x90,
-0x92, 0x07, 0x02, 0x87, 0x70, 0x90, 0x92, 0x07, 0x12, 0x87, 0x79, 0x31, 0x9F, 0x12, 0x02, 0xF6,
-0x54, 0x7F, 0xFD, 0xB1, 0x62, 0xFE, 0x54, 0x1F, 0x90, 0x92, 0x0B, 0xF0, 0xEE, 0x54, 0x80, 0xB1,
-0x59, 0x90, 0x92, 0x0A, 0x91, 0x6E, 0xFE, 0x54, 0x03, 0xFC, 0xEE, 0x54, 0x30, 0xC4, 0x54, 0x0F,
-0x90, 0x92, 0x0D, 0x91, 0x6E, 0xFE, 0x54, 0x40, 0xC4, 0x13, 0x13, 0x54, 0x03, 0x90, 0x92, 0x0C,
-0xF0, 0xEE, 0x54, 0x80, 0xB1, 0x59, 0xFF, 0x91, 0x6F, 0xFB, 0x54, 0x08, 0x13, 0x13, 0x13, 0x54,
-0x1F, 0x90, 0x92, 0x0F, 0xF0, 0xFA, 0xEB, 0x54, 0x04, 0x13, 0x13, 0x54, 0x3F, 0xA3, 0xF0, 0xEF,
-0x54, 0x01, 0xC4, 0x33, 0x33, 0x33, 0x54, 0x80, 0x71, 0x06, 0x54, 0x7F, 0x4F, 0xF0, 0x90, 0x92,
-0x0C, 0xE0, 0x54, 0x01, 0xC4, 0x33, 0x33, 0x54, 0xC0, 0x71, 0x06, 0x54, 0xBF, 0x4F, 0xF0, 0xEA,
-0x60, 0x02, 0x61, 0x05, 0x90, 0x92, 0x0B, 0xE0, 0x54, 0x1F, 0xFF, 0x75, 0xF0, 0x12, 0xED, 0xB1,
-0x6D, 0x54, 0xE0, 0x4F, 0xF0, 0xEC, 0x54, 0x03, 0x71, 0x06, 0x54, 0xFC, 0x4F, 0xF0, 0xEC, 0x54,
-0x03, 0x25, 0xE0, 0x25, 0xE0, 0x71, 0x06, 0x54, 0xF3, 0x4F, 0xF0, 0x90, 0x92, 0x0A, 0xE0, 0x54,
-0x01, 0xC4, 0x33, 0x54, 0xE0, 0xFF, 0x75, 0xF0, 0x12, 0xED, 0xB1, 0x6D, 0x54, 0xDF, 0x4F, 0xF0,
-0x90, 0x92, 0x0D, 0xE0, 0x54, 0x03, 0xC4, 0x54, 0xF0, 0x71, 0x06, 0x54, 0xCF, 0x4F, 0x12, 0xC8,
-0x3F, 0xE0, 0x54, 0xFB, 0x12, 0xC8, 0x3F, 0xC0, 0x83, 0xC0, 0x82, 0xE0, 0xFF, 0x90, 0x92, 0x10,
-0xE0, 0x25, 0xE0, 0x25, 0xE0, 0xFE, 0xEF, 0x4E, 0xD0, 0x82, 0xD0, 0x83, 0xF0, 0x90, 0x92, 0x85,
-0xE0, 0x60, 0x2F, 0x31, 0x9F, 0xE9, 0x24, 0x03, 0xF1, 0xED, 0x54, 0x1F, 0x12, 0x03, 0x3C, 0x90,
-0x92, 0x0E, 0x74, 0x01, 0xF0, 0x90, 0x92, 0x0E, 0xE0, 0xFF, 0xC3, 0x94, 0x04, 0x50, 0x13, 0xEF,
-0x31, 0x99, 0x8F, 0x82, 0x8E, 0x83, 0xE4, 0x12, 0x03, 0x4E, 0x90, 0x92, 0x0E, 0xE0, 0x04, 0xF0,
-0x80, 0xE3, 0x90, 0x92, 0x83, 0xE0, 0x54, 0x07, 0xFF, 0xBF, 0x05, 0x0A, 0xEC, 0xB4, 0x01, 0x06,
-0x90, 0x92, 0x88, 0x74, 0x01, 0xF0, 0xE4, 0x90, 0x92, 0x0E, 0xF0, 0x90, 0x92, 0x0E, 0xE0, 0xFC,
-0x31, 0x99, 0x8F, 0x82, 0x8E, 0x83, 0x12, 0x03, 0x0F, 0xFF, 0xED, 0x12, 0xAF, 0xE0, 0xE5, 0x82,
-0x2C, 0x12, 0xA8, 0x53, 0xEF, 0xF0, 0x90, 0x92, 0x0E, 0xE0, 0x04, 0xF0, 0xE0, 0xB4, 0x04, 0xDB,
-0xAF, 0x05, 0x12, 0x17, 0x8E, 0x22, 0xFF, 0x75, 0xF0, 0x12, 0xED, 0x90, 0x89, 0x3F, 0x12, 0x05,
-0x28, 0xE0, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0xF1, 0x6B, 0x20, 0xE6, 0x02, 0x81,
-0x34, 0x90, 0x00, 0x8C, 0xE0, 0x90, 0x93, 0x0E, 0xF0, 0x7F, 0x8D, 0x12, 0x7B, 0x51, 0x90, 0x93,
-0x0F, 0xEF, 0xF0, 0x90, 0x00, 0x8E, 0xE0, 0x90, 0x93, 0x10, 0xF0, 0x90, 0x93, 0x0F, 0xE0, 0x24,
-0xFC, 0x60, 0x0F, 0x24, 0x03, 0x60, 0x02, 0x81, 0x2D, 0x90, 0x93, 0x0E, 0xE0, 0xFF, 0xF1, 0x72,
-0x81, 0x2D, 0x90, 0x93, 0x0E, 0xE0, 0x24, 0xDC, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83, 0xE0,
-0xFB, 0xE4, 0xFD, 0xFF, 0x91, 0x66, 0x75, 0xF0, 0x12, 0x71, 0x0B, 0x13, 0x13, 0x54, 0x03, 0xFB,
-0x0D, 0xE4, 0xFF, 0x91, 0x66, 0x75, 0xF0, 0x12, 0x71, 0x0B, 0xB1, 0x59, 0xFB, 0x0D, 0xE4, 0xFF,
-0x91, 0x66, 0x75, 0xF0, 0x12, 0x71, 0x0B, 0xC4, 0x54, 0x03, 0xFB, 0x0D, 0xE4, 0xFF, 0x91, 0x66,
-0x12, 0xAF, 0xD5, 0xFB, 0xE4, 0xFD, 0x0F, 0x91, 0x66, 0x75, 0xF0, 0x12, 0x90, 0x89, 0x3D, 0x12,
-0x05, 0x28, 0x91, 0x63, 0x75, 0xF0, 0x12, 0xB1, 0x6D, 0xC4, 0x13, 0x54, 0x01, 0xFB, 0x0D, 0x7F,
-0x01, 0x91, 0x66, 0x75, 0xF0, 0x12, 0xB1, 0x6D, 0x54, 0x1F, 0x91, 0x64, 0x12, 0xAF, 0xE0, 0xE0,
-0xFB, 0xE4, 0xFD, 0x0F, 0x91, 0x66, 0x75, 0xF0, 0x08, 0xA4, 0x24, 0x01, 0xF5, 0x82, 0xE4, 0x34,
-0x82, 0x91, 0x61, 0x75, 0xF0, 0x08, 0xA4, 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, 0x82, 0x91, 0x61,
-0x75, 0xF0, 0x08, 0xA4, 0x24, 0x03, 0xF5, 0x82, 0xE4, 0x34, 0x82, 0x91, 0x61, 0x75, 0xF0, 0x08,
-0xA4, 0x24, 0x04, 0xF5, 0x82, 0xE4, 0x34, 0x82, 0xF5, 0x83, 0xE0, 0xFB, 0xE4, 0xFD, 0x0F, 0x91,
-0x66, 0x75, 0xF0, 0x08, 0xA4, 0x24, 0x05, 0xF5, 0x82, 0xE4, 0x34, 0x82, 0x91, 0x61, 0x75, 0xF0,
-0x08, 0xA4, 0x24, 0x06, 0xF5, 0x82, 0xE4, 0x34, 0x82, 0x91, 0x61, 0x75, 0xF0, 0x08, 0xA4, 0x24,
-0x07, 0xF5, 0x82, 0xE4, 0x34, 0x82, 0xF5, 0x83, 0xE0, 0xFB, 0x0D, 0x91, 0x39, 0xF1, 0x6B, 0x30,
-0xE0, 0x02, 0xF1, 0xE6, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xEF, 0x70, 0x04, 0x74, 0xF0, 0x80, 0x16,
-0xEF, 0xB4, 0x01, 0x04, 0x74, 0xF4, 0x80, 0x0E, 0xEF, 0xB4, 0x02, 0x04, 0x74, 0xF8, 0x80, 0x06,
-0xEF, 0xB4, 0x03, 0x0C, 0x74, 0xFC, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x02, 0xF5, 0x83, 0xEB, 0xF0,
-0x22, 0xF5, 0x83, 0xE0, 0xFB, 0x0D, 0x91, 0x39, 0x90, 0x93, 0x0E, 0xE0, 0x22, 0x4F, 0xF0, 0x90,
-0x00, 0x02, 0x02, 0x03, 0x0F, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x12, 0xC8, 0x5E, 0x20,
-0xE0, 0x05, 0x12, 0xB6, 0x3E, 0xA1, 0x50, 0x31, 0x9F, 0x12, 0xC8, 0x37, 0x90, 0x86, 0x75, 0xD1,
-0x00, 0x54, 0x04, 0xFD, 0xEF, 0x54, 0xFB, 0xF1, 0x47, 0x12, 0xC8, 0x79, 0xD1, 0x0E, 0x54, 0x10,
-0xFD, 0xEF, 0x54, 0xEF, 0xF1, 0x47, 0x12, 0xC8, 0x81, 0xD1, 0x0E, 0x54, 0x40, 0xFD, 0xEF, 0x54,
-0xBF, 0xF1, 0x47, 0x12, 0xC8, 0x89, 0xB1, 0x61, 0x54, 0x80, 0xFF, 0x90, 0x86, 0x76, 0xE0, 0x54,
-0x7F, 0x4F, 0xF0, 0x12, 0xC8, 0x91, 0x30, 0xE0, 0x07, 0x90, 0x06, 0x90, 0xE0, 0x44, 0x04, 0xF0,
-0x31, 0x9F, 0x12, 0x02, 0xF6, 0x13, 0x13, 0x13, 0x54, 0x1F, 0x30, 0xE0, 0x07, 0x90, 0x06, 0x90,
-0xE0, 0x44, 0x08, 0xF0, 0x90, 0x84, 0xC5, 0xE0, 0xB4, 0x02, 0x05, 0xB1, 0x55, 0x20, 0xE0, 0x3D,
-0xB1, 0x62, 0x54, 0x7F, 0xFF, 0x90, 0x86, 0x76, 0xE0, 0x54, 0x80, 0x91, 0x6D, 0x90, 0x86, 0x77,
-0xF1, 0xD8, 0xFF, 0x54, 0x01, 0xFE, 0x90, 0x86, 0x78, 0xF1, 0xFB, 0x54, 0xFE, 0xFF, 0xEE, 0x54,
-0x01, 0x4F, 0xF0, 0x90, 0x86, 0x76, 0xE0, 0x54, 0x7F, 0xFF, 0x90, 0x86, 0x75, 0xE0, 0xFE, 0xC4,
-0x13, 0x54, 0x07, 0x7D, 0x00, 0x20, 0xE0, 0x02, 0x7D, 0x01, 0x12, 0x54, 0x9F, 0x90, 0x84, 0xC5,
-0xE0, 0xB4, 0x01, 0x07, 0x90, 0xFE, 0x10, 0xE0, 0x44, 0x04, 0xF0, 0x90, 0x87, 0x4A, 0x74, 0x05,
-0xF0, 0x7E, 0x00, 0x7F, 0x08, 0x7D, 0x00, 0x7B, 0x01, 0x7A, 0x87, 0x79, 0x95, 0x12, 0x06, 0xDE,
-0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90, 0x86, 0x76, 0xE0, 0xC4, 0x13, 0x13, 0x13, 0x54, 0x01, 0x22,
-0x4F, 0xF0, 0x90, 0x00, 0x01, 0x02, 0x03, 0x0F, 0x75, 0xF0, 0x12, 0xE5, 0x6E, 0x90, 0x89, 0x3E,
-0x12, 0x05, 0x28, 0xE0, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x12, 0xC8, 0x37, 0x90,
-0x86, 0x72, 0xD1, 0x00, 0x54, 0x04, 0xFD, 0xEF, 0x54, 0xFB, 0xF1, 0x3F, 0x12, 0xC8, 0x79, 0xD1,
-0x0E, 0x54, 0x10, 0xFD, 0xEF, 0x54, 0xEF, 0xF1, 0x3F, 0x12, 0xC8, 0x81, 0xD1, 0x0E, 0x54, 0x40,
-0xFD, 0xEF, 0x54, 0xBF, 0xF1, 0x3F, 0x12, 0xC8, 0x89, 0x91, 0x6E, 0x54, 0x01, 0xFF, 0x90, 0x86,
-0x74, 0xE0, 0x54, 0xFE, 0xB1, 0x60, 0xFF, 0x54, 0x01, 0xFE, 0x90, 0x86, 0x73, 0xF1, 0xFB, 0x54,
-0x04, 0xFF, 0xEE, 0x54, 0xFB, 0x4F, 0xF0, 0x90, 0x86, 0x72, 0xE0, 0xC3, 0x13, 0x54, 0x01, 0xFF,
-0x12, 0x7C, 0x72, 0xF1, 0xDF, 0x54, 0x01, 0xFF, 0x12, 0x7C, 0x7E, 0xF1, 0xDF, 0x13, 0x54, 0x01,
-0xFF, 0x12, 0x66, 0xDA, 0x90, 0x86, 0x72, 0xE0, 0xC4, 0x13, 0x13, 0x54, 0x01, 0xFF, 0x12, 0xC1,
-0x61, 0x90, 0x86, 0x72, 0xE0, 0x54, 0x01, 0xFF, 0x12, 0xB5, 0xD4, 0xD0, 0xD0, 0x92, 0xAF, 0x22,
-0xE0, 0x54, 0xFE, 0x4E, 0xFE, 0xF0, 0xEF, 0x54, 0x02, 0xFF, 0xEE, 0x54, 0xFD, 0x4F, 0xFF, 0xF0,
-0x12, 0x02, 0xF6, 0xFE, 0x22, 0x8F, 0x6E, 0x8D, 0x6F, 0xEF, 0xF1, 0x5E, 0xE0, 0xF5, 0x70, 0x54,
-0x7F, 0xF5, 0x71, 0xE5, 0x70, 0x54, 0x80, 0xF5, 0x73, 0x75, 0xF0, 0x12, 0xEF, 0x12, 0xAF, 0xD8,
-0xF5, 0x75, 0x75, 0xF0, 0x12, 0xEF, 0x71, 0x0B, 0xC4, 0x54, 0x03, 0xF5, 0x76, 0xF1, 0xCC, 0x74,
-0xFF, 0xF0, 0x12, 0xAA, 0xF2, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0xE5, 0x70, 0x45, 0x73, 0xFF, 0x12,
-0xAA, 0xE6, 0xEF, 0xF0, 0xE5, 0x6E, 0x12, 0x91, 0xDB, 0xE0, 0x54, 0x03, 0xF5, 0x74, 0x74, 0x4C,
-0x25, 0x6E, 0x12, 0xAF, 0xC4, 0xE5, 0x74, 0xF0, 0xE5, 0x71, 0x65, 0x75, 0x70, 0x40, 0xB1, 0x68,
-0xC4, 0x13, 0x54, 0x07, 0x30, 0xE0, 0x0C, 0xE5, 0x73, 0x70, 0x08, 0xE5, 0x71, 0x44, 0x80, 0xF5,
-0x70, 0xE1, 0x12, 0x12, 0xAA, 0xF2, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0x12, 0xAB, 0x06, 0x12, 0xC8,
-0x70, 0xF1, 0xC1, 0xE5, 0x6E, 0xF0, 0xE4, 0x90, 0x92, 0x43, 0x12, 0x96, 0x40, 0x7B, 0x01, 0xFA,
-0x7D, 0x02, 0x7F, 0x04, 0x12, 0x96, 0x88, 0x7D, 0x07, 0xAF, 0x6E, 0x02, 0xBE, 0x4C, 0xE5, 0x71,
-0xC3, 0x95, 0x75, 0x50, 0x55, 0xAB, 0x6E, 0xAD, 0x75, 0xAF, 0x71, 0x12, 0x72, 0xEA, 0x8F, 0x72,
-0x85, 0x72, 0x70, 0xB1, 0x68, 0xC4, 0x13, 0x54, 0x01, 0xFF, 0x90, 0x92, 0x43, 0xF1, 0xC0, 0xE5,
-0x72, 0xF0, 0xA3, 0xE4, 0xF0, 0xA3, 0xE5, 0x71, 0xF0, 0xE5, 0x73, 0xB1, 0x59, 0x12, 0x97, 0xD3,
-0xE4, 0xFB, 0xFA, 0xF1, 0xF4, 0xE5, 0x71, 0xC3, 0x94, 0x0C, 0x40, 0x26, 0xB1, 0x68, 0xC4, 0x13,
-0x54, 0x07, 0x30, 0xE0, 0x1D, 0xE5, 0x6F, 0x60, 0x19, 0xE5, 0x73, 0x70, 0x15, 0xE5, 0x71, 0x44,
-0x80, 0xF5, 0x70, 0xF1, 0xCC, 0xE5, 0x72, 0xF0, 0x80, 0x08, 0x12, 0xAA, 0xE6, 0xE5, 0x75, 0xF0,
-0xF5, 0x70, 0xF1, 0xC5, 0xE5, 0x70, 0xF0, 0xF1, 0xCC, 0xE0, 0xFF, 0x12, 0xC8, 0x57, 0xEF, 0xF0,
-0xA3, 0xE4, 0xF0, 0xA3, 0xE5, 0x74, 0x12, 0xAF, 0xBC, 0xF0, 0x7B, 0x01, 0x7A, 0x00, 0xF1, 0xF4,
-0x90, 0x91, 0x0B, 0xE5, 0x74, 0xF0, 0xAB, 0x6F, 0xAD, 0x70, 0xAF, 0x6E, 0x02, 0x27, 0x3D, 0x4D,
-0xFF, 0x90, 0x86, 0x72, 0xF0, 0xEE, 0x22, 0x4D, 0xFF, 0x90, 0x86, 0x75, 0xF0, 0xEE, 0x22, 0x74,
-0xBC, 0x25, 0x78, 0xF5, 0x82, 0xE4, 0x34, 0x90, 0xF5, 0x83, 0xE4, 0xF0, 0xE5, 0x78, 0xC4, 0x54,
-0xF0, 0x24, 0x00, 0xF5, 0x82, 0xE4, 0x34, 0x81, 0xF5, 0x83, 0x22, 0x7F, 0x8F, 0x12, 0x7B, 0x51,
-0xEF, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x93, 0x19, 0xEF, 0xF0, 0xF1, 0x6B,
-0x30, 0xE6, 0x38, 0x7F, 0x8D, 0x12, 0x7B, 0x51, 0xEF, 0x64, 0x01, 0x70, 0x2E, 0x90, 0x93, 0x1A,
-0xF0, 0x90, 0x93, 0x1A, 0xE0, 0xFD, 0x90, 0x93, 0x19, 0xE0, 0xF1, 0x5E, 0xE5, 0x82, 0x2D, 0x12,
-0xA8, 0x53, 0xE0, 0xFB, 0xE4, 0xFF, 0x91, 0x39, 0x90, 0x93, 0x1A, 0xE0, 0x04, 0xF0, 0xE0, 0xC3,
-0x94, 0x10, 0x40, 0xDD, 0xF1, 0x6B, 0x30, 0xE0, 0x02, 0xF1, 0xE6, 0xD0, 0xD0, 0x92, 0xAF, 0x22,
-0xE4, 0xF0, 0xA3, 0xEF, 0xF0, 0x90, 0x92, 0x3F, 0xE4, 0xF0, 0xA3, 0x22, 0x74, 0xCC, 0x25, 0x6E,
-0xF5, 0x82, 0xE4, 0x34, 0x92, 0xF5, 0x83, 0x22, 0xF0, 0x90, 0x00, 0x03, 0x02, 0x03, 0x0F, 0x90,
-0x86, 0x72, 0xE0, 0x13, 0x13, 0x22, 0xE4, 0xFD, 0x7F, 0x8D, 0x02, 0x7B, 0x3E, 0xF9, 0xE4, 0x3A,
-0xFA, 0x02, 0x02, 0xF6, 0x7D, 0x05, 0x7F, 0x04, 0x02, 0x96, 0x88, 0xE0, 0x54, 0xFE, 0x4E, 0xFE,
-0xF0, 0xEF, 0x22, 0x8B, 0x5B, 0x8A, 0x5C, 0x89, 0x5D, 0x90, 0x92, 0x7F, 0xE0, 0x70, 0x0C, 0x12,
-0xC8, 0x91, 0x30, 0xE0, 0x06, 0x90, 0x92, 0x85, 0x74, 0x01, 0xF0, 0x90, 0x92, 0x81, 0xE0, 0x70,
-0x0F, 0x31, 0xC4, 0xC4, 0x54, 0x0F, 0xFF, 0xBF, 0x05, 0x06, 0x90, 0x92, 0x86, 0x74, 0x01, 0xF0,
-0xAB, 0x5B, 0xAA, 0x5C, 0xA9, 0x5D, 0x12, 0x8D, 0x62, 0xFF, 0xF5, 0x5F, 0x12, 0x02, 0xF6, 0xFE,
-0xC3, 0x13, 0x30, 0xE0, 0x07, 0x12, 0x8C, 0x6F, 0xF5, 0x60, 0x80, 0x02, 0x8F, 0x60, 0x85, 0x5F,
-0x5E, 0xE5, 0x5E, 0xD3, 0x95, 0x60, 0x50, 0x28, 0x31, 0xC4, 0x54, 0x01, 0xFD, 0xAF, 0x5E, 0x12,
-0x6E, 0x5F, 0xAF, 0x5E, 0x12, 0x77, 0x39, 0xEF, 0xAF, 0x5E, 0x70, 0x04, 0x11, 0x9B, 0x80, 0x02,
-0xF1, 0xE9, 0x90, 0x92, 0x86, 0xE0, 0x60, 0x04, 0xAF, 0x5E, 0x11, 0x9B, 0x05, 0x5E, 0x80, 0xD1,
-0xE5, 0x5F, 0x70, 0x16, 0xFF, 0x12, 0x77, 0x39, 0xEF, 0x70, 0x0F, 0x12, 0xB3, 0xD0, 0x12, 0x79,
-0x61, 0x12, 0xC8, 0xA9, 0x54, 0xBF, 0xF0, 0x54, 0x7F, 0xF0, 0x22, 0x7D, 0x01, 0xD3, 0x10, 0xAF,
-0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x92, 0x07, 0xEF, 0xF0, 0xA3, 0xED, 0xF0, 0x7D, 0x44, 0x7F, 0x6F,
-0x11, 0xDE, 0x11, 0xE9, 0x90, 0x92, 0x08, 0xE0, 0x90, 0x92, 0x07, 0xB4, 0x01, 0x09, 0xE0, 0x31,
-0xDB, 0xE0, 0x44, 0x04, 0xF0, 0x80, 0x07, 0xE0, 0x31, 0xDB, 0xE0, 0x54, 0xFB, 0xF0, 0xE4, 0xFD,
-0xFF, 0x11, 0xDE, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x12, 0xB3, 0xD0, 0xE4, 0xFD, 0xFF, 0x90, 0x05,
-0x22, 0xEF, 0xF0, 0x90, 0x92, 0x76, 0xED, 0xF0, 0x22, 0xE4, 0x90, 0x93, 0x0B, 0xF0, 0xA3, 0xF0,
-0x90, 0x05, 0x22, 0xE0, 0x90, 0x93, 0x0D, 0xF0, 0x7D, 0x47, 0x7F, 0xFF, 0x11, 0xDE, 0x90, 0x05,
-0xF8, 0xE0, 0x70, 0x13, 0xA3, 0xE0, 0x70, 0x0F, 0xA3, 0xE0, 0x70, 0x0B, 0xA3, 0xE0, 0x70, 0x07,
-0x31, 0xBC, 0x11, 0xDE, 0x7F, 0x01, 0x22, 0xD3, 0x90, 0x93, 0x0C, 0xE0, 0x94, 0xE8, 0x90, 0x93,
-0x0B, 0xE0, 0x94, 0x03, 0x40, 0x0E, 0x90, 0x01, 0xC0, 0xE0, 0x44, 0x20, 0xF0, 0x31, 0xBC, 0x11,
-0xDE, 0x7F, 0x00, 0x22, 0x7F, 0x32, 0x7E, 0x00, 0x12, 0x7C, 0x9F, 0x90, 0x93, 0x0B, 0xE4, 0x75,
-0xF0, 0x01, 0x12, 0x07, 0x0A, 0x80, 0xB7, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x92,
-0x6B, 0xEF, 0xF0, 0xA3, 0xED, 0xF0, 0x90, 0x84, 0xC3, 0xE0, 0x04, 0xF0, 0x90, 0x04, 0x1D, 0xE0,
-0x60, 0x2D, 0x90, 0x05, 0x22, 0xE0, 0x90, 0x92, 0x6F, 0xF0, 0x7D, 0x26, 0x7F, 0xFF, 0x11, 0xDE,
-0x11, 0xE9, 0xEF, 0x64, 0x01, 0x70, 0x0B, 0x31, 0xCD, 0xFB, 0x7D, 0x01, 0x12, 0x3A, 0xC2, 0x12,
-0xC7, 0xE1, 0x90, 0x92, 0x6F, 0xE0, 0xFF, 0x7D, 0x27, 0x11, 0xDE, 0x31, 0xB4, 0x80, 0x13, 0x31,
-0xB4, 0x31, 0xCD, 0xFB, 0x90, 0x93, 0x0A, 0x74, 0x0A, 0xF0, 0x7D, 0x01, 0x12, 0xBF, 0xCB, 0x12,
-0xC7, 0xE1, 0x90, 0x04, 0x1F, 0x74, 0x20, 0xF0, 0x12, 0xC6, 0x67, 0x74, 0x01, 0xF0, 0xFF, 0xD0,
-0xD0, 0x92, 0xAF, 0x22, 0x90, 0x92, 0x6B, 0xE0, 0xFF, 0x02, 0x5C, 0xA3, 0x90, 0x93, 0x0D, 0xE0,
-0xFF, 0x7D, 0x48, 0x22, 0xAB, 0x5B, 0xAA, 0x5C, 0xA9, 0x5D, 0x02, 0x02, 0xF6, 0x90, 0x84, 0xC8,
-0xE0, 0xFF, 0x90, 0x92, 0x6C, 0xE0, 0x22, 0xE0, 0xFD, 0xE5, 0x78, 0xC4, 0x54, 0xF0, 0x24, 0x05,
-0xF5, 0x82, 0xE4, 0x34, 0x81, 0xF5, 0x83, 0x22, 0x90, 0x04, 0x85, 0xE0, 0xF5, 0x6B, 0x90, 0x92,
-0xCB, 0xE0, 0x04, 0xF0, 0xE4, 0xF5, 0x62, 0x90, 0x85, 0xBB, 0xE0, 0xFF, 0xE5, 0x62, 0xC3, 0x9F,
-0x40, 0x02, 0xC1, 0x2C, 0xE5, 0x62, 0x12, 0x8F, 0x5E, 0xE0, 0xF5, 0x6D, 0x12, 0xC8, 0x4B, 0xE0,
-0x65, 0x6D, 0x60, 0x16, 0x90, 0x8A, 0x71, 0xE5, 0x6D, 0xF0, 0xE4, 0xA3, 0xF0, 0xAB, 0x62, 0xFD,
-0xFF, 0x12, 0x52, 0xC3, 0x12, 0xC8, 0x4B, 0xE5, 0x6D, 0xF0, 0x90, 0x04, 0xA0, 0xE0, 0x64, 0x01,
-0x70, 0x4E, 0xA3, 0xE0, 0x65, 0x62, 0x70, 0x48, 0xA3, 0xE0, 0xF5, 0x63, 0xA3, 0xE0, 0x90, 0x92,
-0x38, 0xF0, 0xE5, 0x62, 0x12, 0x8F, 0x5E, 0xE0, 0x65, 0x63, 0x70, 0x02, 0xC1, 0x28, 0xE5, 0x62,
-0x12, 0x8F, 0x5E, 0xE5, 0x63, 0xF0, 0xE5, 0x62, 0x31, 0xDB, 0xE0, 0x54, 0xFC, 0xFF, 0x90, 0x92,
-0x38, 0xE0, 0x54, 0x03, 0x4F, 0xFF, 0xE5, 0x62, 0x31, 0xDB, 0xEF, 0xF0, 0x90, 0x8A, 0x71, 0xE5,
-0x63, 0xF0, 0xA3, 0x74, 0xFF, 0xF0, 0xAB, 0x62, 0xE4, 0xFD, 0xFF, 0x12, 0x52, 0xC3, 0xC1, 0x28,
-0xAF, 0x62, 0x12, 0x77, 0x39, 0x75, 0xF0, 0x12, 0xE5, 0x62, 0x12, 0x8B, 0x0B, 0x12, 0x8D, 0x59,
-0xFD, 0xF1, 0xB4, 0xED, 0xF0, 0x90, 0x92, 0x41, 0x12, 0x8F, 0xC0, 0xE5, 0x62, 0xF0, 0x12, 0xA9,
-0x84, 0x08, 0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0xFF, 0xEE, 0x5C, 0xFE, 0xEF,
-0x5D, 0xFF, 0x90, 0x92, 0x45, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0x7B, 0x02, 0x7A, 0x00, 0xE4, 0xFD,
-0x7F, 0x01, 0xD1, 0x88, 0x12, 0xAB, 0xFF, 0xFF, 0xF1, 0xC9, 0x12, 0x05, 0x28, 0xE0, 0xFD, 0xE5,
-0x62, 0x12, 0xC8, 0x1C, 0x54, 0x80, 0xFB, 0xF1, 0xB4, 0xEB, 0xF0, 0x12, 0xC8, 0x57, 0xED, 0xF0,
-0x90, 0x92, 0x3F, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0xE4, 0x90, 0x92, 0x45, 0xF0, 0xA3, 0xF0, 0x7B,
-0x03, 0xFA, 0xFD, 0x7F, 0x01, 0xD1, 0x88, 0xAF, 0x62, 0x12, 0x77, 0x39, 0xEF, 0x70, 0x02, 0xC1,
-0x28, 0x75, 0xF0, 0x12, 0xE5, 0x62, 0x12, 0x8B, 0x0B, 0x12, 0x8D, 0x59, 0x30, 0xE0, 0x02, 0xC1,
-0x28, 0xE5, 0x62, 0x12, 0xA9, 0x84, 0x08, 0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9,
-0xFF, 0xEE, 0x5C, 0xFE, 0xEF, 0x5D, 0x4E, 0x60, 0x02, 0xC1, 0x28, 0x12, 0xAB, 0xFF, 0x4E, 0x70,
-0x0A, 0xF1, 0xC9, 0x12, 0x05, 0x28, 0xE0, 0x70, 0x02, 0xC1, 0x28, 0xE5, 0x62, 0x75, 0xF0, 0x12,
-0xA4, 0x24, 0x44, 0xF9, 0x74, 0x89, 0x35, 0xF0, 0xFA, 0x7B, 0x01, 0x90, 0x92, 0x33, 0x12, 0x87,
-0x79, 0x90, 0x92, 0x33, 0x12, 0x87, 0x70, 0x12, 0xC8, 0xA1, 0x12, 0x03, 0xED, 0x2F, 0xFF, 0xF1,
-0xA2, 0x2F, 0xFF, 0xF1, 0xA8, 0x2F, 0xFF, 0xF1, 0xAE, 0x2F, 0xF5, 0x6C, 0x75, 0xF0, 0x12, 0xE5,
-0x62, 0x90, 0x89, 0x40, 0x12, 0x05, 0x28, 0xE0, 0xF5, 0x68, 0xA3, 0xE0, 0xF5, 0x69, 0xF1, 0xC9,
-0x12, 0x05, 0x28, 0xE0, 0xFF, 0x90, 0x92, 0x36, 0xE4, 0xF0, 0xA3, 0xEF, 0xF0, 0xE5, 0x62, 0x12,
-0x8F, 0x5E, 0xE0, 0xF5, 0x63, 0x54, 0x80, 0xF5, 0x65, 0xE5, 0x63, 0x54, 0x7F, 0xF5, 0x64, 0x12,
-0xC8, 0x67, 0xD1, 0xFC, 0x12, 0xC8, 0xA1, 0x90, 0x92, 0x41, 0xF1, 0x00, 0xF1, 0xA2, 0xFF, 0x90,
-0x92, 0x43, 0xF1, 0x00, 0xF1, 0xA8, 0xFF, 0x90, 0x92, 0x45, 0xF1, 0x00, 0x7B, 0x01, 0xF1, 0x9A,
-0x90, 0x92, 0x33, 0x12, 0x87, 0x70, 0xF1, 0xAE, 0xD1, 0xFC, 0x90, 0x92, 0x36, 0x12, 0xC8, 0x70,
-0xF0, 0xA3, 0xEF, 0xF0, 0xA3, 0x12, 0xC8, 0x99, 0xA3, 0xE4, 0xF0, 0xA3, 0xE5, 0x63, 0xF0, 0x7B,
-0x02, 0xF1, 0x9A, 0x74, 0x7C, 0x25, 0x62, 0xF5, 0x82, 0xE4, 0x34, 0x90, 0xF5, 0x83, 0xE0, 0xC3,
-0x94, 0x05, 0x40, 0x02, 0xC1, 0x0D, 0x75, 0xF0, 0x12, 0xE5, 0x62, 0x12, 0xAF, 0xD8, 0xFF, 0xE5,
-0x64, 0xD3, 0x9F, 0x40, 0x08, 0x8F, 0x64, 0xE5, 0x64, 0x45, 0x65, 0xF5, 0x63, 0xE5, 0x64, 0x90,
-0x82, 0xE1, 0x93, 0xF5, 0x6A, 0xE5, 0x65, 0x60, 0x04, 0x05, 0x6A, 0x05, 0x6A, 0x90, 0x04, 0x8C,
-0xE0, 0x64, 0x01, 0x70, 0x28, 0xE5, 0x64, 0xC3, 0x94, 0x0C, 0x40, 0x21, 0x74, 0x84, 0x25, 0x64,
-0xF5, 0x82, 0xE4, 0x34, 0x04, 0xF5, 0x83, 0xE0, 0xFF, 0x54, 0x7F, 0xFE, 0xEF, 0x30, 0xE7, 0x06,
-0xE5, 0x6A, 0x2E, 0xFF, 0x80, 0x05, 0xC3, 0xE5, 0x6A, 0x9E, 0xFF, 0x8F, 0x6A, 0xE5, 0x6A, 0xD3,
-0x94, 0x1A, 0xAF, 0x6A, 0x40, 0x02, 0x7F, 0x1A, 0x8F, 0x6A, 0xD1, 0x32, 0x7B, 0x03, 0xFA, 0xF1,
-0x9C, 0xE5, 0x63, 0x90, 0x83, 0x59, 0x93, 0xFF, 0xD3, 0x90, 0x92, 0x37, 0xE0, 0x9F, 0x90, 0x92,
-0x36, 0xE0, 0x94, 0x00, 0x40, 0x02, 0x80, 0x73, 0xC3, 0xE5, 0x69, 0x94, 0x0A, 0xE5, 0x68, 0x94,
-0x00, 0x40, 0x02, 0xA1, 0x5B, 0xD1, 0x76, 0xE0, 0xC3, 0x94, 0x01, 0x40, 0x05, 0xD1, 0x76, 0xE0,
-0x14, 0xF0, 0x90, 0x92, 0x33, 0x12, 0x87, 0x70, 0xF1, 0xAE, 0xFF, 0x90, 0x92, 0x37, 0xE0, 0x2F,
-0xFF, 0x90, 0x92, 0x36, 0xE0, 0x35, 0xF0, 0xFE, 0xF1, 0xA8, 0x2F, 0xFF, 0xEE, 0x35, 0xF0, 0xFE,
-0xF1, 0xA2, 0x2F, 0xFD, 0xEE, 0x35, 0xF0, 0xFC, 0xE5, 0x68, 0xC3, 0x13, 0xFE, 0xE5, 0x69, 0x13,
-0xFF, 0xD3, 0xED, 0x9F, 0xEC, 0x9E, 0x40, 0x28, 0xE5, 0x62, 0x94, 0x05, 0x50, 0x05, 0xD1, 0x76,
-0x74, 0x03, 0xF0, 0x90, 0x92, 0x3F, 0x12, 0xC8, 0x99, 0xE5, 0x68, 0xC3, 0x13, 0xA3, 0xF0, 0xE5,
-0x69, 0x13, 0xA3, 0xD1, 0x48, 0xF1, 0xD2, 0x7B, 0x01, 0xD1, 0x82, 0x12, 0xAA, 0x14, 0xC1, 0x0D,
-0x12, 0xC8, 0x67, 0x65, 0x6C, 0x70, 0x02, 0xE5, 0xF0, 0x70, 0x50, 0x90, 0x92, 0x3F, 0xF0, 0xA3,
-0xE5, 0x6C, 0xF0, 0xC3, 0x13, 0xFF, 0xA3, 0xE4, 0xF0, 0xA3, 0xEF, 0xD1, 0x48, 0xF1, 0xD2, 0x7B,
-0x02, 0xD1, 0x82, 0xE5, 0x62, 0xC3, 0x94, 0x05, 0x50, 0x0E, 0xD1, 0x76, 0xE0, 0xD3, 0x94, 0x00,
-0x40, 0x06, 0xD1, 0x2D, 0x7B, 0x03, 0x80, 0x0B, 0xE5, 0x6C, 0xC3, 0x94, 0x03, 0x50, 0x10, 0xD1,
-0x2D, 0x7B, 0x04, 0xFA, 0xD1, 0x84, 0x7D, 0x06, 0xAF, 0x62, 0x12, 0xBE, 0x4C, 0xC1, 0x28, 0xE4,
-0xFD, 0xAF, 0x62, 0x12, 0x8E, 0x15, 0x12, 0xBE, 0x48, 0xC1, 0x0D, 0xD1, 0x2D, 0x7B, 0x08, 0xFA,
-0xD1, 0x84, 0x7D, 0x01, 0xAF, 0x62, 0x12, 0x65, 0xC2, 0xC1, 0x0D, 0xD1, 0x76, 0xE4, 0xF0, 0x90,
-0x92, 0x3D, 0x74, 0x02, 0xF0, 0xAB, 0x6A, 0xAD, 0x62, 0xAF, 0x69, 0xAE, 0x68, 0x12, 0xAB, 0x14,
-0x8E, 0x66, 0x8F, 0x67, 0x12, 0xC8, 0x0E, 0xC3, 0x74, 0x01, 0x93, 0x95, 0x67, 0xE4, 0x93, 0x95,
-0x66, 0x50, 0x18, 0xD1, 0xF0, 0xE4, 0xF0, 0x7D, 0x01, 0xAF, 0x62, 0x12, 0x8E, 0x15, 0x12, 0xC7,
-0x93, 0xE4, 0x90, 0x92, 0x43, 0xD1, 0x40, 0x7B, 0x01, 0x80, 0x22, 0xF1, 0x92, 0xC3, 0xE5, 0x67,
-0x9F, 0xE5, 0x66, 0x94, 0x00, 0x50, 0x1B, 0xD1, 0xF0, 0xE4, 0xF0, 0x12, 0xAA, 0x14, 0x12, 0xC7,
-0xAE, 0xF1, 0x92, 0x12, 0xC8, 0x57, 0xEF, 0xF0, 0xE4, 0xD1, 0x3F, 0x7B, 0x02, 0xFA, 0xF1, 0xBB,
-0x80, 0x4B, 0x12, 0xBE, 0x48, 0x12, 0xC7, 0x93, 0xF1, 0x92, 0xF1, 0xB4, 0xEF, 0xF0, 0xD1, 0xF0,
-0xF1, 0xD2, 0x7B, 0x03, 0x7A, 0x00, 0xF1, 0xBB, 0xD1, 0xF0, 0xE0, 0x04, 0xF0, 0xE5, 0x64, 0x90,
-0x83, 0x6D, 0x93, 0xFF, 0xD1, 0xF0, 0xE0, 0xC3, 0x9F, 0x40, 0x22, 0xD1, 0xF0, 0xE4, 0xF0, 0xF1,
-0x92, 0x12, 0xC8, 0x0E, 0x74, 0x01, 0x93, 0x2F, 0xFF, 0xE4, 0x93, 0x34, 0x00, 0xC3, 0x13, 0xFE,
-0xEF, 0x13, 0xFF, 0xE5, 0x62, 0x12, 0xAB, 0x08, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0xE4, 0xF5, 0x6C,
-0xFD, 0xAF, 0x62, 0x12, 0x65, 0xC2, 0xE4, 0x90, 0x92, 0x3F, 0xF0, 0xD1, 0x3B, 0xA3, 0xF0, 0x7B,
-0x01, 0xFA, 0x7D, 0xFF, 0x7F, 0x01, 0xD1, 0x88, 0x05, 0x62, 0x21, 0xF7, 0x22, 0x90, 0x92, 0xCB,
-0xE0, 0xFF, 0x90, 0x92, 0x3F, 0xE4, 0xF0, 0xA3, 0xEF, 0xF0, 0xE4, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3,
-0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0x22, 0xF0, 0x90, 0x92, 0x33, 0x12, 0x87, 0x70, 0x90,
+0x90, 0x84, 0xC6, 0x12, 0x8F, 0xB9, 0x25, 0x5B, 0x90, 0x84, 0xC7, 0x12, 0x8E, 0x8F, 0x25, 0x5B,
+0x90, 0x84, 0xC8, 0xF0, 0x12, 0x8F, 0xCD, 0x25, 0x5B, 0x90, 0x84, 0xC9, 0x12, 0x8F, 0xEB, 0x25,
+0x5B, 0x90, 0x84, 0xCA, 0xF1, 0xF2, 0x25, 0x5B, 0x90, 0x84, 0xCB, 0xF0, 0x11, 0x15, 0x25, 0x5B,
+0x90, 0x84, 0xCC, 0xF0, 0x22, 0x90, 0x00, 0x06, 0x02, 0x03, 0x0F, 0x12, 0xA0, 0x4F, 0xFF, 0x54,
+0x0F, 0xF5, 0x5E, 0xEF, 0xC4, 0x54, 0x0F, 0x64, 0x0F, 0x70, 0x4C, 0x90, 0x01, 0xA4, 0x04, 0xF0,
+0x90, 0x92, 0x0A, 0xE0, 0x54, 0xFE, 0xFF, 0xF0, 0xE5, 0x5E, 0x54, 0x07, 0x25, 0xE0, 0xFE, 0xEF,
+0x54, 0xF1, 0x4E, 0x12, 0xDA, 0x3E, 0x60, 0x03, 0xBF, 0x01, 0x0F, 0x90, 0x05, 0x27, 0xE0, 0x54,
+0xED, 0xF0, 0x90, 0x01, 0xA4, 0x74, 0x02, 0xF0, 0x80, 0x02, 0xF1, 0xFB, 0xAF, 0x5E, 0x12, 0x98,
+0x46, 0xBF, 0x01, 0x08, 0xE4, 0xFD, 0xFF, 0x12, 0xD2, 0x77, 0x80, 0x00, 0x7F, 0x02, 0x51, 0xA8,
+0x90, 0x01, 0xA4, 0x74, 0x04, 0xF0, 0x22, 0xE5, 0x5E, 0x75, 0xF0, 0x13, 0xA4, 0x24, 0x37, 0xF9,
+0x74, 0x92, 0x35, 0xF0, 0xFA, 0x7B, 0x01, 0xC0, 0x02, 0xC0, 0x01, 0xE5, 0x5D, 0x24, 0x01, 0xF9,
+0xE4, 0x35, 0x5C, 0x85, 0x5B, 0x1B, 0xF5, 0x1C, 0x89, 0x1D, 0x75, 0x1E, 0x04, 0xD0, 0x01, 0xD0,
+0x02, 0x12, 0x6A, 0x21, 0xF1, 0x5B, 0x11, 0x15, 0xF1, 0x64, 0xFF, 0xE5, 0x5E, 0x12, 0xD9, 0xAD,
+0x54, 0xFE, 0x4F, 0xF0, 0xE5, 0x5E, 0x12, 0xC7, 0x85, 0x54, 0xF7, 0xF0, 0x12, 0xDA, 0x49, 0x14,
+0x65, 0x5E, 0x60, 0x02, 0x21, 0xB3, 0x90, 0x85, 0xC5, 0xE0, 0x70, 0x07, 0x90, 0x85, 0xBC, 0xE0,
+0x30, 0xE0, 0x04, 0x7F, 0x05, 0x41, 0xA8, 0x90, 0x01, 0xA4, 0xE4, 0xF0, 0xA3, 0xF0, 0xF1, 0x5B,
+0x12, 0xDA, 0x49, 0x90, 0x92, 0x0B, 0xF0, 0x11, 0x15, 0xFF, 0x54, 0x0F, 0xC4, 0x54, 0xF0, 0xFE,
+0x90, 0x92, 0x0A, 0xE0, 0x54, 0x0F, 0x4E, 0xF0, 0xEF, 0x54, 0x10, 0x25, 0xE0, 0xFF, 0x90, 0x92,
+0x72, 0xE0, 0x54, 0xDF, 0x4F, 0xFF, 0xF0, 0x11, 0x15, 0x54, 0x60, 0xC4, 0x54, 0x0F, 0xFE, 0xEF,
+0x54, 0xF9, 0x4E, 0x90, 0x92, 0x72, 0xF0, 0x90, 0x92, 0x0A, 0xE0, 0x54, 0xF1, 0xF0, 0x90, 0x05,
+0x58, 0x74, 0x02, 0x12, 0xDA, 0x1E, 0x44, 0x40, 0xF0, 0xE0, 0xFF, 0xC4, 0x13, 0x54, 0x07, 0x30,
+0xE0, 0x06, 0xEF, 0x54, 0xE0, 0x44, 0x01, 0xF0, 0x90, 0x92, 0x0A, 0xE0, 0x44, 0x01, 0x12, 0xDA,
+0x3E, 0x60, 0x05, 0xEF, 0x64, 0x01, 0x70, 0x1D, 0x90, 0x92, 0xA9, 0xE0, 0xFF, 0xC4, 0x13, 0x54,
+0x07, 0x30, 0xE0, 0x08, 0xEF, 0x54, 0xE0, 0x44, 0x01, 0xF0, 0x80, 0x2D, 0x90, 0x05, 0x27, 0xE0,
+0x44, 0x12, 0xF0, 0x80, 0x24, 0x12, 0xDA, 0x98, 0xE4, 0xFF, 0xEF, 0xFD, 0xC3, 0x74, 0x87, 0x12,
+0xD9, 0x9D, 0x74, 0x03, 0x12, 0xD9, 0x81, 0xEF, 0xFD, 0xC3, 0x74, 0x8B, 0x12, 0xD9, 0x9D, 0x74,
+0x07, 0x12, 0xD9, 0x81, 0x0F, 0xEF, 0xB4, 0x04, 0xE1, 0x7F, 0x03, 0x51, 0xA8, 0x90, 0x92, 0x39,
+0xE0, 0x90, 0x92, 0xA7, 0xB4, 0x64, 0x05, 0x74, 0xC8, 0xF0, 0x80, 0x03, 0x74, 0x64, 0xF0, 0x90,
+0x92, 0x9F, 0x12, 0x04, 0xF7, 0x00, 0x00, 0x00, 0x00, 0x90, 0x92, 0xA3, 0x12, 0x04, 0xF7, 0x00,
+0x00, 0x00, 0x00, 0x22, 0x90, 0x93, 0x03, 0x12, 0x87, 0x79, 0x90, 0x93, 0x02, 0xEF, 0xF0, 0x12,
+0x87, 0x82, 0x8A, 0x1A, 0x00, 0x8A, 0x1F, 0x01, 0x8A, 0x24, 0x03, 0x8A, 0x29, 0x04, 0x8A, 0x2E,
+0x10, 0x8A, 0x33, 0x11, 0x8A, 0x37, 0x12, 0x8A, 0x3C, 0x14, 0x8A, 0xA1, 0x15, 0x8A, 0x41, 0x16,
+0x8A, 0x46, 0x18, 0x8A, 0x4A, 0x19, 0x8A, 0x4F, 0x1C, 0x8A, 0x53, 0x20, 0x8A, 0x57, 0x24, 0x8A,
+0x5C, 0x25, 0x8A, 0x61, 0x27, 0x8A, 0x66, 0x40, 0x8A, 0x6A, 0x42, 0x8A, 0xA1, 0x47, 0x8A, 0xA1,
+0x49, 0x8A, 0x74, 0x80, 0x8A, 0x6F, 0x81, 0x8A, 0x79, 0x82, 0x8A, 0x7E, 0x83, 0x8A, 0x83, 0x84,
+0x8A, 0x88, 0x88, 0x8A, 0x8D, 0xC3, 0x00, 0x00, 0x8A, 0x92, 0x51, 0xA2, 0x02, 0x87, 0xD5, 0x51,
+0xA2, 0x02, 0x90, 0x02, 0x51, 0xA2, 0x02, 0x78, 0x94, 0x51, 0xA2, 0x02, 0x6B, 0x03, 0x51, 0xA2,
+0x02, 0x97, 0xFD, 0x51, 0xA2, 0xC1, 0x96, 0x51, 0xA2, 0x02, 0xA0, 0x58, 0x51, 0xA2, 0x02, 0xA1,
+0x22, 0x51, 0xA2, 0x02, 0x9F, 0xF5, 0x51, 0xA2, 0x01, 0x1B, 0x51, 0xA2, 0x02, 0xA0, 0x1C, 0x51,
+0xA2, 0xE1, 0x6D, 0x51, 0xA2, 0x61, 0x0C, 0x51, 0xA2, 0x02, 0x9C, 0xA6, 0x51, 0xA2, 0x02, 0xA1,
+0x31, 0x51, 0xA2, 0x02, 0xA1, 0x39, 0x51, 0xA2, 0x61, 0xD7, 0x51, 0xA2, 0x02, 0x4E, 0x29, 0x51,
+0xA2, 0x02, 0xA6, 0x9D, 0x51, 0xA2, 0x02, 0xD7, 0x13, 0x51, 0xA2, 0x02, 0x7A, 0xFE, 0x51, 0xA2,
+0x02, 0x6F, 0x63, 0x51, 0xA2, 0x02, 0x6F, 0xA4, 0x51, 0xA2, 0x02, 0x7B, 0xD0, 0x51, 0xA2, 0x02,
+0xA7, 0xE1, 0x90, 0x01, 0xC0, 0xE0, 0x44, 0x01, 0xF0, 0x90, 0x93, 0x02, 0xE0, 0x90, 0x01, 0xC2,
+0xF0, 0x22, 0x90, 0x93, 0x03, 0x02, 0x87, 0x70, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0xA9,
+0x07, 0x90, 0x05, 0x63, 0xE0, 0xFE, 0x90, 0x05, 0x62, 0x12, 0xBC, 0x4B, 0xAD, 0x07, 0xFC, 0x90,
+0x05, 0x61, 0xE0, 0xFE, 0x90, 0x05, 0x60, 0x12, 0xD8, 0xB0, 0xFE, 0x90, 0x93, 0x84, 0x74, 0x17,
+0xF0, 0x90, 0x93, 0x92, 0x74, 0x06, 0xF0, 0x90, 0x93, 0x86, 0xE9, 0xF0, 0x12, 0x92, 0x32, 0x12,
+0xD8, 0xFD, 0xE0, 0x90, 0x93, 0x87, 0xF0, 0xAB, 0x07, 0xA3, 0xEB, 0xF0, 0xEE, 0xA3, 0xF0, 0xAF,
+0x05, 0xA3, 0xEF, 0xF0, 0xAE, 0x04, 0xEE, 0xA3, 0xF0, 0x7B, 0x01, 0x7A, 0x93, 0x79, 0x84, 0x12,
+0x5E, 0x10, 0x7F, 0x04, 0x12, 0x87, 0xBB, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x12, 0xD9, 0x94, 0xFF,
+0x54, 0x7F, 0x90, 0x85, 0xC5, 0xF0, 0xEF, 0xF1, 0x66, 0xA3, 0xF1, 0xB9, 0xFD, 0x54, 0xF0, 0xC4,
+0x54, 0x0F, 0xFF, 0x90, 0x85, 0xC3, 0xE0, 0x54, 0xF0, 0x4F, 0xF0, 0xF1, 0xCD, 0xFC, 0x54, 0x01,
+0x25, 0xE0, 0xFF, 0x90, 0x85, 0xC1, 0xE0, 0x54, 0xFD, 0x4F, 0xF0, 0xEC, 0x54, 0x04, 0xFF, 0x90,
+0x92, 0xC0, 0xE0, 0x54, 0xFB, 0x4F, 0xF0, 0xED, 0x54, 0x0F, 0xC4, 0x54, 0xF0, 0xFF, 0x12, 0x9F,
+0xBF, 0xD1, 0x8E, 0x90, 0x85, 0xC4, 0xF0, 0x11, 0x15, 0x30, 0xE0, 0x4E, 0xC3, 0x13, 0x54, 0x07,
+0xFF, 0xC3, 0x94, 0x04, 0x90, 0x85, 0xD8, 0x50, 0x04, 0xEF, 0xF0, 0x80, 0x26, 0x74, 0x03, 0xF0,
+0x71, 0xD1, 0xE9, 0x24, 0x06, 0x12, 0xDA, 0x79, 0xFF, 0x74, 0x03, 0x24, 0xFD, 0xFE, 0xEF, 0xC4,
+0x54, 0x0F, 0xFD, 0xEF, 0x54, 0x0F, 0xFF, 0xED, 0x2E, 0x54, 0x0F, 0xFE, 0xC4, 0x54, 0xF0, 0x4F,
+0x12, 0x03, 0x3C, 0x71, 0xD1, 0x11, 0x15, 0xC4, 0x54, 0x0F, 0xFF, 0xC3, 0x94, 0x04, 0x90, 0x85,
+0xCD, 0x50, 0x05, 0x74, 0x04, 0xF0, 0x80, 0x02, 0xEF, 0xF0, 0x71, 0xD1, 0xF1, 0xEC, 0xFD, 0x7F,
+0x02, 0x12, 0x57, 0x82, 0x71, 0xD1, 0x12, 0x71, 0xCB, 0x12, 0xCD, 0x14, 0xF0, 0x90, 0x85, 0xC5,
+0x12, 0xD9, 0xD8, 0x12, 0x9F, 0xBE, 0x90, 0x01, 0xBE, 0xF0, 0x22, 0x24, 0x03, 0xFF, 0xE4, 0x33,
+0xFE, 0x90, 0x93, 0x06, 0x02, 0x87, 0x70, 0x90, 0x93, 0x06, 0x12, 0x87, 0x79, 0x71, 0xD1, 0x12,
+0x02, 0xF6, 0x54, 0x7F, 0xFD, 0xF1, 0xBA, 0xFE, 0x54, 0x1F, 0x90, 0x93, 0x0A, 0xF1, 0x62, 0x90,
+0x93, 0x09, 0xD1, 0x8F, 0xFE, 0x54, 0x03, 0xFC, 0xEE, 0x54, 0x30, 0xC4, 0x54, 0x0F, 0x90, 0x93,
+0x0C, 0xD1, 0x8F, 0xFE, 0x54, 0x40, 0xC4, 0x13, 0x13, 0x54, 0x03, 0x90, 0x93, 0x0B, 0xF1, 0x62,
+0xFF, 0xD1, 0x90, 0xFB, 0x54, 0x08, 0x13, 0x13, 0x13, 0x54, 0x1F, 0x90, 0x93, 0x0E, 0xF0, 0xFA,
+0xEB, 0x54, 0x04, 0x13, 0x13, 0x54, 0x3F, 0xA3, 0xF0, 0xEF, 0x54, 0x01, 0xC4, 0x33, 0x33, 0x33,
+0x54, 0x80, 0xB1, 0x2D, 0x54, 0x7F, 0x4F, 0xF0, 0x90, 0x93, 0x0B, 0xE0, 0x54, 0x01, 0xC4, 0x33,
+0x33, 0x54, 0xC0, 0xB1, 0x2D, 0x54, 0xBF, 0x4F, 0xF0, 0xEA, 0x60, 0x02, 0xA1, 0x2C, 0x90, 0x93,
+0x0A, 0xE0, 0x54, 0x1F, 0xFF, 0x75, 0xF0, 0x12, 0xED, 0xF1, 0xC5, 0x54, 0xE0, 0x4F, 0xF0, 0xEC,
+0x54, 0x03, 0xB1, 0x2D, 0x54, 0xFC, 0x4F, 0xF0, 0xEC, 0x54, 0x03, 0x25, 0xE0, 0x25, 0xE0, 0xB1,
+0x2D, 0x54, 0xF3, 0x4F, 0xF0, 0x90, 0x93, 0x09, 0xE0, 0x54, 0x01, 0xC4, 0x33, 0x54, 0xE0, 0xFF,
+0x75, 0xF0, 0x12, 0xED, 0xF1, 0xC5, 0x54, 0xDF, 0x4F, 0xF0, 0x90, 0x93, 0x0C, 0xE0, 0x54, 0x03,
+0xC4, 0x54, 0xF0, 0xB1, 0x2D, 0x54, 0xCF, 0x4F, 0x12, 0xDA, 0x06, 0xE0, 0x54, 0xFB, 0x12, 0xDA,
+0x06, 0xC0, 0x83, 0xC0, 0x82, 0xE0, 0xFF, 0x90, 0x93, 0x0F, 0xE0, 0x12, 0xDA, 0x80, 0xD0, 0x82,
+0xD0, 0x83, 0xF0, 0x90, 0x92, 0xBA, 0xE0, 0x60, 0x30, 0x71, 0xD1, 0xE9, 0x24, 0x03, 0x12, 0xDA,
+0x79, 0x54, 0x1F, 0x12, 0x03, 0x3C, 0x90, 0x93, 0x0D, 0x74, 0x01, 0xF0, 0x90, 0x93, 0x0D, 0xE0,
+0xFF, 0xC3, 0x94, 0x04, 0x50, 0x13, 0xEF, 0x71, 0xCB, 0x8F, 0x82, 0x8E, 0x83, 0xE4, 0x12, 0x03,
+0x4E, 0x90, 0x93, 0x0D, 0xE0, 0x04, 0xF0, 0x80, 0xE3, 0x90, 0x92, 0xB8, 0xE0, 0x54, 0x07, 0xFF,
+0xBF, 0x05, 0x0A, 0xEC, 0xB4, 0x01, 0x06, 0x90, 0x92, 0xBD, 0x74, 0x01, 0xF0, 0xE4, 0x90, 0x93,
+0x0D, 0xF0, 0x90, 0x93, 0x0D, 0xE0, 0xFC, 0x71, 0xCB, 0x8F, 0x82, 0x8E, 0x83, 0x12, 0x03, 0x0F,
+0xFF, 0xED, 0x12, 0xD9, 0x6C, 0xF5, 0x83, 0xE5, 0x82, 0x2C, 0x12, 0xB0, 0xF5, 0x90, 0x93, 0x0D,
+0xE0, 0x04, 0xF0, 0xE0, 0xB4, 0x04, 0xDB, 0xAF, 0x05, 0x12, 0x17, 0x8E, 0x22, 0xFF, 0x75, 0xF0,
+0x12, 0xED, 0x90, 0x89, 0x3F, 0x12, 0x05, 0x28, 0xE0, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0,
+0xD0, 0x12, 0xC1, 0x94, 0x20, 0xE6, 0x02, 0xC1, 0x55, 0x90, 0x00, 0x8C, 0xE0, 0x90, 0x94, 0x03,
+0xF0, 0x7F, 0x8D, 0x12, 0x7B, 0x51, 0x90, 0x94, 0x04, 0xEF, 0xF0, 0x90, 0x00, 0x8E, 0xE0, 0x90,
+0x94, 0x05, 0xF0, 0x90, 0x94, 0x04, 0xE0, 0x24, 0xFC, 0x60, 0x10, 0x24, 0x03, 0x60, 0x02, 0xC1,
+0x4C, 0x90, 0x94, 0x03, 0xE0, 0xFF, 0x12, 0xC1, 0x45, 0xC1, 0x4C, 0x90, 0x94, 0x03, 0xE0, 0x24,
+0xDC, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF1, 0xD3, 0xFF, 0xD1, 0x87, 0x75, 0xF0, 0x12, 0xB1, 0x32,
+0x13, 0x13, 0x54, 0x03, 0xFB, 0x0D, 0xE4, 0xFF, 0xD1, 0x87, 0x75, 0xF0, 0x12, 0xB1, 0x32, 0xF1,
+0x66, 0xFB, 0x0D, 0xE4, 0xFF, 0xD1, 0x87, 0x75, 0xF0, 0x12, 0xB1, 0x32, 0xC4, 0x54, 0x03, 0xFB,
+0x0D, 0xE4, 0xFF, 0xD1, 0x87, 0x12, 0xCF, 0x87, 0xFB, 0xE4, 0xFD, 0x0F, 0xD1, 0x87, 0x75, 0xF0,
+0x12, 0x90, 0x89, 0x3D, 0x12, 0x05, 0x28, 0xD1, 0x84, 0x75, 0xF0, 0x12, 0xF1, 0xC5, 0xC4, 0x13,
+0x54, 0x01, 0xFB, 0x0D, 0x7F, 0x01, 0xD1, 0x87, 0x75, 0xF0, 0x12, 0xF1, 0xC5, 0x54, 0x1F, 0xD1,
+0x85, 0x12, 0xD9, 0x6C, 0xF1, 0xD3, 0x0F, 0xD1, 0x87, 0x75, 0xF0, 0x08, 0xA4, 0x24, 0x01, 0xF5,
+0x82, 0xE4, 0x34, 0x82, 0xD1, 0x82, 0x75, 0xF0, 0x08, 0xA4, 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34,
+0x82, 0xD1, 0x82, 0x75, 0xF0, 0x08, 0xA4, 0x24, 0x03, 0xF5, 0x82, 0xE4, 0x34, 0x82, 0xD1, 0x82,
+0x75, 0xF0, 0x08, 0xA4, 0x24, 0x04, 0xF5, 0x82, 0xE4, 0x34, 0x82, 0xF1, 0xD3, 0x0F, 0xD1, 0x87,
+0x75, 0xF0, 0x08, 0xA4, 0x24, 0x05, 0xF5, 0x82, 0xE4, 0x34, 0x82, 0xD1, 0x82, 0x75, 0xF0, 0x08,
+0xA4, 0x24, 0x06, 0xF5, 0x82, 0xE4, 0x34, 0x82, 0xD1, 0x82, 0x75, 0xF0, 0x08, 0xA4, 0x24, 0x07,
+0xF5, 0x82, 0xE4, 0x34, 0x82, 0xF5, 0x83, 0xE0, 0xFB, 0x0D, 0xD1, 0x5A, 0x12, 0xC1, 0x94, 0x30,
+0xE0, 0x03, 0x12, 0xC1, 0x9B, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xEF, 0x70, 0x04, 0x74, 0xF0, 0x80,
+0x16, 0xEF, 0xB4, 0x01, 0x04, 0x74, 0xF4, 0x80, 0x0E, 0xEF, 0xB4, 0x02, 0x04, 0x74, 0xF8, 0x80,
+0x06, 0xEF, 0xB4, 0x03, 0x0C, 0x74, 0xFC, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x02, 0xF5, 0x83, 0xEB,
+0xF0, 0x22, 0xF5, 0x83, 0xE0, 0xFB, 0x0D, 0xD1, 0x5A, 0x90, 0x94, 0x03, 0xE0, 0x22, 0x4F, 0xF0,
+0x90, 0x00, 0x02, 0x02, 0x03, 0x0F, 0x12, 0xA0, 0x4F, 0xC4, 0x54, 0x0F, 0xFF, 0xBF, 0x0F, 0x17,
+0x90, 0x92, 0x09, 0xE0, 0x54, 0xFE, 0xF0, 0xF1, 0xFB, 0xF1, 0x5B, 0x12, 0x02, 0xF6, 0x54, 0x0F,
+0xFF, 0x12, 0x97, 0xB1, 0x02, 0xD1, 0x6E, 0xF1, 0x5B, 0xF1, 0xBA, 0x12, 0xDA, 0x9F, 0x12, 0xD9,
+0x5F, 0xF5, 0x83, 0xEF, 0xD1, 0x8F, 0x54, 0x03, 0xFF, 0xED, 0xF1, 0xDC, 0x54, 0xFC, 0xD1, 0x8E,
+0x54, 0x1C, 0xFF, 0xEE, 0x54, 0x0F, 0xFE, 0xF1, 0xDC, 0x54, 0xE3, 0xD1, 0x8E, 0x54, 0xE0, 0xFF,
+0xEE, 0xF1, 0xDC, 0x54, 0x1F, 0x4F, 0xF1, 0xEB, 0x12, 0xDA, 0x5A, 0xE4, 0xFB, 0x12, 0xD1, 0xEA,
+0xF1, 0x5B, 0xF1, 0xF3, 0x12, 0xDA, 0x5A, 0x7B, 0x01, 0x12, 0xD1, 0xEA, 0xF1, 0x5B, 0xF1, 0xCD,
+0x33, 0x33, 0x33, 0x54, 0xF8, 0x12, 0xDA, 0x9F, 0xFD, 0x75, 0xF0, 0x0E, 0xA4, 0x24, 0x16, 0xF5,
+0x82, 0xE4, 0x34, 0x92, 0xF5, 0x83, 0xEF, 0xF0, 0xF1, 0xCD, 0xC4, 0x13, 0x54, 0x07, 0xFF, 0xED,
+0x75, 0xF0, 0x0E, 0xA4, 0x24, 0x17, 0xF5, 0x82, 0xE4, 0x34, 0x92, 0xF5, 0x83, 0xEF, 0xF0, 0xEE,
+0xC4, 0x54, 0x0F, 0xFF, 0x14, 0x6D, 0x70, 0x22, 0x90, 0x92, 0x0B, 0xEF, 0xF0, 0x11, 0x15, 0x54,
+0x0F, 0xC4, 0x54, 0xF0, 0xFF, 0x90, 0x92, 0x0A, 0xE0, 0x54, 0x0F, 0x4F, 0xF0, 0x54, 0xF1, 0xF0,
+0x90, 0x92, 0x09, 0xE0, 0x44, 0x01, 0xF0, 0x12, 0xDA, 0x98, 0x22, 0xAB, 0x5B, 0xAA, 0x5C, 0xA9,
+0x5D, 0x22, 0xF0, 0xEE, 0x54, 0x80, 0xC4, 0x13, 0x13, 0x13, 0x54, 0x01, 0x22, 0x12, 0xD9, 0x94,
+0xFF, 0xF1, 0xBA, 0xFE, 0x54, 0x03, 0xFD, 0xEE, 0x13, 0x13, 0x54, 0x07, 0xFB, 0xC0, 0x03, 0x71,
+0xD1, 0xD1, 0x90, 0x54, 0x0F, 0x90, 0x93, 0xFF, 0xF0, 0xD0, 0x03, 0x12, 0x98, 0xC4, 0x71, 0xD1,
+0xF1, 0xBA, 0x12, 0x95, 0x52, 0x90, 0x93, 0x09, 0x74, 0x10, 0xF0, 0x90, 0x93, 0x17, 0x74, 0x07,
+0xF0, 0x71, 0xD1, 0x12, 0x02, 0xF6, 0x90, 0x93, 0x0B, 0xF0, 0x7B, 0x01, 0x7A, 0x93, 0x79, 0x09,
+0x12, 0x5E, 0x10, 0x7F, 0x04, 0x02, 0x87, 0xBB, 0x4F, 0xF0, 0x90, 0x00, 0x01, 0x02, 0x03, 0x0F,
+0x75, 0xF0, 0x12, 0xE5, 0x6F, 0x90, 0x89, 0x3E, 0x12, 0x05, 0x28, 0xE0, 0x22, 0x90, 0x00, 0x03,
+0x02, 0x03, 0x0F, 0xF5, 0x83, 0xE0, 0xFB, 0xE4, 0xFD, 0x22, 0xE5, 0x5E, 0x75, 0xF0, 0x0E, 0xA4,
+0x24, 0x0E, 0xF5, 0x82, 0xE4, 0x34, 0x92, 0xF5, 0x83, 0xE0, 0x22, 0xF0, 0x90, 0x00, 0x04, 0x02,
+0x03, 0x0F, 0xF0, 0x90, 0x00, 0x05, 0x02, 0x03, 0x0F, 0xA1, 0x3A, 0x7D, 0x20, 0xE4, 0xFF, 0x02,
+0x7B, 0xBF, 0x8B, 0x5B, 0x8A, 0x5C, 0x89, 0x5D, 0x90, 0x92, 0xB4, 0xE0, 0x70, 0x0C, 0x12, 0xDA,
+0x69, 0x30, 0xE0, 0x06, 0x90, 0x92, 0xBA, 0x74, 0x01, 0xF0, 0x90, 0x92, 0xB6, 0xE0, 0x70, 0x10,
+0x12, 0x8F, 0x5B, 0x12, 0xDA, 0x49, 0xFF, 0xBF, 0x05, 0x06, 0x90, 0x92, 0xBB, 0x74, 0x01, 0xF0,
+0x12, 0x8F, 0x5B, 0x12, 0x8F, 0xBA, 0xFF, 0xF5, 0x5F, 0x12, 0x02, 0xF6, 0xFE, 0xC3, 0x13, 0x30,
+0xE0, 0x07, 0x12, 0x8E, 0x90, 0xF5, 0x60, 0x80, 0x02, 0x8F, 0x60, 0x85, 0x5F, 0x5E, 0xE5, 0x5E,
+0xD3, 0x95, 0x60, 0x50, 0x2C, 0x12, 0x8F, 0x5B, 0x12, 0x02, 0xF6, 0x54, 0x01, 0xFD, 0xAF, 0x5E,
+0x12, 0x6E, 0x5F, 0xAF, 0x5E, 0x12, 0x77, 0x39, 0xEF, 0xAF, 0x5E, 0x70, 0x04, 0x11, 0x9C, 0x80,
+0x02, 0xF1, 0xF1, 0x90, 0x92, 0xBB, 0xE0, 0x60, 0x04, 0xAF, 0x5E, 0x11, 0x9C, 0x05, 0x5E, 0x80,
+0xCD, 0xE5, 0x5F, 0x70, 0x16, 0xFF, 0x12, 0x77, 0x39, 0xEF, 0x70, 0x0F, 0x12, 0xA5, 0x1C, 0x12,
+0x79, 0x61, 0x12, 0xC7, 0x62, 0x54, 0xBF, 0xF0, 0x54, 0x7F, 0xF0, 0x22, 0x7D, 0x01, 0xD3, 0x10,
+0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x93, 0x06, 0xEF, 0xF0, 0xA3, 0xED, 0xF0, 0x7D, 0x44, 0x7F,
+0x6F, 0x11, 0xDE, 0x71, 0xCB, 0x90, 0x93, 0x07, 0xE0, 0x90, 0x93, 0x06, 0xB4, 0x01, 0x0A, 0xE0,
+0x12, 0xB6, 0x9A, 0xE0, 0x44, 0x04, 0xF0, 0x80, 0x08, 0xE0, 0x12, 0xB6, 0x9A, 0xE0, 0x54, 0xFB,
+0xF0, 0xF1, 0xD7, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x12, 0xA5, 0x1C, 0xE4, 0xFD, 0xFF, 0x90, 0x05,
+0x22, 0xEF, 0xF0, 0x90, 0x92, 0x01, 0xED, 0xF0, 0x22, 0xE4, 0x90, 0x93, 0x81, 0xF0, 0x90, 0x92,
+0x0A, 0xE0, 0x20, 0xE0, 0x02, 0x41, 0x2F, 0x90, 0x92, 0x0C, 0xE0, 0xB4, 0x14, 0x0B, 0x7F, 0x01,
+0x51, 0x3B, 0xEF, 0x60, 0x02, 0x41, 0x2F, 0x41, 0x2A, 0x51, 0x32, 0x12, 0xC7, 0x85, 0x54, 0x07,
+0x90, 0x93, 0x7F, 0xF0, 0x60, 0x07, 0xE0, 0x64, 0x02, 0x60, 0x02, 0x21, 0xF1, 0x90, 0x92, 0x0C,
+0xE0, 0x70, 0x35, 0xF1, 0xDC, 0x54, 0x07, 0x30, 0xE0, 0x02, 0x21, 0xE1, 0x12, 0xDA, 0x71, 0xF0,
+0x7D, 0x4E, 0x7F, 0x6F, 0x51, 0x30, 0x12, 0x98, 0x3A, 0xB1, 0x3D, 0x7B, 0x04, 0x7D, 0x01, 0x71,
+0x1D, 0xBF, 0x01, 0x0D, 0xF1, 0x26, 0xE0, 0x44, 0x01, 0xF0, 0x90, 0x92, 0x0C, 0x74, 0x01, 0xF0,
+0x22, 0x12, 0xD9, 0xE5, 0x7D, 0x4F, 0x80, 0x7B, 0x90, 0x92, 0x0C, 0xE0, 0x64, 0x01, 0x60, 0x02,
+0x21, 0xE1, 0xF1, 0x26, 0xE0, 0xFF, 0x30, 0xE0, 0x08, 0x90, 0x93, 0x81, 0x74, 0x01, 0xF0, 0x80,
+0x16, 0xEF, 0xC3, 0x13, 0x20, 0xE0, 0x10, 0x90, 0x93, 0x81, 0x74, 0x01, 0xF0, 0x12, 0xDA, 0x71,
+0xF0, 0x7D, 0x50, 0x7F, 0x6F, 0x11, 0xDE, 0x90, 0x93, 0x81, 0xE0, 0x60, 0x54, 0x90, 0x92, 0xB2,
+0xE0, 0x64, 0x06, 0x60, 0x40, 0xE0, 0x04, 0xF0, 0xE0, 0xD3, 0x94, 0x01, 0x40, 0x08, 0x90, 0x93,
+0x82, 0x74, 0x04, 0xF0, 0x80, 0x05, 0xE4, 0x90, 0x93, 0x82, 0xF0, 0x51, 0x32, 0x12, 0x98, 0x3A,
+0xB1, 0x3D, 0x90, 0x93, 0x82, 0xE0, 0xFB, 0x7D, 0x01, 0x71, 0x1D, 0xBF, 0x01, 0x10, 0x12, 0xC6,
+0x53, 0x74, 0x03, 0xF0, 0xE4, 0xFB, 0xFD, 0x7F, 0x58, 0x7E, 0x01, 0x02, 0x61, 0x41, 0x12, 0xD9,
+0xE5, 0x7D, 0x51, 0x01, 0xDE, 0xE4, 0x90, 0x92, 0xB2, 0xF1, 0xF5, 0xF1, 0x26, 0xE0, 0x54, 0xFB,
+0xF0, 0x90, 0x92, 0x0C, 0xE0, 0x64, 0x05, 0x70, 0x46, 0xFF, 0x51, 0x3B, 0xEF, 0x70, 0x40, 0x80,
+0x39, 0x90, 0x93, 0x7F, 0xE0, 0x64, 0x03, 0x70, 0x36, 0x90, 0x92, 0x0C, 0xE0, 0x64, 0x05, 0x70,
+0x2E, 0xF1, 0xDC, 0x54, 0x07, 0x20, 0xE0, 0x13, 0x51, 0x32, 0x04, 0xFF, 0xA3, 0xE0, 0xB5, 0x07,
+0x02, 0xE4, 0xFF, 0xEF, 0x12, 0xC6, 0x42, 0xEF, 0x12, 0xC3, 0xFE, 0x51, 0x32, 0xFD, 0x7F, 0x02,
+0x12, 0xD2, 0x77, 0xE4, 0xFF, 0x51, 0x3B, 0xEF, 0x70, 0x05, 0x7F, 0x06, 0x12, 0x8A, 0xA8, 0x22,
+0x11, 0xDE, 0x90, 0x92, 0x0A, 0xE0, 0xC3, 0x13, 0x54, 0x07, 0x22, 0x90, 0x93, 0x83, 0xEF, 0xF0,
+0x71, 0xCB, 0xEF, 0x70, 0x02, 0xFF, 0x22, 0x51, 0x32, 0x90, 0x92, 0x70, 0xF0, 0x12, 0xD9, 0x32,
+0xB5, 0x07, 0x04, 0xEE, 0x54, 0xF1, 0xF0, 0x51, 0x32, 0xF5, 0x7A, 0x90, 0x93, 0x83, 0xE0, 0x90,
+0x92, 0x0C, 0x70, 0x03, 0xF0, 0x80, 0x03, 0x74, 0x14, 0xF0, 0xE5, 0x7A, 0x12, 0xD9, 0xAD, 0x30,
+0xE0, 0x29, 0xF1, 0x13, 0xE0, 0x24, 0x79, 0xF5, 0x82, 0xE4, 0x34, 0x92, 0xF5, 0x83, 0xE0, 0xFF,
+0x12, 0xD8, 0xFB, 0xEF, 0xF0, 0xF1, 0x13, 0xE0, 0x04, 0xF0, 0xF1, 0x13, 0xE0, 0xFF, 0x90, 0x92,
+0x78, 0xE0, 0xFE, 0xEF, 0xB5, 0x06, 0x04, 0xF1, 0x13, 0xE4, 0xF0, 0x12, 0xD8, 0xFB, 0xE0, 0xFC,
+0x90, 0x92, 0x70, 0xE0, 0x12, 0xD8, 0xFD, 0xE0, 0x6C, 0x60, 0x09, 0xE5, 0x7A, 0x12, 0x98, 0x9E,
+0xE5, 0x7A, 0xB1, 0x44, 0xE5, 0x7A, 0x75, 0xF0, 0x13, 0xA4, 0x24, 0x3F, 0xF5, 0x82, 0xE4, 0x34,
+0x92, 0xF5, 0x83, 0xE0, 0x04, 0xF0, 0x90, 0x93, 0x83, 0xE0, 0x70, 0x21, 0xF1, 0xDC, 0x54, 0x07,
+0x20, 0xE0, 0x1A, 0xE5, 0x7A, 0x12, 0xC7, 0x85, 0x54, 0x07, 0xFF, 0x60, 0x03, 0xBF, 0x02, 0x0D,
+0xE5, 0x7A, 0x12, 0x98, 0x3A, 0xB1, 0x3D, 0x7B, 0x04, 0xE4, 0xFD, 0x71, 0x1D, 0xAD, 0x7A, 0x7F,
+0x01, 0x12, 0xD2, 0x77, 0x90, 0x92, 0x72, 0xE0, 0xC3, 0x13, 0x54, 0x03, 0xFF, 0xBF, 0x02, 0x05,
+0xE4, 0xFF, 0x12, 0x8A, 0xA8, 0x90, 0x01, 0xA5, 0xE0, 0xB4, 0xFF, 0x04, 0xE4, 0xF0, 0x80, 0x06,
+0x90, 0x01, 0xA5, 0xE0, 0x04, 0xF0, 0x7F, 0x01, 0x22, 0xE4, 0xFB, 0x7D, 0x01, 0xD3, 0x10, 0xAF,
+0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x93, 0xED, 0x12, 0xBD, 0x5D, 0xA3, 0xEB, 0xF0, 0x90, 0x04, 0x1D,
+0xE0, 0x60, 0x25, 0x90, 0x05, 0x22, 0xE0, 0x90, 0x93, 0xF3, 0xF0, 0x7D, 0x14, 0x71, 0xC7, 0xEF,
+0x64, 0x01, 0x70, 0x05, 0x12, 0xD8, 0xC5, 0x80, 0x04, 0x7F, 0x00, 0x80, 0x13, 0x90, 0x93, 0xF3,
+0xE0, 0xFF, 0x7D, 0x15, 0x11, 0xDE, 0x80, 0x03, 0x12, 0xD8, 0xC5, 0x12, 0xAF, 0xD6, 0x7F, 0x01,
+0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90, 0x92, 0x09, 0xE0, 0x30, 0xE0, 0x58, 0x90, 0x92, 0x0C, 0xE0,
+0x70, 0x28, 0x7D, 0x16, 0x7F, 0x6F, 0x11, 0xDE, 0x71, 0xCB, 0x51, 0x32, 0xB1, 0x32, 0x71, 0x19,
+0x51, 0x32, 0x12, 0xCD, 0x8B, 0xF5, 0x83, 0xE0, 0x44, 0x01, 0xF0, 0x12, 0xC6, 0x53, 0x74, 0x03,
+0x12, 0xC3, 0xFE, 0x90, 0x92, 0x0C, 0x74, 0x01, 0xF0, 0x22, 0x90, 0x92, 0x0C, 0xE0, 0x64, 0x01,
+0x70, 0x20, 0x51, 0x32, 0xFF, 0x12, 0xCD, 0x8B, 0xF5, 0x83, 0xE0, 0x30, 0xE0, 0x14, 0xB1, 0x31,
+0x71, 0x19, 0x12, 0xC6, 0x53, 0x74, 0x03, 0xF0, 0xE4, 0xFB, 0xFD, 0x7F, 0x54, 0x7E, 0x01, 0x02,
+0x61, 0x41, 0x91, 0x23, 0x22, 0x7D, 0x17, 0x7F, 0xFF, 0x11, 0xDE, 0xE4, 0x90, 0x94, 0x00, 0xF0,
+0xA3, 0xF0, 0x90, 0x05, 0x22, 0xE0, 0x90, 0x94, 0x02, 0xF0, 0x7D, 0x47, 0x7F, 0xFF, 0x11, 0xDE,
+0x90, 0x05, 0xF8, 0xE0, 0x70, 0x12, 0xA3, 0xE0, 0x70, 0x0E, 0xA3, 0xE0, 0x70, 0x0A, 0xA3, 0xE0,
+0x70, 0x06, 0x12, 0xDA, 0x34, 0x7F, 0x01, 0x22, 0xD3, 0x90, 0x94, 0x01, 0xE0, 0x94, 0xE8, 0x90,
+0x94, 0x00, 0xE0, 0x94, 0x03, 0x40, 0x0D, 0x90, 0x01, 0xC0, 0xE0, 0x44, 0x20, 0xF0, 0x12, 0xDA,
+0x34, 0x7F, 0x00, 0x22, 0x7F, 0x32, 0x7E, 0x00, 0x12, 0x7C, 0x9F, 0x90, 0x94, 0x00, 0x12, 0xAD,
+0x64, 0x80, 0xBD, 0x12, 0xD9, 0x32, 0xB5, 0x07, 0x04, 0xEE, 0x54, 0xF1, 0xF0, 0x12, 0xC3, 0xCF,
+0xE4, 0x90, 0x92, 0x0C, 0xF0, 0x71, 0xCB, 0x12, 0xD9, 0x49, 0x12, 0xD9, 0x5F, 0xF5, 0x83, 0xE0,
+0xFA, 0xED, 0x12, 0x8F, 0xDC, 0xFC, 0x54, 0x03, 0xFD, 0xEC, 0x13, 0x13, 0x54, 0x07, 0xFB, 0xEE,
+0xC4, 0x54, 0x0F, 0x90, 0x93, 0xFF, 0xF0, 0xAF, 0x02, 0x12, 0x98, 0xC4, 0x51, 0x32, 0x12, 0x8F,
+0xDC, 0xB1, 0x52, 0x51, 0x32, 0xFF, 0x75, 0xF0, 0x0E, 0xA4, 0x24, 0x18, 0xF5, 0x82, 0xE4, 0x34,
+0x92, 0xF5, 0x83, 0xE0, 0x04, 0xF0, 0xB1, 0x31, 0xF1, 0xE3, 0xE4, 0xFD, 0xFF, 0x51, 0x30, 0xFD,
+0x7F, 0x01, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x93, 0xF4, 0xEF, 0xF0, 0xA3, 0xED,
+0xF0, 0xE4, 0xA3, 0xF0, 0x90, 0x93, 0xF6, 0xE0, 0xFF, 0xC3, 0x94, 0x03, 0x40, 0x02, 0xA1, 0x2C,
+0x90, 0x93, 0xF5, 0xE0, 0xFE, 0x12, 0xD2, 0x6B, 0xF5, 0x83, 0x75, 0xF0, 0x03, 0xEF, 0x12, 0xD9,
+0xFA, 0xE0, 0x90, 0x93, 0xF7, 0xF0, 0x90, 0x93, 0xF4, 0xE0, 0xFC, 0xB4, 0x02, 0x23, 0x90, 0x93,
+0xF7, 0xE0, 0xFD, 0xEE, 0x12, 0xD2, 0x5F, 0xF5, 0x83, 0xC0, 0x83, 0xC0, 0x82, 0x90, 0x93, 0xF6,
+0xE0, 0xD0, 0x82, 0xD0, 0x83, 0x12, 0xB1, 0x11, 0x80, 0x02, 0xC3, 0x33, 0xD8, 0xFC, 0x4D, 0x80,
+0x23, 0xEC, 0xB4, 0x01, 0x23, 0x12, 0xDA, 0x50, 0x12, 0xD2, 0x5F, 0xF5, 0x83, 0xC0, 0x83, 0xC0,
+0x82, 0x90, 0x93, 0xF6, 0xE0, 0xD0, 0x82, 0xD0, 0x83, 0x12, 0xB1, 0x11, 0x80, 0x02, 0xC3, 0x33,
+0xD8, 0xFC, 0xF4, 0x5F, 0x90, 0x93, 0xF7, 0xF0, 0x12, 0xDA, 0x50, 0x12, 0xD2, 0x6B, 0xF5, 0x83,
+0xC0, 0x83, 0xC0, 0x82, 0x90, 0x93, 0xF6, 0xE0, 0xD0, 0x82, 0xD0, 0x83, 0x75, 0xF0, 0x03, 0x12,
+0xD9, 0xFA, 0xEF, 0xF0, 0x90, 0x93, 0xF6, 0xE0, 0x04, 0xF0, 0x81, 0x94, 0xD0, 0xD0, 0x92, 0xAF,
+0x22, 0xEF, 0x75, 0xF0, 0x0E, 0xA4, 0x24, 0x19, 0xF5, 0x82, 0xE4, 0x34, 0x92, 0xF5, 0x83, 0xE0,
+0xFF, 0x7E, 0x00, 0x22, 0x75, 0xF0, 0x13, 0xA4, 0x24, 0x38, 0xF5, 0x82, 0xE4, 0x34, 0x92, 0xF5,
+0x83, 0xE0, 0xFE, 0x54, 0x03, 0xFF, 0xEE, 0x13, 0x13, 0x54, 0x07, 0xFD, 0xD3, 0x10, 0xAF, 0x01,
+0xC3, 0xC0, 0xD0, 0x90, 0x94, 0x10, 0xED, 0xF0, 0xE4, 0xA3, 0xF0, 0xEF, 0x14, 0x60, 0x02, 0xC1,
+0x3E, 0x90, 0x06, 0x03, 0xE0, 0x54, 0xFB, 0xF0, 0x90, 0x94, 0x10, 0xE0, 0xFB, 0xC4, 0x33, 0x54,
+0xE0, 0xFE, 0x90, 0x04, 0x42, 0xE0, 0x54, 0x9F, 0x4E, 0xFE, 0xF0, 0xE4, 0xFD, 0x12, 0xD3, 0xC8,
+0x90, 0x94, 0x11, 0xEF, 0xF0, 0x90, 0x04, 0x83, 0xF0, 0x90, 0x93, 0xDD, 0x12, 0x04, 0xF7, 0x00,
+0x00, 0x00, 0x01, 0x90, 0x93, 0xE1, 0x12, 0x04, 0xF7, 0x00, 0x00, 0x00, 0x01, 0xF1, 0x09, 0x12,
+0x04, 0xF7, 0x00, 0x00, 0x00, 0x01, 0x90, 0x93, 0xE1, 0x12, 0x04, 0xF7, 0x00, 0x00, 0x00, 0x01,
+0x7F, 0x00, 0x7E, 0x09, 0xF1, 0x0D, 0x12, 0x04, 0xF7, 0x00, 0x00, 0x00, 0x10, 0x12, 0x99, 0xC2,
+0xEF, 0x54, 0x03, 0xFF, 0xE4, 0x78, 0x01, 0x12, 0x04, 0xC5, 0x78, 0x04, 0xF1, 0xE8, 0x7F, 0x00,
+0x7E, 0x0A, 0xF1, 0x0D, 0x12, 0x04, 0xF7, 0x00, 0x00, 0x0C, 0x00, 0x12, 0x99, 0xC2, 0xEF, 0x54,
+0x03, 0xFF, 0xE4, 0x78, 0x0A, 0xF1, 0xE8, 0x7F, 0x00, 0x7E, 0x0D, 0xF1, 0x0D, 0x12, 0x04, 0xF7,
+0x0C, 0x00, 0x00, 0x00, 0x90, 0x94, 0x11, 0x12, 0x99, 0xC5, 0xEF, 0x54, 0x03, 0xFF, 0xE4, 0x78,
+0x1A, 0xF1, 0xE8, 0x7F, 0x18, 0xF1, 0x0B, 0x12, 0x04, 0xF7, 0x00, 0x00, 0x0C, 0x00, 0x90, 0x93,
+0xE1, 0x12, 0x04, 0xF7, 0x00, 0x00, 0x00, 0x00, 0x12, 0xDA, 0x29, 0x12, 0x04, 0xF7, 0x00, 0x00,
+0x0C, 0x00, 0x90, 0x93, 0xCF, 0x12, 0x04, 0xF7, 0x00, 0x00, 0x04, 0x00, 0x80, 0x59, 0x90, 0x06,
+0x03, 0xE0, 0x44, 0x04, 0xF0, 0x90, 0x93, 0xDD, 0x12, 0x04, 0xF7, 0x00, 0x00, 0x00, 0x01, 0x90,
+0x93, 0xE1, 0x12, 0x04, 0xF7, 0x00, 0x00, 0x00, 0x00, 0xF1, 0x09, 0x12, 0x04, 0xF7, 0x00, 0x00,
+0x00, 0x01, 0x90, 0x93, 0xE1, 0x12, 0x04, 0xF7, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x7E, 0x09,
+0xF1, 0x0D, 0x12, 0x04, 0xF7, 0x00, 0x00, 0x0C, 0x00, 0x90, 0x93, 0xE1, 0x12, 0x04, 0xF7, 0x00,
+0x00, 0x0C, 0x00, 0x12, 0xDA, 0x29, 0x12, 0x04, 0xF7, 0x00, 0x00, 0x0C, 0x00, 0x90, 0x93, 0xCF,
+0x12, 0x04, 0xF7, 0x00, 0x00, 0x0C, 0x00, 0x7D, 0x18, 0x12, 0x99, 0x35, 0xD0, 0xD0, 0x92, 0xAF,
+0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x93, 0xDB, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0,
+0x12, 0x70, 0x61, 0x90, 0x93, 0xE5, 0x12, 0x04, 0xEB, 0x90, 0x93, 0xDD, 0x12, 0x87, 0x58, 0x12,
+0x04, 0xA7, 0x90, 0x93, 0xE5, 0x12, 0x99, 0xBC, 0xC0, 0x04, 0xC0, 0x05, 0xC0, 0x06, 0xC0, 0x07,
+0x90, 0x93, 0xDD, 0x12, 0x87, 0x58, 0x90, 0x93, 0xE1, 0x12, 0x99, 0xBC, 0xD0, 0x03, 0xD0, 0x02,
+0xD0, 0x01, 0xD0, 0x00, 0x12, 0x87, 0x4B, 0x90, 0x93, 0xE9, 0x12, 0x04, 0xEB, 0x90, 0x93, 0xE9,
+0x12, 0x87, 0x58, 0x90, 0x91, 0x66, 0x12, 0x04, 0xEB, 0x90, 0x93, 0xDB, 0xE0, 0xFE, 0xA3, 0xE0,
+0xFF, 0x12, 0x71, 0x18, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x7F, 0x00, 0x7E, 0x08, 0xD1, 0xA1, 0x90,
+0x93, 0xDD, 0x22, 0x74, 0x9C, 0x25, 0x7A, 0xF5, 0x82, 0xE4, 0x34, 0x92, 0xF5, 0x83, 0x22, 0xE4,
+0x75, 0xF0, 0x01, 0x12, 0x07, 0x0A, 0x90, 0x92, 0x0A, 0xE0, 0xC3, 0x13, 0x54, 0x07, 0x75, 0xF0,
+0x13, 0xA4, 0x24, 0x3E, 0xF5, 0x82, 0xE4, 0x34, 0x92, 0xF5, 0x83, 0x22, 0xE4, 0x90, 0x93, 0x7E,
+0xF0, 0x90, 0x92, 0x0A, 0xE0, 0xFF, 0x30, 0xE0, 0x67, 0xF1, 0xDC, 0x54, 0x07, 0x20, 0xE0, 0x60,
+0xEF, 0xC3, 0x13, 0x54, 0x07, 0xFF, 0xF1, 0x2E, 0xE0, 0xFE, 0x30, 0xE0, 0x53, 0xEF, 0xF1, 0x2E,
+0xEE, 0x54, 0xFE, 0xF0, 0xEF, 0xF1, 0x2E, 0xE0, 0x13, 0x13, 0x54, 0x3F, 0x30, 0xE0, 0x0B, 0x90,
+0x92, 0x76, 0xF1, 0x1F, 0xE0, 0x54, 0xFB, 0x12, 0xC4, 0xC1, 0x90, 0x04, 0xE0, 0xE0, 0x30, 0xE1,
+0x24, 0xF1, 0xF6, 0xF1, 0x26, 0xE0, 0x44, 0x02, 0xF0, 0xE4, 0x90, 0x92, 0xB2, 0xF0, 0x51, 0x32,
+0xFD, 0x7F, 0x02, 0x12, 0xD2, 0x77, 0x90, 0x93, 0x7E, 0xE0, 0x60, 0x14, 0xE4, 0x90, 0x92, 0x74,
+0xF0, 0xA3, 0xF0, 0x01, 0xE9, 0x90, 0x92, 0x74, 0xF1, 0x1F, 0xE0, 0x54, 0xFD, 0xF0, 0xF1, 0xD7,
+0x22, 0x8F, 0x5E, 0x71, 0xC5, 0xE5, 0x5E, 0x12, 0xD9, 0x60, 0xF5, 0x83, 0xE0, 0xFC, 0x12, 0x8F,
+0xDA, 0x12, 0x98, 0xAC, 0x12, 0x8F, 0xDA, 0xB1, 0x52, 0xE5, 0x5E, 0xB1, 0x32, 0xF1, 0xE3, 0xF1,
+0xD7, 0xAD, 0x5E, 0x7F, 0x01, 0x81, 0x82, 0xE4, 0xFD, 0xFF, 0x01, 0xDE, 0x90, 0x92, 0x72, 0xE0,
+0xC4, 0x13, 0x22, 0xE4, 0xFB, 0xFD, 0x61, 0x1D, 0x12, 0x04, 0xD8, 0x90, 0x93, 0xE1, 0x02, 0x04,
+0xEB, 0xE4, 0xFD, 0x01, 0x9E, 0xF0, 0x90, 0x92, 0x0C, 0x74, 0x05, 0xF0, 0x22, 0x90, 0x93, 0x06,
+0x12, 0x87, 0x79, 0x90, 0x04, 0x24, 0xE0, 0xF5, 0x5B, 0xE4, 0xFF, 0x12, 0x8B, 0xD1, 0x11, 0x2D,
+0x75, 0xF0, 0x0E, 0xA4, 0x24, 0x19, 0xF5, 0x82, 0xE4, 0x34, 0x92, 0xF5, 0x83, 0xEE, 0xF0, 0x11,
+0x2D, 0x11, 0x3A, 0xF5, 0x83, 0xEE, 0xF0, 0x0F, 0xEF, 0xB4, 0x03, 0xDF, 0x22, 0x8F, 0x82, 0x75,
+0x83, 0x00, 0x12, 0x03, 0x0F, 0x25, 0x5B, 0xFE, 0xEF, 0x22, 0x75, 0xF0, 0x13, 0xA4, 0x24, 0x40,
+0xF5, 0x82, 0xE4, 0x34, 0x92, 0x22, 0x8F, 0x5F, 0x90, 0x05, 0x22, 0xE0, 0x90, 0x93, 0x0E, 0xF0,
+0x12, 0x93, 0xC5, 0xEF, 0x64, 0x01, 0x70, 0x39, 0xE5, 0x5F, 0x12, 0xD8, 0xFD, 0xE0, 0xFC, 0xE5,
+0x5F, 0x11, 0x9E, 0xE5, 0x5F, 0x12, 0x95, 0x44, 0x12, 0x97, 0xDC, 0x54, 0x07, 0x20, 0xE0, 0x17,
+0xE5, 0x5F, 0x12, 0xC7, 0x85, 0x54, 0x07, 0xFF, 0x60, 0x03, 0xBF, 0x02, 0x0A, 0xE5, 0x5F, 0x11,
+0x3A, 0x12, 0x95, 0x3D, 0x12, 0x97, 0xE3, 0xAD, 0x5F, 0x7F, 0x01, 0x12, 0xD2, 0x77, 0x7F, 0x01,
+0x22, 0x90, 0x93, 0x0E, 0xE0, 0xFF, 0x7D, 0x49, 0x12, 0x90, 0xDE, 0x7F, 0x00, 0x22, 0x75, 0xF0,
+0x13, 0xA4, 0x24, 0x38, 0xF5, 0x82, 0xE4, 0x34, 0x92, 0xF5, 0x83, 0xE0, 0xFE, 0x54, 0x03, 0xFD,
+0xEE, 0x13, 0x13, 0x54, 0x07, 0xFB, 0x90, 0x92, 0x0A, 0xE0, 0xFE, 0xC4, 0x54, 0x0F, 0x90, 0x93,
+0xFF, 0xF0, 0xAF, 0x04, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x93, 0xFC, 0xEF, 0xF0,
+0xED, 0x64, 0x01, 0x70, 0x31, 0xEB, 0xB4, 0x01, 0x07, 0xE0, 0x24, 0x02, 0xF5, 0x0E, 0x80, 0x08,
+0x90, 0x93, 0xFC, 0xE0, 0x24, 0xFE, 0xF5, 0x0E, 0x90, 0x93, 0xCB, 0x12, 0x04, 0xF7, 0x00, 0x00,
+0x00, 0xFF, 0xAF, 0x0E, 0x31, 0xAF, 0x31, 0x35, 0x90, 0x93, 0xCB, 0x12, 0x04, 0xF7, 0x00, 0x00,
+0x00, 0xFF, 0xAF, 0x0E, 0x80, 0x22, 0x90, 0x93, 0xCB, 0x12, 0x04, 0xF7, 0x00, 0x00, 0x00, 0xFF,
+0x90, 0x93, 0xFC, 0x31, 0xC5, 0x31, 0xB3, 0x31, 0x35, 0x90, 0x93, 0xCB, 0x12, 0x04, 0xF7, 0x00,
+0x00, 0x00, 0xFF, 0x90, 0x93, 0xFC, 0xE0, 0xFF, 0x31, 0xAF, 0x7C, 0x00, 0x7F, 0x01, 0x31, 0x39,
+0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x7C, 0x00, 0xE4, 0xFF, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0,
+0x90, 0x93, 0xC9, 0xEC, 0xF0, 0xA3, 0xED, 0xF0, 0x90, 0x93, 0xC8, 0xEF, 0xF0, 0xA3, 0xA3, 0xE0,
+0xFD, 0x12, 0x7B, 0xE0, 0x90, 0x93, 0xD3, 0x12, 0x04, 0xEB, 0x90, 0x93, 0xCB, 0x12, 0x87, 0x58,
+0x12, 0x04, 0xA7, 0x90, 0x93, 0xD3, 0x31, 0xBC, 0xC0, 0x04, 0xC0, 0x05, 0xC0, 0x06, 0xC0, 0x07,
+0x90, 0x93, 0xCB, 0x12, 0x87, 0x58, 0x90, 0x93, 0xCF, 0x31, 0xBC, 0xD0, 0x03, 0xD0, 0x02, 0xD0,
+0x01, 0xD0, 0x00, 0x12, 0x87, 0x4B, 0x90, 0x93, 0xD7, 0x12, 0x04, 0xEB, 0x90, 0x93, 0xC9, 0xA3,
+0xE0, 0xFD, 0xC0, 0x05, 0x90, 0x93, 0xD7, 0x12, 0x87, 0x58, 0x90, 0x8D, 0x9D, 0x12, 0x04, 0xEB,
+0x90, 0x93, 0xC8, 0xE0, 0xFF, 0xD0, 0x05, 0x12, 0x78, 0xDD, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xE4,
+0xFC, 0xFD, 0xFE, 0x90, 0x93, 0xCF, 0x12, 0x04, 0xEB, 0x7D, 0x18, 0x22, 0x12, 0x87, 0x64, 0x02,
+0x87, 0x3E, 0x90, 0x94, 0x10, 0xE0, 0xFF, 0xE4, 0xFC, 0xFD, 0xFE, 0x22, 0x90, 0x85, 0xBC, 0xE0,
+0x30, 0xE0, 0x06, 0x90, 0x85, 0xBE, 0x74, 0x01, 0xF0, 0x90, 0x85, 0xC5, 0xE0, 0x70, 0x02, 0x41,
+0x85, 0x90, 0x85, 0xDC, 0xE0, 0x04, 0xF0, 0x90, 0x05, 0x61, 0x31, 0xC5, 0x78, 0x08, 0x12, 0x04,
+0xD8, 0xA8, 0x04, 0xA9, 0x05, 0xAA, 0x06, 0xAB, 0x07, 0x90, 0x05, 0x60, 0x31, 0xC5, 0x12, 0x87,
+0x4B, 0xC0, 0x04, 0xC0, 0x05, 0xC0, 0x06, 0xC0, 0x07, 0x90, 0x05, 0x62, 0x31, 0xC5, 0x78, 0x10,
+0x12, 0x04, 0xD8, 0xD0, 0x03, 0xD0, 0x02, 0xD0, 0x01, 0xD0, 0x00, 0x12, 0x87, 0x4B, 0xC0, 0x04,
+0xC0, 0x05, 0xC0, 0x06, 0xC0, 0x07, 0xA3, 0x31, 0xC5, 0x78, 0x18, 0x12, 0x04, 0xD8, 0xD0, 0x03,
+0xD0, 0x02, 0xD0, 0x01, 0xD0, 0x00, 0x12, 0x87, 0x4B, 0x90, 0x85, 0xFC, 0xEE, 0xF0, 0xA3, 0xEF,
+0xF0, 0x90, 0x92, 0xC0, 0xE0, 0x54, 0xFE, 0xF0, 0xE0, 0xC3, 0x13, 0x30, 0xE0, 0x0E, 0x12, 0xCA,
+0x1D, 0xFB, 0x12, 0x51, 0x7D, 0x90, 0x92, 0xC0, 0xE0, 0x54, 0xFD, 0xF0, 0x51, 0xF0, 0x13, 0x54,
+0x1F, 0x30, 0xE0, 0x0A, 0x90, 0x01, 0x3B, 0xE0, 0x30, 0xE4, 0x03, 0x12, 0xA3, 0x04, 0x90, 0x94,
+0x13, 0xE0, 0x04, 0xF0, 0xE0, 0xC3, 0x94, 0x80, 0x40, 0x0B, 0x90, 0x01, 0x98, 0xE0, 0x54, 0xFE,
+0xF0, 0xE0, 0x44, 0x01, 0xF0, 0x12, 0x5D, 0x1F, 0x12, 0x6E, 0x1D, 0xE4, 0x90, 0x88, 0xE0, 0xF0,
+0x7F, 0x01, 0x12, 0xC1, 0xA2, 0x12, 0xD6, 0x72, 0xF1, 0x1C, 0x30, 0xE0, 0x52, 0x90, 0x88, 0x76,
+0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x7C, 0x00, 0x7D, 0x64, 0x12, 0x03, 0x82, 0x90, 0x88, 0xCA, 0xE0,
+0x6E, 0x70, 0x03, 0xA3, 0xE0, 0x6F, 0x60, 0x0A, 0x90, 0x88, 0xCA, 0xE4, 0x75, 0xF0, 0x01, 0x02,
+0x07, 0x0A, 0x90, 0x88, 0x7A, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x90, 0x88, 0x88, 0xE0, 0xB5, 0x06,
+0x14, 0xA3, 0xE0, 0xB5, 0x07, 0x0F, 0xEF, 0x4E, 0x60, 0x0B, 0x90, 0x01, 0xC7, 0x74, 0x31, 0xF0,
+0x7F, 0x01, 0x02, 0x5F, 0xE9, 0x12, 0xAD, 0x8E, 0xE4, 0x90, 0x88, 0xCA, 0xF0, 0xA3, 0xF0, 0x22,
+0x90, 0x85, 0xC2, 0xE0, 0xFF, 0x13, 0x13, 0x22, 0x7D, 0x01, 0x7F, 0x04, 0xD3, 0x10, 0xAF, 0x01,
+0xC3, 0xC0, 0xD0, 0x90, 0x94, 0x16, 0xED, 0xF0, 0x90, 0x85, 0xC1, 0xE0, 0xFE, 0xC4, 0x13, 0x13,
+0x54, 0x03, 0x30, 0xE0, 0x02, 0x81, 0x56, 0xEE, 0x12, 0x8F, 0x66, 0x30, 0xE0, 0x02, 0x81, 0x56,
+0x90, 0x85, 0xC8, 0xE0, 0xFE, 0x6F, 0x70, 0x02, 0x81, 0x56, 0xEF, 0x70, 0x02, 0x61, 0xC2, 0x24,
+0xFE, 0x70, 0x02, 0x61, 0xFF, 0x24, 0xFE, 0x60, 0x4D, 0x24, 0xFC, 0x70, 0x02, 0x81, 0x3E, 0x24,
+0xFC, 0x60, 0x02, 0x81, 0x4F, 0xEE, 0xB4, 0x0E, 0x03, 0x12, 0x74, 0x93, 0x90, 0x85, 0xC8, 0xE0,
+0x70, 0x05, 0x7F, 0x01, 0x12, 0x79, 0x80, 0x90, 0x85, 0xC8, 0xE0, 0xB4, 0x06, 0x03, 0x12, 0x73,
+0x8E, 0x90, 0x85, 0xC8, 0xE0, 0xB4, 0x04, 0x0F, 0x90, 0x94, 0x16, 0xE0, 0xFF, 0x60, 0x05, 0x12,
+0x6D, 0x4C, 0x80, 0x03, 0x12, 0x79, 0x61, 0x90, 0x85, 0xC8, 0xE0, 0x64, 0x08, 0x60, 0x02, 0x81,
+0x4F, 0x12, 0x7A, 0xB9, 0x81, 0x4F, 0x90, 0x85, 0xC8, 0xE0, 0x70, 0x05, 0x7F, 0x01, 0x12, 0x79,
+0x80, 0x90, 0x85, 0xC8, 0xE0, 0xB4, 0x06, 0x03, 0x12, 0x73, 0x8E, 0x90, 0x85, 0xC8, 0xE0, 0xB4,
+0x0E, 0x08, 0x91, 0x5B, 0xBF, 0x01, 0x03, 0x12, 0x74, 0x93, 0x90, 0x85, 0xC8, 0xE0, 0x64, 0x0C,
+0x60, 0x02, 0x81, 0x4F, 0x91, 0x5B, 0xEF, 0x64, 0x01, 0x60, 0x02, 0x81, 0x4F, 0x12, 0x70, 0x9E,
+0x81, 0x4F, 0x90, 0x85, 0xC8, 0xE0, 0xB4, 0x0E, 0x08, 0x91, 0x5B, 0xBF, 0x01, 0x03, 0x12, 0x74,
+0x93, 0x90, 0x85, 0xC8, 0xE0, 0xB4, 0x06, 0x03, 0x12, 0x73, 0x8E, 0x90, 0x85, 0xC8, 0xE0, 0xB4,
+0x0C, 0x08, 0x91, 0x5B, 0xBF, 0x01, 0x03, 0x12, 0x70, 0x9E, 0x90, 0x85, 0xC8, 0xE0, 0x64, 0x04,
+0x70, 0x5D, 0x12, 0xD4, 0xE0, 0xEF, 0x64, 0x01, 0x70, 0x55, 0x12, 0x77, 0xFE, 0x80, 0x50, 0x90,
+0x85, 0xC8, 0xE0, 0xB4, 0x0E, 0x08, 0x91, 0x5B, 0xBF, 0x01, 0x03, 0x12, 0x74, 0x93, 0x90, 0x85,
+0xC8, 0xE0, 0xB4, 0x06, 0x03, 0x12, 0x73, 0x8E, 0x90, 0x85, 0xC8, 0xE0, 0xB4, 0x0C, 0x08, 0x91,
+0x5B, 0xBF, 0x01, 0x03, 0x12, 0x70, 0x9E, 0x90, 0x85, 0xC8, 0xE0, 0x70, 0x05, 0x7F, 0x01, 0x12,
+0x79, 0x80, 0x90, 0x85, 0xC8, 0xE0, 0xB4, 0x04, 0x16, 0x12, 0x79, 0xF3, 0x80, 0x11, 0x90, 0x85,
+0xC8, 0xE0, 0xB4, 0x0C, 0x0A, 0x51, 0xF0, 0x54, 0x3F, 0x30, 0xE0, 0x03, 0x12, 0x7A, 0x8A, 0x90,
+0x85, 0xC8, 0x12, 0xD9, 0xD8, 0xF0, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3,
+0xC0, 0xD0, 0x12, 0x7A, 0x29, 0xEF, 0x64, 0x01, 0x60, 0x05, 0x75, 0x0F, 0x01, 0x80, 0x24, 0x90,
+0x85, 0xC1, 0xE0, 0x13, 0x13, 0x13, 0x54, 0x1F, 0x30, 0xE0, 0x05, 0x75, 0x0F, 0x02, 0x80, 0x13,
+0x90, 0x85, 0xC7, 0xE0, 0xD3, 0x94, 0x04, 0x40, 0x05, 0x75, 0x0F, 0x08, 0x80, 0x05, 0x12, 0xD5,
+0x58, 0x80, 0x0E, 0x90, 0x01, 0xB9, 0x74, 0x02, 0xF0, 0x90, 0x01, 0xB8, 0xE5, 0x0F, 0xF0, 0x7F,
+0x00, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x8B, 0x5B, 0x8A,
+0x5C, 0x89, 0x5D, 0x90, 0x05, 0x27, 0xE0, 0xF5, 0x5E, 0x8B, 0x1B, 0x8A, 0x1C, 0x89, 0x1D, 0x75,
+0x1E, 0x01, 0x7B, 0x01, 0x7A, 0x85, 0x79, 0xBC, 0x12, 0x6A, 0x21, 0x12, 0x8F, 0x5B, 0x12, 0x02,
+0xF6, 0xFF, 0xC3, 0x13, 0x20, 0xE0, 0x02, 0xA1, 0x6A, 0x90, 0x85, 0xBC, 0xE0, 0x30, 0xE0, 0x78,
+0xD1, 0x1B, 0x75, 0x5E, 0x21, 0x90, 0x85, 0xBC, 0xE0, 0x13, 0x13, 0x54, 0x3F, 0x30, 0xE0, 0x04,
+0xD1, 0xF1, 0x80, 0x0D, 0xE4, 0x90, 0x85, 0xBD, 0xF0, 0xA3, 0xF0, 0x7D, 0x40, 0xFF, 0x12, 0x7C,
+0x41, 0xD1, 0x2A, 0x13, 0x54, 0x1F, 0x30, 0xE0, 0x03, 0x43, 0x5E, 0x12, 0xEF, 0xC4, 0x54, 0x0F,
+0x30, 0xE0, 0x03, 0x43, 0x5E, 0x14, 0x90, 0x85, 0xBC, 0xE0, 0xC4, 0x13, 0x54, 0x07, 0x30, 0xE0,
+0x03, 0x43, 0x5E, 0x80, 0x90, 0x85, 0xBC, 0xF1, 0x1F, 0x20, 0xE0, 0x03, 0x43, 0x5E, 0x40, 0xD1,
+0x14, 0x90, 0x85, 0xBF, 0xE0, 0x70, 0x05, 0x7F, 0x01, 0x12, 0xA3, 0x81, 0x90, 0x85, 0xBC, 0xD1,
+0x22, 0x30, 0xE0, 0x04, 0x7F, 0x04, 0x80, 0x0B, 0xD1, 0x32, 0xEF, 0x60, 0x04, 0x7F, 0x01, 0x80,
+0x02, 0x7F, 0x02, 0x12, 0xA3, 0x81, 0xA1, 0xDE, 0xD1, 0x11, 0x90, 0x85, 0xBF, 0xE0, 0x64, 0x04,
+0x60, 0x02, 0xC1, 0x0C, 0xFF, 0x12, 0xA3, 0x81, 0xC1, 0x0C, 0x90, 0x85, 0xBC, 0xE0, 0x30, 0xE0,
+0x75, 0xD1, 0x1B, 0x43, 0x5E, 0x31, 0x90, 0x85, 0xBC, 0xE0, 0x13, 0x13, 0x54, 0x3F, 0x30, 0xE0,
+0x04, 0xD1, 0xF1, 0x80, 0x07, 0x7D, 0x40, 0xE4, 0xFF, 0x12, 0x7C, 0x41, 0xD1, 0x2A, 0x13, 0x54,
+0x1F, 0x30, 0xE0, 0x03, 0x43, 0x5E, 0x02, 0xEF, 0xC4, 0x54, 0x0F, 0x30, 0xE0, 0x03, 0x43, 0x5E,
+0x04, 0xD1, 0x14, 0x90, 0x85, 0xBC, 0xD1, 0x22, 0x30, 0xE0, 0x0A, 0xF1, 0x3F, 0x60, 0x2F, 0xE4,
+0xFD, 0x7F, 0x02, 0x80, 0x1D, 0xF1, 0xDF, 0x90, 0x85, 0xC0, 0xE0, 0xB4, 0x02, 0x18, 0x12, 0x7A,
+0xA2, 0xD1, 0x32, 0xBF, 0x01, 0x09, 0x90, 0x85, 0xC7, 0xE0, 0xFF, 0x7D, 0x01, 0x80, 0x03, 0xE4,
+0xFD, 0xFF, 0x51, 0xFC, 0x80, 0x08, 0x90, 0x85, 0xC8, 0xE0, 0x90, 0x85, 0xC0, 0xF0, 0x90, 0x05,
+0x40, 0x74, 0x22, 0xF0, 0x80, 0x26, 0xD1, 0x11, 0x90, 0x85, 0xC0, 0xE0, 0xB4, 0x02, 0x06, 0x7D,
+0x01, 0x7F, 0x04, 0x80, 0x0B, 0x90, 0x85, 0xC0, 0xE0, 0xB4, 0x08, 0x06, 0x7D, 0x01, 0x7F, 0x0C,
+0x51, 0xFC, 0xF1, 0xA3, 0x90, 0x85, 0xC7, 0xF1, 0x9D, 0x12, 0xAB, 0x17, 0xD0, 0xD0, 0x92, 0xAF,
+0x22, 0x75, 0x5E, 0x01, 0x90, 0x05, 0x27, 0xE5, 0x5E, 0xF0, 0x22, 0x7D, 0x03, 0x7F, 0x02, 0x02,
+0x7B, 0xFD, 0xE0, 0xFF, 0xC4, 0x13, 0x13, 0x54, 0x03, 0x22, 0x90, 0x85, 0xBC, 0xE0, 0xFF, 0x13,
+0x13, 0x22, 0x90, 0x05, 0x43, 0xE0, 0x7F, 0x00, 0x30, 0xE7, 0x02, 0x7F, 0x01, 0x22, 0xE4, 0xF5,
+0x78, 0x90, 0x85, 0xC5, 0xE0, 0x70, 0x02, 0xC1, 0xDD, 0xF1, 0xD8, 0x64, 0x01, 0x60, 0x02, 0xC1,
+0xDD, 0x12, 0xD9, 0x0B, 0x12, 0xA2, 0xB5, 0x60, 0x22, 0x24, 0xFE, 0x60, 0x03, 0x04, 0x70, 0x1E,
+0x90, 0x85, 0xCC, 0xE0, 0x14, 0xF0, 0xE0, 0xFF, 0x60, 0x06, 0x90, 0x85, 0xCE, 0xE0, 0x60, 0x0E,
+0xEF, 0x70, 0x08, 0x90, 0x85, 0xCB, 0xE0, 0xA3, 0xF0, 0x80, 0x00, 0x75, 0x78, 0x01, 0x90, 0x85,
+0xBC, 0xE0, 0x30, 0xE0, 0x11, 0x90, 0x85, 0xC0, 0xE0, 0xB4, 0x02, 0x03, 0xE4, 0xF5, 0x78, 0xD1,
+0x32, 0xEF, 0x70, 0x02, 0xF5, 0x78, 0xE5, 0x78, 0x60, 0x43, 0x90, 0x85, 0xC8, 0xE0, 0x20, 0xE2,
+0x02, 0x51, 0xF8, 0x12, 0xC4, 0xB9, 0x90, 0x85, 0xCE, 0xE0, 0x60, 0x04, 0x64, 0x01, 0x70, 0x17,
+0xE4, 0x90, 0x91, 0x6E, 0xF0, 0x90, 0x85, 0xCE, 0xE0, 0xD1, 0xDE, 0x90, 0x91, 0x6F, 0x12, 0xC3,
+0xFE, 0x90, 0x85, 0xCE, 0xE0, 0x80, 0x10, 0xE4, 0x90, 0x91, 0x6E, 0xD1, 0xE5, 0xD1, 0xDE, 0x90,
+0x91, 0x6F, 0x12, 0xC3, 0xFE, 0xD1, 0xE6, 0xD1, 0xDE, 0x90, 0x85, 0xDE, 0xF0, 0x22, 0xFF, 0x90,
+0x85, 0xCD, 0xE0, 0x2F, 0x22, 0xF0, 0x90, 0x85, 0xCE, 0xE0, 0x75, 0xF0, 0x03, 0xA4, 0x24, 0xFE,
+0x22, 0x90, 0x01, 0x34, 0x74, 0x40, 0xF0, 0xFD, 0xE4, 0xFF, 0x12, 0x7C, 0xA9, 0x43, 0x5E, 0x08,
+0x22, 0xAE, 0x07, 0xD1, 0x32, 0xBF, 0x01, 0x11, 0x90, 0x85, 0xBC, 0xF1, 0x1F, 0x20, 0xE0, 0x09,
+0xAF, 0x06, 0x7D, 0x01, 0x51, 0xFC, 0x7F, 0x01, 0x22, 0x7F, 0x00, 0x22, 0x90, 0x86, 0x72, 0xE0,
+0xC4, 0x13, 0x13, 0x54, 0x03, 0x22, 0x90, 0x85, 0xBC, 0xD1, 0x22, 0x30, 0xE0, 0x0A, 0xF1, 0x3F,
+0x60, 0x06, 0x7D, 0x01, 0x7F, 0x02, 0x51, 0xFC, 0xF1, 0x3F, 0x60, 0x02, 0xF1, 0x46, 0x22, 0x90,
+0x85, 0xC0, 0xE0, 0x64, 0x02, 0x22, 0x90, 0x85, 0xC5, 0xE0, 0x64, 0x02, 0x60, 0x0F, 0xF1, 0xBF,
+0x60, 0x0B, 0x12, 0x7A, 0x29, 0xEF, 0x70, 0x05, 0xFD, 0x7F, 0x0C, 0x51, 0xFC, 0x22, 0x90, 0x85,
+0xC5, 0xE0, 0x70, 0x07, 0x90, 0x85, 0xBC, 0xE0, 0x30, 0xE0, 0x10, 0x90, 0x85, 0xBC, 0xE0, 0x30,
+0xE0, 0x07, 0xD1, 0x32, 0xBF, 0x01, 0x04, 0x80, 0xCD, 0xF1, 0x7C, 0x22, 0x90, 0x85, 0xC5, 0xE0,
+0x64, 0x01, 0x70, 0x18, 0xF1, 0xBF, 0x60, 0x0C, 0xE4, 0xFD, 0x7F, 0x0C, 0x51, 0xFC, 0x12, 0x97,
+0xD7, 0x02, 0x6B, 0x98, 0x90, 0x85, 0xC8, 0xE0, 0x70, 0x02, 0x51, 0xF8, 0x22, 0xE0, 0xFF, 0x7D,
+0x01, 0x41, 0xFC, 0x12, 0x7A, 0x29, 0xEF, 0x70, 0x02, 0xF1, 0x7C, 0x22, 0x90, 0x86, 0x72, 0xD1,
+0x22, 0x30, 0xE0, 0x03, 0x12, 0xA6, 0x65, 0x22, 0x90, 0x85, 0xC9, 0xE0, 0x44, 0x01, 0xF0, 0x90,
+0x85, 0xC3, 0xE0, 0x54, 0x0F, 0x22, 0x90, 0x85, 0xBC, 0xE0, 0x90, 0x85, 0xC7, 0x30, 0xE0, 0x04,
+0xE0, 0xFF, 0xE1, 0x01, 0x80, 0xC7, 0x80, 0xD4, 0xE4, 0xFF, 0x12, 0x77, 0x39, 0xEF, 0x22, 0x90,
+0x05, 0x27, 0xE0, 0x44, 0x40, 0xF0, 0x22, 0x12, 0x97, 0xD7, 0xF1, 0xDF, 0x90, 0x85, 0xBF, 0x74,
+0x01, 0xF0, 0x22, 0x80, 0xF7, 0x12, 0xA0, 0x4F, 0x90, 0x92, 0x3C, 0x12, 0x8F, 0xB9, 0x90, 0x92,
+0x3D, 0x12, 0x8E, 0x8F, 0x90, 0x92, 0x4F, 0xF0, 0x12, 0x8F, 0xCD, 0x90, 0x92, 0x50, 0x12, 0x8F,
+0xEB, 0x90, 0x92, 0x62, 0x12, 0x8F, 0xF2, 0x90, 0x92, 0x63, 0xF0, 0x22, 0x11, 0x4F, 0xFF, 0x54,
+0x01, 0xC4, 0x33, 0x54, 0xE0, 0xFE, 0x90, 0x92, 0xA9, 0xE0, 0x54, 0xDF, 0x4E, 0xF0, 0xEF, 0x54,
+0xFE, 0xC3, 0x13, 0xFF, 0x90, 0x92, 0xA8, 0xE0, 0x54, 0x80, 0x12, 0x8F, 0xB8, 0x90, 0x92, 0xAA,
+0x12, 0x8E, 0x8F, 0x90, 0x92, 0xAB, 0xF0, 0x12, 0x8F, 0xCD, 0x90, 0x92, 0xAC, 0xF0, 0x22, 0x8B,
+0x5B, 0x8A, 0x5C, 0x89, 0x5D, 0x02, 0x02, 0xF6, 0x12, 0x02, 0xF6, 0xFF, 0x90, 0x92, 0x03, 0xF0,
+0xBF, 0x01, 0x07, 0x11, 0x6B, 0xE4, 0x90, 0x92, 0x03, 0xF0, 0x22, 0x31, 0x1B, 0x7F, 0xF5, 0x7E,
+0x01, 0x12, 0x64, 0x37, 0xBF, 0x01, 0x06, 0x90, 0x93, 0x06, 0xE0, 0xA3, 0xF0, 0x31, 0x1B, 0x7F,
+0xF6, 0x7E, 0x01, 0x12, 0x64, 0x37, 0xBF, 0x01, 0x08, 0x90, 0x93, 0x06, 0xE0, 0x90, 0x93, 0x08,
+0xF0, 0x31, 0x1B, 0x7F, 0xF4, 0x7E, 0x01, 0x12, 0x64, 0x37, 0xBF, 0x01, 0x08, 0x90, 0x93, 0x06,
+0xE0, 0x90, 0x93, 0x09, 0xF0, 0x31, 0x1B, 0x7F, 0xF3, 0x7E, 0x01, 0x12, 0x64, 0x37, 0xBF, 0x01,
+0x08, 0x90, 0x93, 0x06, 0xE0, 0x90, 0x93, 0x0A, 0xF0, 0x31, 0x1B, 0x7F, 0xF2, 0x7E, 0x01, 0x12,
+0x64, 0x37, 0xBF, 0x01, 0x08, 0x90, 0x93, 0x06, 0xE0, 0x90, 0x93, 0x0B, 0xF0, 0x90, 0x93, 0x07,
+0xE0, 0xFF, 0xA3, 0xE0, 0xFD, 0xA3, 0xE0, 0xFB, 0xA3, 0xE0, 0x90, 0x93, 0x0F, 0xF0, 0x90, 0x93,
+0x0B, 0xE0, 0x90, 0x93, 0x10, 0xF0, 0x90, 0x93, 0x11, 0x74, 0x12, 0xF0, 0x90, 0x93, 0x1F, 0x74,
+0x05, 0xF0, 0x90, 0x93, 0x13, 0xEF, 0xF0, 0xA3, 0xED, 0xF0, 0xA3, 0xEB, 0xF0, 0x90, 0x93, 0x0F,
+0xE0, 0x90, 0x93, 0x16, 0xF0, 0x90, 0x93, 0x10, 0xE0, 0x90, 0x93, 0x17, 0xF0, 0x7B, 0x01, 0x7A,
+0x93, 0x79, 0x11, 0x12, 0x5E, 0x10, 0x7F, 0x04, 0x02, 0x87, 0xBB, 0x7B, 0x01, 0x7A, 0x93, 0x79,
+0x06, 0x22, 0x12, 0x02, 0xF6, 0x54, 0x01, 0xFF, 0x90, 0x92, 0xBF, 0xE0, 0x54, 0xFE, 0x4F, 0xF0,
+0x22, 0x12, 0x02, 0xF6, 0x90, 0x86, 0x71, 0xF0, 0x22, 0xF1, 0x57, 0x90, 0x92, 0x04, 0xF1, 0x4F,
+0x54, 0x02, 0xFF, 0xEE, 0x54, 0xFD, 0x12, 0x8F, 0xB8, 0x90, 0x92, 0x05, 0x12, 0x8E, 0x8F, 0x90,
+0x92, 0x06, 0xF0, 0x51, 0xFA, 0x90, 0x92, 0x04, 0xE0, 0x54, 0x01, 0xFF, 0xD3, 0x10, 0xAF, 0x01,
+0xC3, 0xC0, 0xD0, 0xEF, 0x64, 0x01, 0x70, 0x1A, 0x31, 0xA5, 0x60, 0x0A, 0x31, 0x9E, 0x12, 0x7B,
+0xFD, 0x51, 0xF2, 0xF0, 0x80, 0x07, 0x31, 0x9E, 0x12, 0x7B, 0xBF, 0x71, 0x04, 0x12, 0x7A, 0x8A,
+0x80, 0x17, 0x31, 0xA5, 0x60, 0x07, 0x31, 0x9E, 0x12, 0x7B, 0xFD, 0x80, 0x05, 0x31, 0x9E, 0x12,
+0x7B, 0xBF, 0x51, 0xBF, 0x51, 0xC6, 0x12, 0x7A, 0xB9, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x74, 0x10,
+0xF0, 0xFD, 0x7F, 0x03, 0x22, 0x90, 0x92, 0x06, 0xE0, 0x90, 0x01, 0x3F, 0x22, 0x12, 0x9F, 0xD8,
+0x64, 0x01, 0x60, 0x02, 0x41, 0x99, 0x90, 0x85, 0xC5, 0xE0, 0x70, 0x02, 0x41, 0x99, 0x90, 0x05,
+0x63, 0xE0, 0x90, 0x92, 0xC5, 0xF0, 0x90, 0x05, 0x62, 0xE0, 0x90, 0x92, 0xC6, 0xF0, 0x90, 0x05,
+0x61, 0xE0, 0x90, 0x92, 0xC7, 0xF0, 0x90, 0x05, 0x60, 0xE0, 0x90, 0x92, 0xC8, 0xF0, 0xF1, 0xD6,
+0xF0, 0x90, 0x85, 0xC9, 0xE0, 0x54, 0xEC, 0x51, 0xB5, 0x24, 0xFD, 0x50, 0x02, 0x80, 0x0F, 0x90,
+0x85, 0xBC, 0xE0, 0x30, 0xE0, 0x05, 0x12, 0xC3, 0x5E, 0x80, 0x03, 0x12, 0xC3, 0x13, 0x51, 0xB6,
+0x64, 0x01, 0x70, 0x22, 0x90, 0x06, 0xAB, 0xE0, 0x90, 0x85, 0xCC, 0xF0, 0x90, 0x06, 0xAA, 0xE0,
+0x90, 0x85, 0xCB, 0xF0, 0xA3, 0xE0, 0xFF, 0x70, 0x08, 0x90, 0x85, 0xCB, 0xE0, 0xFE, 0xFF, 0x80,
+0x00, 0x90, 0x85, 0xCC, 0xEF, 0xF0, 0x12, 0xCA, 0x2A, 0xE4, 0x90, 0x85, 0xCE, 0xF0, 0xF1, 0xCC,
+0x12, 0x9A, 0xF0, 0x13, 0x54, 0x1F, 0x30, 0xE0, 0x5E, 0xEF, 0xC4, 0x13, 0x13, 0x54, 0x03, 0x20,
+0xE0, 0x23, 0x51, 0xAD, 0x6F, 0x70, 0x50, 0x90, 0x85, 0xC2, 0xE0, 0x44, 0x40, 0xF0, 0xF1, 0xB4,
+0xF0, 0x90, 0x01, 0x3F, 0x31, 0x9E, 0x12, 0x7B, 0xFD, 0x71, 0x0B, 0xF1, 0x8D, 0x90, 0x85, 0xCC,
+0xE0, 0x14, 0xF0, 0x80, 0x32, 0x90, 0x85, 0xC3, 0xE0, 0xC4, 0x54, 0x0F, 0x64, 0x01, 0x70, 0x27,
+0x51, 0xAD, 0xFE, 0x6F, 0x60, 0x21, 0x90, 0x05, 0x73, 0xE0, 0xFF, 0xEE, 0x6F, 0x60, 0x18, 0x12,
+0x9A, 0xF0, 0x54, 0x3F, 0x30, 0xE0, 0x10, 0xEF, 0x54, 0xBF, 0xF0, 0x90, 0x01, 0x3F, 0x31, 0x9E,
+0x12, 0x7B, 0xBF, 0x51, 0xC6, 0x51, 0xBF, 0x51, 0xA5, 0x90, 0x85, 0xBC, 0xE0, 0xC3, 0x13, 0x20,
+0xE0, 0x02, 0x51, 0xA5, 0x22, 0x90, 0x85, 0xC2, 0xE0, 0x44, 0x04, 0xF0, 0x22, 0x90, 0x85, 0xCB,
+0xE0, 0xFF, 0xA3, 0xE0, 0x22, 0xF0, 0x90, 0x85, 0xC3, 0xE0, 0xFF, 0xC4, 0x54, 0x0F, 0x22, 0x7D,
+0x02, 0x7F, 0x02, 0x02, 0x7C, 0xA9, 0x7D, 0x01, 0x7F, 0x02, 0x02, 0x7C, 0xA9, 0x12, 0xC4, 0x56,
+0x51, 0xBF, 0x7F, 0x01, 0x71, 0x12, 0x90, 0x92, 0x04, 0xE0, 0x30, 0xE0, 0x14, 0x51, 0xF2, 0xF0,
+0x90, 0x92, 0x07, 0xE0, 0x60, 0x05, 0x14, 0xF0, 0x02, 0x7A, 0x8A, 0x51, 0xFA, 0xE4, 0xFF, 0x31,
+0x5C, 0x22, 0x90, 0x92, 0x06, 0xE0, 0x90, 0x05, 0x73, 0x22, 0x90, 0x92, 0x05, 0xE0, 0x14, 0x90,
+0x92, 0x07, 0xF0, 0x22, 0x7D, 0x02, 0x7F, 0x02, 0x12, 0x7C, 0x41, 0x7D, 0x01, 0x7F, 0x02, 0x02,
+0x7C, 0x41, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x92, 0xC0, 0xE0, 0xFE, 0x13, 0x13,
+0x54, 0x3F, 0x30, 0xE0, 0x1F, 0x90, 0x93, 0x7E, 0x74, 0x1E, 0xF0, 0x90, 0x93, 0x8C, 0x74, 0x01,
+0xF0, 0x90, 0x93, 0x80, 0xEF, 0xF0, 0x7B, 0x01, 0x7A, 0x93, 0x79, 0x7E, 0x12, 0x5E, 0x10, 0x7F,
+0x04, 0x12, 0xC1, 0xA2, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90, 0x85, 0xBC, 0xE0, 0x30, 0xE0, 0x10,
+0xA3, 0x74, 0x01, 0xF0, 0x90, 0x85, 0xBC, 0xE0, 0xFF, 0xC3, 0x13, 0x30, 0xE0, 0x02, 0x71, 0x67,
+0x12, 0x9E, 0x3E, 0xE4, 0xFF, 0x80, 0xAB, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x12, 0x9E,
+0x32, 0xBF, 0x01, 0x04, 0x7F, 0x01, 0x80, 0x02, 0x7F, 0x02, 0x71, 0x81, 0xD0, 0xD0, 0x92, 0xAF,
+0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x85, 0xBF, 0xE0, 0x90, 0x94, 0x15, 0xF0,
+0x6F, 0x70, 0x02, 0x81, 0x89, 0xEF, 0x14, 0x60, 0x42, 0x14, 0x60, 0x6E, 0x14, 0x70, 0x02, 0x81,
+0x35, 0x14, 0x70, 0x02, 0x81, 0x60, 0x24, 0x04, 0x60, 0x02, 0x81, 0x89, 0x90, 0x94, 0x15, 0xE0,
+0xB4, 0x04, 0x04, 0x91, 0xFE, 0x81, 0x89, 0x90, 0x94, 0x15, 0xE0, 0xB4, 0x02, 0x04, 0xB1, 0x0E,
+0x81, 0x89, 0x90, 0x94, 0x15, 0xE0, 0xB4, 0x03, 0x04, 0xB1, 0x18, 0x81, 0x89, 0x90, 0x94, 0x15,
+0xE0, 0x64, 0x01, 0x60, 0x02, 0x81, 0x89, 0xB1, 0x01, 0x81, 0x89, 0x90, 0x94, 0x15, 0xE0, 0xB4,
+0x04, 0x05, 0x12, 0x9F, 0xE7, 0x81, 0x89, 0x90, 0x94, 0x15, 0xE0, 0xB4, 0x02, 0x04, 0xB1, 0x12,
+0x81, 0x89, 0x90, 0x94, 0x15, 0xE0, 0xB4, 0x03, 0x04, 0xF1, 0x49, 0x81, 0x89, 0x90, 0x94, 0x15,
+0xE0, 0x60, 0x02, 0x81, 0x89, 0x12, 0x9F, 0xF3, 0x80, 0x7F, 0x90, 0x94, 0x15, 0xE0, 0xB4, 0x04,
+0x04, 0x91, 0xA0, 0x80, 0x74, 0x90, 0x94, 0x15, 0xE0, 0xB4, 0x01, 0x04, 0x91, 0x90, 0x80, 0x69,
+0x90, 0x94, 0x15, 0xE0, 0xB4, 0x03, 0x04, 0x91, 0x8E, 0x80, 0x5E, 0x90, 0x94, 0x15, 0xE0, 0x70,
+0x58, 0x91, 0xE4, 0x80, 0x54, 0x90, 0x94, 0x15, 0xE0, 0xB4, 0x04, 0x04, 0xF1, 0x69, 0x80, 0x49,
+0x90, 0x94, 0x15, 0xE0, 0xB4, 0x01, 0x04, 0x91, 0xEC, 0x80, 0x3E, 0x90, 0x94, 0x15, 0xE0, 0xB4,
+0x02, 0x04, 0x91, 0xFA, 0x80, 0x33, 0x90, 0x94, 0x15, 0xE0, 0x70, 0x2D, 0x91, 0xE9, 0x80, 0x29,
+0x90, 0x94, 0x15, 0xE0, 0xB4, 0x03, 0x04, 0xF1, 0x87, 0x80, 0x1E, 0x90, 0x94, 0x15, 0xE0, 0xB4,
+0x01, 0x04, 0x91, 0xDE, 0x80, 0x13, 0x90, 0x94, 0x15, 0xE0, 0xB4, 0x02, 0x04, 0xB1, 0x45, 0x80,
+0x08, 0x90, 0x94, 0x15, 0xE0, 0x70, 0x02, 0x91, 0xDB, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x80, 0x07,
+0x7D, 0x20, 0x7F, 0xFF, 0x12, 0x90, 0xDE, 0x91, 0xA7, 0x90, 0x85, 0xBF, 0x74, 0x02, 0xF0, 0x22,
+0x12, 0x9F, 0xDF, 0x7D, 0x23, 0x80, 0xEB, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x7F, 0x02,
+0x12, 0x7B, 0x51, 0xEF, 0x54, 0xFE, 0xFD, 0x7F, 0x02, 0x12, 0x7B, 0x3E, 0x90, 0x01, 0x00, 0x74,
+0x3F, 0xF0, 0x90, 0x01, 0x34, 0x74, 0x08, 0xF0, 0x90, 0x01, 0x01, 0xE0, 0x54, 0xFD, 0xF0, 0x90,
+0x05, 0x53, 0xE0, 0x44, 0x20, 0xF0, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x12, 0x9F, 0xF3, 0x7D, 0x1F,
+0xF1, 0x75, 0xF0, 0x22, 0x12, 0x9F, 0xF3, 0x80, 0xA7, 0x12, 0x9F, 0xF3, 0x7D, 0x21, 0x7F, 0xFF,
+0x12, 0x90, 0xDE, 0x90, 0x85, 0xBF, 0x74, 0x03, 0xF0, 0x22, 0xB1, 0x1C, 0x80, 0xF5, 0x12, 0x9F,
+0xE7, 0x90, 0x05, 0x27, 0xE0, 0x54, 0xBF, 0xF0, 0xE4, 0x90, 0x85, 0xBF, 0xF0, 0x22, 0xB1, 0x12,
+0x80, 0xEF, 0x12, 0x90, 0xD8, 0x02, 0x9F, 0xEC, 0xF1, 0x49, 0x80, 0xE5, 0xD3, 0x10, 0xAF, 0x01,
+0xC3, 0xC0, 0xD0, 0x7F, 0x02, 0xF1, 0xBC, 0x7F, 0x02, 0xF1, 0xC4, 0x44, 0x02, 0xF0, 0x90, 0x01,
+0x00, 0x74, 0xFF, 0xF0, 0x90, 0x06, 0xB7, 0x74, 0x09, 0xF0, 0x90, 0x06, 0xB4, 0x74, 0x86, 0xF0,
+0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xB1, 0x1C, 0x7D, 0x24, 0xF1, 0x75, 0xF0, 0x22, 0xEF, 0x60, 0x47,
+0x90, 0x88, 0xCE, 0xE0, 0xFF, 0x60, 0x03, 0x12, 0x7B, 0x8A, 0x90, 0x01, 0xC7, 0xE4, 0xF0, 0x12,
+0xBC, 0x43, 0x90, 0x85, 0xB7, 0xF0, 0xA3, 0xEF, 0xF0, 0x90, 0x06, 0x09, 0xE0, 0x54, 0xFE, 0xF0,
+0x7D, 0x35, 0x7F, 0xFF, 0x12, 0x90, 0xDE, 0x91, 0xA7, 0x90, 0x02, 0x86, 0xE0, 0x44, 0x04, 0xF0,
+0x12, 0x72, 0x79, 0xF1, 0x48, 0x12, 0x90, 0xD8, 0x12, 0x76, 0xE6, 0x90, 0x01, 0x34, 0x74, 0x08,
+0xF0, 0xFD, 0xE4, 0xFF, 0x02, 0x7C, 0xA9, 0x7D, 0x08, 0xE4, 0xFF, 0x12, 0x7C, 0x41, 0x90, 0x06,
+0x90, 0xE0, 0x54, 0xF0, 0xF0, 0x90, 0x02, 0x86, 0xE0, 0x54, 0xFB, 0xF0, 0x12, 0xD6, 0xED, 0x12,
+0x9F, 0xD6, 0x7E, 0x00, 0x7F, 0x24, 0x7D, 0x00, 0x7B, 0x01, 0x7A, 0x86, 0x79, 0x72, 0x12, 0x06,
+0xDE, 0x90, 0x06, 0x90, 0xE0, 0x44, 0x20, 0xF0, 0x12, 0xD6, 0xDA, 0xD1, 0x65, 0x90, 0x84, 0xC5,
+0xE0, 0xFF, 0x64, 0x02, 0x70, 0x29, 0xD1, 0x5E, 0x30, 0xE0, 0x02, 0x7E, 0x01, 0x90, 0x86, 0x90,
+0xD1, 0x5C, 0x30, 0xE1, 0x02, 0x7E, 0x01, 0x90, 0x86, 0x8E, 0xD1, 0x5C, 0x30, 0xE2, 0x02, 0x7E,
+0x01, 0x90, 0x86, 0x8F, 0xEE, 0xF0, 0x90, 0xFD, 0x80, 0xE0, 0x90, 0x02, 0xFB, 0xF0, 0x22, 0xEF,
+0x64, 0x01, 0x70, 0x1D, 0xD1, 0x55, 0x30, 0xE0, 0x02, 0x7F, 0x01, 0x90, 0x86, 0x90, 0xD1, 0x53,
+0x30, 0xE1, 0x02, 0x7F, 0x01, 0x90, 0x86, 0x8E, 0xD1, 0x53, 0x30, 0xE2, 0x02, 0x7F, 0x01, 0x80,
+0x23, 0x90, 0x84, 0xC5, 0xE0, 0x64, 0x03, 0x70, 0x20, 0xD1, 0x4C, 0x30, 0xE0, 0x02, 0x7F, 0x01,
+0x90, 0x86, 0x90, 0xD1, 0x4A, 0x30, 0xE1, 0x02, 0x7F, 0x01, 0x90, 0x86, 0x8E, 0xD1, 0x4A, 0x30,
+0xE2, 0x02, 0x7F, 0x01, 0x90, 0x86, 0x8F, 0xEF, 0xF0, 0x22, 0xEF, 0xF0, 0x90, 0xFD, 0x78, 0xE0,
+0x7F, 0x00, 0x22, 0xEF, 0xF0, 0x90, 0xFD, 0x70, 0xE0, 0x7F, 0x00, 0x22, 0xEE, 0xF0, 0x90, 0xFD,
+0x80, 0xE0, 0x7E, 0x00, 0x22, 0xF1, 0xAC, 0xE4, 0x90, 0x88, 0xD8, 0xD1, 0x95, 0x90, 0x88, 0x76,
+0xF0, 0xD1, 0x90, 0xD1, 0x96, 0x90, 0x88, 0x88, 0xF0, 0xA3, 0xF0, 0x90, 0x88, 0xCA, 0xF0, 0xA3,
+0xF0, 0x22, 0x90, 0x93, 0x9E, 0xE0, 0xFF, 0x90, 0x93, 0x56, 0xE4, 0xF0, 0xA3, 0xEF, 0xF0, 0xE4,
+0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0x22, 0xD3, 0x10, 0xAF,
+0x01, 0xC3, 0xC0, 0xD0, 0xF1, 0x57, 0x90, 0x86, 0x72, 0xF1, 0x2C, 0x54, 0x04, 0xFD, 0xEF, 0x54,
+0xFB, 0xF1, 0x24, 0xF1, 0x94, 0xF1, 0x3A, 0x54, 0x10, 0xFD, 0xEF, 0x54, 0xEF, 0xF1, 0x24, 0xF1,
+0x9C, 0xF1, 0x3A, 0x54, 0x40, 0xFD, 0xEF, 0x54, 0xBF, 0xF1, 0x24, 0xF1, 0xA4, 0x12, 0x8E, 0x8F,
+0x54, 0x01, 0xFF, 0x90, 0x86, 0x74, 0xE0, 0x54, 0xFE, 0x12, 0x8F, 0xB8, 0xFF, 0x54, 0x01, 0xFE,
+0x90, 0x86, 0x73, 0xF1, 0x4F, 0x54, 0x04, 0xFF, 0xEE, 0x54, 0xFB, 0x4F, 0xF0, 0x90, 0x86, 0x72,
+0xE0, 0xC3, 0x13, 0x54, 0x01, 0xFF, 0x12, 0x7C, 0x72, 0xF1, 0x41, 0x54, 0x01, 0xFF, 0x12, 0x7C,
+0x7E, 0xF1, 0x41, 0x13, 0x54, 0x01, 0xFF, 0x12, 0x66, 0xDA, 0x90, 0x86, 0x72, 0xE0, 0xC4, 0x13,
+0x13, 0x54, 0x01, 0xFF, 0xF1, 0x5F, 0x90, 0x86, 0x72, 0xE0, 0x54, 0x01, 0xFF, 0xB1, 0x4D, 0xD0,
+0xD0, 0x92, 0xAF, 0x22, 0x4D, 0xFF, 0x90, 0x86, 0x72, 0xF0, 0xEE, 0x22, 0xE0, 0x54, 0xFE, 0x4E,
+0xFE, 0xF0, 0xEF, 0x54, 0x02, 0xFF, 0xEE, 0x54, 0xFD, 0x4F, 0xFF, 0xF0, 0x12, 0x02, 0xF6, 0xFE,
+0x22, 0x90, 0x86, 0x72, 0xE0, 0x13, 0x13, 0x22, 0x22, 0x12, 0x97, 0xD7, 0x02, 0x9F, 0xEC, 0xE0,
+0x54, 0xFE, 0x4E, 0xFE, 0xF0, 0xEF, 0x22, 0x12, 0x02, 0xF6, 0xFF, 0x54, 0x01, 0xFE, 0x22, 0xEF,
+0x60, 0x06, 0x12, 0xD8, 0x06, 0x12, 0xAF, 0x0D, 0x22, 0x7D, 0x22, 0x7F, 0xFF, 0x12, 0x90, 0xDE,
+0x12, 0x9F, 0xDF, 0x81, 0xF3, 0x7F, 0x6F, 0x12, 0x90, 0xDE, 0x90, 0x05, 0x27, 0xE0, 0x54, 0xBF,
+0xF0, 0x90, 0x85, 0xBF, 0x74, 0x04, 0x22, 0x7D, 0x25, 0xF1, 0x75, 0xF0, 0x22, 0x7D, 0x02, 0x7F,
+0x02, 0x02, 0x7C, 0x41, 0x54, 0x08, 0xFE, 0xEF, 0x54, 0xF7, 0x4E, 0x22, 0x54, 0x20, 0xFE, 0xEF,
+0x54, 0xDF, 0x4E, 0x22, 0x54, 0x80, 0xFE, 0xEF, 0x54, 0x7F, 0x4E, 0x22, 0x90, 0x86, 0x72, 0xE0,
+0x54, 0xBF, 0xF0, 0x22, 0x90, 0x85, 0xCB, 0xE0, 0x90, 0x05, 0x73, 0x22, 0x12, 0x7B, 0x51, 0xEF,
+0x44, 0x01, 0xFD, 0x22, 0x12, 0x7B, 0x3E, 0x90, 0x01, 0x01, 0xE0, 0x22, 0x90, 0x85, 0xD1, 0xA3,
+0xE0, 0x90, 0x05, 0x58, 0xF0, 0x22, 0x90, 0x01, 0x57, 0xE4, 0xF0, 0x90, 0x01, 0x3C, 0x74, 0x02,
+0x22, 0x12, 0x02, 0xF6, 0xFF, 0x90, 0x92, 0xB3, 0xF0, 0xBF, 0x01, 0x09, 0x7F, 0x01, 0xF1, 0xF6,
+0xE4, 0x90, 0x92, 0xB3, 0xF0, 0x22, 0x90, 0x93, 0x28, 0xEF, 0xF0, 0x7B, 0x01, 0x7A, 0x93, 0x79,
+0x38, 0x7F, 0xF4, 0x7E, 0x00, 0x12, 0x64, 0x37, 0xBF, 0x01, 0x08, 0x90, 0x93, 0x38, 0xE0, 0x90,
+0x93, 0x3A, 0xF0, 0x7B, 0x01, 0x7A, 0x93, 0x79, 0x38, 0x7F, 0xF5, 0x7E, 0x00, 0x12, 0x64, 0x37,
+0xBF, 0x01, 0x08, 0x90, 0x93, 0x38, 0xE0, 0x90, 0x93, 0x3B, 0xF0, 0x7B, 0x01, 0x7A, 0x93, 0x79,
+0x38, 0x7F, 0xF6, 0x7E, 0x00, 0x12, 0x64, 0x37, 0xBF, 0x01, 0x08, 0x90, 0x93, 0x38, 0xE0, 0x90,
+0x93, 0x3C, 0xF0, 0x7B, 0x01, 0x7A, 0x93, 0x79, 0x38, 0x7F, 0xF7, 0x7E, 0x00, 0x12, 0x64, 0x37,
+0xBF, 0x01, 0x08, 0x90, 0x93, 0x38, 0xE0, 0x90, 0x93, 0x3D, 0xF0, 0x7B, 0x01, 0x7A, 0x93, 0x79,
+0x38, 0x7F, 0xF8, 0x7E, 0x00, 0x12, 0x64, 0x37, 0xBF, 0x01, 0x08, 0x90, 0x93, 0x38, 0xE0, 0x90,
+0x93, 0x3E, 0xF0, 0x7B, 0x01, 0x7A, 0x93, 0x79, 0x38, 0x51, 0x44, 0xBF, 0x01, 0x08, 0x90, 0x93,
+0x38, 0xE0, 0x90, 0x93, 0x3F, 0xF0, 0x7B, 0x01, 0x7A, 0x93, 0x79, 0x38, 0x31, 0xAB, 0x70, 0x52,
+0x90, 0x93, 0x38, 0xE0, 0x90, 0x93, 0x40, 0xF0, 0x54, 0x07, 0x60, 0x08, 0x90, 0x93, 0x38, 0xE0,
+0x54, 0xE0, 0x70, 0x3E, 0x7B, 0x01, 0x7A, 0x93, 0x79, 0x39, 0x7F, 0xFA, 0x31, 0xAD, 0x70, 0x32,
+0x90, 0x93, 0x38, 0xE0, 0xFC, 0x54, 0x07, 0x70, 0x12, 0x90, 0x93, 0x40, 0xE0, 0xFE, 0x90, 0x93,
+0x39, 0xE0, 0x54, 0x07, 0xFD, 0xEE, 0x4D, 0x90, 0x93, 0x40, 0xF0, 0xEC, 0x54, 0xE0, 0x70, 0x12,
+0x90, 0x93, 0x40, 0xE0, 0xFF, 0x90, 0x93, 0x39, 0xE0, 0x54, 0xE0, 0xFE, 0xEF, 0x4E, 0x90, 0x93,
+0x40, 0xF0, 0x7B, 0x01, 0x7A, 0x93, 0x79, 0x38, 0x7F, 0xFD, 0x31, 0xAD, 0x70, 0x47, 0x90, 0x93,
+0x38, 0xE0, 0xFE, 0x54, 0xCC, 0x90, 0x93, 0x41, 0xF0, 0xEE, 0x54, 0x0C, 0xFF, 0x60, 0x08, 0x90,
+0x93, 0x38, 0xE0, 0x54, 0xC0, 0x70, 0x2E, 0xEF, 0x70, 0x12, 0x90, 0x93, 0x41, 0xE0, 0xFF, 0x90,
+0x93, 0x38, 0xE0, 0x54, 0x03, 0x12, 0xDA, 0x80, 0x90, 0x93, 0x41, 0xF0, 0x90, 0x93, 0x38, 0xE0,
+0xFF, 0x54, 0xC0, 0x70, 0x10, 0x90, 0x93, 0x41, 0xE0, 0xFE, 0xEF, 0x54, 0x30, 0x25, 0xE0, 0x25,
+0xE0, 0xFF, 0xEE, 0x4F, 0xF0, 0x90, 0x93, 0x29, 0x74, 0x19, 0xF0, 0x90, 0x93, 0x37, 0x74, 0x08,
+0xF0, 0x90, 0x93, 0x3A, 0xE0, 0x90, 0x93, 0x2B, 0xF0, 0x90, 0x93, 0x3B, 0xE0, 0x90, 0x93, 0x2C,
+0xF0, 0x90, 0x93, 0x3C, 0xE0, 0x90, 0x93, 0x2D, 0xF0, 0x90, 0x93, 0x3D, 0xE0, 0x90, 0x93, 0x2E,
+0xF0, 0x90, 0x93, 0x3E, 0xE0, 0x90, 0x93, 0x2F, 0xF0, 0x90, 0x93, 0x3F, 0xE0, 0x90, 0x93, 0x30,
+0xF0, 0x90, 0x93, 0x40, 0xE0, 0x90, 0x93, 0x31, 0xF0, 0x90, 0x93, 0x41, 0xE0, 0x90, 0x93, 0x32,
+0xF0, 0x90, 0x93, 0x28, 0xE0, 0xB4, 0x01, 0x0E, 0x7B, 0x01, 0x7A, 0x93, 0x79, 0x29, 0x12, 0x5E,
+0x10, 0x7F, 0x04, 0x02, 0x87, 0xBB, 0x75, 0x1B, 0x01, 0x75, 0x1C, 0x93, 0x75, 0x1D, 0x29, 0x75,
+0x1E, 0x0A, 0x7B, 0x01, 0x7A, 0x01, 0x79, 0xA0, 0x02, 0x6A, 0x21, 0x7F, 0xFB, 0x7E, 0x00, 0x12,
+0x64, 0x37, 0xEF, 0x64, 0x01, 0x22, 0x7E, 0x00, 0x7F, 0x0B, 0x7D, 0x00, 0x7B, 0x01, 0x7A, 0x92,
+0x79, 0xB4, 0x12, 0x06, 0xDE, 0x51, 0x3D, 0x51, 0x44, 0xBF, 0x01, 0x1C, 0x90, 0x93, 0x28, 0xE0,
+0xFE, 0x54, 0x01, 0x90, 0x92, 0xB4, 0xF0, 0xEE, 0x54, 0x04, 0x90, 0x92, 0xB6, 0xF0, 0x90, 0x93,
+0x28, 0xE0, 0x54, 0x08, 0x90, 0x92, 0xB5, 0xF0, 0x51, 0x3D, 0x31, 0xAB, 0x70, 0x34, 0x90, 0x93,
+0x28, 0xE0, 0x54, 0x07, 0x70, 0x14, 0x7B, 0x01, 0x7A, 0x93, 0x79, 0x29, 0x7F, 0xFA, 0xFE, 0x12,
+0x64, 0x37, 0xBF, 0x01, 0x0F, 0x90, 0x93, 0x29, 0x80, 0x03, 0x90, 0x93, 0x28, 0xE0, 0x54, 0x07,
+0x90, 0x92, 0xB8, 0xF0, 0x90, 0x93, 0x28, 0xE0, 0x54, 0xE0, 0xC4, 0x13, 0x54, 0x07, 0x90, 0x92,
+0xB7, 0xF0, 0x51, 0x3D, 0x7F, 0xFD, 0x7E, 0x00, 0x12, 0x64, 0x37, 0xBF, 0x01, 0x0E, 0x90, 0x93,
+0x28, 0xE0, 0x54, 0x0C, 0x13, 0x13, 0x54, 0x3F, 0x90, 0x92, 0xB9, 0xF0, 0x22, 0x7B, 0x01, 0x7A,
+0x93, 0x79, 0x28, 0x22, 0x7F, 0xF9, 0x7E, 0x00, 0x02, 0x64, 0x37, 0x90, 0x00, 0x80, 0xE0, 0x44,
+0x80, 0xFD, 0x7F, 0x80, 0x12, 0x7B, 0x3E, 0x12, 0xC9, 0x23, 0x12, 0xD2, 0xFF, 0x12, 0x7B, 0x9C,
+0x12, 0xD3, 0x0C, 0x12, 0xC7, 0xCA, 0x7F, 0x01, 0x12, 0x85, 0x15, 0x90, 0x92, 0x08, 0x74, 0x02,
+0xF0, 0xFF, 0x12, 0x85, 0x15, 0x90, 0x92, 0x08, 0xE0, 0x04, 0xF0, 0x71, 0x42, 0x51, 0xD9, 0x90,
+0x01, 0xCC, 0x74, 0x0F, 0xF0, 0x90, 0x00, 0x80, 0xE0, 0x44, 0x40, 0xFD, 0x7F, 0x80, 0x12, 0x7B,
+0x3E, 0x75, 0x20, 0xFF, 0x12, 0x7C, 0xCD, 0xE4, 0xFF, 0x12, 0xA7, 0xF6, 0x71, 0xA8, 0x90, 0x00,
+0x81, 0xE0, 0x44, 0x04, 0xFD, 0x7F, 0x81, 0x12, 0x7B, 0x3E, 0x12, 0xC8, 0x1C, 0x31, 0xB6, 0x90,
+0x00, 0x00, 0xE0, 0x54, 0xFB, 0xFD, 0xE4, 0xFF, 0x12, 0xA7, 0xC4, 0x44, 0x04, 0xFD, 0x7F, 0x01,
+0x12, 0x7B, 0x3E, 0x90, 0x01, 0x98, 0x74, 0x80, 0xF0, 0xA3, 0x74, 0x88, 0xF0, 0xA3, 0xE4, 0xF0,
+0xA3, 0x74, 0x80, 0xF0, 0xE4, 0xFF, 0x02, 0x85, 0x9E, 0xB1, 0x5E, 0x12, 0x7B, 0xEF, 0x12, 0x3C,
+0x03, 0x71, 0xFA, 0x71, 0x17, 0x91, 0x83, 0x71, 0x12, 0x12, 0xA5, 0xB2, 0x12, 0x7B, 0x64, 0x12,
+0x78, 0xB9, 0x12, 0xD1, 0x6E, 0x90, 0x89, 0x16, 0xE0, 0x54, 0x7F, 0xF0, 0x54, 0xBF, 0xF0, 0x54,
+0xDF, 0xF0, 0x54, 0xF0, 0xF0, 0xE4, 0x90, 0x89, 0x18, 0xF0, 0x90, 0x89, 0x16, 0xE0, 0x54, 0xEF,
+0xF0, 0x22, 0xB1, 0x51, 0x02, 0x06, 0xDE, 0x7E, 0x00, 0x7F, 0x01, 0x7D, 0x00, 0x7B, 0x01, 0x7A,
+0x85, 0x79, 0xBC, 0x12, 0x06, 0xDE, 0x90, 0x85, 0xBC, 0xE0, 0x54, 0xFD, 0xF0, 0xE4, 0x12, 0xA6,
+0x96, 0xA3, 0x74, 0x0C, 0xF0, 0x90, 0x92, 0xA9, 0xE0, 0x54, 0xDF, 0x12, 0xDA, 0x1E, 0x54, 0xE0,
+0xF0, 0x22, 0x12, 0x7C, 0x4E, 0x90, 0x84, 0xC5, 0xEF, 0xF0, 0x71, 0x76, 0x90, 0x01, 0x64, 0x74,
+0x01, 0xF0, 0x90, 0x04, 0x23, 0xE0, 0x44, 0x80, 0xF0, 0x90, 0x00, 0x17, 0xE0, 0x54, 0xFC, 0x44,
+0x04, 0xFD, 0x7F, 0x17, 0x12, 0x7B, 0x3E, 0x90, 0x00, 0x38, 0xE0, 0x44, 0x40, 0xFD, 0x7F, 0x38,
+0x12, 0x7B, 0x3E, 0x02, 0x68, 0xE2, 0x12, 0x75, 0xB6, 0x12, 0x75, 0x58, 0x12, 0xC7, 0xD6, 0x12,
+0xC7, 0xFD, 0xE4, 0xF5, 0x40, 0xF5, 0x41, 0xF5, 0x42, 0x75, 0x43, 0x80, 0xAD, 0x40, 0x7F, 0x50,
+0x12, 0x7B, 0x3E, 0xAD, 0x41, 0x7F, 0x51, 0x12, 0x7B, 0x3E, 0xAD, 0x42, 0x7F, 0x52, 0x12, 0x7B,
+0x3E, 0xAD, 0x43, 0x7F, 0x53, 0x02, 0x7B, 0x3E, 0xE4, 0x90, 0x93, 0x28, 0xF0, 0xA3, 0xF0, 0x12,
+0xD3, 0x2F, 0xEF, 0x64, 0x01, 0x60, 0x3C, 0xC3, 0x90, 0x93, 0x29, 0xE0, 0x94, 0x88, 0x90, 0x93,
+0x28, 0xE0, 0x94, 0x13, 0x40, 0x0F, 0x90, 0x01, 0xC1, 0xE0, 0x44, 0x10, 0xF0, 0x90, 0x01, 0xC7,
+0x74, 0xFD, 0xF0, 0x80, 0x1E, 0x90, 0x93, 0x28, 0xB1, 0x64, 0x12, 0xDA, 0x62, 0xD3, 0x90, 0x93,
+0x29, 0xE0, 0x94, 0x32, 0x90, 0x93, 0x28, 0xE0, 0x94, 0x00, 0x40, 0xC3, 0x90, 0x01, 0xC6, 0xE0,
+0x30, 0xE3, 0xBC, 0x90, 0x01, 0xC7, 0x74, 0xFE, 0xF0, 0x22, 0x7B, 0x00, 0x7A, 0x00, 0x79, 0x00,
+0x90, 0x89, 0x1B, 0x12, 0x87, 0x79, 0x7B, 0xFF, 0x7A, 0x82, 0x79, 0x00, 0x90, 0x89, 0x1E, 0x12,
+0x87, 0x79, 0x7A, 0x82, 0x79, 0x3F, 0x90, 0x89, 0x21, 0x12, 0x87, 0x79, 0x7A, 0x82, 0x79, 0xE1,
+0x90, 0x89, 0x27, 0x12, 0x87, 0x79, 0x7A, 0x82, 0x79, 0xF5, 0x90, 0x89, 0x2A, 0x12, 0x87, 0x79,
+0x7A, 0x83, 0x79, 0x1D, 0x90, 0x89, 0x2D, 0x12, 0x87, 0x79, 0x7A, 0x83, 0x79, 0x31, 0x90, 0x89,
+0x33, 0x12, 0x87, 0x79, 0x7A, 0x83, 0x79, 0x59, 0x90, 0x89, 0x36, 0x12, 0x87, 0x79, 0x7A, 0x83,
+0x79, 0x81, 0x90, 0x89, 0x39, 0x12, 0x87, 0x79, 0xE4, 0x90, 0x93, 0x9E, 0xF0, 0x90, 0x93, 0x28,
+0xF0, 0x90, 0x93, 0x28, 0xE0, 0xFF, 0xC3, 0x94, 0x05, 0x50, 0x0F, 0x74, 0xAF, 0x2F, 0x91, 0x7B,
+0xE4, 0xF0, 0x90, 0x93, 0x28, 0xE0, 0x04, 0xF0, 0x80, 0xE7, 0x22, 0xF5, 0x82, 0xE4, 0x34, 0x93,
+0xF5, 0x83, 0x22, 0x7E, 0x00, 0x7F, 0xAC, 0x7D, 0x00, 0x7B, 0x01, 0x7A, 0x85, 0x79, 0xC1, 0x12,
+0x06, 0xDE, 0xB1, 0x51, 0x12, 0x06, 0xDE, 0x90, 0x85, 0xC4, 0x74, 0x02, 0xF0, 0x90, 0x85, 0xCB,
+0x14, 0xF0, 0xA3, 0xF0, 0xA3, 0x74, 0x0A, 0xF0, 0x90, 0x85, 0xD1, 0xE4, 0xF0, 0xA3, 0x74, 0x02,
+0xB1, 0x41, 0x12, 0xD6, 0x26, 0xE4, 0xFD, 0xFF, 0x12, 0x57, 0x82, 0x7D, 0x0C, 0x7F, 0x02, 0x12,
+0x57, 0x82, 0x7D, 0x0C, 0x7F, 0x01, 0x12, 0x57, 0x82, 0x90, 0x84, 0xC5, 0xE0, 0xFF, 0xB4, 0x01,
+0x08, 0x90, 0x85, 0xD0, 0x74, 0xDD, 0xF0, 0x80, 0x0F, 0xEF, 0x90, 0x85, 0xD0, 0xB4, 0x03, 0x05,
+0x74, 0xD4, 0xF0, 0x80, 0x03, 0x74, 0x40, 0xF0, 0x7F, 0x2C, 0x12, 0x7B, 0x51, 0xEF, 0x54, 0x0F,
+0xFF, 0xBF, 0x05, 0x08, 0x90, 0x85, 0xFB, 0x74, 0x02, 0xF0, 0x80, 0x05, 0xE4, 0x90, 0x85, 0xFB,
+0xF0, 0x90, 0x86, 0x6D, 0x74, 0x03, 0xF0, 0xA3, 0x74, 0x0F, 0xF0, 0xA3, 0xE0, 0x54, 0x01, 0x44,
+0x28, 0xF0, 0xA3, 0x74, 0x07, 0xB1, 0x41, 0xE4, 0x90, 0x85, 0xD7, 0xF0, 0xA3, 0xF0, 0x7F, 0x01,
+0x12, 0x69, 0x33, 0x90, 0x05, 0x58, 0x74, 0x02, 0xF0, 0x90, 0x06, 0x04, 0xE0, 0x54, 0x7F, 0xF0,
+0x90, 0x06, 0x0A, 0xE0, 0x54, 0xF8, 0xF0, 0x90, 0x05, 0x22, 0xE4, 0xF0, 0x90, 0x86, 0x71, 0xF0,
+0x22, 0xF0, 0x90, 0x85, 0xFB, 0xE0, 0x24, 0x04, 0x90, 0x85, 0xDD, 0xF0, 0xA3, 0x74, 0x0A, 0xF0,
+0x22, 0x7E, 0x00, 0x7F, 0x04, 0x7D, 0x00, 0x7B, 0x01, 0x7A, 0x92, 0x79, 0x04, 0x22, 0xE4, 0xFD,
+0xFF, 0x02, 0x6E, 0x5F, 0xE4, 0x75, 0xF0, 0x01, 0x02, 0x07, 0x0A, 0xAD, 0x07, 0x90, 0x88, 0x80,
+0xB1, 0x64, 0x90, 0x88, 0x80, 0xE0, 0xFF, 0xAE, 0x05, 0x74, 0x04, 0x2E, 0xF1, 0xCE, 0xEF, 0xF0,
+0x90, 0x88, 0x80, 0xA3, 0xE0, 0xFF, 0x74, 0x05, 0x2E, 0xF1, 0xC6, 0xEF, 0xF0, 0x22, 0xE4, 0x90,
+0x93, 0x70, 0xF0, 0xA3, 0xF0, 0x90, 0x06, 0x32, 0xE0, 0x44, 0x20, 0xF0, 0x12, 0x75, 0xE4, 0xEF,
+0x64, 0x01, 0x60, 0x02, 0xC1, 0x25, 0x90, 0x88, 0xD9, 0xE0, 0xFF, 0x90, 0x93, 0xFB, 0x74, 0x0A,
+0xF0, 0x7B, 0x08, 0x7D, 0x01, 0xD1, 0x2E, 0x90, 0x93, 0x6D, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0x90,
+0x93, 0x6D, 0xA3, 0xD1, 0xF4, 0xFD, 0x74, 0x2C, 0x2E, 0xF1, 0xDD, 0x90, 0x93, 0x6F, 0xEF, 0xF0,
+0x90, 0x93, 0x6D, 0xA3, 0xE0, 0x24, 0x28, 0xF9, 0xE4, 0x34, 0xFC, 0xFA, 0x7B, 0x01, 0xE4, 0xFD,
+0x12, 0x52, 0x21, 0x90, 0x93, 0x6F, 0xE0, 0xFF, 0x90, 0x93, 0x6E, 0xE0, 0x2F, 0xFF, 0x90, 0x93,
+0x6D, 0xE0, 0x34, 0x00, 0xCF, 0x24, 0x30, 0xCF, 0x34, 0x00, 0xFE, 0x90, 0x93, 0x70, 0xF0, 0xA3,
+0xEF, 0xF0, 0xB1, 0x6B, 0xD1, 0x26, 0xFD, 0x90, 0x88, 0xD9, 0xE0, 0xFB, 0xE4, 0xFF, 0x12, 0x15,
+0x44, 0xD1, 0x26, 0xFD, 0x90, 0x88, 0xD5, 0xE0, 0xFB, 0x7F, 0x11, 0x12, 0x15, 0x44, 0xF1, 0xD6,
+0x90, 0x88, 0x88, 0xB1, 0x64, 0x22, 0x90, 0x93, 0x70, 0xE0, 0xFC, 0xA3, 0xE0, 0x22, 0xD3, 0x10,
+0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x93, 0xF9, 0xED, 0xF0, 0xA3, 0xEB, 0xF0, 0x90, 0x93, 0xF8,
+0xEF, 0xF0, 0xE4, 0xFD, 0xFC, 0x12, 0xD8, 0xA6, 0x90, 0x93, 0xF8, 0xE0, 0x90, 0x04, 0x25, 0xF0,
+0x90, 0x93, 0xF9, 0xE0, 0x60, 0x05, 0xD1, 0xE8, 0x44, 0x80, 0xF0, 0xAF, 0x05, 0x74, 0x20, 0x2F,
+0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x54, 0xC0, 0xF0, 0xD1, 0xE8, 0x54, 0xC0, 0xF0,
+0x90, 0x93, 0xFB, 0xE0, 0xFF, 0xAE, 0x05, 0x74, 0x18, 0x2E, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5,
+0x83, 0xEF, 0xF0, 0x90, 0x00, 0x8B, 0xE0, 0xD3, 0x94, 0x03, 0x74, 0x10, 0x40, 0x0D, 0x2E, 0xF5,
+0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0x74, 0x04, 0xF0, 0x80, 0x0A, 0x2E, 0xF5, 0x82, 0xE4, 0x34,
+0xFC, 0xF5, 0x83, 0xE4, 0xF0, 0xAF, 0x05, 0xD1, 0xDD, 0xE0, 0x54, 0x01, 0xFE, 0x90, 0x93, 0xFA,
+0xE0, 0x25, 0xE0, 0x25, 0xE0, 0xFB, 0xEE, 0x44, 0x02, 0x4B, 0xFE, 0xD1, 0xDD, 0xEE, 0xF0, 0x74,
+0x11, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0x74, 0xFF, 0xF0, 0x74, 0x29, 0x2F, 0xF1,
+0x04, 0x54, 0xF7, 0xF0, 0xAE, 0x04, 0xAF, 0x05, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x74, 0x12, 0x2F,
+0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0x22, 0x74, 0x21, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0xFC,
+0xF5, 0x83, 0xE0, 0x22, 0xE0, 0xFE, 0x24, 0x28, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0,
+0xFF, 0x74, 0x29, 0x2E, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x22, 0x90, 0x88, 0xD9,
+0xF1, 0xAD, 0xD1, 0xF4, 0xFD, 0x90, 0x93, 0x06, 0xE0, 0x24, 0x2C, 0xF1, 0xDD, 0x90, 0x93, 0x06,
+0xE0, 0x2F, 0x24, 0x30, 0xA3, 0xF0, 0xE0, 0xFD, 0x24, 0x04, 0xF1, 0xCE, 0xE0, 0xFE, 0x74, 0x05,
+0x2D, 0xF1, 0xC6, 0x12, 0xBC, 0x4B, 0x90, 0x88, 0x80, 0xF0, 0xA3, 0xEF, 0xF0, 0x90, 0x93, 0x07,
+0xE0, 0x24, 0x0C, 0xF9, 0xE4, 0x34, 0xFC, 0xF1, 0xBE, 0x75, 0x1E, 0x04, 0x7B, 0x01, 0x7A, 0x88,
+0x79, 0x82, 0x12, 0x6A, 0x21, 0x90, 0x93, 0x07, 0xE0, 0x24, 0x14, 0xF0, 0xE0, 0xFD, 0x24, 0x01,
+0x12, 0xD8, 0xB9, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0x12, 0xBC, 0x4B, 0x90, 0x88,
+0x86, 0xF0, 0xA3, 0xEF, 0xF0, 0x90, 0x88, 0xDA, 0xF1, 0xAD, 0x90, 0x88, 0x7C, 0xE0, 0xFE, 0xA3,
+0xE0, 0xFF, 0x4E, 0x60, 0x11, 0x90, 0x93, 0x06, 0xE0, 0xF1, 0xB8, 0x8F, 0x1E, 0x7B, 0x01, 0x7A,
+0x88, 0x79, 0x8A, 0x12, 0x6A, 0x21, 0x90, 0x88, 0xDB, 0xF1, 0xAD, 0xF1, 0xB8, 0x90, 0x88, 0x7E,
+0xA3, 0xE0, 0xF5, 0x1E, 0x7B, 0x01, 0x7A, 0x88, 0x79, 0xAA, 0x02, 0x6A, 0x21, 0xE0, 0xFF, 0x12,
+0x7B, 0x2A, 0x90, 0x93, 0x06, 0xEF, 0xF0, 0x22, 0x24, 0x00, 0xF9, 0xE4, 0x34, 0xFC, 0x75, 0x1B,
+0x01, 0xF5, 0x1C, 0x89, 0x1D, 0x22, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0x22, 0xF5, 0x82,
+0xE4, 0x34, 0xFC, 0xF5, 0x83, 0x22, 0x90, 0x04, 0x1F, 0x74, 0x20, 0xF0, 0x22, 0xF5, 0x82, 0xE4,
+0x34, 0xFC, 0xF5, 0x83, 0xE0, 0xFB, 0x02, 0x5D, 0x98, 0x90, 0x01, 0xCC, 0xE0, 0x54, 0x0F, 0x90,
+0x93, 0x00, 0xF0, 0x90, 0x93, 0x00, 0xE0, 0xFD, 0x70, 0x03, 0x02, 0xB0, 0xE6, 0x90, 0x85, 0x1D,
+0xE0, 0xFF, 0x70, 0x06, 0xA3, 0xE0, 0x64, 0x09, 0x60, 0x0A, 0xEF, 0x14, 0xFF, 0x90, 0x85, 0x1E,
+0xE0, 0xB5, 0x07, 0x04, 0x7F, 0x01, 0x80, 0x02, 0x7F, 0x00, 0xEF, 0x60, 0x08, 0x90, 0x01, 0xC1,
+0xE0, 0x44, 0x01, 0xF0, 0x22, 0x90, 0x94, 0x0C, 0xE0, 0x31, 0x35, 0x80, 0x05, 0xC3, 0x33, 0xCE,
+0x33, 0xCE, 0xD8, 0xF9, 0xFF, 0xEF, 0x5D, 0x70, 0x02, 0x01, 0xC8, 0xE4, 0x90, 0x93, 0x01, 0xF0,
+0x90, 0x93, 0x01, 0xE0, 0xF9, 0xC3, 0x94, 0x04, 0x50, 0x31, 0x11, 0xE7, 0xA4, 0xFF, 0xE9, 0xFD,
+0x7C, 0x00, 0x2F, 0xFF, 0xEC, 0x35, 0xF0, 0xFE, 0x74, 0xD0, 0x11, 0xFF, 0x90, 0x84, 0xCD, 0x11,
+0xEF, 0x11, 0xE7, 0xA4, 0x2D, 0xFF, 0xEC, 0x35, 0xF0, 0xFE, 0x74, 0xF0, 0x11, 0xFF, 0x90, 0x84,
+0xD1, 0x11, 0xEF, 0x90, 0x93, 0x01, 0xE0, 0x04, 0xF0, 0x80, 0xC5, 0x90, 0x93, 0x00, 0xE0, 0xFF,
+0x90, 0x94, 0x0C, 0x31, 0x17, 0x80, 0x02, 0xC3, 0x33, 0xD8, 0xFC, 0xF4, 0x5F, 0x90, 0x93, 0x00,
+0xF0, 0x90, 0x94, 0x0C, 0xE0, 0xFF, 0x74, 0x01, 0xA8, 0x07, 0x08, 0x80, 0x02, 0xC3, 0x33, 0xD8,
+0xFC, 0x90, 0x01, 0xCC, 0xF0, 0x90, 0x94, 0x0C, 0xE0, 0x04, 0xF0, 0xE0, 0x54, 0x03, 0xF0, 0x90,
+0x85, 0x1E, 0x12, 0xB8, 0x48, 0xB4, 0x0A, 0x02, 0x7F, 0x01, 0xEF, 0x70, 0x03, 0x02, 0xAF, 0xF3,
+0xE4, 0x90, 0x85, 0x1E, 0xF0, 0x02, 0xAF, 0xF3, 0x90, 0x01, 0xC0, 0xE0, 0x44, 0x02, 0xF0, 0x90,
+0x94, 0x0C, 0xE0, 0x44, 0x80, 0x90, 0x00, 0x8A, 0xF0, 0x11, 0xE7, 0x90, 0x01, 0xD0, 0x12, 0x05,
+0x28, 0xE0, 0x90, 0x01, 0xC3, 0xF0, 0x22, 0x90, 0x94, 0x0C, 0xE0, 0x75, 0xF0, 0x04, 0x22, 0x12,
+0x05, 0x28, 0xE5, 0x82, 0x29, 0xF5, 0x82, 0xE4, 0x35, 0x83, 0xF5, 0x83, 0xEF, 0xF0, 0x22, 0x2F,
+0xF5, 0x82, 0x74, 0x01, 0x3E, 0xF5, 0x83, 0xE0, 0xFF, 0x90, 0x85, 0x1E, 0xE0, 0x75, 0xF0, 0x08,
+0x22, 0x75, 0xF0, 0x03, 0x12, 0x05, 0x28, 0xE0, 0xFE, 0x74, 0x01, 0xA8, 0x06, 0x08, 0x22, 0x13,
+0x13, 0x13, 0x54, 0x1F, 0x24, 0x75, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83, 0xE0, 0xFD, 0x7C,
+0x00, 0xE5, 0x63, 0x54, 0x07, 0xFF, 0x74, 0x01, 0x7E, 0x00, 0xA8, 0x07, 0x08, 0x22, 0x90, 0x04,
+0x85, 0xE0, 0xF5, 0x6C, 0x90, 0x93, 0x9E, 0xE0, 0x04, 0xF0, 0xE4, 0xF5, 0x63, 0x90, 0x85, 0xBB,
+0xE0, 0xFF, 0xE5, 0x63, 0xC3, 0x9F, 0x40, 0x02, 0xA1, 0x75, 0xE5, 0x63, 0xB1, 0x85, 0xE0, 0xF5,
+0x6E, 0x12, 0xDA, 0x12, 0xE0, 0x65, 0x6E, 0x60, 0x16, 0x90, 0x8A, 0x71, 0xE5, 0x6E, 0xF0, 0xE4,
+0xA3, 0xF0, 0xAB, 0x63, 0xFD, 0xFF, 0x12, 0x52, 0xC3, 0x12, 0xDA, 0x12, 0xE5, 0x6E, 0xF0, 0x90,
+0x04, 0xA0, 0xE0, 0x64, 0x01, 0x70, 0x4C, 0xA3, 0xE0, 0x65, 0x63, 0x70, 0x46, 0xA3, 0xE0, 0xF5,
+0x64, 0xA3, 0xE0, 0x90, 0x93, 0x4F, 0xF0, 0xE5, 0x63, 0xB1, 0x85, 0xE0, 0x65, 0x64, 0x70, 0x02,
+0xA1, 0x71, 0xE5, 0x63, 0xB1, 0x85, 0xE5, 0x64, 0xF0, 0xE5, 0x63, 0xD1, 0x9A, 0xE0, 0x54, 0xFC,
+0xFF, 0x90, 0x93, 0x4F, 0xE0, 0x54, 0x03, 0x4F, 0xFF, 0xE5, 0x63, 0xD1, 0x9A, 0xEF, 0xF0, 0x90,
+0x8A, 0x71, 0xE5, 0x64, 0xF0, 0xA3, 0x74, 0xFF, 0xF0, 0xAB, 0x63, 0xE4, 0xFD, 0xFF, 0x12, 0x52,
+0xC3, 0xA1, 0x71, 0xAF, 0x63, 0x12, 0x77, 0x39, 0x75, 0xF0, 0x12, 0xE5, 0x63, 0x12, 0x8D, 0x32,
+0x12, 0x8F, 0x66, 0xFD, 0xF1, 0x2A, 0xED, 0xF0, 0x90, 0x93, 0x58, 0xE4, 0xF1, 0x79, 0xE4, 0xF0,
+0xA3, 0xE5, 0x63, 0xF0, 0x31, 0x1F, 0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0xFF,
+0xEE, 0x5C, 0xFE, 0xEF, 0x5D, 0xFF, 0x90, 0x93, 0x5C, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0x7B, 0x02,
+0x7A, 0x00, 0xE4, 0xFD, 0x7F, 0x01, 0xD1, 0x19, 0xF1, 0x55, 0xFE, 0xA3, 0xE0, 0xFF, 0xF1, 0x48,
+0xFD, 0xE5, 0x63, 0x12, 0xC7, 0x77, 0x54, 0x80, 0xFB, 0xF1, 0x2A, 0xEB, 0xF0, 0x12, 0xD1, 0x67,
+0xED, 0xF0, 0x90, 0x93, 0x56, 0x12, 0xBF, 0x44, 0x90, 0x93, 0x5C, 0xF0, 0xA3, 0xF0, 0x7B, 0x03,
+0xFA, 0xFD, 0x7F, 0x01, 0xD1, 0x19, 0xAF, 0x63, 0x12, 0x77, 0x39, 0xEF, 0x70, 0x02, 0xA1, 0x71,
+0x75, 0xF0, 0x12, 0xE5, 0x63, 0x12, 0x8D, 0x32, 0x12, 0x8F, 0x66, 0x30, 0xE0, 0x02, 0xA1, 0x71,
+0xE5, 0x63, 0x31, 0x1F, 0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0xFF, 0xEE, 0x5C,
+0xFE, 0xEF, 0x5D, 0x4E, 0x60, 0x02, 0xA1, 0x71, 0xF1, 0x55, 0xFE, 0xA3, 0xE0, 0x4E, 0x70, 0x06,
+0xF1, 0x48, 0x70, 0x02, 0xA1, 0x71, 0xE5, 0x63, 0x75, 0xF0, 0x12, 0xA4, 0x24, 0x44, 0xF9, 0x74,
+0x89, 0x35, 0xF0, 0xFA, 0x7B, 0x01, 0x90, 0x93, 0x4A, 0x12, 0x87, 0x79, 0xD1, 0xA7, 0x12, 0xDA,
+0x90, 0x12, 0x03, 0xED, 0x2F, 0xFF, 0xF1, 0x18, 0x2F, 0xFF, 0xF1, 0x1E, 0x2F, 0xFF, 0xF1, 0x24,
+0x2F, 0xF5, 0x6D, 0xF1, 0x55, 0xF5, 0x69, 0xA3, 0xE0, 0xF5, 0x6A, 0xF1, 0x48, 0xFF, 0x90, 0x93,
+0x4D, 0xE4, 0xF0, 0xA3, 0xEF, 0xF0, 0xE5, 0x63, 0xB1, 0x85, 0xE0, 0xF5, 0x64, 0x54, 0x80, 0xF5,
+0x66, 0xE5, 0x64, 0x54, 0x7F, 0xF5, 0x65, 0xD1, 0xA7, 0x12, 0x03, 0xED, 0xD1, 0xAD, 0x12, 0xDA,
+0x90, 0x90, 0x93, 0x58, 0xD1, 0xB1, 0xF1, 0x18, 0xFF, 0x90, 0x93, 0x5A, 0xD1, 0xB1, 0xF1, 0x1E,
+0xFF, 0x90, 0x93, 0x5C, 0xD1, 0xB1, 0x7B, 0x01, 0xF1, 0x03, 0xD1, 0xA7, 0xF1, 0x24, 0xD1, 0xAD,
+0x90, 0x93, 0x4D, 0xE0, 0xFF, 0xA3, 0xE0, 0x90, 0x93, 0x58, 0xCF, 0xF0, 0xA3, 0xEF, 0xF0, 0xA3,
+0x12, 0xDA, 0x88, 0xA3, 0xE4, 0xF0, 0xA3, 0xE5, 0x64, 0xF0, 0x7B, 0x02, 0xF1, 0x03, 0x74, 0x7C,
+0x25, 0x63, 0xF5, 0x82, 0xE4, 0x34, 0x90, 0xF5, 0x83, 0xE0, 0xC3, 0x94, 0x05, 0x40, 0x02, 0xA1,
+0x55, 0x75, 0xF0, 0x12, 0xE5, 0x63, 0x12, 0xCF, 0x8A, 0xFF, 0xE5, 0x65, 0xD3, 0x9F, 0x40, 0x08,
+0x8F, 0x65, 0xE5, 0x65, 0x45, 0x66, 0xF5, 0x64, 0xE5, 0x65, 0x90, 0x82, 0xE1, 0x93, 0xF5, 0x6B,
+0xE5, 0x66, 0x60, 0x04, 0x05, 0x6B, 0x05, 0x6B, 0x90, 0x04, 0x8C, 0xE0, 0x64, 0x01, 0x70, 0x28,
+0xE5, 0x65, 0xC3, 0x94, 0x0C, 0x40, 0x21, 0x74, 0x84, 0x25, 0x65, 0xF5, 0x82, 0xE4, 0x34, 0x04,
+0xF5, 0x83, 0xE0, 0xFF, 0x54, 0x7F, 0xFE, 0xEF, 0x30, 0xE7, 0x06, 0xE5, 0x6B, 0x2E, 0xFF, 0x80,
+0x05, 0xC3, 0xE5, 0x6B, 0x9E, 0xFF, 0x8F, 0x6B, 0xE5, 0x6B, 0xD3, 0x94, 0x1A, 0xAF, 0x6B, 0x40,
+0x02, 0x7F, 0x1A, 0x8F, 0x6B, 0x12, 0xA6, 0x87, 0x7B, 0x03, 0xFA, 0xF1, 0x05, 0xE5, 0x64, 0x90,
+0x83, 0x59, 0x93, 0xFF, 0xD3, 0x90, 0x93, 0x4E, 0xE0, 0x9F, 0x90, 0x93, 0x4D, 0xE0, 0x94, 0x00,
+0x40, 0x02, 0x80, 0x72, 0xC3, 0xE5, 0x6A, 0x94, 0x0A, 0xE5, 0x69, 0x94, 0x00, 0x40, 0x02, 0x81,
+0x98, 0xD1, 0xE6, 0xC3, 0x94, 0x01, 0x40, 0x04, 0xD1, 0xE6, 0x14, 0xF0, 0xD1, 0xA7, 0xF1, 0x24,
+0xFF, 0x90, 0x93, 0x4E, 0xE0, 0x2F, 0xFF, 0x90, 0x93, 0x4D, 0xE0, 0x35, 0xF0, 0xFE, 0xF1, 0x1E,
+0x2F, 0xFF, 0xEE, 0x35, 0xF0, 0xFE, 0xF1, 0x18, 0x2F, 0xFD, 0xEE, 0x35, 0xF0, 0xFC, 0xE5, 0x69,
+0xC3, 0x13, 0xFE, 0xE5, 0x6A, 0x13, 0xFF, 0xD3, 0xED, 0x9F, 0xEC, 0x9E, 0x40, 0x2D, 0xE5, 0x63,
+0x94, 0x05, 0x50, 0x0A, 0x74, 0xAF, 0x25, 0x63, 0x12, 0xAC, 0x7B, 0x74, 0x03, 0xF0, 0x90, 0x93,
+0x56, 0x12, 0xDA, 0x88, 0xE5, 0x69, 0xC3, 0x13, 0xA3, 0xF0, 0xE5, 0x6A, 0x13, 0xA3, 0xD1, 0xB8,
+0xF1, 0x3E, 0x7B, 0x01, 0xD1, 0x13, 0x12, 0xCE, 0xA1, 0xA1, 0x55, 0xD1, 0xA7, 0x12, 0x03, 0xED,
+0x65, 0x6D, 0x70, 0x02, 0xE5, 0xF0, 0x70, 0x4F, 0x90, 0x93, 0x56, 0xF0, 0xA3, 0xE5, 0x6D, 0xF0,
+0xC3, 0x13, 0xFF, 0xA3, 0xE4, 0xF0, 0xA3, 0xEF, 0xD1, 0xB8, 0xF1, 0x3E, 0x7B, 0x02, 0xD1, 0x13,
+0xE5, 0x63, 0xC3, 0x94, 0x05, 0x50, 0x0E, 0xD1, 0xE6, 0xD3, 0x94, 0x00, 0x40, 0x07, 0x12, 0xA6,
+0x82, 0x7B, 0x03, 0x80, 0x0C, 0xE5, 0x6D, 0xC3, 0x94, 0x03, 0x50, 0x10, 0x12, 0xA6, 0x82, 0x7B,
+0x04, 0xFA, 0xD1, 0x15, 0x7D, 0x06, 0xAF, 0x63, 0xF1, 0x85, 0xA1, 0x71, 0xE4, 0xFD, 0xAF, 0x63,
+0x12, 0xD0, 0x13, 0xF1, 0x81, 0xA1, 0x55, 0x12, 0xA6, 0x82, 0x7B, 0x08, 0xFA, 0xD1, 0x15, 0x7D,
+0x01, 0xAF, 0x63, 0x12, 0x65, 0xC2, 0xA1, 0x55, 0x74, 0xAF, 0x25, 0x63, 0x12, 0xAC, 0x7B, 0xE4,
+0xF0, 0x90, 0x93, 0x54, 0x74, 0x02, 0xF0, 0xAB, 0x6B, 0xAD, 0x63, 0xAF, 0x6A, 0xAE, 0x69, 0x12,
+0xCD, 0x97, 0x8E, 0x67, 0x8F, 0x68, 0x12, 0xD9, 0xBC, 0xC3, 0x74, 0x01, 0x93, 0x95, 0x68, 0xE4,
+0x93, 0x95, 0x67, 0x50, 0x1B, 0xD1, 0x8A, 0xE4, 0xF0, 0x7D, 0x01, 0xAF, 0x63, 0x12, 0xD0, 0x13,
+0xF1, 0x62, 0xF1, 0x31, 0xF0, 0xE4, 0x90, 0x93, 0x5A, 0x12, 0xA6, 0x95, 0x7B, 0x01, 0x80, 0x25,
+0xD1, 0xFB, 0xC3, 0xE5, 0x68, 0x9F, 0xE5, 0x67, 0x94, 0x00, 0x50, 0x1E, 0xD1, 0x8A, 0xE4, 0xF0,
+0x12, 0xCE, 0xA1, 0x90, 0x93, 0x56, 0xF1, 0x31, 0xD1, 0xFA, 0x12, 0xD1, 0x67, 0xEF, 0xF0, 0xE4,
+0x12, 0xA6, 0x94, 0x7B, 0x02, 0xFA, 0xF1, 0x38, 0x80, 0x4B, 0xF1, 0x81, 0xF1, 0x62, 0xF1, 0x31,
+0xD1, 0xFA, 0xF1, 0x2A, 0xEF, 0xF0, 0xD1, 0x8A, 0xE0, 0xF1, 0x3E, 0x7B, 0x03, 0x7A, 0x00, 0xF1,
+0x38, 0xD1, 0x8A, 0xE0, 0x04, 0xF0, 0xE5, 0x65, 0x90, 0x83, 0x6D, 0x93, 0xFF, 0xD1, 0x8A, 0xE0,
+0xC3, 0x9F, 0x40, 0x21, 0xD1, 0x8A, 0xE4, 0xD1, 0xFA, 0x12, 0xD9, 0xBC, 0x74, 0x01, 0x93, 0x2F,
+0xFF, 0xE4, 0x93, 0x34, 0x00, 0xC3, 0x13, 0xFE, 0xEF, 0x13, 0xFF, 0xE5, 0x63, 0x12, 0xCE, 0x95,
+0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0xE4, 0xF5, 0x6D, 0xFD, 0xAF, 0x63, 0x12, 0x65, 0xC2, 0xE4, 0x90,
+0x93, 0x56, 0xF0, 0x12, 0xA6, 0x90, 0xA3, 0xF0, 0x7B, 0x01, 0xFA, 0x7D, 0xFF, 0x7F, 0x01, 0xD1,
+0x19, 0x05, 0x63, 0x21, 0x4D, 0x22, 0x74, 0xBC, 0x25, 0x79, 0xF5, 0x82, 0xE4, 0x34, 0x90, 0xF5,
+0x83, 0xE4, 0xF0, 0xE5, 0x79, 0xC4, 0x54, 0xF0, 0x24, 0x00, 0xF5, 0x82, 0xE4, 0x34, 0x81, 0xF5,
+0x83, 0x22, 0x8D, 0x79, 0xEF, 0x30, 0xE6, 0x16, 0xB1, 0x83, 0xD1, 0x96, 0xD1, 0xF3, 0xF0, 0xE4,
+0xFB, 0xAF, 0x79, 0x12, 0x27, 0x3D, 0xB1, 0x76, 0xD1, 0x83, 0x74, 0x01, 0x80, 0x5C, 0xF1, 0x0B,
+0x04, 0xF0, 0xF1, 0x0B, 0x64, 0x02, 0x70, 0x2A, 0x74, 0x9F, 0x25, 0x79, 0xF5, 0x82, 0xE4, 0x34,
+0x93, 0xF5, 0x83, 0xE0, 0xFD, 0xF4, 0x60, 0x02, 0x80, 0x04, 0xB1, 0x83, 0xE0, 0xFD, 0xD1, 0x98,
+0xD1, 0xF3, 0xF0, 0x7B, 0x01, 0xAF, 0x79, 0x12, 0x27, 0x3D, 0xB1, 0x83, 0xD1, 0x83, 0x74, 0x02,
+0x80, 0x28, 0xF1, 0x0B, 0xD3, 0x94, 0x03, 0x40, 0x0D, 0xAF, 0x79, 0x12, 0x6D, 0x94, 0xB1, 0x76,
+0xD1, 0x83, 0x74, 0x03, 0x80, 0x14, 0xB1, 0x83, 0xD1, 0x96, 0xD1, 0xF3, 0xF0, 0x7B, 0x01, 0xAF,
+0x79, 0x12, 0x27, 0x3D, 0xB1, 0x83, 0xD1, 0x83, 0x74, 0x02, 0xF0, 0xAB, 0x79, 0xE4, 0xFD, 0xFF,
+0x02, 0x52, 0xC3, 0x7A, 0x00, 0x7D, 0x03, 0x7F, 0x01, 0x90, 0x01, 0xC6, 0xE0, 0xFE, 0x64, 0x80,
+0x70, 0x60, 0x90, 0x93, 0x60, 0xEF, 0xF0, 0xA3, 0xED, 0xF0, 0xEB, 0xA3, 0xF0, 0xEA, 0xA3, 0xF0,
+0x90, 0x93, 0x56, 0xE0, 0xFC, 0xA3, 0xE0, 0x90, 0x93, 0x64, 0xF0, 0xEC, 0xA3, 0xF0, 0x90, 0x93,
+0x58, 0xE0, 0xFC, 0xA3, 0xE0, 0x90, 0x93, 0x66, 0xF0, 0xEC, 0xA3, 0xF0, 0x90, 0x93, 0x5A, 0xE0,
+0xFC, 0xA3, 0xE0, 0x90, 0x93, 0x68, 0xF0, 0xEC, 0xA3, 0xF0, 0x90, 0x93, 0x5C, 0xE0, 0xFC, 0xA3,
+0xE0, 0x90, 0x93, 0x6A, 0xF0, 0xEC, 0xA3, 0xF0, 0x90, 0x93, 0x5E, 0x74, 0xFE, 0xF0, 0x90, 0x93,
+0x6C, 0x74, 0x0C, 0xF0, 0x7B, 0x01, 0x7A, 0x93, 0x79, 0x5E, 0x12, 0x5E, 0x10, 0x7F, 0x04, 0x12,
+0x87, 0xBB, 0x22, 0xE0, 0x90, 0x8A, 0x71, 0xF0, 0xA3, 0x22, 0x74, 0xAC, 0x25, 0x63, 0xF5, 0x82,
+0xE4, 0x34, 0x8F, 0xF5, 0x83, 0x22, 0xE0, 0xFD, 0xE5, 0x79, 0xC4, 0x54, 0xF0, 0x24, 0x05, 0xF5,
+0x82, 0xE4, 0x34, 0x81, 0xF5, 0x83, 0x22, 0x90, 0x93, 0x4A, 0x02, 0x87, 0x70, 0xFF, 0x90, 0x93,
+0x56, 0xE5, 0xF0, 0xF0, 0xA3, 0xEF, 0xF0, 0x22, 0xF0, 0x90, 0x93, 0x4A, 0x12, 0x87, 0x70, 0x90,
0x00, 0x06, 0x12, 0x04, 0x18, 0xFF, 0xAE, 0xF0, 0x90, 0x00, 0x08, 0x12, 0x04, 0x18, 0x2F, 0xFF,
0xE5, 0xF0, 0x3E, 0xFE, 0x90, 0x00, 0x04, 0x12, 0x04, 0x18, 0x2F, 0xFF, 0xEE, 0x35, 0xF0, 0x90,
-0x92, 0x43, 0xF0, 0xA3, 0xEF, 0xF0, 0x74, 0xDC, 0x25, 0x62, 0xF5, 0x82, 0xE4, 0x34, 0x92, 0xF5,
-0x83, 0x22, 0x7A, 0x00, 0x7D, 0x03, 0x7F, 0x01, 0x90, 0x04, 0x84, 0xE0, 0xFE, 0x60, 0x60, 0x90,
-0x92, 0x49, 0xEF, 0xF0, 0xA3, 0xED, 0xF0, 0xEB, 0xA3, 0xF0, 0xEA, 0xA3, 0xF0, 0x90, 0x92, 0x3F,
-0xE0, 0xFC, 0xA3, 0xE0, 0x90, 0x92, 0x4D, 0xF0, 0xEC, 0xA3, 0xF0, 0x90, 0x92, 0x41, 0xE0, 0xFC,
-0xA3, 0xE0, 0x90, 0x92, 0x4F, 0xF0, 0xEC, 0xA3, 0xF0, 0x90, 0x92, 0x43, 0xE0, 0xFC, 0xA3, 0xE0,
-0x90, 0x92, 0x51, 0xF0, 0xEC, 0xA3, 0xF0, 0x90, 0x92, 0x45, 0xE0, 0xFC, 0xA3, 0xE0, 0x90, 0x92,
-0x53, 0xF0, 0xEC, 0xA3, 0xF0, 0x90, 0x92, 0x47, 0x74, 0xFE, 0xF0, 0x90, 0x92, 0x55, 0x74, 0x0C,
-0xF0, 0x7B, 0x01, 0x7A, 0x92, 0x79, 0x47, 0x12, 0x5E, 0x10, 0x7F, 0x04, 0x12, 0x87, 0xBB, 0x22,
-0x74, 0xAC, 0x25, 0x62, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83, 0x22, 0xFF, 0x90, 0x92, 0x3F,
-0xE5, 0xF0, 0xF0, 0xA3, 0xEF, 0xF0, 0x22, 0x8D, 0x78, 0xEF, 0x30, 0xE6, 0x17, 0x12, 0x8F, 0x5C,
-0x31, 0xD7, 0xF1, 0xC1, 0xE4, 0xFB, 0xAF, 0x78, 0x12, 0x27, 0x3D, 0x12, 0x8F, 0x4F, 0xF1, 0x8B,
-0x74, 0x01, 0x80, 0x5E, 0xF1, 0xDD, 0xE0, 0x04, 0xF0, 0xF1, 0xDD, 0xE0, 0x64, 0x02, 0x70, 0x27,
-0x74, 0xCC, 0x25, 0x78, 0x12, 0x8F, 0xD0, 0xE0, 0xFD, 0xF4, 0x60, 0x02, 0x80, 0x05, 0x12, 0x8F,
-0x5C, 0xE0, 0xFD, 0x31, 0xD9, 0xF1, 0xC1, 0x7B, 0x01, 0xAF, 0x78, 0x12, 0x27, 0x3D, 0x12, 0x8F,
-0x5C, 0xF1, 0x8B, 0x74, 0x02, 0x80, 0x2B, 0xF1, 0xDD, 0xE0, 0xD3, 0x94, 0x03, 0x40, 0x0E, 0xAF,
-0x78, 0x12, 0x6D, 0x94, 0x12, 0x8F, 0x4F, 0xF1, 0x8B, 0x74, 0x03, 0x80, 0x15, 0x12, 0x8F, 0x5C,
-0x31, 0xD7, 0xF1, 0xC1, 0x7B, 0x01, 0xAF, 0x78, 0x12, 0x27, 0x3D, 0x12, 0x8F, 0x5C, 0xF1, 0x8B,
-0x74, 0x02, 0xF0, 0xAB, 0x78, 0xE4, 0xFD, 0xFF, 0x02, 0x52, 0xC3, 0xE0, 0x90, 0x8A, 0x71, 0xF0,
-0xA3, 0x22, 0xE5, 0x64, 0x90, 0x83, 0x1D, 0x93, 0xFF, 0x22, 0x7A, 0x00, 0x7D, 0x01, 0x7F, 0x01,
-0xC1, 0x88, 0x90, 0x00, 0x04, 0x02, 0x04, 0x18, 0x90, 0x00, 0x06, 0x02, 0x04, 0x18, 0x90, 0x00,
-0x08, 0x02, 0x04, 0x18, 0x90, 0x92, 0x43, 0xE4, 0xF0, 0xA3, 0x22, 0x7D, 0x05, 0x7F, 0x01, 0xC1,
-0x88, 0xE0, 0x54, 0x03, 0x90, 0x91, 0x0B, 0xF0, 0x22, 0x75, 0xF0, 0x12, 0xE5, 0x62, 0x90, 0x89,
-0x42, 0x22, 0xE0, 0xFF, 0x90, 0x92, 0x45, 0xE4, 0xF0, 0xA3, 0xEF, 0xF0, 0x22, 0x74, 0xBC, 0x25,
-0x78, 0xF5, 0x82, 0xE4, 0x34, 0x90, 0xF5, 0x83, 0x22, 0xE4, 0xFD, 0x01, 0x9D, 0x7D, 0x20, 0x7F,
-0xFF, 0x11, 0xDE, 0x12, 0xB5, 0xA0, 0x90, 0x85, 0xBF, 0x74, 0x02, 0xF0, 0x22, 0x12, 0x02, 0xF6,
-0xFF, 0x90, 0x92, 0x78, 0xF0, 0xBF, 0x01, 0x07, 0x11, 0x10, 0xE4, 0x90, 0x92, 0x78, 0xF0, 0x22,
-0x11, 0xC0, 0x7F, 0xF5, 0x7E, 0x01, 0x12, 0x64, 0x37, 0xBF, 0x01, 0x06, 0x90, 0x92, 0x07, 0xE0,
-0xA3, 0xF0, 0x11, 0xC0, 0x7F, 0xF6, 0x7E, 0x01, 0x12, 0x64, 0x37, 0xBF, 0x01, 0x08, 0x90, 0x92,
-0x07, 0xE0, 0x90, 0x92, 0x09, 0xF0, 0x11, 0xC0, 0x7F, 0xF4, 0x7E, 0x01, 0x12, 0x64, 0x37, 0xBF,
-0x01, 0x08, 0x90, 0x92, 0x07, 0xE0, 0x90, 0x92, 0x0A, 0xF0, 0x11, 0xC0, 0x7F, 0xF3, 0x7E, 0x01,
-0x12, 0x64, 0x37, 0xBF, 0x01, 0x08, 0x90, 0x92, 0x07, 0xE0, 0x90, 0x92, 0x0B, 0xF0, 0x11, 0xC0,
-0x7F, 0xF2, 0x7E, 0x01, 0x12, 0x64, 0x37, 0xBF, 0x01, 0x08, 0x90, 0x92, 0x07, 0xE0, 0x90, 0x92,
-0x0C, 0xF0, 0x90, 0x92, 0x08, 0xE0, 0xFF, 0xA3, 0xE0, 0xFD, 0xA3, 0xE0, 0xFB, 0xA3, 0xE0, 0x90,
-0x92, 0x10, 0xF0, 0x90, 0x92, 0x0C, 0xE0, 0x90, 0x92, 0x11, 0xF0, 0x90, 0x92, 0x12, 0x74, 0x12,
-0xF0, 0x90, 0x92, 0x20, 0x74, 0x05, 0xF0, 0x90, 0x92, 0x14, 0xEF, 0xF0, 0xA3, 0xED, 0xF0, 0xA3,
-0xEB, 0xF0, 0x90, 0x92, 0x10, 0xE0, 0x90, 0x92, 0x17, 0xF0, 0x90, 0x92, 0x11, 0xE0, 0x90, 0x92,
-0x18, 0xF0, 0x7B, 0x01, 0x7A, 0x92, 0x79, 0x12, 0x12, 0x5E, 0x10, 0x7F, 0x04, 0x02, 0x87, 0xBB,
-0x7B, 0x01, 0x7A, 0x92, 0x79, 0x07, 0x22, 0x31, 0xAC, 0x7F, 0xF4, 0x7E, 0x00, 0x12, 0x64, 0x37,
-0xBF, 0x01, 0x06, 0x90, 0x92, 0x16, 0xE0, 0xA3, 0xF0, 0x31, 0xAC, 0x7F, 0xF5, 0x7E, 0x00, 0x12,
-0x64, 0x37, 0xBF, 0x01, 0x08, 0x90, 0x92, 0x16, 0xE0, 0x90, 0x92, 0x18, 0xF0, 0x31, 0xAC, 0x7F,
-0xF6, 0x7E, 0x00, 0x12, 0x64, 0x37, 0xBF, 0x01, 0x08, 0x90, 0x92, 0x16, 0xE0, 0x90, 0x92, 0x19,
-0xF0, 0x31, 0xAC, 0x7F, 0xF7, 0x7E, 0x00, 0x12, 0x64, 0x37, 0xBF, 0x01, 0x08, 0x90, 0x92, 0x16,
-0xE0, 0x90, 0x92, 0x1A, 0xF0, 0x31, 0xAC, 0x7F, 0xF8, 0x7E, 0x00, 0x12, 0x64, 0x37, 0xBF, 0x01,
-0x08, 0x90, 0x92, 0x16, 0xE0, 0x90, 0x92, 0x1B, 0xF0, 0x31, 0xAC, 0x51, 0x2D, 0xBF, 0x01, 0x08,
-0x90, 0x92, 0x16, 0xE0, 0x90, 0x92, 0x1C, 0xF0, 0x31, 0xAC, 0x51, 0x26, 0xBF, 0x01, 0x08, 0x90,
-0x92, 0x16, 0xE0, 0x90, 0x92, 0x1D, 0xF0, 0x31, 0xAC, 0x31, 0xB3, 0xBF, 0x01, 0x08, 0x90, 0x92,
-0x16, 0xE0, 0x90, 0x92, 0x1E, 0xF0, 0x90, 0x92, 0x07, 0x74, 0x19, 0xF0, 0x90, 0x92, 0x15, 0x74,
-0x08, 0xF0, 0x90, 0x92, 0x17, 0xE0, 0x90, 0x92, 0x09, 0xF0, 0x90, 0x92, 0x18, 0xE0, 0x90, 0x92,
-0x0A, 0xF0, 0x90, 0x92, 0x19, 0xE0, 0x90, 0x92, 0x0B, 0xF0, 0x90, 0x92, 0x1A, 0xE0, 0x90, 0x92,
-0x0C, 0xF0, 0x90, 0x92, 0x1B, 0xE0, 0x90, 0x92, 0x0D, 0xF0, 0x90, 0x92, 0x1C, 0xE0, 0x90, 0x92,
-0x0E, 0xF0, 0x90, 0x92, 0x1D, 0xE0, 0x90, 0x92, 0x0F, 0xF0, 0x90, 0x92, 0x1E, 0xE0, 0x90, 0x92,
-0x10, 0xF0, 0x11, 0xC0, 0x12, 0x5E, 0x10, 0x7F, 0x04, 0x02, 0x87, 0xBB, 0x7B, 0x01, 0x7A, 0x92,
-0x79, 0x16, 0x22, 0x7F, 0xFD, 0x7E, 0x00, 0x02, 0x64, 0x37, 0x7E, 0x00, 0x7F, 0x0B, 0x7D, 0x00,
-0x7B, 0x01, 0x7A, 0x92, 0x79, 0x7F, 0x12, 0x06, 0xDE, 0x51, 0x1F, 0x51, 0x2D, 0xBF, 0x01, 0x1C,
-0x90, 0x92, 0x29, 0xE0, 0xFE, 0x54, 0x01, 0x90, 0x92, 0x7F, 0xF0, 0xEE, 0x54, 0x04, 0x90, 0x92,
-0x81, 0xF0, 0x90, 0x92, 0x29, 0xE0, 0x54, 0x08, 0x90, 0x92, 0x80, 0xF0, 0x51, 0x1F, 0x51, 0x26,
-0xBF, 0x01, 0x16, 0x90, 0x92, 0x29, 0xE0, 0xFE, 0x54, 0x07, 0x90, 0x92, 0x83, 0xF0, 0xEE, 0x54,
-0xE0, 0xC4, 0x13, 0x54, 0x07, 0x90, 0x92, 0x82, 0xF0, 0x51, 0x1F, 0x31, 0xB3, 0xBF, 0x01, 0x0E,
-0x90, 0x92, 0x29, 0xE0, 0x54, 0x0C, 0x13, 0x13, 0x54, 0x3F, 0x90, 0x92, 0x84, 0xF0, 0x22, 0x7B,
-0x01, 0x7A, 0x92, 0x79, 0x29, 0x22, 0x7F, 0xFB, 0x7E, 0x00, 0x02, 0x64, 0x37, 0x7F, 0xF9, 0x7E,
-0x00, 0x02, 0x64, 0x37, 0x12, 0x02, 0xF6, 0xFF, 0x90, 0x92, 0x7E, 0xF0, 0xBF, 0x01, 0x07, 0x11,
-0xC7, 0xE4, 0x90, 0x92, 0x7E, 0xF0, 0x22, 0x90, 0x00, 0x80, 0xE0, 0x44, 0x80, 0xFD, 0x7F, 0x80,
-0x12, 0x7B, 0x3E, 0x12, 0xB8, 0x99, 0x12, 0xBF, 0x3E, 0x12, 0x7B, 0x9C, 0x51, 0xD1, 0x12, 0xB7,
-0xD8, 0x7F, 0x01, 0x12, 0x85, 0x15, 0x90, 0x92, 0x7D, 0x74, 0x02, 0xF0, 0xFF, 0x12, 0x85, 0x15,
-0x90, 0x92, 0x7D, 0xE0, 0x04, 0xF0, 0x12, 0xB8, 0x5C, 0x51, 0xEF, 0x90, 0x01, 0xCC, 0x74, 0x0F,
-0xF0, 0x90, 0x00, 0x80, 0xE0, 0x44, 0x40, 0xFD, 0x7F, 0x80, 0x12, 0x7B, 0x3E, 0x75, 0x20, 0xFF,
-0x12, 0x7C, 0xCD, 0x12, 0xB6, 0x8F, 0x90, 0x00, 0x81, 0xE0, 0x44, 0x04, 0xFD, 0x7F, 0x81, 0x12,
-0x7B, 0x3E, 0x12, 0xB8, 0x90, 0x31, 0xBA, 0x90, 0x00, 0x00, 0xE0, 0x54, 0xFB, 0xFD, 0xE4, 0xFF,
-0x12, 0xB6, 0x6C, 0x44, 0x04, 0xFD, 0x7F, 0x01, 0x12, 0x7B, 0x3E, 0x90, 0x01, 0x98, 0x74, 0x80,
-0xF0, 0xA3, 0x74, 0x88, 0xF0, 0xA3, 0xE4, 0xF0, 0xA3, 0x74, 0x80, 0xF0, 0xE4, 0xFF, 0x02, 0x85,
-0x9E, 0x90, 0x01, 0x01, 0xE0, 0x44, 0x04, 0xF0, 0x90, 0x01, 0x9A, 0xE0, 0x54, 0xC0, 0x12, 0xB6,
-0xF5, 0x90, 0x01, 0x99, 0xE0, 0x44, 0xC0, 0xF0, 0x90, 0x01, 0x9B, 0x74, 0x80, 0xF0, 0x22, 0xF1,
-0xED, 0x12, 0x7B, 0xEF, 0x12, 0x3C, 0x03, 0x12, 0xBE, 0xBC, 0xF1, 0xF3, 0x12, 0xC3, 0x7D, 0x71,
-0xD9, 0x71, 0x26, 0x12, 0x7B, 0x64, 0x12, 0x78, 0xB9, 0x90, 0x89, 0x16, 0xE0, 0x54, 0x7F, 0xF0,
-0x54, 0xBF, 0xF0, 0x54, 0xDF, 0xF0, 0x54, 0xF0, 0xF0, 0xE4, 0x90, 0x89, 0x18, 0xF0, 0x90, 0x89,
-0x16, 0xE0, 0x54, 0xEF, 0xF0, 0x22, 0x7E, 0x00, 0x7F, 0x24, 0x7D, 0x00, 0x7B, 0x01, 0x7A, 0x86,
-0x79, 0x72, 0x12, 0x06, 0xDE, 0x90, 0x06, 0x90, 0xE0, 0x44, 0x20, 0xF0, 0x12, 0xB6, 0xFD, 0x71,
-0xDF, 0x90, 0x84, 0xC5, 0xE0, 0xFF, 0x64, 0x02, 0x70, 0x29, 0x71, 0xD2, 0x30, 0xE0, 0x02, 0x7E,
-0x01, 0x90, 0x86, 0x90, 0x71, 0xD0, 0x30, 0xE1, 0x02, 0x7E, 0x01, 0x90, 0x86, 0x8E, 0x71, 0xD0,
-0x30, 0xE2, 0x02, 0x7E, 0x01, 0x90, 0x86, 0x8F, 0xEE, 0xF0, 0x90, 0xFD, 0x80, 0xE0, 0x90, 0x02,
-0xFB, 0xF0, 0x22, 0xEF, 0x64, 0x01, 0x70, 0x1D, 0x71, 0xC9, 0x30, 0xE0, 0x02, 0x7F, 0x01, 0x90,
-0x86, 0x90, 0x71, 0xC7, 0x30, 0xE1, 0x02, 0x7F, 0x01, 0x90, 0x86, 0x8E, 0x71, 0xC7, 0x30, 0xE2,
-0x02, 0x7F, 0x01, 0x80, 0x23, 0x90, 0x84, 0xC5, 0xE0, 0x64, 0x03, 0x70, 0x20, 0x71, 0xC0, 0x30,
-0xE0, 0x02, 0x7F, 0x01, 0x90, 0x86, 0x90, 0x71, 0xBE, 0x30, 0xE1, 0x02, 0x7F, 0x01, 0x90, 0x86,
-0x8E, 0x71, 0xBE, 0x30, 0xE2, 0x02, 0x7F, 0x01, 0x90, 0x86, 0x8F, 0xEF, 0xF0, 0x22, 0xEF, 0xF0,
-0x90, 0xFD, 0x78, 0xE0, 0x7F, 0x00, 0x22, 0xEF, 0xF0, 0x90, 0xFD, 0x70, 0xE0, 0x7F, 0x00, 0x22,
-0xEE, 0xF0, 0x90, 0xFD, 0x80, 0xE0, 0x7E, 0x00, 0x22, 0x12, 0xC4, 0x4C, 0x02, 0x06, 0xDE, 0x12,
-0xC5, 0xC1, 0xE4, 0x90, 0x88, 0xD8, 0x12, 0x96, 0x40, 0x90, 0x88, 0x76, 0xF0, 0x12, 0x96, 0x3B,
-0x12, 0x96, 0x41, 0x90, 0x88, 0x88, 0xF0, 0xA3, 0xF0, 0x90, 0x88, 0xCA, 0xF0, 0xA3, 0xF0, 0x22,
-0x90, 0x86, 0x72, 0x91, 0x0B, 0x30, 0xE0, 0x02, 0x71, 0xDF, 0x22, 0xE0, 0xFF, 0xC4, 0x13, 0x13,
-0x54, 0x03, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x8B, 0x5B, 0x8A, 0x5C, 0x89, 0x5D,
-0x90, 0x05, 0x27, 0xE0, 0xF5, 0x5E, 0x8B, 0x1B, 0x8A, 0x1C, 0x89, 0x1D, 0x75, 0x1E, 0x01, 0x7B,
-0x01, 0x7A, 0x85, 0x79, 0xBC, 0x12, 0x6A, 0x21, 0x12, 0x91, 0xC4, 0xFF, 0xC3, 0x13, 0x20, 0xE0,
-0x02, 0x81, 0xCE, 0x90, 0x85, 0xBC, 0xE0, 0x30, 0xE0, 0x72, 0xF1, 0x28, 0x75, 0x5E, 0x21, 0xF1,
-0x9A, 0x30, 0xE0, 0x05, 0x12, 0xC7, 0xFE, 0x80, 0x0D, 0xE4, 0x90, 0x85, 0xBD, 0xF0, 0xA3, 0xF0,
-0x7D, 0x40, 0xFF, 0x12, 0x7C, 0x41, 0xF1, 0x91, 0x54, 0x1F, 0x30, 0xE0, 0x03, 0x43, 0x5E, 0x12,
-0xEF, 0xC4, 0x54, 0x0F, 0x30, 0xE0, 0x03, 0x43, 0x5E, 0x14, 0x90, 0x85, 0xBC, 0xE0, 0xC4, 0x13,
-0x54, 0x07, 0x30, 0xE0, 0x03, 0x43, 0x5E, 0x80, 0x90, 0x85, 0xBC, 0xF1, 0xD6, 0x20, 0xE0, 0x03,
-0x43, 0x5E, 0x40, 0xB1, 0x72, 0x90, 0x85, 0xBF, 0xE0, 0x70, 0x05, 0x7F, 0x01, 0x12, 0xB4, 0x03,
-0x90, 0x85, 0xBC, 0x91, 0x0B, 0x30, 0xE0, 0x04, 0x7F, 0x04, 0x80, 0x0B, 0xF1, 0xAC, 0xEF, 0x60,
-0x04, 0x7F, 0x01, 0x80, 0x02, 0x7F, 0x02, 0x12, 0xB4, 0x03, 0xA1, 0x3D, 0xB1, 0x6F, 0x90, 0x85,
-0xBF, 0xE0, 0x64, 0x04, 0x60, 0x02, 0xA1, 0x6A, 0xFF, 0x12, 0xB4, 0x03, 0xA1, 0x6A, 0x90, 0x85,
-0xBC, 0xE0, 0x30, 0xE0, 0x70, 0xF1, 0x28, 0x43, 0x5E, 0x31, 0xF1, 0x9A, 0x30, 0xE0, 0x05, 0x12,
-0xC7, 0xFE, 0x80, 0x07, 0x7D, 0x40, 0xE4, 0xFF, 0x12, 0x7C, 0x41, 0xF1, 0x91, 0x54, 0x1F, 0x30,
-0xE0, 0x03, 0x43, 0x5E, 0x02, 0xEF, 0xC4, 0x54, 0x0F, 0x30, 0xE0, 0x03, 0x43, 0x5E, 0x04, 0xB1,
-0x72, 0x90, 0x85, 0xBC, 0x91, 0x0B, 0x30, 0xE0, 0x0A, 0xF1, 0x48, 0x60, 0x30, 0xE4, 0xFD, 0x7F,
-0x02, 0x80, 0x1E, 0x12, 0xB6, 0x64, 0x90, 0x85, 0xC0, 0xE0, 0xB4, 0x02, 0x18, 0x12, 0x7A, 0xA2,
-0xF1, 0xAC, 0xBF, 0x01, 0x09, 0x90, 0x85, 0xC7, 0xE0, 0xFF, 0x7D, 0x01, 0x80, 0x03, 0xE4, 0xFD,
-0xFF, 0xB1, 0x7D, 0x80, 0x08, 0x90, 0x85, 0xC8, 0xE0, 0x90, 0x85, 0xC0, 0xF0, 0x90, 0x05, 0x40,
-0x74, 0x22, 0xF0, 0x80, 0x25, 0xB1, 0x6F, 0x90, 0x85, 0xC0, 0xE0, 0xB4, 0x02, 0x06, 0x7D, 0x01,
-0x7F, 0x04, 0x80, 0x0B, 0x90, 0x85, 0xC0, 0xE0, 0xB4, 0x08, 0x06, 0x7D, 0x01, 0x7F, 0x0C, 0xB1,
-0x7D, 0xF1, 0xA3, 0x90, 0x85, 0xC7, 0xF1, 0x8B, 0xF1, 0xF3, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x75,
-0x5E, 0x01, 0x90, 0x05, 0x27, 0xE5, 0x5E, 0xF0, 0x22, 0x7D, 0x01, 0x7F, 0x04, 0xD3, 0x10, 0xAF,
-0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x93, 0x1F, 0xED, 0xF0, 0x90, 0x85, 0xC1, 0xE0, 0xFE, 0xC4, 0x13,
-0x13, 0x54, 0x03, 0x30, 0xE0, 0x02, 0xC1, 0xD8, 0xEE, 0x12, 0x8D, 0x59, 0x30, 0xE0, 0x02, 0xC1,
-0xD8, 0x90, 0x85, 0xC8, 0xE0, 0xFE, 0x6F, 0x70, 0x02, 0xC1, 0xD8, 0xEF, 0x70, 0x02, 0xC1, 0x43,
-0x24, 0xFE, 0x70, 0x02, 0xC1, 0x80, 0x24, 0xFE, 0x60, 0x4D, 0x24, 0xFC, 0x70, 0x02, 0xC1, 0xBF,
-0x24, 0xFC, 0x60, 0x02, 0xC1, 0xD1, 0xEE, 0xB4, 0x0E, 0x03, 0x12, 0x74, 0x93, 0x90, 0x85, 0xC8,
-0xE0, 0x70, 0x05, 0x7F, 0x01, 0x12, 0x79, 0x80, 0x90, 0x85, 0xC8, 0xE0, 0xB4, 0x06, 0x03, 0x12,
-0x73, 0x8E, 0x90, 0x85, 0xC8, 0xE0, 0xB4, 0x04, 0x0F, 0x90, 0x93, 0x1F, 0xE0, 0xFF, 0x60, 0x05,
-0x12, 0x6D, 0x4C, 0x80, 0x03, 0x12, 0x79, 0x61, 0x90, 0x85, 0xC8, 0xE0, 0x64, 0x08, 0x60, 0x02,
-0xC1, 0xD1, 0x12, 0x7A, 0xB9, 0xC1, 0xD1, 0x90, 0x85, 0xC8, 0xE0, 0x70, 0x05, 0x7F, 0x01, 0x12,
-0x79, 0x80, 0x90, 0x85, 0xC8, 0xE0, 0xB4, 0x06, 0x03, 0x12, 0x73, 0x8E, 0x90, 0x85, 0xC8, 0xE0,
-0xB4, 0x0E, 0x08, 0xD1, 0xDD, 0xBF, 0x01, 0x03, 0x12, 0x74, 0x93, 0x90, 0x85, 0xC8, 0xE0, 0x64,
-0x0C, 0x60, 0x02, 0xC1, 0xD1, 0xD1, 0xDD, 0xEF, 0x64, 0x01, 0x60, 0x02, 0xC1, 0xD1, 0x12, 0x70,
-0x9E, 0xC1, 0xD1, 0x90, 0x85, 0xC8, 0xE0, 0xB4, 0x0E, 0x08, 0xD1, 0xDD, 0xBF, 0x01, 0x03, 0x12,
-0x74, 0x93, 0x90, 0x85, 0xC8, 0xE0, 0xB4, 0x06, 0x03, 0x12, 0x73, 0x8E, 0x90, 0x85, 0xC8, 0xE0,
-0xB4, 0x0C, 0x08, 0xD1, 0xDD, 0xBF, 0x01, 0x03, 0x12, 0x70, 0x9E, 0x90, 0x85, 0xC8, 0xE0, 0x64,
-0x04, 0x70, 0x5E, 0x12, 0xB7, 0x60, 0xEF, 0x64, 0x01, 0x70, 0x56, 0x12, 0x77, 0xFE, 0x80, 0x51,
-0x90, 0x85, 0xC8, 0xE0, 0xB4, 0x0E, 0x08, 0xD1, 0xDD, 0xBF, 0x01, 0x03, 0x12, 0x74, 0x93, 0x90,
-0x85, 0xC8, 0xE0, 0xB4, 0x06, 0x03, 0x12, 0x73, 0x8E, 0x90, 0x85, 0xC8, 0xE0, 0xB4, 0x0C, 0x08,
-0xD1, 0xDD, 0xBF, 0x01, 0x03, 0x12, 0x70, 0x9E, 0x90, 0x85, 0xC8, 0xE0, 0x70, 0x05, 0x7F, 0x01,
-0x12, 0x79, 0x80, 0x90, 0x85, 0xC8, 0xE0, 0xB4, 0x04, 0x17, 0x12, 0x79, 0xF3, 0x80, 0x12, 0x90,
-0x85, 0xC8, 0xE0, 0xB4, 0x0C, 0x0B, 0x12, 0xA1, 0x91, 0x54, 0x3F, 0x30, 0xE0, 0x03, 0x12, 0x7A,
-0x8A, 0x90, 0x85, 0xC8, 0x12, 0xC8, 0x2A, 0xF0, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xD3, 0x10, 0xAF,
-0x01, 0xC3, 0xC0, 0xD0, 0x12, 0x7A, 0x29, 0xEF, 0x64, 0x01, 0x60, 0x05, 0x75, 0x0E, 0x01, 0x80,
-0x24, 0x90, 0x85, 0xC1, 0xE0, 0x13, 0x13, 0x13, 0x54, 0x1F, 0x30, 0xE0, 0x05, 0x75, 0x0E, 0x02,
-0x80, 0x13, 0x90, 0x85, 0xC7, 0xE0, 0xD3, 0x94, 0x04, 0x40, 0x05, 0x75, 0x0E, 0x08, 0x80, 0x05,
-0x12, 0xB3, 0xC0, 0x80, 0x0E, 0x90, 0x01, 0xB9, 0x74, 0x02, 0xF0, 0x90, 0x01, 0xB8, 0xE5, 0x0E,
-0xF0, 0x7F, 0x00, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x7D, 0x03, 0x7F, 0x02, 0x02, 0x7B, 0xFD, 0x90,
-0x85, 0xBC, 0x91, 0x0B, 0x30, 0xE0, 0x0A, 0xF1, 0x48, 0x60, 0x06, 0x7D, 0x01, 0x7F, 0x02, 0xB1,
-0x7D, 0xF1, 0x48, 0x60, 0x02, 0xF1, 0x4F, 0x22, 0x90, 0x85, 0xC0, 0xE0, 0x64, 0x02, 0x22, 0x90,
-0x85, 0xC5, 0xE0, 0x64, 0x02, 0x60, 0x0F, 0xF1, 0xE4, 0x60, 0x0B, 0x12, 0x7A, 0x29, 0xEF, 0x70,
-0x05, 0xFD, 0x7F, 0x0C, 0xB1, 0x7D, 0x22, 0x90, 0x85, 0xC5, 0xE0, 0x64, 0x01, 0x70, 0x1B, 0xF1,
-0xE4, 0x60, 0x0F, 0xE4, 0xFD, 0x7F, 0x0C, 0xB1, 0x7D, 0xE4, 0xFD, 0xFF, 0x12, 0x90, 0xDE, 0x02,
-0x6B, 0x98, 0x90, 0x85, 0xC8, 0xE0, 0x70, 0x02, 0xB1, 0x79, 0x22, 0xE0, 0xFF, 0x7D, 0x01, 0xA1,
-0x7D, 0x90, 0x85, 0xBC, 0xE0, 0xFF, 0x13, 0x13, 0x13, 0x22, 0x90, 0x85, 0xBC, 0xE0, 0x13, 0x13,
-0x54, 0x3F, 0x22, 0x12, 0x7A, 0x29, 0xEF, 0x70, 0x02, 0xF1, 0x67, 0x22, 0x90, 0x05, 0x43, 0xE0,
-0x7F, 0x00, 0x30, 0xE7, 0x02, 0x7F, 0x01, 0x22, 0xAE, 0x07, 0xF1, 0xAC, 0xBF, 0x01, 0x11, 0x90,
-0x85, 0xBC, 0xF1, 0xD6, 0x20, 0xE0, 0x09, 0xAF, 0x06, 0x7D, 0x01, 0xB1, 0x7D, 0x7F, 0x01, 0x22,
-0x7F, 0x00, 0x22, 0x90, 0x86, 0x72, 0xE0, 0xC4, 0x13, 0x13, 0x54, 0x03, 0x22, 0x90, 0x85, 0xC9,
-0xE0, 0x44, 0x01, 0xF0, 0x90, 0x85, 0xC3, 0xE0, 0x54, 0x0F, 0x22, 0x81, 0x00, 0xE4, 0xFD, 0xFF,
-0x02, 0x6E, 0x5F, 0x7E, 0x00, 0x7F, 0x01, 0x7D, 0x00, 0x7B, 0x01, 0x7A, 0x85, 0x79, 0xBC, 0x12,
-0x06, 0xDE, 0x90, 0x85, 0xBC, 0xE0, 0x54, 0xFD, 0xF0, 0xE4, 0x12, 0x96, 0x41, 0xA3, 0x74, 0x0C,
-0xF0, 0x22, 0x12, 0x02, 0xF6, 0x54, 0x01, 0xFF, 0x90, 0x92, 0x8A, 0xE0, 0x54, 0xFE, 0x4F, 0xF0,
-0x22, 0x12, 0x02, 0xF6, 0x90, 0x86, 0x71, 0xF0, 0x22, 0x12, 0xC8, 0x37, 0x90, 0x92, 0x79, 0x12,
-0x8F, 0xFB, 0x54, 0x02, 0xFF, 0xEE, 0x54, 0xFD, 0x12, 0x8D, 0x60, 0x90, 0x92, 0x7A, 0x12, 0x8C,
-0x6E, 0x90, 0x92, 0x7B, 0xF0, 0xB1, 0x86, 0x90, 0x92, 0x79, 0xE0, 0x54, 0x01, 0xFF, 0xD3, 0x10,
-0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0xEF, 0x64, 0x01, 0x70, 0x19, 0x11, 0x96, 0x60, 0x09, 0x11, 0x8F,
-0x12, 0x7B, 0xFD, 0xB1, 0x74, 0x80, 0x07, 0x11, 0x8F, 0x12, 0x7B, 0xBF, 0x91, 0x60, 0x12, 0x7A,
-0x8A, 0x80, 0x17, 0x11, 0x96, 0x60, 0x07, 0x11, 0x8F, 0x12, 0x7B, 0xFD, 0x80, 0x05, 0x11, 0x8F,
-0x12, 0x7B, 0xBF, 0xB1, 0x30, 0xB1, 0x5D, 0x12, 0x7A, 0xB9, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x74,
-0x10, 0xF0, 0xFD, 0x7F, 0x03, 0x22, 0x90, 0x92, 0x7B, 0xE0, 0x90, 0x01, 0x3F, 0x22, 0x91, 0x6E,
-0x64, 0x01, 0x60, 0x02, 0x21, 0x85, 0x90, 0x85, 0xC5, 0xE0, 0x70, 0x02, 0x21, 0x85, 0x90, 0x05,
-0x63, 0xE0, 0x90, 0x92, 0x90, 0xF0, 0x90, 0x05, 0x62, 0xE0, 0x90, 0x92, 0x91, 0xF0, 0x90, 0x05,
-0x61, 0xE0, 0x90, 0x92, 0x92, 0xF0, 0x90, 0x05, 0x60, 0xE0, 0x90, 0x92, 0x93, 0xF0, 0xB1, 0xE7,
-0x90, 0x85, 0xC9, 0xE0, 0x54, 0xEC, 0xF0, 0x31, 0xA9, 0x24, 0xFD, 0x50, 0x02, 0x80, 0x0D, 0x90,
-0x85, 0xBC, 0xE0, 0x30, 0xE0, 0x04, 0x51, 0xCA, 0x80, 0x02, 0x51, 0x7D, 0x31, 0xA9, 0x64, 0x01,
-0x70, 0x22, 0x90, 0x06, 0xAB, 0xE0, 0x90, 0x85, 0xCC, 0xF0, 0x90, 0x06, 0xAA, 0xE0, 0x90, 0x85,
-0xCB, 0xF0, 0xA3, 0xE0, 0xFF, 0x70, 0x08, 0x90, 0x85, 0xCB, 0xE0, 0xFE, 0xFF, 0x80, 0x00, 0x90,
-0x85, 0xCC, 0xEF, 0xF0, 0x12, 0xBA, 0x83, 0xE4, 0x90, 0x85, 0xCE, 0xF0, 0x12, 0xC5, 0x37, 0x31,
-0x91, 0x13, 0x54, 0x1F, 0x30, 0xE0, 0x5C, 0xEF, 0xC4, 0x13, 0x13, 0x54, 0x03, 0x20, 0xE0, 0x22,
-0x31, 0xA1, 0x6F, 0x70, 0x4E, 0x90, 0x85, 0xC2, 0xE0, 0x44, 0x40, 0xF0, 0xB1, 0x7D, 0x90, 0x01,
-0x3F, 0x11, 0x8F, 0x12, 0x7B, 0xFD, 0x91, 0x67, 0xB1, 0x56, 0x90, 0x85, 0xCC, 0xE0, 0x14, 0xF0,
-0x80, 0x31, 0x90, 0x85, 0xC3, 0xE0, 0xC4, 0x54, 0x0F, 0x64, 0x01, 0x70, 0x26, 0x31, 0xA1, 0xFE,
-0x6F, 0x60, 0x20, 0x90, 0x05, 0x73, 0xE0, 0xFF, 0xEE, 0x6F, 0x60, 0x17, 0x31, 0x91, 0x54, 0x3F,
-0x30, 0xE0, 0x10, 0xEF, 0x54, 0xBF, 0xF0, 0x90, 0x01, 0x3F, 0x11, 0x8F, 0x12, 0x7B, 0xBF, 0xB1,
-0x5D, 0xB1, 0x30, 0x31, 0x99, 0x90, 0x85, 0xBC, 0xE0, 0xC3, 0x13, 0x20, 0xE0, 0x02, 0x31, 0x99,
-0x22, 0x90, 0x85, 0xC2, 0xE0, 0xFF, 0x13, 0x13, 0x22, 0x90, 0x85, 0xC2, 0xE0, 0x44, 0x04, 0xF0,
-0x22, 0x90, 0x85, 0xCB, 0xE0, 0xFF, 0xA3, 0xE0, 0x22, 0x90, 0x85, 0xC3, 0xE0, 0xFF, 0xC4, 0x54,
-0x0F, 0x22, 0xE4, 0xF5, 0x77, 0x90, 0x85, 0xC5, 0xE0, 0x70, 0x02, 0x41, 0x4F, 0x91, 0x6E, 0x64,
-0x01, 0x60, 0x02, 0x41, 0x4F, 0x12, 0xC7, 0xB9, 0x31, 0xA9, 0x60, 0x22, 0x24, 0xFE, 0x60, 0x03,
-0x04, 0x70, 0x1E, 0x90, 0x85, 0xCC, 0xE0, 0x14, 0xF0, 0xE0, 0xFF, 0x60, 0x06, 0x90, 0x85, 0xCE,
-0xE0, 0x60, 0x0E, 0xEF, 0x70, 0x08, 0x90, 0x85, 0xCB, 0xE0, 0xA3, 0xF0, 0x80, 0x00, 0x75, 0x77,
-0x01, 0x90, 0x85, 0xBC, 0xE0, 0x30, 0xE0, 0x12, 0x90, 0x85, 0xC0, 0xE0, 0xB4, 0x02, 0x03, 0xE4,
-0xF5, 0x77, 0x12, 0x9F, 0xAC, 0xEF, 0x70, 0x02, 0xF5, 0x77, 0xE5, 0x77, 0x60, 0x41, 0x90, 0x85,
-0xC8, 0xE0, 0x20, 0xE2, 0x03, 0x12, 0x9D, 0x79, 0xB1, 0x6C, 0x90, 0x85, 0xCE, 0xE0, 0x60, 0x04,
-0x64, 0x01, 0x70, 0x13, 0xE4, 0x90, 0x91, 0x6E, 0xF0, 0x90, 0x85, 0xCE, 0xE0, 0x51, 0x5B, 0x51,
-0x6F, 0x90, 0x85, 0xCE, 0xE0, 0x80, 0x12, 0xE4, 0x90, 0x91, 0x6E, 0x51, 0x50, 0x51, 0x6F, 0x90,
-0x85, 0xCE, 0xE0, 0x75, 0xF0, 0x03, 0xA4, 0x24, 0xFE, 0x51, 0x5B, 0x90, 0x85, 0xDE, 0xF0, 0x22,
-0xF0, 0x90, 0x85, 0xCE, 0xE0, 0x75, 0xF0, 0x03, 0xA4, 0x24, 0xFE, 0xFF, 0x90, 0x85, 0xCD, 0xE0,
-0x2F, 0x22, 0xE0, 0x44, 0x02, 0xF0, 0xE4, 0x90, 0x91, 0x6E, 0xF0, 0x90, 0x86, 0x6E, 0xE0, 0x90,
-0x91, 0x6F, 0xF0, 0xE4, 0xFB, 0xFD, 0x7F, 0x54, 0x7E, 0x01, 0x02, 0x61, 0x41, 0xE4, 0xF5, 0x77,
-0x90, 0x06, 0xA9, 0xE0, 0xF5, 0x77, 0x54, 0xC0, 0x70, 0x07, 0x51, 0xC2, 0x54, 0xFD, 0xF0, 0xA1,
-0x90, 0xE5, 0x77, 0x30, 0xE6, 0x19, 0x90, 0x85, 0xC5, 0xE0, 0x64, 0x01, 0x70, 0x13, 0x12, 0x9F,
-0xDD, 0x64, 0x02, 0x60, 0x05, 0x12, 0x77, 0x61, 0x80, 0x07, 0x12, 0x79, 0x41, 0x80, 0x02, 0x51,
-0xC2, 0xE5, 0x77, 0x90, 0x85, 0xC9, 0x30, 0xE7, 0x04, 0x51, 0x62, 0xA1, 0x64, 0xE0, 0x54, 0xFD,
-0xF0, 0x22, 0x90, 0x85, 0xC9, 0xE0, 0x54, 0xFE, 0xF0, 0x22, 0x90, 0x06, 0xA9, 0xE0, 0x90, 0x92,
-0x56, 0xF0, 0xE0, 0xFD, 0x54, 0xC0, 0x70, 0x04, 0x51, 0xC2, 0x80, 0x56, 0xED, 0x30, 0xE6, 0x41,
-0x90, 0x85, 0xC5, 0xE0, 0x64, 0x02, 0x70, 0x28, 0x90, 0x85, 0xC1, 0xE0, 0xFF, 0xC3, 0x13, 0x20,
-0xE0, 0x09, 0x90, 0x85, 0xC9, 0xE0, 0x44, 0x01, 0xF0, 0x80, 0x1C, 0x12, 0x9F, 0xE4, 0x64, 0x01,
-0x70, 0x21, 0x90, 0x85, 0xC9, 0xE0, 0x44, 0x04, 0xF0, 0x7F, 0x01, 0x12, 0x62, 0x8E, 0x80, 0x13,
-0x12, 0x9F, 0xDD, 0x64, 0x02, 0x60, 0x05, 0x12, 0x77, 0x61, 0x80, 0x07, 0x12, 0x79, 0x41, 0x80,
-0x02, 0x51, 0xC2, 0x90, 0x92, 0x56, 0xE0, 0x90, 0x85, 0xC9, 0x30, 0xE7, 0x04, 0x51, 0x62, 0xA1,
-0x64, 0xE0, 0x54, 0xFD, 0xF0, 0x22, 0x90, 0x85, 0xBC, 0xE0, 0x30, 0xE0, 0x06, 0x90, 0x85, 0xBE,
-0x74, 0x01, 0xF0, 0x90, 0x85, 0xC5, 0xE0, 0x70, 0x02, 0x61, 0xEE, 0x90, 0x85, 0xDC, 0xE0, 0x04,
-0xF0, 0x90, 0x05, 0x61, 0x91, 0x59, 0x78, 0x08, 0x12, 0x04, 0xD8, 0xA8, 0x04, 0xA9, 0x05, 0xAA,
-0x06, 0xAB, 0x07, 0x90, 0x05, 0x60, 0x91, 0x59, 0x12, 0x87, 0x4B, 0xC0, 0x04, 0xC0, 0x05, 0xC0,
-0x06, 0xC0, 0x07, 0x90, 0x05, 0x62, 0x91, 0x59, 0x78, 0x10, 0x12, 0x04, 0xD8, 0xD0, 0x03, 0xD0,
-0x02, 0xD0, 0x01, 0xD0, 0x00, 0x12, 0x87, 0x4B, 0xC0, 0x04, 0xC0, 0x05, 0xC0, 0x06, 0xC0, 0x07,
-0xA3, 0x91, 0x59, 0x78, 0x18, 0x12, 0x04, 0xD8, 0xD0, 0x03, 0xD0, 0x02, 0xD0, 0x01, 0xD0, 0x00,
-0x12, 0x87, 0x4B, 0x90, 0x85, 0xFC, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0x90, 0x92, 0x8B, 0xE0, 0x54,
-0xFE, 0xF0, 0xE0, 0xC3, 0x13, 0x30, 0xE0, 0x0E, 0x12, 0xBA, 0x76, 0xFB, 0x12, 0x51, 0x7D, 0x90,
-0x92, 0x8B, 0xE0, 0x54, 0xFD, 0xF0, 0x31, 0x91, 0x13, 0x54, 0x1F, 0x30, 0xE0, 0x09, 0x90, 0x01,
-0x3B, 0xE0, 0x30, 0xE4, 0x02, 0x91, 0x60, 0x90, 0x93, 0x1C, 0xE0, 0x04, 0xF0, 0xE0, 0xC3, 0x94,
-0x80, 0x40, 0x0B, 0x90, 0x01, 0x98, 0xE0, 0x54, 0xFE, 0xF0, 0xE0, 0x44, 0x01, 0xF0, 0x12, 0x5D,
-0x1F, 0x12, 0x6E, 0x1D, 0xE4, 0x90, 0x88, 0xE0, 0xF0, 0x7F, 0x01, 0x12, 0xB9, 0x13, 0xB1, 0xFD,
-0x12, 0x9F, 0xD3, 0x30, 0xE0, 0x52, 0x90, 0x88, 0x76, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x7C, 0x00,
-0x7D, 0x64, 0x12, 0x03, 0x82, 0x90, 0x88, 0xCA, 0xE0, 0x6E, 0x70, 0x03, 0xA3, 0xE0, 0x6F, 0x60,
-0x0A, 0x90, 0x88, 0xCA, 0xE4, 0x75, 0xF0, 0x01, 0x02, 0x07, 0x0A, 0x90, 0x88, 0x7A, 0xE0, 0xFE,
-0xA3, 0xE0, 0xFF, 0x90, 0x88, 0x88, 0xE0, 0xB5, 0x06, 0x14, 0xA3, 0xE0, 0xB5, 0x07, 0x0F, 0xEF,
-0x4E, 0x60, 0x0B, 0x90, 0x01, 0xC7, 0x74, 0x31, 0xF0, 0x7F, 0x01, 0x02, 0x5F, 0xE9, 0x12, 0xC2,
-0x4A, 0xE4, 0x90, 0x88, 0xCA, 0xF0, 0xA3, 0xF0, 0x22, 0xE0, 0xFF, 0xE4, 0xFC, 0xFD, 0xFE, 0x22,
-0x7D, 0x02, 0x7F, 0x02, 0x12, 0x7C, 0x41, 0x7D, 0x01, 0x7F, 0x02, 0x02, 0x7C, 0x41, 0xE4, 0xFF,
-0x12, 0x77, 0x39, 0xEF, 0x22, 0xE4, 0x90, 0x92, 0x67, 0xF0, 0x90, 0x85, 0xC5, 0xE0, 0x60, 0x4F,
-0x91, 0x6E, 0x64, 0x01, 0x70, 0x49, 0xB1, 0x7D, 0x12, 0xC7, 0xB9, 0x90, 0x92, 0x67, 0x74, 0x01,
-0xF0, 0xE4, 0x90, 0x85, 0xCC, 0xF0, 0x90, 0x85, 0xBC, 0xE0, 0x30, 0xE0, 0x16, 0x90, 0x85, 0xC0,
-0xE0, 0xB4, 0x02, 0x05, 0xE4, 0x90, 0x92, 0x67, 0xF0, 0x12, 0x9F, 0xAC, 0xEF, 0x70, 0x04, 0x90,
-0x92, 0x67, 0xF0, 0x90, 0x92, 0x67, 0xE0, 0x60, 0x16, 0x90, 0x85, 0xC8, 0xE0, 0x20, 0xE2, 0x03,
-0x12, 0x9D, 0x79, 0xB1, 0x6C, 0xE4, 0x90, 0x91, 0x6E, 0xF0, 0x90, 0x85, 0xCD, 0x51, 0x6E, 0x22,
-0x31, 0x91, 0x13, 0x54, 0x1F, 0x30, 0xE0, 0x0B, 0xEF, 0xC4, 0x13, 0x13, 0x54, 0x03, 0x30, 0xE0,
-0x02, 0xB1, 0x56, 0xB1, 0xF3, 0x30, 0xE0, 0x08, 0xB1, 0xBD, 0x54, 0x07, 0x70, 0x39, 0x80, 0x35,
-0xF1, 0xA1, 0x40, 0x31, 0x91, 0x6E, 0x64, 0x01, 0x70, 0x2D, 0x12, 0x9F, 0xE4, 0x70, 0x05, 0x12,
-0x70, 0xDB, 0x80, 0x24, 0x12, 0x70, 0xDB, 0x90, 0x85, 0xCF, 0xE0, 0x04, 0xF0, 0xE0, 0xD3, 0x94,
-0x02, 0x40, 0x09, 0xB1, 0x28, 0xE4, 0x90, 0x85, 0xCF, 0xF0, 0x80, 0x03, 0x12, 0x79, 0x41, 0xE4,
-0x90, 0x85, 0xCE, 0xF0, 0x22, 0xB1, 0x90, 0x22, 0x90, 0x85, 0xC2, 0xE0, 0x54, 0xFB, 0xF0, 0x22,
-0x7D, 0x02, 0x7F, 0x02, 0x02, 0x7C, 0xA9, 0x91, 0x75, 0xB1, 0x30, 0x90, 0x92, 0x79, 0xE0, 0x30,
-0xE0, 0x13, 0xB1, 0x74, 0x90, 0x92, 0x7C, 0xE0, 0x60, 0x05, 0x14, 0xF0, 0x02, 0x7A, 0x8A, 0xB1,
-0x86, 0xE4, 0xFF, 0x11, 0x4E, 0x22, 0x7D, 0x02, 0x7F, 0x02, 0x02, 0x7C, 0x41, 0x7D, 0x01, 0x7F,
-0x02, 0x02, 0x7C, 0xA9, 0x90, 0x85, 0xC1, 0xE0, 0x44, 0x04, 0xF0, 0x22, 0x90, 0x85, 0xC9, 0xE0,
-0x44, 0x10, 0xF0, 0x22, 0x90, 0x92, 0x7B, 0xE0, 0x90, 0x05, 0x73, 0xF0, 0x22, 0x90, 0x85, 0xCB,
-0xE0, 0x90, 0x05, 0x73, 0xF0, 0x22, 0x90, 0x92, 0x7A, 0xE0, 0x14, 0x90, 0x92, 0x7C, 0xF0, 0x22,
-0x90, 0x85, 0xBC, 0xE0, 0x90, 0x85, 0xC7, 0x30, 0xE0, 0x05, 0xE0, 0xFF, 0x02, 0x9F, 0xB8, 0x02,
-0x9F, 0x8B, 0x91, 0x6E, 0x64, 0x01, 0x70, 0x14, 0x90, 0x85, 0xC5, 0xE0, 0x60, 0x0E, 0xB1, 0xE7,
-0x90, 0x85, 0xC1, 0xE0, 0xB1, 0xBE, 0x54, 0x07, 0x70, 0x02, 0xB1, 0x90, 0x22, 0xEF, 0x54, 0xFB,
-0xF0, 0x90, 0x85, 0xC9, 0xE0, 0x54, 0xFD, 0xF0, 0x22, 0x90, 0x01, 0x57, 0xE0, 0x60, 0x17, 0xB1,
-0xEA, 0xB1, 0xF3, 0x30, 0xE0, 0x02, 0x80, 0xE5, 0xF1, 0xA1, 0x40, 0x0A, 0xE4, 0xFF, 0x12, 0x77,
-0x39, 0xBF, 0x01, 0x02, 0xB1, 0x28, 0x22, 0x90, 0x01, 0x57, 0xE4, 0xF0, 0x90, 0x01, 0x3C, 0x74,
-0x02, 0xF0, 0x22, 0x90, 0x85, 0xC1, 0xE0, 0xFF, 0x13, 0x13, 0x54, 0x3F, 0x22, 0x90, 0x92, 0x79,
-0xE0, 0x30, 0xE0, 0x09, 0x90, 0x01, 0x3B, 0xE0, 0x30, 0xE4, 0x02, 0x91, 0x60, 0x22, 0x90, 0x85,
-0xC5, 0xE0, 0x60, 0x0F, 0x90, 0x06, 0x92, 0xE0, 0x30, 0xE1, 0x03, 0x02, 0x6B, 0x98, 0x12, 0xC8,
-0xA9, 0xB1, 0x90, 0x22, 0xE4, 0xFF, 0x12, 0x77, 0x39, 0xBF, 0x01, 0x0E, 0x90, 0x85, 0xC5, 0xE0,
-0x60, 0x08, 0x51, 0xC2, 0x54, 0x07, 0x70, 0x02, 0xB1, 0x90, 0x22, 0xC0, 0xE0, 0xC0, 0xF0, 0xC0,
-0x83, 0xC0, 0x82, 0xC0, 0xD0, 0x75, 0xD0, 0x00, 0xC0, 0x00, 0xC0, 0x01, 0xC0, 0x02, 0xC0, 0x03,
-0xC0, 0x04, 0xC0, 0x05, 0xC0, 0x06, 0xC0, 0x07, 0x90, 0x01, 0xC4, 0x74, 0x3B, 0xF0, 0x74, 0xA6,
-0xA3, 0xF0, 0x12, 0x71, 0x90, 0xE5, 0x4C, 0x30, 0xE1, 0x02, 0xF1, 0xD5, 0xE5, 0x4C, 0x30, 0xE3,
-0x03, 0x12, 0xB9, 0x29, 0xE5, 0x4C, 0x30, 0xE4, 0x03, 0x12, 0xB9, 0x22, 0xE5, 0x4C, 0x30, 0xE5,
-0x03, 0x12, 0xBF, 0x4B, 0xE5, 0x4C, 0x30, 0xE6, 0x03, 0x12, 0xBD, 0xCF, 0xE5, 0x4E, 0x30, 0xE0,
-0x02, 0xD1, 0xFC, 0xE5, 0x4E, 0x30, 0xE1, 0x02, 0x71, 0x36, 0xE5, 0x4E, 0x30, 0xE2, 0x03, 0x12,
-0xBD, 0xDC, 0xE5, 0x4E, 0x30, 0xE3, 0x02, 0xF1, 0x15, 0xE5, 0x4E, 0x30, 0xE4, 0x02, 0xB1, 0xA2,
-0xE5, 0x4E, 0x30, 0xE5, 0x03, 0x12, 0xBE, 0x0B, 0xE5, 0x4E, 0x30, 0xE6, 0x02, 0xD1, 0x24, 0xE5,
-0x4F, 0x30, 0xE1, 0x03, 0x12, 0xBE, 0x27, 0xE5, 0x4F, 0x30, 0xE4, 0x03, 0x12, 0xBF, 0x87, 0xE5,
-0x4F, 0x30, 0xE5, 0x02, 0xF1, 0x2E, 0x74, 0x3B, 0x04, 0x90, 0x01, 0xC4, 0xF0, 0x74, 0xA6, 0xA3,
-0xF0, 0xD0, 0x07, 0xD0, 0x06, 0xD0, 0x05, 0xD0, 0x04, 0xD0, 0x03, 0xD0, 0x02, 0xD0, 0x01, 0xD0,
-0x00, 0xD0, 0xD0, 0xD0, 0x82, 0xD0, 0x83, 0xD0, 0xF0, 0xD0, 0xE0, 0x32, 0x90, 0x85, 0xBC, 0xE0,
-0x30, 0xE0, 0x10, 0xA3, 0x74, 0x01, 0xF0, 0x90, 0x85, 0xBC, 0xE0, 0xFF, 0xC3, 0x13, 0x30, 0xE0,
-0x02, 0xF1, 0xBA, 0x21, 0xB2, 0x91, 0x6E, 0x64, 0x01, 0x70, 0x12, 0x90, 0x85, 0xC5, 0xE0, 0x60,
-0x0C, 0x90, 0x01, 0x57, 0xE4, 0xF0, 0x90, 0x01, 0x3C, 0x74, 0x02, 0x51, 0x65, 0x22, 0xE4, 0xF5,
-0x77, 0x90, 0x85, 0xBB, 0xE0, 0xFF, 0xE5, 0x77, 0xC3, 0x9F, 0x50, 0x64, 0xAF, 0x77, 0x12, 0x77,
-0x39, 0xEF, 0x60, 0x58, 0xE5, 0x77, 0x13, 0x13, 0x13, 0x54, 0x1F, 0xFF, 0xE5, 0x77, 0x54, 0x07,
-0xFE, 0x74, 0x75, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83, 0xE0, 0xFD, 0xAF, 0x06, 0x12,
-0xA9, 0x9B, 0x08, 0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0xFF, 0xEF, 0x5D, 0x60,
-0x2B, 0xE5, 0x77, 0x12, 0xC8, 0x1C, 0x20, 0xE7, 0x02, 0x80, 0x13, 0xE5, 0x77, 0xC4, 0x54, 0xF0,
-0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, 0x81, 0xF5, 0x83, 0xE0, 0xFF, 0x20, 0xE7, 0x09, 0x90, 0x01,
-0xC1, 0xE0, 0x44, 0x20, 0xF0, 0x80, 0x05, 0xAD, 0x77, 0x12, 0x97, 0x07, 0x05, 0x77, 0x80, 0x91,
-0x22, 0x90, 0x85, 0xCE, 0xE0, 0x04, 0xF0, 0x90, 0x85, 0xC9, 0xE0, 0x54, 0xEF, 0xF0, 0x90, 0x86,
-0x6D, 0xE0, 0xFF, 0x90, 0x85, 0xCE, 0xE0, 0xD3, 0x9F, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0,
-0xD0, 0x12, 0x9F, 0xAC, 0xBF, 0x01, 0x04, 0x7F, 0x01, 0x80, 0x02, 0x7F, 0x02, 0x12, 0xB4, 0x03,
-0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xE4, 0xFF, 0x90, 0x92, 0x56, 0xEF, 0xF0, 0x90, 0x04, 0x7E, 0xE0,
-0xFF, 0xA3, 0xE0, 0x90, 0x92, 0x66, 0xF0, 0xE0, 0xFE, 0x6F, 0x60, 0x66, 0x90, 0x92, 0x57, 0x74,
-0x03, 0xF0, 0x90, 0x92, 0x65, 0x74, 0x08, 0xF0, 0xEE, 0x04, 0x54, 0x0F, 0xFF, 0xE4, 0xFE, 0xEF,
-0x75, 0xF0, 0x08, 0xA4, 0x24, 0x00, 0xF5, 0x82, 0xE4, 0x34, 0x80, 0xF5, 0x83, 0xE5, 0x82, 0x2E,
-0x11, 0x53, 0xE0, 0xFD, 0x74, 0x59, 0x2E, 0xF5, 0x82, 0xE4, 0x34, 0x92, 0xF5, 0x83, 0xED, 0xF0,
-0x0E, 0xEE, 0xB4, 0x08, 0xDA, 0x7B, 0x01, 0x7A, 0x92, 0x79, 0x57, 0x12, 0x5E, 0x10, 0x90, 0x92,
-0x66, 0xE0, 0x04, 0x54, 0x0F, 0xFF, 0xF0, 0xBF, 0x0F, 0x02, 0xE4, 0xF0, 0x90, 0x92, 0x66, 0xE0,
-0x90, 0x04, 0x7F, 0xF0, 0x90, 0x92, 0x56, 0xE0, 0x7F, 0x04, 0x70, 0x03, 0x02, 0xB9, 0x13, 0x12,
-0x87, 0xBB, 0x22, 0xF5, 0x82, 0xE4, 0x35, 0x83, 0xF5, 0x83, 0x22, 0x90, 0x01, 0xCC, 0xE0, 0x54,
-0x0F, 0x90, 0x92, 0x01, 0xF0, 0x90, 0x92, 0x01, 0xE0, 0xFD, 0x70, 0x02, 0x21, 0x68, 0x90, 0x85,
-0x1D, 0xE0, 0xFF, 0x70, 0x06, 0xA3, 0xE0, 0x64, 0x09, 0x60, 0x0A, 0xEF, 0x14, 0xFF, 0x90, 0x85,
-0x1E, 0xE0, 0xB5, 0x07, 0x04, 0x7F, 0x01, 0x80, 0x02, 0x7F, 0x00, 0xEF, 0x60, 0x08, 0x90, 0x01,
-0xC1, 0xE0, 0x44, 0x01, 0xF0, 0x22, 0x90, 0x93, 0x17, 0xE0, 0x31, 0x9A, 0x08, 0x80, 0x05, 0xC3,
-0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0xFF, 0xEF, 0x5D, 0x70, 0x02, 0x21, 0x4B, 0xE4, 0x90, 0x92,
-0x02, 0xF0, 0x90, 0x92, 0x02, 0xE0, 0xF9, 0xC3, 0x94, 0x04, 0x50, 0x40, 0x31, 0x6A, 0xA4, 0xFF,
-0xE9, 0xFD, 0x7C, 0x00, 0x2F, 0xFF, 0xEC, 0x35, 0xF0, 0xFE, 0x74, 0xD0, 0x31, 0x72, 0x90, 0x84,
-0xCD, 0x12, 0x05, 0x28, 0xE5, 0x82, 0x29, 0x11, 0x53, 0xEF, 0x31, 0x69, 0xA4, 0x2D, 0xFF, 0xEC,
-0x35, 0xF0, 0xFE, 0x74, 0xF0, 0x31, 0x72, 0x90, 0x84, 0xD1, 0x12, 0x05, 0x28, 0xE5, 0x82, 0x29,
-0x11, 0x53, 0xEF, 0xF0, 0x90, 0x92, 0x02, 0xE0, 0x04, 0xF0, 0x80, 0xB6, 0x90, 0x92, 0x01, 0xE0,
-0xFF, 0x90, 0x93, 0x17, 0xE0, 0xFE, 0x74, 0x01, 0xA8, 0x06, 0x08, 0x80, 0x02, 0xC3, 0x33, 0xD8,
-0xFC, 0xF4, 0x5F, 0x90, 0x92, 0x01, 0xF0, 0x90, 0x93, 0x17, 0xE0, 0xFF, 0x74, 0x01, 0xA8, 0x07,
-0x08, 0x80, 0x02, 0xC3, 0x33, 0xD8, 0xFC, 0x90, 0x01, 0xCC, 0xF0, 0x90, 0x93, 0x17, 0xE0, 0x04,
-0xF0, 0xE0, 0x54, 0x03, 0xF0, 0x90, 0x85, 0x1E, 0xF1, 0xB5, 0xB4, 0x0A, 0x02, 0x7F, 0x01, 0xEF,
-0x70, 0x02, 0x01, 0x65, 0xE4, 0x90, 0x85, 0x1E, 0xF0, 0x01, 0x65, 0x90, 0x01, 0xC0, 0xE0, 0x44,
-0x02, 0xF0, 0x90, 0x93, 0x17, 0xE0, 0x44, 0x80, 0x90, 0x00, 0x8A, 0x31, 0x69, 0x90, 0x01, 0xD0,
-0x12, 0x05, 0x28, 0xE0, 0x90, 0x01, 0xC3, 0xF0, 0x22, 0xF0, 0x90, 0x93, 0x17, 0xE0, 0x75, 0xF0,
-0x04, 0x22, 0x2F, 0xF5, 0x82, 0x74, 0x01, 0x3E, 0xF5, 0x83, 0xE0, 0xFF, 0x90, 0x85, 0x1E, 0xE0,
-0x75, 0xF0, 0x08, 0x22, 0x13, 0x13, 0x13, 0x54, 0x1F, 0x24, 0x75, 0xF5, 0x82, 0xE4, 0x34, 0x8F,
-0xF5, 0x83, 0xE0, 0xFD, 0x7C, 0x00, 0xE5, 0x62, 0x54, 0x07, 0xFF, 0x74, 0x01, 0x7E, 0x00, 0xA8,
-0x07, 0x22, 0xE4, 0xF5, 0x73, 0xEF, 0x14, 0xF5, 0x72, 0xED, 0xFF, 0xE5, 0x72, 0xF5, 0x82, 0x33,
-0x95, 0xE0, 0xF5, 0x83, 0xC3, 0xE5, 0x82, 0x9F, 0x74, 0x80, 0xF8, 0x65, 0x83, 0x98, 0x40, 0x51,
-0xE5, 0x72, 0x78, 0x03, 0xA2, 0xE7, 0x13, 0xD8, 0xFB, 0xFF, 0x33, 0x95, 0xE0, 0xFE, 0xEB, 0xF1,
-0xE0, 0xE5, 0x82, 0x2F, 0xF5, 0x82, 0xE5, 0x83, 0x3E, 0xF5, 0x83, 0xE0, 0xF5, 0x82, 0x75, 0x83,
-0x00, 0xE5, 0x72, 0x31, 0x98, 0x08, 0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0xFF,
-0xEE, 0x55, 0x83, 0xFE, 0xEF, 0x55, 0x82, 0x4E, 0x60, 0x13, 0x85, 0x72, 0x74, 0x05, 0x73, 0x90,
-0x92, 0x3E, 0xE0, 0x65, 0x73, 0x60, 0x0A, 0xE5, 0x74, 0xD3, 0x9D, 0x40, 0x04, 0x15, 0x72, 0x80,
-0x98, 0xAF, 0x74, 0x22, 0x7D, 0x01, 0xAF, 0x62, 0xAC, 0x05, 0x90, 0x92, 0x39, 0xEF, 0xF0, 0xFD,
-0xE0, 0xFF, 0x12, 0x8F, 0x5E, 0xE0, 0xF5, 0x6E, 0x54, 0x7F, 0xF5, 0x70, 0x75, 0xF0, 0x12, 0xEF,
-0x90, 0x89, 0x3D, 0x12, 0x05, 0x28, 0xE0, 0xF9, 0x90, 0x92, 0x39, 0xE0, 0xF1, 0xD5, 0xFE, 0xEF,
-0x12, 0x91, 0xDB, 0xE0, 0x54, 0x03, 0xF5, 0x6F, 0xE5, 0x70, 0x90, 0x83, 0x1D, 0x93, 0xFB, 0xED,
-0x71, 0x08, 0xE4, 0xF0, 0xA3, 0xEB, 0xF0, 0x12, 0x8B, 0x07, 0xC4, 0x54, 0x03, 0x90, 0x92, 0x3A,
-0xF0, 0x74, 0xCC, 0x2D, 0x51, 0xEA, 0xE5, 0x70, 0xF0, 0x74, 0x4C, 0x2D, 0xF1, 0xC4, 0xE5, 0x6F,
-0xF0, 0xE5, 0x70, 0xD3, 0x9E, 0x40, 0x06, 0x8E, 0x70, 0xAF, 0x06, 0x8F, 0x6E, 0x8C, 0x71, 0xE4,
-0xFF, 0xEF, 0xC3, 0x95, 0x71, 0x50, 0x2F, 0xE5, 0x6E, 0x30, 0xE7, 0x09, 0x85, 0x70, 0x6E, 0x1C,
-0xEC, 0x70, 0x20, 0x80, 0x21, 0xE5, 0x70, 0xD3, 0x99, 0x40, 0x14, 0xAD, 0x01, 0x90, 0x92, 0x39,
-0xE0, 0xFB, 0x90, 0x92, 0x3E, 0xEC, 0xF0, 0xAF, 0x70, 0x31, 0xA2, 0x8F, 0x6E, 0x80, 0x07, 0x89,
-0x6E, 0x80, 0x03, 0x0F, 0x80, 0xCB, 0x90, 0x92, 0x39, 0xE0, 0xFF, 0x12, 0x8F, 0xC5, 0xEF, 0xF0,
-0xA3, 0xE4, 0xF0, 0xA3, 0xE5, 0x6E, 0xF1, 0xBC, 0x91, 0x0F, 0x7B, 0x01, 0xFA, 0x7D, 0x05, 0x7F,
-0x08, 0x12, 0x96, 0x88, 0x90, 0x92, 0x39, 0xE0, 0xFF, 0x90, 0x91, 0x0B, 0xE5, 0x6F, 0xF0, 0xE4,
-0xFB, 0xAD, 0x6E, 0x02, 0x27, 0x3D, 0x74, 0xCC, 0x25, 0x6E, 0xF5, 0x82, 0xE4, 0x34, 0x90, 0xF5,
-0x83, 0x22, 0xE5, 0x71, 0x25, 0xE0, 0x24, 0xF5, 0xF5, 0x82, 0xE4, 0x34, 0x82, 0xF5, 0x83, 0xE4,
-0x93, 0xFE, 0x74, 0x01, 0x93, 0xFF, 0xE5, 0x6E, 0x25, 0xE0, 0x24, 0x7B, 0xF5, 0x82, 0xE4, 0x34,
-0x8F, 0xF5, 0x83, 0x22, 0x90, 0x92, 0x39, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0xA3, 0xED, 0xF0, 0xEB,
-0x75, 0xF0, 0x06, 0xA4, 0xFF, 0x90, 0x89, 0x21, 0x12, 0x87, 0x70, 0xE9, 0x2F, 0xF9, 0xEA, 0x35,
-0xF0, 0xFA, 0x90, 0x92, 0x41, 0x12, 0x87, 0x79, 0x90, 0x92, 0x3B, 0xE0, 0x71, 0x08, 0xE0, 0xFF,
-0xA3, 0xE0, 0x90, 0x92, 0x3E, 0xCF, 0xF0, 0xA3, 0xEF, 0xF0, 0xE4, 0xA3, 0xF0, 0x90, 0x92, 0x41,
-0x12, 0x87, 0x70, 0x90, 0x92, 0x40, 0xE0, 0xFF, 0xF5, 0x82, 0x75, 0x83, 0x00, 0x12, 0x03, 0x0F,
-0xFD, 0x7C, 0x00, 0x90, 0x92, 0x3B, 0xE0, 0x75, 0xF0, 0x12, 0x90, 0x89, 0x44, 0x12, 0x05, 0x28,
-0x75, 0xF0, 0x02, 0xEF, 0x91, 0x07, 0xFF, 0x90, 0x92, 0x3D, 0xE0, 0xFB, 0xEF, 0xA8, 0x03, 0x08,
-0x80, 0x05, 0xCE, 0xC3, 0x13, 0xCE, 0x13, 0xD8, 0xF9, 0x71, 0xF7, 0xEE, 0x8F, 0xF0, 0x12, 0x07,
-0x0A, 0x90, 0x92, 0x40, 0xE0, 0x04, 0xF0, 0xE0, 0xB4, 0x05, 0xB2, 0x90, 0x92, 0x41, 0x12, 0x87,
-0x70, 0x90, 0x00, 0x05, 0x12, 0x03, 0x0F, 0xFD, 0x7C, 0x00, 0x90, 0x92, 0x3D, 0xE0, 0xFF, 0x90,
-0x92, 0x39, 0xE0, 0xFE, 0xA3, 0xE0, 0xA8, 0x07, 0x08, 0x80, 0x05, 0xCE, 0xC3, 0x13, 0xCE, 0x13,
-0xD8, 0xF9, 0x71, 0xF7, 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0xD3, 0x9F, 0xEC, 0x9E, 0x40, 0x08, 0xED,
-0x9F, 0xFF, 0xEC, 0x9E, 0xFE, 0x80, 0x04, 0x7E, 0x00, 0x7F, 0x00, 0x90, 0x92, 0x3E, 0xEE, 0xF0,
-0xA3, 0xEF, 0xF0, 0x90, 0x92, 0x3E, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x90, 0x92, 0x3B, 0xE0, 0x71,
-0x08, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0x22, 0xFF, 0x12, 0x03, 0x70, 0x90, 0x92, 0x3E, 0x22, 0x75,
-0xF0, 0x12, 0xE5, 0x62, 0x90, 0x89, 0x40, 0x12, 0x05, 0x28, 0xE0, 0xFE, 0xA3, 0xE0, 0x22, 0xF0,
-0xE4, 0xA3, 0xF0, 0xA3, 0xF0, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0xE4, 0x90, 0x92,
-0xEA, 0xF0, 0xA3, 0xF0, 0xA3, 0x74, 0x08, 0xF0, 0xA3, 0x91, 0x0F, 0x90, 0x92, 0xF2, 0xF0, 0xA3,
-0xF0, 0xA3, 0xF0, 0x90, 0x01, 0xC4, 0x74, 0x16, 0xF0, 0x74, 0xAC, 0xA3, 0xF0, 0x90, 0x01, 0x1F,
-0xE0, 0xFE, 0x90, 0x01, 0x1E, 0xF1, 0x57, 0xEC, 0x3E, 0x90, 0x92, 0xE1, 0xF0, 0xA3, 0xEF, 0xF0,
-0x90, 0x02, 0x87, 0xE0, 0x90, 0x92, 0xE9, 0xF0, 0x90, 0x86, 0x72, 0xE0, 0x20, 0xE0, 0x02, 0xC1,
-0xFD, 0xE4, 0x90, 0x92, 0xE8, 0xF0, 0x90, 0x92, 0xE9, 0xE0, 0xFF, 0x90, 0x92, 0xE8, 0xE0, 0xC3,
-0x9F, 0x40, 0x02, 0xC1, 0xFD, 0x90, 0x92, 0xE1, 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0xEC, 0xFF, 0x90,
-0xFD, 0x11, 0xF0, 0x90, 0x92, 0xF2, 0xEF, 0xF0, 0xF1, 0x92, 0xF5, 0x83, 0xE0, 0xFE, 0xF1, 0x44,
-0xF1, 0xCC, 0x54, 0x3F, 0xFE, 0x90, 0x92, 0xE3, 0xF0, 0xA3, 0xEF, 0xF0, 0x90, 0x92, 0xEE, 0xEE,
-0xF0, 0xA3, 0xF1, 0xA7, 0x54, 0x0F, 0x33, 0x33, 0x33, 0x54, 0xF8, 0xFF, 0xF1, 0x9B, 0x54, 0x03,
-0xFE, 0xEF, 0x24, 0x18, 0x2E, 0xFF, 0x90, 0x92, 0xF3, 0xF0, 0x90, 0x92, 0xE2, 0xE0, 0x2F, 0xFF,
-0x90, 0x92, 0xE1, 0xE0, 0x34, 0x00, 0xFE, 0x90, 0x92, 0xE5, 0xF1, 0x29, 0xC0, 0x07, 0xF1, 0x0E,
-0x7D, 0x01, 0x12, 0x55, 0x36, 0xC0, 0x07, 0xF1, 0x0E, 0x7D, 0x04, 0x12, 0x55, 0x36, 0xAB, 0x07,
-0xD0, 0x05, 0xD0, 0x07, 0x12, 0x5D, 0x98, 0x90, 0x92, 0xEA, 0xEF, 0xF1, 0x0D, 0xE4, 0xFD, 0x12,
-0x55, 0x36, 0xEF, 0x54, 0xFC, 0x90, 0x92, 0xE7, 0xF0, 0x90, 0x92, 0xF3, 0xE0, 0xFF, 0x90, 0x92,
-0xE3, 0xE4, 0x8F, 0xF0, 0x12, 0x07, 0x0A, 0x90, 0x92, 0xE3, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x12,
-0x7A, 0xD0, 0x90, 0x92, 0xE3, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0xF1, 0x3B, 0x7D, 0x0F, 0x12, 0x55,
-0x36, 0x90, 0x92, 0xE3, 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0x90, 0x92, 0xE1, 0xEC, 0x8D, 0xF0, 0x12,
-0x07, 0x0A, 0x90, 0x85, 0xB7, 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0xD3, 0x90, 0x92, 0xE2, 0xE0, 0x9D,
-0x90, 0x92, 0xE1, 0xE0, 0x9C, 0x40, 0x1B, 0x90, 0x85, 0xB8, 0xE0, 0x24, 0x01, 0xFD, 0x90, 0x85,
-0xB7, 0xE0, 0x34, 0x00, 0xFC, 0xC3, 0x90, 0x92, 0xE2, 0xE0, 0x9D, 0xF0, 0x90, 0x92, 0xE1, 0xE0,
-0x9C, 0xF0, 0xEF, 0x30, 0xE6, 0x06, 0x90, 0x01, 0xC7, 0x74, 0x22, 0xF0, 0xEF, 0x30, 0xE7, 0x06,
-0x90, 0x01, 0xC7, 0x74, 0x21, 0xF0, 0xEF, 0x30, 0xE5, 0x06, 0x90, 0x01, 0xC7, 0x74, 0x23, 0xF0,
-0x90, 0x92, 0xE7, 0xE0, 0x24, 0x40, 0x60, 0x04, 0x24, 0x20, 0x70, 0x2C, 0x90, 0x86, 0x75, 0xE0,
-0xFF, 0x12, 0x8D, 0x59, 0x20, 0xE0, 0x02, 0xC1, 0x81, 0x90, 0x86, 0x87, 0xE0, 0x04, 0xF1, 0x0D,
-0x12, 0x59, 0x20, 0xEF, 0x70, 0x02, 0xC1, 0x81, 0x90, 0x92, 0xE7, 0xE0, 0xFF, 0x12, 0x7B, 0x77,
-0x90, 0x86, 0x88, 0xE0, 0x04, 0xF0, 0xC1, 0x81, 0x12, 0x9F, 0xD3, 0x30, 0xE0, 0x5A, 0x90, 0x92,
-0xEA, 0xE0, 0xFF, 0x90, 0x92, 0xE6, 0xE0, 0x2F, 0xFF, 0x90, 0x92, 0xE5, 0xE0, 0x34, 0x00, 0xCF,
-0x24, 0x08, 0xCF, 0x34, 0x00, 0xFE, 0x90, 0x92, 0xF0, 0xF1, 0x29, 0xEF, 0x64, 0x45, 0x70, 0x38,
-0xF1, 0x18, 0x12, 0xC7, 0x5A, 0xEF, 0x64, 0x01, 0x70, 0x2E, 0xF1, 0x18, 0x12, 0xC7, 0x1D, 0xEF,
-0x64, 0x01, 0x70, 0x24, 0x90, 0x92, 0xF4, 0x04, 0xF1, 0x17, 0xA3, 0xE0, 0xFD, 0x12, 0xC6, 0x76,
-0xEF, 0x70, 0x0D, 0x90, 0x92, 0xF2, 0xE0, 0xFD, 0x90, 0xFD, 0x11, 0xF1, 0x17, 0x12, 0xC6, 0xCE,
-0x90, 0x92, 0xF2, 0xE0, 0x90, 0xFD, 0x11, 0xF0, 0xF1, 0x0E, 0x12, 0x59, 0x20, 0xEF, 0x60, 0x18,
-0xF1, 0x0E, 0x90, 0x92, 0xEA, 0xE0, 0xFD, 0x90, 0x92, 0xED, 0xE0, 0xFB, 0x12, 0x54, 0x02, 0xEF,
-0x60, 0x06, 0x90, 0x92, 0xF4, 0x74, 0x01, 0xF0, 0x90, 0x86, 0x72, 0xE0, 0xC3, 0x13, 0x30, 0xE0,
-0x13, 0xF1, 0x0E, 0x90, 0x92, 0xEA, 0xE0, 0xFD, 0x12, 0x38, 0x10, 0xEF, 0x60, 0x06, 0x90, 0x92,
-0xF4, 0x74, 0x01, 0xF0, 0x12, 0x8F, 0xDF, 0x54, 0x3F, 0x30, 0xE0, 0x0A, 0xF1, 0x0E, 0x90, 0x92,
-0xEA, 0xE0, 0xFD, 0x12, 0x21, 0xB6, 0x90, 0x86, 0x72, 0xE0, 0xFF, 0x12, 0x8D, 0x59, 0x30, 0xE0,
-0x10, 0x90, 0x92, 0xF4, 0xE0, 0x70, 0x0A, 0xF1, 0x0E, 0x90, 0x92, 0xEA, 0xE0, 0xFD, 0x12, 0x4A,
-0x3F, 0x12, 0x79, 0x00, 0xEF, 0x64, 0x01, 0x60, 0x07, 0x90, 0x01, 0x3F, 0xE0, 0x30, 0xE2, 0x10,
-0xF1, 0x32, 0x30, 0xE0, 0x06, 0x90, 0x01, 0x3F, 0x74, 0x04, 0xF0, 0x7F, 0x01, 0x12, 0x5F, 0xE9,
-0x90, 0x01, 0x3F, 0xE0, 0x30, 0xE2, 0x02, 0xF1, 0x21, 0x12, 0x7A, 0xE7, 0xEF, 0x64, 0x01, 0x70,
-0x36, 0x90, 0x86, 0x89, 0xE0, 0x04, 0xF0, 0x12, 0x6F, 0xE5, 0xAD, 0x07, 0xEF, 0x64, 0x01, 0x60,
-0x1F, 0xF1, 0x21, 0xED, 0xB4, 0x02, 0x08, 0x90, 0x01, 0xC7, 0x74, 0x42, 0xF0, 0x80, 0x0A, 0xED,
-0xB4, 0x04, 0x06, 0x90, 0x01, 0xC7, 0x74, 0x43, 0xF0, 0x7F, 0x01, 0x12, 0x5F, 0xE9, 0x80, 0x1D,
-0xF1, 0x3B, 0x12, 0x7C, 0x0B, 0x80, 0x0E, 0xF1, 0x32, 0x20, 0xE0, 0x11, 0x90, 0x86, 0x72, 0xE0,
-0x54, 0xFE, 0xF0, 0x80, 0x08, 0x90, 0x92, 0xE8, 0xE0, 0x04, 0xF0, 0x81, 0x66, 0x74, 0x16, 0x04,
-0x90, 0x01, 0xC4, 0xF0, 0x74, 0xAC, 0xA3, 0xF0, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xF0, 0x90, 0x92,
-0xE5, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x22, 0xF0, 0x90, 0x92, 0xF0, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF,
-0x22, 0x90, 0x86, 0x7A, 0xE0, 0x44, 0x01, 0xF0, 0x22, 0xF0, 0xA3, 0xEF, 0xF0, 0xE4, 0xFD, 0x02,
-0x55, 0x36, 0x90, 0x86, 0x74, 0xE0, 0xC4, 0x13, 0x54, 0x07, 0x22, 0x90, 0x92, 0xE1, 0xE0, 0xFE,
-0xA3, 0xE0, 0xFF, 0x22, 0x74, 0x00, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0xFB, 0xF5, 0x83, 0x22, 0x90,
-0x01, 0x17, 0xE0, 0xFE, 0x90, 0x01, 0x16, 0xE0, 0x7C, 0x00, 0x24, 0x00, 0xFF, 0x22, 0xE4, 0xFC,
-0xED, 0x2C, 0x24, 0x00, 0xF1, 0x47, 0xE4, 0xF0, 0x0C, 0xEC, 0xB4, 0x18, 0xF3, 0xF1, 0x44, 0xEF,
-0xF0, 0xEE, 0x54, 0x3F, 0xFF, 0xF1, 0x92, 0xF5, 0x83, 0xF1, 0xA7, 0x54, 0xF0, 0xF0, 0xF1, 0x9B,
-0x44, 0x80, 0xF0, 0x74, 0x0B, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0xFB, 0xF5, 0x83, 0xE0, 0x44, 0x10,
-0xF0, 0x22, 0x74, 0x01, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0xFB, 0x22, 0x74, 0x03, 0x2D, 0xF5, 0x82,
-0xE4, 0x34, 0xFB, 0xF5, 0x83, 0xE0, 0x22, 0xEF, 0xF0, 0x74, 0x02, 0x2D, 0xF5, 0x82, 0xE4, 0x34,
-0xFB, 0xF5, 0x83, 0xE0, 0x22, 0xE0, 0x04, 0xF0, 0xE0, 0x7F, 0x00, 0x22, 0xF0, 0xA3, 0xE4, 0xF0,
-0xA3, 0xE5, 0x6F, 0x22, 0xF5, 0x82, 0xE4, 0x34, 0x90, 0xF5, 0x83, 0x22, 0xE0, 0x7A, 0x00, 0x24,
-0x00, 0xFF, 0xEA, 0x3E, 0x22, 0x75, 0xF0, 0x12, 0x90, 0x89, 0x3C, 0x12, 0x05, 0x28, 0xE0, 0x22,
-0x75, 0xF0, 0x08, 0xA4, 0x24, 0x00, 0xF5, 0x82, 0xE4, 0x34, 0x82, 0xF5, 0x83, 0x22, 0xD3, 0x10,
-0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x85, 0x1E, 0xE0, 0xFF, 0x90, 0x85, 0x1D, 0xE0, 0xB5, 0x07,
-0x04, 0x7F, 0x01, 0x80, 0x02, 0x7F, 0x00, 0xEF, 0x70, 0x48, 0x90, 0x85, 0x1D, 0xE0, 0xFE, 0x75,
-0xF0, 0x08, 0x90, 0x84, 0xCD, 0x12, 0x05, 0x28, 0xE0, 0xFD, 0xEE, 0x75, 0xF0, 0x08, 0xA4, 0x24,
-0xCE, 0xF9, 0x74, 0x84, 0x35, 0xF0, 0xFA, 0x7B, 0x01, 0xAF, 0x05, 0x12, 0x88, 0xD7, 0x90, 0x85,
-0x1D, 0x12, 0xAF, 0xB5, 0xB4, 0x0A, 0x02, 0x7F, 0x01, 0xEF, 0x60, 0x05, 0xE4, 0x90, 0x85, 0x1D,
-0xF0, 0x7D, 0x68, 0x7F, 0xFE, 0x12, 0x7B, 0x3E, 0x12, 0x40, 0xB9, 0x90, 0x84, 0xC1, 0xE0, 0x44,
-0x02, 0xF0, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90, 0x85, 0xB5, 0xE0, 0xFF, 0x70, 0x06, 0xA3, 0xE0,
-0x64, 0x09, 0x60, 0x0A, 0xEF, 0x14, 0xFF, 0x90, 0x85, 0xB6, 0xE0, 0xB5, 0x07, 0x04, 0x7F, 0x01,
-0x80, 0x02, 0x7F, 0x00, 0xEF, 0x60, 0x08, 0x90, 0x01, 0xC1, 0xE0, 0x44, 0x02, 0xF0, 0x22, 0xC0,
-0x01, 0x90, 0x85, 0xB6, 0xE0, 0x75, 0xF0, 0x0F, 0xA4, 0x24, 0x1F, 0xF9, 0x74, 0x85, 0x35, 0xF0,
-0xA8, 0x01, 0xFC, 0x7D, 0x01, 0xD0, 0x01, 0x7E, 0x00, 0x7F, 0x0F, 0x12, 0x02, 0xD0, 0x7D, 0xCC,
-0x7F, 0xFE, 0x12, 0x7B, 0x3E, 0x90, 0x85, 0xB6, 0x12, 0xAF, 0xB5, 0xB4, 0x0A, 0x02, 0x7F, 0x01,
-0xEF, 0x60, 0x05, 0xE4, 0x90, 0x85, 0xB6, 0xF0, 0x22, 0x90, 0x92, 0x21, 0xEF, 0xF0, 0xA3, 0x12,
-0x87, 0x79, 0x90, 0x93, 0x18, 0xE0, 0xFE, 0x04, 0xF0, 0x90, 0x00, 0x01, 0xEE, 0x12, 0x03, 0x4E,
-0x74, 0x00, 0x2F, 0xF9, 0xE4, 0x34, 0xFB, 0xFA, 0x7B, 0x01, 0xC0, 0x03, 0xC0, 0x02, 0xC0, 0x01,
-0x90, 0x92, 0x22, 0x12, 0x87, 0x70, 0x8B, 0x1B, 0x8A, 0x1C, 0x89, 0x1D, 0x75, 0x1E, 0x02, 0xD0,
-0x01, 0xD0, 0x02, 0xD0, 0x03, 0x12, 0x6A, 0x21, 0x90, 0x92, 0x21, 0xE0, 0x24, 0x02, 0xF9, 0xE4,
-0x34, 0xFB, 0xFA, 0x7B, 0x01, 0xC0, 0x03, 0xC0, 0x02, 0xC0, 0x01, 0xA3, 0x12, 0x87, 0x70, 0xE9,
-0x24, 0x02, 0xF9, 0xE4, 0x3A, 0x8B, 0x1B, 0xF5, 0x1C, 0x89, 0x1D, 0x90, 0x92, 0x22, 0x31, 0x2B,
-0xF5, 0x1E, 0xD0, 0x01, 0xD0, 0x02, 0xD0, 0x03, 0x02, 0x6A, 0x21, 0x12, 0x87, 0x70, 0x90, 0x00,
-0x0E, 0x02, 0x03, 0x0F, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x92, 0x25, 0x12, 0x87,
-0x79, 0x7F, 0x96, 0x7E, 0x02, 0x12, 0x66, 0x80, 0xEF, 0x60, 0x48, 0x12, 0xAF, 0x4F, 0xEC, 0x3E,
-0xFE, 0xEF, 0x24, 0x01, 0xFF, 0xE4, 0x3E, 0xFE, 0x90, 0x92, 0x28, 0xEF, 0xF0, 0xEE, 0xFF, 0x90,
-0xFD, 0x11, 0xF0, 0x90, 0x92, 0x28, 0xE0, 0xFD, 0x90, 0x02, 0x94, 0xF0, 0xA3, 0xEF, 0xF0, 0x90,
-0x92, 0x25, 0x31, 0x2B, 0x24, 0x02, 0xFF, 0xE4, 0x33, 0xFE, 0x12, 0x5A, 0xA5, 0x90, 0x92, 0x28,
-0xE0, 0x24, 0x18, 0xFF, 0x90, 0x92, 0x25, 0x12, 0x87, 0x70, 0x12, 0x56, 0xF4, 0x90, 0x02, 0x96,
-0x74, 0x01, 0xF0, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x02, 0x8B, 0x13, 0xE4, 0x90, 0x92, 0x2B, 0xF0,
-0xA3, 0xF0, 0xA3, 0xF0, 0x90, 0x92, 0x2B, 0xE0, 0x64, 0x01, 0xF0, 0x24, 0x9B, 0x90, 0x01, 0xC4,
-0xF0, 0x74, 0xB1, 0xA3, 0xF0, 0x12, 0x7C, 0x66, 0xBF, 0x01, 0x03, 0x12, 0x5B, 0x25, 0x90, 0x85,
-0xC5, 0xE0, 0x60, 0x0F, 0x90, 0x85, 0xC8, 0xE0, 0xFF, 0x90, 0x85, 0xC7, 0xE0, 0x6F, 0x60, 0x03,
-0x12, 0xA5, 0x90, 0xC2, 0xAF, 0xF1, 0x2F, 0xBF, 0x01, 0x02, 0x51, 0x04, 0xD2, 0xAF, 0x71, 0x5C,
-0x90, 0x92, 0x2C, 0xE4, 0x75, 0xF0, 0x01, 0x12, 0x07, 0x0A, 0x54, 0x7F, 0x45, 0xF0, 0x70, 0x0D,
-0x7F, 0xFF, 0x12, 0x7B, 0x51, 0xEF, 0x04, 0xFD, 0x7F, 0xFF, 0x12, 0x7B, 0x3E, 0x31, 0x98, 0x12,
-0x84, 0x4D, 0x80, 0xA0, 0x90, 0x85, 0xC1, 0xE0, 0x30, 0xE0, 0x18, 0x90, 0x85, 0xBC, 0xE0, 0xFF,
-0x30, 0xE0, 0x0E, 0xC3, 0x13, 0x30, 0xE0, 0x07, 0xD1, 0x74, 0xBF, 0x01, 0x06, 0x80, 0x02, 0x80,
-0x00, 0x51, 0x24, 0x22, 0x90, 0x85, 0xC8, 0xE0, 0xFF, 0x60, 0x03, 0xB4, 0x08, 0x0D, 0x71, 0x0D,
-0xBF, 0x01, 0x08, 0x51, 0x3C, 0x90, 0x01, 0xE5, 0xE0, 0x04, 0xF0, 0x22, 0xD3, 0x10, 0xAF, 0x01,
-0xC3, 0xC0, 0xD0, 0x51, 0xBB, 0x51, 0x4C, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xF1, 0x10, 0x7F, 0x08,
-0x12, 0x7B, 0x51, 0xEF, 0x54, 0xEF, 0xFD, 0x7F, 0x08, 0x12, 0x7B, 0x3E, 0xE4, 0xFF, 0x51, 0x6F,
-0x7D, 0x35, 0x7F, 0x27, 0x12, 0x7B, 0x3E, 0x90, 0x85, 0xC2, 0xE0, 0x54, 0xEF, 0xF0, 0x22, 0x90,
-0x93, 0x11, 0xEF, 0x12, 0xAC, 0x0F, 0x90, 0x01, 0x09, 0xE0, 0x7F, 0x00, 0x30, 0xE7, 0x02, 0x7F,
-0x01, 0x90, 0x93, 0x11, 0xE0, 0x6F, 0x60, 0x32, 0xC3, 0x90, 0x93, 0x13, 0xE0, 0x94, 0x88, 0x90,
-0x93, 0x12, 0xE0, 0x94, 0x13, 0x40, 0x08, 0x90, 0x01, 0xC0, 0xE0, 0x44, 0x10, 0xF0, 0x22, 0x90,
-0x93, 0x12, 0xD1, 0x81, 0xD3, 0x90, 0x93, 0x13, 0xE0, 0x94, 0x32, 0x90, 0x93, 0x12, 0xE0, 0x94,
-0x00, 0x40, 0xC3, 0x90, 0x01, 0xC6, 0xE0, 0x30, 0xE0, 0xBC, 0x22, 0x90, 0x85, 0xC2, 0xE0, 0x44,
-0x10, 0xF0, 0x90, 0x85, 0xD0, 0xE0, 0xFD, 0x7F, 0x93, 0x12, 0x7B, 0x3E, 0x90, 0x85, 0xC6, 0xE0,
-0x60, 0x12, 0x90, 0x01, 0x2F, 0xE0, 0x30, 0xE7, 0x05, 0x74, 0x10, 0xF0, 0x80, 0x06, 0x90, 0x01,
-0x2F, 0x74, 0x90, 0xF0, 0x7F, 0x08, 0x12, 0x7B, 0x51, 0xEF, 0x44, 0x10, 0xFD, 0x7F, 0x08, 0x12,
-0x7B, 0x3E, 0x7F, 0x01, 0x51, 0x6F, 0x7D, 0x34, 0x7F, 0x27, 0x12, 0x7B, 0x3E, 0x7F, 0x90, 0x71,
-0xC8, 0x7F, 0x90, 0x12, 0x7B, 0x3E, 0x7F, 0x14, 0x7E, 0x00, 0x02, 0x7C, 0x9F, 0x90, 0x92, 0x79,
-0xE0, 0xC3, 0x13, 0x20, 0xE0, 0x2A, 0x90, 0x02, 0x87, 0xE0, 0x60, 0x02, 0x80, 0x08, 0x90, 0x01,
-0x00, 0xE0, 0x64, 0x3F, 0x60, 0x05, 0x75, 0x61, 0x01, 0x80, 0x22, 0x90, 0x02, 0x86, 0xE0, 0x20,
-0xE1, 0x02, 0x80, 0x07, 0x90, 0x02, 0x86, 0xE0, 0x30, 0xE3, 0x05, 0x75, 0x61, 0x04, 0x80, 0x0D,
-0x90, 0x04, 0x1D, 0xE0, 0x60, 0x05, 0x75, 0x61, 0x40, 0x80, 0x02, 0x80, 0x73, 0x90, 0x01, 0xB9,
-0x74, 0x08, 0xF0, 0x90, 0x01, 0xB8, 0xE5, 0x61, 0xF0, 0x7F, 0x00, 0x22, 0xD3, 0x10, 0xAF, 0x01,
-0xC3, 0xC0, 0xD0, 0x90, 0x92, 0x85, 0xE0, 0x60, 0x25, 0x7F, 0x54, 0x7E, 0x09, 0x12, 0x70, 0x61,
-0x71, 0xB4, 0xEF, 0x44, 0xFE, 0xFF, 0xEE, 0x44, 0x03, 0xFE, 0xED, 0x44, 0x04, 0xFD, 0xEC, 0x71,
-0xB4, 0x90, 0x91, 0x66, 0x12, 0x04, 0xEB, 0x7F, 0x54, 0x7E, 0x09, 0x12, 0x71, 0x18, 0x90, 0x92,
-0x80, 0xE0, 0x70, 0x04, 0x90, 0x07, 0xCC, 0xF0, 0x90, 0x92, 0x88, 0xE0, 0x70, 0x0A, 0x90, 0x92,
-0x85, 0xE0, 0x70, 0x04, 0xA3, 0xE0, 0x60, 0x07, 0x90, 0x00, 0x1F, 0xE0, 0x54, 0xF0, 0xF0, 0xD0,
-0xD0, 0x92, 0xAF, 0x22, 0x90, 0x92, 0x2E, 0x12, 0x04, 0xEB, 0x90, 0x92, 0x2E, 0x02, 0x87, 0x58,
-0x90, 0x01, 0xB8, 0xE4, 0xF0, 0x7F, 0x01, 0x22, 0x12, 0x7B, 0x51, 0xEF, 0x44, 0x01, 0xFD, 0x22,
-0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x7F, 0x02, 0x71, 0xC8, 0x7F, 0x02, 0xD1, 0x6C, 0x44,
-0x02, 0xF0, 0x90, 0x01, 0x00, 0x74, 0xFF, 0xF0, 0x90, 0x06, 0xB7, 0x74, 0x09, 0xF0, 0x90, 0x06,
-0xB4, 0x74, 0x86, 0xF0, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x12, 0x90, 0xD8, 0x90, 0x85, 0xBF, 0x74,
-0x01, 0xF0, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x85, 0xBF, 0xE0, 0x90, 0x93,
-0x1E, 0xF0, 0x6F, 0x70, 0x02, 0xA1, 0x0A, 0xEF, 0x14, 0x60, 0x42, 0x14, 0x60, 0x6C, 0x14, 0x70,
-0x02, 0x81, 0xB6, 0x14, 0x70, 0x02, 0x81, 0xE1, 0x24, 0x04, 0x60, 0x02, 0xA1, 0x0A, 0x90, 0x93,
-0x1E, 0xE0, 0xB4, 0x04, 0x04, 0xB1, 0x1E, 0xA1, 0x0A, 0x90, 0x93, 0x1E, 0xE0, 0xB4, 0x02, 0x04,
-0xB1, 0x0F, 0xA1, 0x0A, 0x90, 0x93, 0x1E, 0xE0, 0xB4, 0x03, 0x04, 0xB1, 0x35, 0xA1, 0x0A, 0x90,
-0x93, 0x1E, 0xE0, 0x64, 0x01, 0x60, 0x02, 0xA1, 0x0A, 0xB1, 0x11, 0xA1, 0x0A, 0x90, 0x93, 0x1E,
-0xE0, 0xB4, 0x04, 0x04, 0xB1, 0x22, 0xA1, 0x0A, 0x90, 0x93, 0x1E, 0xE0, 0xB4, 0x02, 0x04, 0x71,
-0xF9, 0xA1, 0x0A, 0x90, 0x93, 0x1E, 0xE0, 0xB4, 0x03, 0x04, 0xB1, 0x39, 0xA1, 0x0A, 0x90, 0x93,
-0x1E, 0xE0, 0x60, 0x02, 0xA1, 0x0A, 0xB1, 0x66, 0xA1, 0x0A, 0x90, 0x93, 0x1E, 0xE0, 0xB4, 0x04,
-0x04, 0xB1, 0x8B, 0x80, 0x75, 0x90, 0x93, 0x1E, 0xE0, 0xB4, 0x01, 0x05, 0x12, 0x97, 0xED, 0x80,
-0x69, 0x90, 0x93, 0x1E, 0xE0, 0xB4, 0x03, 0x04, 0xB1, 0x83, 0x80, 0x5E, 0x90, 0x93, 0x1E, 0xE0,
-0x70, 0x58, 0xB1, 0x86, 0x80, 0x54, 0x90, 0x93, 0x1E, 0xE0, 0xB4, 0x04, 0x04, 0xB1, 0x41, 0x80,
-0x49, 0x90, 0x93, 0x1E, 0xE0, 0xB4, 0x01, 0x04, 0xB1, 0x7A, 0x80, 0x3E, 0x90, 0x93, 0x1E, 0xE0,
-0xB4, 0x02, 0x04, 0xB1, 0x2C, 0x80, 0x33, 0x90, 0x93, 0x1E, 0xE0, 0x70, 0x2D, 0xB1, 0x78, 0x80,
-0x29, 0x90, 0x93, 0x1E, 0xE0, 0xB4, 0x03, 0x04, 0xB1, 0x92, 0x80, 0x1E, 0x90, 0x93, 0x1E, 0xE0,
-0xB4, 0x01, 0x04, 0xB1, 0x6A, 0x80, 0x13, 0x90, 0x93, 0x1E, 0xE0, 0xB4, 0x02, 0x04, 0xB1, 0x4C,
-0x80, 0x08, 0x90, 0x93, 0x1E, 0xE0, 0x70, 0x02, 0xB1, 0x68, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x71,
-0xF9, 0x90, 0x05, 0x27, 0xE0, 0x54, 0xBF, 0xF0, 0xE4, 0x90, 0x85, 0xBF, 0xF0, 0x22, 0xB1, 0x22,
-0x80, 0xEF, 0xE4, 0xFD, 0xFF, 0xB1, 0x5E, 0x44, 0x40, 0xF0, 0x61, 0xFC, 0x71, 0xD0, 0x90, 0x85,
-0xBF, 0x74, 0x03, 0xF0, 0x22, 0xB1, 0x39, 0x80, 0xD8, 0xE4, 0xFD, 0xFF, 0x12, 0x90, 0xDE, 0x61,
-0xFC, 0x7D, 0x22, 0x7F, 0xFF, 0xB1, 0x5E, 0x44, 0x40, 0xF0, 0x80, 0xE2, 0x71, 0xD0, 0x7D, 0x24,
-0xB1, 0x5C, 0x54, 0xBF, 0xF0, 0x90, 0x85, 0xBF, 0x74, 0x04, 0xF0, 0x22, 0x7F, 0x6F, 0x12, 0x90,
-0xDE, 0x90, 0x05, 0x27, 0xE0, 0x22, 0x61, 0xFC, 0xB1, 0x66, 0x7D, 0x1F, 0xB1, 0x5C, 0x54, 0xBF,
-0xF0, 0x90, 0x85, 0xBF, 0x74, 0x04, 0xF0, 0x22, 0xB1, 0x66, 0x7D, 0x21, 0x7F, 0xFF, 0x12, 0x90,
-0xDE, 0x80, 0xAB, 0x02, 0x97, 0xF3, 0xB1, 0x66, 0x02, 0x97, 0xED, 0xD1, 0x64, 0x7D, 0x23, 0x02,
-0x97, 0xEF, 0x7D, 0x25, 0xB1, 0x5C, 0x54, 0xBF, 0xF0, 0x90, 0x85, 0xBF, 0x74, 0x04, 0xF0, 0x22,
-0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x7F, 0x02, 0x12, 0x7B, 0x51, 0xEF, 0x54, 0xFE, 0xFD,
-0x7F, 0x02, 0x12, 0x7B, 0x3E, 0x90, 0x01, 0x00, 0x74, 0x3F, 0xF0, 0x90, 0x01, 0x34, 0x74, 0x08,
-0xF0, 0x90, 0x01, 0x01, 0xE0, 0x54, 0xFD, 0xF0, 0x90, 0x05, 0x53, 0xE0, 0x44, 0x20, 0xF0, 0xD0,
-0xD0, 0x92, 0xAF, 0x22, 0xEF, 0x60, 0x49, 0x90, 0x88, 0xCE, 0xE0, 0xFF, 0x60, 0x03, 0x12, 0x7B,
-0x8A, 0x90, 0x01, 0xC7, 0xE4, 0xF0, 0x12, 0xAF, 0x4F, 0xEC, 0x3E, 0x90, 0x85, 0xB7, 0xF0, 0xA3,
-0xEF, 0xF0, 0x90, 0x06, 0x09, 0xE0, 0x54, 0xFE, 0xF0, 0x7D, 0x35, 0x7F, 0xFF, 0x12, 0x90, 0xDE,
-0xB1, 0xA0, 0x90, 0x02, 0x86, 0xE0, 0x44, 0x04, 0xF0, 0x12, 0x72, 0x79, 0xD1, 0x3D, 0x12, 0x90,
-0xD8, 0x12, 0x76, 0xE6, 0x90, 0x01, 0x34, 0x74, 0x08, 0xF0, 0xFD, 0xE4, 0xFF, 0x02, 0x7C, 0xA9,
-0x7D, 0x08, 0xE4, 0xFF, 0x12, 0x7C, 0x41, 0x90, 0x06, 0x90, 0xE0, 0x54, 0xF0, 0xF0, 0x90, 0x02,
-0x86, 0xE0, 0x54, 0xFB, 0xF0, 0xD1, 0x3E, 0x12, 0x9F, 0xEB, 0x02, 0x9B, 0x26, 0x22, 0xD1, 0xFD,
-0x12, 0x77, 0x89, 0x90, 0x01, 0x3F, 0x74, 0x04, 0xF0, 0x90, 0x84, 0xC5, 0xE0, 0xFF, 0xB4, 0x01,
-0x07, 0x90, 0xFD, 0x00, 0xE0, 0x54, 0xEF, 0xF0, 0xEF, 0xB4, 0x01, 0x07, 0x90, 0xFE, 0x10, 0xE0,
-0x54, 0xFB, 0xF0, 0x22, 0x90, 0x05, 0x27, 0xE0, 0x44, 0x40, 0xF0, 0x22, 0x12, 0x7B, 0x3E, 0x90,
-0x01, 0x01, 0xE0, 0x22, 0x90, 0x85, 0xBF, 0xE0, 0x64, 0x02, 0x7F, 0x01, 0x60, 0x02, 0x7F, 0x00,
-0x22, 0xE4, 0x75, 0xF0, 0x01, 0x12, 0x07, 0x0A, 0x7F, 0x14, 0x7E, 0x00, 0x02, 0x7C, 0x9F, 0xE4,
-0x90, 0x92, 0x29, 0xF0, 0xA3, 0xF0, 0xD1, 0xDD, 0xEF, 0x64, 0x01, 0x60, 0x39, 0xC3, 0x90, 0x92,
-0x2A, 0xE0, 0x94, 0x88, 0x90, 0x92, 0x29, 0xE0, 0x94, 0x13, 0x40, 0x0F, 0x90, 0x01, 0xC1, 0xE0,
-0x44, 0x10, 0xF0, 0x90, 0x01, 0xC7, 0x74, 0xFD, 0xF0, 0x80, 0x1B, 0x90, 0x92, 0x29, 0xD1, 0x81,
-0xD3, 0x90, 0x92, 0x2A, 0xE0, 0x94, 0x32, 0x90, 0x92, 0x29, 0xE0, 0x94, 0x00, 0x40, 0xC7, 0x90,
-0x01, 0xC6, 0xE0, 0x30, 0xE3, 0xC0, 0x90, 0x01, 0xC7, 0x74, 0xFE, 0xF0, 0x22, 0x90, 0x01, 0x9A,
-0xE0, 0x54, 0xC0, 0x44, 0x0B, 0xD1, 0xF5, 0x90, 0x01, 0x98, 0xE0, 0x54, 0xC0, 0x7F, 0x00, 0xB4,
-0x40, 0x02, 0x7F, 0x01, 0x22, 0xF0, 0x7F, 0x0A, 0x7E, 0x00, 0x02, 0x7C, 0x9F, 0xD3, 0x10, 0xAF,
-0x01, 0xC3, 0xC0, 0xD0, 0xE4, 0xFD, 0x7F, 0x8F, 0x12, 0x7B, 0x3E, 0xD0, 0xD0, 0x92, 0xAF, 0x22,
-0x90, 0x01, 0xC4, 0x74, 0x10, 0xF0, 0x74, 0xB7, 0xA3, 0xF0, 0x7F, 0x90, 0x12, 0x7B, 0x51, 0xEF,
-0x20, 0xE0, 0xF7, 0x74, 0x10, 0x04, 0x90, 0x01, 0xC4, 0xF0, 0x74, 0xB7, 0xA3, 0xF0, 0x22, 0x7D,
-0x02, 0x90, 0x01, 0xC4, 0x74, 0x2F, 0xF0, 0x74, 0xB7, 0xA3, 0xF0, 0x90, 0x92, 0x7D, 0xE0, 0xFF,
-0xED, 0xC3, 0x9F, 0x50, 0x18, 0xED, 0x25, 0xE0, 0x24, 0x81, 0xF8, 0xE6, 0x30, 0xE4, 0x0B, 0x90,
-0x01, 0xB8, 0x74, 0x08, 0xF0, 0xA3, 0xF0, 0x7F, 0x00, 0x22, 0x0D, 0x80, 0xDE, 0x7F, 0x01, 0x22,
+0x93, 0x5A, 0xF0, 0xA3, 0xEF, 0xF0, 0x74, 0xAF, 0x25, 0x63, 0xF5, 0x82, 0xE4, 0x34, 0x93, 0xF5,
+0x83, 0xE0, 0x22, 0xE0, 0x54, 0x03, 0x90, 0x91, 0x0B, 0x22, 0xF0, 0xE5, 0x65, 0x90, 0x83, 0x1D,
+0x93, 0xFF, 0x22, 0x7A, 0x00, 0x7D, 0x01, 0x7F, 0x01, 0xC1, 0x19, 0x74, 0xBC, 0x25, 0x79, 0xF5,
+0x82, 0xE4, 0x34, 0x90, 0xF5, 0x83, 0xE0, 0x22, 0x90, 0x00, 0x04, 0x02, 0x04, 0x18, 0x90, 0x00,
+0x06, 0x02, 0x04, 0x18, 0x90, 0x00, 0x08, 0x02, 0x04, 0x18, 0x90, 0x93, 0x5A, 0xE4, 0xF0, 0xA3,
+0x22, 0xE5, 0x67, 0xF0, 0xA3, 0xE5, 0x68, 0x22, 0x7D, 0x05, 0x7F, 0x01, 0xC1, 0x19, 0xFF, 0x90,
+0x93, 0x5C, 0xE4, 0xF0, 0xA3, 0xEF, 0xF0, 0x22, 0x75, 0xF0, 0x12, 0xE5, 0x63, 0x90, 0x89, 0x42,
+0x12, 0x05, 0x28, 0xE0, 0x22, 0x75, 0xF0, 0x12, 0xE5, 0x63, 0x90, 0x89, 0x40, 0x12, 0x05, 0x28,
+0xE0, 0x22, 0xE5, 0x65, 0x25, 0xE0, 0x24, 0xF5, 0xF5, 0x82, 0xE4, 0x34, 0x82, 0xF5, 0x83, 0xE4,
+0x93, 0xFF, 0x74, 0x01, 0x93, 0x90, 0x93, 0x58, 0xCF, 0xF0, 0xA3, 0xEF, 0xF0, 0x90, 0x93, 0x56,
+0x22, 0x7D, 0x07, 0xAF, 0x63, 0xED, 0x30, 0xE0, 0x26, 0x75, 0xF0, 0x12, 0xEF, 0x90, 0x89, 0x44,
+0x12, 0xD9, 0x53, 0x90, 0x89, 0x46, 0x12, 0xD9, 0x53, 0x90, 0x89, 0x48, 0x12, 0xD9, 0x53, 0x90,
+0x89, 0x4A, 0x12, 0xD9, 0x53, 0x90, 0x89, 0x4C, 0x12, 0x05, 0x28, 0xE4, 0xF0, 0xA3, 0xF0, 0xED,
+0x30, 0xE1, 0x0E, 0x75, 0xF0, 0x12, 0xEF, 0x90, 0x89, 0x40, 0x12, 0x05, 0x28, 0xE4, 0xF0, 0xA3,
+0xF0, 0xED, 0x30, 0xE2, 0x0C, 0x75, 0xF0, 0x12, 0xEF, 0x90, 0x89, 0x42, 0x12, 0x05, 0x28, 0xE4,
+0xF0, 0x12, 0xD9, 0xCA, 0xE0, 0x54, 0xBF, 0x44, 0x80, 0xFE, 0x12, 0xD9, 0xCA, 0xEE, 0xF0, 0x22,
+0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x85, 0x1E, 0xE0, 0xFF, 0x90, 0x85, 0x1D, 0xE0,
+0xB5, 0x07, 0x04, 0x7F, 0x01, 0x80, 0x02, 0x7F, 0x00, 0xEF, 0x70, 0x47, 0x90, 0x85, 0x1D, 0xE0,
+0xFE, 0x75, 0xF0, 0x08, 0x90, 0x84, 0xCD, 0x12, 0x05, 0x28, 0xE0, 0xFD, 0xEE, 0x75, 0xF0, 0x08,
+0xA4, 0x24, 0xCE, 0xF9, 0x74, 0x84, 0x35, 0xF0, 0xFA, 0x7B, 0x01, 0xAF, 0x05, 0x12, 0x89, 0xB4,
+0x90, 0x85, 0x1D, 0x11, 0x48, 0xB4, 0x0A, 0x02, 0x7F, 0x01, 0xEF, 0x60, 0x05, 0xE4, 0x90, 0x85,
+0x1D, 0xF0, 0x7D, 0x68, 0x7F, 0xFE, 0x12, 0x7B, 0x3E, 0x12, 0x40, 0xB9, 0x90, 0x84, 0xC1, 0xE0,
+0x44, 0x02, 0xF0, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xE0, 0x04, 0xF0, 0xE0, 0x7F, 0x00, 0x22, 0x90,
+0x85, 0xB5, 0xE0, 0xFF, 0x70, 0x06, 0xA3, 0xE0, 0x64, 0x09, 0x60, 0x0A, 0xEF, 0x14, 0xFF, 0x90,
+0x85, 0xB6, 0xE0, 0xB5, 0x07, 0x04, 0x7F, 0x01, 0x80, 0x02, 0x7F, 0x00, 0xEF, 0x60, 0x08, 0x90,
+0x01, 0xC1, 0xE0, 0x44, 0x02, 0xF0, 0x22, 0xC0, 0x01, 0x90, 0x85, 0xB6, 0xE0, 0x75, 0xF0, 0x0F,
+0xA4, 0x24, 0x1F, 0xF9, 0x74, 0x85, 0x35, 0xF0, 0xA8, 0x01, 0xFC, 0x7D, 0x01, 0xD0, 0x01, 0x7E,
+0x00, 0x7F, 0x0F, 0x12, 0x02, 0xD0, 0x7D, 0xCC, 0x7F, 0xFE, 0x12, 0x7B, 0x3E, 0x90, 0x85, 0xB6,
+0x11, 0x48, 0xB4, 0x0A, 0x02, 0x7F, 0x01, 0xEF, 0x60, 0x05, 0xE4, 0x90, 0x85, 0xB6, 0xF0, 0x22,
+0xE4, 0xFC, 0xED, 0x2C, 0x24, 0x00, 0x11, 0xE5, 0xE4, 0xF0, 0x0C, 0xEC, 0xB4, 0x18, 0xF3, 0x74,
+0x00, 0x2D, 0x11, 0xE5, 0xEF, 0xF0, 0xEE, 0x54, 0x3F, 0xFF, 0x11, 0xED, 0x91, 0x35, 0x54, 0xF0,
+0xF0, 0x91, 0x29, 0x44, 0x80, 0xF0, 0x74, 0x0B, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0xFB, 0xF5, 0x83,
+0xE0, 0x44, 0x10, 0xF0, 0x22, 0xF5, 0x82, 0xE4, 0x34, 0xFB, 0xF5, 0x83, 0x22, 0x74, 0x01, 0x2D,
+0xF5, 0x82, 0xE4, 0x34, 0xFB, 0xF5, 0x83, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0xE4,
+0x90, 0x93, 0xBD, 0xF0, 0xA3, 0xF0, 0xA3, 0x74, 0x08, 0xF0, 0xA3, 0xB1, 0xDE, 0x90, 0x93, 0xC5,
+0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0x90, 0x01, 0xC4, 0x74, 0xF8, 0xF0, 0x74, 0xB8, 0xA3, 0xF0, 0x90,
+0x01, 0x1F, 0xE0, 0xFE, 0x90, 0x01, 0x1E, 0x91, 0x4B, 0x90, 0x93, 0xB4, 0xF0, 0xA3, 0xEF, 0xF0,
+0x90, 0x02, 0x87, 0xE0, 0x90, 0x93, 0xBC, 0xF0, 0x90, 0x86, 0x72, 0xE0, 0x20, 0xE0, 0x02, 0x61,
+0xEC, 0xE4, 0x90, 0x93, 0xBB, 0xF0, 0x90, 0x93, 0xBC, 0xE0, 0xFF, 0x90, 0x93, 0xBB, 0xE0, 0xC3,
+0x9F, 0x40, 0x02, 0x61, 0xEC, 0x90, 0x93, 0xB4, 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0xEC, 0xFF, 0x90,
+0xFD, 0x11, 0xF0, 0x90, 0x93, 0xC5, 0xEF, 0xF0, 0x11, 0xED, 0xE0, 0xFE, 0x74, 0x00, 0x2D, 0xF5,
+0x82, 0xE4, 0x34, 0xFB, 0x12, 0xD8, 0xAE, 0x54, 0x3F, 0xFE, 0x90, 0x93, 0xB6, 0xF0, 0xA3, 0xEF,
+0xF0, 0x90, 0x93, 0xC1, 0xEE, 0xF0, 0xA3, 0x91, 0x35, 0x54, 0x0F, 0x33, 0x33, 0x33, 0x54, 0xF8,
+0xFF, 0x91, 0x29, 0x54, 0x03, 0xFE, 0xEF, 0x24, 0x18, 0x2E, 0xFF, 0x90, 0x93, 0xC6, 0xF0, 0x90,
+0x93, 0xB5, 0xE0, 0x2F, 0xFF, 0x90, 0x93, 0xB4, 0xE0, 0x34, 0x00, 0xFE, 0x90, 0x93, 0xB8, 0x91,
+0x20, 0xC0, 0x07, 0x71, 0xFD, 0x7D, 0x01, 0x12, 0x55, 0x36, 0xC0, 0x07, 0x71, 0xFD, 0x7D, 0x04,
+0x12, 0x55, 0x36, 0xAB, 0x07, 0xD0, 0x05, 0xD0, 0x07, 0x12, 0x5D, 0x98, 0x90, 0x93, 0xBD, 0xEF,
+0x71, 0xFC, 0xE4, 0xFD, 0x12, 0x55, 0x36, 0xEF, 0x54, 0xFC, 0x90, 0x93, 0xBA, 0xF0, 0x90, 0x93,
+0xC6, 0xE0, 0xFF, 0x90, 0x93, 0xB6, 0xE4, 0x8F, 0xF0, 0x12, 0x07, 0x0A, 0x90, 0x93, 0xB6, 0xE0,
+0xFE, 0xA3, 0xE0, 0xFF, 0x12, 0x7A, 0xD0, 0x90, 0x93, 0xB6, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0x91,
+0x18, 0xFF, 0x7D, 0x0F, 0x12, 0x55, 0x36, 0x90, 0x93, 0xB6, 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0x90,
+0x93, 0xB4, 0xEC, 0x8D, 0xF0, 0x12, 0x07, 0x0A, 0x90, 0x85, 0xB7, 0xE0, 0xFC, 0xA3, 0xE0, 0xFD,
+0xD3, 0x90, 0x93, 0xB5, 0xE0, 0x9D, 0x90, 0x93, 0xB4, 0xE0, 0x9C, 0x40, 0x1B, 0x90, 0x85, 0xB8,
+0xE0, 0x24, 0x01, 0xFD, 0x90, 0x85, 0xB7, 0xE0, 0x34, 0x00, 0xFC, 0xC3, 0x90, 0x93, 0xB5, 0xE0,
+0x9D, 0xF0, 0x90, 0x93, 0xB4, 0xE0, 0x9C, 0xF0, 0xEF, 0x30, 0xE6, 0x06, 0x90, 0x01, 0xC7, 0x74,
+0x22, 0xF0, 0xEF, 0x30, 0xE7, 0x06, 0x90, 0x01, 0xC7, 0x74, 0x21, 0xF0, 0xEF, 0x30, 0xE5, 0x06,
+0x90, 0x01, 0xC7, 0x74, 0x23, 0xF0, 0x90, 0x93, 0xBA, 0xE0, 0x24, 0x40, 0x60, 0x04, 0x24, 0x20,
+0x70, 0x2C, 0x90, 0x86, 0x75, 0xE0, 0xFF, 0x12, 0x8F, 0x66, 0x20, 0xE0, 0x02, 0x61, 0x63, 0x90,
+0x86, 0x87, 0xE0, 0x04, 0x71, 0xFC, 0x12, 0x59, 0x20, 0xEF, 0x70, 0x02, 0x61, 0x63, 0x90, 0x93,
+0xBA, 0xE0, 0xFF, 0x12, 0x7B, 0x77, 0x90, 0x86, 0x88, 0xE0, 0x04, 0xF0, 0x61, 0x63, 0x12, 0x9F,
+0x1C, 0x30, 0xE0, 0x56, 0x90, 0x93, 0xBD, 0xE0, 0xFF, 0x90, 0x93, 0xB9, 0xE0, 0x2F, 0xFF, 0x90,
+0x93, 0xB8, 0xE0, 0x34, 0x00, 0xCF, 0x24, 0x08, 0xCF, 0x34, 0x00, 0xFE, 0x90, 0x93, 0xC3, 0x91,
+0x20, 0xEF, 0x64, 0x45, 0x70, 0x34, 0x91, 0x07, 0x91, 0x8F, 0xEF, 0x64, 0x01, 0x70, 0x2B, 0x91,
+0x07, 0x91, 0x54, 0xEF, 0x64, 0x01, 0x70, 0x22, 0x90, 0x93, 0xC7, 0x04, 0x91, 0x06, 0xA3, 0xE0,
+0xFD, 0xB1, 0x11, 0xEF, 0x70, 0x0C, 0x90, 0x93, 0xC5, 0xE0, 0xFD, 0x90, 0xFD, 0x11, 0x91, 0x06,
+0x91, 0xD3, 0x90, 0x93, 0xC5, 0xE0, 0x90, 0xFD, 0x11, 0xF0, 0x71, 0xFD, 0x12, 0x59, 0x20, 0xEF,
+0x60, 0x18, 0x71, 0xFD, 0x90, 0x93, 0xBD, 0xE0, 0xFD, 0x90, 0x93, 0xC0, 0xE0, 0xFB, 0x12, 0x54,
+0x02, 0xEF, 0x60, 0x06, 0x90, 0x93, 0xC7, 0x74, 0x01, 0xF0, 0x90, 0x86, 0x72, 0xE0, 0xC3, 0x13,
+0x30, 0xE0, 0x13, 0x71, 0xFD, 0x90, 0x93, 0xBD, 0xE0, 0xFD, 0x12, 0x38, 0x10, 0xEF, 0x60, 0x06,
+0x90, 0x93, 0xC7, 0x74, 0x01, 0xF0, 0x12, 0xA7, 0x41, 0x54, 0x3F, 0x30, 0xE0, 0x0A, 0x71, 0xFD,
+0x90, 0x93, 0xBD, 0xE0, 0xFD, 0x12, 0x21, 0xB6, 0x90, 0x86, 0x72, 0xE0, 0xFF, 0x12, 0x8F, 0x66,
+0x30, 0xE0, 0x10, 0x90, 0x93, 0xC7, 0xE0, 0x70, 0x0A, 0x71, 0xFD, 0x90, 0x93, 0xBD, 0xE0, 0xFD,
+0x12, 0x4A, 0x3F, 0x12, 0x79, 0x00, 0xEF, 0x64, 0x01, 0x60, 0x07, 0x90, 0x01, 0x3F, 0xE0, 0x30,
+0xE2, 0x16, 0x90, 0x86, 0x74, 0xE0, 0xC4, 0x13, 0x54, 0x07, 0x30, 0xE0, 0x06, 0x90, 0x01, 0x3F,
+0x74, 0x04, 0xF0, 0x7F, 0x01, 0x12, 0x5F, 0xE9, 0x90, 0x01, 0x3F, 0xE0, 0x30, 0xE2, 0x02, 0x91,
+0x10, 0x12, 0x7A, 0xE7, 0xEF, 0x64, 0x01, 0x70, 0x37, 0x90, 0x86, 0x89, 0xE0, 0x04, 0xF0, 0x12,
+0x6F, 0xE5, 0xAD, 0x07, 0xEF, 0x64, 0x01, 0x60, 0x1F, 0x91, 0x10, 0xED, 0xB4, 0x02, 0x08, 0x90,
+0x01, 0xC7, 0x74, 0x42, 0xF0, 0x80, 0x0A, 0xED, 0xB4, 0x04, 0x06, 0x90, 0x01, 0xC7, 0x74, 0x43,
+0xF0, 0x7F, 0x01, 0x12, 0x5F, 0xE9, 0x80, 0x24, 0x91, 0x18, 0xFF, 0x12, 0x7C, 0x0B, 0x80, 0x14,
+0x90, 0x86, 0x74, 0xE0, 0xC4, 0x13, 0x54, 0x07, 0x20, 0xE0, 0x11, 0x90, 0x86, 0x72, 0xE0, 0x54,
+0xFE, 0xF0, 0x80, 0x08, 0x90, 0x93, 0xBB, 0xE0, 0x04, 0xF0, 0x21, 0x46, 0x74, 0xF8, 0x04, 0x90,
+0x01, 0xC4, 0xF0, 0x74, 0xB8, 0xA3, 0xF0, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xF0, 0x90, 0x93, 0xB8,
+0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x22, 0xF0, 0x90, 0x93, 0xC3, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x22,
+0x90, 0x86, 0x7A, 0xE0, 0x44, 0x01, 0xF0, 0x22, 0x90, 0x93, 0xB4, 0xE0, 0xFE, 0xA3, 0xE0, 0x22,
+0xF0, 0xA3, 0xEF, 0xF0, 0xE4, 0xFD, 0x02, 0x55, 0x36, 0x74, 0x03, 0x2D, 0xF5, 0x82, 0xE4, 0x34,
+0xFB, 0xF5, 0x83, 0xE0, 0x22, 0xEF, 0xF0, 0x74, 0x02, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0xFB, 0xF5,
+0x83, 0xE0, 0x22, 0x90, 0x01, 0x17, 0xE0, 0xFE, 0x90, 0x01, 0x16, 0xE0, 0x7C, 0x00, 0x24, 0x00,
+0xFF, 0xEC, 0x3E, 0x22, 0x90, 0x93, 0x4A, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0x24, 0x16, 0xFF, 0xE4,
+0x3E, 0xFE, 0xE4, 0xFD, 0x12, 0x55, 0x36, 0x90, 0x88, 0x86, 0xA3, 0xE0, 0xB5, 0x07, 0x1A, 0x90,
+0x93, 0x4B, 0xE0, 0x24, 0x16, 0x91, 0xCB, 0xFE, 0x7D, 0x01, 0x12, 0x55, 0x36, 0xEF, 0xFD, 0x90,
+0x88, 0x86, 0xE0, 0x6D, 0x70, 0x01, 0xE4, 0x60, 0x03, 0x7F, 0x00, 0x22, 0x7F, 0x01, 0x22, 0x90,
+0x93, 0x4A, 0xF1, 0x44, 0xA3, 0xF0, 0x90, 0x93, 0x4C, 0xE0, 0xFD, 0xC3, 0x94, 0x04, 0x50, 0x28,
+0x90, 0x93, 0x4B, 0xE0, 0x24, 0x10, 0x91, 0xCB, 0xFE, 0x12, 0x55, 0x36, 0x90, 0x93, 0x4C, 0xE0,
+0x24, 0x82, 0xF5, 0x82, 0xE4, 0x34, 0x88, 0xF5, 0x83, 0xE0, 0x6F, 0x60, 0x03, 0x7F, 0x00, 0x22,
+0x90, 0x93, 0x4C, 0xE0, 0x04, 0xF0, 0x80, 0xCE, 0x7F, 0x01, 0x22, 0xFF, 0x90, 0x93, 0x4A, 0xE0,
+0x34, 0x00, 0x22, 0xB1, 0x5A, 0xE4, 0xA3, 0xF0, 0x90, 0x93, 0x4D, 0xE0, 0xFD, 0xC3, 0x94, 0x02,
+0x50, 0x17, 0xB1, 0x66, 0x24, 0xAA, 0xF5, 0x82, 0xE4, 0x34, 0x88, 0xF5, 0x83, 0xE0, 0xB5, 0x07,
+0x1D, 0x90, 0x93, 0x4D, 0xE0, 0x04, 0xF0, 0x80, 0xDF, 0x90, 0x06, 0x32, 0xE0, 0x44, 0x80, 0xF0,
+0x90, 0x01, 0xC7, 0x74, 0x30, 0xF0, 0x7F, 0x01, 0x12, 0x5F, 0xE9, 0x7F, 0x01, 0x22, 0x7F, 0x00,
+0x22, 0xB1, 0x5A, 0x90, 0x88, 0x7C, 0xE0, 0x70, 0x02, 0xA3, 0xE0, 0x60, 0x29, 0xE4, 0x90, 0x93,
+0x4D, 0xF0, 0x90, 0x93, 0x4D, 0xE0, 0xFD, 0xC3, 0x94, 0x02, 0x50, 0x1D, 0xB1, 0x66, 0x24, 0x8A,
+0xF5, 0x82, 0xE4, 0x34, 0x88, 0xF5, 0x83, 0xE0, 0x6F, 0x60, 0x03, 0x7F, 0x00, 0x22, 0x90, 0x93,
+0x4D, 0xE0, 0x04, 0xF0, 0x80, 0xDC, 0x7F, 0x00, 0x22, 0x90, 0x06, 0x32, 0xE0, 0x44, 0x40, 0xF0,
+0xE4, 0x90, 0x88, 0x88, 0xF0, 0xA3, 0xF0, 0x7F, 0x01, 0x22, 0x90, 0x93, 0x4A, 0xEE, 0xF0, 0xA3,
+0xEF, 0xF0, 0xA3, 0xED, 0xF0, 0x22, 0x90, 0x93, 0x4A, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0xED, 0x24,
+0x1C, 0xFD, 0x12, 0x55, 0x36, 0x90, 0x93, 0x4D, 0xE0, 0x22, 0xE4, 0xFB, 0xFA, 0xFD, 0x7F, 0x01,
+0x12, 0x86, 0x4E, 0x90, 0x93, 0x49, 0xEF, 0xF0, 0x60, 0xF0, 0x90, 0x84, 0xC1, 0xE0, 0xFF, 0x70,
+0x04, 0xA3, 0xE0, 0x60, 0xE5, 0xC2, 0xAF, 0xEF, 0x30, 0xE0, 0x0F, 0x90, 0x84, 0xC1, 0xE0, 0x54,
+0xFE, 0xF0, 0xE4, 0xFF, 0x12, 0x2D, 0xBD, 0x12, 0xB1, 0x3E, 0xB1, 0xD4, 0x30, 0xE1, 0x06, 0x54,
+0xFD, 0xF0, 0x12, 0x60, 0x5D, 0xB1, 0xD4, 0x30, 0xE2, 0x06, 0x54, 0xFB, 0xF0, 0x12, 0x6A, 0x6D,
+0xB1, 0xD4, 0x30, 0xE4, 0x0B, 0x54, 0xEF, 0xF0, 0x12, 0x6F, 0x22, 0xBF, 0x01, 0x02, 0x11, 0xF8,
+0xD2, 0xAF, 0x80, 0xB6, 0xD2, 0xAF, 0xC2, 0xAF, 0x90, 0x84, 0xC1, 0xE0, 0xFF, 0x22, 0xF0, 0xE4,
+0xA3, 0xF0, 0xA3, 0xF0, 0x22, 0x90, 0x94, 0x06, 0xEF, 0xB1, 0xDE, 0x90, 0x01, 0x09, 0xE0, 0x7F,
+0x00, 0x30, 0xE7, 0x02, 0x7F, 0x01, 0x90, 0x94, 0x06, 0xE0, 0x6F, 0x60, 0x36, 0xC3, 0x90, 0x94,
+0x08, 0xE0, 0x94, 0x88, 0x90, 0x94, 0x07, 0xE0, 0x94, 0x13, 0x40, 0x08, 0x90, 0x01, 0xC0, 0xE0,
+0x44, 0x10, 0xF0, 0x22, 0x90, 0x94, 0x07, 0x12, 0xAD, 0x64, 0x12, 0xDA, 0x62, 0xD3, 0x90, 0x94,
+0x08, 0xE0, 0x94, 0x32, 0x90, 0x94, 0x07, 0xE0, 0x94, 0x00, 0x40, 0xBF, 0x90, 0x01, 0xC6, 0xE0,
+0x30, 0xE0, 0xB8, 0x22, 0x12, 0xD3, 0xF0, 0x7F, 0x08, 0x12, 0x7B, 0x51, 0xEF, 0x54, 0xEF, 0xFD,
+0x7F, 0x08, 0x12, 0x7B, 0x3E, 0xE4, 0xFF, 0xB1, 0xE5, 0x7D, 0x35, 0x7F, 0x27, 0x12, 0x7B, 0x3E,
+0x90, 0x85, 0xC2, 0xE0, 0x54, 0xEF, 0xF0, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0xD1,
+0xF1, 0xD1, 0x34, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90, 0x85, 0xC8, 0xE0, 0xFF, 0x60, 0x03, 0xB4,
+0x08, 0x0D, 0xD1, 0xA1, 0xBF, 0x01, 0x08, 0xD1, 0x58, 0x90, 0x01, 0xE5, 0xE0, 0x04, 0xF0, 0x22,
+0x90, 0x85, 0xC1, 0xE0, 0x30, 0xE0, 0x19, 0x90, 0x85, 0xBC, 0xE0, 0xFF, 0x30, 0xE0, 0x0F, 0xC3,
+0x13, 0x30, 0xE0, 0x08, 0x12, 0xD4, 0x0F, 0xBF, 0x01, 0x06, 0x80, 0x02, 0x80, 0x00, 0xD1, 0x68,
+0x22, 0x90, 0x92, 0x04, 0xE0, 0xC3, 0x13, 0x20, 0xE0, 0x2A, 0x90, 0x02, 0x87, 0xE0, 0x60, 0x02,
+0x80, 0x08, 0x90, 0x01, 0x00, 0xE0, 0x64, 0x3F, 0x60, 0x05, 0x75, 0x62, 0x01, 0x80, 0x23, 0x90,
+0x02, 0x86, 0xE0, 0x20, 0xE1, 0x02, 0x80, 0x07, 0x90, 0x02, 0x86, 0xE0, 0x30, 0xE3, 0x05, 0x75,
+0x62, 0x04, 0x80, 0x0E, 0x90, 0x04, 0x1D, 0xE0, 0x60, 0x05, 0x75, 0x62, 0x40, 0x80, 0x03, 0x02,
+0xD5, 0x58, 0x90, 0x01, 0xB9, 0x74, 0x08, 0xF0, 0x90, 0x01, 0xB8, 0xE5, 0x62, 0xF0, 0x7F, 0x00,
+0x22, 0x90, 0x85, 0xC2, 0xE0, 0x44, 0x10, 0xF0, 0x90, 0x85, 0xD0, 0xE0, 0xFD, 0x7F, 0x93, 0x12,
+0x7B, 0x3E, 0x90, 0x85, 0xC6, 0xE0, 0x60, 0x12, 0x90, 0x01, 0x2F, 0xE0, 0x30, 0xE7, 0x05, 0x74,
+0x10, 0xF0, 0x80, 0x06, 0x90, 0x01, 0x2F, 0x74, 0x90, 0xF0, 0x7F, 0x08, 0x12, 0x7B, 0x51, 0xEF,
+0x44, 0x10, 0xFD, 0x7F, 0x08, 0x12, 0x7B, 0x3E, 0x7F, 0x01, 0xB1, 0xE5, 0x7D, 0x34, 0x7F, 0x27,
+0x12, 0x7B, 0x3E, 0x7F, 0x90, 0x12, 0xA7, 0xBC, 0x7F, 0x90, 0x12, 0x7B, 0x3E, 0x7F, 0x14, 0x7E,
+0x00, 0x02, 0x7C, 0x9F, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0xE4, 0x22, 0x90, 0x93, 0x99, 0xF1, 0x44,
+0x90, 0x93, 0x9D, 0xF0, 0x7D, 0x09, 0x12, 0x55, 0x36, 0xEF, 0x64, 0x06, 0x70, 0x2D, 0x12, 0xD9,
+0x78, 0x7D, 0x14, 0x12, 0x55, 0x36, 0xEF, 0x70, 0x22, 0x12, 0xD9, 0x78, 0x7D, 0x15, 0x12, 0x55,
+0x36, 0xEF, 0x64, 0x50, 0x70, 0x15, 0x12, 0xD9, 0x78, 0x7D, 0x21, 0x12, 0x55, 0x36, 0xEF, 0x20,
+0xE0, 0x03, 0x30, 0xE2, 0x06, 0x90, 0x93, 0x9D, 0x74, 0x01, 0xF0, 0x90, 0x86, 0x73, 0xE0, 0x13,
+0x13, 0x54, 0x3F, 0x30, 0xE0, 0x40, 0x12, 0xD9, 0x78, 0x7D, 0x09, 0x12, 0x55, 0x36, 0xEF, 0x64,
+0x11, 0x70, 0x33, 0x90, 0x93, 0x9A, 0xE0, 0x24, 0x14, 0xFF, 0x90, 0x93, 0x99, 0xE0, 0x34, 0x00,
+0xFE, 0x90, 0x93, 0x9B, 0xF0, 0xA3, 0xEF, 0xF0, 0x7D, 0x02, 0x12, 0x55, 0x36, 0xEF, 0x70, 0x16,
+0x90, 0x93, 0x9B, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x7D, 0x03, 0x12, 0x55, 0x36, 0xBF, 0x89, 0x06,
+0x90, 0x93, 0x9D, 0x74, 0x01, 0xF0, 0x90, 0x93, 0x9D, 0xE0, 0xFF, 0x12, 0xD4, 0xD1, 0xEF, 0xF0,
+0x22, 0x90, 0x93, 0x20, 0xEF, 0xF0, 0xA3, 0x12, 0x87, 0x79, 0x90, 0x94, 0x0D, 0xE0, 0xFE, 0x04,
+0xF0, 0x90, 0x00, 0x01, 0xEE, 0x12, 0x03, 0x4E, 0x74, 0x00, 0x2F, 0xF9, 0xE4, 0x34, 0xFB, 0xFA,
+0x7B, 0x01, 0xC0, 0x03, 0xC0, 0x02, 0xC0, 0x01, 0x90, 0x93, 0x21, 0x12, 0x87, 0x70, 0x8B, 0x1B,
+0x8A, 0x1C, 0x89, 0x1D, 0x75, 0x1E, 0x02, 0xD0, 0x01, 0xD0, 0x02, 0xD0, 0x03, 0x12, 0x6A, 0x21,
+0x90, 0x93, 0x20, 0xE0, 0x24, 0x02, 0xF9, 0xE4, 0x34, 0xFB, 0xFA, 0x7B, 0x01, 0xC0, 0x03, 0xC0,
+0x02, 0xC0, 0x01, 0xA3, 0x12, 0x87, 0x70, 0xE9, 0x24, 0x02, 0xF9, 0xE4, 0x3A, 0x8B, 0x1B, 0xF5,
+0x1C, 0x89, 0x1D, 0x90, 0x93, 0x21, 0x11, 0x53, 0xF5, 0x1E, 0xD0, 0x01, 0xD0, 0x02, 0xD0, 0x03,
+0x02, 0x6A, 0x21, 0x12, 0x87, 0x70, 0x90, 0x00, 0x0E, 0x02, 0x03, 0x0F, 0xD3, 0x10, 0xAF, 0x01,
+0xC3, 0xC0, 0xD0, 0x90, 0x93, 0x24, 0x12, 0x87, 0x79, 0x7F, 0x96, 0x7E, 0x02, 0x12, 0x66, 0x80,
+0xEF, 0x60, 0x46, 0x12, 0xBC, 0x43, 0xFE, 0xEF, 0x24, 0x01, 0xFF, 0xE4, 0x3E, 0xFE, 0x90, 0x93,
+0x27, 0xEF, 0xF0, 0xEE, 0xFF, 0x90, 0xFD, 0x11, 0xF0, 0x90, 0x93, 0x27, 0xE0, 0xFD, 0x90, 0x02,
+0x94, 0xF0, 0xA3, 0xEF, 0xF0, 0x90, 0x93, 0x24, 0x11, 0x53, 0x24, 0x02, 0xFF, 0xE4, 0x33, 0xFE,
+0x12, 0x5A, 0xA5, 0x90, 0x93, 0x27, 0xE0, 0x24, 0x18, 0xFF, 0x90, 0x93, 0x24, 0x12, 0x87, 0x70,
+0x12, 0x56, 0xF4, 0x90, 0x02, 0x96, 0x74, 0x01, 0xF0, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90, 0x93,
+0x6D, 0xEF, 0xF0, 0x90, 0x04, 0x7E, 0xE0, 0xFF, 0xA3, 0xE0, 0x90, 0x93, 0x7D, 0xF0, 0xE0, 0xFE,
+0x6F, 0x60, 0x65, 0x90, 0x93, 0x6E, 0x74, 0x03, 0xF0, 0x90, 0x93, 0x7C, 0x74, 0x08, 0xF0, 0xEE,
+0x04, 0x54, 0x0F, 0xFF, 0xE4, 0xFE, 0xEF, 0x75, 0xF0, 0x08, 0xA4, 0x24, 0x00, 0xF5, 0x82, 0xE4,
+0x34, 0x80, 0xF5, 0x83, 0xE5, 0x82, 0x2E, 0x31, 0x3D, 0xE0, 0xFD, 0x74, 0x70, 0x2E, 0xF5, 0x82,
+0xE4, 0x34, 0x93, 0xF5, 0x83, 0xED, 0xF0, 0x0E, 0xEE, 0xB4, 0x08, 0xDA, 0x7B, 0x01, 0x7A, 0x93,
+0x79, 0x6E, 0x12, 0x5E, 0x10, 0x90, 0x93, 0x7D, 0xE0, 0x04, 0x54, 0x0F, 0xFF, 0xF0, 0xBF, 0x0F,
+0x02, 0xE4, 0xF0, 0x90, 0x93, 0x7D, 0xE0, 0x90, 0x04, 0x7F, 0xF0, 0x90, 0x93, 0x6D, 0xE0, 0x7F,
+0x04, 0x70, 0x02, 0x80, 0x6D, 0x12, 0x87, 0xBB, 0x22, 0xE4, 0xFF, 0x80, 0x81, 0xF5, 0x82, 0xE4,
+0x35, 0x83, 0xF5, 0x83, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x94, 0x0E, 0xEF,
+0xF0, 0x31, 0x94, 0x30, 0xE6, 0x39, 0x7F, 0x8D, 0x12, 0x7B, 0x51, 0xEF, 0x64, 0x01, 0x70, 0x2F,
+0x90, 0x94, 0x0F, 0xF0, 0x90, 0x94, 0x0F, 0xE0, 0xFD, 0x90, 0x94, 0x0E, 0xE0, 0x12, 0xB5, 0x85,
+0xE5, 0x82, 0x2D, 0x31, 0x3D, 0xE0, 0xFB, 0xE4, 0xFF, 0x12, 0x8E, 0x5A, 0x90, 0x94, 0x0F, 0xE0,
+0x04, 0xF0, 0xE0, 0xC3, 0x94, 0x10, 0x40, 0xDC, 0x31, 0x94, 0x30, 0xE0, 0x02, 0x31, 0x9B, 0xD0,
+0xD0, 0x92, 0xAF, 0x22, 0x7F, 0x8F, 0x12, 0x7B, 0x51, 0xEF, 0x22, 0xE4, 0xFD, 0x7F, 0x8D, 0x02,
+0x7B, 0x3E, 0x8F, 0x0D, 0x7F, 0x02, 0x12, 0x86, 0x27, 0x90, 0x84, 0xC1, 0xE0, 0x45, 0x0D, 0xF0,
+0x22, 0x12, 0x40, 0xB9, 0x7F, 0x02, 0x80, 0xEA, 0xC0, 0xE0, 0xC0, 0xF0, 0xC0, 0x83, 0xC0, 0x82,
+0xC0, 0xD0, 0x75, 0xD0, 0x00, 0xC0, 0x00, 0xC0, 0x01, 0xC0, 0x02, 0xC0, 0x03, 0xC0, 0x04, 0xC0,
+0x05, 0xC0, 0x06, 0xC0, 0x07, 0x90, 0x01, 0xC4, 0x74, 0xB8, 0xF0, 0x74, 0xC1, 0xA3, 0xF0, 0x12,
+0x71, 0x90, 0xE5, 0x4C, 0x30, 0xE1, 0x02, 0x31, 0x39, 0xE5, 0x4C, 0x30, 0xE3, 0x02, 0x51, 0xE7,
+0xE5, 0x4C, 0x30, 0xE4, 0x02, 0x31, 0xB1, 0xE5, 0x4C, 0x30, 0xE5, 0x03, 0x12, 0xD3, 0x4D, 0xE5,
+0x4C, 0x30, 0xE6, 0x02, 0xF1, 0x6A, 0xE5, 0x4E, 0x30, 0xE0, 0x03, 0x12, 0xA3, 0x49, 0xE5, 0x4E,
+0x30, 0xE1, 0x03, 0x12, 0x99, 0xCC, 0xE5, 0x4E, 0x30, 0xE2, 0x03, 0x12, 0xC9, 0xBB, 0xE5, 0x4E,
+0x30, 0xE3, 0x02, 0x91, 0x09, 0xE5, 0x4E, 0x30, 0xE4, 0x02, 0x91, 0x37, 0xE5, 0x4E, 0x30, 0xE5,
+0x02, 0xF1, 0xAE, 0xE5, 0x4E, 0x30, 0xE6, 0x02, 0x51, 0xF3, 0xE5, 0x4F, 0x30, 0xE1, 0x03, 0x12,
+0x9F, 0x5E, 0xE5, 0x4F, 0x30, 0xE4, 0x02, 0x91, 0xB4, 0xE5, 0x4F, 0x30, 0xE5, 0x02, 0x51, 0x76,
+0x74, 0xB8, 0x04, 0x90, 0x01, 0xC4, 0xF0, 0x74, 0xC1, 0xA3, 0xF0, 0xD0, 0x07, 0xD0, 0x06, 0xD0,
+0x05, 0xD0, 0x04, 0xD0, 0x03, 0xD0, 0x02, 0xD0, 0x01, 0xD0, 0x00, 0xD0, 0xD0, 0xD0, 0x82, 0xD0,
+0x83, 0xD0, 0xF0, 0xD0, 0xE0, 0x32, 0xE4, 0xF5, 0x78, 0x90, 0x85, 0xBB, 0xE0, 0xFF, 0xE5, 0x78,
+0xC3, 0x9F, 0x50, 0x62, 0xAF, 0x78, 0x12, 0x77, 0x39, 0xEF, 0x60, 0x56, 0xE5, 0x78, 0x13, 0x13,
+0x13, 0x54, 0x1F, 0xFF, 0xE5, 0x78, 0x54, 0x07, 0xFE, 0x74, 0x75, 0x2F, 0xF5, 0x82, 0xE4, 0x34,
+0x8F, 0xF5, 0x83, 0xE0, 0xFD, 0xAF, 0x06, 0x12, 0xB1, 0x36, 0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33,
+0xCE, 0xD8, 0xF9, 0xFF, 0xEF, 0x5D, 0x60, 0x2A, 0xE5, 0x78, 0xF1, 0x77, 0x20, 0xE7, 0x02, 0x80,
+0x13, 0xE5, 0x78, 0xC4, 0x54, 0xF0, 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, 0x81, 0xF5, 0x83, 0xE0,
+0xFF, 0x20, 0xE7, 0x09, 0x90, 0x01, 0xC1, 0xE0, 0x44, 0x20, 0xF0, 0x80, 0x05, 0xAD, 0x78, 0x12,
+0xB5, 0x92, 0x05, 0x78, 0x80, 0x93, 0x22, 0x90, 0x86, 0x72, 0xE0, 0x30, 0xE0, 0x04, 0x7F, 0x10,
+0x31, 0xA2, 0x22, 0xE4, 0xFF, 0x12, 0x77, 0x39, 0xBF, 0x01, 0x0F, 0x90, 0x85, 0xC5, 0xE0, 0x60,
+0x09, 0x71, 0x0B, 0x54, 0x07, 0x70, 0x03, 0x12, 0x9F, 0xC6, 0x22, 0x90, 0x85, 0xC9, 0xE0, 0x54,
+0xFE, 0xF0, 0x22, 0xE4, 0xF5, 0x78, 0x90, 0x06, 0xA9, 0xE0, 0xF5, 0x78, 0x54, 0xC0, 0x70, 0x08,
+0x71, 0x0B, 0x54, 0xFD, 0xF0, 0x02, 0x9F, 0xC6, 0xE5, 0x78, 0x30, 0xE6, 0x19, 0x90, 0x85, 0xC5,
+0xE0, 0x64, 0x01, 0x70, 0x13, 0x12, 0x9F, 0xB8, 0x64, 0x02, 0x60, 0x05, 0x12, 0x77, 0x61, 0x80,
+0x07, 0x12, 0x79, 0x41, 0x80, 0x02, 0x71, 0x0B, 0xE5, 0x78, 0x90, 0x85, 0xC9, 0x30, 0xE7, 0x09,
+0x91, 0x21, 0x90, 0x91, 0x6F, 0x71, 0xFE, 0x81, 0x2F, 0xE0, 0x54, 0xFD, 0xF0, 0x22, 0x90, 0x06,
+0xA9, 0xE0, 0x90, 0x93, 0x6D, 0xF0, 0xE0, 0xFD, 0x54, 0xC0, 0x70, 0x04, 0x71, 0x0B, 0x80, 0x5B,
+0xED, 0x30, 0xE6, 0x41, 0x90, 0x85, 0xC5, 0xE0, 0x64, 0x02, 0x70, 0x28, 0x90, 0x85, 0xC1, 0xE0,
+0xFF, 0xC3, 0x13, 0x20, 0xE0, 0x09, 0x90, 0x85, 0xC9, 0xE0, 0x44, 0x01, 0xF0, 0x80, 0x1C, 0x12,
+0x9F, 0xBF, 0x64, 0x01, 0x70, 0x21, 0x90, 0x85, 0xC9, 0xE0, 0x44, 0x04, 0xF0, 0x7F, 0x01, 0x12,
+0x62, 0x8E, 0x80, 0x13, 0x12, 0x9F, 0xB8, 0x64, 0x02, 0x60, 0x05, 0x12, 0x77, 0x61, 0x80, 0x07,
+0x12, 0x79, 0x41, 0x80, 0x02, 0x71, 0x0B, 0x90, 0x93, 0x6D, 0xE0, 0x90, 0x85, 0xC9, 0x30, 0xE7,
+0x09, 0x91, 0x21, 0x90, 0x91, 0x6F, 0x71, 0xFE, 0x80, 0x65, 0xE0, 0x54, 0xFD, 0xF0, 0x22, 0x90,
+0x92, 0x0A, 0xE0, 0xC3, 0x13, 0x54, 0x07, 0xFF, 0x75, 0xF0, 0x0E, 0xA4, 0x24, 0x17, 0xF5, 0x82,
+0xE4, 0x34, 0x92, 0xF5, 0x83, 0xE0, 0xFE, 0xEF, 0x75, 0xF0, 0x0E, 0xA4, 0x24, 0x16, 0xF5, 0x82,
+0xE4, 0x34, 0x92, 0xF5, 0x83, 0xE0, 0x90, 0x91, 0x6F, 0xF0, 0x90, 0x91, 0x6E, 0xEE, 0xF0, 0xE4,
+0xFB, 0xFD, 0x7F, 0x54, 0x7E, 0x01, 0x02, 0x61, 0x41, 0x12, 0x9F, 0xD8, 0x64, 0x01, 0x70, 0x10,
+0x90, 0x85, 0xC5, 0xE0, 0x60, 0x0A, 0x12, 0xA7, 0xD6, 0x91, 0x24, 0x90, 0x91, 0x6F, 0x71, 0xFE,
+0x22, 0xE0, 0x44, 0x02, 0xF0, 0xE4, 0x90, 0x91, 0x6E, 0xF0, 0x90, 0x86, 0x6E, 0xE0, 0x22, 0x90,
+0x85, 0xC1, 0xE0, 0x44, 0x04, 0xF0, 0x22, 0x12, 0x9F, 0xD8, 0x64, 0x01, 0x70, 0x17, 0x90, 0x85,
+0xC5, 0xE0, 0x60, 0x11, 0x12, 0xA7, 0xD6, 0xF0, 0x90, 0x85, 0xC1, 0xE0, 0x91, 0xCA, 0x54, 0x07,
+0x70, 0x03, 0x12, 0x9F, 0xC6, 0x22, 0xE4, 0x90, 0x93, 0x7E, 0xF0, 0x90, 0x85, 0xC5, 0xE0, 0x60,
+0x52, 0x12, 0x9F, 0xD8, 0x64, 0x01, 0x70, 0x4B, 0x12, 0xA7, 0xB4, 0xF0, 0x12, 0xD9, 0x0B, 0x91,
+0xC1, 0xE4, 0x90, 0x85, 0xCC, 0xF0, 0x90, 0x85, 0xBC, 0xE0, 0x30, 0xE0, 0x16, 0x90, 0x85, 0xC0,
+0xE0, 0xB4, 0x02, 0x05, 0xE4, 0x90, 0x93, 0x7E, 0xF0, 0x12, 0x9E, 0x32, 0xEF, 0x70, 0x04, 0x90,
+0x93, 0x7E, 0xF0, 0x90, 0x93, 0x7E, 0xE0, 0x60, 0x1A, 0x90, 0x85, 0xC8, 0xE0, 0x20, 0xE2, 0x03,
+0x12, 0x9A, 0xF8, 0x91, 0xB9, 0xE4, 0x90, 0x91, 0x6E, 0xF0, 0x90, 0x85, 0xCD, 0xE0, 0x90, 0x91,
+0x6F, 0x71, 0xFE, 0x22, 0xE4, 0xFF, 0x02, 0x2D, 0xBD, 0x90, 0x85, 0xC9, 0xE0, 0x44, 0x10, 0xF0,
+0x22, 0xF0, 0x90, 0x93, 0x7E, 0x74, 0x01, 0xF0, 0x22, 0xEF, 0x54, 0xFB, 0xF0, 0x90, 0x85, 0xC9,
+0xE0, 0x54, 0xFD, 0xF0, 0x22, 0x90, 0x01, 0x57, 0xE0, 0x60, 0x19, 0x12, 0xA7, 0xD9, 0xF0, 0xB1,
+0x59, 0x30, 0xE0, 0x02, 0x80, 0xE3, 0xB1, 0x63, 0x40, 0x0A, 0xE4, 0xFF, 0x12, 0x77, 0x39, 0xBF,
+0x01, 0x02, 0x91, 0xF5, 0x22, 0x90, 0x85, 0xC2, 0xE0, 0x54, 0xFB, 0xF0, 0x22, 0x12, 0x9A, 0xF0,
+0x13, 0x54, 0x1F, 0x30, 0xE0, 0x0C, 0xEF, 0xC4, 0x13, 0x13, 0x54, 0x03, 0x30, 0xE0, 0x03, 0x12,
+0xA7, 0x8D, 0xB1, 0x59, 0x30, 0xE0, 0x08, 0x91, 0xC9, 0x54, 0x07, 0x70, 0x3B, 0x80, 0x36, 0xB1,
+0x63, 0x40, 0x32, 0x12, 0x9F, 0xD8, 0x64, 0x01, 0x70, 0x2E, 0x12, 0x9F, 0xBF, 0x70, 0x05, 0x12,
+0x70, 0xDB, 0x80, 0xC1, 0x12, 0x70, 0xDB, 0x90, 0x85, 0xCF, 0xE0, 0x04, 0xF0, 0xE0, 0xD3, 0x94,
+0x02, 0x40, 0x09, 0x91, 0xF5, 0xE4, 0x90, 0x85, 0xCF, 0xF0, 0x80, 0x03, 0x12, 0x79, 0x41, 0xE4,
+0x90, 0x85, 0xCE, 0xF0, 0x22, 0x12, 0x9F, 0xC6, 0x22, 0x90, 0x85, 0xC1, 0xE0, 0xFF, 0x13, 0x13,
+0x54, 0x3F, 0x22, 0x90, 0x85, 0xCE, 0xE0, 0x04, 0xF0, 0x90, 0x85, 0xC9, 0xE0, 0x54, 0xEF, 0xF0,
+0x90, 0x86, 0x6D, 0xE0, 0xFF, 0x90, 0x85, 0xCE, 0xE0, 0xD3, 0x9F, 0x22, 0x90, 0x85, 0xBC, 0xE0,
+0xFF, 0x30, 0xE0, 0x41, 0x90, 0x85, 0xC0, 0xE0, 0x7E, 0x00, 0xB4, 0x02, 0x02, 0x7E, 0x01, 0x90,
+0x85, 0xBF, 0xE0, 0x7D, 0x00, 0xB4, 0x04, 0x02, 0x7D, 0x01, 0xED, 0x4E, 0x70, 0x27, 0xEF, 0xC3,
+0x13, 0x30, 0xE0, 0x05, 0x12, 0xA3, 0x67, 0x80, 0x1C, 0x91, 0xD5, 0x90, 0x85, 0xC0, 0xE0, 0xB4,
+0x0C, 0x06, 0xE4, 0xFD, 0x7F, 0x08, 0x80, 0x0A, 0x90, 0x85, 0xC0, 0xE0, 0xB4, 0x04, 0x06, 0xE4,
+0xFD, 0xFF, 0x12, 0x9A, 0xFC, 0x90, 0x92, 0xA9, 0x12, 0x9F, 0x1F, 0x30, 0xE0, 0x73, 0x90, 0x92,
+0x0A, 0xE0, 0x30, 0xE0, 0x6C, 0x90, 0x92, 0xAD, 0x12, 0xAD, 0x64, 0x90, 0x92, 0xA9, 0xE0, 0x54,
+0xBF, 0xF0, 0xE4, 0x90, 0x91, 0x6E, 0xF0, 0x90, 0x92, 0x4C, 0xE0, 0x24, 0xFB, 0x90, 0x91, 0x6F,
+0xF0, 0xE4, 0xFB, 0xFD, 0x7F, 0x60, 0x7E, 0x01, 0x12, 0x61, 0x41, 0x12, 0x92, 0x32, 0xF1, 0x85,
+0x54, 0x07, 0x90, 0x93, 0x7E, 0xF0, 0x90, 0x92, 0x72, 0xE0, 0xFF, 0xC4, 0x54, 0x0F, 0x30, 0xE0,
+0x1D, 0xEF, 0x54, 0xEF, 0xF0, 0xE0, 0xC4, 0x13, 0x54, 0x07, 0x20, 0xE0, 0x24, 0x12, 0x92, 0x32,
+0xD1, 0x42, 0xEF, 0xF0, 0xE4, 0xFB, 0xFD, 0x7F, 0x54, 0x7E, 0x01, 0x02, 0x61, 0x41, 0x90, 0x93,
+0x7E, 0xE0, 0xFF, 0x64, 0x03, 0x60, 0x04, 0xEF, 0xB4, 0x01, 0x06, 0x12, 0x97, 0xF6, 0x12, 0x90,
+0xE9, 0x22, 0x75, 0xF0, 0x13, 0xA4, 0x24, 0x39, 0xF5, 0x82, 0xE4, 0x34, 0x92, 0xF5, 0x83, 0xE0,
+0x24, 0xFC, 0xFF, 0xE4, 0x90, 0x91, 0x6E, 0xF0, 0xA3, 0x22, 0xC0, 0xE0, 0xC0, 0xF0, 0xC0, 0x83,
+0xC0, 0x82, 0xC0, 0xD0, 0x75, 0xD0, 0x00, 0xC0, 0x00, 0xC0, 0x01, 0xC0, 0x02, 0xC0, 0x03, 0xC0,
+0x04, 0xC0, 0x05, 0xC0, 0x06, 0xC0, 0x07, 0x90, 0x01, 0xC4, 0x74, 0x5A, 0xF0, 0x74, 0xC6, 0xA3,
+0xF0, 0x12, 0x75, 0x28, 0xE5, 0x56, 0x30, 0xE1, 0x02, 0xF1, 0x21, 0xE5, 0x56, 0x30, 0xE2, 0x02,
+0xF1, 0x2F, 0xE5, 0x56, 0x30, 0xE4, 0x02, 0xF1, 0x17, 0xE5, 0x56, 0x30, 0xE5, 0x02, 0xF1, 0x05,
+0xE5, 0x57, 0x30, 0xE0, 0x03, 0x12, 0xC9, 0xEA, 0xE5, 0x58, 0x30, 0xE1, 0x02, 0xB1, 0x7C, 0xE5,
+0x58, 0x30, 0xE0, 0x03, 0x12, 0xCC, 0x5F, 0xE5, 0x58, 0x30, 0xE4, 0x02, 0xF1, 0x94, 0xE5, 0x59,
+0x30, 0xE1, 0x04, 0x7F, 0x04, 0x31, 0xA2, 0xE5, 0x59, 0x30, 0xE4, 0x03, 0x12, 0xA2, 0xCD, 0xE5,
+0x59, 0x30, 0xE5, 0x03, 0x12, 0xCC, 0xE6, 0xE5, 0x59, 0x30, 0xE6, 0x03, 0x12, 0xCD, 0x1E, 0x74,
+0x5A, 0x04, 0x90, 0x01, 0xC4, 0xF0, 0x74, 0xC6, 0xA3, 0xF0, 0xD0, 0x07, 0xD0, 0x06, 0xD0, 0x05,
+0xD0, 0x04, 0xD0, 0x03, 0xD0, 0x02, 0xD0, 0x01, 0xD0, 0x00, 0xD0, 0xD0, 0xD0, 0x82, 0xD0, 0x83,
+0xD0, 0xF0, 0xD0, 0xE0, 0x32, 0x90, 0x92, 0x09, 0xE0, 0x30, 0xE0, 0x0A, 0x12, 0x8F, 0xFB, 0xE4,
+0x90, 0x92, 0x0C, 0xF0, 0x71, 0xCF, 0x22, 0x90, 0x92, 0x0A, 0xE0, 0x30, 0xE0, 0x02, 0xF1, 0x5A,
+0x22, 0x90, 0x85, 0xC5, 0xE0, 0x60, 0x02, 0x91, 0xFD, 0x12, 0x93, 0x65, 0x02, 0x90, 0xE9, 0x90,
+0x85, 0xC5, 0xE0, 0x60, 0x11, 0x90, 0x06, 0x92, 0xE0, 0x30, 0xE1, 0x05, 0x12, 0x6B, 0x98, 0x80,
+0x05, 0xF1, 0x62, 0x12, 0x9F, 0xC6, 0x90, 0x92, 0x0C, 0xE0, 0xB4, 0x01, 0x03, 0x12, 0x90, 0xE9,
+0x90, 0x92, 0x0A, 0xE0, 0x30, 0xE0, 0x02, 0xF1, 0x5A, 0x22, 0x90, 0x92, 0xA9, 0xE0, 0x44, 0x40,
+0xF0, 0x22, 0x90, 0x85, 0xC1, 0xE0, 0x54, 0xF7, 0xF0, 0x22, 0x90, 0x85, 0xBC, 0xE0, 0x30, 0xE0,
+0x05, 0xE4, 0xA3, 0xF0, 0xA3, 0xF0, 0x22, 0xC4, 0x54, 0xF0, 0x24, 0x01, 0xF5, 0x82, 0xE4, 0x34,
+0x81, 0xF5, 0x83, 0xE0, 0x22, 0x75, 0xF0, 0x13, 0xA4, 0x24, 0x3A, 0xF5, 0x82, 0xE4, 0x34, 0x92,
+0xF5, 0x83, 0xE0, 0x22, 0x90, 0x92, 0x0A, 0xE0, 0x30, 0xE0, 0x12, 0x90, 0x92, 0xA8, 0xE0, 0x12,
+0x8F, 0x66, 0x30, 0xE0, 0x08, 0xA3, 0xE0, 0x44, 0x20, 0xF0, 0x44, 0x40, 0xF0, 0x22, 0xE4, 0xFF,
+0x12, 0x77, 0x39, 0xBF, 0x01, 0x13, 0x90, 0x85, 0xC5, 0xE0, 0x60, 0x0D, 0x12, 0x9F, 0xBF, 0x64,
+0x02, 0x60, 0x03, 0x02, 0x77, 0x61, 0x12, 0x79, 0x41, 0x22, 0xE4, 0x90, 0x84, 0xC1, 0x12, 0xA6,
+0x95, 0x90, 0x92, 0x01, 0xF0, 0x22, 0x75, 0x48, 0x12, 0xE4, 0xF5, 0x49, 0x75, 0x4A, 0x07, 0x75,
+0x4B, 0x32, 0xF5, 0x50, 0x90, 0x01, 0x30, 0xE5, 0x48, 0xF0, 0xA3, 0xE5, 0x49, 0xF0, 0xA3, 0xE5,
+0x4A, 0xF0, 0xA3, 0xE5, 0x4B, 0xF0, 0x90, 0x01, 0x20, 0xE5, 0x50, 0xF0, 0x22, 0x75, 0x52, 0x06,
+0x75, 0x53, 0x01, 0x75, 0x54, 0x03, 0x75, 0x55, 0x62, 0x90, 0x01, 0x38, 0xE5, 0x52, 0xF0, 0xA3,
+0xE5, 0x53, 0xF0, 0xA3, 0xE5, 0x54, 0xF0, 0xA3, 0xE5, 0x55, 0xF0, 0x22, 0x90, 0x01, 0xE4, 0x74,
+0x01, 0xF0, 0xA3, 0x74, 0x0D, 0xF0, 0x22, 0x7D, 0x02, 0x90, 0x01, 0xC4, 0x74, 0x27, 0xF0, 0x74,
+0xC8, 0xA3, 0xF0, 0x90, 0x92, 0x08, 0xE0, 0xFF, 0xED, 0xC3, 0x9F, 0x50, 0x18, 0xED, 0x25, 0xE0,
+0x24, 0x81, 0xF8, 0xE6, 0x30, 0xE4, 0x0B, 0x90, 0x01, 0xB8, 0x74, 0x08, 0xF0, 0xA3, 0xF0, 0x7F,
+0x00, 0x22, 0x0D, 0x80, 0xDE, 0x7F, 0x01, 0x22, 0xE4, 0x90, 0x93, 0x42, 0xF0, 0xA3, 0xF0, 0xA3,
+0xF0, 0x90, 0x93, 0x42, 0xE0, 0x64, 0x01, 0xF0, 0x24, 0x58, 0x90, 0x01, 0xC4, 0xF0, 0x74, 0xC8,
+0xA3, 0xF0, 0x12, 0x7C, 0x66, 0xBF, 0x01, 0x03, 0x12, 0x5B, 0x25, 0x90, 0x85, 0xC5, 0xE0, 0x60,
+0x0F, 0x90, 0x85, 0xC8, 0xE0, 0xFF, 0x90, 0x85, 0xC7, 0xE0, 0x6F, 0x60, 0x03, 0x12, 0x9F, 0xC6,
+0xC2, 0xAF, 0x11, 0x27, 0xBF, 0x01, 0x03, 0x12, 0xBE, 0x80, 0xD2, 0xAF, 0x11, 0xBF, 0x90, 0x93,
+0x43, 0x12, 0xAD, 0x64, 0x54, 0x7F, 0x45, 0xF0, 0x70, 0x0D, 0x7F, 0xFF, 0x12, 0x7B, 0x51, 0xEF,
+0x04, 0xFD, 0x7F, 0xFF, 0x12, 0x7B, 0x3E, 0x12, 0x8F, 0xF9, 0x12, 0x84, 0x4D, 0x80, 0xA2, 0xD3,
+0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x92, 0xBA, 0xE0, 0x60, 0x25, 0x7F, 0x54, 0x7E, 0x09,
+0x12, 0x70, 0x61, 0x31, 0x17, 0xEF, 0x44, 0xFE, 0xFF, 0xEE, 0x44, 0x03, 0xFE, 0xED, 0x44, 0x04,
+0xFD, 0xEC, 0x31, 0x17, 0x90, 0x91, 0x66, 0x12, 0x04, 0xEB, 0x7F, 0x54, 0x7E, 0x09, 0x12, 0x71,
+0x18, 0x90, 0x92, 0xB5, 0xE0, 0x70, 0x04, 0x90, 0x07, 0xCC, 0xF0, 0x90, 0x92, 0xBD, 0xE0, 0x70,
+0x0A, 0x90, 0x92, 0xBA, 0xE0, 0x70, 0x04, 0xA3, 0xE0, 0x60, 0x07, 0x90, 0x00, 0x1F, 0xE0, 0x54,
+0xF0, 0xF0, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90, 0x93, 0x45, 0x12, 0x04, 0xEB, 0x90, 0x93, 0x45,
+0x02, 0x87, 0x58, 0x90, 0x84, 0xA1, 0x74, 0x02, 0xF0, 0xA3, 0x74, 0x10, 0xF0, 0x90, 0x84, 0xA7,
+0x74, 0x80, 0xF0, 0xA3, 0x74, 0x03, 0xF0, 0x22, 0x32, 0xC0, 0xE0, 0xC0, 0xF0, 0xC0, 0x83, 0xC0,
+0x82, 0xC0, 0xD0, 0x75, 0xD0, 0x00, 0xC0, 0x00, 0xC0, 0x01, 0xC0, 0x02, 0xC0, 0x03, 0xC0, 0x04,
+0xC0, 0x05, 0xC0, 0x06, 0xC0, 0x07, 0x90, 0x01, 0xC4, 0x74, 0x39, 0xF0, 0x74, 0xC9, 0xA3, 0xF0,
+0x12, 0x6C, 0xBC, 0x74, 0x39, 0x04, 0x90, 0x01, 0xC4, 0xF0, 0x74, 0xC9, 0xA3, 0xF0, 0xD0, 0x07,
+0xD0, 0x06, 0xD0, 0x05, 0xD0, 0x04, 0xD0, 0x03, 0xD0, 0x02, 0xD0, 0x01, 0xD0, 0x00, 0xD0, 0xD0,
+0xD0, 0x82, 0xD0, 0x83, 0xD0, 0xF0, 0xD0, 0xE0, 0x32, 0x32, 0xC0, 0xE0, 0xC0, 0x83, 0xC0, 0x82,
+0xC0, 0xD0, 0x75, 0xD0, 0x00, 0xC0, 0x05, 0xC0, 0x07, 0x7D, 0x8A, 0x90, 0x01, 0xC4, 0xED, 0xF0,
+0x74, 0xC9, 0xFF, 0xA3, 0xF0, 0xED, 0x04, 0x90, 0x01, 0xC4, 0xF0, 0xA3, 0xEF, 0xF0, 0xD0, 0x07,
+0xD0, 0x05, 0xD0, 0xD0, 0xD0, 0x82, 0xD0, 0x83, 0xD0, 0xE0, 0x32, 0x90, 0x88, 0xE7, 0xE0, 0x04,
+0xF0, 0x90, 0x85, 0xBC, 0xE0, 0xFF, 0x30, 0xE0, 0x05, 0x12, 0x9F, 0x3F, 0x60, 0x1B, 0x90, 0x85,
+0xC5, 0xE0, 0x70, 0x04, 0xEF, 0x30, 0xE0, 0x0B, 0x90, 0x85, 0xC8, 0xE0, 0x64, 0x02, 0x60, 0x09,
+0x12, 0xA1, 0xAD, 0x90, 0x01, 0xE6, 0xE0, 0x04, 0xF0, 0x22, 0x91, 0x1A, 0x90, 0x93, 0x7E, 0xEF,
+0xF0, 0x30, 0xE0, 0x05, 0x7D, 0x01, 0xE4, 0x80, 0x02, 0xE4, 0xFD, 0xFF, 0x12, 0x57, 0x82, 0x90,
+0x93, 0x7E, 0xE0, 0x30, 0xE6, 0x11, 0x90, 0x01, 0x2F, 0xE0, 0x30, 0xE7, 0x04, 0xE4, 0xF0, 0x80,
+0x06, 0x90, 0x01, 0x2F, 0x74, 0x80, 0xF0, 0x51, 0x1D, 0xFB, 0x02, 0x51, 0x7D, 0x90, 0x85, 0xD7,
+0xE0, 0xFF, 0xA3, 0xE0, 0xFD, 0x90, 0x85, 0xDE, 0xE0, 0x22, 0xE4, 0x90, 0x93, 0x6D, 0xF0, 0xA3,
+0xF0, 0xA3, 0xF0, 0x90, 0x92, 0xC9, 0x12, 0x87, 0x58, 0x90, 0x92, 0xC5, 0x12, 0x87, 0x64, 0xC3,
+0x12, 0x04, 0xB4, 0x40, 0x48, 0x90, 0x85, 0xC1, 0xE0, 0x90, 0x92, 0xC9, 0x30, 0xE0, 0x10, 0x71,
+0x9E, 0xFF, 0x90, 0x85, 0xFB, 0xE0, 0x24, 0x04, 0x2F, 0xFF, 0x90, 0x92, 0xFA, 0x80, 0x06, 0x71,
+0x9E, 0xFF, 0x90, 0x92, 0xFB, 0xE0, 0xFE, 0xC3, 0xEF, 0x9E, 0x90, 0x93, 0x6E, 0xF0, 0x90, 0x93,
+0x6E, 0xE0, 0xFF, 0xC3, 0x94, 0x2D, 0x50, 0x15, 0x74, 0xCD, 0x2F, 0x71, 0xBA, 0xE0, 0x04, 0xF0,
+0x90, 0x85, 0xDB, 0xE0, 0x04, 0xF0, 0xE0, 0xFD, 0x7F, 0xFE, 0x12, 0x7B, 0x3E, 0x90, 0x85, 0xDB,
+0xE0, 0xFF, 0xD3, 0x90, 0x92, 0xFD, 0xE0, 0x9F, 0x90, 0x92, 0xFC, 0xE0, 0x94, 0x00, 0x40, 0x02,
+0x61, 0x75, 0x71, 0x7E, 0x90, 0x93, 0x6D, 0xE0, 0xFF, 0xC3, 0x94, 0x2D, 0x50, 0x1E, 0x71, 0x88,
+0xE0, 0xFF, 0x90, 0x93, 0x6F, 0xE0, 0xD3, 0x9F, 0x40, 0x0A, 0x90, 0x93, 0x6D, 0xE0, 0x90, 0x93,
+0x70, 0xF0, 0x80, 0x08, 0x90, 0x93, 0x6D, 0xE0, 0x04, 0xF0, 0x80, 0xD8, 0x71, 0x7E, 0x90, 0x93,
+0x6D, 0xE0, 0xFF, 0xC3, 0x94, 0x2D, 0x50, 0x2E, 0x71, 0x88, 0xE0, 0xFF, 0xC3, 0x90, 0x92, 0xFD,
+0xE0, 0x9F, 0xFF, 0x90, 0x92, 0xFC, 0xE0, 0x94, 0x00, 0xFE, 0x90, 0x93, 0x6F, 0xE0, 0xD3, 0x9F,
+0xE4, 0x9E, 0x40, 0x0A, 0x90, 0x93, 0x6D, 0xE0, 0x90, 0x93, 0x71, 0xF0, 0x80, 0x08, 0x90, 0x93,
+0x6D, 0xE0, 0x04, 0xF0, 0x80, 0xC8, 0x90, 0x93, 0x70, 0xE0, 0x90, 0x85, 0xE0, 0xF0, 0x90, 0x93,
+0x71, 0xE0, 0x90, 0x85, 0xE1, 0x71, 0x76, 0x94, 0x0A, 0x40, 0x0A, 0xEF, 0x24, 0xF6, 0x90, 0x85,
+0xD8, 0xF0, 0xE4, 0x80, 0x09, 0xE4, 0x90, 0x85, 0xD8, 0x71, 0x76, 0x74, 0x0A, 0x9F, 0x90, 0x85,
+0xD7, 0xF0, 0x90, 0x85, 0xE0, 0xE0, 0xFF, 0xA3, 0xE0, 0xC3, 0x9F, 0x90, 0x85, 0xDE, 0xF0, 0x90,
+0x85, 0xC1, 0xE0, 0x30, 0xE0, 0x05, 0x90, 0x92, 0xFA, 0x80, 0x03, 0x90, 0x92, 0xFB, 0xE0, 0xFF,
+0x90, 0x85, 0xDE, 0xE0, 0x2F, 0x04, 0xF0, 0x90, 0x85, 0xDE, 0xE0, 0xC3, 0x94, 0x0A, 0x50, 0x03,
+0x74, 0x0A, 0xF0, 0x90, 0x85, 0xDE, 0xE0, 0x24, 0x02, 0xF0, 0x51, 0x1D, 0xFB, 0x12, 0x51, 0x7D,
+0xE4, 0xFF, 0x12, 0x69, 0x33, 0x22, 0xF0, 0x90, 0x85, 0xE0, 0xE0, 0xFF, 0xC3, 0x22, 0xE4, 0x90,
+0x93, 0x6F, 0xF0, 0x90, 0x93, 0x6D, 0xF0, 0x22, 0x74, 0xCD, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x92,
+0xF5, 0x83, 0xE0, 0xFF, 0x90, 0x93, 0x6F, 0xE0, 0x2F, 0xF0, 0x90, 0x92, 0xFE, 0x22, 0x12, 0x87,
+0x64, 0x90, 0x92, 0xC5, 0x12, 0x87, 0x58, 0x12, 0x87, 0x30, 0x78, 0x0A, 0x12, 0x04, 0xC5, 0x90,
+0x85, 0xDD, 0xE0, 0xFE, 0xC3, 0x74, 0x0A, 0x9E, 0x2F, 0x22, 0xF5, 0x82, 0xE4, 0x34, 0x92, 0xF5,
+0x83, 0x22, 0xE4, 0xFE, 0x74, 0xCD, 0x2E, 0x71, 0xBA, 0xE4, 0xF0, 0x0E, 0xEE, 0xB4, 0x2D, 0xF4,
+0xE4, 0x90, 0x85, 0xDC, 0xF0, 0x90, 0x85, 0xDB, 0xF0, 0x90, 0x85, 0xDF, 0xF0, 0xEF, 0xB4, 0x01,
+0x07, 0xA3, 0x74, 0x2D, 0xF0, 0xE4, 0xA3, 0xF0, 0x22, 0x90, 0x94, 0x09, 0x12, 0x87, 0x79, 0x12,
+0x71, 0x54, 0x90, 0x85, 0xC5, 0xE0, 0xFF, 0x12, 0x60, 0xD0, 0x90, 0x85, 0xC5, 0xE0, 0x60, 0x19,
+0x90, 0x94, 0x09, 0x12, 0x87, 0x70, 0x12, 0x8F, 0xBA, 0x54, 0x0F, 0xFF, 0x12, 0x8E, 0x90, 0xFD,
+0x12, 0x6A, 0xB8, 0x51, 0x1D, 0xFB, 0x12, 0x51, 0x7D, 0x22, 0xE4, 0x90, 0x93, 0x80, 0xF0, 0xA3,
+0xF0, 0x7F, 0x83, 0x12, 0x7B, 0x51, 0x90, 0x93, 0x7F, 0xEF, 0xF0, 0x7F, 0x83, 0x12, 0x7B, 0x51,
+0xAE, 0x07, 0x90, 0x93, 0x7F, 0xE0, 0xFF, 0xB5, 0x06, 0x01, 0x22, 0xC3, 0x90, 0x93, 0x81, 0xE0,
+0x94, 0x64, 0x90, 0x93, 0x80, 0xE0, 0x94, 0x00, 0x40, 0x0D, 0x90, 0x01, 0xC0, 0xE0, 0x44, 0x40,
+0xF0, 0x90, 0x93, 0x7F, 0xE0, 0xFF, 0x22, 0x90, 0x93, 0x80, 0x12, 0xAD, 0x64, 0x80, 0xC2, 0x90,
+0x85, 0xBC, 0xE0, 0xFF, 0x30, 0xE0, 0x41, 0x90, 0x85, 0xC0, 0xE0, 0x7E, 0x00, 0xB4, 0x02, 0x02,
+0x7E, 0x01, 0x90, 0x85, 0xBF, 0xE0, 0x7D, 0x00, 0xB4, 0x04, 0x02, 0x7D, 0x01, 0xED, 0x4E, 0x70,
+0x27, 0xEF, 0xC3, 0x13, 0x30, 0xE0, 0x05, 0x12, 0xA3, 0x67, 0x80, 0x1C, 0x12, 0x9F, 0x26, 0x90,
+0x85, 0xC0, 0xE0, 0xB4, 0x08, 0x06, 0xE4, 0xFD, 0x7F, 0x0C, 0x80, 0x09, 0x90, 0x85, 0xC0, 0xE0,
+0x70, 0x06, 0xFD, 0x7F, 0x04, 0x12, 0x9A, 0xFC, 0x90, 0x92, 0xA9, 0x12, 0x9F, 0x1F, 0x30, 0xE0,
+0x1D, 0x90, 0x92, 0x0A, 0xE0, 0xFF, 0x30, 0xE0, 0x15, 0xC3, 0x13, 0x54, 0x07, 0x12, 0xC7, 0x85,
+0x54, 0x07, 0xFE, 0x91, 0xCF, 0xEE, 0x60, 0x03, 0xB4, 0x02, 0x03, 0x12, 0x90, 0xE9, 0x22, 0x12,
+0x97, 0x26, 0xE0, 0x20, 0xE0, 0x08, 0xC3, 0x13, 0x30, 0xE0, 0x0A, 0x02, 0x97, 0xF6, 0x12, 0x97,
+0x26, 0xE0, 0x44, 0x04, 0xF0, 0x22, 0x90, 0x85, 0xC1, 0x12, 0x9E, 0x22, 0x30, 0xE0, 0x1F, 0xEF,
+0x54, 0xBF, 0xF0, 0x90, 0x04, 0xE0, 0xE0, 0x90, 0x85, 0xC2, 0x30, 0xE0, 0x06, 0xE0, 0x44, 0x01,
+0xF0, 0x80, 0x08, 0xE0, 0x54, 0xFE, 0xB1, 0x13, 0x74, 0x04, 0xF0, 0x12, 0x9F, 0xC6, 0xE4, 0xFF,
+0x02, 0x68, 0x8F, 0xF0, 0x90, 0x01, 0xB9, 0x74, 0x01, 0xF0, 0x90, 0x01, 0xB8, 0x22, 0x90, 0x85,
+0xC1, 0xE0, 0xFF, 0x12, 0x8F, 0x66, 0x30, 0xE0, 0x24, 0xEF, 0x54, 0x7F, 0xF0, 0x90, 0x04, 0xE0,
+0xE0, 0x90, 0x85, 0xC2, 0x30, 0xE1, 0x06, 0xE0, 0x44, 0x02, 0xF0, 0x80, 0x07, 0xE0, 0x54, 0xFD,
+0xB1, 0x13, 0x04, 0xF0, 0x90, 0x85, 0xC5, 0xE0, 0x60, 0x03, 0x12, 0x9F, 0xC6, 0x7F, 0x01, 0x12,
+0x68, 0x8F, 0x90, 0x04, 0xE0, 0xE0, 0x30, 0xE1, 0x05, 0xB1, 0x5F, 0x12, 0x97, 0x3C, 0x22, 0x90,
+0x92, 0x09, 0xE0, 0x30, 0xE0, 0x24, 0xA3, 0xE0, 0xC3, 0x13, 0x54, 0x07, 0xFF, 0xB1, 0x8B, 0xF5,
+0x83, 0xE0, 0xFE, 0x30, 0xE0, 0x14, 0xEF, 0xB1, 0x8B, 0xF5, 0x83, 0xEE, 0x54, 0xFE, 0x12, 0x97,
+0xF5, 0x12, 0x92, 0x32, 0xFD, 0x7F, 0x02, 0x12, 0x94, 0x82, 0x22, 0x75, 0xF0, 0x0E, 0xA4, 0x24,
+0x15, 0xF5, 0x82, 0xE4, 0x34, 0x92, 0x22, 0x90, 0x93, 0x50, 0x12, 0xBD, 0x5D, 0xEB, 0x75, 0xF0,
+0x06, 0xA4, 0xFF, 0x90, 0x89, 0x21, 0x12, 0x87, 0x70, 0xE9, 0x2F, 0xF9, 0xEA, 0x35, 0xF0, 0xFA,
+0x90, 0x93, 0x58, 0x12, 0x87, 0x79, 0x90, 0x93, 0x52, 0xE0, 0xD1, 0x95, 0xE0, 0xFF, 0xA3, 0xE0,
+0x90, 0x93, 0x55, 0xCF, 0xF0, 0xA3, 0xEF, 0xF0, 0xE4, 0xA3, 0xF0, 0x90, 0x93, 0x58, 0x12, 0x87,
+0x70, 0x90, 0x93, 0x57, 0xE0, 0xFF, 0xF5, 0x82, 0x75, 0x83, 0x00, 0x12, 0x03, 0x0F, 0xFD, 0x7C,
+0x00, 0x90, 0x93, 0x52, 0xE0, 0x75, 0xF0, 0x12, 0x90, 0x89, 0x44, 0x12, 0x05, 0x28, 0x75, 0xF0,
+0x02, 0xEF, 0x12, 0x05, 0x28, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x90, 0x93, 0x54, 0xE0, 0xFB, 0xEF,
+0xA8, 0x03, 0x08, 0x80, 0x05, 0xCE, 0xC3, 0x13, 0xCE, 0x13, 0xD8, 0xF9, 0xD1, 0x77, 0xEE, 0x8F,
+0xF0, 0x12, 0x07, 0x0A, 0x90, 0x93, 0x57, 0xE0, 0x04, 0xF0, 0xE0, 0xB4, 0x05, 0xAD, 0x90, 0x93,
+0x58, 0x12, 0x87, 0x70, 0x12, 0x8F, 0xF3, 0xFD, 0x7C, 0x00, 0x90, 0x93, 0x54, 0xE0, 0xFF, 0x90,
+0x93, 0x50, 0xE0, 0xFE, 0xA3, 0xE0, 0xA8, 0x07, 0x08, 0x80, 0x05, 0xCE, 0xC3, 0x13, 0xCE, 0x13,
+0xD8, 0xF9, 0xD1, 0x77, 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0xD3, 0x9F, 0xEC, 0x9E, 0x40, 0x08, 0xED,
+0x9F, 0xFF, 0xEC, 0x9E, 0xFE, 0x80, 0x04, 0x7E, 0x00, 0x7F, 0x00, 0x90, 0x93, 0x55, 0xEE, 0xF0,
+0xA3, 0xEF, 0xF0, 0x90, 0x93, 0x55, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x90, 0x93, 0x52, 0xE0, 0xD1,
+0x95, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0x22, 0xFF, 0x12, 0x03, 0x70, 0x90, 0x93, 0x55, 0x22, 0xE5,
+0x72, 0x25, 0xE0, 0x24, 0xF5, 0xF5, 0x82, 0xE4, 0x34, 0x82, 0xF5, 0x83, 0xE4, 0x93, 0xFE, 0x74,
+0x01, 0x93, 0xFF, 0xE5, 0x6F, 0x25, 0xE0, 0x24, 0x7B, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83,
+0x22, 0x7D, 0x01, 0xAF, 0x63, 0xAC, 0x05, 0x90, 0x93, 0x50, 0xEF, 0xF0, 0xFD, 0xE0, 0xFF, 0x12,
+0xB5, 0x85, 0xE0, 0xF5, 0x6F, 0x54, 0x7F, 0xF5, 0x71, 0x75, 0xF0, 0x12, 0xEF, 0x90, 0x89, 0x3D,
+0x12, 0x05, 0x28, 0xE0, 0xF9, 0x90, 0x93, 0x50, 0xE0, 0xF1, 0x87, 0xFE, 0xEF, 0x12, 0xB6, 0x9A,
+0xE0, 0x54, 0x03, 0xF5, 0x70, 0xE5, 0x71, 0x90, 0x83, 0x1D, 0x93, 0xFB, 0xED, 0xD1, 0x95, 0xE4,
+0xF0, 0xA3, 0xEB, 0xF0, 0x12, 0x8D, 0x2E, 0xC4, 0x54, 0x03, 0x90, 0x93, 0x51, 0xF0, 0x74, 0xCC,
+0x2D, 0xF1, 0x96, 0xE5, 0x71, 0xF0, 0x74, 0x4C, 0x2D, 0xF1, 0x7F, 0xE5, 0x70, 0xF0, 0xE5, 0x71,
+0xD3, 0x9E, 0x40, 0x06, 0x8E, 0x71, 0xAF, 0x06, 0x8F, 0x6F, 0x8C, 0x72, 0xE4, 0xFF, 0xEF, 0xC3,
+0x95, 0x72, 0x50, 0x2F, 0xE5, 0x6F, 0x30, 0xE7, 0x09, 0x85, 0x71, 0x6F, 0x1C, 0xEC, 0x70, 0x20,
+0x80, 0x21, 0xE5, 0x71, 0xD3, 0x99, 0x40, 0x14, 0xAD, 0x01, 0x90, 0x93, 0x50, 0xE0, 0xFB, 0x90,
+0x93, 0x55, 0xEC, 0xF0, 0xAF, 0x71, 0xF1, 0x9E, 0x8F, 0x6F, 0x80, 0x07, 0x89, 0x6F, 0x80, 0x03,
+0x0F, 0x80, 0xCB, 0x90, 0x93, 0x50, 0xE0, 0xFF, 0x90, 0x93, 0x56, 0xE4, 0xF0, 0xA3, 0xEF, 0xF0,
+0xA3, 0xE4, 0xF0, 0xA3, 0xE5, 0x6F, 0xF1, 0x77, 0x12, 0xBD, 0xDE, 0x7B, 0x01, 0xFA, 0x7D, 0x05,
+0x7F, 0x08, 0x12, 0xB6, 0x19, 0x90, 0x93, 0x50, 0xE0, 0xFF, 0x90, 0x91, 0x0B, 0xE5, 0x70, 0xF0,
+0xE4, 0xFB, 0xAD, 0x6F, 0x02, 0x27, 0x3D, 0xF0, 0xA3, 0xE4, 0xF0, 0xA3, 0xE5, 0x70, 0x22, 0xF5,
+0x82, 0xE4, 0x34, 0x90, 0xF5, 0x83, 0x22, 0x75, 0xF0, 0x12, 0x90, 0x89, 0x3C, 0x12, 0x05, 0x28,
+0xE0, 0x22, 0x74, 0xCC, 0x25, 0x6F, 0xF5, 0x82, 0xE4, 0x34, 0x90, 0xF5, 0x83, 0x22, 0xE4, 0xF5,
+0x74, 0xEF, 0x14, 0xF5, 0x73, 0xED, 0xFF, 0xE5, 0x73, 0xF5, 0x82, 0x33, 0x95, 0xE0, 0xF5, 0x83,
+0xC3, 0xE5, 0x82, 0x9F, 0x74, 0x80, 0xF8, 0x65, 0x83, 0x98, 0x40, 0x54, 0xE5, 0x73, 0x78, 0x03,
+0xA2, 0xE7, 0x13, 0xD8, 0xFB, 0xFF, 0x33, 0x95, 0xE0, 0xFE, 0xEB, 0x12, 0xD9, 0x6C, 0xF5, 0x83,
+0xE5, 0x82, 0x2F, 0xF5, 0x82, 0xE5, 0x83, 0x3E, 0xF5, 0x83, 0xE0, 0xF5, 0x82, 0x75, 0x83, 0x00,
+0xE5, 0x73, 0x12, 0xB1, 0x33, 0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0xFF, 0xEE,
+0x55, 0x83, 0xFE, 0xEF, 0x55, 0x82, 0x4E, 0x60, 0x13, 0x85, 0x73, 0x75, 0x05, 0x74, 0x90, 0x93,
+0x55, 0xE0, 0x65, 0x74, 0x60, 0x0A, 0xE5, 0x75, 0xD3, 0x9D, 0x40, 0x04, 0x15, 0x73, 0x80, 0x95,
+0xAF, 0x75, 0x22, 0x8F, 0x6F, 0x8D, 0x70, 0xEF, 0x12, 0xB5, 0x85, 0xE0, 0xF5, 0x71, 0x54, 0x7F,
+0xF5, 0x72, 0xE5, 0x71, 0x54, 0x80, 0xF5, 0x74, 0x75, 0xF0, 0x12, 0xEF, 0x12, 0xCF, 0x8A, 0xF5,
+0x76, 0x75, 0xF0, 0x12, 0xEF, 0x12, 0x8D, 0x32, 0xC4, 0x54, 0x03, 0xF5, 0x77, 0x31, 0x56, 0xF5,
+0x83, 0x74, 0xFF, 0xF0, 0x12, 0xCE, 0x7F, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0xE5, 0x71, 0x45, 0x74,
+0xFF, 0x12, 0xCF, 0x92, 0xEF, 0xF0, 0xE5, 0x6F, 0x12, 0xB6, 0x9A, 0xE0, 0x54, 0x03, 0xF5, 0x75,
+0x74, 0x4C, 0x25, 0x6F, 0x12, 0xCF, 0x7F, 0xE5, 0x75, 0xF0, 0xE5, 0x72, 0x65, 0x76, 0x70, 0x46,
+0x12, 0x8F, 0xC0, 0xC4, 0x13, 0x54, 0x07, 0x30, 0xE0, 0x0C, 0xE5, 0x74, 0x70, 0x08, 0xE5, 0x72,
+0x44, 0x80, 0xF5, 0x71, 0x21, 0x24, 0x12, 0xCE, 0x7F, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0x12, 0xCE,
+0x93, 0xE0, 0xFF, 0xA3, 0xE0, 0x12, 0xB7, 0x75, 0xE4, 0xF0, 0xA3, 0xE5, 0x6F, 0xF0, 0xE4, 0x90,
+0x93, 0x5A, 0x12, 0xA6, 0x95, 0x7B, 0x01, 0xFA, 0x7D, 0x02, 0x7F, 0x04, 0x12, 0xB6, 0x19, 0x7D,
+0x07, 0xAF, 0x6F, 0x02, 0xB7, 0x85, 0xE5, 0x72, 0xC3, 0x95, 0x76, 0x50, 0x5F, 0xAB, 0x6F, 0xAD,
+0x76, 0xAF, 0x72, 0x12, 0x72, 0xEA, 0x8F, 0x73, 0x85, 0x73, 0x71, 0x12, 0x8F, 0xC0, 0xC4, 0x13,
+0x54, 0x01, 0xFF, 0x90, 0x93, 0x5A, 0xE4, 0x12, 0xB7, 0x79, 0xE4, 0xF0, 0xA3, 0xE5, 0x73, 0xF0,
+0xA3, 0xE4, 0xF0, 0xA3, 0xE5, 0x72, 0xF0, 0xE5, 0x74, 0x12, 0x8F, 0x66, 0x12, 0xB7, 0x3E, 0xE4,
+0xFB, 0xFA, 0x31, 0x60, 0xE5, 0x72, 0xC3, 0x94, 0x0C, 0x40, 0x29, 0x12, 0x8F, 0xC0, 0xC4, 0x13,
+0x54, 0x07, 0x30, 0xE0, 0x1F, 0xE5, 0x70, 0x60, 0x1B, 0xE5, 0x74, 0x70, 0x17, 0xE5, 0x72, 0x44,
+0x80, 0xF5, 0x71, 0x31, 0x56, 0xF5, 0x83, 0xE5, 0x73, 0xF0, 0x80, 0x08, 0x12, 0xCF, 0x92, 0xE5,
+0x76, 0xF0, 0xF5, 0x71, 0x90, 0x93, 0x56, 0xE4, 0xF0, 0xA3, 0xE5, 0x71, 0xF0, 0x31, 0x56, 0xF5,
+0x83, 0xE0, 0xFF, 0x31, 0x67, 0xEF, 0xF0, 0xA3, 0xE4, 0xF0, 0xA3, 0xE5, 0x75, 0x12, 0xCF, 0x77,
+0xF0, 0x7B, 0x01, 0x7A, 0x00, 0x31, 0x60, 0x90, 0x91, 0x0B, 0xE5, 0x75, 0xF0, 0xAB, 0x70, 0xAD,
+0x71, 0xAF, 0x6F, 0x02, 0x27, 0x3D, 0x74, 0x9F, 0x25, 0x6F, 0xF5, 0x82, 0xE4, 0x34, 0x93, 0x22,
+0x7D, 0x05, 0x7F, 0x04, 0x02, 0xB6, 0x19, 0x90, 0x93, 0x58, 0xE4, 0xF0, 0xA3, 0x22, 0x7E, 0x00,
+0x7F, 0xAA, 0x7D, 0x00, 0x7B, 0x01, 0x7A, 0x92, 0x79, 0x09, 0x02, 0x06, 0xDE, 0xC3, 0xEF, 0x9D,
+0xF5, 0x60, 0xC3, 0x94, 0x08, 0x50, 0x1F, 0xE4, 0xF5, 0x61, 0xEB, 0x51, 0x5F, 0xF5, 0x83, 0xC0,
+0x83, 0xC0, 0x82, 0x90, 0x93, 0x0A, 0xE0, 0xD0, 0x82, 0xD0, 0x83, 0x75, 0xF0, 0x03, 0x12, 0x05,
+0x28, 0xE5, 0x60, 0xF0, 0x80, 0x41, 0xE5, 0x60, 0xC3, 0x94, 0x10, 0x50, 0x09, 0x75, 0x61, 0x01,
+0xE5, 0x60, 0x24, 0xF8, 0x80, 0x17, 0xE5, 0x60, 0xC3, 0x94, 0x18, 0x50, 0x09, 0x75, 0x61, 0x02,
+0xE5, 0x60, 0x24, 0xF0, 0x80, 0x07, 0x75, 0x61, 0x03, 0xE5, 0x60, 0x24, 0xE8, 0xFF, 0xEB, 0x51,
+0x5F, 0xF5, 0x83, 0xC0, 0x83, 0xC0, 0x82, 0x90, 0x93, 0x0A, 0xE0, 0xD0, 0x82, 0xD0, 0x83, 0x75,
+0xF0, 0x03, 0x12, 0x05, 0x28, 0xEF, 0xF0, 0xAF, 0x61, 0x22, 0x8F, 0x5E, 0x8D, 0x5F, 0xAE, 0x03,
+0x74, 0x1F, 0xC3, 0x95, 0x5E, 0x40, 0x0B, 0x51, 0x57, 0xE4, 0xFD, 0x51, 0x50, 0xF0, 0x24, 0xD4,
+0x80, 0x34, 0x74, 0x3F, 0xC3, 0x95, 0x5E, 0x40, 0x0B, 0x51, 0x57, 0x7D, 0x20, 0x51, 0x4E, 0xF0,
+0x24, 0x88, 0x80, 0x22, 0x74, 0x5F, 0xC3, 0x95, 0x5E, 0x40, 0x0B, 0x51, 0x57, 0x7D, 0x40, 0x51,
+0x4E, 0xF0, 0x24, 0xD0, 0x80, 0x10, 0x74, 0x7F, 0xC3, 0x95, 0x5E, 0x40, 0x20, 0x51, 0x57, 0x7D,
+0x60, 0x51, 0x4E, 0xF0, 0x24, 0x84, 0xFD, 0xE4, 0x34, 0x04, 0xFC, 0xE5, 0x5F, 0x51, 0x6B, 0xF5,
+0x83, 0x75, 0xF0, 0x03, 0xEE, 0x12, 0x05, 0x28, 0xEC, 0xF0, 0xA3, 0xED, 0xF0, 0x22, 0xAF, 0x5E,
+0x31, 0x7D, 0x90, 0x93, 0x06, 0xEF, 0x22, 0x90, 0x93, 0x0A, 0xEE, 0xF0, 0xAB, 0x5F, 0x22, 0x75,
+0xF0, 0x0E, 0xA4, 0x24, 0x11, 0xF5, 0x82, 0xE4, 0x34, 0x92, 0x22, 0x75, 0xF0, 0x0E, 0xA4, 0x24,
+0x0F, 0xF5, 0x82, 0xE4, 0x34, 0x92, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x93,
+0x85, 0xED, 0xF0, 0x90, 0x93, 0x84, 0xEF, 0xF0, 0x64, 0x02, 0x70, 0x2A, 0x90, 0x05, 0x22, 0xE0,
+0x90, 0x93, 0x86, 0xF0, 0x7D, 0x4A, 0x7F, 0x6F, 0x12, 0x90, 0xDE, 0x12, 0x93, 0xCB, 0xBF, 0x01,
+0x07, 0x90, 0x04, 0xD4, 0x74, 0xFF, 0x80, 0x4D, 0x90, 0x93, 0x86, 0xE0, 0xFF, 0x7D, 0x46, 0x12,
+0x90, 0xDE, 0x7F, 0x00, 0x80, 0x44, 0x90, 0x93, 0x84, 0xE0, 0x64, 0x01, 0x70, 0x33, 0xFD, 0xFF,
+0x12, 0x90, 0xDE, 0x90, 0x93, 0x85, 0xE0, 0xFF, 0x75, 0xF0, 0x13, 0xA4, 0x24, 0x3C, 0xF5, 0x82,
+0xE4, 0x34, 0x92, 0xF5, 0x83, 0xE0, 0xF4, 0x90, 0x04, 0xD4, 0xF0, 0xEF, 0x75, 0xF0, 0x13, 0xA4,
+0x24, 0x3D, 0xF5, 0x82, 0xE4, 0x34, 0x92, 0xF5, 0x83, 0xE0, 0xF4, 0x90, 0x04, 0xD5, 0xF0, 0x80,
+0x07, 0x90, 0x04, 0xD4, 0xE4, 0xF0, 0xA3, 0xF0, 0x7F, 0x01, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90,
+0x01, 0x94, 0xE0, 0x44, 0x01, 0xF0, 0x90, 0x01, 0xC7, 0xE4, 0xF0, 0x22, 0x90, 0x01, 0x01, 0xE0,
+0x44, 0x04, 0xF0, 0x90, 0x01, 0x9A, 0xE0, 0x54, 0xC0, 0xF0, 0x7F, 0x0A, 0x7E, 0x00, 0x12, 0x7C,
+0x9F, 0x90, 0x01, 0x99, 0xE0, 0x44, 0xC0, 0xF0, 0x90, 0x01, 0x9B, 0x74, 0x80, 0xF0, 0x22, 0x90,
+0x01, 0x9A, 0xE0, 0x54, 0xC0, 0x44, 0x0B, 0xF0, 0x7F, 0x0A, 0x7E, 0x00, 0x12, 0x7C, 0x9F, 0x90,
+0x01, 0x98, 0xE0, 0x54, 0xC0, 0x7F, 0x00, 0xB4, 0x40, 0x02, 0x7F, 0x01, 0x22, 0x90, 0x01, 0xCF,
+0xE0, 0x90, 0x93, 0x6D, 0xF0, 0xE0, 0xFF, 0x30, 0xE0, 0x07, 0x90, 0x01, 0xCF, 0xE0, 0x54, 0xFE,
+0xF0, 0xEF, 0x30, 0xE5, 0x23, 0x90, 0x01, 0xCF, 0xE0, 0x54, 0xDF, 0xF0, 0x90, 0x01, 0x34, 0x74,
+0x20, 0xF0, 0xE4, 0xF5, 0xA8, 0xF5, 0xE8, 0x12, 0x75, 0xB6, 0x90, 0x00, 0x03, 0xE0, 0x54, 0xFB,
+0xFD, 0x7F, 0x03, 0x12, 0x7B, 0x3E, 0x80, 0xFE, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0,
+0x90, 0x04, 0x1D, 0xE0, 0x60, 0x1A, 0x90, 0x05, 0x22, 0xE0, 0x54, 0x90, 0x60, 0x07, 0x90, 0x01,
+0xC0, 0xE0, 0x44, 0x08, 0xF0, 0x90, 0x01, 0xC6, 0xE0, 0x30, 0xE1, 0xE4, 0x7F, 0x00, 0x80, 0x02,
+0x7F, 0x01, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xC3, 0xEE, 0x94, 0x01, 0x40, 0x0A, 0x0D, 0xED, 0x13,
+0x90, 0xFD, 0x10, 0xF0, 0xE4, 0x2F, 0xFF, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0xE4,
+0xFE, 0xFD, 0xEF, 0xB4, 0x01, 0x0D, 0xEB, 0xB4, 0x02, 0x03, 0x0D, 0x80, 0x06, 0xEB, 0xB4, 0x01,
+0x02, 0x7D, 0x02, 0xAF, 0x06, 0xEF, 0xC4, 0x54, 0xF0, 0x4D, 0xFF, 0xD0, 0xD0, 0x92, 0xAF, 0x22,
+0x90, 0x01, 0xC4, 0x74, 0xF0, 0xF0, 0x74, 0xD3, 0xA3, 0xF0, 0x7F, 0x90, 0x12, 0x7B, 0x51, 0xEF,
+0x20, 0xE0, 0xF7, 0x74, 0xF0, 0x04, 0x90, 0x01, 0xC4, 0xF0, 0x74, 0xD3, 0xA3, 0xF0, 0x22, 0x90,
+0x85, 0xBF, 0xE0, 0x64, 0x02, 0x7F, 0x01, 0x60, 0x02, 0x7F, 0x00, 0x22, 0xD3, 0x10, 0xAF, 0x01,
+0xC3, 0xC0, 0xD0, 0x90, 0x93, 0x93, 0xEF, 0xF0, 0xA3, 0xED, 0xF0, 0x90, 0x84, 0xC3, 0xE0, 0x04,
+0xF0, 0x90, 0x04, 0x1D, 0xE0, 0x60, 0x3C, 0x90, 0x05, 0x22, 0xE0, 0x90, 0x93, 0x97, 0xF0, 0x7D,
+0x26, 0x12, 0x93, 0xC7, 0xEF, 0x64, 0x01, 0x70, 0x16, 0x91, 0xB0, 0x7D, 0x01, 0x12, 0x3A, 0xC2,
+0x91, 0xBB, 0xE0, 0x20, 0xE0, 0x09, 0x90, 0x92, 0x09, 0xE0, 0x20, 0xE0, 0x02, 0x91, 0xA5, 0x90,
+0x93, 0x97, 0xE0, 0xFF, 0x7D, 0x27, 0x12, 0x90, 0xDE, 0x90, 0x93, 0x93, 0xE0, 0xFF, 0x12, 0x5C,
+0xA3, 0x80, 0x24, 0x90, 0x93, 0x93, 0xE0, 0xFF, 0x12, 0x5C, 0xA3, 0x91, 0xB0, 0x90, 0x93, 0xFB,
+0x74, 0x0A, 0xF0, 0x7D, 0x01, 0x12, 0xAE, 0x2E, 0x91, 0xBB, 0xE0, 0x20, 0xE0, 0x09, 0x90, 0x92,
+0x09, 0xE0, 0x20, 0xE0, 0x02, 0x91, 0xA5, 0x12, 0xAF, 0xD6, 0x91, 0xD1, 0x74, 0x01, 0xF0, 0xFF,
+0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90, 0x93, 0x95, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x02, 0x50, 0xD7,
+0x90, 0x84, 0xC8, 0xE0, 0xFF, 0x90, 0x93, 0x94, 0xE0, 0xFB, 0x22, 0x90, 0x93, 0x95, 0xEE, 0xF0,
+0xFC, 0xA3, 0xEF, 0xF0, 0xFD, 0x90, 0x93, 0x93, 0xE0, 0xFF, 0x12, 0x65, 0x61, 0x90, 0x92, 0x0A,
+0x22, 0x90, 0x84, 0xBF, 0xA3, 0xE0, 0x24, 0x7F, 0xF5, 0x82, 0xE4, 0x34, 0x82, 0xF5, 0x83, 0x22,
0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x12, 0x7A, 0x29, 0xEF, 0x64, 0x01, 0x60, 0x05, 0x75,
-0x0F, 0x01, 0x80, 0x51, 0x90, 0x85, 0xC9, 0xE0, 0xFF, 0x54, 0x03, 0x60, 0x05, 0x75, 0x0F, 0x02,
-0x80, 0x43, 0x90, 0x85, 0xC7, 0xE0, 0xFE, 0xE4, 0xC3, 0x9E, 0x50, 0x05, 0x75, 0x0F, 0x04, 0x80,
-0x34, 0xEF, 0x30, 0xE2, 0x05, 0x75, 0x0F, 0x08, 0x80, 0x2B, 0x90, 0x85, 0xC9, 0xE0, 0x30, 0xE4,
-0x05, 0x75, 0x0F, 0x10, 0x80, 0x1F, 0x90, 0x85, 0xC2, 0xE0, 0x13, 0x13, 0x54, 0x3F, 0x20, 0xE0,
-0x05, 0x75, 0x0F, 0x20, 0x80, 0x0F, 0x90, 0x86, 0x71, 0xE0, 0x60, 0x05, 0x75, 0x0F, 0x80, 0x80,
-0x04, 0x71, 0xC0, 0x80, 0x0E, 0x90, 0x01, 0xB9, 0x74, 0x04, 0xF0, 0x90, 0x01, 0xB8, 0xE5, 0x0F,
-0xF0, 0x7F, 0x00, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xE4, 0x90, 0x84, 0xC1, 0x12, 0x96, 0x40, 0x90,
-0x92, 0x76, 0xF0, 0x22, 0xE4, 0xF5, 0x40, 0xF5, 0x41, 0xF5, 0x42, 0x75, 0x43, 0x80, 0xAD, 0x40,
-0x7F, 0x50, 0x12, 0x7B, 0x3E, 0xAD, 0x41, 0x7F, 0x51, 0x12, 0x7B, 0x3E, 0xAD, 0x42, 0x7F, 0x52,
-0x12, 0x7B, 0x3E, 0xAD, 0x43, 0x7F, 0x53, 0x02, 0x7B, 0x3E, 0x12, 0x75, 0xB6, 0x12, 0x75, 0x58,
-0x11, 0x35, 0x11, 0x16, 0x80, 0xCE, 0x75, 0x52, 0x06, 0x75, 0x53, 0x01, 0x75, 0x54, 0x03, 0x75,
-0x55, 0x62, 0x90, 0x01, 0x38, 0xE5, 0x52, 0xF0, 0xA3, 0xE5, 0x53, 0xF0, 0xA3, 0xE5, 0x54, 0xF0,
-0xA3, 0xE5, 0x55, 0xF0, 0x22, 0x75, 0x48, 0x12, 0xE4, 0xF5, 0x49, 0x75, 0x4A, 0x07, 0x75, 0x4B,
-0x32, 0xF5, 0x50, 0x90, 0x01, 0x30, 0xE5, 0x48, 0xF0, 0xA3, 0xE5, 0x49, 0xF0, 0xA3, 0xE5, 0x4A,
-0xF0, 0xA3, 0xE5, 0x4B, 0xF0, 0x90, 0x01, 0x20, 0xE5, 0x50, 0xF0, 0x22, 0x12, 0x7C, 0x4E, 0x90,
-0x84, 0xC5, 0xEF, 0xF0, 0x11, 0x0A, 0x90, 0x01, 0x64, 0x74, 0x01, 0xF0, 0x90, 0x04, 0x23, 0xE0,
-0x44, 0x80, 0xF0, 0x90, 0x00, 0x17, 0xE0, 0x54, 0xFC, 0x44, 0x04, 0xFD, 0x7F, 0x17, 0x12, 0x7B,
-0x3E, 0x90, 0x00, 0x38, 0xE0, 0x44, 0x40, 0xFD, 0x7F, 0x38, 0x12, 0x7B, 0x3E, 0x02, 0x68, 0xE2,
-0x90, 0x01, 0xE4, 0x74, 0x01, 0xF0, 0xA3, 0xF0, 0x22, 0x90, 0x84, 0xA1, 0x74, 0x02, 0xF0, 0xA3,
-0x74, 0x10, 0xF0, 0x90, 0x84, 0xA7, 0x74, 0x80, 0xF0, 0xA3, 0x74, 0x03, 0xF0, 0x22, 0xE4, 0xFB,
-0xFA, 0xFD, 0x7F, 0x01, 0x12, 0x86, 0x4E, 0x90, 0x92, 0x32, 0xEF, 0xF0, 0x60, 0xF0, 0x90, 0x84,
-0xC1, 0xE0, 0xFF, 0x70, 0x04, 0xA3, 0xE0, 0x60, 0xE5, 0xC2, 0xAF, 0xEF, 0x30, 0xE0, 0x0F, 0x90,
-0x84, 0xC1, 0xE0, 0x54, 0xFE, 0xF0, 0xE4, 0xFF, 0x12, 0x2D, 0xBD, 0x12, 0x91, 0xE8, 0x31, 0x09,
-0x30, 0xE1, 0x06, 0x54, 0xFD, 0xF0, 0x12, 0x60, 0x5D, 0x31, 0x09, 0x30, 0xE2, 0x06, 0x54, 0xFB,
-0xF0, 0x12, 0x6A, 0x6D, 0x31, 0x09, 0x30, 0xE4, 0x0C, 0x54, 0xEF, 0xF0, 0x12, 0x6F, 0x22, 0xBF,
-0x01, 0x03, 0x12, 0xAC, 0x16, 0xD2, 0xAF, 0x80, 0xB5, 0xD2, 0xAF, 0xC2, 0xAF, 0x90, 0x84, 0xC1,
-0xE0, 0xFF, 0x22, 0x8F, 0x0D, 0x7F, 0x02, 0x12, 0x86, 0x27, 0x90, 0x84, 0xC1, 0xE0, 0x45, 0x0D,
-0xF0, 0x22, 0x12, 0x40, 0xB9, 0x7F, 0x02, 0x80, 0xEA, 0x90, 0x86, 0x72, 0xE0, 0x30, 0xE0, 0x04,
-0x7F, 0x10, 0x31, 0x13, 0x22, 0xC0, 0xE0, 0xC0, 0xF0, 0xC0, 0x83, 0xC0, 0x82, 0xC0, 0xD0, 0x75,
-0xD0, 0x00, 0xC0, 0x00, 0xC0, 0x01, 0xC0, 0x02, 0xC0, 0x03, 0xC0, 0x04, 0xC0, 0x05, 0xC0, 0x06,
-0xC0, 0x07, 0x90, 0x01, 0xC4, 0x74, 0x35, 0xF0, 0x74, 0xB9, 0xA3, 0xF0, 0x12, 0x75, 0x28, 0xE5,
-0x56, 0x30, 0xE1, 0x02, 0x51, 0x6C, 0xE5, 0x56, 0x30, 0xE2, 0x03, 0x12, 0xA6, 0x0E, 0xE5, 0x57,
-0x30, 0xE0, 0x02, 0x51, 0x38, 0xE5, 0x58, 0x30, 0xE1, 0x02, 0x91, 0xBA, 0xE5, 0x58, 0x30, 0xE0,
-0x02, 0x91, 0x72, 0xE5, 0x58, 0x30, 0xE4, 0x02, 0x51, 0x6B, 0xE5, 0x59, 0x30, 0xE1, 0x04, 0x7F,
-0x04, 0x31, 0x13, 0xE5, 0x59, 0x30, 0xE4, 0x03, 0x12, 0xA5, 0x37, 0xE5, 0x59, 0x30, 0xE5, 0x02,
-0x31, 0xCF, 0xE5, 0x59, 0x30, 0xE6, 0x02, 0x31, 0xF6, 0x74, 0x35, 0x04, 0x90, 0x01, 0xC4, 0xF0,
-0x74, 0xB9, 0xA3, 0xF0, 0xD0, 0x07, 0xD0, 0x06, 0xD0, 0x05, 0xD0, 0x04, 0xD0, 0x03, 0xD0, 0x02,
-0xD0, 0x01, 0xD0, 0x00, 0xD0, 0xD0, 0xD0, 0x82, 0xD0, 0x83, 0xD0, 0xF0, 0xD0, 0xE0, 0x32, 0x90,
-0x85, 0xC1, 0x12, 0x9C, 0x0B, 0x30, 0xE0, 0x19, 0xEF, 0x54, 0xBF, 0x51, 0x24, 0x30, 0xE0, 0x06,
-0xE0, 0x44, 0x01, 0xF0, 0x80, 0x08, 0xE0, 0x54, 0xFE, 0x51, 0x2D, 0x74, 0x04, 0xF0, 0x12, 0xA5,
-0x90, 0xE4, 0xFF, 0x02, 0x68, 0x8F, 0x90, 0x85, 0xC1, 0xE0, 0xFF, 0x12, 0x8D, 0x59, 0x30, 0xE0,
-0x1E, 0xEF, 0x54, 0x7F, 0x51, 0x24, 0x30, 0xE1, 0x06, 0xE0, 0x44, 0x02, 0xF0, 0x80, 0x07, 0xE0,
-0x54, 0xFD, 0x51, 0x2D, 0x04, 0xF0, 0x90, 0x85, 0xC5, 0xE0, 0x60, 0x03, 0x12, 0xA5, 0x90, 0x7F,
-0x01, 0x02, 0x68, 0x8F, 0xF0, 0x90, 0x04, 0xE0, 0xE0, 0x90, 0x85, 0xC2, 0x22, 0xF0, 0x90, 0x01,
-0xB9, 0x74, 0x01, 0xF0, 0x90, 0x01, 0xB8, 0x22, 0xB1, 0x03, 0x90, 0x92, 0x67, 0xEF, 0xF0, 0x30,
-0xE0, 0x05, 0x7D, 0x01, 0xE4, 0x80, 0x02, 0xE4, 0xFD, 0xFF, 0x12, 0x57, 0x82, 0x90, 0x92, 0x67,
-0xE0, 0x30, 0xE6, 0x11, 0x90, 0x01, 0x2F, 0xE0, 0x30, 0xE7, 0x04, 0xE4, 0xF0, 0x80, 0x06, 0x90,
-0x01, 0x2F, 0x74, 0x80, 0xF0, 0x51, 0x76, 0xFB, 0x02, 0x51, 0x7D, 0x22, 0x90, 0x85, 0xC5, 0xE0,
-0x60, 0x03, 0x12, 0xA4, 0xD0, 0x22, 0x90, 0x85, 0xD7, 0xE0, 0xFF, 0xA3, 0xE0, 0xFD, 0x90, 0x85,
-0xDE, 0xE0, 0x22, 0xE4, 0x90, 0x92, 0x56, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0x90, 0x92, 0x94, 0x12,
-0x87, 0x58, 0x90, 0x92, 0x90, 0x12, 0x87, 0x64, 0xC3, 0x12, 0x04, 0xB4, 0x40, 0x50, 0x90, 0x85,
-0xC1, 0xE0, 0x90, 0x92, 0x94, 0x30, 0xE0, 0x14, 0x71, 0xFA, 0x74, 0x0A, 0x9E, 0x2F, 0xFF, 0x90,
-0x85, 0xFB, 0xE0, 0x24, 0x04, 0x2F, 0xFF, 0x90, 0x92, 0xC5, 0x80, 0x0A, 0x71, 0xFA, 0x74, 0x0A,
-0x9E, 0x2F, 0xFF, 0x90, 0x92, 0xC6, 0xE0, 0xFE, 0xC3, 0xEF, 0x9E, 0x90, 0x92, 0x57, 0xF0, 0x90,
-0x92, 0x57, 0xE0, 0xFF, 0xC3, 0x94, 0x2D, 0x50, 0x15, 0x74, 0x98, 0x2F, 0x91, 0x12, 0xE0, 0x04,
-0xF0, 0x90, 0x85, 0xDB, 0xE0, 0x04, 0xF0, 0xE0, 0xFD, 0x7F, 0xFE, 0x12, 0x7B, 0x3E, 0x90, 0x85,
-0xDB, 0xE0, 0xFF, 0xD3, 0x90, 0x92, 0xC8, 0xE0, 0x9F, 0x90, 0x92, 0xC7, 0xE0, 0x94, 0x00, 0x40,
-0x02, 0x61, 0xC6, 0x71, 0xD8, 0x71, 0xCF, 0x50, 0x1C, 0x71, 0xE2, 0x90, 0x92, 0x58, 0xE0, 0xD3,
-0x9F, 0x40, 0x0A, 0x90, 0x92, 0x56, 0xE0, 0x90, 0x92, 0x59, 0xF0, 0x80, 0x08, 0x90, 0x92, 0x56,
-0xE0, 0x04, 0xF0, 0x80, 0xE0, 0x71, 0xD8, 0x71, 0xCF, 0x50, 0x2C, 0x71, 0xE2, 0xC3, 0x90, 0x92,
-0xC8, 0xE0, 0x9F, 0xFF, 0x90, 0x92, 0xC7, 0xE0, 0x94, 0x00, 0xFE, 0x90, 0x92, 0x58, 0xE0, 0xD3,
-0x9F, 0xE4, 0x9E, 0x40, 0x0A, 0x90, 0x92, 0x56, 0xE0, 0x90, 0x92, 0x5A, 0xF0, 0x80, 0x08, 0x90,
-0x92, 0x56, 0xE0, 0x04, 0xF0, 0x80, 0xD0, 0x90, 0x92, 0x59, 0xE0, 0x90, 0x85, 0xE0, 0xF0, 0x90,
-0x92, 0x5A, 0xE0, 0x90, 0x85, 0xE1, 0x71, 0xC7, 0x94, 0x0A, 0x40, 0x0A, 0xEF, 0x24, 0xF6, 0x90,
-0x85, 0xD8, 0xF0, 0xE4, 0x80, 0x09, 0xE4, 0x90, 0x85, 0xD8, 0x71, 0xC7, 0x74, 0x0A, 0x9F, 0x90,
-0x85, 0xD7, 0xF0, 0x90, 0x85, 0xE0, 0xE0, 0xFF, 0xA3, 0xE0, 0xC3, 0x9F, 0x90, 0x85, 0xDE, 0xF0,
-0x90, 0x85, 0xC1, 0xE0, 0x30, 0xE0, 0x05, 0x90, 0x92, 0xC5, 0x80, 0x03, 0x90, 0x92, 0xC6, 0xE0,
-0xFF, 0x90, 0x85, 0xDE, 0xE0, 0x2F, 0x04, 0xF0, 0x90, 0x85, 0xDE, 0xE0, 0xC3, 0x94, 0x0A, 0x50,
-0x03, 0x74, 0x0A, 0xF0, 0x90, 0x85, 0xDE, 0xE0, 0x24, 0x02, 0xF0, 0x51, 0x76, 0xFB, 0x12, 0x51,
-0x7D, 0xE4, 0xFF, 0x12, 0x69, 0x33, 0x22, 0xF0, 0x90, 0x85, 0xE0, 0xE0, 0xFF, 0xC3, 0x22, 0x90,
-0x92, 0x56, 0xE0, 0xFF, 0xC3, 0x94, 0x2D, 0x22, 0xE4, 0x90, 0x92, 0x58, 0xF0, 0x90, 0x92, 0x56,
-0xF0, 0x22, 0x74, 0x98, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x92, 0xF5, 0x83, 0xE0, 0xFF, 0x90, 0x92,
-0x58, 0xE0, 0x2F, 0xF0, 0x90, 0x92, 0xC9, 0xE0, 0xFF, 0x22, 0x12, 0x87, 0x64, 0x90, 0x92, 0x90,
-0x12, 0x87, 0x58, 0x12, 0x87, 0x30, 0x78, 0x0A, 0x12, 0x04, 0xC5, 0x90, 0x85, 0xDD, 0xE0, 0xFE,
-0xC3, 0x22, 0xF5, 0x82, 0xE4, 0x34, 0x92, 0xF5, 0x83, 0x22, 0xE4, 0xFE, 0x74, 0x98, 0x2E, 0x91,
-0x12, 0xE4, 0xF0, 0x0E, 0xEE, 0xB4, 0x2D, 0xF4, 0xE4, 0x90, 0x85, 0xDC, 0xF0, 0x90, 0x85, 0xDB,
-0xF0, 0x90, 0x85, 0xDF, 0xF0, 0xEF, 0xB4, 0x01, 0x07, 0xA3, 0x74, 0x2D, 0xF0, 0xE4, 0xA3, 0xF0,
-0x22, 0x90, 0x93, 0x14, 0x12, 0x87, 0x79, 0x12, 0x71, 0x54, 0x90, 0x85, 0xC5, 0xE0, 0xFF, 0x12,
-0x60, 0xD0, 0x90, 0x85, 0xC5, 0xE0, 0x60, 0x19, 0x90, 0x93, 0x14, 0x12, 0x87, 0x70, 0x12, 0x8D,
-0x62, 0x54, 0x0F, 0xFF, 0x12, 0x8C, 0x6F, 0xFD, 0x12, 0x6A, 0xB8, 0x51, 0x76, 0xFB, 0x12, 0x51,
-0x7D, 0x22, 0x90, 0x85, 0xBC, 0xE0, 0xFF, 0x30, 0xE0, 0x3F, 0x90, 0x85, 0xC0, 0xE0, 0x7E, 0x00,
-0xB4, 0x02, 0x02, 0x7E, 0x01, 0x90, 0x85, 0xBF, 0xE0, 0x7D, 0x00, 0xB4, 0x04, 0x02, 0x7D, 0x01,
-0xED, 0x4E, 0x70, 0x25, 0xEF, 0xC3, 0x13, 0x30, 0xE0, 0x03, 0x02, 0xA7, 0xBA, 0x12, 0x9F, 0x2F,
-0x90, 0x85, 0xC0, 0xE0, 0xB4, 0x08, 0x06, 0xE4, 0xFD, 0x7F, 0x0C, 0x80, 0x09, 0x90, 0x85, 0xC0,
-0xE0, 0x70, 0x06, 0xFD, 0x7F, 0x04, 0x12, 0x9D, 0x7D, 0x22, 0x90, 0x85, 0xBC, 0xE0, 0xFF, 0x30,
-0xE0, 0x40, 0x90, 0x85, 0xC0, 0xE0, 0x7E, 0x00, 0xB4, 0x02, 0x02, 0x7E, 0x01, 0x90, 0x85, 0xBF,
-0xE0, 0x7D, 0x00, 0xB4, 0x04, 0x02, 0x7D, 0x01, 0xED, 0x4E, 0x70, 0x26, 0xEF, 0xC3, 0x13, 0x30,
-0xE0, 0x03, 0x02, 0xA7, 0xBA, 0x12, 0xA5, 0xC9, 0x90, 0x85, 0xC0, 0xE0, 0xB4, 0x0C, 0x06, 0xE4,
-0xFD, 0x7F, 0x08, 0x80, 0x0A, 0x90, 0x85, 0xC0, 0xE0, 0xB4, 0x04, 0x06, 0xE4, 0xFD, 0xFF, 0x12,
-0x9D, 0x7D, 0x22, 0xE4, 0x90, 0x92, 0x69, 0xF0, 0xA3, 0xF0, 0x7F, 0x83, 0x12, 0x7B, 0x51, 0x90,
-0x92, 0x68, 0xEF, 0xF0, 0x7F, 0x83, 0x12, 0x7B, 0x51, 0xAE, 0x07, 0x90, 0x92, 0x68, 0xE0, 0xFF,
-0xB5, 0x06, 0x01, 0x22, 0xC3, 0x90, 0x92, 0x6A, 0xE0, 0x94, 0x64, 0x90, 0x92, 0x69, 0xE0, 0x94,
-0x00, 0x40, 0x0D, 0x90, 0x01, 0xC0, 0xE0, 0x44, 0x40, 0xF0, 0x90, 0x92, 0x68, 0xE0, 0xFF, 0x22,
-0x90, 0x92, 0x69, 0xE4, 0x75, 0xF0, 0x01, 0x12, 0x07, 0x0A, 0x80, 0xBE, 0x32, 0xC0, 0xE0, 0xC0,
-0xF0, 0xC0, 0x83, 0xC0, 0x82, 0xC0, 0xD0, 0x75, 0xD0, 0x00, 0xC0, 0x00, 0xC0, 0x01, 0xC0, 0x02,
-0xC0, 0x03, 0xC0, 0x04, 0xC0, 0x05, 0xC0, 0x06, 0xC0, 0x07, 0x90, 0x01, 0xC4, 0x74, 0x4D, 0xF0,
-0x74, 0xBD, 0xA3, 0xF0, 0x12, 0x6C, 0xBC, 0x74, 0x4D, 0x04, 0x90, 0x01, 0xC4, 0xF0, 0x74, 0xBD,
-0xA3, 0xF0, 0xD0, 0x07, 0xD0, 0x06, 0xD0, 0x05, 0xD0, 0x04, 0xD0, 0x03, 0xD0, 0x02, 0xD0, 0x01,
-0xD0, 0x00, 0xD0, 0xD0, 0xD0, 0x82, 0xD0, 0x83, 0xD0, 0xF0, 0xD0, 0xE0, 0x32, 0x32, 0xC0, 0xE0,
-0xC0, 0x83, 0xC0, 0x82, 0xC0, 0xD0, 0x75, 0xD0, 0x00, 0xC0, 0x05, 0xC0, 0x07, 0x7D, 0x9E, 0x90,
-0x01, 0xC4, 0xED, 0xF0, 0x74, 0xBD, 0xFF, 0xA3, 0xF0, 0xED, 0x04, 0x90, 0x01, 0xC4, 0xF0, 0xA3,
-0xEF, 0xF0, 0xD0, 0x07, 0xD0, 0x05, 0xD0, 0xD0, 0xD0, 0x82, 0xD0, 0x83, 0xD0, 0xE0, 0x32, 0x90,
-0x85, 0xBC, 0xE0, 0x30, 0xE0, 0x05, 0xE4, 0xA3, 0xF0, 0xA3, 0xF0, 0x22, 0x90, 0x88, 0xE7, 0xE0,
-0x04, 0xF0, 0x90, 0x85, 0xBC, 0xE0, 0xFF, 0x30, 0xE0, 0x05, 0x12, 0x9F, 0x48, 0x60, 0x1B, 0x90,
-0x85, 0xC5, 0xE0, 0x70, 0x04, 0xEF, 0x30, 0xE0, 0x0B, 0x90, 0x85, 0xC8, 0xE0, 0x64, 0x02, 0x60,
-0x09, 0x12, 0xA0, 0x9E, 0x90, 0x01, 0xE6, 0xE0, 0x04, 0xF0, 0x22, 0xE4, 0xFF, 0x12, 0x77, 0x39,
-0xBF, 0x01, 0x13, 0x90, 0x85, 0xC5, 0xE0, 0x60, 0x0D, 0x12, 0x9F, 0xE4, 0x64, 0x02, 0x60, 0x03,
-0x02, 0x77, 0x61, 0x12, 0x79, 0x41, 0x22, 0x90, 0x85, 0xC5, 0xE0, 0x70, 0x07, 0x90, 0x85, 0xBC,
-0xE0, 0x30, 0xE0, 0x13, 0x90, 0x85, 0xBC, 0xE0, 0x30, 0xE0, 0x09, 0x12, 0x9F, 0xAC, 0xBF, 0x01,
-0x06, 0x02, 0x9F, 0x4F, 0x12, 0x9F, 0x67, 0x22, 0x7D, 0x07, 0xAF, 0x62, 0xED, 0x30, 0xE0, 0x21,
-0x75, 0xF0, 0x12, 0xEF, 0x90, 0x89, 0x44, 0xD1, 0x9B, 0xEF, 0x90, 0x89, 0x46, 0xD1, 0x9B, 0xEF,
-0x90, 0x89, 0x48, 0xD1, 0x9B, 0xEF, 0x90, 0x89, 0x4A, 0xD1, 0x9B, 0xEF, 0x90, 0x89, 0x4C, 0xD1,
-0xA6, 0xED, 0x30, 0xE1, 0x09, 0x75, 0xF0, 0x12, 0xEF, 0x90, 0x89, 0x40, 0xD1, 0xA6, 0xED, 0x30,
-0xE2, 0x0C, 0x75, 0xF0, 0x12, 0xEF, 0x90, 0x89, 0x42, 0x12, 0x05, 0x28, 0xE4, 0xF0, 0xD1, 0xAE,
-0xE0, 0x54, 0xBF, 0x44, 0x80, 0xFE, 0xD1, 0xAE, 0xEE, 0xF0, 0x22, 0x12, 0x05, 0x28, 0xE4, 0xF0,
-0xA3, 0xF0, 0x75, 0xF0, 0x12, 0x22, 0x12, 0x05, 0x28, 0xE4, 0xF0, 0xA3, 0xF0, 0x22, 0xEF, 0xC4,
-0x54, 0xF0, 0x24, 0x03, 0xF5, 0x82, 0xE4, 0x34, 0x81, 0xF5, 0x83, 0x22, 0x7B, 0x00, 0x7A, 0x00,
-0x79, 0x00, 0x90, 0x89, 0x1B, 0x12, 0x87, 0x79, 0x7B, 0xFF, 0x7A, 0x82, 0x79, 0x00, 0x90, 0x89,
-0x1E, 0x12, 0x87, 0x79, 0x7A, 0x82, 0x79, 0x3F, 0x90, 0x89, 0x21, 0x12, 0x87, 0x79, 0x7A, 0x82,
-0x79, 0xE1, 0x90, 0x89, 0x27, 0x12, 0x87, 0x79, 0x7A, 0x82, 0x79, 0xF5, 0x90, 0x89, 0x2A, 0x12,
-0x87, 0x79, 0x7A, 0x83, 0x79, 0x1D, 0x90, 0x89, 0x2D, 0x12, 0x87, 0x79, 0x7A, 0x83, 0x79, 0x31,
-0x90, 0x89, 0x33, 0x12, 0x87, 0x79, 0x7A, 0x83, 0x79, 0x59, 0x90, 0x89, 0x36, 0x12, 0x87, 0x79,
-0x7A, 0x83, 0x79, 0x81, 0x90, 0x89, 0x39, 0x12, 0x87, 0x79, 0xE4, 0x90, 0x92, 0xCB, 0xF0, 0x90,
-0x92, 0x29, 0xF0, 0x90, 0x92, 0x29, 0xE0, 0xFF, 0xC3, 0x94, 0x05, 0x50, 0x10, 0x74, 0xDC, 0x2F,
-0x12, 0x96, 0x7A, 0xE4, 0xF0, 0x90, 0x92, 0x29, 0xE0, 0x04, 0xF0, 0x80, 0xE6, 0x22, 0x90, 0x01,
-0x94, 0xE0, 0x44, 0x01, 0xF0, 0x90, 0x01, 0xC7, 0xE4, 0xF0, 0x22, 0x90, 0x01, 0xCF, 0xE0, 0x90,
-0x92, 0x56, 0xF0, 0xE0, 0xFF, 0x30, 0xE0, 0x07, 0x90, 0x01, 0xCF, 0xE0, 0x54, 0xFE, 0xF0, 0xEF,
-0x30, 0xE5, 0x23, 0x90, 0x01, 0xCF, 0xE0, 0x54, 0xDF, 0xF0, 0x90, 0x01, 0x34, 0x74, 0x20, 0xF0,
-0xE4, 0xF5, 0xA8, 0xF5, 0xE8, 0x12, 0x75, 0xB6, 0x90, 0x00, 0x03, 0xE0, 0x54, 0xFB, 0xFD, 0x7F,
-0x03, 0x12, 0x7B, 0x3E, 0x80, 0xFE, 0x22, 0xE4, 0xFF, 0x02, 0x2D, 0xBD, 0xD3, 0x10, 0xAF, 0x01,
-0xC3, 0xC0, 0xD0, 0x90, 0x04, 0x1D, 0xE0, 0x60, 0x1A, 0x90, 0x05, 0x22, 0xE0, 0x54, 0x90, 0x60,
-0x07, 0x90, 0x01, 0xC0, 0xE0, 0x44, 0x08, 0xF0, 0x90, 0x01, 0xC6, 0xE0, 0x30, 0xE1, 0xE4, 0x7F,
-0x00, 0x80, 0x02, 0x7F, 0x01, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xC3, 0xEE, 0x94, 0x01, 0x40, 0x0A,
-0x0D, 0xED, 0x13, 0x90, 0xFD, 0x10, 0xF0, 0xE4, 0x2F, 0xFF, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3,
-0xC0, 0xD0, 0x90, 0x93, 0x08, 0xED, 0xF0, 0xA3, 0xEB, 0xF0, 0x90, 0x93, 0x07, 0xEF, 0xF0, 0xE4,
-0xFD, 0xFC, 0x12, 0xC3, 0x07, 0x90, 0x93, 0x07, 0xE0, 0x90, 0x04, 0x25, 0xF0, 0x90, 0x93, 0x08,
-0xE0, 0x60, 0x06, 0x12, 0xC0, 0x85, 0x44, 0x80, 0xF0, 0xAF, 0x05, 0x74, 0x20, 0x2F, 0xF5, 0x82,
-0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x54, 0xC0, 0xF0, 0x11, 0x85, 0x54, 0xC0, 0xF0, 0x90, 0x93,
-0x0A, 0xE0, 0xFF, 0xAE, 0x05, 0x74, 0x18, 0x2E, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xEF,
-0xF0, 0x90, 0x00, 0x8B, 0xE0, 0xD3, 0x94, 0x03, 0x74, 0x10, 0x40, 0x07, 0x11, 0x7C, 0x74, 0x04,
-0xF0, 0x80, 0x04, 0x11, 0x7C, 0xE4, 0xF0, 0xAF, 0x05, 0x11, 0x73, 0xF5, 0x83, 0xE0, 0x54, 0x01,
-0xFE, 0x90, 0x93, 0x09, 0xE0, 0x25, 0xE0, 0x25, 0xE0, 0xFB, 0xEE, 0x44, 0x02, 0x4B, 0xFE, 0x11,
-0x73, 0xF5, 0x83, 0xEE, 0xF0, 0x74, 0x11, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0x74,
-0xFF, 0xF0, 0x74, 0x29, 0x2F, 0x11, 0xA1, 0x54, 0xF7, 0xF0, 0xAE, 0x04, 0xAF, 0x05, 0xD0, 0xD0,
-0x92, 0xAF, 0x22, 0x74, 0x12, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0x22, 0x2E, 0xF5, 0x82, 0xE4,
-0x34, 0xFC, 0xF5, 0x83, 0x22, 0x74, 0x21, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0,
-0x22, 0xE0, 0xFE, 0x24, 0x28, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0xFF, 0x74, 0x29,
-0x2E, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x22, 0x90, 0x88, 0xD9, 0x31, 0x48, 0x11,
-0x91, 0xFD, 0x90, 0x92, 0x07, 0xE0, 0x24, 0x2C, 0x51, 0xFB, 0x90, 0x92, 0x07, 0xE0, 0x2F, 0x24,
-0x30, 0xA3, 0xF0, 0xE0, 0xFD, 0x24, 0x04, 0x51, 0xF3, 0xE0, 0xFE, 0x74, 0x05, 0x2D, 0x51, 0x06,
-0x12, 0xAF, 0x57, 0xEC, 0x3E, 0x90, 0x88, 0x80, 0xF0, 0xA3, 0xEF, 0xF0, 0x90, 0x92, 0x08, 0xE0,
-0x24, 0x0C, 0xF9, 0xE4, 0x34, 0xFC, 0x31, 0x59, 0x75, 0x1E, 0x04, 0x7B, 0x01, 0x7A, 0x88, 0x79,
-0x82, 0x12, 0x6A, 0x21, 0x90, 0x92, 0x08, 0xE0, 0x24, 0x14, 0xF0, 0xE0, 0xFD, 0x24, 0x01, 0x51,
-0x16, 0x2D, 0x51, 0x0E, 0x12, 0xAF, 0x57, 0xEC, 0x3E, 0x90, 0x88, 0x86, 0xF0, 0xA3, 0xEF, 0xF0,
-0x90, 0x88, 0xDA, 0x31, 0x48, 0x90, 0x88, 0x7C, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x4E, 0x60, 0x11,
-0x90, 0x92, 0x07, 0xE0, 0x31, 0x53, 0x8F, 0x1E, 0x7B, 0x01, 0x7A, 0x88, 0x79, 0x8A, 0x12, 0x6A,
-0x21, 0x90, 0x88, 0xDB, 0x31, 0x48, 0x31, 0x53, 0x90, 0x88, 0x7E, 0xA3, 0xE0, 0xF5, 0x1E, 0x7B,
-0x01, 0x7A, 0x88, 0x79, 0xAA, 0x02, 0x6A, 0x21, 0xE0, 0xFF, 0x12, 0x7B, 0x2A, 0x90, 0x92, 0x07,
-0xEF, 0xF0, 0x22, 0x24, 0x00, 0xF9, 0xE4, 0x34, 0xFC, 0x75, 0x1B, 0x01, 0xF5, 0x1C, 0x89, 0x1D,
-0x22, 0xEF, 0x60, 0x04, 0x31, 0x69, 0x11, 0xAA, 0x22, 0xE4, 0xFD, 0xFC, 0x90, 0x88, 0xD8, 0xE0,
-0xFF, 0x71, 0x07, 0xAB, 0x05, 0x74, 0x01, 0x2B, 0x51, 0x16, 0x2B, 0x51, 0x0E, 0x12, 0xAF, 0xCC,
-0x90, 0x88, 0x76, 0xF0, 0xA3, 0xEF, 0xF0, 0x74, 0x03, 0x2B, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5,
-0x83, 0xE0, 0xFE, 0x74, 0x02, 0x2B, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0x31, 0xFD, 0x90, 0x88, 0x78,
-0xF0, 0xA3, 0xEF, 0xF0, 0x74, 0x05, 0x2B, 0x51, 0x06, 0xE0, 0xFE, 0x74, 0x04, 0x2B, 0xF5, 0x82,
-0xE4, 0x34, 0xFC, 0x31, 0xFD, 0x90, 0x88, 0x7A, 0xF0, 0xA3, 0xEF, 0xF0, 0x74, 0x07, 0x2B, 0xF5,
+0x10, 0x01, 0x80, 0x51, 0x90, 0x85, 0xC9, 0xE0, 0xFF, 0x54, 0x03, 0x60, 0x05, 0x75, 0x10, 0x02,
+0x80, 0x43, 0x90, 0x85, 0xC7, 0xE0, 0xFE, 0xE4, 0xC3, 0x9E, 0x50, 0x05, 0x75, 0x10, 0x04, 0x80,
+0x34, 0xEF, 0x30, 0xE2, 0x05, 0x75, 0x10, 0x08, 0x80, 0x2B, 0x90, 0x85, 0xC9, 0xE0, 0x30, 0xE4,
+0x05, 0x75, 0x10, 0x10, 0x80, 0x1F, 0x90, 0x85, 0xC2, 0xE0, 0x13, 0x13, 0x54, 0x3F, 0x20, 0xE0,
+0x05, 0x75, 0x10, 0x20, 0x80, 0x0F, 0x90, 0x86, 0x71, 0xE0, 0x60, 0x05, 0x75, 0x10, 0x80, 0x80,
+0x04, 0xB1, 0x58, 0x80, 0x0E, 0x90, 0x01, 0xB9, 0x74, 0x04, 0xF0, 0x90, 0x01, 0xB8, 0xE5, 0x10,
+0xF0, 0x7F, 0x00, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90, 0x01, 0xB8, 0xE4, 0xF0, 0x7F, 0x01, 0x22,
+0xAC, 0x07, 0x90, 0x92, 0xC0, 0xE0, 0xF9, 0x30, 0xE0, 0x02, 0xC1, 0x13, 0x90, 0x85, 0xC1, 0xE0,
+0x30, 0xE0, 0x16, 0x90, 0x85, 0xFB, 0xE0, 0x24, 0x04, 0x90, 0x85, 0xDA, 0xF0, 0x90, 0x85, 0xFB,
+0xE0, 0x24, 0x03, 0x90, 0x85, 0xD9, 0xF0, 0x80, 0x0D, 0x90, 0x85, 0xDA, 0x74, 0x02, 0xF0, 0x90,
+0x85, 0xD9, 0x14, 0xF0, 0x0B, 0x0B, 0x90, 0x85, 0xD9, 0xE0, 0xFA, 0x90, 0x85, 0xD8, 0xE0, 0xD3,
+0x9A, 0x50, 0x0E, 0x90, 0x85, 0xCD, 0xEB, 0xF0, 0x90, 0x85, 0xDA, 0xE0, 0xC3, 0x9D, 0x2C, 0x80,
+0x11, 0xC3, 0xED, 0x9A, 0x2B, 0x90, 0x85, 0xCD, 0xF0, 0x90, 0x85, 0xD9, 0xE0, 0xFF, 0xA3, 0xE0,
+0xC3, 0x9F, 0x90, 0x85, 0xDD, 0xF0, 0x90, 0x85, 0xDA, 0xE0, 0xFF, 0x24, 0x0A, 0xFD, 0xE4, 0x33,
+0xFC, 0x90, 0x85, 0xDD, 0xD1, 0x1B, 0x40, 0x04, 0xEF, 0x24, 0x0A, 0xF0, 0x90, 0x85, 0xDD, 0xE0,
+0xFF, 0x24, 0x23, 0xFD, 0xE4, 0x33, 0xFC, 0x90, 0x85, 0xCD, 0xD1, 0x1B, 0x40, 0x04, 0xEF, 0x24,
+0x23, 0xF0, 0x90, 0x85, 0xDD, 0xE0, 0xFF, 0x7E, 0x00, 0x90, 0x85, 0xD1, 0xEE, 0xF0, 0xA3, 0xEF,
+0xF0, 0x90, 0x05, 0x58, 0xE0, 0x6F, 0x70, 0x01, 0xE4, 0x60, 0x03, 0x12, 0xA7, 0xCC, 0xE9, 0x54,
+0xFD, 0x80, 0x03, 0xE9, 0x44, 0x02, 0x90, 0x92, 0xC0, 0xF0, 0x22, 0xE0, 0xD3, 0x9D, 0xEC, 0x64,
+0x80, 0xF8, 0x74, 0x80, 0x98, 0x22, 0x90, 0x92, 0xFA, 0x74, 0x04, 0xF0, 0x14, 0xF0, 0xA3, 0xF0,
+0xA3, 0xE4, 0xF0, 0xA3, 0x74, 0x64, 0xF0, 0xA3, 0x74, 0x05, 0xF0, 0xA3, 0xF0, 0x22, 0x12, 0xC5,
+0x70, 0x40, 0x2E, 0x90, 0x85, 0xDF, 0xE0, 0x04, 0xF0, 0x90, 0x92, 0xFF, 0xE0, 0xFF, 0x90, 0x85,
+0xDF, 0xE0, 0xD3, 0x9F, 0x50, 0x1B, 0x90, 0x85, 0xD7, 0xE0, 0x04, 0x12, 0x9E, 0xE5, 0x12, 0x9E,
+0xDE, 0x90, 0x85, 0xDE, 0xF0, 0xFB, 0x90, 0x85, 0xD7, 0xE0, 0xFF, 0xA3, 0xE0, 0xFD, 0x12, 0x51,
+0x7D, 0x22, 0x90, 0x92, 0x04, 0xE0, 0x30, 0xE0, 0x0A, 0x90, 0x01, 0x3B, 0xE0, 0x30, 0xE4, 0x03,
+0x12, 0xA3, 0x04, 0x22, 0x90, 0x93, 0x98, 0xEF, 0xF0, 0x90, 0x84, 0xC5, 0xE0, 0x64, 0x02, 0x70,
+0x23, 0x90, 0x93, 0x98, 0xE0, 0xFD, 0x64, 0x01, 0x70, 0x36, 0x12, 0xBC, 0x10, 0x90, 0x86, 0x76,
+0xE0, 0x12, 0x8F, 0x66, 0x30, 0xE0, 0x09, 0x90, 0x01, 0x4D, 0xE0, 0x64, 0x80, 0xF0, 0x80, 0x20,
+0xAF, 0x05, 0x80, 0x19, 0x90, 0x01, 0x00, 0x74, 0xFF, 0xF0, 0x7F, 0x64, 0x7E, 0x00, 0x12, 0x7C,
+0x9F, 0x90, 0x06, 0x90, 0xE0, 0x44, 0x01, 0xF0, 0x90, 0x93, 0x98, 0xE0, 0xFF, 0x12, 0x2A, 0x87,
+0x90, 0x88, 0xE1, 0xE0, 0x54, 0xFE, 0xF0, 0x02, 0xA7, 0xAC, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0,
+0xD0, 0xE4, 0xFD, 0x7F, 0x8F, 0x12, 0x7B, 0x3E, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xD1, 0xDA, 0x12,
+0x77, 0x89, 0x90, 0x01, 0x3F, 0x74, 0x04, 0xF0, 0x90, 0x84, 0xC5, 0xE0, 0xFF, 0xB4, 0x01, 0x07,
+0x90, 0xFD, 0x00, 0xE0, 0x54, 0xEF, 0xF0, 0xEF, 0xB4, 0x01, 0x07, 0x90, 0xFE, 0x10, 0xE0, 0x54,
+0xFB, 0xF0, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x12, 0xD9, 0x94, 0x20, 0xE0, 0x05,
+0xD1, 0xED, 0x02, 0xD8, 0x01, 0x12, 0x8B, 0xD1, 0x12, 0xA7, 0x57, 0x90, 0x86, 0x75, 0x12, 0xA7,
+0x2C, 0x54, 0x04, 0xFD, 0xEF, 0x54, 0xFB, 0x12, 0xD9, 0xF2, 0x12, 0xA7, 0x94, 0x12, 0xA7, 0x3A,
+0x54, 0x10, 0xFD, 0xEF, 0x54, 0xEF, 0x12, 0xD9, 0xF2, 0x12, 0xA7, 0x9C, 0x12, 0xA7, 0x3A, 0x54,
+0x40, 0xFD, 0xEF, 0x54, 0xBF, 0x12, 0xD9, 0xF2, 0x12, 0xA7, 0xA4, 0x12, 0x8F, 0xB9, 0x54, 0x80,
+0xFF, 0x90, 0x86, 0x76, 0xE0, 0x54, 0x7F, 0x4F, 0xF0, 0x12, 0xDA, 0x69, 0x30, 0xE0, 0x07, 0x90,
+0x06, 0x90, 0xE0, 0x44, 0x04, 0xF0, 0x12, 0x8B, 0xD1, 0x12, 0x02, 0xF6, 0x13, 0x13, 0x13, 0x54,
+0x1F, 0x30, 0xE0, 0x07, 0x90, 0x06, 0x90, 0xE0, 0x44, 0x08, 0xF0, 0x90, 0x84, 0xC5, 0xE0, 0xB4,
+0x02, 0x0A, 0x90, 0x86, 0x76, 0xE0, 0x12, 0x8F, 0x66, 0x20, 0xE0, 0x42, 0x12, 0x8F, 0xBA, 0x54,
+0x7F, 0xFF, 0x90, 0x86, 0x76, 0xE0, 0x54, 0x80, 0x12, 0x8E, 0x8E, 0x90, 0x86, 0x77, 0xF0, 0x12,
+0x8F, 0xCD, 0xFF, 0x54, 0x01, 0xFE, 0x90, 0x86, 0x78, 0x12, 0xA7, 0x4F, 0x54, 0xFE, 0xFF, 0xEE,
+0x54, 0x01, 0x4F, 0xF0, 0x90, 0x86, 0x76, 0xE0, 0x54, 0x7F, 0xFF, 0x90, 0x86, 0x75, 0xE0, 0xFE,
+0xC4, 0x13, 0x54, 0x07, 0x7D, 0x00, 0x20, 0xE0, 0x02, 0x7D, 0x01, 0x12, 0x54, 0x9F, 0x90, 0x84,
+0xC5, 0xE0, 0xB4, 0x01, 0x07, 0x90, 0xFE, 0x10, 0xE0, 0x44, 0x04, 0xF0, 0x90, 0x87, 0x4A, 0x74,
+0x05, 0xF0, 0x7E, 0x00, 0x7F, 0x08, 0x7D, 0x00, 0x7B, 0x01, 0x7A, 0x87, 0x79, 0x95, 0x12, 0x06,
+0xDE, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xE4, 0xFD, 0xFC, 0x90, 0x88, 0xD8, 0xE0, 0xFF, 0x11, 0xA6,
+0xAB, 0x05, 0x74, 0x01, 0x2B, 0x11, 0xB9, 0x2B, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0x11, 0xAE, 0x90,
+0x88, 0x76, 0xF0, 0xA3, 0xEF, 0xF0, 0x74, 0x03, 0x2B, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83,
+0xE0, 0xFE, 0x74, 0x02, 0x2B, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0x11, 0x9D, 0x90, 0x88, 0x78, 0xF0,
+0xA3, 0xEF, 0xF0, 0x74, 0x05, 0x2B, 0x12, 0xAF, 0xC6, 0xE0, 0xFE, 0x74, 0x04, 0x2B, 0xF5, 0x82,
+0xE4, 0x34, 0xFC, 0x11, 0x9D, 0x90, 0x88, 0x7A, 0xF0, 0xA3, 0xEF, 0xF0, 0x74, 0x07, 0x2B, 0xF5,
0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0xFE, 0x74, 0x06, 0x2B, 0xF5, 0x82, 0xE4, 0x34, 0xFC,
-0x31, 0xFD, 0x90, 0x88, 0x7C, 0xF0, 0xA3, 0xEF, 0xF0, 0x74, 0x09, 0x2B, 0xF5, 0x82, 0xE4, 0x34,
+0x11, 0x9D, 0x90, 0x88, 0x7C, 0xF0, 0xA3, 0xEF, 0xF0, 0x74, 0x09, 0x2B, 0xF5, 0x82, 0xE4, 0x34,
0xFC, 0xF5, 0x83, 0xE0, 0xFE, 0x74, 0x08, 0x2B, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0,
0x24, 0x00, 0xFF, 0xEC, 0x3E, 0x90, 0x88, 0x7E, 0xF0, 0xA3, 0xEF, 0xF0, 0x22, 0xF5, 0x83, 0xE0,
-0x24, 0x00, 0xFF, 0xEA, 0x3E, 0x22, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0x22, 0xF5, 0x82,
-0xE4, 0x34, 0xFC, 0xF5, 0x83, 0x22, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0xFE, 0x74,
-0x00, 0x22, 0xAD, 0x07, 0x90, 0x88, 0x80, 0xE4, 0x75, 0xF0, 0x01, 0x12, 0x07, 0x0A, 0x90, 0x88,
-0x80, 0xE0, 0xFF, 0xAE, 0x05, 0x74, 0x04, 0x2E, 0x51, 0xF3, 0xEF, 0xF0, 0x90, 0x88, 0x80, 0xA3,
-0xE0, 0xFF, 0x74, 0x05, 0x2E, 0x51, 0x06, 0xEF, 0xF0, 0x22, 0xE4, 0x90, 0x92, 0x59, 0xF0, 0xA3,
-0xF0, 0x90, 0x06, 0x32, 0xE0, 0x44, 0x20, 0xF0, 0x12, 0x75, 0xE4, 0xEF, 0x64, 0x01, 0x60, 0x02,
-0x41, 0xE9, 0x90, 0x88, 0xD9, 0xE0, 0xFF, 0x90, 0x93, 0x0A, 0x74, 0x0A, 0xF0, 0x7B, 0x08, 0x7D,
-0x01, 0x12, 0xBF, 0xCB, 0x90, 0x92, 0x56, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0x90, 0x92, 0x56, 0xA3,
-0x11, 0x91, 0xFD, 0x74, 0x2C, 0x2E, 0x51, 0xFB, 0x90, 0x92, 0x58, 0xEF, 0xF0, 0x90, 0x92, 0x56,
-0xA3, 0xE0, 0x24, 0x28, 0xF9, 0xE4, 0x34, 0xFC, 0xFA, 0x7B, 0x01, 0xE4, 0xFD, 0x12, 0x52, 0x21,
-0x90, 0x92, 0x58, 0xE0, 0xFF, 0x90, 0x92, 0x57, 0xE0, 0x2F, 0xFF, 0x90, 0x92, 0x56, 0xE0, 0x34,
-0x00, 0xCF, 0x24, 0x30, 0xCF, 0x34, 0x00, 0xFE, 0x90, 0x92, 0x59, 0xF0, 0xA3, 0xEF, 0xF0, 0x51,
-0x22, 0x51, 0xEA, 0x90, 0x88, 0xD9, 0xE0, 0xFB, 0xE4, 0xFF, 0x12, 0x15, 0x44, 0x51, 0xEA, 0x90,
-0x88, 0xD5, 0xE0, 0xFB, 0x7F, 0x11, 0x12, 0x15, 0x44, 0x90, 0x04, 0x1F, 0x74, 0x20, 0xF0, 0x90,
-0x88, 0x88, 0xE4, 0x75, 0xF0, 0x01, 0x12, 0x07, 0x0A, 0x22, 0x90, 0x92, 0x59, 0xE0, 0xFC, 0xA3,
-0xE0, 0xFD, 0x22, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0x22, 0xF5, 0x82, 0xE4, 0x34, 0xFC,
-0xF5, 0x83, 0xE0, 0xFB, 0x02, 0x5D, 0x98, 0x12, 0x7B, 0x2A, 0x7C, 0x00, 0xAD, 0x07, 0x22, 0xD3,
-0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x92, 0xF5, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0x12, 0x70,
-0x61, 0x90, 0x92, 0xFF, 0x12, 0x04, 0xEB, 0x90, 0x92, 0xF7, 0x12, 0x87, 0x58, 0x12, 0x04, 0xA7,
-0x90, 0x92, 0xFF, 0x12, 0x87, 0x64, 0x12, 0x87, 0x3E, 0xC0, 0x04, 0xC0, 0x05, 0xC0, 0x06, 0xC0,
-0x07, 0x90, 0x92, 0xF7, 0x12, 0x87, 0x58, 0x90, 0x92, 0xFB, 0x12, 0x87, 0x64, 0x12, 0x87, 0x3E,
-0xD0, 0x03, 0xD0, 0x02, 0xD0, 0x01, 0xD0, 0x00, 0x12, 0x87, 0x4B, 0x90, 0x93, 0x03, 0x12, 0x04,
-0xEB, 0x90, 0x93, 0x03, 0x12, 0x87, 0x58, 0x90, 0x91, 0x66, 0x12, 0x04, 0xEB, 0x90, 0x92, 0xF5,
-0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x12, 0x71, 0x18, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x7E, 0x00, 0x7F,
-0xAC, 0x7D, 0x00, 0x7B, 0x01, 0x7A, 0x85, 0x79, 0xC1, 0x12, 0x06, 0xDE, 0x91, 0x4C, 0x12, 0x06,
-0xDE, 0x90, 0x85, 0xC4, 0x74, 0x02, 0xF0, 0x90, 0x85, 0xCB, 0x14, 0xF0, 0xA3, 0xF0, 0xA3, 0x74,
-0x0A, 0xF0, 0x90, 0x85, 0xD1, 0xE4, 0xF0, 0xA3, 0x74, 0x02, 0x91, 0x3C, 0x91, 0x59, 0xE4, 0xFD,
-0xFF, 0x12, 0x57, 0x82, 0x7D, 0x0C, 0x7F, 0x02, 0x12, 0x57, 0x82, 0x7D, 0x0C, 0x7F, 0x01, 0x12,
-0x57, 0x82, 0x90, 0x84, 0xC5, 0xE0, 0xFF, 0xB4, 0x01, 0x08, 0x90, 0x85, 0xD0, 0x74, 0xDD, 0xF0,
-0x80, 0x0F, 0xEF, 0x90, 0x85, 0xD0, 0xB4, 0x03, 0x05, 0x74, 0xD4, 0xF0, 0x80, 0x03, 0x74, 0x40,
-0xF0, 0x7F, 0x2C, 0x12, 0x7B, 0x51, 0xEF, 0x54, 0x0F, 0xFF, 0xBF, 0x05, 0x08, 0x90, 0x85, 0xFB,
-0x74, 0x02, 0xF0, 0x80, 0x05, 0xE4, 0x90, 0x85, 0xFB, 0xF0, 0x90, 0x86, 0x6D, 0x74, 0x03, 0xF0,
-0xA3, 0x74, 0x0F, 0xF0, 0xA3, 0xE0, 0x54, 0x01, 0x44, 0x28, 0xF0, 0xA3, 0x74, 0x07, 0x91, 0x3C,
-0xE4, 0x90, 0x85, 0xD7, 0xF0, 0xA3, 0xF0, 0x7F, 0x01, 0x12, 0x69, 0x33, 0x90, 0x05, 0x58, 0x74,
-0x02, 0xF0, 0x90, 0x06, 0x04, 0xE0, 0x54, 0x7F, 0xF0, 0x90, 0x06, 0x0A, 0xE0, 0x54, 0xF8, 0xF0,
-0xE4, 0xFD, 0xFF, 0x12, 0x90, 0xDE, 0xE4, 0x90, 0x86, 0x71, 0xF0, 0x22, 0xF0, 0x90, 0x85, 0xFB,
-0xE0, 0x24, 0x04, 0x90, 0x85, 0xDD, 0xF0, 0xA3, 0x74, 0x0A, 0xF0, 0x22, 0x7E, 0x00, 0x7F, 0x04,
-0x7D, 0x00, 0x7B, 0x01, 0x7A, 0x92, 0x79, 0x79, 0x22, 0x90, 0x92, 0xC5, 0x74, 0x04, 0xF0, 0x14,
-0xF0, 0xA3, 0xF0, 0xA3, 0xE4, 0xF0, 0xA3, 0x74, 0x64, 0xF0, 0xA3, 0x74, 0x05, 0xF0, 0xA3, 0xF0,
-0x22, 0xAC, 0x07, 0x90, 0x92, 0x8B, 0xE0, 0xF9, 0x30, 0xE0, 0x02, 0xA1, 0x25, 0x90, 0x85, 0xC1,
-0xE0, 0x30, 0xE0, 0x16, 0x90, 0x85, 0xFB, 0xE0, 0x24, 0x04, 0x90, 0x85, 0xDA, 0xF0, 0x90, 0x85,
-0xFB, 0xE0, 0x24, 0x03, 0x90, 0x85, 0xD9, 0xF0, 0x80, 0x0D, 0x90, 0x85, 0xDA, 0x74, 0x02, 0xF0,
-0x90, 0x85, 0xD9, 0x14, 0xF0, 0x0B, 0x0B, 0x90, 0x85, 0xD9, 0xE0, 0xFA, 0x90, 0x85, 0xD8, 0xE0,
-0xD3, 0x9A, 0x50, 0x0E, 0x90, 0x85, 0xCD, 0xEB, 0xF0, 0x90, 0x85, 0xDA, 0xE0, 0xC3, 0x9D, 0x2C,
-0x80, 0x11, 0xC3, 0xED, 0x9A, 0x2B, 0x90, 0x85, 0xCD, 0xF0, 0x90, 0x85, 0xD9, 0xE0, 0xFF, 0xA3,
-0xE0, 0xC3, 0x9F, 0x90, 0x85, 0xDD, 0xF0, 0x90, 0x85, 0xDA, 0xE0, 0xFF, 0x24, 0x0A, 0xFD, 0xE4,
-0x33, 0xFC, 0x90, 0x85, 0xDD, 0xB1, 0x2D, 0x98, 0x40, 0x04, 0xEF, 0x24, 0x0A, 0xF0, 0x90, 0x85,
-0xDD, 0xE0, 0xFF, 0x24, 0x23, 0xFD, 0xE4, 0x33, 0xFC, 0x90, 0x85, 0xCD, 0xB1, 0x2D, 0x98, 0x40,
-0x04, 0xEF, 0x24, 0x23, 0xF0, 0x90, 0x85, 0xDD, 0xE0, 0xFF, 0x7E, 0x00, 0x90, 0x85, 0xD1, 0xEE,
-0xF0, 0xA3, 0xEF, 0xF0, 0x90, 0x05, 0x58, 0xE0, 0x6F, 0x70, 0x01, 0xE4, 0x60, 0x02, 0xB1, 0x37,
-0xE9, 0x54, 0xFD, 0x80, 0x03, 0xE9, 0x44, 0x02, 0x90, 0x92, 0x8B, 0xF0, 0x22, 0xE0, 0xD3, 0x9D,
-0xEC, 0x64, 0x80, 0xF8, 0x74, 0x80, 0x22, 0x90, 0x85, 0xD1, 0xA3, 0xE0, 0x90, 0x05, 0x58, 0xF0,
-0x22, 0x12, 0xA7, 0xAE, 0x40, 0x2B, 0x90, 0x85, 0xDF, 0xE0, 0x04, 0xF0, 0x90, 0x92, 0xCA, 0xE0,
-0xFF, 0x90, 0x85, 0xDF, 0xE0, 0xD3, 0x9F, 0x50, 0x18, 0x90, 0x85, 0xD7, 0xE0, 0x04, 0x12, 0xA2,
-0x50, 0x90, 0x85, 0xDE, 0xF0, 0xFB, 0x90, 0x85, 0xD7, 0xE0, 0xFF, 0xA3, 0xE0, 0xFD, 0x12, 0x51,
-0x7D, 0x22, 0x90, 0x92, 0x70, 0xEF, 0xF0, 0x90, 0x84, 0xC5, 0xE0, 0x64, 0x02, 0x70, 0x1F, 0x90,
-0x92, 0x70, 0xE0, 0xFD, 0x64, 0x01, 0x70, 0x32, 0x12, 0xAF, 0x21, 0x12, 0x8D, 0x55, 0x30, 0xE0,
-0x09, 0x90, 0x01, 0x4D, 0xE0, 0x64, 0x80, 0xF0, 0x80, 0x20, 0xAF, 0x05, 0x80, 0x19, 0x90, 0x01,
-0x00, 0x74, 0xFF, 0xF0, 0x7F, 0x64, 0x7E, 0x00, 0x12, 0x7C, 0x9F, 0x90, 0x06, 0x90, 0xE0, 0x44,
-0x01, 0xF0, 0x90, 0x92, 0x70, 0xE0, 0xFF, 0x12, 0x2A, 0x87, 0x90, 0x88, 0xE1, 0xE0, 0x54, 0xFE,
-0xF0, 0x90, 0x86, 0x72, 0xE0, 0x54, 0xBF, 0xF0, 0x22, 0x90, 0x92, 0x71, 0xEE, 0xF0, 0xA3, 0xEF,
-0xF0, 0xE4, 0x90, 0x92, 0x75, 0xF0, 0x7D, 0x09, 0x12, 0x55, 0x36, 0xEF, 0x64, 0x06, 0x70, 0x2A,
-0xD1, 0x5E, 0x7D, 0x14, 0x12, 0x55, 0x36, 0xEF, 0x70, 0x20, 0xD1, 0x5E, 0x7D, 0x15, 0x12, 0x55,
-0x36, 0xEF, 0x64, 0x50, 0x70, 0x14, 0xD1, 0x5E, 0x7D, 0x21, 0x12, 0x55, 0x36, 0xEF, 0x20, 0xE0,
-0x03, 0x30, 0xE2, 0x06, 0x90, 0x92, 0x75, 0x74, 0x01, 0xF0, 0x90, 0x86, 0x73, 0xE0, 0x13, 0x13,
-0x54, 0x3F, 0x30, 0xE0, 0x3F, 0xD1, 0x5E, 0x7D, 0x09, 0x12, 0x55, 0x36, 0xEF, 0x64, 0x11, 0x70,
-0x33, 0x90, 0x92, 0x72, 0xE0, 0x24, 0x14, 0xFF, 0x90, 0x92, 0x71, 0xE0, 0x34, 0x00, 0xFE, 0x90,
-0x92, 0x73, 0xF0, 0xA3, 0xEF, 0xF0, 0x7D, 0x02, 0x12, 0x55, 0x36, 0xEF, 0x70, 0x16, 0x90, 0x92,
-0x73, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x7D, 0x03, 0x12, 0x55, 0x36, 0xBF, 0x89, 0x06, 0x90, 0x92,
-0x75, 0x74, 0x01, 0xF0, 0x90, 0x92, 0x75, 0xE0, 0xFF, 0xD1, 0x67, 0xEF, 0xF0, 0x22, 0x90, 0x92,
-0x71, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x22, 0x90, 0x84, 0xBF, 0xA3, 0xE0, 0x24, 0x7F, 0xF5, 0x82,
-0xE4, 0x34, 0x82, 0xF5, 0x83, 0x22, 0xD1, 0xBC, 0xA3, 0xED, 0xF0, 0x90, 0x88, 0x7C, 0xE0, 0x70,
-0x02, 0xA3, 0xE0, 0x60, 0x23, 0xE4, 0x90, 0x92, 0x36, 0xF0, 0xD1, 0xC5, 0x50, 0x1D, 0xF1, 0x09,
-0x24, 0x8A, 0xF5, 0x82, 0xE4, 0x34, 0x88, 0xF5, 0x83, 0xE0, 0x6F, 0x60, 0x03, 0x7F, 0x00, 0x22,
-0x90, 0x92, 0x36, 0xE0, 0x04, 0xF0, 0x80, 0xE2, 0x7F, 0x00, 0x22, 0x90, 0x06, 0x32, 0xE0, 0x44,
-0x40, 0xF0, 0xE4, 0x90, 0x88, 0x88, 0xF0, 0xA3, 0xF0, 0x7F, 0x01, 0x22, 0x90, 0x92, 0x33, 0xEE,
-0xF0, 0xA3, 0xEF, 0xF0, 0x22, 0x90, 0x92, 0x36, 0xE0, 0xFD, 0xC3, 0x94, 0x02, 0x22, 0xD1, 0xBC,
-0xA3, 0xED, 0xF0, 0xE4, 0xA3, 0xF0, 0xD1, 0xC5, 0x50, 0x17, 0xF1, 0x09, 0x24, 0xAA, 0xF5, 0x82,
-0xE4, 0x34, 0x88, 0xF5, 0x83, 0xE0, 0xB5, 0x07, 0x1D, 0x90, 0x92, 0x36, 0xE0, 0x04, 0xF0, 0x80,
-0xE5, 0x90, 0x06, 0x32, 0xE0, 0x44, 0x80, 0xF0, 0x90, 0x01, 0xC7, 0x74, 0x30, 0xF0, 0x7F, 0x01,
-0x12, 0x5F, 0xE9, 0x7F, 0x01, 0x22, 0x7F, 0x00, 0x22, 0x90, 0x92, 0x33, 0xE0, 0xFE, 0xA3, 0xE0,
-0xFF, 0xED, 0x24, 0x1C, 0xFD, 0x12, 0x55, 0x36, 0x90, 0x92, 0x36, 0xE0, 0x22, 0xD1, 0xBC, 0x24,
-0x16, 0xFF, 0xE4, 0x3E, 0xFE, 0xE4, 0xFD, 0x12, 0x55, 0x36, 0x90, 0x88, 0x86, 0xA3, 0xE0, 0xB5,
-0x07, 0x19, 0x90, 0x92, 0x34, 0xE0, 0x24, 0x16, 0xF1, 0x51, 0x7D, 0x01, 0x12, 0x55, 0x36, 0xEF,
-0xFD, 0x90, 0x88, 0x86, 0xE0, 0x6D, 0x70, 0x01, 0xE4, 0x60, 0x03, 0x7F, 0x00, 0x22, 0x7F, 0x01,
-0x22, 0xFF, 0x90, 0x92, 0x33, 0xE0, 0x34, 0x00, 0xFE, 0x22, 0xD1, 0xBC, 0xE4, 0xA3, 0xF0, 0x90,
-0x92, 0x35, 0xE0, 0xFD, 0xC3, 0x94, 0x04, 0x50, 0x27, 0x90, 0x92, 0x34, 0xE0, 0x24, 0x10, 0xF1,
-0x51, 0x12, 0x55, 0x36, 0x90, 0x92, 0x35, 0xE0, 0x24, 0x82, 0xF5, 0x82, 0xE4, 0x34, 0x88, 0xF5,
-0x83, 0xE0, 0x6F, 0x60, 0x03, 0x7F, 0x00, 0x22, 0x90, 0x92, 0x35, 0xE0, 0x04, 0xF0, 0x80, 0xCF,
-0x7F, 0x01, 0x22, 0xE5, 0x64, 0x25, 0xE0, 0x24, 0xF5, 0xF5, 0x82, 0xE4, 0x34, 0x82, 0xF5, 0x83,
-0xE4, 0x93, 0xFF, 0x74, 0x01, 0x93, 0x90, 0x92, 0x41, 0xCF, 0xF0, 0xA3, 0xEF, 0xF0, 0x90, 0x92,
-0x3F, 0xE5, 0x66, 0xF0, 0xA3, 0xE5, 0x67, 0xF0, 0x22, 0x90, 0x05, 0x63, 0xE0, 0x90, 0x92, 0x94,
-0xF0, 0x90, 0x05, 0x62, 0xE0, 0x90, 0x92, 0x95, 0xF0, 0x90, 0x05, 0x61, 0xE0, 0x90, 0x92, 0x96,
-0xF0, 0x90, 0x05, 0x60, 0xE0, 0x90, 0x92, 0x97, 0xF0, 0x90, 0x92, 0x8B, 0xE0, 0x44, 0x01, 0xF0,
-0x22, 0x90, 0x92, 0x6D, 0xEE, 0xF0, 0xFC, 0xA3, 0xEF, 0xF0, 0xFD, 0x90, 0x92, 0x6B, 0xE0, 0xFF,
-0x12, 0x65, 0x61, 0x90, 0x92, 0x6D, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x02, 0x50, 0xD7, 0x90, 0x01,
-0x34, 0x74, 0x40, 0xF0, 0xFD, 0xE4, 0xFF, 0x12, 0x7C, 0xA9, 0x43, 0x5E, 0x08, 0x22, 0xE5, 0x64,
-0x25, 0xE0, 0x24, 0xF5, 0xF5, 0x82, 0xE4, 0x34, 0x82, 0xF5, 0x83, 0x22, 0xC4, 0x54, 0xF0, 0x24,
-0x01, 0xF5, 0x82, 0xE4, 0x34, 0x81, 0xF5, 0x83, 0xE0, 0x22, 0xE0, 0x90, 0x01, 0xBA, 0xF0, 0x90,
-0x85, 0xC7, 0xE0, 0x90, 0x01, 0xBB, 0x22, 0x12, 0x02, 0xF6, 0xFF, 0x54, 0x01, 0xFE, 0x22, 0xF0,
-0x74, 0xCC, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83, 0x22, 0x74, 0xBC, 0x25, 0x62, 0xF5,
-0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83, 0x22, 0x90, 0x92, 0x41, 0xE4, 0xF0, 0xA3, 0x22, 0x90, 0x92,
-0x07, 0x12, 0x87, 0x79, 0x02, 0x02, 0xF6, 0x90, 0x92, 0x33, 0x12, 0x87, 0x70, 0x02, 0x03, 0xED,
-0xE0, 0xFF, 0xA3, 0xE0, 0x90, 0x92, 0x41, 0xCF, 0x22, 0x54, 0x08, 0xFE, 0xEF, 0x54, 0xF7, 0x4E,
-0x22, 0x54, 0x20, 0xFE, 0xEF, 0x54, 0xDF, 0x4E, 0x22, 0x54, 0x80, 0xFE, 0xEF, 0x54, 0x7F, 0x4E,
-0x22, 0x12, 0x02, 0xF6, 0x13, 0x13, 0x54, 0x3F, 0x22, 0xE5, 0x68, 0xF0, 0xA3, 0xE5, 0x69, 0xF0,
-0x22, 0x90, 0x00, 0x02, 0x12, 0x04, 0x18, 0xFF, 0x22, 0x90, 0x85, 0xC1, 0xE0, 0x54, 0xF7, 0xF0,
-0x22, 0x00, 0xE1, 0x40,
+0x24, 0x00, 0xFF, 0xEA, 0x3E, 0x22, 0x12, 0x7B, 0x2A, 0x7C, 0x00, 0xAD, 0x07, 0x22, 0xF5, 0x83,
+0xE0, 0x7A, 0x00, 0x24, 0x00, 0xFF, 0xEA, 0x3E, 0x22, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83,
+0xE0, 0xFE, 0x74, 0x00, 0x22, 0x90, 0x93, 0xED, 0xA3, 0xE0, 0xFF, 0x90, 0x93, 0xFB, 0x74, 0x03,
+0xF0, 0x7B, 0x06, 0x7D, 0x01, 0x12, 0xAE, 0x2E, 0x90, 0x93, 0xF1, 0xEE, 0xF0, 0xFC, 0xA3, 0xEF,
+0xF0, 0xFD, 0x90, 0x93, 0xF0, 0xE0, 0xFF, 0x74, 0x10, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5,
+0x83, 0xEF, 0xF0, 0x90, 0x93, 0xEF, 0xE0, 0xFF, 0x02, 0x65, 0x61, 0xE5, 0x7A, 0x75, 0xF0, 0x13,
+0xA4, 0x24, 0x37, 0xF5, 0x82, 0xE4, 0x34, 0x92, 0xF5, 0x83, 0x22, 0x90, 0x05, 0x63, 0xE0, 0x90,
+0x92, 0xC9, 0xF0, 0x90, 0x05, 0x62, 0xE0, 0x90, 0x92, 0xCA, 0xF0, 0x90, 0x05, 0x61, 0xE0, 0x90,
+0x92, 0xCB, 0xF0, 0x90, 0x05, 0x60, 0xE0, 0x90, 0x92, 0xCC, 0xF0, 0x90, 0x92, 0xC0, 0xE0, 0x44,
+0x01, 0x22, 0x90, 0x92, 0x0A, 0xE0, 0xFF, 0xC3, 0x13, 0xFE, 0xEF, 0x54, 0xF1, 0xFF, 0xEE, 0x04,
+0x54, 0x07, 0x25, 0xE0, 0x4F, 0xF0, 0xA3, 0xE0, 0xFF, 0x90, 0x92, 0x0A, 0xE0, 0xFE, 0xC3, 0x13,
+0x54, 0x07, 0x22, 0x12, 0x05, 0x28, 0xE4, 0xF0, 0xA3, 0xF0, 0x75, 0xF0, 0x12, 0xEF, 0x22, 0xFD,
+0x75, 0xF0, 0x0E, 0xA4, 0x24, 0x0D, 0xF5, 0x82, 0xE4, 0x34, 0x92, 0x22, 0x75, 0xF0, 0x08, 0xA4,
+0x24, 0x00, 0xF5, 0x82, 0xE4, 0x34, 0x82, 0x22, 0x90, 0x93, 0x99, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF,
+0x22, 0x9D, 0xFD, 0xE4, 0x94, 0x00, 0xFC, 0x74, 0x06, 0x2D, 0xF5, 0x82, 0x74, 0x93, 0x3C, 0xF5,
+0x83, 0xEE, 0xF0, 0x22, 0x90, 0x93, 0x06, 0x12, 0x87, 0x79, 0x02, 0x02, 0xF6, 0x9D, 0xFD, 0x74,
+0x05, 0x94, 0x00, 0x8D, 0x82, 0xF5, 0x83, 0xE0, 0xFE, 0xEF, 0xFD, 0xC3, 0x22, 0x75, 0xF0, 0x13,
+0xA4, 0x24, 0x3B, 0xF5, 0x82, 0xE4, 0x34, 0x92, 0xF5, 0x83, 0xE0, 0x22, 0xE5, 0x65, 0x25, 0xE0,
+0x24, 0xF5, 0xF5, 0x82, 0xE4, 0x34, 0x82, 0xF5, 0x83, 0x22, 0xEF, 0xC4, 0x54, 0xF0, 0x24, 0x03,
+0xF5, 0x82, 0xE4, 0x34, 0x81, 0xF5, 0x83, 0x22, 0xE0, 0x90, 0x01, 0xBA, 0xF0, 0x90, 0x85, 0xC7,
+0xE0, 0x90, 0x01, 0xBB, 0x22, 0x90, 0x92, 0x72, 0xE0, 0x44, 0x10, 0xF0, 0x90, 0x93, 0x80, 0xE0,
+0xFF, 0x22, 0x4D, 0xFF, 0x90, 0x86, 0x75, 0xF0, 0xEE, 0x22, 0x12, 0x05, 0x28, 0xE0, 0xFC, 0xA3,
+0xE0, 0xF5, 0x82, 0x8C, 0x83, 0x22, 0xF0, 0x74, 0xCC, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5,
+0x83, 0x22, 0x74, 0xBC, 0x25, 0x63, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83, 0x22, 0xF0, 0x90,
+0x92, 0xA8, 0xE0, 0x54, 0x7F, 0xF0, 0xA3, 0xE0, 0x22, 0x7F, 0x84, 0x7E, 0x08, 0x12, 0x96, 0xA1,
+0x90, 0x93, 0xCB, 0x22, 0x90, 0x94, 0x02, 0xE0, 0xFF, 0x7D, 0x48, 0x02, 0x90, 0xDE, 0xF0, 0x90,
+0x92, 0x3A, 0xE0, 0x54, 0x07, 0xFF, 0x64, 0x03, 0x22, 0x12, 0x02, 0xF6, 0xC4, 0x54, 0x0F, 0x22,
+0x90, 0x93, 0xF7, 0xE0, 0xFF, 0x90, 0x93, 0xF5, 0xE0, 0x22, 0xFF, 0x12, 0x02, 0xF6, 0x54, 0x0F,
+0xFD, 0x22, 0x7F, 0x14, 0x7E, 0x00, 0x02, 0x7C, 0x9F, 0x12, 0x02, 0xF6, 0x13, 0x13, 0x54, 0x3F,
+0x22, 0x90, 0x05, 0x22, 0xE0, 0x90, 0x93, 0x80, 0x22, 0xF9, 0xE4, 0x3A, 0xFA, 0x02, 0x02, 0xF6,
+0x25, 0xE0, 0x25, 0xE0, 0xFE, 0xEF, 0x4E, 0x22, 0xE5, 0x69, 0xF0, 0xA3, 0xE5, 0x6A, 0xF0, 0x22,
+0x90, 0x00, 0x02, 0x12, 0x04, 0x18, 0xFF, 0x22, 0x7D, 0x20, 0xE4, 0xFF, 0x02, 0x7B, 0xFD, 0xFF,
+0x12, 0x02, 0xF6, 0xFE, 0x54, 0x0F, 0x22, 0x00, 0x9F, 0xE4,
};
-u4Byte ArrayLength_MP_8188F_FW_NIC = 18644;
+u4Byte ArrayLength_MP_8188F_FW_NIC = 23242;
void
@@ -2329,31 +2628,31 @@ ODM_ReadFirmware_MP_8188F_FW_NIC(
u1Byte Array_MP_8188F_FW_WoWLAN[] = {
-0xF1, 0x88, 0x30, 0x00, 0x01, 0x00, 0x01, 0x00, 0x09, 0x22, 0x15, 0x56, 0xD8, 0x48, 0x02, 0x00,
-0xAF, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x02, 0x86, 0xAD, 0x02, 0xBC, 0xF3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x02, 0xA6, 0x3B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x02, 0xBD, 0x45, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0xF1, 0x88, 0x30, 0x00, 0x01, 0x00, 0x0D, 0x00, 0x11, 0x25, 0x17, 0x06, 0x7C, 0x52, 0x02, 0x00,
+0x2F, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x02, 0x86, 0xAD, 0x02, 0xC4, 0x86, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x02, 0xBA, 0x2E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x02, 0xC4, 0xD8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x02, 0xBC, 0xF4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xB8, 0xDC, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x02, 0xBD, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x02, 0xC4, 0x87, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xBD, 0x05, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x02, 0xC4, 0xD7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x02, 0x87, 0xBB, 0x02, 0x88, 0xD7, 0x02, 0x80, 0x86, 0x02, 0x80, 0x89, 0x02, 0x80, 0x8C, 0x02,
-0x9D, 0x7D, 0x02, 0xB8, 0xBA, 0x02, 0x80, 0x95, 0x02, 0x80, 0x98, 0x02, 0x80, 0x9B, 0x02, 0x80,
+0x02, 0x87, 0xBB, 0x02, 0x88, 0xDA, 0x02, 0x80, 0x86, 0x02, 0x80, 0x89, 0x02, 0xA5, 0x16, 0x02,
+0x9A, 0x74, 0x02, 0xBA, 0x18, 0x02, 0x80, 0x95, 0x02, 0x80, 0x98, 0x02, 0x80, 0x9B, 0x02, 0x80,
0x9E, 0x02, 0x80, 0xA1, 0x02, 0x80, 0xA4, 0x02, 0x80, 0xA7, 0x02, 0x80, 0xAA, 0x02, 0x80, 0xAD,
-0x02, 0x80, 0xB0, 0x02, 0x89, 0xA5, 0x02, 0x80, 0xB6, 0x02, 0x80, 0xB9, 0x02, 0xB0, 0x57, 0x02,
-0xB1, 0x34, 0x02, 0xB0, 0xB9, 0x02, 0xAF, 0x5E, 0x02, 0xA8, 0x5B, 0x02, 0xAF, 0xEE, 0x02, 0x80,
-0xCE, 0x02, 0x80, 0xD1, 0x02, 0xC5, 0xD9, 0x02, 0x80, 0xD7, 0x00, 0x00, 0x00, 0x02, 0x80, 0xDD,
-0x02, 0x80, 0xE0, 0x02, 0x80, 0xE3, 0x02, 0x80, 0xE6, 0x02, 0xC5, 0x82, 0x02, 0x80, 0xEC, 0x02,
+0x02, 0x80, 0xB0, 0x02, 0x89, 0xBF, 0x02, 0x80, 0xB6, 0x02, 0x80, 0xB9, 0x02, 0xB8, 0x50, 0x02,
+0xB9, 0x2D, 0x02, 0xB8, 0xB2, 0x02, 0xB7, 0x4F, 0x02, 0xAF, 0xE2, 0x02, 0xB7, 0xE7, 0x02, 0x80,
+0xCE, 0x02, 0x80, 0xD1, 0x02, 0xCA, 0x00, 0x02, 0x80, 0xD7, 0x00, 0x00, 0x00, 0x02, 0x80, 0xDD,
+0x02, 0x80, 0xE0, 0x02, 0x80, 0xE3, 0x02, 0x80, 0xE6, 0x02, 0xCF, 0x5C, 0x02, 0x80, 0xEC, 0x02,
0x80, 0xEF, 0x02, 0x80, 0xF2, 0x02, 0x80, 0xF5, 0x02, 0x80, 0xF8, 0x02, 0x80, 0xFB, 0x02, 0x80,
0xFE, 0x02, 0x81, 0x01, 0x02, 0x81, 0x04, 0x02, 0x81, 0x07, 0x02, 0x81, 0x0A, 0x02, 0x81, 0x0D,
0x02, 0x81, 0x10, 0x02, 0x81, 0x13, 0x02, 0x81, 0x16, 0x02, 0x81, 0x19, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x02, 0xB3, 0xEE, 0x02, 0xB5, 0xBE, 0x02, 0x90, 0xE9, 0x02, 0x90, 0xDE,
-0x02, 0x81, 0x40, 0x02, 0x9E, 0xDD, 0x02, 0xC4, 0x08, 0x02, 0x81, 0x49, 0x02, 0x81, 0x4C, 0x02,
-0x81, 0x4F, 0x02, 0x81, 0x52, 0x02, 0x81, 0x55, 0x02, 0x81, 0x58, 0x02, 0x81, 0x5B, 0x02, 0x91,
-0x47, 0x02, 0x81, 0x61, 0x02, 0x81, 0x64, 0x02, 0xC4, 0x81, 0x02, 0xC5, 0x51, 0x02, 0xBB, 0xC1,
+0x00, 0x00, 0x00, 0x00, 0x02, 0xC2, 0xFA, 0x02, 0xC5, 0x61, 0x02, 0xA7, 0x4F, 0x02, 0xA6, 0xF8,
+0x02, 0x81, 0x40, 0x02, 0x9B, 0xD4, 0x02, 0xC3, 0x94, 0x02, 0x81, 0x49, 0x02, 0x81, 0x4C, 0x02,
+0x81, 0x4F, 0x02, 0x81, 0x52, 0x02, 0x81, 0x55, 0x02, 0x81, 0x58, 0x02, 0x81, 0x5B, 0x02, 0xC8,
+0x88, 0x02, 0x81, 0x61, 0x02, 0x81, 0x64, 0x02, 0xCE, 0x46, 0x02, 0xCF, 0x16, 0x02, 0xCE, 0x1F,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
@@ -2377,10 +2676,10 @@ u1Byte Array_MP_8188F_FW_WoWLAN[] = {
0x20, 0x21, 0x1F, 0x16, 0x0C, 0x00, 0x20, 0x31, 0x2F, 0x20, 0x14, 0x00, 0x30, 0x31, 0x2F, 0x18,
0x10, 0x00, 0x30, 0x31, 0x2C, 0x18, 0x0C, 0x00, 0x30, 0x31, 0x2A, 0x14, 0x0C, 0x00, 0x30, 0x31,
0x28, 0x14, 0x00, 0x00, 0x30, 0x31, 0x24, 0x14, 0x00, 0x00, 0x30, 0x31, 0x1E, 0x14, 0x00, 0x00,
-0x30, 0x04, 0x04, 0x04, 0x05, 0x08, 0x08, 0x09, 0x09, 0x0C, 0x0E, 0x10, 0x12, 0x06, 0x0B, 0x0D,
-0x0E, 0x0F, 0x11, 0x12, 0x14, 0x00, 0x04, 0x00, 0x04, 0x00, 0x08, 0x00, 0x10, 0x00, 0x23, 0x00,
-0x2D, 0x00, 0x50, 0x00, 0x91, 0x00, 0xC3, 0x01, 0x27, 0x01, 0x31, 0x01, 0x5E, 0x00, 0xC8, 0x00,
-0xF0, 0x00, 0xDC, 0x01, 0x5E, 0x01, 0x68, 0x01, 0x9A, 0x01, 0xCC, 0x01, 0xEA, 0x02, 0x02, 0x04,
+0x30, 0x02, 0x02, 0x03, 0x04, 0x04, 0x08, 0x09, 0x09, 0x0C, 0x0E, 0x10, 0x12, 0x02, 0x09, 0x0B,
+0x0E, 0x0D, 0x0F, 0x10, 0x12, 0x00, 0x04, 0x00, 0x04, 0x00, 0x08, 0x00, 0x10, 0x00, 0x23, 0x00,
+0x2D, 0x00, 0x50, 0x00, 0x91, 0x00, 0xC3, 0x01, 0x27, 0x01, 0x31, 0x01, 0x5E, 0x00, 0x8C, 0x00,
+0xC8, 0x00, 0xDC, 0x01, 0x5E, 0x01, 0x68, 0x01, 0x9A, 0x01, 0xCC, 0x01, 0xEA, 0x02, 0x02, 0x04,
0x08, 0x0C, 0x12, 0x18, 0x24, 0x30, 0x48, 0x60, 0x6C, 0x14, 0x28, 0x32, 0x50, 0x78, 0xA0, 0xC8,
0xE6, 0x01, 0x01, 0x01, 0x02, 0x01, 0x01, 0x02, 0x02, 0x03, 0x03, 0x04, 0x04, 0x02, 0x04, 0x06,
0x07, 0x07, 0x08, 0x08, 0x08, 0x01, 0x01, 0x01, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02,
@@ -2453,628 +2752,756 @@ u1Byte Array_MP_8188F_FW_WoWLAN[] = {
0xE0, 0xFB, 0xA3, 0xE0, 0xFA, 0xA3, 0xE0, 0xF9, 0x22, 0xEB, 0xF0, 0xA3, 0xEA, 0xF0, 0xA3, 0xE9,
0xF0, 0x22, 0xD0, 0x83, 0xD0, 0x82, 0xF8, 0xE4, 0x93, 0x70, 0x12, 0x74, 0x01, 0x93, 0x70, 0x0D,
0xA3, 0xA3, 0x93, 0xF8, 0x74, 0x01, 0x93, 0xF5, 0x82, 0x88, 0x83, 0xE4, 0x73, 0x74, 0x02, 0x93,
-0x68, 0x60, 0xEF, 0xA3, 0xA3, 0xA3, 0x80, 0xDF, 0x41, 0x93, 0x17, 0x00, 0x41, 0x93, 0x18, 0x00,
-0x41, 0x93, 0x1D, 0x00, 0x00, 0x9A, 0x47, 0xB1, 0x9B, 0xB8, 0x55, 0x90, 0x93, 0x1B, 0xEF, 0xF0,
-0x7F, 0x02, 0xD1, 0x27, 0x90, 0x84, 0xC1, 0xE0, 0xFF, 0x90, 0x93, 0x1B, 0xE0, 0xFE, 0xEF, 0x4E,
+0x68, 0x60, 0xEF, 0xA3, 0xA3, 0xA3, 0x80, 0xDF, 0x41, 0x93, 0x8A, 0x00, 0x41, 0x93, 0x8B, 0x00,
+0x41, 0x93, 0x92, 0x00, 0x00, 0xAA, 0x4A, 0xC0, 0x6C, 0xC4, 0x21, 0x90, 0x93, 0x90, 0xEF, 0xF0,
+0x7F, 0x02, 0xD1, 0x27, 0x90, 0x84, 0xC1, 0xE0, 0xFF, 0x90, 0x93, 0x90, 0xE0, 0xFE, 0xEF, 0x4E,
0x90, 0x84, 0xC1, 0xF0, 0x22, 0x90, 0x02, 0x09, 0xE0, 0xF5, 0x5B, 0x12, 0x02, 0xF6, 0x25, 0x5B,
-0x90, 0x84, 0xC6, 0x12, 0x8D, 0x61, 0x25, 0x5B, 0x90, 0x84, 0xC7, 0x12, 0x8C, 0x6E, 0x25, 0x5B,
-0x90, 0x84, 0xC8, 0x12, 0x8F, 0xD8, 0x25, 0x5B, 0x90, 0x84, 0xC9, 0xF0, 0x90, 0x00, 0x04, 0x12,
-0x03, 0x0F, 0x25, 0x5B, 0x90, 0x84, 0xCA, 0xF0, 0x90, 0x00, 0x05, 0x12, 0x03, 0x0F, 0x25, 0x5B,
-0x90, 0x84, 0xCB, 0xF0, 0x11, 0x1D, 0x25, 0x5B, 0x90, 0x84, 0xCC, 0xF0, 0x22, 0x90, 0x00, 0x06,
-0x02, 0x03, 0x0F, 0x12, 0xC8, 0x7A, 0xFF, 0x54, 0x7F, 0x90, 0x85, 0xC5, 0xF0, 0xEF, 0xB1, 0x59,
-0xA3, 0xB1, 0x61, 0xFF, 0x54, 0xF0, 0xC4, 0x54, 0x0F, 0xFE, 0x90, 0x85, 0xC3, 0xE0, 0x54, 0xF0,
-0x4E, 0xF1, 0xD8, 0x54, 0x01, 0x25, 0xE0, 0xFE, 0x90, 0x85, 0xC1, 0xE0, 0x54, 0xFD, 0x4E, 0xF0,
-0xEF, 0x54, 0x0F, 0xC4, 0x54, 0xF0, 0xFF, 0x12, 0x9F, 0xE4, 0x91, 0x6D, 0x90, 0x85, 0xC4, 0xF0,
-0x11, 0x1D, 0x30, 0xE0, 0x4D, 0xC3, 0x13, 0x54, 0x07, 0xFF, 0xC3, 0x94, 0x04, 0x90, 0x85, 0xD8,
-0x50, 0x04, 0xEF, 0xF0, 0x80, 0x25, 0x74, 0x03, 0xF0, 0x31, 0x9F, 0xE9, 0x24, 0x06, 0xF1, 0xED,
-0xFF, 0x74, 0x03, 0x24, 0xFD, 0xFE, 0xEF, 0xC4, 0x54, 0x0F, 0xFD, 0xEF, 0x54, 0x0F, 0xFF, 0xED,
-0x2E, 0x54, 0x0F, 0xFE, 0xC4, 0x54, 0xF0, 0x4F, 0x12, 0x03, 0x3C, 0x31, 0x9F, 0x11, 0x1D, 0xC4,
-0x54, 0x0F, 0xFF, 0xC3, 0x94, 0x04, 0x90, 0x85, 0xCD, 0x50, 0x05, 0x74, 0x04, 0xF0, 0x80, 0x02,
-0xEF, 0xF0, 0x31, 0x9F, 0x90, 0x00, 0x04, 0x12, 0x03, 0x0F, 0xFD, 0x7F, 0x02, 0x12, 0x57, 0x82,
-0x31, 0x9F, 0x12, 0x71, 0xCB, 0x12, 0xB9, 0xD5, 0xF0, 0x90, 0x85, 0xC5, 0x12, 0xC8, 0x3A, 0x12,
-0x9F, 0xE3, 0x90, 0x01, 0xBE, 0xF0, 0x22, 0x90, 0x92, 0x04, 0x12, 0x87, 0x79, 0x90, 0x92, 0x03,
-0xEF, 0xF0, 0x12, 0x87, 0x82, 0x89, 0x28, 0x00, 0x89, 0x2D, 0x01, 0x89, 0x32, 0x03, 0x89, 0x37,
-0x04, 0x89, 0x3C, 0x12, 0x89, 0x41, 0x14, 0x89, 0x46, 0x20, 0x89, 0x4A, 0x24, 0x89, 0x4F, 0x25,
-0x89, 0x54, 0x27, 0x89, 0x59, 0x40, 0x89, 0x5D, 0x42, 0x89, 0x92, 0x47, 0x89, 0x92, 0x49, 0x89,
-0x66, 0x80, 0x89, 0x62, 0x81, 0x89, 0x6A, 0x82, 0x89, 0x6F, 0x83, 0x89, 0x74, 0x84, 0x89, 0x79,
-0x88, 0x89, 0x7E, 0xC3, 0x00, 0x00, 0x89, 0x83, 0x31, 0x93, 0x02, 0x87, 0xD5, 0x31, 0x93, 0x02,
-0x90, 0x03, 0x31, 0x93, 0x02, 0x78, 0x94, 0x31, 0x93, 0x02, 0x6B, 0x03, 0x31, 0x93, 0x02, 0x97,
-0xFD, 0x31, 0x93, 0x02, 0xA0, 0x12, 0x31, 0x93, 0x01, 0x23, 0x31, 0x93, 0x02, 0x9C, 0x13, 0x31,
-0x93, 0x02, 0xA0, 0x21, 0x31, 0x93, 0x02, 0xA0, 0x29, 0x31, 0x93, 0x80, 0x48, 0x31, 0x93, 0x02,
-0x4E, 0x29, 0x31, 0x93, 0xA1, 0x75, 0x31, 0x93, 0x81, 0x75, 0x31, 0x93, 0x02, 0x7A, 0xFE, 0x31,
-0x93, 0x02, 0x6F, 0x63, 0x31, 0x93, 0x02, 0x6F, 0xA4, 0x31, 0x93, 0x02, 0x7B, 0xD0, 0x31, 0x93,
-0x02, 0x9A, 0x34, 0x90, 0x01, 0xC0, 0xE0, 0x44, 0x01, 0xF0, 0x90, 0x92, 0x03, 0xE0, 0x90, 0x01,
-0xC2, 0xF0, 0x22, 0x90, 0x92, 0x04, 0x02, 0x87, 0x70, 0x24, 0x03, 0xFF, 0xE4, 0x33, 0xFE, 0x90,
-0x92, 0x07, 0x02, 0x87, 0x70, 0x90, 0x92, 0x07, 0x12, 0x87, 0x79, 0x31, 0x9F, 0x12, 0x02, 0xF6,
-0x54, 0x7F, 0xFD, 0xB1, 0x62, 0xFE, 0x54, 0x1F, 0x90, 0x92, 0x0B, 0xF0, 0xEE, 0x54, 0x80, 0xB1,
-0x59, 0x90, 0x92, 0x0A, 0x91, 0x6E, 0xFE, 0x54, 0x03, 0xFC, 0xEE, 0x54, 0x30, 0xC4, 0x54, 0x0F,
-0x90, 0x92, 0x0D, 0x91, 0x6E, 0xFE, 0x54, 0x40, 0xC4, 0x13, 0x13, 0x54, 0x03, 0x90, 0x92, 0x0C,
-0xF0, 0xEE, 0x54, 0x80, 0xB1, 0x59, 0xFF, 0x91, 0x6F, 0xFB, 0x54, 0x08, 0x13, 0x13, 0x13, 0x54,
-0x1F, 0x90, 0x92, 0x0F, 0xF0, 0xFA, 0xEB, 0x54, 0x04, 0x13, 0x13, 0x54, 0x3F, 0xA3, 0xF0, 0xEF,
-0x54, 0x01, 0xC4, 0x33, 0x33, 0x33, 0x54, 0x80, 0x71, 0x06, 0x54, 0x7F, 0x4F, 0xF0, 0x90, 0x92,
-0x0C, 0xE0, 0x54, 0x01, 0xC4, 0x33, 0x33, 0x54, 0xC0, 0x71, 0x06, 0x54, 0xBF, 0x4F, 0xF0, 0xEA,
-0x60, 0x02, 0x61, 0x05, 0x90, 0x92, 0x0B, 0xE0, 0x54, 0x1F, 0xFF, 0x75, 0xF0, 0x12, 0xED, 0xB1,
-0x6D, 0x54, 0xE0, 0x4F, 0xF0, 0xEC, 0x54, 0x03, 0x71, 0x06, 0x54, 0xFC, 0x4F, 0xF0, 0xEC, 0x54,
-0x03, 0x25, 0xE0, 0x25, 0xE0, 0x71, 0x06, 0x54, 0xF3, 0x4F, 0xF0, 0x90, 0x92, 0x0A, 0xE0, 0x54,
-0x01, 0xC4, 0x33, 0x54, 0xE0, 0xFF, 0x75, 0xF0, 0x12, 0xED, 0xB1, 0x6D, 0x54, 0xDF, 0x4F, 0xF0,
-0x90, 0x92, 0x0D, 0xE0, 0x54, 0x03, 0xC4, 0x54, 0xF0, 0x71, 0x06, 0x54, 0xCF, 0x4F, 0x12, 0xC8,
-0x5B, 0xE0, 0x54, 0xFB, 0x12, 0xC8, 0x5B, 0xC0, 0x83, 0xC0, 0x82, 0xE0, 0xFF, 0x90, 0x92, 0x10,
-0xE0, 0x25, 0xE0, 0x25, 0xE0, 0xFE, 0xEF, 0x4E, 0xD0, 0x82, 0xD0, 0x83, 0xF0, 0x90, 0x92, 0x85,
-0xE0, 0x60, 0x2F, 0x31, 0x9F, 0xE9, 0x24, 0x03, 0xF1, 0xED, 0x54, 0x1F, 0x12, 0x03, 0x3C, 0x90,
-0x92, 0x0E, 0x74, 0x01, 0xF0, 0x90, 0x92, 0x0E, 0xE0, 0xFF, 0xC3, 0x94, 0x04, 0x50, 0x13, 0xEF,
-0x31, 0x99, 0x8F, 0x82, 0x8E, 0x83, 0xE4, 0x12, 0x03, 0x4E, 0x90, 0x92, 0x0E, 0xE0, 0x04, 0xF0,
-0x80, 0xE3, 0x90, 0x92, 0x83, 0xE0, 0x54, 0x07, 0xFF, 0xBF, 0x05, 0x0A, 0xEC, 0xB4, 0x01, 0x06,
-0x90, 0x92, 0x88, 0x74, 0x01, 0xF0, 0xE4, 0x90, 0x92, 0x0E, 0xF0, 0x90, 0x92, 0x0E, 0xE0, 0xFC,
-0x31, 0x99, 0x8F, 0x82, 0x8E, 0x83, 0x12, 0x03, 0x0F, 0xFF, 0xED, 0x12, 0xAF, 0xE0, 0xE5, 0x82,
-0x2C, 0x12, 0xA8, 0x53, 0xEF, 0xF0, 0x90, 0x92, 0x0E, 0xE0, 0x04, 0xF0, 0xE0, 0xB4, 0x04, 0xDB,
-0xAF, 0x05, 0x12, 0x17, 0x8E, 0x22, 0xFF, 0x75, 0xF0, 0x12, 0xED, 0x90, 0x89, 0x3F, 0x12, 0x05,
-0x28, 0xE0, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0xF1, 0x6B, 0x20, 0xE6, 0x02, 0x81,
-0x34, 0x90, 0x00, 0x8C, 0xE0, 0x90, 0x93, 0x0E, 0xF0, 0x7F, 0x8D, 0x12, 0x7B, 0x51, 0x90, 0x93,
-0x0F, 0xEF, 0xF0, 0x90, 0x00, 0x8E, 0xE0, 0x90, 0x93, 0x10, 0xF0, 0x90, 0x93, 0x0F, 0xE0, 0x24,
-0xFC, 0x60, 0x0F, 0x24, 0x03, 0x60, 0x02, 0x81, 0x2D, 0x90, 0x93, 0x0E, 0xE0, 0xFF, 0xF1, 0x72,
-0x81, 0x2D, 0x90, 0x93, 0x0E, 0xE0, 0x24, 0xDC, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83, 0xE0,
-0xFB, 0xE4, 0xFD, 0xFF, 0x91, 0x66, 0x75, 0xF0, 0x12, 0x71, 0x0B, 0x13, 0x13, 0x54, 0x03, 0xFB,
-0x0D, 0xE4, 0xFF, 0x91, 0x66, 0x75, 0xF0, 0x12, 0x71, 0x0B, 0xB1, 0x59, 0xFB, 0x0D, 0xE4, 0xFF,
-0x91, 0x66, 0x75, 0xF0, 0x12, 0x71, 0x0B, 0xC4, 0x54, 0x03, 0xFB, 0x0D, 0xE4, 0xFF, 0x91, 0x66,
-0x12, 0xAF, 0xD5, 0xFB, 0xE4, 0xFD, 0x0F, 0x91, 0x66, 0x75, 0xF0, 0x12, 0x90, 0x89, 0x3D, 0x12,
-0x05, 0x28, 0x91, 0x63, 0x75, 0xF0, 0x12, 0xB1, 0x6D, 0xC4, 0x13, 0x54, 0x01, 0xFB, 0x0D, 0x7F,
-0x01, 0x91, 0x66, 0x75, 0xF0, 0x12, 0xB1, 0x6D, 0x54, 0x1F, 0x91, 0x64, 0x12, 0xAF, 0xE0, 0xE0,
-0xFB, 0xE4, 0xFD, 0x0F, 0x91, 0x66, 0x75, 0xF0, 0x08, 0xA4, 0x24, 0x01, 0xF5, 0x82, 0xE4, 0x34,
-0x82, 0x91, 0x61, 0x75, 0xF0, 0x08, 0xA4, 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, 0x82, 0x91, 0x61,
-0x75, 0xF0, 0x08, 0xA4, 0x24, 0x03, 0xF5, 0x82, 0xE4, 0x34, 0x82, 0x91, 0x61, 0x75, 0xF0, 0x08,
-0xA4, 0x24, 0x04, 0xF5, 0x82, 0xE4, 0x34, 0x82, 0xF5, 0x83, 0xE0, 0xFB, 0xE4, 0xFD, 0x0F, 0x91,
-0x66, 0x75, 0xF0, 0x08, 0xA4, 0x24, 0x05, 0xF5, 0x82, 0xE4, 0x34, 0x82, 0x91, 0x61, 0x75, 0xF0,
-0x08, 0xA4, 0x24, 0x06, 0xF5, 0x82, 0xE4, 0x34, 0x82, 0x91, 0x61, 0x75, 0xF0, 0x08, 0xA4, 0x24,
-0x07, 0xF5, 0x82, 0xE4, 0x34, 0x82, 0xF5, 0x83, 0xE0, 0xFB, 0x0D, 0x91, 0x39, 0xF1, 0x6B, 0x30,
-0xE0, 0x02, 0xF1, 0xE6, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xEF, 0x70, 0x04, 0x74, 0xF0, 0x80, 0x16,
-0xEF, 0xB4, 0x01, 0x04, 0x74, 0xF4, 0x80, 0x0E, 0xEF, 0xB4, 0x02, 0x04, 0x74, 0xF8, 0x80, 0x06,
-0xEF, 0xB4, 0x03, 0x0C, 0x74, 0xFC, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x02, 0xF5, 0x83, 0xEB, 0xF0,
-0x22, 0xF5, 0x83, 0xE0, 0xFB, 0x0D, 0x91, 0x39, 0x90, 0x93, 0x0E, 0xE0, 0x22, 0x4F, 0xF0, 0x90,
-0x00, 0x02, 0x02, 0x03, 0x0F, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x12, 0xC8, 0x7A, 0x20,
-0xE0, 0x05, 0x12, 0xB6, 0x5C, 0xA1, 0x50, 0x31, 0x9F, 0x12, 0xC8, 0x47, 0x90, 0x86, 0x75, 0xD1,
-0x00, 0x54, 0x04, 0xFD, 0xEF, 0x54, 0xFB, 0xF1, 0x47, 0x12, 0xC8, 0x9E, 0xD1, 0x0E, 0x54, 0x10,
-0xFD, 0xEF, 0x54, 0xEF, 0xF1, 0x47, 0x12, 0xC8, 0xA6, 0xD1, 0x0E, 0x54, 0x40, 0xFD, 0xEF, 0x54,
-0xBF, 0xF1, 0x47, 0x12, 0xC8, 0xAE, 0xB1, 0x61, 0x54, 0x80, 0xFF, 0x90, 0x86, 0x76, 0xE0, 0x54,
-0x7F, 0x4F, 0xF0, 0x12, 0xC8, 0xB6, 0x30, 0xE0, 0x07, 0x90, 0x06, 0x90, 0xE0, 0x44, 0x04, 0xF0,
-0x31, 0x9F, 0x12, 0x02, 0xF6, 0x13, 0x13, 0x13, 0x54, 0x1F, 0x30, 0xE0, 0x07, 0x90, 0x06, 0x90,
-0xE0, 0x44, 0x08, 0xF0, 0x90, 0x84, 0xC5, 0xE0, 0xB4, 0x02, 0x05, 0xB1, 0x55, 0x20, 0xE0, 0x3D,
-0xB1, 0x62, 0x54, 0x7F, 0xFF, 0x90, 0x86, 0x76, 0xE0, 0x54, 0x80, 0x91, 0x6D, 0x90, 0x86, 0x77,
-0xF1, 0xD8, 0xFF, 0x54, 0x01, 0xFE, 0x90, 0x86, 0x78, 0xF1, 0xFB, 0x54, 0xFE, 0xFF, 0xEE, 0x54,
-0x01, 0x4F, 0xF0, 0x90, 0x86, 0x76, 0xE0, 0x54, 0x7F, 0xFF, 0x90, 0x86, 0x75, 0xE0, 0xFE, 0xC4,
-0x13, 0x54, 0x07, 0x7D, 0x00, 0x20, 0xE0, 0x02, 0x7D, 0x01, 0x12, 0x54, 0x9F, 0x90, 0x84, 0xC5,
-0xE0, 0xB4, 0x01, 0x07, 0x90, 0xFE, 0x10, 0xE0, 0x44, 0x04, 0xF0, 0x90, 0x87, 0x4A, 0x74, 0x05,
-0xF0, 0x7E, 0x00, 0x7F, 0x08, 0x7D, 0x00, 0x7B, 0x01, 0x7A, 0x87, 0x79, 0x95, 0x12, 0x06, 0xDE,
-0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90, 0x86, 0x76, 0xE0, 0xC4, 0x13, 0x13, 0x13, 0x54, 0x01, 0x22,
-0x4F, 0xF0, 0x90, 0x00, 0x01, 0x02, 0x03, 0x0F, 0x75, 0xF0, 0x12, 0xE5, 0x6E, 0x90, 0x89, 0x3E,
-0x12, 0x05, 0x28, 0xE0, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x12, 0xC8, 0x47, 0x90,
-0x86, 0x72, 0xD1, 0x00, 0x54, 0x04, 0xFD, 0xEF, 0x54, 0xFB, 0xF1, 0x3F, 0x12, 0xC8, 0x9E, 0xD1,
-0x0E, 0x54, 0x10, 0xFD, 0xEF, 0x54, 0xEF, 0xF1, 0x3F, 0x12, 0xC8, 0xA6, 0xD1, 0x0E, 0x54, 0x40,
-0xFD, 0xEF, 0x54, 0xBF, 0xF1, 0x3F, 0x12, 0xC8, 0xAE, 0x91, 0x6E, 0x54, 0x01, 0xFF, 0x90, 0x86,
-0x74, 0xE0, 0x54, 0xFE, 0xB1, 0x60, 0xFF, 0x54, 0x01, 0xFE, 0x90, 0x86, 0x73, 0xF1, 0xFB, 0x54,
+0x90, 0x84, 0xC6, 0xF0, 0x12, 0x8D, 0x96, 0x25, 0x5B, 0x90, 0x84, 0xC7, 0x12, 0x8C, 0x79, 0x25,
+0x5B, 0x90, 0x84, 0xC8, 0x12, 0x8E, 0x80, 0x25, 0x5B, 0x90, 0x84, 0xC9, 0xF0, 0x12, 0x8F, 0xF3,
+0x25, 0x5B, 0x90, 0x84, 0xCA, 0xF0, 0xF1, 0xED, 0x25, 0x5B, 0x90, 0x84, 0xCB, 0x11, 0x16, 0x25,
+0x5B, 0x90, 0x84, 0xCC, 0xF0, 0x22, 0xF0, 0x90, 0x00, 0x06, 0x02, 0x03, 0x0F, 0xF1, 0xE4, 0xFF,
+0x54, 0x7F, 0x90, 0x85, 0xC5, 0xF0, 0xEF, 0xD1, 0x8B, 0xA3, 0xF0, 0xB1, 0x96, 0xFD, 0x54, 0xF0,
+0xC4, 0x54, 0x0F, 0xFF, 0x90, 0x85, 0xC3, 0xE0, 0x54, 0xF0, 0x4F, 0xD1, 0x80, 0xFC, 0x54, 0x01,
+0x25, 0xE0, 0xFF, 0x90, 0x85, 0xC1, 0xE0, 0x54, 0xFD, 0x4F, 0xF0, 0xEC, 0x54, 0x04, 0xFF, 0x90,
+0x92, 0xDC, 0xE0, 0x54, 0xFB, 0x4F, 0xF0, 0xED, 0x54, 0x0F, 0xC4, 0x54, 0xF0, 0xFF, 0x12, 0x9E,
+0xC6, 0x91, 0x78, 0x90, 0x85, 0xC4, 0x11, 0x16, 0x30, 0xE0, 0x4E, 0xC3, 0x13, 0x54, 0x07, 0xFF,
+0xC3, 0x94, 0x04, 0x90, 0x85, 0xD8, 0x50, 0x04, 0xEF, 0xF0, 0x80, 0x26, 0x74, 0x03, 0xF0, 0x31,
+0xB9, 0xE9, 0x24, 0x06, 0x12, 0xD2, 0x44, 0xFF, 0x74, 0x03, 0x24, 0xFD, 0xFE, 0xEF, 0xC4, 0x54,
+0x0F, 0xFD, 0xEF, 0x54, 0x0F, 0xFF, 0xED, 0x2E, 0x54, 0x0F, 0xFE, 0xC4, 0x54, 0xF0, 0x4F, 0x12,
+0x03, 0x3C, 0x31, 0xB9, 0x11, 0x17, 0xC4, 0x54, 0x0F, 0xFF, 0xC3, 0x94, 0x04, 0x90, 0x85, 0xCD,
+0x50, 0x05, 0x74, 0x04, 0xF0, 0x80, 0x02, 0xEF, 0xF0, 0x31, 0xB9, 0xF1, 0xF3, 0xFD, 0x7F, 0x02,
+0x12, 0x57, 0x82, 0x31, 0xB9, 0x12, 0x71, 0xCB, 0x12, 0xBE, 0x8A, 0xF0, 0x90, 0x85, 0xC5, 0x12,
+0xD1, 0x7E, 0x12, 0x9E, 0xC5, 0x90, 0x01, 0xBE, 0xF0, 0x22, 0x90, 0x92, 0x04, 0x12, 0x87, 0x79,
+0x90, 0x92, 0x03, 0xEF, 0xF0, 0x12, 0x87, 0x82, 0x89, 0x34, 0x00, 0x89, 0x39, 0x01, 0x89, 0x3E,
+0x03, 0x89, 0x43, 0x04, 0x89, 0x48, 0x10, 0x89, 0x4D, 0x11, 0x89, 0x51, 0x12, 0x89, 0x56, 0x14,
+0x89, 0x5B, 0x1C, 0x89, 0x5F, 0x20, 0x89, 0x63, 0x24, 0x89, 0x68, 0x25, 0x89, 0x6D, 0x27, 0x89,
+0x72, 0x40, 0x89, 0x76, 0x42, 0x89, 0xAC, 0x47, 0x89, 0xAC, 0x49, 0x89, 0x80, 0x80, 0x89, 0x7B,
+0x81, 0x89, 0x84, 0x82, 0x89, 0x89, 0x83, 0x89, 0x8E, 0x84, 0x89, 0x93, 0x88, 0x89, 0x98, 0xC3,
+0x00, 0x00, 0x89, 0x9D, 0x31, 0xAD, 0x02, 0x87, 0xD5, 0x31, 0xAD, 0x02, 0x90, 0x02, 0x31, 0xAD,
+0x02, 0x78, 0x94, 0x31, 0xAD, 0x02, 0x6B, 0x03, 0x31, 0xAD, 0x02, 0x98, 0x03, 0x31, 0xAD, 0x81,
+0x80, 0x31, 0xAD, 0x02, 0x98, 0x35, 0x31, 0xAD, 0x02, 0x98, 0xFF, 0x31, 0xAD, 0xA1, 0x4F, 0x31,
+0xAD, 0x01, 0x1D, 0x31, 0xAD, 0x02, 0x99, 0x0E, 0x31, 0xAD, 0x02, 0x9F, 0xFE, 0x31, 0xAD, 0x02,
+0xA0, 0x06, 0x31, 0xAD, 0x80, 0x49, 0x31, 0xAD, 0x02, 0x4E, 0x29, 0x31, 0xAD, 0x02, 0xAD, 0x45,
+0x31, 0xAD, 0xA1, 0x9C, 0x31, 0xAD, 0x02, 0x7A, 0xFE, 0x31, 0xAD, 0x02, 0x6F, 0x63, 0x31, 0xAD,
+0x02, 0x6F, 0xA4, 0x31, 0xAD, 0x02, 0x7B, 0xD0, 0x31, 0xAD, 0x02, 0xA7, 0xFA, 0x90, 0x01, 0xC0,
+0xE0, 0x44, 0x01, 0xF0, 0x90, 0x92, 0x03, 0xE0, 0x90, 0x01, 0xC2, 0xF0, 0x22, 0x90, 0x92, 0x04,
+0x02, 0x87, 0x70, 0x24, 0x03, 0xFF, 0xE4, 0x33, 0xFE, 0x90, 0x92, 0x07, 0x02, 0x87, 0x70, 0x90,
+0x92, 0x07, 0x12, 0x87, 0x79, 0x31, 0xB9, 0x12, 0x02, 0xF6, 0x54, 0x7F, 0xFD, 0xB1, 0x96, 0xFE,
+0x54, 0x1F, 0x90, 0x92, 0x0B, 0xF0, 0xEE, 0x54, 0x80, 0xD1, 0x8B, 0x90, 0x92, 0x0A, 0x91, 0x79,
+0xFE, 0x54, 0x03, 0xFC, 0xEE, 0x54, 0x30, 0xC4, 0x54, 0x0F, 0x90, 0x92, 0x0D, 0x91, 0x79, 0xFE,
+0x54, 0x40, 0xC4, 0x13, 0x13, 0x54, 0x03, 0x90, 0x92, 0x0C, 0xF0, 0xEE, 0x54, 0x80, 0xD1, 0x8B,
+0xFF, 0x91, 0x7A, 0xFB, 0x54, 0x08, 0x13, 0x13, 0x13, 0x54, 0x1F, 0x90, 0x92, 0x0F, 0xF0, 0xFA,
+0xEB, 0x54, 0x04, 0x13, 0x13, 0x54, 0x3F, 0xA3, 0xF0, 0xEF, 0x54, 0x01, 0xC4, 0x33, 0x33, 0x33,
+0x54, 0x80, 0x71, 0x11, 0x54, 0x7F, 0x4F, 0xF0, 0x90, 0x92, 0x0C, 0xE0, 0x54, 0x01, 0xC4, 0x33,
+0x33, 0x54, 0xC0, 0x71, 0x11, 0x54, 0xBF, 0x4F, 0xF0, 0xEA, 0x60, 0x02, 0x61, 0x10, 0x90, 0x92,
+0x0B, 0xE0, 0x54, 0x1F, 0xD1, 0x92, 0x54, 0xE0, 0x4F, 0xF0, 0xEC, 0x54, 0x03, 0x71, 0x11, 0x54,
+0xFC, 0x4F, 0xF0, 0xEC, 0x54, 0x03, 0x25, 0xE0, 0x25, 0xE0, 0x71, 0x11, 0x54, 0xF3, 0x4F, 0xF0,
+0x90, 0x92, 0x0A, 0xE0, 0x54, 0x01, 0xC4, 0x33, 0x54, 0xE0, 0xD1, 0x92, 0x54, 0xDF, 0x4F, 0xF0,
+0x90, 0x92, 0x0D, 0xE0, 0x54, 0x03, 0xC4, 0x54, 0xF0, 0x71, 0x11, 0x54, 0xCF, 0x4F, 0x12, 0xD1,
+0xAF, 0xE0, 0x54, 0xFB, 0x12, 0xD1, 0xAF, 0xC0, 0x83, 0xC0, 0x82, 0xE0, 0xFF, 0x90, 0x92, 0x10,
+0xE0, 0x12, 0xAF, 0xD2, 0xD0, 0x82, 0xD0, 0x83, 0xF0, 0x90, 0x92, 0xD6, 0xE0, 0x60, 0x30, 0x31,
+0xB9, 0xE9, 0x24, 0x03, 0x12, 0xD2, 0x44, 0x54, 0x1F, 0x12, 0x03, 0x3C, 0x90, 0x92, 0x0E, 0x74,
+0x01, 0xF0, 0x90, 0x92, 0x0E, 0xE0, 0xFF, 0xC3, 0x94, 0x04, 0x50, 0x13, 0xEF, 0x31, 0xB3, 0x8F,
+0x82, 0x8E, 0x83, 0xE4, 0x12, 0x03, 0x4E, 0x90, 0x92, 0x0E, 0xE0, 0x04, 0xF0, 0x80, 0xE3, 0x90,
+0x92, 0xD4, 0xE0, 0x54, 0x07, 0xFF, 0xBF, 0x05, 0x0A, 0xEC, 0xB4, 0x01, 0x06, 0x90, 0x92, 0xD9,
+0x74, 0x01, 0xF0, 0xE4, 0x90, 0x92, 0x0E, 0xF0, 0x90, 0x92, 0x0E, 0xE0, 0xFC, 0x31, 0xB3, 0x8F,
+0x82, 0x8E, 0x83, 0x12, 0x03, 0x0F, 0xFF, 0xED, 0x12, 0xD1, 0x21, 0xE5, 0x82, 0x2C, 0x12, 0xB0,
+0xEE, 0x90, 0x92, 0x0E, 0xE0, 0x04, 0xF0, 0xE0, 0xB4, 0x04, 0xDD, 0xAF, 0x05, 0x12, 0x17, 0x8E,
+0x22, 0xFF, 0x75, 0xF0, 0x12, 0xED, 0x90, 0x89, 0x3F, 0x12, 0x05, 0x28, 0xE0, 0x22, 0xD3, 0x10,
+0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0xF1, 0x80, 0x20, 0xE6, 0x02, 0x81, 0x3F, 0x90, 0x00, 0x8C, 0xE0,
+0x90, 0x93, 0x81, 0xF0, 0x7F, 0x8D, 0x12, 0x7B, 0x51, 0x90, 0x93, 0x82, 0xEF, 0xF0, 0x90, 0x00,
+0x8E, 0xE0, 0x90, 0x93, 0x83, 0xF0, 0x90, 0x93, 0x82, 0xE0, 0x24, 0xFC, 0x60, 0x0F, 0x24, 0x03,
+0x60, 0x02, 0x81, 0x38, 0x90, 0x93, 0x81, 0xE0, 0xFF, 0xF1, 0x87, 0x81, 0x38, 0x90, 0x93, 0x81,
+0xE0, 0x24, 0xDC, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83, 0xE0, 0xFB, 0xE4, 0xFD, 0xFF, 0x91,
+0x71, 0x75, 0xF0, 0x12, 0x71, 0x16, 0x13, 0x13, 0x54, 0x03, 0xFB, 0x0D, 0xE4, 0xFF, 0x91, 0x71,
+0x75, 0xF0, 0x12, 0x71, 0x16, 0xD1, 0x8B, 0xFB, 0x0D, 0xE4, 0xFF, 0x91, 0x71, 0x75, 0xF0, 0x12,
+0x71, 0x16, 0xC4, 0x54, 0x03, 0xFB, 0x0D, 0xE4, 0xFF, 0x91, 0x71, 0x12, 0xB7, 0xD0, 0xFB, 0xE4,
+0xFD, 0x0F, 0x91, 0x71, 0x75, 0xF0, 0x12, 0x90, 0x89, 0x3D, 0x12, 0x05, 0x28, 0x91, 0x6E, 0x75,
+0xF0, 0x12, 0xD1, 0x97, 0xC4, 0x13, 0x54, 0x01, 0xFB, 0x0D, 0x7F, 0x01, 0x91, 0x71, 0x75, 0xF0,
+0x12, 0xD1, 0x97, 0x54, 0x1F, 0x91, 0x6F, 0x12, 0xD1, 0x21, 0xE0, 0xFB, 0xE4, 0xFD, 0x0F, 0x91,
+0x71, 0x75, 0xF0, 0x08, 0xA4, 0x24, 0x01, 0xF5, 0x82, 0xE4, 0x34, 0x82, 0x91, 0x6C, 0x75, 0xF0,
+0x08, 0xA4, 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, 0x82, 0x91, 0x6C, 0x75, 0xF0, 0x08, 0xA4, 0x24,
+0x03, 0xF5, 0x82, 0xE4, 0x34, 0x82, 0x91, 0x6C, 0x75, 0xF0, 0x08, 0xA4, 0x24, 0x04, 0xF5, 0x82,
+0xE4, 0x34, 0x82, 0xF5, 0x83, 0xE0, 0xFB, 0xE4, 0xFD, 0x0F, 0x91, 0x71, 0x75, 0xF0, 0x08, 0xA4,
+0x24, 0x05, 0xF5, 0x82, 0xE4, 0x34, 0x82, 0x91, 0x6C, 0x75, 0xF0, 0x08, 0xA4, 0x24, 0x06, 0xF5,
+0x82, 0xE4, 0x34, 0x82, 0x91, 0x6C, 0x75, 0xF0, 0x08, 0xA4, 0x24, 0x07, 0xF5, 0x82, 0xE4, 0x34,
+0x82, 0xF5, 0x83, 0xE0, 0xFB, 0x0D, 0x91, 0x44, 0xF1, 0x80, 0x30, 0xE0, 0x02, 0xF1, 0xFB, 0xD0,
+0xD0, 0x92, 0xAF, 0x22, 0xEF, 0x70, 0x04, 0x74, 0xF0, 0x80, 0x16, 0xEF, 0xB4, 0x01, 0x04, 0x74,
+0xF4, 0x80, 0x0E, 0xEF, 0xB4, 0x02, 0x04, 0x74, 0xF8, 0x80, 0x06, 0xEF, 0xB4, 0x03, 0x0C, 0x74,
+0xFC, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x02, 0xF5, 0x83, 0xEB, 0xF0, 0x22, 0xF5, 0x83, 0xE0, 0xFB,
+0x0D, 0x91, 0x44, 0x90, 0x93, 0x81, 0xE0, 0x22, 0x4F, 0xF0, 0x90, 0x00, 0x02, 0x02, 0x03, 0x0F,
+0x12, 0xD2, 0x09, 0x12, 0x02, 0xF6, 0xC4, 0x54, 0x0F, 0xFF, 0xBF, 0x0F, 0x16, 0x90, 0x92, 0xA1,
+0xE0, 0x54, 0xFE, 0xF0, 0x12, 0xBF, 0xCF, 0x12, 0x90, 0xC9, 0x54, 0x0F, 0xFF, 0x12, 0xA6, 0xB2,
+0x02, 0xC6, 0x9D, 0xB1, 0x90, 0x12, 0xD2, 0x71, 0x12, 0xA7, 0xEB, 0xEF, 0x91, 0x79, 0x54, 0x03,
+0xFF, 0xED, 0x12, 0xA6, 0xE3, 0x54, 0xFC, 0x91, 0x78, 0x54, 0x1C, 0xFF, 0xEE, 0x54, 0x0F, 0xFE,
+0x12, 0xA6, 0xE3, 0x54, 0xE3, 0x91, 0x78, 0x54, 0xE0, 0xFF, 0xEE, 0x12, 0xA6, 0xE3, 0x54, 0x1F,
+0x4F, 0xF0, 0xF1, 0xF3, 0xFF, 0x12, 0x02, 0xF6, 0x54, 0x0F, 0xFD, 0xE4, 0xFB, 0xF1, 0xDD, 0xA9,
+0x5D, 0xF1, 0xED, 0xFF, 0x12, 0x02, 0xF6, 0x54, 0x0F, 0xFD, 0x7B, 0x01, 0xF1, 0xDD, 0xA9, 0x5D,
+0xD1, 0x81, 0x33, 0x33, 0x33, 0x54, 0xF8, 0x12, 0xD2, 0x71, 0xFD, 0x75, 0xF0, 0x0E, 0xA4, 0x24,
+0xAE, 0xF5, 0x82, 0xE4, 0x34, 0x92, 0xF5, 0x83, 0xEF, 0xD1, 0x80, 0xC4, 0x13, 0x54, 0x07, 0xFF,
+0xED, 0x75, 0xF0, 0x0E, 0xA4, 0x24, 0xAF, 0xF5, 0x82, 0xE4, 0x34, 0x92, 0xF5, 0x83, 0xEF, 0xF0,
+0xEE, 0xC4, 0x54, 0x0F, 0xFF, 0x14, 0x6D, 0x70, 0x25, 0x90, 0x92, 0xA3, 0xEF, 0x11, 0x16, 0x54,
+0x0F, 0xC4, 0x54, 0xF0, 0xFF, 0x90, 0x92, 0xA2, 0xE0, 0x54, 0x0F, 0x4F, 0xF0, 0x54, 0xF1, 0xF0,
+0x90, 0x92, 0xA1, 0xE0, 0x44, 0x01, 0xF0, 0x7D, 0x20, 0xE4, 0xFF, 0x12, 0x7B, 0xFD, 0x22, 0xF1,
+0xE4, 0xFF, 0xB1, 0x96, 0x12, 0xD1, 0xEB, 0xFB, 0xC0, 0x03, 0x31, 0xB9, 0x91, 0x7A, 0x12, 0xA7,
+0xC2, 0xD0, 0x03, 0x12, 0xA5, 0x16, 0x31, 0xB9, 0xB1, 0x96, 0x12, 0xA2, 0xBE, 0x90, 0x92, 0x0A,
+0x74, 0x10, 0xF0, 0x90, 0x92, 0x18, 0x74, 0x07, 0xF0, 0x31, 0xB9, 0x12, 0x02, 0xF6, 0x90, 0x92,
+0x0C, 0xF0, 0x7B, 0x01, 0x7A, 0x92, 0x79, 0x0A, 0x12, 0x5E, 0x10, 0x7F, 0x04, 0x02, 0x87, 0xBB,
+0xAB, 0x5B, 0xAA, 0x5C, 0xA9, 0x5D, 0x90, 0x00, 0x01, 0x02, 0x03, 0x0F, 0xD3, 0x10, 0xAF, 0x01,
+0xC3, 0xC0, 0xD0, 0xF1, 0xE4, 0x20, 0xE0, 0x05, 0x12, 0xCF, 0xC1, 0xC1, 0x7B, 0x31, 0xB9, 0x12,
+0xAF, 0x9A, 0x90, 0x86, 0x75, 0x12, 0xAD, 0xD6, 0x54, 0x04, 0xFD, 0xEF, 0x54, 0xFB, 0xF1, 0xD5,
+0x12, 0xAF, 0xA2, 0x12, 0xAD, 0xE4, 0x54, 0x10, 0xFD, 0xEF, 0x54, 0xEF, 0xF1, 0xD5, 0x12, 0xAF,
+0xAA, 0x12, 0xAD, 0xE4, 0x54, 0x40, 0xFD, 0xEF, 0x54, 0xBF, 0xF1, 0xD5, 0x12, 0xAF, 0xB2, 0xF0,
+0xB1, 0x96, 0x54, 0x80, 0xFF, 0x90, 0x86, 0x76, 0xE0, 0x54, 0x7F, 0x4F, 0xF0, 0x12, 0xD2, 0x34,
+0x30, 0xE0, 0x07, 0x90, 0x06, 0x90, 0xE0, 0x44, 0x04, 0xF0, 0x31, 0xB9, 0x12, 0x02, 0xF6, 0x13,
+0x13, 0x13, 0x54, 0x1F, 0x30, 0xE0, 0x07, 0x90, 0x06, 0x90, 0xE0, 0x44, 0x08, 0xF0, 0x90, 0x84,
+0xC5, 0xE0, 0xB4, 0x02, 0x05, 0xD1, 0x87, 0x20, 0xE0, 0x3E, 0xB1, 0x96, 0x54, 0x7F, 0xFF, 0x90,
+0x86, 0x76, 0xE0, 0x54, 0x80, 0x91, 0x78, 0x90, 0x86, 0x77, 0xD1, 0x80, 0xFF, 0x54, 0x01, 0xFE,
+0x90, 0x86, 0x78, 0x12, 0xAF, 0x92, 0x54, 0xFE, 0xFF, 0xEE, 0x54, 0x01, 0x4F, 0xF0, 0x90, 0x86,
+0x76, 0xE0, 0x54, 0x7F, 0xFF, 0x90, 0x86, 0x75, 0xE0, 0xFE, 0xC4, 0x13, 0x54, 0x07, 0x7D, 0x00,
+0x20, 0xE0, 0x02, 0x7D, 0x01, 0x12, 0x54, 0x9F, 0x90, 0x84, 0xC5, 0xE0, 0xB4, 0x01, 0x07, 0x90,
+0xFE, 0x10, 0xE0, 0x44, 0x04, 0xF0, 0x90, 0x87, 0x4A, 0x74, 0x05, 0xF0, 0x7E, 0x00, 0x7F, 0x08,
+0x7D, 0x00, 0x7B, 0x01, 0x7A, 0x87, 0x79, 0x95, 0x12, 0x06, 0xDE, 0xD0, 0xD0, 0x92, 0xAF, 0x22,
+0xF0, 0x90, 0x00, 0x03, 0x02, 0x03, 0x0F, 0x90, 0x86, 0x76, 0xE0, 0xC4, 0x13, 0x13, 0x13, 0x54,
+0x01, 0x22, 0xFF, 0x75, 0xF0, 0x12, 0xED, 0x90, 0x89, 0x3E, 0x12, 0x05, 0x28, 0xE0, 0x22, 0x8F,
+0x5E, 0x8D, 0x5F, 0xAE, 0x03, 0x74, 0x1F, 0xC3, 0x95, 0x5E, 0x40, 0x0B, 0xF1, 0x78, 0xE4, 0xFD,
+0xF1, 0x71, 0xF0, 0x24, 0xD4, 0x80, 0x34, 0x74, 0x3F, 0xC3, 0x95, 0x5E, 0x40, 0x0B, 0xF1, 0x78,
+0x7D, 0x20, 0xF1, 0x6F, 0xF0, 0x24, 0x88, 0x80, 0x22, 0x74, 0x5F, 0xC3, 0x95, 0x5E, 0x40, 0x0B,
+0xF1, 0x78, 0x7D, 0x40, 0xF1, 0x6F, 0xF0, 0x24, 0xD0, 0x80, 0x10, 0x74, 0x7F, 0xC3, 0x95, 0x5E,
+0x40, 0x1F, 0xF1, 0x78, 0x7D, 0x60, 0xF1, 0x6F, 0xF0, 0x24, 0x84, 0xFD, 0xE4, 0x34, 0x04, 0xFC,
+0xE5, 0x5F, 0x12, 0xD1, 0x13, 0x75, 0xF0, 0x03, 0xEE, 0x12, 0x05, 0x28, 0xEC, 0xF0, 0xA3, 0xED,
+0xF0, 0x22, 0xC3, 0xEF, 0x9D, 0xF5, 0x60, 0xC3, 0x94, 0x08, 0x50, 0x1F, 0xE4, 0xF5, 0x61, 0x12,
+0xD1, 0x06, 0xF5, 0x83, 0xC0, 0x83, 0xC0, 0x82, 0x90, 0x92, 0x0B, 0xE0, 0xD0, 0x82, 0xD0, 0x83,
+0x75, 0xF0, 0x03, 0x12, 0x05, 0x28, 0xE5, 0x60, 0xF0, 0x80, 0x41, 0xE5, 0x60, 0xC3, 0x94, 0x10,
+0x50, 0x09, 0x75, 0x61, 0x01, 0xE5, 0x60, 0x24, 0xF8, 0x80, 0x17, 0xE5, 0x60, 0xC3, 0x94, 0x18,
+0x50, 0x09, 0x75, 0x61, 0x02, 0xE5, 0x60, 0x24, 0xF0, 0x80, 0x07, 0x75, 0x61, 0x03, 0xE5, 0x60,
+0x24, 0xE8, 0xFF, 0x12, 0xD1, 0x06, 0xF5, 0x83, 0xC0, 0x83, 0xC0, 0x82, 0x90, 0x92, 0x0B, 0xE0,
+0xD0, 0x82, 0xD0, 0x83, 0x75, 0xF0, 0x03, 0x12, 0x05, 0x28, 0xEF, 0xF0, 0xAF, 0x61, 0x22, 0xAF,
+0x5E, 0xF1, 0x02, 0x90, 0x92, 0x07, 0xEF, 0x22, 0x90, 0x92, 0x0B, 0xEE, 0xF0, 0xAB, 0x5F, 0x22,
+0x7F, 0x8F, 0x12, 0x7B, 0x51, 0xEF, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x93,
+0x8C, 0xEF, 0xF0, 0xF1, 0x80, 0x30, 0xE6, 0x38, 0x7F, 0x8D, 0x12, 0x7B, 0x51, 0xEF, 0x64, 0x01,
+0x70, 0x2E, 0x90, 0x93, 0x8D, 0xF0, 0x90, 0x93, 0x8D, 0xE0, 0xFD, 0x90, 0x93, 0x8C, 0xE0, 0x12,
+0x91, 0x68, 0xE5, 0x82, 0x2D, 0x12, 0xBA, 0x0F, 0xFB, 0xE4, 0xFF, 0x91, 0x44, 0x90, 0x93, 0x8D,
+0xE0, 0x04, 0xF0, 0xE0, 0xC3, 0x94, 0x10, 0x40, 0xDD, 0xF1, 0x80, 0x30, 0xE0, 0x02, 0xF1, 0xFB,
+0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x4D, 0xFF, 0x90, 0x86, 0x75, 0xF0, 0xEE, 0x22, 0xD1, 0x9F, 0xAB,
+0x5B, 0xAA, 0x5C, 0x22, 0x90, 0x92, 0x07, 0x12, 0x87, 0x79, 0x02, 0x02, 0xF6, 0x90, 0x00, 0x05,
+0x02, 0x03, 0x0F, 0x90, 0x00, 0x04, 0x02, 0x03, 0x0F, 0x61, 0x1E, 0xE4, 0xFD, 0x7F, 0x8D, 0x02,
+0x7B, 0x3E, 0x12, 0xD2, 0x09, 0x90, 0x92, 0xD0, 0xE0, 0x70, 0x0C, 0x12, 0xD2, 0x34, 0x30, 0xE0,
+0x06, 0x90, 0x92, 0xD6, 0x74, 0x01, 0xF0, 0x90, 0x92, 0xD2, 0xE0, 0x70, 0x0F, 0x11, 0xC9, 0xC4,
+0x54, 0x0F, 0xFF, 0xBF, 0x05, 0x06, 0x90, 0x92, 0xD7, 0x74, 0x01, 0xF0, 0x12, 0x8D, 0x90, 0xFF,
+0xF5, 0x5F, 0x12, 0x02, 0xF6, 0xFE, 0xC3, 0x13, 0x30, 0xE0, 0x07, 0x12, 0x8C, 0x7A, 0xF5, 0x60,
+0x80, 0x02, 0x8F, 0x60, 0x85, 0x5F, 0x5E, 0xE5, 0x5E, 0xD3, 0x95, 0x60, 0x50, 0x28, 0x11, 0xC9,
+0x54, 0x01, 0xFD, 0xAF, 0x5E, 0x12, 0x6E, 0x5F, 0xAF, 0x5E, 0x12, 0x77, 0x39, 0xEF, 0xAF, 0x5E,
+0x70, 0x04, 0x11, 0x91, 0x80, 0x02, 0xF1, 0xF6, 0x90, 0x92, 0xD7, 0xE0, 0x60, 0x04, 0xAF, 0x5E,
+0x11, 0x91, 0x05, 0x5E, 0x80, 0xD1, 0xE5, 0x5F, 0x70, 0x16, 0xFF, 0x12, 0x77, 0x39, 0xEF, 0x70,
+0x0F, 0x12, 0xC2, 0xFA, 0x12, 0x79, 0x61, 0x12, 0xD2, 0x69, 0x54, 0xBF, 0xF0, 0x54, 0x7F, 0xF0,
+0x22, 0x7D, 0x01, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x92, 0x07, 0xEF, 0xF0, 0xA3,
+0xED, 0xF0, 0x7D, 0x44, 0x12, 0xA7, 0xD0, 0x90, 0x92, 0x08, 0xE0, 0x90, 0x92, 0x07, 0xB4, 0x01,
+0x09, 0xE0, 0x11, 0xD6, 0xE0, 0x44, 0x04, 0xF0, 0x80, 0x07, 0xE0, 0x11, 0xD6, 0xE0, 0x54, 0xFB,
+0xF0, 0x12, 0xAF, 0x8C, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xAB, 0x5B, 0xAA, 0x5C, 0xA9, 0x5D, 0x02,
+0x02, 0xF6, 0xE0, 0xFD, 0xE5, 0x79, 0xC4, 0x54, 0xF0, 0x24, 0x05, 0xF5, 0x82, 0xE4, 0x34, 0x81,
+0xF5, 0x83, 0x22, 0x8D, 0x79, 0xEF, 0x30, 0xE6, 0x1A, 0x31, 0x66, 0x11, 0xD2, 0xE0, 0x54, 0x03,
+0x90, 0x91, 0x0B, 0xF0, 0xE4, 0xFB, 0xAF, 0x79, 0x12, 0x27, 0x3D, 0x31, 0x59, 0xD1, 0x70, 0x74,
+0x01, 0x80, 0x4D, 0x12, 0xD1, 0x55, 0x04, 0xF0, 0x12, 0xD1, 0x55, 0x64, 0x02, 0x70, 0x1F, 0x74,
+0x1D, 0x25, 0x79, 0x12, 0xD1, 0x33, 0xE0, 0xFD, 0xF4, 0x60, 0x02, 0x80, 0x04, 0x31, 0x66, 0xE0,
+0xFD, 0x11, 0xD4, 0x12, 0xD1, 0x62, 0x31, 0x66, 0xD1, 0x70, 0x74, 0x02, 0x80, 0x22, 0x12, 0xD1,
+0x55, 0xD3, 0x94, 0x03, 0x40, 0x0D, 0xAF, 0x79, 0x12, 0x6D, 0x94, 0x31, 0x59, 0xD1, 0x70, 0x74,
+0x03, 0x80, 0x0D, 0x31, 0x66, 0x11, 0xD2, 0x12, 0xD1, 0x62, 0x31, 0x66, 0xD1, 0x70, 0x74, 0x02,
+0xF0, 0xAB, 0x79, 0xE4, 0xFD, 0xFF, 0x02, 0x52, 0xC3, 0x74, 0xBC, 0x25, 0x79, 0xF5, 0x82, 0xE4,
+0x34, 0x90, 0xF5, 0x83, 0xE4, 0xF0, 0xE5, 0x79, 0xC4, 0x54, 0xF0, 0x24, 0x00, 0xF5, 0x82, 0xE4,
+0x34, 0x81, 0xF5, 0x83, 0x22, 0x90, 0x04, 0x85, 0xE0, 0xF5, 0x6C, 0x90, 0x93, 0x1C, 0xE0, 0x04,
+0xF0, 0xE4, 0xF5, 0x63, 0x90, 0x85, 0xBB, 0xE0, 0xFF, 0xE5, 0x63, 0xC3, 0x9F, 0x40, 0x02, 0xA1,
+0xAA, 0xE5, 0x63, 0x31, 0x68, 0xE0, 0xF5, 0x6E, 0x12, 0xD1, 0xBB, 0xE0, 0x65, 0x6E, 0x60, 0x16,
+0x90, 0x8A, 0x71, 0xE5, 0x6E, 0xF0, 0xE4, 0xA3, 0xF0, 0xAB, 0x63, 0xFD, 0xFF, 0x12, 0x52, 0xC3,
+0x12, 0xD1, 0xBB, 0xE5, 0x6E, 0xF0, 0x90, 0x04, 0xA0, 0xE0, 0x64, 0x01, 0x70, 0x4C, 0xA3, 0xE0,
+0x65, 0x63, 0x70, 0x46, 0xA3, 0xE0, 0xF5, 0x64, 0xA3, 0xE0, 0x90, 0x92, 0x50, 0xF0, 0xE5, 0x63,
+0x31, 0x68, 0xE0, 0x65, 0x64, 0x70, 0x02, 0xA1, 0xA6, 0xE5, 0x63, 0x31, 0x68, 0xE5, 0x64, 0xF0,
+0xE5, 0x63, 0x11, 0xD6, 0xE0, 0x54, 0xFC, 0xFF, 0x90, 0x92, 0x50, 0xE0, 0x54, 0x03, 0x4F, 0xFF,
+0xE5, 0x63, 0x11, 0xD6, 0xEF, 0xF0, 0x90, 0x8A, 0x71, 0xE5, 0x64, 0xF0, 0xA3, 0x74, 0xFF, 0xF0,
+0xAB, 0x63, 0xE4, 0xFD, 0xFF, 0x12, 0x52, 0xC3, 0xA1, 0xA6, 0xAF, 0x63, 0x12, 0x77, 0x39, 0x75,
+0xF0, 0x12, 0xE5, 0x63, 0x12, 0x8B, 0x16, 0x12, 0x8E, 0x8B, 0xFD, 0x12, 0xD1, 0xC7, 0xED, 0xF0,
+0x90, 0x92, 0x59, 0x12, 0xB2, 0xEC, 0xE5, 0x63, 0xF0, 0x12, 0xB1, 0x18, 0x08, 0x80, 0x05, 0xC3,
+0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0xFF, 0xEE, 0x5C, 0xFE, 0xEF, 0x5D, 0xFF, 0x90, 0x92, 0x5D,
+0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0x7B, 0x02, 0x7A, 0x00, 0xE4, 0xFD, 0x7F, 0x01, 0xD1, 0x06, 0x12,
+0xD1, 0x48, 0xFE, 0xA3, 0xE0, 0xFF, 0x12, 0xD1, 0x3B, 0xFD, 0xE5, 0x63, 0x12, 0xD1, 0x70, 0x54,
+0x80, 0xFB, 0x12, 0xD1, 0xC7, 0xEB, 0xF0, 0x12, 0xD1, 0xCE, 0xED, 0xF0, 0x90, 0x92, 0x57, 0x12,
+0xCA, 0x9A, 0x90, 0x92, 0x5D, 0xF0, 0xA3, 0xF0, 0x7B, 0x03, 0xFA, 0xFD, 0x7F, 0x01, 0xD1, 0x06,
+0xAF, 0x63, 0x12, 0x77, 0x39, 0xEF, 0x70, 0x02, 0xA1, 0xA6, 0x75, 0xF0, 0x12, 0xE5, 0x63, 0x12,
+0x8B, 0x16, 0x12, 0x8E, 0x8B, 0x30, 0xE0, 0x02, 0xA1, 0xA6, 0xE5, 0x63, 0x12, 0xB1, 0x18, 0x08,
+0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0xFF, 0xEE, 0x5C, 0xFE, 0xEF, 0x5D, 0x4E,
+0x60, 0x02, 0xA1, 0xA6, 0x12, 0xD1, 0x48, 0xFE, 0xA3, 0xE0, 0x4E, 0x70, 0x07, 0x12, 0xD1, 0x3B,
+0x70, 0x02, 0xA1, 0xA6, 0xE5, 0x63, 0x75, 0xF0, 0x12, 0xA4, 0x24, 0x44, 0xF9, 0x74, 0x89, 0x35,
+0xF0, 0xFA, 0x7B, 0x01, 0x90, 0x92, 0x4B, 0x12, 0x87, 0x79, 0xF1, 0xC4, 0x12, 0xD2, 0x5A, 0x12,
+0x03, 0xED, 0x2F, 0xFF, 0xF1, 0xF0, 0x2F, 0xFF, 0x12, 0xD1, 0xD5, 0x2F, 0xFF, 0x12, 0xD1, 0xDB,
+0x2F, 0xF5, 0x6D, 0x12, 0xD1, 0x48, 0xF5, 0x69, 0xA3, 0xE0, 0xF5, 0x6A, 0x12, 0xD1, 0x3B, 0xFF,
+0x90, 0x92, 0x4E, 0xE4, 0xF0, 0xA3, 0xEF, 0xF0, 0xE5, 0x63, 0x31, 0x68, 0xE0, 0xF5, 0x64, 0x54,
+0x80, 0xF5, 0x66, 0xE5, 0x64, 0x54, 0x7F, 0xF5, 0x65, 0xF1, 0xC4, 0x12, 0x03, 0xED, 0xF1, 0xCA,
+0x12, 0xD2, 0x5A, 0x90, 0x92, 0x59, 0xF1, 0xCE, 0xF1, 0xF0, 0xFF, 0x90, 0x92, 0x5B, 0xF1, 0xCE,
+0x12, 0xD1, 0xD5, 0xFF, 0x90, 0x92, 0x5D, 0xF1, 0xCE, 0x7B, 0x01, 0xF1, 0xDD, 0xF1, 0xC4, 0x12,
+0xD1, 0xDB, 0xF1, 0xCA, 0x90, 0x92, 0x4E, 0xF1, 0xFA, 0xF0, 0xA3, 0xEF, 0xF0, 0xA3, 0x12, 0xD2,
+0x52, 0xA3, 0xE4, 0xF0, 0xA3, 0xE5, 0x64, 0xF0, 0x7B, 0x02, 0xF1, 0xDD, 0x74, 0x7C, 0x25, 0x63,
+0xF5, 0x82, 0xE4, 0x34, 0x90, 0xF5, 0x83, 0xE0, 0xC3, 0x94, 0x05, 0x40, 0x02, 0xA1, 0x8B, 0x75,
+0xF0, 0x12, 0xE5, 0x63, 0x12, 0xB7, 0xD3, 0xFF, 0xE5, 0x65, 0xD3, 0x9F, 0x40, 0x08, 0x8F, 0x65,
+0xE5, 0x65, 0x45, 0x66, 0xF5, 0x64, 0xE5, 0x65, 0x90, 0x82, 0xE1, 0x93, 0xF5, 0x6B, 0xE5, 0x66,
+0x60, 0x04, 0x05, 0x6B, 0x05, 0x6B, 0x90, 0x04, 0x8C, 0xE0, 0x64, 0x01, 0x70, 0x28, 0xE5, 0x65,
+0xC3, 0x94, 0x0C, 0x40, 0x21, 0x74, 0x84, 0x25, 0x65, 0xF5, 0x82, 0xE4, 0x34, 0x04, 0xF5, 0x83,
+0xE0, 0xFF, 0x54, 0x7F, 0xFE, 0xEF, 0x30, 0xE7, 0x06, 0xE5, 0x6B, 0x2E, 0xFF, 0x80, 0x05, 0xC3,
+0xE5, 0x6B, 0x9E, 0xFF, 0x8F, 0x6B, 0xE5, 0x6B, 0xD3, 0x94, 0x1A, 0xAF, 0x6B, 0x40, 0x02, 0x7F,
+0x1A, 0x8F, 0x6B, 0xB1, 0xB0, 0x7B, 0x03, 0xFA, 0xF1, 0xDF, 0xE5, 0x64, 0x90, 0x83, 0x59, 0x93,
+0xFF, 0xD3, 0x90, 0x92, 0x4F, 0xE0, 0x9F, 0x90, 0x92, 0x4E, 0xE0, 0x94, 0x00, 0x40, 0x02, 0x80,
+0x71, 0xC3, 0xE5, 0x6A, 0x94, 0x0A, 0xE5, 0x69, 0x94, 0x00, 0x40, 0x02, 0x81, 0xD3, 0xB1, 0xF4,
+0xE0, 0xC3, 0x94, 0x01, 0x40, 0x05, 0xB1, 0xF4, 0xE0, 0x14, 0xF0, 0xF1, 0xC4, 0x12, 0xD1, 0xDB,
+0xFF, 0x90, 0x92, 0x4F, 0xE0, 0x2F, 0xFF, 0x90, 0x92, 0x4E, 0xE0, 0x35, 0xF0, 0xFE, 0x12, 0xD1,
+0xD5, 0x2F, 0xFF, 0xEE, 0x35, 0xF0, 0xFE, 0xF1, 0xF0, 0x2F, 0xFD, 0xEE, 0x35, 0xF0, 0xFC, 0xE5,
+0x69, 0xC3, 0x13, 0xFE, 0xE5, 0x6A, 0x13, 0xFF, 0xD3, 0xED, 0x9F, 0xEC, 0x9E, 0x40, 0x28, 0xE5,
+0x63, 0x94, 0x05, 0x50, 0x05, 0xB1, 0xF4, 0x74, 0x03, 0xF0, 0x90, 0x92, 0x57, 0x12, 0xD2, 0x52,
+0xE5, 0x69, 0xC3, 0x13, 0xA3, 0xF0, 0xE5, 0x6A, 0x13, 0xA3, 0xB1, 0xC6, 0xF1, 0xE5, 0x7B, 0x01,
+0xD1, 0x00, 0x12, 0xB2, 0x1B, 0xA1, 0x8B, 0xF1, 0xC4, 0x12, 0x03, 0xED, 0x65, 0x6D, 0x70, 0x02,
+0xE5, 0xF0, 0x70, 0x4F, 0x90, 0x92, 0x57, 0xF0, 0xA3, 0xE5, 0x6D, 0xF0, 0xC3, 0x13, 0xFF, 0xA3,
+0xE4, 0xF0, 0xA3, 0xEF, 0xB1, 0xC6, 0xF1, 0xE5, 0x7B, 0x02, 0xD1, 0x00, 0xE5, 0x63, 0xC3, 0x94,
+0x05, 0x50, 0x0E, 0xB1, 0xF4, 0xE0, 0xD3, 0x94, 0x00, 0x40, 0x06, 0xB1, 0xAB, 0x7B, 0x03, 0x80,
+0x0B, 0xE5, 0x6D, 0xC3, 0x94, 0x03, 0x50, 0x10, 0xB1, 0xAB, 0x7B, 0x04, 0xFA, 0xD1, 0x02, 0x7D,
+0x06, 0xAF, 0x63, 0x12, 0xC5, 0xAB, 0xA1, 0xA6, 0xE4, 0xFD, 0xAF, 0x63, 0xD1, 0x83, 0x12, 0xC5,
+0xA7, 0xA1, 0x8B, 0xB1, 0xAB, 0x7B, 0x08, 0xFA, 0xD1, 0x02, 0x7D, 0x01, 0xAF, 0x63, 0x12, 0x65,
+0xC2, 0xA1, 0x8B, 0xB1, 0xF4, 0xE4, 0xF0, 0x90, 0x92, 0x55, 0x74, 0x02, 0xF0, 0xAB, 0x6B, 0xAD,
+0x63, 0xAF, 0x6A, 0xAE, 0x69, 0x12, 0xB3, 0x26, 0x8E, 0x67, 0x8F, 0x68, 0x12, 0xD1, 0x8B, 0xF5,
+0x83, 0xC3, 0x74, 0x01, 0x93, 0x95, 0x68, 0xE4, 0x93, 0x95, 0x67, 0x50, 0x17, 0xD1, 0x77, 0xE4,
+0xF0, 0x7D, 0x01, 0xAF, 0x63, 0xD1, 0x83, 0x12, 0xD0, 0xB8, 0xE4, 0x90, 0x92, 0x5B, 0xB1, 0xBE,
+0x7B, 0x01, 0x80, 0x22, 0xF1, 0xD5, 0xC3, 0xE5, 0x68, 0x9F, 0xE5, 0x67, 0x94, 0x00, 0x50, 0x1C,
+0xD1, 0x77, 0xE4, 0xF0, 0x12, 0xB2, 0x1B, 0x12, 0xD0, 0xD3, 0xF1, 0xD5, 0x12, 0xD1, 0xCE, 0xEF,
+0xF0, 0xE4, 0xB1, 0xBD, 0x7B, 0x02, 0xFA, 0x12, 0xD2, 0x4B, 0x80, 0x4F, 0x12, 0xC5, 0xA7, 0x12,
+0xD0, 0xB8, 0xF1, 0xD5, 0x12, 0xD1, 0xC7, 0xEF, 0xF0, 0xD1, 0x77, 0xF1, 0xE5, 0x7B, 0x03, 0x7A,
+0x00, 0x12, 0xD2, 0x4B, 0xD1, 0x77, 0xE0, 0x04, 0xF0, 0xE5, 0x65, 0x90, 0x83, 0x6D, 0x93, 0xFF,
+0xD1, 0x77, 0xE0, 0xC3, 0x9F, 0x40, 0x24, 0xD1, 0x77, 0xE4, 0xF0, 0xF1, 0xD5, 0x12, 0xD1, 0x8B,
+0xF5, 0x83, 0x74, 0x01, 0x93, 0x2F, 0xFF, 0xE4, 0x93, 0x34, 0x00, 0xC3, 0x13, 0xFE, 0xEF, 0x13,
+0xFF, 0xE5, 0x63, 0x12, 0xB3, 0x1A, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0xE4, 0xF5, 0x6D, 0xFD, 0xAF,
+0x63, 0x12, 0x65, 0xC2, 0xE4, 0x90, 0x92, 0x57, 0xF0, 0xB1, 0xB9, 0xA3, 0xF0, 0x7B, 0x01, 0xFA,
+0x7D, 0xFF, 0x7F, 0x01, 0xD1, 0x06, 0x05, 0x63, 0x21, 0x84, 0x22, 0x90, 0x93, 0x1C, 0xE0, 0xFF,
+0x90, 0x92, 0x57, 0xE4, 0xF0, 0xA3, 0xEF, 0xF0, 0xE4, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3,
+0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0x22, 0xF0, 0x90, 0x92, 0x4B, 0x12, 0x87, 0x70, 0x90, 0x00, 0x06,
+0x12, 0x04, 0x18, 0xFF, 0xAE, 0xF0, 0x90, 0x00, 0x08, 0x12, 0x04, 0x18, 0x2F, 0xFF, 0xE5, 0xF0,
+0x3E, 0xFE, 0x90, 0x00, 0x04, 0x12, 0x04, 0x18, 0x2F, 0xFF, 0xEE, 0x35, 0xF0, 0x90, 0x92, 0x5B,
+0xF0, 0xA3, 0xEF, 0xF0, 0x74, 0x2D, 0x25, 0x63, 0xF5, 0x82, 0xE4, 0x34, 0x93, 0xF5, 0x83, 0x22,
+0x7A, 0x00, 0x7D, 0x03, 0x7F, 0x01, 0x90, 0x01, 0xC6, 0xE0, 0xFE, 0x64, 0x80, 0x70, 0x60, 0x90,
+0x92, 0x61, 0xEF, 0xF0, 0xA3, 0xED, 0xF0, 0xEB, 0xA3, 0xF0, 0xEA, 0xA3, 0xF0, 0x90, 0x92, 0x57,
+0xE0, 0xFC, 0xA3, 0xE0, 0x90, 0x92, 0x65, 0xF0, 0xEC, 0xA3, 0xF0, 0x90, 0x92, 0x59, 0xE0, 0xFC,
+0xA3, 0xE0, 0x90, 0x92, 0x67, 0xF0, 0xEC, 0xA3, 0xF0, 0x90, 0x92, 0x5B, 0xE0, 0xFC, 0xA3, 0xE0,
+0x90, 0x92, 0x69, 0xF0, 0xEC, 0xA3, 0xF0, 0x90, 0x92, 0x5D, 0xE0, 0xFC, 0xA3, 0xE0, 0x90, 0x92,
+0x6B, 0xF0, 0xEC, 0xA3, 0xF0, 0x90, 0x92, 0x5F, 0x74, 0xFE, 0xF0, 0x90, 0x92, 0x6D, 0x74, 0x0C,
+0xF0, 0x7B, 0x01, 0x7A, 0x92, 0x79, 0x5F, 0x12, 0x5E, 0x10, 0x7F, 0x04, 0x12, 0x87, 0xBB, 0x22,
+0xE0, 0x90, 0x8A, 0x71, 0xF0, 0xA3, 0x22, 0x74, 0xAC, 0x25, 0x63, 0xF5, 0x82, 0xE4, 0x34, 0x8F,
+0xF5, 0x83, 0x22, 0x8F, 0x6F, 0x8D, 0x70, 0xEF, 0x31, 0x68, 0xE0, 0xF5, 0x71, 0x54, 0x7F, 0xF5,
+0x72, 0xE5, 0x71, 0x54, 0x80, 0xF5, 0x74, 0x75, 0xF0, 0x12, 0xEF, 0x12, 0xB7, 0xD3, 0xF5, 0x76,
+0x75, 0xF0, 0x12, 0xEF, 0x12, 0x8B, 0x16, 0xC4, 0x54, 0x03, 0xF5, 0x77, 0x12, 0xD1, 0x2F, 0x74,
+0xFF, 0xF0, 0x12, 0xB3, 0x04, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0xE5, 0x71, 0x45, 0x74, 0xFF, 0x12,
+0xB2, 0xF8, 0xEF, 0xF0, 0xE5, 0x6F, 0x11, 0xD6, 0xE0, 0x54, 0x03, 0xF5, 0x75, 0x74, 0x4C, 0x25,
+0x6F, 0x12, 0xB7, 0xB5, 0xE5, 0x75, 0xF0, 0xE5, 0x72, 0x65, 0x76, 0x70, 0x44, 0x75, 0xF0, 0x12,
+0xE5, 0x6F, 0x12, 0x8E, 0x97, 0xC4, 0x13, 0x54, 0x07, 0x30, 0xE0, 0x0C, 0xE5, 0x74, 0x70, 0x08,
+0xE5, 0x72, 0x44, 0x80, 0xF5, 0x71, 0xE1, 0x94, 0x12, 0xB3, 0x04, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0,
+0x12, 0xB3, 0x18, 0xF1, 0xFA, 0x12, 0xB2, 0xED, 0xE5, 0x6F, 0xF0, 0xE4, 0x90, 0x92, 0x5B, 0xB1,
+0xBE, 0x7B, 0x01, 0xFA, 0x7D, 0x02, 0x7F, 0x04, 0xD1, 0x06, 0x7D, 0x07, 0xAF, 0x6F, 0x02, 0xC5,
+0xAB, 0xE5, 0x72, 0xC3, 0x95, 0x76, 0x50, 0x64, 0xAB, 0x6F, 0xAD, 0x76, 0xAF, 0x72, 0x12, 0x72,
+0xEA, 0x8F, 0x73, 0x85, 0x73, 0x71, 0x75, 0xF0, 0x12, 0xE5, 0x6F, 0x12, 0x8E, 0x97, 0xC4, 0x13,
+0x54, 0x01, 0xFF, 0x90, 0x92, 0x5B, 0x12, 0xB2, 0xEC, 0xE5, 0x73, 0xF0, 0xA3, 0xE4, 0xF0, 0xA3,
+0xE5, 0x72, 0xF0, 0xE5, 0x74, 0x12, 0x8E, 0x8B, 0xF1, 0xE6, 0xE4, 0xFB, 0xFA, 0x12, 0xD2, 0x62,
+0xE5, 0x72, 0xC3, 0x94, 0x0C, 0x40, 0x2D, 0x75, 0xF0, 0x12, 0xE5, 0x6F, 0x12, 0x8E, 0x97, 0xC4,
+0x13, 0x54, 0x07, 0x30, 0xE0, 0x1E, 0xE5, 0x70, 0x60, 0x1A, 0xE5, 0x74, 0x70, 0x16, 0xE5, 0x72,
+0x44, 0x80, 0xF5, 0x71, 0x12, 0xD1, 0x2F, 0xE5, 0x73, 0xF0, 0x80, 0x08, 0x12, 0xB2, 0xF8, 0xE5,
+0x76, 0xF0, 0xF5, 0x71, 0x12, 0xB2, 0xF1, 0xE5, 0x71, 0xF0, 0x12, 0xD1, 0x2F, 0xE0, 0xFF, 0x12,
+0xD1, 0xCE, 0xEF, 0xF0, 0xA3, 0xE4, 0xF0, 0xA3, 0xE5, 0x75, 0x12, 0xB7, 0xAD, 0xF0, 0x7B, 0x01,
+0x7A, 0x00, 0x12, 0xD2, 0x62, 0x90, 0x91, 0x0B, 0xE5, 0x75, 0xF0, 0xAB, 0x70, 0xAD, 0x71, 0xAF,
+0x6F, 0x02, 0x27, 0x3D, 0x90, 0x92, 0x4B, 0x02, 0x87, 0x70, 0xFF, 0x90, 0x92, 0x57, 0xE5, 0xF0,
+0xF0, 0xA3, 0xEF, 0xF0, 0x22, 0xE5, 0x65, 0x90, 0x83, 0x1D, 0x93, 0xFF, 0x22, 0x7A, 0x00, 0x7D,
+0x01, 0x7F, 0x01, 0xC1, 0x06, 0xE0, 0xFF, 0x90, 0x92, 0x5D, 0xE4, 0xF0, 0xA3, 0xEF, 0xF0, 0x22,
+0x90, 0x00, 0x04, 0x02, 0x04, 0x18, 0xE4, 0xFD, 0x01, 0x93, 0xE0, 0xFF, 0xA3, 0xE0, 0x90, 0x92,
+0x59, 0xCF, 0x22, 0x90, 0x92, 0x07, 0x12, 0x87, 0x79, 0x90, 0x04, 0x24, 0xE0, 0xF5, 0x5B, 0xE4,
+0xFF, 0x12, 0x89, 0xB9, 0x8F, 0x82, 0x75, 0x83, 0x00, 0x12, 0x03, 0x0F, 0x25, 0x5B, 0xFE, 0xEF,
+0x75, 0xF0, 0x0E, 0xA4, 0x24, 0xB1, 0xF5, 0x82, 0xE4, 0x34, 0x92, 0xF5, 0x83, 0xEE, 0xF0, 0x0F,
+0xEF, 0xB4, 0x03, 0xDD, 0x22, 0x12, 0x02, 0xF6, 0xFF, 0x90, 0x92, 0x9B, 0xF0, 0xBF, 0x01, 0x07,
+0x11, 0x48, 0xE4, 0x90, 0x92, 0x9B, 0xF0, 0x22, 0x11, 0xF8, 0x7F, 0xF5, 0x7E, 0x01, 0x12, 0x64,
+0x37, 0xBF, 0x01, 0x06, 0x90, 0x92, 0x07, 0xE0, 0xA3, 0xF0, 0x11, 0xF8, 0x7F, 0xF6, 0x7E, 0x01,
+0x12, 0x64, 0x37, 0xBF, 0x01, 0x08, 0x90, 0x92, 0x07, 0xE0, 0x90, 0x92, 0x09, 0xF0, 0x11, 0xF8,
+0x7F, 0xF4, 0x7E, 0x01, 0x12, 0x64, 0x37, 0xBF, 0x01, 0x08, 0x90, 0x92, 0x07, 0xE0, 0x90, 0x92,
+0x0A, 0xF0, 0x11, 0xF8, 0x7F, 0xF3, 0x7E, 0x01, 0x12, 0x64, 0x37, 0xBF, 0x01, 0x08, 0x90, 0x92,
+0x07, 0xE0, 0x90, 0x92, 0x0B, 0xF0, 0x11, 0xF8, 0x7F, 0xF2, 0x7E, 0x01, 0x12, 0x64, 0x37, 0xBF,
+0x01, 0x08, 0x90, 0x92, 0x07, 0xE0, 0x90, 0x92, 0x0C, 0xF0, 0x90, 0x92, 0x08, 0xE0, 0xFF, 0xA3,
+0xE0, 0xFD, 0xA3, 0xE0, 0xFB, 0xA3, 0xE0, 0x90, 0x92, 0x10, 0xF0, 0x90, 0x92, 0x0C, 0xE0, 0x90,
+0x92, 0x11, 0xF0, 0x90, 0x92, 0x12, 0x74, 0x12, 0xF0, 0x90, 0x92, 0x20, 0x74, 0x05, 0xF0, 0x90,
+0x92, 0x14, 0xEF, 0xF0, 0xA3, 0xED, 0xF0, 0xA3, 0xEB, 0xF0, 0x90, 0x92, 0x10, 0xE0, 0x90, 0x92,
+0x17, 0xF0, 0x90, 0x92, 0x11, 0xE0, 0x90, 0x92, 0x18, 0xF0, 0x7B, 0x01, 0x7A, 0x92, 0x79, 0x12,
+0x12, 0x5E, 0x10, 0x7F, 0x04, 0x02, 0x87, 0xBB, 0x7B, 0x01, 0x7A, 0x92, 0x79, 0x07, 0x22, 0x12,
+0x02, 0xF6, 0x54, 0x01, 0xFF, 0x90, 0x92, 0xDB, 0xE0, 0x54, 0xFE, 0x4F, 0xF0, 0x22, 0xD3, 0x10,
+0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x12, 0xD2, 0x09, 0x90, 0x05, 0x27, 0xE0, 0xF5, 0x5E, 0x8B, 0x1B,
+0x8A, 0x1C, 0x89, 0x1D, 0x75, 0x1E, 0x01, 0x7B, 0x01, 0x7A, 0x85, 0x79, 0xBC, 0x12, 0x6A, 0x21,
+0x12, 0x90, 0xC9, 0xFF, 0xC3, 0x13, 0x20, 0xE0, 0x02, 0x21, 0xC3, 0x90, 0x85, 0xBC, 0xE0, 0x30,
+0xE0, 0x70, 0xB1, 0x3A, 0x75, 0x5E, 0x21, 0xB1, 0x52, 0x30, 0xE0, 0x04, 0xD1, 0x1C, 0x80, 0x0D,
+0xE4, 0x90, 0x85, 0xBD, 0xF0, 0xA3, 0xF0, 0x7D, 0x40, 0xFF, 0x12, 0x7C, 0x41, 0xB1, 0x49, 0x54,
+0x1F, 0x30, 0xE0, 0x03, 0x43, 0x5E, 0x12, 0xEF, 0xC4, 0x54, 0x0F, 0x30, 0xE0, 0x03, 0x43, 0x5E,
+0x14, 0x90, 0x85, 0xBC, 0xE0, 0xC4, 0x13, 0x54, 0x07, 0x30, 0xE0, 0x03, 0x43, 0x5E, 0x80, 0x90,
+0x85, 0xBC, 0x12, 0xB7, 0xC9, 0x20, 0xE0, 0x03, 0x43, 0x5E, 0x40, 0x51, 0x69, 0x90, 0x85, 0xBF,
+0xE0, 0x70, 0x04, 0x7F, 0x01, 0x91, 0x1F, 0x90, 0x85, 0xBC, 0xB1, 0x41, 0x30, 0xE0, 0x04, 0x7F,
+0x04, 0x80, 0x0B, 0xB1, 0x5B, 0xEF, 0x60, 0x04, 0x7F, 0x01, 0x80, 0x02, 0x7F, 0x02, 0x91, 0x1F,
+0x80, 0x7F, 0x51, 0x66, 0x90, 0x85, 0xBF, 0xE0, 0x64, 0x04, 0x60, 0x02, 0x41, 0x61, 0xFF, 0x91,
+0x1F, 0x41, 0x61, 0x90, 0x85, 0xBC, 0xE0, 0x30, 0xE0, 0x6F, 0xB1, 0x3A, 0x43, 0x5E, 0x31, 0xB1,
+0x52, 0x30, 0xE0, 0x04, 0xD1, 0x1C, 0x80, 0x07, 0x7D, 0x40, 0xE4, 0xFF, 0x12, 0x7C, 0x41, 0xB1,
+0x49, 0x54, 0x1F, 0x30, 0xE0, 0x03, 0x43, 0x5E, 0x02, 0xEF, 0xC4, 0x54, 0x0F, 0x30, 0xE0, 0x03,
+0x43, 0x5E, 0x04, 0x51, 0x69, 0x90, 0x85, 0xBC, 0xB1, 0x41, 0x30, 0xE0, 0x0A, 0xD1, 0x61, 0x60,
+0x30, 0xE4, 0xFD, 0x7F, 0x02, 0x80, 0x1E, 0x12, 0xC5, 0x9F, 0x90, 0x85, 0xC0, 0xE0, 0xB4, 0x02,
+0x18, 0x12, 0x7A, 0xA2, 0xB1, 0x5B, 0xBF, 0x01, 0x09, 0x90, 0x85, 0xC7, 0xE0, 0xFF, 0x7D, 0x01,
+0x80, 0x03, 0xE4, 0xFD, 0xFF, 0x51, 0x74, 0x80, 0x08, 0x90, 0x85, 0xC8, 0xE0, 0x90, 0x85, 0xC0,
+0xF0, 0x90, 0x05, 0x40, 0x74, 0x22, 0xF0, 0x80, 0x28, 0x51, 0x66, 0x90, 0x85, 0xC0, 0xE0, 0xB4,
+0x02, 0x06, 0x7D, 0x01, 0x7F, 0x04, 0x80, 0x0B, 0x90, 0x85, 0xC0, 0xE0, 0xB4, 0x08, 0x06, 0x7D,
+0x01, 0x7F, 0x0C, 0x51, 0x74, 0x12, 0xC8, 0x7E, 0x90, 0x85, 0xC7, 0x12, 0xBB, 0x86, 0x12, 0xC8,
+0x53, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x75, 0x5E, 0x01, 0x90, 0x05, 0x27, 0xE5, 0x5E, 0xF0, 0x22,
+0x7D, 0x01, 0x7F, 0x04, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x93, 0x94, 0xED, 0xF0,
+0x90, 0x85, 0xC1, 0xE0, 0xFE, 0xC4, 0x13, 0x13, 0x54, 0x03, 0x30, 0xE0, 0x02, 0x61, 0xCF, 0xEE,
+0x12, 0x8E, 0x8B, 0x30, 0xE0, 0x02, 0x61, 0xCF, 0x90, 0x85, 0xC8, 0xE0, 0xFE, 0x6F, 0x70, 0x02,
+0x61, 0xCF, 0xEF, 0x70, 0x02, 0x61, 0x3A, 0x24, 0xFE, 0x70, 0x02, 0x61, 0x77, 0x24, 0xFE, 0x60,
+0x4D, 0x24, 0xFC, 0x70, 0x02, 0x61, 0xB6, 0x24, 0xFC, 0x60, 0x02, 0x61, 0xC8, 0xEE, 0xB4, 0x0E,
+0x03, 0x12, 0x74, 0x93, 0x90, 0x85, 0xC8, 0xE0, 0x70, 0x05, 0x7F, 0x01, 0x12, 0x79, 0x80, 0x90,
+0x85, 0xC8, 0xE0, 0xB4, 0x06, 0x03, 0x12, 0x73, 0x8E, 0x90, 0x85, 0xC8, 0xE0, 0xB4, 0x04, 0x0F,
+0x90, 0x93, 0x94, 0xE0, 0xFF, 0x60, 0x05, 0x12, 0x6D, 0x4C, 0x80, 0x03, 0x12, 0x79, 0x61, 0x90,
+0x85, 0xC8, 0xE0, 0x64, 0x08, 0x60, 0x02, 0x61, 0xC8, 0x12, 0x7A, 0xB9, 0x61, 0xC8, 0x90, 0x85,
+0xC8, 0xE0, 0x70, 0x05, 0x7F, 0x01, 0x12, 0x79, 0x80, 0x90, 0x85, 0xC8, 0xE0, 0xB4, 0x06, 0x03,
+0x12, 0x73, 0x8E, 0x90, 0x85, 0xC8, 0xE0, 0xB4, 0x0E, 0x08, 0x71, 0xD4, 0xBF, 0x01, 0x03, 0x12,
+0x74, 0x93, 0x90, 0x85, 0xC8, 0xE0, 0x64, 0x0C, 0x60, 0x02, 0x61, 0xC8, 0x71, 0xD4, 0xEF, 0x64,
+0x01, 0x60, 0x02, 0x61, 0xC8, 0x12, 0x70, 0x9E, 0x61, 0xC8, 0x90, 0x85, 0xC8, 0xE0, 0xB4, 0x0E,
+0x08, 0x71, 0xD4, 0xBF, 0x01, 0x03, 0x12, 0x74, 0x93, 0x90, 0x85, 0xC8, 0xE0, 0xB4, 0x06, 0x03,
+0x12, 0x73, 0x8E, 0x90, 0x85, 0xC8, 0xE0, 0xB4, 0x0C, 0x08, 0x71, 0xD4, 0xBF, 0x01, 0x03, 0x12,
+0x70, 0x9E, 0x90, 0x85, 0xC8, 0xE0, 0x64, 0x04, 0x70, 0x5E, 0x12, 0xC3, 0x94, 0xEF, 0x64, 0x01,
+0x70, 0x56, 0x12, 0x77, 0xFE, 0x80, 0x51, 0x90, 0x85, 0xC8, 0xE0, 0xB4, 0x0E, 0x08, 0x71, 0xD4,
+0xBF, 0x01, 0x03, 0x12, 0x74, 0x93, 0x90, 0x85, 0xC8, 0xE0, 0xB4, 0x06, 0x03, 0x12, 0x73, 0x8E,
+0x90, 0x85, 0xC8, 0xE0, 0xB4, 0x0C, 0x08, 0x71, 0xD4, 0xBF, 0x01, 0x03, 0x12, 0x70, 0x9E, 0x90,
+0x85, 0xC8, 0xE0, 0x70, 0x05, 0x7F, 0x01, 0x12, 0x79, 0x80, 0x90, 0x85, 0xC8, 0xE0, 0xB4, 0x04,
+0x17, 0x12, 0x79, 0xF3, 0x80, 0x12, 0x90, 0x85, 0xC8, 0xE0, 0xB4, 0x0C, 0x0B, 0x12, 0xA1, 0x76,
+0x54, 0x3F, 0x30, 0xE0, 0x03, 0x12, 0x7A, 0x8A, 0x90, 0x85, 0xC8, 0x12, 0xD1, 0x7E, 0xF0, 0xD0,
+0xD0, 0x92, 0xAF, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x12, 0x7A, 0x29, 0xEF, 0x64,
+0x01, 0x60, 0x05, 0x75, 0x0F, 0x01, 0x80, 0x24, 0x90, 0x85, 0xC1, 0xE0, 0x13, 0x13, 0x13, 0x54,
+0x1F, 0x30, 0xE0, 0x05, 0x75, 0x0F, 0x02, 0x80, 0x13, 0x90, 0x85, 0xC7, 0xE0, 0xD3, 0x94, 0x04,
+0x40, 0x05, 0x75, 0x0F, 0x08, 0x80, 0x05, 0x12, 0xC2, 0xB0, 0x80, 0x0E, 0x90, 0x01, 0xB9, 0x74,
+0x02, 0xF0, 0x90, 0x01, 0xB8, 0xE5, 0x0F, 0xF0, 0x7F, 0x00, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xD3,
+0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x85, 0xBF, 0xE0, 0x90, 0x93, 0x93, 0xF0, 0x6F, 0x70,
+0x02, 0xA1, 0x35, 0xEF, 0x14, 0x60, 0x46, 0x14, 0x60, 0x71, 0x14, 0x70, 0x02, 0x81, 0xD9, 0x14,
+0x70, 0x02, 0xA1, 0x08, 0x24, 0x04, 0x60, 0x02, 0xA1, 0x35, 0x90, 0x93, 0x93, 0xE0, 0xB4, 0x04,
+0x05, 0x12, 0xC3, 0x4E, 0xA1, 0x35, 0x90, 0x93, 0x93, 0xE0, 0xB4, 0x02, 0x05, 0x12, 0xC3, 0x5D,
+0xA1, 0x35, 0x90, 0x93, 0x93, 0xE0, 0xB4, 0x03, 0x05, 0x12, 0xC3, 0x62, 0xA1, 0x35, 0x90, 0x93,
+0x93, 0xE0, 0x64, 0x01, 0x60, 0x02, 0xA1, 0x35, 0x12, 0xC3, 0x50, 0xA1, 0x35, 0x90, 0x93, 0x93,
+0xE0, 0xB4, 0x04, 0x05, 0x12, 0xC3, 0x43, 0xA1, 0x35, 0x90, 0x93, 0x93, 0xE0, 0xB4, 0x02, 0x04,
+0xF1, 0xE8, 0xA1, 0x35, 0x90, 0x93, 0x93, 0xE0, 0xB4, 0x03, 0x04, 0xF1, 0xDB, 0xA1, 0x35, 0x90,
+0x93, 0x93, 0xE0, 0x60, 0x02, 0xA1, 0x35, 0xF1, 0xD9, 0xA1, 0x35, 0x90, 0x93, 0x93, 0xE0, 0xB4,
+0x04, 0x05, 0x12, 0xC5, 0x95, 0x80, 0x7E, 0x90, 0x93, 0x93, 0xE0, 0xB4, 0x01, 0x04, 0xF1, 0xED,
+0x80, 0x73, 0x90, 0x93, 0x93, 0xE0, 0xB4, 0x03, 0x05, 0x12, 0xC5, 0x9C, 0x80, 0x67, 0x90, 0x93,
+0x93, 0xE0, 0x70, 0x61, 0x12, 0xC8, 0x72, 0x80, 0x5C, 0x90, 0x93, 0x93, 0xE0, 0xB4, 0x04, 0x05,
+0x12, 0xC3, 0x67, 0x80, 0x50, 0x90, 0x93, 0x93, 0xE0, 0xB4, 0x01, 0x05, 0x12, 0xA7, 0xDE, 0x80,
+0x44, 0x90, 0x93, 0x93, 0xE0, 0xB4, 0x02, 0x05, 0x12, 0xC3, 0x34, 0x80, 0x38, 0x90, 0x93, 0x93,
+0xE0, 0x70, 0x32, 0x12, 0xC8, 0x78, 0x80, 0x2D, 0x90, 0x93, 0x93, 0xE0, 0xB4, 0x03, 0x05, 0x12,
+0xC3, 0x86, 0x80, 0x21, 0x90, 0x93, 0x93, 0xE0, 0xB4, 0x01, 0x05, 0x12, 0xC3, 0x73, 0x80, 0x15,
+0x90, 0x93, 0x93, 0xE0, 0xB4, 0x02, 0x05, 0x12, 0xC3, 0x24, 0x80, 0x09, 0x90, 0x93, 0x93, 0xE0,
+0x70, 0x03, 0x12, 0xC3, 0x81, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x7D, 0x03, 0x7F, 0x02, 0x02, 0x7B,
+0xFD, 0xE0, 0xFF, 0xC4, 0x13, 0x13, 0x54, 0x03, 0x22, 0x90, 0x85, 0xBC, 0xE0, 0xFF, 0x13, 0x13,
+0x13, 0x22, 0x90, 0x85, 0xBC, 0xE0, 0x13, 0x13, 0x54, 0x3F, 0x22, 0x90, 0x05, 0x43, 0xE0, 0x7F,
+0x00, 0x30, 0xE7, 0x02, 0x7F, 0x01, 0x22, 0xE4, 0xF5, 0x78, 0x90, 0x85, 0xC5, 0xE0, 0x70, 0x02,
+0xC1, 0x09, 0x12, 0xBB, 0xA6, 0x60, 0x02, 0xC1, 0x09, 0x12, 0xD0, 0xDE, 0x12, 0xA1, 0x8E, 0x60,
+0x22, 0x24, 0xFE, 0x60, 0x03, 0x04, 0x70, 0x1E, 0x90, 0x85, 0xCC, 0xE0, 0x14, 0xF0, 0xE0, 0xFF,
+0x60, 0x06, 0x90, 0x85, 0xCE, 0xE0, 0x60, 0x0E, 0xEF, 0x70, 0x08, 0x90, 0x85, 0xCB, 0xE0, 0xA3,
+0xF0, 0x80, 0x00, 0x75, 0x78, 0x01, 0x90, 0x85, 0xBC, 0xE0, 0x30, 0xE0, 0x11, 0x90, 0x85, 0xC0,
+0xE0, 0xB4, 0x02, 0x03, 0xE4, 0xF5, 0x78, 0xB1, 0x5B, 0xEF, 0x70, 0x02, 0xF5, 0x78, 0xE5, 0x78,
+0x60, 0x47, 0x90, 0x85, 0xC8, 0xE0, 0x20, 0xE2, 0x02, 0x51, 0x70, 0x12, 0xD2, 0x3C, 0x90, 0x85,
+0xCE, 0xE0, 0x60, 0x04, 0x64, 0x01, 0x70, 0x16, 0xE4, 0x90, 0x91, 0x6E, 0xF0, 0x90, 0x85, 0xCE,
+0xE0, 0xD1, 0x15, 0x90, 0x91, 0x6F, 0xD1, 0xFC, 0x90, 0x85, 0xCE, 0xE0, 0x80, 0x15, 0xE4, 0x90,
+0x91, 0x6E, 0xD1, 0x0A, 0x90, 0x91, 0x6F, 0xD1, 0xFC, 0x90, 0x85, 0xCE, 0xE0, 0x75, 0xF0, 0x03,
+0xA4, 0x24, 0xFE, 0xD1, 0x15, 0x90, 0x85, 0xDE, 0xF0, 0x22, 0xF0, 0x90, 0x85, 0xCE, 0xE0, 0x75,
+0xF0, 0x03, 0xA4, 0x24, 0xFE, 0xFF, 0x90, 0x85, 0xCD, 0xE0, 0x2F, 0x22, 0x90, 0x01, 0x34, 0x74,
+0x40, 0xF0, 0xFD, 0xE4, 0xFF, 0x12, 0x7C, 0xA9, 0x43, 0x5E, 0x08, 0x22, 0xAE, 0x07, 0xB1, 0x5B,
+0xBF, 0x01, 0x12, 0x90, 0x85, 0xBC, 0x12, 0xB7, 0xC9, 0x20, 0xE0, 0x09, 0xAF, 0x06, 0x7D, 0x01,
+0x51, 0x74, 0x7F, 0x01, 0x22, 0x7F, 0x00, 0x22, 0x90, 0x85, 0xBC, 0xB1, 0x41, 0x30, 0xE0, 0x0A,
+0xD1, 0x61, 0x60, 0x06, 0x7D, 0x01, 0x7F, 0x02, 0x51, 0x74, 0xD1, 0x61, 0x60, 0x02, 0xD1, 0x68,
+0x22, 0x90, 0x85, 0xC0, 0xE0, 0x64, 0x02, 0x22, 0x90, 0x85, 0xC5, 0xE0, 0x64, 0x02, 0x60, 0x0F,
+0xD1, 0xC6, 0x60, 0x0B, 0x12, 0x7A, 0x29, 0xEF, 0x70, 0x05, 0xFD, 0x7F, 0x0C, 0x51, 0x74, 0x22,
+0x90, 0x85, 0xC5, 0xE0, 0x70, 0x07, 0x90, 0x85, 0xBC, 0xE0, 0x30, 0xE0, 0x10, 0x90, 0x85, 0xBC,
+0xE0, 0x30, 0xE0, 0x07, 0xB1, 0x5B, 0xBF, 0x01, 0x04, 0x80, 0xCD, 0xD1, 0x9E, 0x22, 0x90, 0x85,
+0xC5, 0xE0, 0x64, 0x01, 0x70, 0x18, 0xD1, 0xC6, 0x60, 0x0C, 0xE4, 0xFD, 0x7F, 0x0C, 0x51, 0x74,
+0x12, 0xAF, 0x8C, 0x02, 0x6B, 0x98, 0x90, 0x85, 0xC8, 0xE0, 0x70, 0x02, 0x51, 0x70, 0x22, 0x90,
+0x85, 0xC9, 0xE0, 0x44, 0x01, 0xF0, 0x90, 0x85, 0xC3, 0xE0, 0x54, 0x0F, 0x22, 0x90, 0x92, 0xA2,
+0xE0, 0xC3, 0x13, 0x54, 0x07, 0xFF, 0x75, 0xF0, 0x0E, 0xA4, 0x24, 0xAF, 0xF5, 0x82, 0xE4, 0x34,
+0x92, 0xF5, 0x83, 0xE0, 0xFE, 0xEF, 0x75, 0xF0, 0x0E, 0xA4, 0x24, 0xAE, 0xF5, 0x82, 0xE4, 0x34,
+0x92, 0xF5, 0x83, 0xE0, 0x90, 0x91, 0x6F, 0xF0, 0x90, 0x91, 0x6E, 0xEE, 0xF0, 0xE4, 0xFB, 0xFD,
+0x7F, 0x54, 0x7E, 0x01, 0x02, 0x61, 0x41, 0xE4, 0x90, 0x92, 0x7F, 0xF0, 0x90, 0x85, 0xC5, 0xE0,
+0x60, 0x52, 0x12, 0xBB, 0xA6, 0x70, 0x4D, 0x12, 0xD2, 0x22, 0x12, 0xD0, 0xDE, 0x90, 0x92, 0x7F,
+0x74, 0x01, 0xF0, 0xE4, 0x90, 0x85, 0xCC, 0xF0, 0x90, 0x85, 0xBC, 0xE0, 0x30, 0xE0, 0x15, 0x90,
+0x85, 0xC0, 0xE0, 0xB4, 0x02, 0x05, 0xE4, 0x90, 0x92, 0x7F, 0xF0, 0xB1, 0x5B, 0xEF, 0x70, 0x04,
+0x90, 0x92, 0x7F, 0xF0, 0x90, 0x92, 0x7F, 0xE0, 0x60, 0x1A, 0x90, 0x85, 0xC8, 0xE0, 0x20, 0xE2,
+0x02, 0x51, 0x70, 0x12, 0xD2, 0x3C, 0xE4, 0x90, 0x91, 0x6E, 0xF0, 0x90, 0x85, 0xCD, 0xE0, 0x90,
+0x91, 0x6F, 0xD1, 0xFC, 0x22, 0x90, 0x06, 0xA9, 0xE0, 0x90, 0x92, 0x6E, 0xF0, 0xE0, 0xFD, 0x54,
+0xC0, 0x70, 0x05, 0x12, 0xBB, 0x23, 0x80, 0x5D, 0xED, 0x30, 0xE6, 0x3F, 0x90, 0x85, 0xC5, 0xE0,
+0x64, 0x02, 0x70, 0x27, 0x90, 0x85, 0xC1, 0xE0, 0xFF, 0xC3, 0x13, 0x20, 0xE0, 0x09, 0x90, 0x85,
+0xC9, 0xE0, 0x44, 0x01, 0xF0, 0x80, 0x1A, 0xD1, 0xC6, 0x64, 0x01, 0x70, 0x21, 0x90, 0x85, 0xC9,
+0xE0, 0x44, 0x04, 0xF0, 0x7F, 0x01, 0x12, 0x62, 0x8E, 0x80, 0x13, 0xD1, 0xBF, 0x64, 0x02, 0x60,
+0x05, 0x12, 0x77, 0x61, 0x80, 0x08, 0x12, 0x79, 0x41, 0x80, 0x03, 0x12, 0xBB, 0x23, 0x90, 0x92,
+0x6E, 0xE0, 0x90, 0x85, 0xC9, 0x30, 0xE7, 0x0C, 0xE0, 0x44, 0x02, 0xF0, 0x12, 0xBC, 0xE2, 0xD1,
+0xFC, 0x02, 0xBF, 0xD6, 0xE0, 0x54, 0xFD, 0xF0, 0x22, 0x80, 0x06, 0xE4, 0xFD, 0xFF, 0x12, 0xA6,
+0xF8, 0x90, 0x85, 0xBF, 0x74, 0x01, 0xF0, 0x22, 0x12, 0xC2, 0xFA, 0x80, 0xEE, 0x7D, 0x20, 0x7F,
+0xFF, 0x12, 0xA6, 0xF8, 0x12, 0xC5, 0x61, 0x90, 0x85, 0xBF, 0x74, 0x02, 0xF0, 0x22, 0x12, 0x02,
+0xF6, 0x90, 0x86, 0x71, 0xF0, 0x22, 0x12, 0xAF, 0x9A, 0x90, 0x92, 0x9C, 0x12, 0xAF, 0x92, 0x54,
+0x02, 0xFF, 0xEE, 0x54, 0xFD, 0x4F, 0xF0, 0x12, 0x8D, 0x96, 0x90, 0x92, 0x9D, 0x12, 0x8C, 0x79,
+0x90, 0x92, 0x9E, 0xF0, 0x12, 0xD1, 0xE1, 0x90, 0x92, 0x9C, 0xE0, 0x54, 0x01, 0xFF, 0xD3, 0x10,
+0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0xEF, 0x64, 0x01, 0x70, 0x1A, 0x11, 0x77, 0x60, 0x0A, 0x11, 0x70,
+0x12, 0x7B, 0xFD, 0x12, 0xD2, 0x19, 0x80, 0x07, 0x11, 0x70, 0x12, 0x7B, 0xBF, 0xF1, 0xAD, 0x12,
+0x7A, 0x8A, 0x80, 0x17, 0x11, 0x77, 0x60, 0x07, 0x11, 0x70, 0x12, 0x7B, 0xFD, 0x80, 0x05, 0x11,
+0x70, 0x12, 0x7B, 0xBF, 0xF1, 0xBB, 0xF1, 0xC9, 0x12, 0x7A, 0xB9, 0xD0, 0xD0, 0x92, 0xAF, 0x22,
+0x74, 0x10, 0xF0, 0xFD, 0x7F, 0x03, 0x22, 0x90, 0x92, 0x9E, 0xE0, 0x90, 0x01, 0x3F, 0x22, 0x12,
+0xBB, 0xA6, 0x60, 0x02, 0x21, 0x6A, 0x90, 0x85, 0xC5, 0xE0, 0x70, 0x02, 0x21, 0x6A, 0x90, 0x05,
+0x63, 0xE0, 0x90, 0x92, 0xE1, 0xF0, 0x90, 0x05, 0x62, 0xE0, 0x90, 0x92, 0xE2, 0xF0, 0x90, 0x05,
+0x61, 0xE0, 0x90, 0x92, 0xE3, 0xF0, 0x90, 0x05, 0x60, 0xE0, 0x90, 0x92, 0xE4, 0xF0, 0x12, 0xBC,
+0xA2, 0x90, 0x85, 0xC9, 0xE0, 0x54, 0xEC, 0xF0, 0x31, 0x8E, 0x24, 0xFD, 0x50, 0x02, 0x80, 0x0F,
+0x90, 0x85, 0xBC, 0xE0, 0x30, 0xE0, 0x05, 0x12, 0x9F, 0x65, 0x80, 0x03, 0x12, 0xBB, 0x2B, 0x31,
+0x8E, 0x64, 0x01, 0x70, 0x22, 0x90, 0x06, 0xAB, 0xE0, 0x90, 0x85, 0xCC, 0xF0, 0x90, 0x06, 0xAA,
+0xE0, 0x90, 0x85, 0xCB, 0xF0, 0xA3, 0xE0, 0xFF, 0x70, 0x08, 0x90, 0x85, 0xCB, 0xE0, 0xFE, 0xFF,
+0x80, 0x00, 0x90, 0x85, 0xCC, 0xEF, 0xF0, 0x12, 0xCC, 0x91, 0xE4, 0x90, 0x85, 0xCE, 0xF0, 0x12,
+0xCF, 0x0C, 0x31, 0x76, 0x13, 0x54, 0x1F, 0x30, 0xE0, 0x5E, 0xEF, 0xC4, 0x13, 0x13, 0x54, 0x03,
+0x20, 0xE0, 0x24, 0x31, 0x86, 0x6F, 0x70, 0x50, 0x90, 0x85, 0xC2, 0xE0, 0x44, 0x40, 0xF0, 0x12,
+0xD2, 0x22, 0x90, 0x01, 0x3F, 0x11, 0x70, 0x12, 0x7B, 0xFD, 0xF1, 0xB4, 0x12, 0xBF, 0xC8, 0x90,
+0x85, 0xCC, 0xE0, 0x14, 0xF0, 0x80, 0x31, 0x90, 0x85, 0xC3, 0xE0, 0xC4, 0x54, 0x0F, 0x64, 0x01,
+0x70, 0x26, 0x31, 0x86, 0xFE, 0x6F, 0x60, 0x20, 0x90, 0x05, 0x73, 0xE0, 0xFF, 0xEE, 0x6F, 0x60,
+0x17, 0x31, 0x76, 0x54, 0x3F, 0x30, 0xE0, 0x10, 0xEF, 0x54, 0xBF, 0xF0, 0x90, 0x01, 0x3F, 0x11,
+0x70, 0x12, 0x7B, 0xBF, 0xF1, 0xC9, 0xF1, 0xBB, 0x31, 0x7E, 0x90, 0x85, 0xBC, 0xE0, 0xC3, 0x13,
+0x20, 0xE0, 0x02, 0x31, 0x7E, 0x22, 0x90, 0x85, 0xC2, 0xE0, 0xFF, 0x13, 0x13, 0x22, 0x90, 0x85,
+0xC2, 0xE0, 0x44, 0x04, 0xF0, 0x22, 0x90, 0x85, 0xCB, 0xE0, 0xFF, 0xA3, 0xE0, 0x22, 0x90, 0x85,
+0xC3, 0xE0, 0xFF, 0xC4, 0x54, 0x0F, 0x22, 0x90, 0x85, 0xBC, 0xE0, 0x30, 0xE0, 0x06, 0x90, 0x85,
+0xBE, 0x74, 0x01, 0xF0, 0x90, 0x85, 0xC5, 0xE0, 0x70, 0x02, 0x41, 0x4B, 0x90, 0x85, 0xDC, 0xE0,
+0x04, 0xF0, 0x90, 0x05, 0x61, 0x51, 0xB7, 0x78, 0x08, 0x12, 0x04, 0xD8, 0xA8, 0x04, 0xA9, 0x05,
+0xAA, 0x06, 0xAB, 0x07, 0x90, 0x05, 0x60, 0x51, 0xB7, 0x12, 0x87, 0x4B, 0xC0, 0x04, 0xC0, 0x05,
+0xC0, 0x06, 0xC0, 0x07, 0x90, 0x05, 0x62, 0x51, 0xB7, 0x78, 0x10, 0x12, 0x04, 0xD8, 0xD0, 0x03,
+0xD0, 0x02, 0xD0, 0x01, 0xD0, 0x00, 0x12, 0x87, 0x4B, 0xC0, 0x04, 0xC0, 0x05, 0xC0, 0x06, 0xC0,
+0x07, 0xA3, 0x51, 0xB7, 0x78, 0x18, 0x12, 0x04, 0xD8, 0xD0, 0x03, 0xD0, 0x02, 0xD0, 0x01, 0xD0,
+0x00, 0x12, 0x87, 0x4B, 0x90, 0x85, 0xFC, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0x90, 0x92, 0xDC, 0xE0,
+0x54, 0xFE, 0xF0, 0xE0, 0xC3, 0x13, 0x30, 0xE0, 0x0A, 0x12, 0xCC, 0x81, 0x90, 0x92, 0xDC, 0xE0,
+0x54, 0xFD, 0xF0, 0x31, 0x76, 0x13, 0x54, 0x1F, 0x30, 0xE0, 0x09, 0x90, 0x01, 0x3B, 0xE0, 0x30,
+0xE4, 0x02, 0xF1, 0xAD, 0x90, 0x93, 0x91, 0xE0, 0x04, 0xF0, 0xE0, 0xC3, 0x94, 0x80, 0x40, 0x0B,
+0x90, 0x01, 0x98, 0xE0, 0x54, 0xFE, 0xF0, 0xE0, 0x44, 0x01, 0xF0, 0x12, 0x5D, 0x1F, 0x12, 0x6E,
+0x1D, 0xE4, 0x90, 0x88, 0xE0, 0xF0, 0x7F, 0x01, 0x12, 0xBA, 0x18, 0x12, 0xCF, 0x4A, 0x12, 0xB7,
+0xC6, 0x30, 0xE0, 0x52, 0x90, 0x88, 0x76, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x7C, 0x00, 0x7D, 0x64,
+0x12, 0x03, 0x82, 0x90, 0x88, 0xCA, 0xE0, 0x6E, 0x70, 0x03, 0xA3, 0xE0, 0x6F, 0x60, 0x0A, 0x90,
+0x88, 0xCA, 0xE4, 0x75, 0xF0, 0x01, 0x02, 0x07, 0x0A, 0x90, 0x88, 0x7A, 0xE0, 0xFE, 0xA3, 0xE0,
+0xFF, 0x90, 0x88, 0x88, 0xE0, 0xB5, 0x06, 0x14, 0xA3, 0xE0, 0xB5, 0x07, 0x0F, 0xEF, 0x4E, 0x60,
+0x0B, 0x90, 0x01, 0xC7, 0x74, 0x31, 0xF0, 0x7F, 0x01, 0x02, 0x5F, 0xE9, 0x12, 0xC9, 0x40, 0xE4,
+0x90, 0x88, 0xCA, 0xF0, 0xA3, 0xF0, 0x22, 0xE0, 0xFF, 0xE4, 0xFC, 0xFD, 0xFE, 0x22, 0xFE, 0x54,
+0x03, 0xFF, 0xEE, 0x13, 0x13, 0x54, 0x07, 0xFD, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90,
+0x93, 0x8E, 0xED, 0xF0, 0xE4, 0xA3, 0xF0, 0xEF, 0x14, 0x60, 0x02, 0x61, 0xB5, 0x90, 0x06, 0x03,
+0xE0, 0x54, 0xFB, 0xF0, 0x90, 0x93, 0x8E, 0xE0, 0xFB, 0xC4, 0x33, 0x54, 0xE0, 0xFE, 0x90, 0x04,
+0x42, 0xE0, 0x54, 0x9F, 0x4E, 0xFE, 0xF0, 0xE4, 0xFD, 0x12, 0xC7, 0xE2, 0x90, 0x93, 0x8F, 0xEF,
+0xF0, 0x90, 0x04, 0x83, 0xF0, 0x90, 0x93, 0x5B, 0x12, 0x04, 0xF7, 0x00, 0x00, 0x00, 0x01, 0x90,
+0x93, 0x5F, 0x12, 0x04, 0xF7, 0x00, 0x00, 0x00, 0x01, 0x7F, 0x00, 0x7E, 0x08, 0x91, 0x87, 0x12,
+0x04, 0xF7, 0x00, 0x00, 0x00, 0x01, 0x90, 0x93, 0x5F, 0x12, 0x04, 0xF7, 0x00, 0x00, 0x00, 0x01,
+0x7F, 0x00, 0x7E, 0x09, 0x91, 0x87, 0x12, 0x04, 0xF7, 0x00, 0x00, 0x00, 0x10, 0x90, 0x93, 0x8E,
+0x51, 0xB7, 0xEF, 0x54, 0x03, 0xFF, 0xE4, 0x78, 0x01, 0x12, 0x04, 0xC5, 0x78, 0x04, 0x91, 0x8D,
+0x7F, 0x00, 0x7E, 0x0A, 0x91, 0x87, 0x12, 0x04, 0xF7, 0x00, 0x00, 0x0C, 0x00, 0x90, 0x93, 0x8E,
+0x51, 0xB7, 0xEF, 0x54, 0x03, 0xFF, 0xE4, 0x78, 0x0A, 0x91, 0x8D, 0x7F, 0x00, 0x7E, 0x0D, 0x91,
+0x87, 0x12, 0x04, 0xF7, 0x0C, 0x00, 0x00, 0x00, 0x90, 0x93, 0x8F, 0x51, 0xB7, 0xEF, 0x54, 0x03,
+0xFF, 0xE4, 0x78, 0x1A, 0x91, 0x8D, 0x7F, 0x18, 0x7E, 0x08, 0x91, 0x87, 0x12, 0x04, 0xF7, 0x00,
+0x00, 0x0C, 0x00, 0x90, 0x93, 0x5F, 0x12, 0x04, 0xF7, 0x00, 0x00, 0x00, 0x00, 0x91, 0x1D, 0x90,
+0x93, 0x49, 0x12, 0x04, 0xF7, 0x00, 0x00, 0x0C, 0x00, 0x90, 0x93, 0x4D, 0x12, 0x04, 0xF7, 0x00,
+0x00, 0x04, 0x00, 0x80, 0x5F, 0x90, 0x06, 0x03, 0xE0, 0x44, 0x04, 0xF0, 0x90, 0x93, 0x5B, 0x12,
+0x04, 0xF7, 0x00, 0x00, 0x00, 0x01, 0x90, 0x93, 0x5F, 0x12, 0x04, 0xF7, 0x00, 0x00, 0x00, 0x00,
+0x7F, 0x00, 0x7E, 0x08, 0x91, 0x87, 0x12, 0x04, 0xF7, 0x00, 0x00, 0x00, 0x01, 0x90, 0x93, 0x5F,
+0x12, 0x04, 0xF7, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x7E, 0x09, 0x91, 0x87, 0x12, 0x04, 0xF7,
+0x00, 0x00, 0x0C, 0x00, 0x90, 0x93, 0x5F, 0x12, 0x04, 0xF7, 0x00, 0x00, 0x0C, 0x00, 0x91, 0x1D,
+0x90, 0x93, 0x49, 0x12, 0x04, 0xF7, 0x00, 0x00, 0x0C, 0x00, 0x90, 0x93, 0x4D, 0x12, 0x04, 0xF7,
+0x00, 0x00, 0x0C, 0x00, 0x7D, 0x18, 0x91, 0x9C, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x7F, 0x84, 0x7E,
+0x08, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x93, 0x59, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0,
+0x12, 0x70, 0x61, 0x90, 0x93, 0x63, 0x12, 0x04, 0xEB, 0x90, 0x93, 0x5B, 0x12, 0x87, 0x58, 0x12,
+0x04, 0xA7, 0x90, 0x93, 0x63, 0x91, 0x96, 0xC0, 0x04, 0xC0, 0x05, 0xC0, 0x06, 0xC0, 0x07, 0x90,
+0x93, 0x5B, 0x12, 0x87, 0x58, 0x90, 0x93, 0x5F, 0x91, 0x96, 0xD0, 0x03, 0xD0, 0x02, 0xD0, 0x01,
+0xD0, 0x00, 0x12, 0x87, 0x4B, 0x90, 0x93, 0x67, 0x12, 0x04, 0xEB, 0x90, 0x93, 0x67, 0x12, 0x87,
+0x58, 0x90, 0x91, 0x66, 0x12, 0x04, 0xEB, 0x90, 0x93, 0x59, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x12,
+0x71, 0x18, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x91, 0x21, 0x90, 0x93, 0x5B, 0x22, 0x12, 0x04, 0xD8,
+0x90, 0x93, 0x5F, 0x02, 0x04, 0xEB, 0x12, 0x87, 0x64, 0x02, 0x87, 0x3E, 0x7C, 0x00, 0xE4, 0xFF,
+0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x93, 0x47, 0xEC, 0xF0, 0xA3, 0xED, 0xF0, 0x90,
+0x93, 0x46, 0xEF, 0xF0, 0xA3, 0xA3, 0xE0, 0xFD, 0x12, 0x7B, 0xE0, 0x90, 0x93, 0x51, 0x12, 0x04,
+0xEB, 0x90, 0x93, 0x49, 0x12, 0x87, 0x58, 0x12, 0x04, 0xA7, 0x90, 0x93, 0x51, 0x91, 0x96, 0xC0,
+0x04, 0xC0, 0x05, 0xC0, 0x06, 0xC0, 0x07, 0x90, 0x93, 0x49, 0x12, 0x87, 0x58, 0x90, 0x93, 0x4D,
+0x91, 0x96, 0xD0, 0x03, 0xD0, 0x02, 0xD0, 0x01, 0xD0, 0x00, 0x12, 0x87, 0x4B, 0x90, 0x93, 0x55,
+0x12, 0x04, 0xEB, 0x90, 0x93, 0x47, 0xA3, 0xE0, 0xFD, 0xC0, 0x05, 0x90, 0x93, 0x55, 0x12, 0x87,
+0x58, 0x90, 0x8D, 0x9D, 0x12, 0x04, 0xEB, 0x90, 0x93, 0x46, 0xE0, 0xFF, 0xD0, 0x05, 0x12, 0x78,
+0xDD, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x93, 0x7A,
+0xEF, 0xF0, 0xED, 0x64, 0x01, 0x70, 0x31, 0xEB, 0xB4, 0x01, 0x07, 0xE0, 0x24, 0x02, 0xF5, 0x0E,
+0x80, 0x08, 0x90, 0x93, 0x7A, 0xE0, 0x24, 0xFE, 0xF5, 0x0E, 0x90, 0x93, 0x49, 0x12, 0x04, 0xF7,
+0x00, 0x00, 0x00, 0xFF, 0xAF, 0x0E, 0xB1, 0x87, 0x91, 0x9C, 0x90, 0x93, 0x49, 0x12, 0x04, 0xF7,
+0x00, 0x00, 0x00, 0xFF, 0xAF, 0x0E, 0x80, 0x22, 0x90, 0x93, 0x49, 0x12, 0x04, 0xF7, 0x00, 0x00,
+0x00, 0xFF, 0x90, 0x93, 0x7A, 0x51, 0xB7, 0xB1, 0x8B, 0x91, 0x9C, 0x90, 0x93, 0x49, 0x12, 0x04,
+0xF7, 0x00, 0x00, 0x00, 0xFF, 0x90, 0x93, 0x7A, 0xE0, 0xFF, 0xB1, 0x87, 0x7C, 0x00, 0x7F, 0x01,
+0x91, 0xA0, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xE4, 0xFC, 0xFD, 0xFE, 0x90, 0x93, 0x4D, 0x12, 0x04,
+0xEB, 0x7D, 0x18, 0x22, 0x90, 0x92, 0xA2, 0xE0, 0xFF, 0xC3, 0x13, 0xFE, 0xEF, 0x54, 0xF1, 0xFF,
+0xEE, 0x04, 0x54, 0x07, 0x25, 0xE0, 0x4F, 0xF0, 0xA3, 0xE0, 0xFF, 0x12, 0xD1, 0xF5, 0xB5, 0x07,
+0x04, 0xEE, 0x54, 0xF1, 0xF0, 0x12, 0x9E, 0xCD, 0xE4, 0x90, 0x92, 0xA4, 0xF0, 0xF1, 0x4F, 0x12,
+0xD1, 0xF5, 0xF1, 0xEB, 0xE0, 0xFA, 0xED, 0xD1, 0xE3, 0xFC, 0x54, 0x03, 0xFD, 0xEC, 0x13, 0x13,
+0x54, 0x07, 0xFB, 0xEE, 0xC4, 0xF1, 0xC2, 0xAF, 0x02, 0xB1, 0x16, 0xD1, 0xA9, 0xD1, 0xE3, 0x51,
+0xBE, 0xD1, 0xA9, 0xFF, 0x75, 0xF0, 0x0E, 0xA4, 0x24, 0xB0, 0xF5, 0x82, 0xE4, 0x34, 0x92, 0xF5,
+0x83, 0xE0, 0x04, 0xF0, 0x12, 0xBC, 0x8D, 0xD1, 0xF2, 0xD1, 0xA9, 0xFD, 0x7F, 0x01, 0xD3, 0x10,
+0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x93, 0x72, 0xEF, 0xF0, 0xA3, 0xED, 0xF0, 0xE4, 0xA3, 0xF0,
+0x90, 0x93, 0x74, 0xE0, 0xFF, 0xC3, 0x94, 0x03, 0x40, 0x02, 0xC1, 0xA4, 0x90, 0x93, 0x73, 0xE0,
+0xFE, 0x12, 0xD1, 0x13, 0x75, 0xF0, 0x03, 0xEF, 0x12, 0xD1, 0xA3, 0xE0, 0x90, 0x93, 0x75, 0xF0,
+0x90, 0x93, 0x72, 0xE0, 0xFC, 0xB4, 0x02, 0x23, 0x90, 0x93, 0x75, 0xE0, 0xFD, 0xEE, 0x12, 0xD1,
+0x07, 0xF5, 0x83, 0xC0, 0x83, 0xC0, 0x82, 0x90, 0x93, 0x74, 0xE0, 0xD0, 0x82, 0xD0, 0x83, 0x12,
+0xB1, 0x0A, 0x80, 0x02, 0xC3, 0x33, 0xD8, 0xFC, 0x4D, 0x80, 0x23, 0xEC, 0xB4, 0x01, 0x23, 0x12,
+0xD1, 0xFF, 0x12, 0xD1, 0x07, 0xF5, 0x83, 0xC0, 0x83, 0xC0, 0x82, 0x90, 0x93, 0x74, 0xE0, 0xD0,
+0x82, 0xD0, 0x83, 0x12, 0xB1, 0x0A, 0x80, 0x02, 0xC3, 0x33, 0xD8, 0xFC, 0xF4, 0x5F, 0x90, 0x93,
+0x75, 0xF0, 0x12, 0xD1, 0xFF, 0x12, 0xD1, 0x13, 0xC0, 0x83, 0xC0, 0x82, 0x90, 0x93, 0x74, 0xE0,
+0xD0, 0x82, 0xD0, 0x83, 0x75, 0xF0, 0x03, 0x12, 0xD1, 0xA3, 0xEF, 0xF0, 0x90, 0x93, 0x74, 0xE0,
+0x04, 0xF0, 0xC1, 0x10, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90, 0x92, 0xA2, 0xE0, 0xC3, 0x13, 0x54,
+0x07, 0x22, 0x8F, 0x5E, 0x7D, 0x17, 0xF1, 0x4B, 0xE5, 0x5E, 0xF1, 0xEC, 0xE0, 0xFC, 0xD1, 0xE1,
+0x12, 0xD1, 0xEB, 0xFB, 0x90, 0x92, 0xA2, 0xE0, 0xFE, 0xC4, 0xF1, 0xC2, 0xAF, 0x04, 0xB1, 0x16,
+0xD1, 0xE1, 0x51, 0xBE, 0xE5, 0x5E, 0x12, 0xBC, 0x8E, 0xD1, 0xF2, 0xAD, 0x5E, 0x7F, 0x01, 0xA1,
+0xFE, 0xE5, 0x5E, 0x75, 0xF0, 0x0E, 0xA4, 0x24, 0xA6, 0xF5, 0x82, 0xE4, 0x34, 0x92, 0xF5, 0x83,
+0xE0, 0x22, 0xFD, 0xF1, 0x03, 0xE4, 0xFD, 0xFF, 0x90, 0x05, 0x22, 0xEF, 0xF0, 0x90, 0x92, 0x99,
+0xED, 0xF0, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x93, 0x6B, 0x12, 0xB7, 0xDE,
+0xA3, 0xEB, 0xF0, 0x90, 0x04, 0x1D, 0xE0, 0x60, 0x25, 0x90, 0x05, 0x22, 0xE0, 0x90, 0x93, 0x71,
+0xF0, 0x7D, 0x14, 0xF1, 0x4B, 0xEF, 0x64, 0x01, 0x70, 0x05, 0x12, 0xD0, 0x82, 0x80, 0x04, 0x7F,
+0x00, 0x80, 0x13, 0x90, 0x93, 0x71, 0xE0, 0xFF, 0x7D, 0x15, 0xD1, 0xF8, 0x80, 0x03, 0x12, 0xD0,
+0x82, 0x12, 0xC9, 0x39, 0x7F, 0x01, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x7F, 0xFF, 0xD1, 0xF8, 0xE4,
+0x90, 0x93, 0x7E, 0xF0, 0xA3, 0xF0, 0x90, 0x05, 0x22, 0xE0, 0x90, 0x93, 0x80, 0xF0, 0x7D, 0x47,
+0x7F, 0xFF, 0xD1, 0xF8, 0x90, 0x05, 0xF8, 0xE0, 0x70, 0x13, 0xA3, 0xE0, 0x70, 0x0F, 0xA3, 0xE0,
+0x70, 0x0B, 0xA3, 0xE0, 0x70, 0x07, 0xF1, 0xD6, 0xD1, 0xF8, 0x7F, 0x01, 0x22, 0xD3, 0x90, 0x93,
+0x7F, 0xE0, 0x94, 0xE8, 0x90, 0x93, 0x7E, 0xE0, 0x94, 0x03, 0x40, 0x0E, 0x90, 0x01, 0xC0, 0xE0,
+0x44, 0x20, 0xF0, 0xF1, 0xD6, 0xD1, 0xF8, 0x7F, 0x00, 0x22, 0x7F, 0x32, 0x7E, 0x00, 0x12, 0x7C,
+0x9F, 0x90, 0x93, 0x7E, 0xE4, 0x75, 0xF0, 0x01, 0x12, 0x07, 0x0A, 0x80, 0xB7, 0x7D, 0x02, 0x7F,
+0x02, 0x12, 0x7C, 0x41, 0x7D, 0x01, 0x7F, 0x02, 0x02, 0x7C, 0x41, 0x7D, 0x02, 0x7F, 0x02, 0x02,
+0x7C, 0xA9, 0x54, 0x0F, 0x90, 0x93, 0x7D, 0xF0, 0x22, 0x7D, 0x01, 0x7F, 0x02, 0x02, 0x7C, 0xA9,
+0x7F, 0x6F, 0xD1, 0xF8, 0xE1, 0x4F, 0x90, 0x93, 0x80, 0xE0, 0xFF, 0x7D, 0x48, 0x22, 0x7D, 0x21,
+0x7F, 0xFF, 0xD1, 0xF8, 0x90, 0x85, 0xBF, 0x74, 0x03, 0xF0, 0x22, 0xFD, 0x75, 0xF0, 0x0E, 0xA4,
+0x24, 0xA5, 0xF5, 0x82, 0xE4, 0x34, 0x92, 0xF5, 0x83, 0x22, 0x12, 0x02, 0xF6, 0xFF, 0x90, 0x92,
+0xCF, 0xF0, 0xBF, 0x01, 0x09, 0x7F, 0x01, 0x11, 0x0F, 0xE4, 0x90, 0x92, 0xCF, 0xF0, 0x22, 0x90,
+0x92, 0x29, 0xEF, 0xF0, 0x31, 0xA3, 0x7F, 0xF4, 0x7E, 0x00, 0x12, 0x64, 0x37, 0xBF, 0x01, 0x08,
+0x90, 0x92, 0x39, 0xE0, 0x90, 0x92, 0x3B, 0xF0, 0x31, 0xA3, 0x7F, 0xF5, 0x7E, 0x00, 0x12, 0x64,
+0x37, 0xBF, 0x01, 0x08, 0x90, 0x92, 0x39, 0xE0, 0x90, 0x92, 0x3C, 0xF0, 0x31, 0xA3, 0x7F, 0xF6,
+0x7E, 0x00, 0x12, 0x64, 0x37, 0xBF, 0x01, 0x08, 0x90, 0x92, 0x39, 0xE0, 0x90, 0x92, 0x3D, 0xF0,
+0x31, 0xA3, 0x7F, 0xF7, 0x7E, 0x00, 0x12, 0x64, 0x37, 0xBF, 0x01, 0x08, 0x90, 0x92, 0x39, 0xE0,
+0x90, 0x92, 0x3E, 0xF0, 0x31, 0xA3, 0x7F, 0xF8, 0x7E, 0x00, 0x12, 0x64, 0x37, 0xBF, 0x01, 0x08,
+0x90, 0x92, 0x39, 0xE0, 0x90, 0x92, 0x3F, 0xF0, 0x31, 0xA3, 0x51, 0x43, 0xBF, 0x01, 0x08, 0x90,
+0x92, 0x39, 0xE0, 0x90, 0x92, 0x40, 0xF0, 0x31, 0xA3, 0x31, 0xAA, 0x70, 0x52, 0x90, 0x92, 0x39,
+0xE0, 0x90, 0x92, 0x41, 0xF0, 0x54, 0x07, 0x60, 0x08, 0x90, 0x92, 0x39, 0xE0, 0x54, 0xE0, 0x70,
+0x3E, 0x7B, 0x01, 0x7A, 0x92, 0x79, 0x3A, 0x7F, 0xFA, 0x31, 0xAC, 0x70, 0x32, 0x90, 0x92, 0x39,
+0xE0, 0xFC, 0x54, 0x07, 0x70, 0x12, 0x90, 0x92, 0x41, 0xE0, 0xFE, 0x90, 0x92, 0x3A, 0xE0, 0x54,
+0x07, 0xFD, 0xEE, 0x4D, 0x90, 0x92, 0x41, 0xF0, 0xEC, 0x54, 0xE0, 0x70, 0x12, 0x90, 0x92, 0x41,
+0xE0, 0xFF, 0x90, 0x92, 0x3A, 0xE0, 0x54, 0xE0, 0xFE, 0xEF, 0x4E, 0x90, 0x92, 0x41, 0xF0, 0x31,
+0xA3, 0x7F, 0xFD, 0x31, 0xAC, 0x70, 0x46, 0x90, 0x92, 0x39, 0xE0, 0xFE, 0x54, 0xCC, 0x90, 0x92,
+0x42, 0xF0, 0xEE, 0x54, 0x0C, 0xFF, 0x60, 0x08, 0x90, 0x92, 0x39, 0xE0, 0x54, 0xC0, 0x70, 0x2D,
+0xEF, 0x70, 0x11, 0x90, 0x92, 0x42, 0xE0, 0xFF, 0x90, 0x92, 0x39, 0xE0, 0x54, 0x03, 0xF1, 0xD2,
+0x90, 0x92, 0x42, 0xF0, 0x90, 0x92, 0x39, 0xE0, 0xFF, 0x54, 0xC0, 0x70, 0x10, 0x90, 0x92, 0x42,
+0xE0, 0xFE, 0xEF, 0x54, 0x30, 0x25, 0xE0, 0x25, 0xE0, 0xFF, 0xEE, 0x4F, 0xF0, 0x90, 0x92, 0x2A,
+0x74, 0x19, 0xF0, 0x90, 0x92, 0x38, 0x74, 0x08, 0xF0, 0x90, 0x92, 0x3B, 0xE0, 0x90, 0x92, 0x2C,
+0xF0, 0x90, 0x92, 0x3C, 0xE0, 0x90, 0x92, 0x2D, 0xF0, 0x90, 0x92, 0x3D, 0xE0, 0x90, 0x92, 0x2E,
+0xF0, 0x90, 0x92, 0x3E, 0xE0, 0x90, 0x92, 0x2F, 0xF0, 0x90, 0x92, 0x3F, 0xE0, 0x90, 0x92, 0x30,
+0xF0, 0x90, 0x92, 0x40, 0xE0, 0x90, 0x92, 0x31, 0xF0, 0x90, 0x92, 0x41, 0xE0, 0x90, 0x92, 0x32,
+0xF0, 0x90, 0x92, 0x42, 0xE0, 0x90, 0x92, 0x33, 0xF0, 0x90, 0x92, 0x29, 0xE0, 0xB4, 0x01, 0x0E,
+0x7B, 0x01, 0x7A, 0x92, 0x79, 0x2A, 0x12, 0x5E, 0x10, 0x7F, 0x04, 0x02, 0x87, 0xBB, 0x75, 0x1B,
+0x01, 0x75, 0x1C, 0x92, 0x75, 0x1D, 0x2A, 0x75, 0x1E, 0x0A, 0x7B, 0x01, 0x7A, 0x01, 0x79, 0xA0,
+0x02, 0x6A, 0x21, 0x7B, 0x01, 0x7A, 0x92, 0x79, 0x39, 0x22, 0x7F, 0xFB, 0x7E, 0x00, 0x12, 0x64,
+0x37, 0xEF, 0x64, 0x01, 0x22, 0x7E, 0x00, 0x7F, 0x0B, 0x7D, 0x00, 0x7B, 0x01, 0x7A, 0x92, 0x79,
+0xD0, 0x12, 0x06, 0xDE, 0x51, 0x3C, 0x51, 0x43, 0xBF, 0x01, 0x1C, 0x90, 0x92, 0x29, 0xE0, 0xFE,
+0x54, 0x01, 0x90, 0x92, 0xD0, 0xF0, 0xEE, 0x54, 0x04, 0x90, 0x92, 0xD2, 0xF0, 0x90, 0x92, 0x29,
+0xE0, 0x54, 0x08, 0x90, 0x92, 0xD1, 0xF0, 0x51, 0x3C, 0x31, 0xAA, 0x70, 0x34, 0x90, 0x92, 0x29,
+0xE0, 0x54, 0x07, 0x70, 0x14, 0x7B, 0x01, 0x7A, 0x92, 0x79, 0x2A, 0x7F, 0xFA, 0xFE, 0x12, 0x64,
+0x37, 0xBF, 0x01, 0x0F, 0x90, 0x92, 0x2A, 0x80, 0x03, 0x90, 0x92, 0x29, 0xE0, 0x54, 0x07, 0x90,
+0x92, 0xD4, 0xF0, 0x90, 0x92, 0x29, 0xE0, 0x54, 0xE0, 0xC4, 0x13, 0x54, 0x07, 0x90, 0x92, 0xD3,
+0xF0, 0x51, 0x3C, 0x7F, 0xFD, 0x7E, 0x00, 0x12, 0x64, 0x37, 0xBF, 0x01, 0x0E, 0x90, 0x92, 0x29,
+0xE0, 0x54, 0x0C, 0x13, 0x13, 0x54, 0x3F, 0x90, 0x92, 0xD5, 0xF0, 0x22, 0x7B, 0x01, 0x7A, 0x92,
+0x79, 0x29, 0x22, 0x7F, 0xF9, 0x7E, 0x00, 0x02, 0x64, 0x37, 0x90, 0x00, 0x80, 0xE0, 0x44, 0x80,
+0xFD, 0x7F, 0x80, 0x12, 0x7B, 0x3E, 0x12, 0xC4, 0x0C, 0x12, 0xC6, 0xAC, 0x12, 0x7B, 0x9C, 0x51,
+0xD5, 0x12, 0xBF, 0xDE, 0x7F, 0x01, 0x12, 0x85, 0x15, 0x90, 0x92, 0xA0, 0x74, 0x02, 0xF0, 0xFF,
+0x12, 0x85, 0x15, 0x90, 0x92, 0xA0, 0xE0, 0x04, 0xF0, 0x91, 0x06, 0x51, 0xF2, 0x90, 0x01, 0xCC,
+0x74, 0x0F, 0xF0, 0x90, 0x00, 0x80, 0xE0, 0x44, 0x40, 0xFD, 0x7F, 0x80, 0x12, 0x7B, 0x3E, 0x75,
+0x20, 0xFF, 0x12, 0x7C, 0xCD, 0xE4, 0xFF, 0x11, 0x0F, 0x91, 0x6C, 0x90, 0x00, 0x81, 0xE0, 0x44,
+0x04, 0xFD, 0x7F, 0x81, 0x12, 0x7B, 0x3E, 0x12, 0xC0, 0x30, 0x31, 0xB5, 0x90, 0x00, 0x00, 0xE0,
+0x54, 0xFB, 0xFD, 0xE4, 0xFF, 0xF1, 0xDA, 0x44, 0x04, 0xFD, 0x7F, 0x01, 0x12, 0x7B, 0x3E, 0x90,
+0x01, 0x98, 0x74, 0x80, 0xF0, 0xA3, 0x74, 0x88, 0xF0, 0xA3, 0xE4, 0xF0, 0xA3, 0x74, 0x80, 0xF0,
+0xE4, 0xFF, 0x02, 0x85, 0x9E, 0x90, 0x01, 0x01, 0xE0, 0x44, 0x04, 0xF0, 0x90, 0x01, 0x9A, 0xE0,
+0x54, 0xC0, 0x91, 0xD3, 0x90, 0x01, 0x99, 0xE0, 0x44, 0xC0, 0xF0, 0x90, 0x01, 0x9B, 0x74, 0x80,
+0xF0, 0x22, 0xF1, 0x86, 0x12, 0x7B, 0xEF, 0x12, 0x3C, 0x03, 0x12, 0xC6, 0x1B, 0x12, 0xC8, 0x53,
+0x12, 0xCB, 0x62, 0x71, 0xE0, 0x71, 0x2D, 0x12, 0x7B, 0x64, 0x12, 0x78, 0xB9, 0x12, 0xC6, 0x9D,
+0x90, 0x89, 0x16, 0xE0, 0x54, 0x7F, 0xF0, 0x54, 0xBF, 0xF0, 0x54, 0xDF, 0xF0, 0x54, 0xF0, 0xF0,
+0xE4, 0x90, 0x89, 0x18, 0xF0, 0x90, 0x89, 0x16, 0xE0, 0x54, 0xEF, 0xF0, 0x22, 0x7E, 0x00, 0x7F,
+0x24, 0x7D, 0x00, 0x7B, 0x01, 0x7A, 0x86, 0x79, 0x72, 0x12, 0x06, 0xDE, 0x90, 0x06, 0x90, 0xE0,
+0x44, 0x20, 0xF0, 0x12, 0xCF, 0xAE, 0x71, 0xE6, 0x90, 0x84, 0xC5, 0xE0, 0xFF, 0x64, 0x02, 0x70,
+0x29, 0x71, 0xD9, 0x30, 0xE0, 0x02, 0x7E, 0x01, 0x90, 0x86, 0x90, 0x71, 0xD7, 0x30, 0xE1, 0x02,
+0x7E, 0x01, 0x90, 0x86, 0x8E, 0x71, 0xD7, 0x30, 0xE2, 0x02, 0x7E, 0x01, 0x90, 0x86, 0x8F, 0xEE,
+0xF0, 0x90, 0xFD, 0x80, 0xE0, 0x90, 0x02, 0xFB, 0xF0, 0x22, 0xEF, 0x64, 0x01, 0x70, 0x1D, 0x71,
+0xD0, 0x30, 0xE0, 0x02, 0x7F, 0x01, 0x90, 0x86, 0x90, 0x71, 0xCE, 0x30, 0xE1, 0x02, 0x7F, 0x01,
+0x90, 0x86, 0x8E, 0x71, 0xCE, 0x30, 0xE2, 0x02, 0x7F, 0x01, 0x80, 0x23, 0x90, 0x84, 0xC5, 0xE0,
+0x64, 0x03, 0x70, 0x20, 0x71, 0xC7, 0x30, 0xE0, 0x02, 0x7F, 0x01, 0x90, 0x86, 0x90, 0x71, 0xC5,
+0x30, 0xE1, 0x02, 0x7F, 0x01, 0x90, 0x86, 0x8E, 0x71, 0xC5, 0x30, 0xE2, 0x02, 0x7F, 0x01, 0x90,
+0x86, 0x8F, 0xEF, 0xF0, 0x22, 0xEF, 0xF0, 0x90, 0xFD, 0x78, 0xE0, 0x7F, 0x00, 0x22, 0xEF, 0xF0,
+0x90, 0xFD, 0x70, 0xE0, 0x7F, 0x00, 0x22, 0xEE, 0xF0, 0x90, 0xFD, 0x80, 0xE0, 0x7E, 0x00, 0x22,
+0x12, 0xCC, 0x2F, 0x02, 0x06, 0xDE, 0xF1, 0xCA, 0xE4, 0x90, 0x88, 0xD8, 0x12, 0x95, 0xBE, 0x90,
+0x88, 0x76, 0xF0, 0x12, 0x95, 0xB9, 0x12, 0x95, 0xBF, 0x90, 0x88, 0x88, 0xF0, 0xA3, 0xF0, 0x90,
+0x88, 0xCA, 0xF0, 0xA3, 0xF0, 0x22, 0x12, 0x7C, 0x4E, 0x90, 0x84, 0xC5, 0xEF, 0xF0, 0x91, 0x3A,
+0x90, 0x01, 0x64, 0x74, 0x01, 0xF0, 0x90, 0x04, 0x23, 0xE0, 0x44, 0x80, 0xF0, 0x90, 0x00, 0x17,
+0xE0, 0x54, 0xFC, 0x44, 0x04, 0xFD, 0x7F, 0x17, 0x12, 0x7B, 0x3E, 0x90, 0x00, 0x38, 0xE0, 0x44,
+0x40, 0xFD, 0x7F, 0x38, 0x12, 0x7B, 0x3E, 0x02, 0x68, 0xE2, 0x12, 0x75, 0xB6, 0x12, 0x75, 0x58,
+0x12, 0xBF, 0xEA, 0x12, 0xC0, 0x11, 0xE4, 0xF5, 0x40, 0xF5, 0x41, 0xF5, 0x42, 0x75, 0x43, 0x80,
+0xAD, 0x40, 0x7F, 0x50, 0x12, 0x7B, 0x3E, 0xAD, 0x41, 0x7F, 0x51, 0x12, 0x7B, 0x3E, 0xAD, 0x42,
+0x7F, 0x52, 0x12, 0x7B, 0x3E, 0xAD, 0x43, 0x7F, 0x53, 0x02, 0x7B, 0x3E, 0xE4, 0x90, 0x92, 0x29,
+0xF0, 0xA3, 0xF0, 0x91, 0xBB, 0xEF, 0x64, 0x01, 0x60, 0x3A, 0xC3, 0x90, 0x92, 0x2A, 0xE0, 0x94,
+0x88, 0x90, 0x92, 0x29, 0xE0, 0x94, 0x13, 0x40, 0x0F, 0x90, 0x01, 0xC1, 0xE0, 0x44, 0x10, 0xF0,
+0x90, 0x01, 0xC7, 0x74, 0xFD, 0xF0, 0x80, 0x1C, 0x90, 0x92, 0x29, 0x12, 0xC2, 0xCD, 0xD3, 0x90,
+0x92, 0x2A, 0xE0, 0x94, 0x32, 0x90, 0x92, 0x29, 0xE0, 0x94, 0x00, 0x40, 0xC6, 0x90, 0x01, 0xC6,
+0xE0, 0x30, 0xE3, 0xBF, 0x90, 0x01, 0xC7, 0x74, 0xFE, 0xF0, 0x22, 0x90, 0x01, 0x9A, 0xE0, 0x54,
+0xC0, 0x44, 0x0B, 0x91, 0xD3, 0x90, 0x01, 0x98, 0xE0, 0x54, 0xC0, 0x7F, 0x00, 0xB4, 0x40, 0x02,
+0x7F, 0x01, 0x22, 0xF0, 0x7F, 0x0A, 0x7E, 0x00, 0x02, 0x7C, 0x9F, 0xEF, 0x60, 0x4B, 0x90, 0x88,
+0xCE, 0xE0, 0xFF, 0x60, 0x03, 0x12, 0x7B, 0x8A, 0x90, 0x01, 0xC7, 0xE4, 0xF0, 0xF1, 0x5B, 0xEC,
+0x3E, 0x90, 0x85, 0xB7, 0xF0, 0xA3, 0xEF, 0xF0, 0x90, 0x06, 0x09, 0xE0, 0x54, 0xFE, 0xF0, 0x7D,
+0x35, 0x7F, 0xFF, 0x12, 0xA6, 0xF8, 0x12, 0xC5, 0x61, 0x90, 0x02, 0x86, 0xE0, 0x44, 0x04, 0xF0,
+0x12, 0x72, 0x79, 0xB1, 0xF2, 0x12, 0xC2, 0xFA, 0xF1, 0x8C, 0x12, 0x76, 0xE6, 0x90, 0x01, 0x34,
+0x74, 0x08, 0xF0, 0xFD, 0xE4, 0xFF, 0x02, 0x7C, 0xA9, 0x7D, 0x08, 0xE4, 0xFF, 0x12, 0x7C, 0x41,
+0x90, 0x06, 0x90, 0xE0, 0x54, 0xF0, 0xF0, 0x90, 0x02, 0x86, 0xE0, 0x54, 0xFB, 0xF0, 0x12, 0xCF,
+0xC1, 0xB1, 0xF3, 0x61, 0x2D, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0xF1, 0x9A, 0x90, 0x86,
+0x72, 0xB1, 0xD6, 0x54, 0x04, 0xFD, 0xEF, 0x54, 0xFB, 0xB1, 0xCE, 0xF1, 0xA2, 0xB1, 0xE4, 0x54,
+0x10, 0xFD, 0xEF, 0x54, 0xEF, 0xB1, 0xCE, 0xF1, 0xAA, 0xB1, 0xE4, 0x54, 0x40, 0xFD, 0xEF, 0x54,
+0xBF, 0xB1, 0xCE, 0xF1, 0xB2, 0x12, 0x8C, 0x79, 0x54, 0x01, 0xFF, 0x90, 0x86, 0x74, 0xE0, 0x54,
+0xFE, 0x4F, 0xF0, 0x12, 0x8D, 0x96, 0xFF, 0x54, 0x01, 0xFE, 0x90, 0x86, 0x73, 0xF1, 0x92, 0x54,
0x04, 0xFF, 0xEE, 0x54, 0xFB, 0x4F, 0xF0, 0x90, 0x86, 0x72, 0xE0, 0xC3, 0x13, 0x54, 0x01, 0xFF,
-0x12, 0x7C, 0x72, 0xF1, 0xDF, 0x54, 0x01, 0xFF, 0x12, 0x7C, 0x7E, 0xF1, 0xDF, 0x13, 0x54, 0x01,
-0xFF, 0x12, 0x66, 0xDA, 0x90, 0x86, 0x72, 0xE0, 0xC4, 0x13, 0x13, 0x54, 0x01, 0xFF, 0x12, 0xC0,
-0xF8, 0x90, 0x86, 0x72, 0xE0, 0x54, 0x01, 0xFF, 0x12, 0xB5, 0xF2, 0xD0, 0xD0, 0x92, 0xAF, 0x22,
-0xE0, 0x54, 0xFE, 0x4E, 0xFE, 0xF0, 0xEF, 0x54, 0x02, 0xFF, 0xEE, 0x54, 0xFD, 0x4F, 0xFF, 0xF0,
-0x12, 0x02, 0xF6, 0xFE, 0x22, 0x8F, 0x6E, 0x8D, 0x6F, 0xEF, 0xF1, 0x5E, 0xE0, 0xF5, 0x70, 0x54,
-0x7F, 0xF5, 0x71, 0xE5, 0x70, 0x54, 0x80, 0xF5, 0x73, 0x75, 0xF0, 0x12, 0xEF, 0x12, 0xAF, 0xD8,
-0xF5, 0x75, 0x75, 0xF0, 0x12, 0xEF, 0x71, 0x0B, 0xC4, 0x54, 0x03, 0xF5, 0x76, 0xF1, 0xCC, 0x74,
-0xFF, 0xF0, 0x12, 0xAA, 0xF2, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0xE5, 0x70, 0x45, 0x73, 0xFF, 0x12,
-0xAA, 0xE6, 0xEF, 0xF0, 0xE5, 0x6E, 0x12, 0x91, 0xDB, 0xE0, 0x54, 0x03, 0xF5, 0x74, 0x74, 0x4C,
-0x25, 0x6E, 0x12, 0xAF, 0xC4, 0xE5, 0x74, 0xF0, 0xE5, 0x71, 0x65, 0x75, 0x70, 0x40, 0xB1, 0x68,
-0xC4, 0x13, 0x54, 0x07, 0x30, 0xE0, 0x0C, 0xE5, 0x73, 0x70, 0x08, 0xE5, 0x71, 0x44, 0x80, 0xF5,
-0x70, 0xE1, 0x12, 0x12, 0xAA, 0xF2, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0x12, 0xAB, 0x06, 0x12, 0xC8,
-0x95, 0xF1, 0xC1, 0xE5, 0x6E, 0xF0, 0xE4, 0x90, 0x92, 0x43, 0x12, 0x96, 0x40, 0x7B, 0x01, 0xFA,
-0x7D, 0x02, 0x7F, 0x04, 0x12, 0x96, 0x88, 0x7D, 0x07, 0xAF, 0x6E, 0x02, 0xBD, 0xF3, 0xE5, 0x71,
-0xC3, 0x95, 0x75, 0x50, 0x55, 0xAB, 0x6E, 0xAD, 0x75, 0xAF, 0x71, 0x12, 0x72, 0xEA, 0x8F, 0x72,
-0x85, 0x72, 0x70, 0xB1, 0x68, 0xC4, 0x13, 0x54, 0x01, 0xFF, 0x90, 0x92, 0x43, 0xF1, 0xC0, 0xE5,
-0x72, 0xF0, 0xA3, 0xE4, 0xF0, 0xA3, 0xE5, 0x71, 0xF0, 0xE5, 0x73, 0xB1, 0x59, 0x12, 0x97, 0xD3,
-0xE4, 0xFB, 0xFA, 0xF1, 0xF4, 0xE5, 0x71, 0xC3, 0x94, 0x0C, 0x40, 0x26, 0xB1, 0x68, 0xC4, 0x13,
-0x54, 0x07, 0x30, 0xE0, 0x1D, 0xE5, 0x6F, 0x60, 0x19, 0xE5, 0x73, 0x70, 0x15, 0xE5, 0x71, 0x44,
-0x80, 0xF5, 0x70, 0xF1, 0xCC, 0xE5, 0x72, 0xF0, 0x80, 0x08, 0x12, 0xAA, 0xE6, 0xE5, 0x75, 0xF0,
-0xF5, 0x70, 0xF1, 0xC5, 0xE5, 0x70, 0xF0, 0xF1, 0xCC, 0xE0, 0xFF, 0x12, 0xC8, 0x73, 0xEF, 0xF0,
-0xA3, 0xE4, 0xF0, 0xA3, 0xE5, 0x74, 0x12, 0xAF, 0xBC, 0xF0, 0x7B, 0x01, 0x7A, 0x00, 0xF1, 0xF4,
-0x90, 0x91, 0x0B, 0xE5, 0x74, 0xF0, 0xAB, 0x6F, 0xAD, 0x70, 0xAF, 0x6E, 0x02, 0x27, 0x3D, 0x4D,
-0xFF, 0x90, 0x86, 0x72, 0xF0, 0xEE, 0x22, 0x4D, 0xFF, 0x90, 0x86, 0x75, 0xF0, 0xEE, 0x22, 0x74,
-0xBC, 0x25, 0x78, 0xF5, 0x82, 0xE4, 0x34, 0x90, 0xF5, 0x83, 0xE4, 0xF0, 0xE5, 0x78, 0xC4, 0x54,
-0xF0, 0x24, 0x00, 0xF5, 0x82, 0xE4, 0x34, 0x81, 0xF5, 0x83, 0x22, 0x7F, 0x8F, 0x12, 0x7B, 0x51,
-0xEF, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x93, 0x19, 0xEF, 0xF0, 0xF1, 0x6B,
-0x30, 0xE6, 0x38, 0x7F, 0x8D, 0x12, 0x7B, 0x51, 0xEF, 0x64, 0x01, 0x70, 0x2E, 0x90, 0x93, 0x1A,
-0xF0, 0x90, 0x93, 0x1A, 0xE0, 0xFD, 0x90, 0x93, 0x19, 0xE0, 0xF1, 0x5E, 0xE5, 0x82, 0x2D, 0x12,
-0xA8, 0x53, 0xE0, 0xFB, 0xE4, 0xFF, 0x91, 0x39, 0x90, 0x93, 0x1A, 0xE0, 0x04, 0xF0, 0xE0, 0xC3,
-0x94, 0x10, 0x40, 0xDD, 0xF1, 0x6B, 0x30, 0xE0, 0x02, 0xF1, 0xE6, 0xD0, 0xD0, 0x92, 0xAF, 0x22,
-0xE4, 0xF0, 0xA3, 0xEF, 0xF0, 0x90, 0x92, 0x3F, 0xE4, 0xF0, 0xA3, 0x22, 0x74, 0xCC, 0x25, 0x6E,
-0xF5, 0x82, 0xE4, 0x34, 0x92, 0xF5, 0x83, 0x22, 0xF0, 0x90, 0x00, 0x03, 0x02, 0x03, 0x0F, 0x90,
-0x86, 0x72, 0xE0, 0x13, 0x13, 0x22, 0xE4, 0xFD, 0x7F, 0x8D, 0x02, 0x7B, 0x3E, 0xF9, 0xE4, 0x3A,
-0xFA, 0x02, 0x02, 0xF6, 0x7D, 0x05, 0x7F, 0x04, 0x02, 0x96, 0x88, 0xE0, 0x54, 0xFE, 0x4E, 0xFE,
-0xF0, 0xEF, 0x22, 0x8B, 0x5B, 0x8A, 0x5C, 0x89, 0x5D, 0x90, 0x92, 0x7F, 0xE0, 0x70, 0x0C, 0x12,
-0xC8, 0xB6, 0x30, 0xE0, 0x06, 0x90, 0x92, 0x85, 0x74, 0x01, 0xF0, 0x90, 0x92, 0x81, 0xE0, 0x70,
-0x0F, 0x31, 0xC4, 0xC4, 0x54, 0x0F, 0xFF, 0xBF, 0x05, 0x06, 0x90, 0x92, 0x86, 0x74, 0x01, 0xF0,
-0xAB, 0x5B, 0xAA, 0x5C, 0xA9, 0x5D, 0x12, 0x8D, 0x62, 0xFF, 0xF5, 0x5F, 0x12, 0x02, 0xF6, 0xFE,
-0xC3, 0x13, 0x30, 0xE0, 0x07, 0x12, 0x8C, 0x6F, 0xF5, 0x60, 0x80, 0x02, 0x8F, 0x60, 0x85, 0x5F,
-0x5E, 0xE5, 0x5E, 0xD3, 0x95, 0x60, 0x50, 0x28, 0x31, 0xC4, 0x54, 0x01, 0xFD, 0xAF, 0x5E, 0x12,
-0x6E, 0x5F, 0xAF, 0x5E, 0x12, 0x77, 0x39, 0xEF, 0xAF, 0x5E, 0x70, 0x04, 0x11, 0x9B, 0x80, 0x02,
-0xF1, 0xE9, 0x90, 0x92, 0x86, 0xE0, 0x60, 0x04, 0xAF, 0x5E, 0x11, 0x9B, 0x05, 0x5E, 0x80, 0xD1,
-0xE5, 0x5F, 0x70, 0x16, 0xFF, 0x12, 0x77, 0x39, 0xEF, 0x70, 0x0F, 0x12, 0xB3, 0xEE, 0x12, 0x79,
-0x61, 0x12, 0xC8, 0xCE, 0x54, 0xBF, 0xF0, 0x54, 0x7F, 0xF0, 0x22, 0x7D, 0x01, 0xD3, 0x10, 0xAF,
-0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x92, 0x07, 0xEF, 0xF0, 0xA3, 0xED, 0xF0, 0x7D, 0x44, 0x7F, 0x6F,
-0x11, 0xDE, 0x11, 0xE9, 0x90, 0x92, 0x08, 0xE0, 0x90, 0x92, 0x07, 0xB4, 0x01, 0x09, 0xE0, 0x31,
-0xDB, 0xE0, 0x44, 0x04, 0xF0, 0x80, 0x07, 0xE0, 0x31, 0xDB, 0xE0, 0x54, 0xFB, 0xF0, 0xE4, 0xFD,
-0xFF, 0x11, 0xDE, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x12, 0xB3, 0xEE, 0xE4, 0xFD, 0xFF, 0x90, 0x05,
-0x22, 0xEF, 0xF0, 0x90, 0x92, 0x76, 0xED, 0xF0, 0x22, 0xE4, 0x90, 0x93, 0x0B, 0xF0, 0xA3, 0xF0,
-0x90, 0x05, 0x22, 0xE0, 0x90, 0x93, 0x0D, 0xF0, 0x7D, 0x47, 0x7F, 0xFF, 0x11, 0xDE, 0x90, 0x05,
-0xF8, 0xE0, 0x70, 0x13, 0xA3, 0xE0, 0x70, 0x0F, 0xA3, 0xE0, 0x70, 0x0B, 0xA3, 0xE0, 0x70, 0x07,
-0x31, 0xBC, 0x11, 0xDE, 0x7F, 0x01, 0x22, 0xD3, 0x90, 0x93, 0x0C, 0xE0, 0x94, 0xE8, 0x90, 0x93,
-0x0B, 0xE0, 0x94, 0x03, 0x40, 0x0E, 0x90, 0x01, 0xC0, 0xE0, 0x44, 0x20, 0xF0, 0x31, 0xBC, 0x11,
-0xDE, 0x7F, 0x00, 0x22, 0x7F, 0x32, 0x7E, 0x00, 0x12, 0x7C, 0x9F, 0x90, 0x93, 0x0B, 0xE4, 0x75,
-0xF0, 0x01, 0x12, 0x07, 0x0A, 0x80, 0xB7, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x92,
-0x6B, 0xEF, 0xF0, 0xA3, 0xED, 0xF0, 0x90, 0x84, 0xC3, 0xE0, 0x04, 0xF0, 0x90, 0x04, 0x1D, 0xE0,
-0x60, 0x2D, 0x90, 0x05, 0x22, 0xE0, 0x90, 0x92, 0x6F, 0xF0, 0x7D, 0x26, 0x7F, 0xFF, 0x11, 0xDE,
-0x11, 0xE9, 0xEF, 0x64, 0x01, 0x70, 0x0B, 0x31, 0xCD, 0xFB, 0x7D, 0x01, 0x12, 0x3A, 0xC2, 0x12,
-0xC7, 0xF1, 0x90, 0x92, 0x6F, 0xE0, 0xFF, 0x7D, 0x27, 0x11, 0xDE, 0x31, 0xB4, 0x80, 0x13, 0x31,
-0xB4, 0x31, 0xCD, 0xFB, 0x90, 0x93, 0x0A, 0x74, 0x0A, 0xF0, 0x7D, 0x01, 0x12, 0xBF, 0x72, 0x12,
-0xC7, 0xF1, 0x90, 0x04, 0x1F, 0x74, 0x20, 0xF0, 0x12, 0xC6, 0x77, 0x74, 0x01, 0xF0, 0xFF, 0xD0,
-0xD0, 0x92, 0xAF, 0x22, 0x90, 0x92, 0x6B, 0xE0, 0xFF, 0x02, 0x5C, 0xA3, 0x90, 0x93, 0x0D, 0xE0,
-0xFF, 0x7D, 0x48, 0x22, 0xAB, 0x5B, 0xAA, 0x5C, 0xA9, 0x5D, 0x02, 0x02, 0xF6, 0x90, 0x84, 0xC8,
-0xE0, 0xFF, 0x90, 0x92, 0x6C, 0xE0, 0x22, 0xE0, 0xFD, 0xE5, 0x78, 0xC4, 0x54, 0xF0, 0x24, 0x05,
-0xF5, 0x82, 0xE4, 0x34, 0x81, 0xF5, 0x83, 0x22, 0x90, 0x04, 0x85, 0xE0, 0xF5, 0x6B, 0x90, 0x92,
-0xCB, 0xE0, 0x04, 0xF0, 0xE4, 0xF5, 0x62, 0x90, 0x85, 0xBB, 0xE0, 0xFF, 0xE5, 0x62, 0xC3, 0x9F,
-0x40, 0x02, 0xC1, 0x2C, 0xE5, 0x62, 0x12, 0x8F, 0x5E, 0xE0, 0xF5, 0x6D, 0x12, 0xC8, 0x67, 0xE0,
-0x65, 0x6D, 0x60, 0x16, 0x90, 0x8A, 0x71, 0xE5, 0x6D, 0xF0, 0xE4, 0xA3, 0xF0, 0xAB, 0x62, 0xFD,
-0xFF, 0x12, 0x52, 0xC3, 0x12, 0xC8, 0x67, 0xE5, 0x6D, 0xF0, 0x90, 0x04, 0xA0, 0xE0, 0x64, 0x01,
-0x70, 0x4E, 0xA3, 0xE0, 0x65, 0x62, 0x70, 0x48, 0xA3, 0xE0, 0xF5, 0x63, 0xA3, 0xE0, 0x90, 0x92,
-0x38, 0xF0, 0xE5, 0x62, 0x12, 0x8F, 0x5E, 0xE0, 0x65, 0x63, 0x70, 0x02, 0xC1, 0x28, 0xE5, 0x62,
-0x12, 0x8F, 0x5E, 0xE5, 0x63, 0xF0, 0xE5, 0x62, 0x31, 0xDB, 0xE0, 0x54, 0xFC, 0xFF, 0x90, 0x92,
-0x38, 0xE0, 0x54, 0x03, 0x4F, 0xFF, 0xE5, 0x62, 0x31, 0xDB, 0xEF, 0xF0, 0x90, 0x8A, 0x71, 0xE5,
-0x63, 0xF0, 0xA3, 0x74, 0xFF, 0xF0, 0xAB, 0x62, 0xE4, 0xFD, 0xFF, 0x12, 0x52, 0xC3, 0xC1, 0x28,
-0xAF, 0x62, 0x12, 0x77, 0x39, 0x75, 0xF0, 0x12, 0xE5, 0x62, 0x12, 0x8B, 0x0B, 0x12, 0x8D, 0x59,
-0xFD, 0xF1, 0xB4, 0xED, 0xF0, 0x90, 0x92, 0x41, 0x12, 0x8F, 0xC0, 0xE5, 0x62, 0xF0, 0x12, 0xA9,
-0x84, 0x08, 0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0xFF, 0xEE, 0x5C, 0xFE, 0xEF,
-0x5D, 0xFF, 0x90, 0x92, 0x45, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0x7B, 0x02, 0x7A, 0x00, 0xE4, 0xFD,
-0x7F, 0x01, 0xD1, 0x88, 0x12, 0xAB, 0xFF, 0xFF, 0xF1, 0xC9, 0x12, 0x05, 0x28, 0xE0, 0xFD, 0xE5,
-0x62, 0x12, 0xC8, 0x2C, 0x54, 0x80, 0xFB, 0xF1, 0xB4, 0xEB, 0xF0, 0x12, 0xC8, 0x73, 0xED, 0xF0,
-0x90, 0x92, 0x3F, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0xE4, 0x90, 0x92, 0x45, 0xF0, 0xA3, 0xF0, 0x7B,
-0x03, 0xFA, 0xFD, 0x7F, 0x01, 0xD1, 0x88, 0xAF, 0x62, 0x12, 0x77, 0x39, 0xEF, 0x70, 0x02, 0xC1,
-0x28, 0x75, 0xF0, 0x12, 0xE5, 0x62, 0x12, 0x8B, 0x0B, 0x12, 0x8D, 0x59, 0x30, 0xE0, 0x02, 0xC1,
-0x28, 0xE5, 0x62, 0x12, 0xA9, 0x84, 0x08, 0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9,
-0xFF, 0xEE, 0x5C, 0xFE, 0xEF, 0x5D, 0x4E, 0x60, 0x02, 0xC1, 0x28, 0x12, 0xAB, 0xFF, 0x4E, 0x70,
-0x0A, 0xF1, 0xC9, 0x12, 0x05, 0x28, 0xE0, 0x70, 0x02, 0xC1, 0x28, 0xE5, 0x62, 0x75, 0xF0, 0x12,
-0xA4, 0x24, 0x44, 0xF9, 0x74, 0x89, 0x35, 0xF0, 0xFA, 0x7B, 0x01, 0x90, 0x92, 0x33, 0x12, 0x87,
-0x79, 0x90, 0x92, 0x33, 0x12, 0x87, 0x70, 0x12, 0xC8, 0xC6, 0x12, 0x03, 0xED, 0x2F, 0xFF, 0xF1,
-0xA2, 0x2F, 0xFF, 0xF1, 0xA8, 0x2F, 0xFF, 0xF1, 0xAE, 0x2F, 0xF5, 0x6C, 0x75, 0xF0, 0x12, 0xE5,
-0x62, 0x90, 0x89, 0x40, 0x12, 0x05, 0x28, 0xE0, 0xF5, 0x68, 0xA3, 0xE0, 0xF5, 0x69, 0xF1, 0xC9,
-0x12, 0x05, 0x28, 0xE0, 0xFF, 0x90, 0x92, 0x36, 0xE4, 0xF0, 0xA3, 0xEF, 0xF0, 0xE5, 0x62, 0x12,
-0x8F, 0x5E, 0xE0, 0xF5, 0x63, 0x54, 0x80, 0xF5, 0x65, 0xE5, 0x63, 0x54, 0x7F, 0xF5, 0x64, 0x12,
-0xC8, 0x83, 0xD1, 0xFC, 0x12, 0xC8, 0xC6, 0x90, 0x92, 0x41, 0xF1, 0x00, 0xF1, 0xA2, 0xFF, 0x90,
-0x92, 0x43, 0xF1, 0x00, 0xF1, 0xA8, 0xFF, 0x90, 0x92, 0x45, 0xF1, 0x00, 0x7B, 0x01, 0xF1, 0x9A,
-0x90, 0x92, 0x33, 0x12, 0x87, 0x70, 0xF1, 0xAE, 0xD1, 0xFC, 0x90, 0x92, 0x36, 0x12, 0xC8, 0x95,
-0xF0, 0xA3, 0xEF, 0xF0, 0xA3, 0x12, 0xC8, 0xBE, 0xA3, 0xE4, 0xF0, 0xA3, 0xE5, 0x63, 0xF0, 0x7B,
-0x02, 0xF1, 0x9A, 0x74, 0x7C, 0x25, 0x62, 0xF5, 0x82, 0xE4, 0x34, 0x90, 0xF5, 0x83, 0xE0, 0xC3,
-0x94, 0x05, 0x40, 0x02, 0xC1, 0x0D, 0x75, 0xF0, 0x12, 0xE5, 0x62, 0x12, 0xAF, 0xD8, 0xFF, 0xE5,
-0x64, 0xD3, 0x9F, 0x40, 0x08, 0x8F, 0x64, 0xE5, 0x64, 0x45, 0x65, 0xF5, 0x63, 0xE5, 0x64, 0x90,
-0x82, 0xE1, 0x93, 0xF5, 0x6A, 0xE5, 0x65, 0x60, 0x04, 0x05, 0x6A, 0x05, 0x6A, 0x90, 0x04, 0x8C,
-0xE0, 0x64, 0x01, 0x70, 0x28, 0xE5, 0x64, 0xC3, 0x94, 0x0C, 0x40, 0x21, 0x74, 0x84, 0x25, 0x64,
-0xF5, 0x82, 0xE4, 0x34, 0x04, 0xF5, 0x83, 0xE0, 0xFF, 0x54, 0x7F, 0xFE, 0xEF, 0x30, 0xE7, 0x06,
-0xE5, 0x6A, 0x2E, 0xFF, 0x80, 0x05, 0xC3, 0xE5, 0x6A, 0x9E, 0xFF, 0x8F, 0x6A, 0xE5, 0x6A, 0xD3,
-0x94, 0x1A, 0xAF, 0x6A, 0x40, 0x02, 0x7F, 0x1A, 0x8F, 0x6A, 0xD1, 0x32, 0x7B, 0x03, 0xFA, 0xF1,
-0x9C, 0xE5, 0x63, 0x90, 0x83, 0x59, 0x93, 0xFF, 0xD3, 0x90, 0x92, 0x37, 0xE0, 0x9F, 0x90, 0x92,
-0x36, 0xE0, 0x94, 0x00, 0x40, 0x02, 0x80, 0x73, 0xC3, 0xE5, 0x69, 0x94, 0x0A, 0xE5, 0x68, 0x94,
-0x00, 0x40, 0x02, 0xA1, 0x5B, 0xD1, 0x76, 0xE0, 0xC3, 0x94, 0x01, 0x40, 0x05, 0xD1, 0x76, 0xE0,
-0x14, 0xF0, 0x90, 0x92, 0x33, 0x12, 0x87, 0x70, 0xF1, 0xAE, 0xFF, 0x90, 0x92, 0x37, 0xE0, 0x2F,
-0xFF, 0x90, 0x92, 0x36, 0xE0, 0x35, 0xF0, 0xFE, 0xF1, 0xA8, 0x2F, 0xFF, 0xEE, 0x35, 0xF0, 0xFE,
-0xF1, 0xA2, 0x2F, 0xFD, 0xEE, 0x35, 0xF0, 0xFC, 0xE5, 0x68, 0xC3, 0x13, 0xFE, 0xE5, 0x69, 0x13,
-0xFF, 0xD3, 0xED, 0x9F, 0xEC, 0x9E, 0x40, 0x28, 0xE5, 0x62, 0x94, 0x05, 0x50, 0x05, 0xD1, 0x76,
-0x74, 0x03, 0xF0, 0x90, 0x92, 0x3F, 0x12, 0xC8, 0xBE, 0xE5, 0x68, 0xC3, 0x13, 0xA3, 0xF0, 0xE5,
-0x69, 0x13, 0xA3, 0xD1, 0x48, 0xF1, 0xD2, 0x7B, 0x01, 0xD1, 0x82, 0x12, 0xAA, 0x14, 0xC1, 0x0D,
-0x12, 0xC8, 0x83, 0x65, 0x6C, 0x70, 0x02, 0xE5, 0xF0, 0x70, 0x50, 0x90, 0x92, 0x3F, 0xF0, 0xA3,
-0xE5, 0x6C, 0xF0, 0xC3, 0x13, 0xFF, 0xA3, 0xE4, 0xF0, 0xA3, 0xEF, 0xD1, 0x48, 0xF1, 0xD2, 0x7B,
-0x02, 0xD1, 0x82, 0xE5, 0x62, 0xC3, 0x94, 0x05, 0x50, 0x0E, 0xD1, 0x76, 0xE0, 0xD3, 0x94, 0x00,
-0x40, 0x06, 0xD1, 0x2D, 0x7B, 0x03, 0x80, 0x0B, 0xE5, 0x6C, 0xC3, 0x94, 0x03, 0x50, 0x10, 0xD1,
-0x2D, 0x7B, 0x04, 0xFA, 0xD1, 0x84, 0x7D, 0x06, 0xAF, 0x62, 0x12, 0xBD, 0xF3, 0xC1, 0x28, 0xE4,
-0xFD, 0xAF, 0x62, 0x12, 0x8E, 0x15, 0x12, 0xBD, 0xEF, 0xC1, 0x0D, 0xD1, 0x2D, 0x7B, 0x08, 0xFA,
-0xD1, 0x84, 0x7D, 0x01, 0xAF, 0x62, 0x12, 0x65, 0xC2, 0xC1, 0x0D, 0xD1, 0x76, 0xE4, 0xF0, 0x90,
-0x92, 0x3D, 0x74, 0x02, 0xF0, 0xAB, 0x6A, 0xAD, 0x62, 0xAF, 0x69, 0xAE, 0x68, 0x12, 0xAB, 0x14,
-0x8E, 0x66, 0x8F, 0x67, 0x12, 0xC8, 0x1E, 0xC3, 0x74, 0x01, 0x93, 0x95, 0x67, 0xE4, 0x93, 0x95,
-0x66, 0x50, 0x18, 0xD1, 0xF0, 0xE4, 0xF0, 0x7D, 0x01, 0xAF, 0x62, 0x12, 0x8E, 0x15, 0x12, 0xC7,
-0xA3, 0xE4, 0x90, 0x92, 0x43, 0xD1, 0x40, 0x7B, 0x01, 0x80, 0x22, 0xF1, 0x92, 0xC3, 0xE5, 0x67,
-0x9F, 0xE5, 0x66, 0x94, 0x00, 0x50, 0x1B, 0xD1, 0xF0, 0xE4, 0xF0, 0x12, 0xAA, 0x14, 0x12, 0xC7,
-0xBE, 0xF1, 0x92, 0x12, 0xC8, 0x73, 0xEF, 0xF0, 0xE4, 0xD1, 0x3F, 0x7B, 0x02, 0xFA, 0xF1, 0xBB,
-0x80, 0x4B, 0x12, 0xBD, 0xEF, 0x12, 0xC7, 0xA3, 0xF1, 0x92, 0xF1, 0xB4, 0xEF, 0xF0, 0xD1, 0xF0,
-0xF1, 0xD2, 0x7B, 0x03, 0x7A, 0x00, 0xF1, 0xBB, 0xD1, 0xF0, 0xE0, 0x04, 0xF0, 0xE5, 0x64, 0x90,
-0x83, 0x6D, 0x93, 0xFF, 0xD1, 0xF0, 0xE0, 0xC3, 0x9F, 0x40, 0x22, 0xD1, 0xF0, 0xE4, 0xF0, 0xF1,
-0x92, 0x12, 0xC8, 0x1E, 0x74, 0x01, 0x93, 0x2F, 0xFF, 0xE4, 0x93, 0x34, 0x00, 0xC3, 0x13, 0xFE,
-0xEF, 0x13, 0xFF, 0xE5, 0x62, 0x12, 0xAB, 0x08, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0xE4, 0xF5, 0x6C,
-0xFD, 0xAF, 0x62, 0x12, 0x65, 0xC2, 0xE4, 0x90, 0x92, 0x3F, 0xF0, 0xD1, 0x3B, 0xA3, 0xF0, 0x7B,
-0x01, 0xFA, 0x7D, 0xFF, 0x7F, 0x01, 0xD1, 0x88, 0x05, 0x62, 0x21, 0xF7, 0x22, 0x90, 0x92, 0xCB,
-0xE0, 0xFF, 0x90, 0x92, 0x3F, 0xE4, 0xF0, 0xA3, 0xEF, 0xF0, 0xE4, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3,
-0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0x22, 0xF0, 0x90, 0x92, 0x33, 0x12, 0x87, 0x70, 0x90,
-0x00, 0x06, 0x12, 0x04, 0x18, 0xFF, 0xAE, 0xF0, 0x90, 0x00, 0x08, 0x12, 0x04, 0x18, 0x2F, 0xFF,
-0xE5, 0xF0, 0x3E, 0xFE, 0x90, 0x00, 0x04, 0x12, 0x04, 0x18, 0x2F, 0xFF, 0xEE, 0x35, 0xF0, 0x90,
-0x92, 0x43, 0xF0, 0xA3, 0xEF, 0xF0, 0x74, 0xDC, 0x25, 0x62, 0xF5, 0x82, 0xE4, 0x34, 0x92, 0xF5,
-0x83, 0x22, 0x7A, 0x00, 0x7D, 0x03, 0x7F, 0x01, 0x90, 0x04, 0x84, 0xE0, 0xFE, 0x60, 0x60, 0x90,
-0x92, 0x49, 0xEF, 0xF0, 0xA3, 0xED, 0xF0, 0xEB, 0xA3, 0xF0, 0xEA, 0xA3, 0xF0, 0x90, 0x92, 0x3F,
-0xE0, 0xFC, 0xA3, 0xE0, 0x90, 0x92, 0x4D, 0xF0, 0xEC, 0xA3, 0xF0, 0x90, 0x92, 0x41, 0xE0, 0xFC,
-0xA3, 0xE0, 0x90, 0x92, 0x4F, 0xF0, 0xEC, 0xA3, 0xF0, 0x90, 0x92, 0x43, 0xE0, 0xFC, 0xA3, 0xE0,
-0x90, 0x92, 0x51, 0xF0, 0xEC, 0xA3, 0xF0, 0x90, 0x92, 0x45, 0xE0, 0xFC, 0xA3, 0xE0, 0x90, 0x92,
-0x53, 0xF0, 0xEC, 0xA3, 0xF0, 0x90, 0x92, 0x47, 0x74, 0xFE, 0xF0, 0x90, 0x92, 0x55, 0x74, 0x0C,
-0xF0, 0x7B, 0x01, 0x7A, 0x92, 0x79, 0x47, 0x12, 0x5E, 0x10, 0x7F, 0x04, 0x12, 0x87, 0xBB, 0x22,
-0x74, 0xAC, 0x25, 0x62, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83, 0x22, 0xFF, 0x90, 0x92, 0x3F,
-0xE5, 0xF0, 0xF0, 0xA3, 0xEF, 0xF0, 0x22, 0x8D, 0x78, 0xEF, 0x30, 0xE6, 0x17, 0x12, 0x8F, 0x5C,
-0x31, 0xD7, 0xF1, 0xC1, 0xE4, 0xFB, 0xAF, 0x78, 0x12, 0x27, 0x3D, 0x12, 0x8F, 0x4F, 0xF1, 0x8B,
-0x74, 0x01, 0x80, 0x5E, 0xF1, 0xDD, 0xE0, 0x04, 0xF0, 0xF1, 0xDD, 0xE0, 0x64, 0x02, 0x70, 0x27,
-0x74, 0xCC, 0x25, 0x78, 0x12, 0x8F, 0xD0, 0xE0, 0xFD, 0xF4, 0x60, 0x02, 0x80, 0x05, 0x12, 0x8F,
-0x5C, 0xE0, 0xFD, 0x31, 0xD9, 0xF1, 0xC1, 0x7B, 0x01, 0xAF, 0x78, 0x12, 0x27, 0x3D, 0x12, 0x8F,
-0x5C, 0xF1, 0x8B, 0x74, 0x02, 0x80, 0x2B, 0xF1, 0xDD, 0xE0, 0xD3, 0x94, 0x03, 0x40, 0x0E, 0xAF,
-0x78, 0x12, 0x6D, 0x94, 0x12, 0x8F, 0x4F, 0xF1, 0x8B, 0x74, 0x03, 0x80, 0x15, 0x12, 0x8F, 0x5C,
-0x31, 0xD7, 0xF1, 0xC1, 0x7B, 0x01, 0xAF, 0x78, 0x12, 0x27, 0x3D, 0x12, 0x8F, 0x5C, 0xF1, 0x8B,
-0x74, 0x02, 0xF0, 0xAB, 0x78, 0xE4, 0xFD, 0xFF, 0x02, 0x52, 0xC3, 0xE0, 0x90, 0x8A, 0x71, 0xF0,
-0xA3, 0x22, 0xE5, 0x64, 0x90, 0x83, 0x1D, 0x93, 0xFF, 0x22, 0x7A, 0x00, 0x7D, 0x01, 0x7F, 0x01,
-0xC1, 0x88, 0x90, 0x00, 0x04, 0x02, 0x04, 0x18, 0x90, 0x00, 0x06, 0x02, 0x04, 0x18, 0x90, 0x00,
-0x08, 0x02, 0x04, 0x18, 0x90, 0x92, 0x43, 0xE4, 0xF0, 0xA3, 0x22, 0x7D, 0x05, 0x7F, 0x01, 0xC1,
-0x88, 0xE0, 0x54, 0x03, 0x90, 0x91, 0x0B, 0xF0, 0x22, 0x75, 0xF0, 0x12, 0xE5, 0x62, 0x90, 0x89,
-0x42, 0x22, 0xE0, 0xFF, 0x90, 0x92, 0x45, 0xE4, 0xF0, 0xA3, 0xEF, 0xF0, 0x22, 0x74, 0xBC, 0x25,
-0x78, 0xF5, 0x82, 0xE4, 0x34, 0x90, 0xF5, 0x83, 0x22, 0xE4, 0xFD, 0x01, 0x9D, 0x7D, 0x20, 0x7F,
-0xFF, 0x11, 0xDE, 0x12, 0xB5, 0xBE, 0x90, 0x85, 0xBF, 0x74, 0x02, 0xF0, 0x22, 0x12, 0x02, 0xF6,
-0xFF, 0x90, 0x92, 0x78, 0xF0, 0xBF, 0x01, 0x07, 0x11, 0x10, 0xE4, 0x90, 0x92, 0x78, 0xF0, 0x22,
-0x11, 0xC0, 0x7F, 0xF5, 0x7E, 0x01, 0x12, 0x64, 0x37, 0xBF, 0x01, 0x06, 0x90, 0x92, 0x07, 0xE0,
-0xA3, 0xF0, 0x11, 0xC0, 0x7F, 0xF6, 0x7E, 0x01, 0x12, 0x64, 0x37, 0xBF, 0x01, 0x08, 0x90, 0x92,
-0x07, 0xE0, 0x90, 0x92, 0x09, 0xF0, 0x11, 0xC0, 0x7F, 0xF4, 0x7E, 0x01, 0x12, 0x64, 0x37, 0xBF,
-0x01, 0x08, 0x90, 0x92, 0x07, 0xE0, 0x90, 0x92, 0x0A, 0xF0, 0x11, 0xC0, 0x7F, 0xF3, 0x7E, 0x01,
-0x12, 0x64, 0x37, 0xBF, 0x01, 0x08, 0x90, 0x92, 0x07, 0xE0, 0x90, 0x92, 0x0B, 0xF0, 0x11, 0xC0,
-0x7F, 0xF2, 0x7E, 0x01, 0x12, 0x64, 0x37, 0xBF, 0x01, 0x08, 0x90, 0x92, 0x07, 0xE0, 0x90, 0x92,
-0x0C, 0xF0, 0x90, 0x92, 0x08, 0xE0, 0xFF, 0xA3, 0xE0, 0xFD, 0xA3, 0xE0, 0xFB, 0xA3, 0xE0, 0x90,
-0x92, 0x10, 0xF0, 0x90, 0x92, 0x0C, 0xE0, 0x90, 0x92, 0x11, 0xF0, 0x90, 0x92, 0x12, 0x74, 0x12,
-0xF0, 0x90, 0x92, 0x20, 0x74, 0x05, 0xF0, 0x90, 0x92, 0x14, 0xEF, 0xF0, 0xA3, 0xED, 0xF0, 0xA3,
-0xEB, 0xF0, 0x90, 0x92, 0x10, 0xE0, 0x90, 0x92, 0x17, 0xF0, 0x90, 0x92, 0x11, 0xE0, 0x90, 0x92,
-0x18, 0xF0, 0x7B, 0x01, 0x7A, 0x92, 0x79, 0x12, 0x12, 0x5E, 0x10, 0x7F, 0x04, 0x02, 0x87, 0xBB,
-0x7B, 0x01, 0x7A, 0x92, 0x79, 0x07, 0x22, 0x31, 0xAC, 0x7F, 0xF4, 0x7E, 0x00, 0x12, 0x64, 0x37,
-0xBF, 0x01, 0x06, 0x90, 0x92, 0x16, 0xE0, 0xA3, 0xF0, 0x31, 0xAC, 0x7F, 0xF5, 0x7E, 0x00, 0x12,
-0x64, 0x37, 0xBF, 0x01, 0x08, 0x90, 0x92, 0x16, 0xE0, 0x90, 0x92, 0x18, 0xF0, 0x31, 0xAC, 0x7F,
-0xF6, 0x7E, 0x00, 0x12, 0x64, 0x37, 0xBF, 0x01, 0x08, 0x90, 0x92, 0x16, 0xE0, 0x90, 0x92, 0x19,
-0xF0, 0x31, 0xAC, 0x7F, 0xF7, 0x7E, 0x00, 0x12, 0x64, 0x37, 0xBF, 0x01, 0x08, 0x90, 0x92, 0x16,
-0xE0, 0x90, 0x92, 0x1A, 0xF0, 0x31, 0xAC, 0x7F, 0xF8, 0x7E, 0x00, 0x12, 0x64, 0x37, 0xBF, 0x01,
-0x08, 0x90, 0x92, 0x16, 0xE0, 0x90, 0x92, 0x1B, 0xF0, 0x31, 0xAC, 0x51, 0x2D, 0xBF, 0x01, 0x08,
-0x90, 0x92, 0x16, 0xE0, 0x90, 0x92, 0x1C, 0xF0, 0x31, 0xAC, 0x51, 0x26, 0xBF, 0x01, 0x08, 0x90,
-0x92, 0x16, 0xE0, 0x90, 0x92, 0x1D, 0xF0, 0x31, 0xAC, 0x31, 0xB3, 0xBF, 0x01, 0x08, 0x90, 0x92,
-0x16, 0xE0, 0x90, 0x92, 0x1E, 0xF0, 0x90, 0x92, 0x07, 0x74, 0x19, 0xF0, 0x90, 0x92, 0x15, 0x74,
-0x08, 0xF0, 0x90, 0x92, 0x17, 0xE0, 0x90, 0x92, 0x09, 0xF0, 0x90, 0x92, 0x18, 0xE0, 0x90, 0x92,
-0x0A, 0xF0, 0x90, 0x92, 0x19, 0xE0, 0x90, 0x92, 0x0B, 0xF0, 0x90, 0x92, 0x1A, 0xE0, 0x90, 0x92,
-0x0C, 0xF0, 0x90, 0x92, 0x1B, 0xE0, 0x90, 0x92, 0x0D, 0xF0, 0x90, 0x92, 0x1C, 0xE0, 0x90, 0x92,
-0x0E, 0xF0, 0x90, 0x92, 0x1D, 0xE0, 0x90, 0x92, 0x0F, 0xF0, 0x90, 0x92, 0x1E, 0xE0, 0x90, 0x92,
-0x10, 0xF0, 0x11, 0xC0, 0x12, 0x5E, 0x10, 0x7F, 0x04, 0x02, 0x87, 0xBB, 0x7B, 0x01, 0x7A, 0x92,
-0x79, 0x16, 0x22, 0x7F, 0xFD, 0x7E, 0x00, 0x02, 0x64, 0x37, 0x7E, 0x00, 0x7F, 0x0B, 0x7D, 0x00,
-0x7B, 0x01, 0x7A, 0x92, 0x79, 0x7F, 0x12, 0x06, 0xDE, 0x51, 0x1F, 0x51, 0x2D, 0xBF, 0x01, 0x1C,
-0x90, 0x92, 0x29, 0xE0, 0xFE, 0x54, 0x01, 0x90, 0x92, 0x7F, 0xF0, 0xEE, 0x54, 0x04, 0x90, 0x92,
-0x81, 0xF0, 0x90, 0x92, 0x29, 0xE0, 0x54, 0x08, 0x90, 0x92, 0x80, 0xF0, 0x51, 0x1F, 0x51, 0x26,
-0xBF, 0x01, 0x16, 0x90, 0x92, 0x29, 0xE0, 0xFE, 0x54, 0x07, 0x90, 0x92, 0x83, 0xF0, 0xEE, 0x54,
-0xE0, 0xC4, 0x13, 0x54, 0x07, 0x90, 0x92, 0x82, 0xF0, 0x51, 0x1F, 0x31, 0xB3, 0xBF, 0x01, 0x0E,
-0x90, 0x92, 0x29, 0xE0, 0x54, 0x0C, 0x13, 0x13, 0x54, 0x3F, 0x90, 0x92, 0x84, 0xF0, 0x22, 0x7B,
-0x01, 0x7A, 0x92, 0x79, 0x29, 0x22, 0x7F, 0xFB, 0x7E, 0x00, 0x02, 0x64, 0x37, 0x7F, 0xF9, 0x7E,
-0x00, 0x02, 0x64, 0x37, 0x12, 0x02, 0xF6, 0xFF, 0x90, 0x92, 0x7E, 0xF0, 0xBF, 0x01, 0x07, 0x11,
-0xC7, 0xE4, 0x90, 0x92, 0x7E, 0xF0, 0x22, 0x90, 0x00, 0x80, 0xE0, 0x44, 0x80, 0xFD, 0x7F, 0x80,
-0x12, 0x7B, 0x3E, 0x12, 0xB8, 0x40, 0x12, 0xBE, 0xE5, 0x12, 0x7B, 0x9C, 0x51, 0xD1, 0x12, 0xB7,
-0x7E, 0x7F, 0x01, 0x12, 0x85, 0x15, 0x90, 0x92, 0x7D, 0x74, 0x02, 0xF0, 0xFF, 0x12, 0x85, 0x15,
-0x90, 0x92, 0x7D, 0xE0, 0x04, 0xF0, 0x12, 0xB8, 0x02, 0x51, 0xEF, 0x90, 0x01, 0xCC, 0x74, 0x0F,
-0xF0, 0x90, 0x00, 0x80, 0xE0, 0x44, 0x40, 0xFD, 0x7F, 0x80, 0x12, 0x7B, 0x3E, 0x75, 0x20, 0xFF,
-0x12, 0x7C, 0xCD, 0x12, 0xB6, 0xAD, 0x90, 0x00, 0x81, 0xE0, 0x44, 0x04, 0xFD, 0x7F, 0x81, 0x12,
-0x7B, 0x3E, 0x12, 0xB8, 0x37, 0x31, 0xBA, 0x90, 0x00, 0x00, 0xE0, 0x54, 0xFB, 0xFD, 0xE4, 0xFF,
-0x12, 0xB6, 0x8A, 0x44, 0x04, 0xFD, 0x7F, 0x01, 0x12, 0x7B, 0x3E, 0x90, 0x01, 0x98, 0x74, 0x80,
-0xF0, 0xA3, 0x74, 0x88, 0xF0, 0xA3, 0xE4, 0xF0, 0xA3, 0x74, 0x80, 0xF0, 0xE4, 0xFF, 0x02, 0x85,
-0x9E, 0x90, 0x01, 0x01, 0xE0, 0x44, 0x04, 0xF0, 0x90, 0x01, 0x9A, 0xE0, 0x54, 0xC0, 0x12, 0xB7,
-0x13, 0x90, 0x01, 0x99, 0xE0, 0x44, 0xC0, 0xF0, 0x90, 0x01, 0x9B, 0x74, 0x80, 0xF0, 0x22, 0xF1,
-0xED, 0x12, 0x7B, 0xEF, 0x12, 0x3C, 0x03, 0x12, 0xBE, 0x63, 0xF1, 0xF3, 0x12, 0xC3, 0x14, 0x71,
-0xD9, 0x71, 0x26, 0x12, 0x7B, 0x64, 0x12, 0x78, 0xB9, 0x90, 0x89, 0x16, 0xE0, 0x54, 0x7F, 0xF0,
-0x54, 0xBF, 0xF0, 0x54, 0xDF, 0xF0, 0x54, 0xF0, 0xF0, 0xE4, 0x90, 0x89, 0x18, 0xF0, 0x90, 0x89,
-0x16, 0xE0, 0x54, 0xEF, 0xF0, 0x22, 0x7E, 0x00, 0x7F, 0x24, 0x7D, 0x00, 0x7B, 0x01, 0x7A, 0x86,
-0x79, 0x72, 0x12, 0x06, 0xDE, 0x90, 0x06, 0x90, 0xE0, 0x44, 0x20, 0xF0, 0x12, 0xB7, 0x1B, 0x71,
-0xDF, 0x90, 0x84, 0xC5, 0xE0, 0xFF, 0x64, 0x02, 0x70, 0x29, 0x71, 0xD2, 0x30, 0xE0, 0x02, 0x7E,
-0x01, 0x90, 0x86, 0x90, 0x71, 0xD0, 0x30, 0xE1, 0x02, 0x7E, 0x01, 0x90, 0x86, 0x8E, 0x71, 0xD0,
-0x30, 0xE2, 0x02, 0x7E, 0x01, 0x90, 0x86, 0x8F, 0xEE, 0xF0, 0x90, 0xFD, 0x80, 0xE0, 0x90, 0x02,
-0xFB, 0xF0, 0x22, 0xEF, 0x64, 0x01, 0x70, 0x1D, 0x71, 0xC9, 0x30, 0xE0, 0x02, 0x7F, 0x01, 0x90,
-0x86, 0x90, 0x71, 0xC7, 0x30, 0xE1, 0x02, 0x7F, 0x01, 0x90, 0x86, 0x8E, 0x71, 0xC7, 0x30, 0xE2,
-0x02, 0x7F, 0x01, 0x80, 0x23, 0x90, 0x84, 0xC5, 0xE0, 0x64, 0x03, 0x70, 0x20, 0x71, 0xC0, 0x30,
-0xE0, 0x02, 0x7F, 0x01, 0x90, 0x86, 0x90, 0x71, 0xBE, 0x30, 0xE1, 0x02, 0x7F, 0x01, 0x90, 0x86,
-0x8E, 0x71, 0xBE, 0x30, 0xE2, 0x02, 0x7F, 0x01, 0x90, 0x86, 0x8F, 0xEF, 0xF0, 0x22, 0xEF, 0xF0,
-0x90, 0xFD, 0x78, 0xE0, 0x7F, 0x00, 0x22, 0xEF, 0xF0, 0x90, 0xFD, 0x70, 0xE0, 0x7F, 0x00, 0x22,
-0xEE, 0xF0, 0x90, 0xFD, 0x80, 0xE0, 0x7E, 0x00, 0x22, 0x12, 0xC3, 0xE3, 0x02, 0x06, 0xDE, 0x12,
-0xC5, 0xD1, 0xE4, 0x90, 0x88, 0xD8, 0x12, 0x96, 0x40, 0x90, 0x88, 0x76, 0xF0, 0x12, 0x96, 0x3B,
-0x12, 0x96, 0x41, 0x90, 0x88, 0x88, 0xF0, 0xA3, 0xF0, 0x90, 0x88, 0xCA, 0xF0, 0xA3, 0xF0, 0x22,
-0x90, 0x86, 0x72, 0x91, 0x0B, 0x30, 0xE0, 0x02, 0x71, 0xDF, 0x22, 0xE0, 0xFF, 0xC4, 0x13, 0x13,
-0x54, 0x03, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x8B, 0x5B, 0x8A, 0x5C, 0x89, 0x5D,
-0x90, 0x05, 0x27, 0xE0, 0xF5, 0x5E, 0x8B, 0x1B, 0x8A, 0x1C, 0x89, 0x1D, 0x75, 0x1E, 0x01, 0x7B,
-0x01, 0x7A, 0x85, 0x79, 0xBC, 0x12, 0x6A, 0x21, 0x12, 0x91, 0xC4, 0xFF, 0xC3, 0x13, 0x20, 0xE0,
-0x02, 0x81, 0xCE, 0x90, 0x85, 0xBC, 0xE0, 0x30, 0xE0, 0x72, 0xF1, 0x28, 0x75, 0x5E, 0x21, 0xF1,
-0x9A, 0x30, 0xE0, 0x05, 0x12, 0xC8, 0x0E, 0x80, 0x0D, 0xE4, 0x90, 0x85, 0xBD, 0xF0, 0xA3, 0xF0,
-0x7D, 0x40, 0xFF, 0x12, 0x7C, 0x41, 0xF1, 0x91, 0x54, 0x1F, 0x30, 0xE0, 0x03, 0x43, 0x5E, 0x12,
-0xEF, 0xC4, 0x54, 0x0F, 0x30, 0xE0, 0x03, 0x43, 0x5E, 0x14, 0x90, 0x85, 0xBC, 0xE0, 0xC4, 0x13,
-0x54, 0x07, 0x30, 0xE0, 0x03, 0x43, 0x5E, 0x80, 0x90, 0x85, 0xBC, 0xF1, 0xD6, 0x20, 0xE0, 0x03,
-0x43, 0x5E, 0x40, 0xB1, 0x72, 0x90, 0x85, 0xBF, 0xE0, 0x70, 0x05, 0x7F, 0x01, 0x12, 0xB4, 0x21,
-0x90, 0x85, 0xBC, 0x91, 0x0B, 0x30, 0xE0, 0x04, 0x7F, 0x04, 0x80, 0x0B, 0xF1, 0xAC, 0xEF, 0x60,
-0x04, 0x7F, 0x01, 0x80, 0x02, 0x7F, 0x02, 0x12, 0xB4, 0x21, 0xA1, 0x3D, 0xB1, 0x6F, 0x90, 0x85,
-0xBF, 0xE0, 0x64, 0x04, 0x60, 0x02, 0xA1, 0x6A, 0xFF, 0x12, 0xB4, 0x21, 0xA1, 0x6A, 0x90, 0x85,
-0xBC, 0xE0, 0x30, 0xE0, 0x70, 0xF1, 0x28, 0x43, 0x5E, 0x31, 0xF1, 0x9A, 0x30, 0xE0, 0x05, 0x12,
-0xC8, 0x0E, 0x80, 0x07, 0x7D, 0x40, 0xE4, 0xFF, 0x12, 0x7C, 0x41, 0xF1, 0x91, 0x54, 0x1F, 0x30,
-0xE0, 0x03, 0x43, 0x5E, 0x02, 0xEF, 0xC4, 0x54, 0x0F, 0x30, 0xE0, 0x03, 0x43, 0x5E, 0x04, 0xB1,
-0x72, 0x90, 0x85, 0xBC, 0x91, 0x0B, 0x30, 0xE0, 0x0A, 0xF1, 0x48, 0x60, 0x30, 0xE4, 0xFD, 0x7F,
-0x02, 0x80, 0x1E, 0x12, 0xB6, 0x82, 0x90, 0x85, 0xC0, 0xE0, 0xB4, 0x02, 0x18, 0x12, 0x7A, 0xA2,
-0xF1, 0xAC, 0xBF, 0x01, 0x09, 0x90, 0x85, 0xC7, 0xE0, 0xFF, 0x7D, 0x01, 0x80, 0x03, 0xE4, 0xFD,
-0xFF, 0xB1, 0x7D, 0x80, 0x08, 0x90, 0x85, 0xC8, 0xE0, 0x90, 0x85, 0xC0, 0xF0, 0x90, 0x05, 0x40,
-0x74, 0x22, 0xF0, 0x80, 0x25, 0xB1, 0x6F, 0x90, 0x85, 0xC0, 0xE0, 0xB4, 0x02, 0x06, 0x7D, 0x01,
-0x7F, 0x04, 0x80, 0x0B, 0x90, 0x85, 0xC0, 0xE0, 0xB4, 0x08, 0x06, 0x7D, 0x01, 0x7F, 0x0C, 0xB1,
-0x7D, 0xF1, 0xA3, 0x90, 0x85, 0xC7, 0xF1, 0x8B, 0xF1, 0xF3, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x75,
-0x5E, 0x01, 0x90, 0x05, 0x27, 0xE5, 0x5E, 0xF0, 0x22, 0x7D, 0x01, 0x7F, 0x04, 0xD3, 0x10, 0xAF,
-0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x93, 0x1F, 0xED, 0xF0, 0x90, 0x85, 0xC1, 0xE0, 0xFE, 0xC4, 0x13,
-0x13, 0x54, 0x03, 0x30, 0xE0, 0x02, 0xC1, 0xD8, 0xEE, 0x12, 0x8D, 0x59, 0x30, 0xE0, 0x02, 0xC1,
-0xD8, 0x90, 0x85, 0xC8, 0xE0, 0xFE, 0x6F, 0x70, 0x02, 0xC1, 0xD8, 0xEF, 0x70, 0x02, 0xC1, 0x43,
-0x24, 0xFE, 0x70, 0x02, 0xC1, 0x80, 0x24, 0xFE, 0x60, 0x4D, 0x24, 0xFC, 0x70, 0x02, 0xC1, 0xBF,
-0x24, 0xFC, 0x60, 0x02, 0xC1, 0xD1, 0xEE, 0xB4, 0x0E, 0x03, 0x12, 0x74, 0x93, 0x90, 0x85, 0xC8,
-0xE0, 0x70, 0x05, 0x7F, 0x01, 0x12, 0x79, 0x80, 0x90, 0x85, 0xC8, 0xE0, 0xB4, 0x06, 0x03, 0x12,
-0x73, 0x8E, 0x90, 0x85, 0xC8, 0xE0, 0xB4, 0x04, 0x0F, 0x90, 0x93, 0x1F, 0xE0, 0xFF, 0x60, 0x05,
-0x12, 0x6D, 0x4C, 0x80, 0x03, 0x12, 0x79, 0x61, 0x90, 0x85, 0xC8, 0xE0, 0x64, 0x08, 0x60, 0x02,
-0xC1, 0xD1, 0x12, 0x7A, 0xB9, 0xC1, 0xD1, 0x90, 0x85, 0xC8, 0xE0, 0x70, 0x05, 0x7F, 0x01, 0x12,
-0x79, 0x80, 0x90, 0x85, 0xC8, 0xE0, 0xB4, 0x06, 0x03, 0x12, 0x73, 0x8E, 0x90, 0x85, 0xC8, 0xE0,
-0xB4, 0x0E, 0x08, 0xD1, 0xDD, 0xBF, 0x01, 0x03, 0x12, 0x74, 0x93, 0x90, 0x85, 0xC8, 0xE0, 0x64,
-0x0C, 0x60, 0x02, 0xC1, 0xD1, 0xD1, 0xDD, 0xEF, 0x64, 0x01, 0x60, 0x02, 0xC1, 0xD1, 0x12, 0x70,
-0x9E, 0xC1, 0xD1, 0x90, 0x85, 0xC8, 0xE0, 0xB4, 0x0E, 0x08, 0xD1, 0xDD, 0xBF, 0x01, 0x03, 0x12,
-0x74, 0x93, 0x90, 0x85, 0xC8, 0xE0, 0xB4, 0x06, 0x03, 0x12, 0x73, 0x8E, 0x90, 0x85, 0xC8, 0xE0,
-0xB4, 0x0C, 0x08, 0xD1, 0xDD, 0xBF, 0x01, 0x03, 0x12, 0x70, 0x9E, 0x90, 0x85, 0xC8, 0xE0, 0x64,
-0x04, 0x70, 0x5E, 0x12, 0xC4, 0x08, 0xEF, 0x64, 0x01, 0x70, 0x56, 0x12, 0x77, 0xFE, 0x80, 0x51,
-0x90, 0x85, 0xC8, 0xE0, 0xB4, 0x0E, 0x08, 0xD1, 0xDD, 0xBF, 0x01, 0x03, 0x12, 0x74, 0x93, 0x90,
-0x85, 0xC8, 0xE0, 0xB4, 0x06, 0x03, 0x12, 0x73, 0x8E, 0x90, 0x85, 0xC8, 0xE0, 0xB4, 0x0C, 0x08,
-0xD1, 0xDD, 0xBF, 0x01, 0x03, 0x12, 0x70, 0x9E, 0x90, 0x85, 0xC8, 0xE0, 0x70, 0x05, 0x7F, 0x01,
-0x12, 0x79, 0x80, 0x90, 0x85, 0xC8, 0xE0, 0xB4, 0x04, 0x17, 0x12, 0x79, 0xF3, 0x80, 0x12, 0x90,
-0x85, 0xC8, 0xE0, 0xB4, 0x0C, 0x0B, 0x12, 0xA1, 0x91, 0x54, 0x3F, 0x30, 0xE0, 0x03, 0x12, 0x7A,
-0x8A, 0x90, 0x85, 0xC8, 0x12, 0xC8, 0x3A, 0xF0, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xD3, 0x10, 0xAF,
-0x01, 0xC3, 0xC0, 0xD0, 0x12, 0x7A, 0x29, 0xEF, 0x64, 0x01, 0x60, 0x05, 0x75, 0x0E, 0x01, 0x80,
-0x24, 0x90, 0x85, 0xC1, 0xE0, 0x13, 0x13, 0x13, 0x54, 0x1F, 0x30, 0xE0, 0x05, 0x75, 0x0E, 0x02,
-0x80, 0x13, 0x90, 0x85, 0xC7, 0xE0, 0xD3, 0x94, 0x04, 0x40, 0x05, 0x75, 0x0E, 0x08, 0x80, 0x05,
-0x12, 0xB3, 0xDE, 0x80, 0x0E, 0x90, 0x01, 0xB9, 0x74, 0x02, 0xF0, 0x90, 0x01, 0xB8, 0xE5, 0x0E,
-0xF0, 0x7F, 0x00, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x7D, 0x03, 0x7F, 0x02, 0x02, 0x7B, 0xFD, 0x90,
-0x85, 0xBC, 0x91, 0x0B, 0x30, 0xE0, 0x0A, 0xF1, 0x48, 0x60, 0x06, 0x7D, 0x01, 0x7F, 0x02, 0xB1,
-0x7D, 0xF1, 0x48, 0x60, 0x02, 0xF1, 0x4F, 0x22, 0x90, 0x85, 0xC0, 0xE0, 0x64, 0x02, 0x22, 0x90,
-0x85, 0xC5, 0xE0, 0x64, 0x02, 0x60, 0x0F, 0xF1, 0xE4, 0x60, 0x0B, 0x12, 0x7A, 0x29, 0xEF, 0x70,
-0x05, 0xFD, 0x7F, 0x0C, 0xB1, 0x7D, 0x22, 0x90, 0x85, 0xC5, 0xE0, 0x64, 0x01, 0x70, 0x1B, 0xF1,
-0xE4, 0x60, 0x0F, 0xE4, 0xFD, 0x7F, 0x0C, 0xB1, 0x7D, 0xE4, 0xFD, 0xFF, 0x12, 0x90, 0xDE, 0x02,
-0x6B, 0x98, 0x90, 0x85, 0xC8, 0xE0, 0x70, 0x02, 0xB1, 0x79, 0x22, 0xE0, 0xFF, 0x7D, 0x01, 0xA1,
-0x7D, 0x90, 0x85, 0xBC, 0xE0, 0xFF, 0x13, 0x13, 0x13, 0x22, 0x90, 0x85, 0xBC, 0xE0, 0x13, 0x13,
-0x54, 0x3F, 0x22, 0x12, 0x7A, 0x29, 0xEF, 0x70, 0x02, 0xF1, 0x67, 0x22, 0x90, 0x05, 0x43, 0xE0,
-0x7F, 0x00, 0x30, 0xE7, 0x02, 0x7F, 0x01, 0x22, 0xAE, 0x07, 0xF1, 0xAC, 0xBF, 0x01, 0x11, 0x90,
-0x85, 0xBC, 0xF1, 0xD6, 0x20, 0xE0, 0x09, 0xAF, 0x06, 0x7D, 0x01, 0xB1, 0x7D, 0x7F, 0x01, 0x22,
-0x7F, 0x00, 0x22, 0x90, 0x86, 0x72, 0xE0, 0xC4, 0x13, 0x13, 0x54, 0x03, 0x22, 0x90, 0x85, 0xC9,
-0xE0, 0x44, 0x01, 0xF0, 0x90, 0x85, 0xC3, 0xE0, 0x54, 0x0F, 0x22, 0x81, 0x00, 0xE4, 0xFD, 0xFF,
-0x02, 0x6E, 0x5F, 0x7E, 0x00, 0x7F, 0x01, 0x7D, 0x00, 0x7B, 0x01, 0x7A, 0x85, 0x79, 0xBC, 0x12,
-0x06, 0xDE, 0x90, 0x85, 0xBC, 0xE0, 0x54, 0xFD, 0xF0, 0xE4, 0x12, 0x96, 0x41, 0xA3, 0x74, 0x0C,
-0xF0, 0x22, 0x12, 0x02, 0xF6, 0x54, 0x01, 0xFF, 0x90, 0x92, 0x8A, 0xE0, 0x54, 0xFE, 0x4F, 0xF0,
-0x22, 0x12, 0x02, 0xF6, 0x90, 0x86, 0x71, 0xF0, 0x22, 0x12, 0xC8, 0x47, 0x90, 0x92, 0x79, 0x12,
-0x8F, 0xFB, 0x54, 0x02, 0xFF, 0xEE, 0x54, 0xFD, 0x12, 0x8D, 0x60, 0x90, 0x92, 0x7A, 0x12, 0x8C,
-0x6E, 0x90, 0x92, 0x7B, 0xF0, 0xB1, 0x86, 0x90, 0x92, 0x79, 0xE0, 0x54, 0x01, 0xFF, 0xD3, 0x10,
-0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0xEF, 0x64, 0x01, 0x70, 0x19, 0x11, 0x96, 0x60, 0x09, 0x11, 0x8F,
-0x12, 0x7B, 0xFD, 0xB1, 0x74, 0x80, 0x07, 0x11, 0x8F, 0x12, 0x7B, 0xBF, 0x91, 0x60, 0x12, 0x7A,
-0x8A, 0x80, 0x17, 0x11, 0x96, 0x60, 0x07, 0x11, 0x8F, 0x12, 0x7B, 0xFD, 0x80, 0x05, 0x11, 0x8F,
-0x12, 0x7B, 0xBF, 0xB1, 0x30, 0xB1, 0x5D, 0x12, 0x7A, 0xB9, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x74,
-0x10, 0xF0, 0xFD, 0x7F, 0x03, 0x22, 0x90, 0x92, 0x7B, 0xE0, 0x90, 0x01, 0x3F, 0x22, 0x91, 0x6E,
-0x64, 0x01, 0x60, 0x02, 0x21, 0x85, 0x90, 0x85, 0xC5, 0xE0, 0x70, 0x02, 0x21, 0x85, 0x90, 0x05,
-0x63, 0xE0, 0x90, 0x92, 0x90, 0xF0, 0x90, 0x05, 0x62, 0xE0, 0x90, 0x92, 0x91, 0xF0, 0x90, 0x05,
-0x61, 0xE0, 0x90, 0x92, 0x92, 0xF0, 0x90, 0x05, 0x60, 0xE0, 0x90, 0x92, 0x93, 0xF0, 0xB1, 0xE7,
-0x90, 0x85, 0xC9, 0xE0, 0x54, 0xEC, 0xF0, 0x31, 0xA9, 0x24, 0xFD, 0x50, 0x02, 0x80, 0x0D, 0x90,
-0x85, 0xBC, 0xE0, 0x30, 0xE0, 0x04, 0x51, 0xCA, 0x80, 0x02, 0x51, 0x7D, 0x31, 0xA9, 0x64, 0x01,
-0x70, 0x22, 0x90, 0x06, 0xAB, 0xE0, 0x90, 0x85, 0xCC, 0xF0, 0x90, 0x06, 0xAA, 0xE0, 0x90, 0x85,
-0xCB, 0xF0, 0xA3, 0xE0, 0xFF, 0x70, 0x08, 0x90, 0x85, 0xCB, 0xE0, 0xFE, 0xFF, 0x80, 0x00, 0x90,
-0x85, 0xCC, 0xEF, 0xF0, 0x12, 0xBA, 0x2A, 0xE4, 0x90, 0x85, 0xCE, 0xF0, 0x12, 0xC5, 0x47, 0x31,
-0x91, 0x13, 0x54, 0x1F, 0x30, 0xE0, 0x5C, 0xEF, 0xC4, 0x13, 0x13, 0x54, 0x03, 0x20, 0xE0, 0x22,
-0x31, 0xA1, 0x6F, 0x70, 0x4E, 0x90, 0x85, 0xC2, 0xE0, 0x44, 0x40, 0xF0, 0xB1, 0x7D, 0x90, 0x01,
-0x3F, 0x11, 0x8F, 0x12, 0x7B, 0xFD, 0x91, 0x67, 0xB1, 0x56, 0x90, 0x85, 0xCC, 0xE0, 0x14, 0xF0,
-0x80, 0x31, 0x90, 0x85, 0xC3, 0xE0, 0xC4, 0x54, 0x0F, 0x64, 0x01, 0x70, 0x26, 0x31, 0xA1, 0xFE,
-0x6F, 0x60, 0x20, 0x90, 0x05, 0x73, 0xE0, 0xFF, 0xEE, 0x6F, 0x60, 0x17, 0x31, 0x91, 0x54, 0x3F,
-0x30, 0xE0, 0x10, 0xEF, 0x54, 0xBF, 0xF0, 0x90, 0x01, 0x3F, 0x11, 0x8F, 0x12, 0x7B, 0xBF, 0xB1,
-0x5D, 0xB1, 0x30, 0x31, 0x99, 0x90, 0x85, 0xBC, 0xE0, 0xC3, 0x13, 0x20, 0xE0, 0x02, 0x31, 0x99,
-0x22, 0x90, 0x85, 0xC2, 0xE0, 0xFF, 0x13, 0x13, 0x22, 0x90, 0x85, 0xC2, 0xE0, 0x44, 0x04, 0xF0,
-0x22, 0x90, 0x85, 0xCB, 0xE0, 0xFF, 0xA3, 0xE0, 0x22, 0x90, 0x85, 0xC3, 0xE0, 0xFF, 0xC4, 0x54,
-0x0F, 0x22, 0xE4, 0xF5, 0x77, 0x90, 0x85, 0xC5, 0xE0, 0x70, 0x02, 0x41, 0x4F, 0x91, 0x6E, 0x64,
-0x01, 0x60, 0x02, 0x41, 0x4F, 0x12, 0xC7, 0xC9, 0x31, 0xA9, 0x60, 0x22, 0x24, 0xFE, 0x60, 0x03,
-0x04, 0x70, 0x1E, 0x90, 0x85, 0xCC, 0xE0, 0x14, 0xF0, 0xE0, 0xFF, 0x60, 0x06, 0x90, 0x85, 0xCE,
-0xE0, 0x60, 0x0E, 0xEF, 0x70, 0x08, 0x90, 0x85, 0xCB, 0xE0, 0xA3, 0xF0, 0x80, 0x00, 0x75, 0x77,
-0x01, 0x90, 0x85, 0xBC, 0xE0, 0x30, 0xE0, 0x12, 0x90, 0x85, 0xC0, 0xE0, 0xB4, 0x02, 0x03, 0xE4,
-0xF5, 0x77, 0x12, 0x9F, 0xAC, 0xEF, 0x70, 0x02, 0xF5, 0x77, 0xE5, 0x77, 0x60, 0x41, 0x90, 0x85,
-0xC8, 0xE0, 0x20, 0xE2, 0x03, 0x12, 0x9D, 0x79, 0xB1, 0x6C, 0x90, 0x85, 0xCE, 0xE0, 0x60, 0x04,
-0x64, 0x01, 0x70, 0x13, 0xE4, 0x90, 0x91, 0x6E, 0xF0, 0x90, 0x85, 0xCE, 0xE0, 0x51, 0x5B, 0x51,
-0x6F, 0x90, 0x85, 0xCE, 0xE0, 0x80, 0x12, 0xE4, 0x90, 0x91, 0x6E, 0x51, 0x50, 0x51, 0x6F, 0x90,
-0x85, 0xCE, 0xE0, 0x75, 0xF0, 0x03, 0xA4, 0x24, 0xFE, 0x51, 0x5B, 0x90, 0x85, 0xDE, 0xF0, 0x22,
-0xF0, 0x90, 0x85, 0xCE, 0xE0, 0x75, 0xF0, 0x03, 0xA4, 0x24, 0xFE, 0xFF, 0x90, 0x85, 0xCD, 0xE0,
-0x2F, 0x22, 0xE0, 0x44, 0x02, 0xF0, 0xE4, 0x90, 0x91, 0x6E, 0xF0, 0x90, 0x86, 0x6E, 0xE0, 0x90,
-0x91, 0x6F, 0xF0, 0xE4, 0xFB, 0xFD, 0x7F, 0x54, 0x7E, 0x01, 0x02, 0x61, 0x41, 0xE4, 0xF5, 0x77,
-0x90, 0x06, 0xA9, 0xE0, 0xF5, 0x77, 0x54, 0xC0, 0x70, 0x07, 0x51, 0xC2, 0x54, 0xFD, 0xF0, 0xA1,
-0x90, 0xE5, 0x77, 0x30, 0xE6, 0x19, 0x90, 0x85, 0xC5, 0xE0, 0x64, 0x01, 0x70, 0x13, 0x12, 0x9F,
-0xDD, 0x64, 0x02, 0x60, 0x05, 0x12, 0x77, 0x61, 0x80, 0x07, 0x12, 0x79, 0x41, 0x80, 0x02, 0x51,
-0xC2, 0xE5, 0x77, 0x90, 0x85, 0xC9, 0x30, 0xE7, 0x04, 0x51, 0x62, 0xA1, 0x64, 0xE0, 0x54, 0xFD,
-0xF0, 0x22, 0x90, 0x85, 0xC9, 0xE0, 0x54, 0xFE, 0xF0, 0x22, 0x90, 0x06, 0xA9, 0xE0, 0x90, 0x92,
-0x56, 0xF0, 0xE0, 0xFD, 0x54, 0xC0, 0x70, 0x04, 0x51, 0xC2, 0x80, 0x56, 0xED, 0x30, 0xE6, 0x41,
-0x90, 0x85, 0xC5, 0xE0, 0x64, 0x02, 0x70, 0x28, 0x90, 0x85, 0xC1, 0xE0, 0xFF, 0xC3, 0x13, 0x20,
-0xE0, 0x09, 0x90, 0x85, 0xC9, 0xE0, 0x44, 0x01, 0xF0, 0x80, 0x1C, 0x12, 0x9F, 0xE4, 0x64, 0x01,
-0x70, 0x21, 0x90, 0x85, 0xC9, 0xE0, 0x44, 0x04, 0xF0, 0x7F, 0x01, 0x12, 0x62, 0x8E, 0x80, 0x13,
-0x12, 0x9F, 0xDD, 0x64, 0x02, 0x60, 0x05, 0x12, 0x77, 0x61, 0x80, 0x07, 0x12, 0x79, 0x41, 0x80,
-0x02, 0x51, 0xC2, 0x90, 0x92, 0x56, 0xE0, 0x90, 0x85, 0xC9, 0x30, 0xE7, 0x04, 0x51, 0x62, 0xA1,
-0x64, 0xE0, 0x54, 0xFD, 0xF0, 0x22, 0x90, 0x85, 0xBC, 0xE0, 0x30, 0xE0, 0x06, 0x90, 0x85, 0xBE,
-0x74, 0x01, 0xF0, 0x90, 0x85, 0xC5, 0xE0, 0x70, 0x02, 0x61, 0xEE, 0x90, 0x85, 0xDC, 0xE0, 0x04,
-0xF0, 0x90, 0x05, 0x61, 0x91, 0x59, 0x78, 0x08, 0x12, 0x04, 0xD8, 0xA8, 0x04, 0xA9, 0x05, 0xAA,
-0x06, 0xAB, 0x07, 0x90, 0x05, 0x60, 0x91, 0x59, 0x12, 0x87, 0x4B, 0xC0, 0x04, 0xC0, 0x05, 0xC0,
-0x06, 0xC0, 0x07, 0x90, 0x05, 0x62, 0x91, 0x59, 0x78, 0x10, 0x12, 0x04, 0xD8, 0xD0, 0x03, 0xD0,
-0x02, 0xD0, 0x01, 0xD0, 0x00, 0x12, 0x87, 0x4B, 0xC0, 0x04, 0xC0, 0x05, 0xC0, 0x06, 0xC0, 0x07,
-0xA3, 0x91, 0x59, 0x78, 0x18, 0x12, 0x04, 0xD8, 0xD0, 0x03, 0xD0, 0x02, 0xD0, 0x01, 0xD0, 0x00,
-0x12, 0x87, 0x4B, 0x90, 0x85, 0xFC, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0x90, 0x92, 0x8B, 0xE0, 0x54,
-0xFE, 0xF0, 0xE0, 0xC3, 0x13, 0x30, 0xE0, 0x0E, 0x12, 0xBA, 0x1D, 0xFB, 0x12, 0x51, 0x7D, 0x90,
-0x92, 0x8B, 0xE0, 0x54, 0xFD, 0xF0, 0x31, 0x91, 0x13, 0x54, 0x1F, 0x30, 0xE0, 0x09, 0x90, 0x01,
-0x3B, 0xE0, 0x30, 0xE4, 0x02, 0x91, 0x60, 0x90, 0x93, 0x1C, 0xE0, 0x04, 0xF0, 0xE0, 0xC3, 0x94,
-0x80, 0x40, 0x0B, 0x90, 0x01, 0x98, 0xE0, 0x54, 0xFE, 0xF0, 0xE0, 0x44, 0x01, 0xF0, 0x12, 0x5D,
-0x1F, 0x12, 0x6E, 0x1D, 0xE4, 0x90, 0x88, 0xE0, 0xF0, 0x7F, 0x01, 0x12, 0xB8, 0xBA, 0xB1, 0xFD,
-0x12, 0x9F, 0xD3, 0x30, 0xE0, 0x52, 0x90, 0x88, 0x76, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x7C, 0x00,
-0x7D, 0x64, 0x12, 0x03, 0x82, 0x90, 0x88, 0xCA, 0xE0, 0x6E, 0x70, 0x03, 0xA3, 0xE0, 0x6F, 0x60,
-0x0A, 0x90, 0x88, 0xCA, 0xE4, 0x75, 0xF0, 0x01, 0x02, 0x07, 0x0A, 0x90, 0x88, 0x7A, 0xE0, 0xFE,
-0xA3, 0xE0, 0xFF, 0x90, 0x88, 0x88, 0xE0, 0xB5, 0x06, 0x14, 0xA3, 0xE0, 0xB5, 0x07, 0x0F, 0xEF,
-0x4E, 0x60, 0x0B, 0x90, 0x01, 0xC7, 0x74, 0x31, 0xF0, 0x7F, 0x01, 0x02, 0x5F, 0xE9, 0x12, 0xC1,
-0xE1, 0xE4, 0x90, 0x88, 0xCA, 0xF0, 0xA3, 0xF0, 0x22, 0xE0, 0xFF, 0xE4, 0xFC, 0xFD, 0xFE, 0x22,
-0x7D, 0x02, 0x7F, 0x02, 0x12, 0x7C, 0x41, 0x7D, 0x01, 0x7F, 0x02, 0x02, 0x7C, 0x41, 0xE4, 0xFF,
-0x12, 0x77, 0x39, 0xEF, 0x22, 0xE4, 0x90, 0x92, 0x67, 0xF0, 0x90, 0x85, 0xC5, 0xE0, 0x60, 0x4F,
-0x91, 0x6E, 0x64, 0x01, 0x70, 0x49, 0xB1, 0x7D, 0x12, 0xC7, 0xC9, 0x90, 0x92, 0x67, 0x74, 0x01,
-0xF0, 0xE4, 0x90, 0x85, 0xCC, 0xF0, 0x90, 0x85, 0xBC, 0xE0, 0x30, 0xE0, 0x16, 0x90, 0x85, 0xC0,
-0xE0, 0xB4, 0x02, 0x05, 0xE4, 0x90, 0x92, 0x67, 0xF0, 0x12, 0x9F, 0xAC, 0xEF, 0x70, 0x04, 0x90,
-0x92, 0x67, 0xF0, 0x90, 0x92, 0x67, 0xE0, 0x60, 0x16, 0x90, 0x85, 0xC8, 0xE0, 0x20, 0xE2, 0x03,
-0x12, 0x9D, 0x79, 0xB1, 0x6C, 0xE4, 0x90, 0x91, 0x6E, 0xF0, 0x90, 0x85, 0xCD, 0x51, 0x6E, 0x22,
-0x31, 0x91, 0x13, 0x54, 0x1F, 0x30, 0xE0, 0x0B, 0xEF, 0xC4, 0x13, 0x13, 0x54, 0x03, 0x30, 0xE0,
-0x02, 0xB1, 0x56, 0xB1, 0xF3, 0x30, 0xE0, 0x08, 0xB1, 0xBD, 0x54, 0x07, 0x70, 0x39, 0x80, 0x35,
-0xF1, 0xA1, 0x40, 0x31, 0x91, 0x6E, 0x64, 0x01, 0x70, 0x2D, 0x12, 0x9F, 0xE4, 0x70, 0x05, 0x12,
-0x70, 0xDB, 0x80, 0x24, 0x12, 0x70, 0xDB, 0x90, 0x85, 0xCF, 0xE0, 0x04, 0xF0, 0xE0, 0xD3, 0x94,
-0x02, 0x40, 0x09, 0xB1, 0x28, 0xE4, 0x90, 0x85, 0xCF, 0xF0, 0x80, 0x03, 0x12, 0x79, 0x41, 0xE4,
-0x90, 0x85, 0xCE, 0xF0, 0x22, 0xB1, 0x90, 0x22, 0x90, 0x85, 0xC2, 0xE0, 0x54, 0xFB, 0xF0, 0x22,
-0x7D, 0x02, 0x7F, 0x02, 0x02, 0x7C, 0xA9, 0x91, 0x75, 0xB1, 0x30, 0x90, 0x92, 0x79, 0xE0, 0x30,
-0xE0, 0x13, 0xB1, 0x74, 0x90, 0x92, 0x7C, 0xE0, 0x60, 0x05, 0x14, 0xF0, 0x02, 0x7A, 0x8A, 0xB1,
-0x86, 0xE4, 0xFF, 0x11, 0x4E, 0x22, 0x7D, 0x02, 0x7F, 0x02, 0x02, 0x7C, 0x41, 0x7D, 0x01, 0x7F,
-0x02, 0x02, 0x7C, 0xA9, 0x90, 0x85, 0xC1, 0xE0, 0x44, 0x04, 0xF0, 0x22, 0x90, 0x85, 0xC9, 0xE0,
-0x44, 0x10, 0xF0, 0x22, 0x90, 0x92, 0x7B, 0xE0, 0x90, 0x05, 0x73, 0xF0, 0x22, 0x90, 0x85, 0xCB,
-0xE0, 0x90, 0x05, 0x73, 0xF0, 0x22, 0x90, 0x92, 0x7A, 0xE0, 0x14, 0x90, 0x92, 0x7C, 0xF0, 0x22,
-0x90, 0x85, 0xBC, 0xE0, 0x90, 0x85, 0xC7, 0x30, 0xE0, 0x05, 0xE0, 0xFF, 0x02, 0x9F, 0xB8, 0x02,
-0x9F, 0x8B, 0x91, 0x6E, 0x64, 0x01, 0x70, 0x14, 0x90, 0x85, 0xC5, 0xE0, 0x60, 0x0E, 0xB1, 0xE7,
-0x90, 0x85, 0xC1, 0xE0, 0xB1, 0xBE, 0x54, 0x07, 0x70, 0x02, 0xB1, 0x90, 0x22, 0xEF, 0x54, 0xFB,
-0xF0, 0x90, 0x85, 0xC9, 0xE0, 0x54, 0xFD, 0xF0, 0x22, 0x90, 0x01, 0x57, 0xE0, 0x60, 0x17, 0xB1,
-0xEA, 0xB1, 0xF3, 0x30, 0xE0, 0x02, 0x80, 0xE5, 0xF1, 0xA1, 0x40, 0x0A, 0xE4, 0xFF, 0x12, 0x77,
-0x39, 0xBF, 0x01, 0x02, 0xB1, 0x28, 0x22, 0x90, 0x01, 0x57, 0xE4, 0xF0, 0x90, 0x01, 0x3C, 0x74,
-0x02, 0xF0, 0x22, 0x90, 0x85, 0xC1, 0xE0, 0xFF, 0x13, 0x13, 0x54, 0x3F, 0x22, 0x90, 0x92, 0x79,
-0xE0, 0x30, 0xE0, 0x09, 0x90, 0x01, 0x3B, 0xE0, 0x30, 0xE4, 0x02, 0x91, 0x60, 0x22, 0x90, 0x85,
-0xC5, 0xE0, 0x60, 0x0F, 0x90, 0x06, 0x92, 0xE0, 0x30, 0xE1, 0x03, 0x02, 0x6B, 0x98, 0x12, 0xC8,
-0xCE, 0xB1, 0x90, 0x22, 0xE4, 0xFF, 0x12, 0x77, 0x39, 0xBF, 0x01, 0x0E, 0x90, 0x85, 0xC5, 0xE0,
-0x60, 0x08, 0x51, 0xC2, 0x54, 0x07, 0x70, 0x02, 0xB1, 0x90, 0x22, 0xC0, 0xE0, 0xC0, 0xF0, 0xC0,
-0x83, 0xC0, 0x82, 0xC0, 0xD0, 0x75, 0xD0, 0x00, 0xC0, 0x00, 0xC0, 0x01, 0xC0, 0x02, 0xC0, 0x03,
-0xC0, 0x04, 0xC0, 0x05, 0xC0, 0x06, 0xC0, 0x07, 0x90, 0x01, 0xC4, 0x74, 0x3B, 0xF0, 0x74, 0xA6,
-0xA3, 0xF0, 0x12, 0x71, 0x90, 0xE5, 0x4C, 0x30, 0xE1, 0x02, 0xF1, 0xD5, 0xE5, 0x4C, 0x30, 0xE3,
-0x03, 0x12, 0xB8, 0xD0, 0xE5, 0x4C, 0x30, 0xE4, 0x03, 0x12, 0xB8, 0xC9, 0xE5, 0x4C, 0x30, 0xE5,
-0x03, 0x12, 0xBE, 0xF2, 0xE5, 0x4C, 0x30, 0xE6, 0x03, 0x12, 0xBD, 0x76, 0xE5, 0x4E, 0x30, 0xE0,
-0x02, 0xD1, 0xFC, 0xE5, 0x4E, 0x30, 0xE1, 0x02, 0x71, 0x36, 0xE5, 0x4E, 0x30, 0xE2, 0x03, 0x12,
-0xBD, 0x83, 0xE5, 0x4E, 0x30, 0xE3, 0x02, 0xF1, 0x15, 0xE5, 0x4E, 0x30, 0xE4, 0x02, 0xB1, 0xA2,
-0xE5, 0x4E, 0x30, 0xE5, 0x03, 0x12, 0xBD, 0xB2, 0xE5, 0x4E, 0x30, 0xE6, 0x02, 0xD1, 0x24, 0xE5,
-0x4F, 0x30, 0xE1, 0x03, 0x12, 0xBD, 0xCE, 0xE5, 0x4F, 0x30, 0xE4, 0x03, 0x12, 0xBF, 0x2E, 0xE5,
-0x4F, 0x30, 0xE5, 0x02, 0xF1, 0x2E, 0x74, 0x3B, 0x04, 0x90, 0x01, 0xC4, 0xF0, 0x74, 0xA6, 0xA3,
-0xF0, 0xD0, 0x07, 0xD0, 0x06, 0xD0, 0x05, 0xD0, 0x04, 0xD0, 0x03, 0xD0, 0x02, 0xD0, 0x01, 0xD0,
-0x00, 0xD0, 0xD0, 0xD0, 0x82, 0xD0, 0x83, 0xD0, 0xF0, 0xD0, 0xE0, 0x32, 0x90, 0x85, 0xBC, 0xE0,
-0x30, 0xE0, 0x10, 0xA3, 0x74, 0x01, 0xF0, 0x90, 0x85, 0xBC, 0xE0, 0xFF, 0xC3, 0x13, 0x30, 0xE0,
-0x02, 0xF1, 0xBA, 0x21, 0xB2, 0x91, 0x6E, 0x64, 0x01, 0x70, 0x12, 0x90, 0x85, 0xC5, 0xE0, 0x60,
-0x0C, 0x90, 0x01, 0x57, 0xE4, 0xF0, 0x90, 0x01, 0x3C, 0x74, 0x02, 0x51, 0x65, 0x22, 0xE4, 0xF5,
-0x77, 0x90, 0x85, 0xBB, 0xE0, 0xFF, 0xE5, 0x77, 0xC3, 0x9F, 0x50, 0x64, 0xAF, 0x77, 0x12, 0x77,
-0x39, 0xEF, 0x60, 0x58, 0xE5, 0x77, 0x13, 0x13, 0x13, 0x54, 0x1F, 0xFF, 0xE5, 0x77, 0x54, 0x07,
-0xFE, 0x74, 0x75, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83, 0xE0, 0xFD, 0xAF, 0x06, 0x12,
-0xA9, 0x9B, 0x08, 0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0xFF, 0xEF, 0x5D, 0x60,
-0x2B, 0xE5, 0x77, 0x12, 0xC8, 0x2C, 0x20, 0xE7, 0x02, 0x80, 0x13, 0xE5, 0x77, 0xC4, 0x54, 0xF0,
-0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, 0x81, 0xF5, 0x83, 0xE0, 0xFF, 0x20, 0xE7, 0x09, 0x90, 0x01,
-0xC1, 0xE0, 0x44, 0x20, 0xF0, 0x80, 0x05, 0xAD, 0x77, 0x12, 0x97, 0x07, 0x05, 0x77, 0x80, 0x91,
-0x22, 0x90, 0x85, 0xCE, 0xE0, 0x04, 0xF0, 0x90, 0x85, 0xC9, 0xE0, 0x54, 0xEF, 0xF0, 0x90, 0x86,
-0x6D, 0xE0, 0xFF, 0x90, 0x85, 0xCE, 0xE0, 0xD3, 0x9F, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0,
-0xD0, 0x12, 0x9F, 0xAC, 0xBF, 0x01, 0x04, 0x7F, 0x01, 0x80, 0x02, 0x7F, 0x02, 0x12, 0xB4, 0x21,
-0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xE4, 0xFF, 0x90, 0x92, 0x56, 0xEF, 0xF0, 0x90, 0x04, 0x7E, 0xE0,
-0xFF, 0xA3, 0xE0, 0x90, 0x92, 0x66, 0xF0, 0xE0, 0xFE, 0x6F, 0x60, 0x66, 0x90, 0x92, 0x57, 0x74,
-0x03, 0xF0, 0x90, 0x92, 0x65, 0x74, 0x08, 0xF0, 0xEE, 0x04, 0x54, 0x0F, 0xFF, 0xE4, 0xFE, 0xEF,
-0x75, 0xF0, 0x08, 0xA4, 0x24, 0x00, 0xF5, 0x82, 0xE4, 0x34, 0x80, 0xF5, 0x83, 0xE5, 0x82, 0x2E,
-0x11, 0x53, 0xE0, 0xFD, 0x74, 0x59, 0x2E, 0xF5, 0x82, 0xE4, 0x34, 0x92, 0xF5, 0x83, 0xED, 0xF0,
-0x0E, 0xEE, 0xB4, 0x08, 0xDA, 0x7B, 0x01, 0x7A, 0x92, 0x79, 0x57, 0x12, 0x5E, 0x10, 0x90, 0x92,
-0x66, 0xE0, 0x04, 0x54, 0x0F, 0xFF, 0xF0, 0xBF, 0x0F, 0x02, 0xE4, 0xF0, 0x90, 0x92, 0x66, 0xE0,
-0x90, 0x04, 0x7F, 0xF0, 0x90, 0x92, 0x56, 0xE0, 0x7F, 0x04, 0x70, 0x03, 0x02, 0xB8, 0xBA, 0x12,
-0x87, 0xBB, 0x22, 0xF5, 0x82, 0xE4, 0x35, 0x83, 0xF5, 0x83, 0x22, 0x90, 0x01, 0xCC, 0xE0, 0x54,
-0x0F, 0x90, 0x92, 0x01, 0xF0, 0x90, 0x92, 0x01, 0xE0, 0xFD, 0x70, 0x02, 0x21, 0x68, 0x90, 0x85,
-0x1D, 0xE0, 0xFF, 0x70, 0x06, 0xA3, 0xE0, 0x64, 0x09, 0x60, 0x0A, 0xEF, 0x14, 0xFF, 0x90, 0x85,
-0x1E, 0xE0, 0xB5, 0x07, 0x04, 0x7F, 0x01, 0x80, 0x02, 0x7F, 0x00, 0xEF, 0x60, 0x08, 0x90, 0x01,
-0xC1, 0xE0, 0x44, 0x01, 0xF0, 0x22, 0x90, 0x93, 0x17, 0xE0, 0x31, 0x9A, 0x08, 0x80, 0x05, 0xC3,
-0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0xFF, 0xEF, 0x5D, 0x70, 0x02, 0x21, 0x4B, 0xE4, 0x90, 0x92,
-0x02, 0xF0, 0x90, 0x92, 0x02, 0xE0, 0xF9, 0xC3, 0x94, 0x04, 0x50, 0x40, 0x31, 0x6A, 0xA4, 0xFF,
-0xE9, 0xFD, 0x7C, 0x00, 0x2F, 0xFF, 0xEC, 0x35, 0xF0, 0xFE, 0x74, 0xD0, 0x31, 0x72, 0x90, 0x84,
-0xCD, 0x12, 0x05, 0x28, 0xE5, 0x82, 0x29, 0x11, 0x53, 0xEF, 0x31, 0x69, 0xA4, 0x2D, 0xFF, 0xEC,
-0x35, 0xF0, 0xFE, 0x74, 0xF0, 0x31, 0x72, 0x90, 0x84, 0xD1, 0x12, 0x05, 0x28, 0xE5, 0x82, 0x29,
-0x11, 0x53, 0xEF, 0xF0, 0x90, 0x92, 0x02, 0xE0, 0x04, 0xF0, 0x80, 0xB6, 0x90, 0x92, 0x01, 0xE0,
-0xFF, 0x90, 0x93, 0x17, 0xE0, 0xFE, 0x74, 0x01, 0xA8, 0x06, 0x08, 0x80, 0x02, 0xC3, 0x33, 0xD8,
-0xFC, 0xF4, 0x5F, 0x90, 0x92, 0x01, 0xF0, 0x90, 0x93, 0x17, 0xE0, 0xFF, 0x74, 0x01, 0xA8, 0x07,
-0x08, 0x80, 0x02, 0xC3, 0x33, 0xD8, 0xFC, 0x90, 0x01, 0xCC, 0xF0, 0x90, 0x93, 0x17, 0xE0, 0x04,
-0xF0, 0xE0, 0x54, 0x03, 0xF0, 0x90, 0x85, 0x1E, 0xF1, 0xB5, 0xB4, 0x0A, 0x02, 0x7F, 0x01, 0xEF,
-0x70, 0x02, 0x01, 0x65, 0xE4, 0x90, 0x85, 0x1E, 0xF0, 0x01, 0x65, 0x90, 0x01, 0xC0, 0xE0, 0x44,
-0x02, 0xF0, 0x90, 0x93, 0x17, 0xE0, 0x44, 0x80, 0x90, 0x00, 0x8A, 0x31, 0x69, 0x90, 0x01, 0xD0,
-0x12, 0x05, 0x28, 0xE0, 0x90, 0x01, 0xC3, 0xF0, 0x22, 0xF0, 0x90, 0x93, 0x17, 0xE0, 0x75, 0xF0,
-0x04, 0x22, 0x2F, 0xF5, 0x82, 0x74, 0x01, 0x3E, 0xF5, 0x83, 0xE0, 0xFF, 0x90, 0x85, 0x1E, 0xE0,
-0x75, 0xF0, 0x08, 0x22, 0x13, 0x13, 0x13, 0x54, 0x1F, 0x24, 0x75, 0xF5, 0x82, 0xE4, 0x34, 0x8F,
-0xF5, 0x83, 0xE0, 0xFD, 0x7C, 0x00, 0xE5, 0x62, 0x54, 0x07, 0xFF, 0x74, 0x01, 0x7E, 0x00, 0xA8,
-0x07, 0x22, 0xE4, 0xF5, 0x73, 0xEF, 0x14, 0xF5, 0x72, 0xED, 0xFF, 0xE5, 0x72, 0xF5, 0x82, 0x33,
-0x95, 0xE0, 0xF5, 0x83, 0xC3, 0xE5, 0x82, 0x9F, 0x74, 0x80, 0xF8, 0x65, 0x83, 0x98, 0x40, 0x51,
-0xE5, 0x72, 0x78, 0x03, 0xA2, 0xE7, 0x13, 0xD8, 0xFB, 0xFF, 0x33, 0x95, 0xE0, 0xFE, 0xEB, 0xF1,
-0xE0, 0xE5, 0x82, 0x2F, 0xF5, 0x82, 0xE5, 0x83, 0x3E, 0xF5, 0x83, 0xE0, 0xF5, 0x82, 0x75, 0x83,
-0x00, 0xE5, 0x72, 0x31, 0x98, 0x08, 0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0xFF,
-0xEE, 0x55, 0x83, 0xFE, 0xEF, 0x55, 0x82, 0x4E, 0x60, 0x13, 0x85, 0x72, 0x74, 0x05, 0x73, 0x90,
-0x92, 0x3E, 0xE0, 0x65, 0x73, 0x60, 0x0A, 0xE5, 0x74, 0xD3, 0x9D, 0x40, 0x04, 0x15, 0x72, 0x80,
-0x98, 0xAF, 0x74, 0x22, 0x7D, 0x01, 0xAF, 0x62, 0xAC, 0x05, 0x90, 0x92, 0x39, 0xEF, 0xF0, 0xFD,
-0xE0, 0xFF, 0x12, 0x8F, 0x5E, 0xE0, 0xF5, 0x6E, 0x54, 0x7F, 0xF5, 0x70, 0x75, 0xF0, 0x12, 0xEF,
-0x90, 0x89, 0x3D, 0x12, 0x05, 0x28, 0xE0, 0xF9, 0x90, 0x92, 0x39, 0xE0, 0xF1, 0xD5, 0xFE, 0xEF,
-0x12, 0x91, 0xDB, 0xE0, 0x54, 0x03, 0xF5, 0x6F, 0xE5, 0x70, 0x90, 0x83, 0x1D, 0x93, 0xFB, 0xED,
-0x71, 0x08, 0xE4, 0xF0, 0xA3, 0xEB, 0xF0, 0x12, 0x8B, 0x07, 0xC4, 0x54, 0x03, 0x90, 0x92, 0x3A,
-0xF0, 0x74, 0xCC, 0x2D, 0x51, 0xEA, 0xE5, 0x70, 0xF0, 0x74, 0x4C, 0x2D, 0xF1, 0xC4, 0xE5, 0x6F,
-0xF0, 0xE5, 0x70, 0xD3, 0x9E, 0x40, 0x06, 0x8E, 0x70, 0xAF, 0x06, 0x8F, 0x6E, 0x8C, 0x71, 0xE4,
-0xFF, 0xEF, 0xC3, 0x95, 0x71, 0x50, 0x2F, 0xE5, 0x6E, 0x30, 0xE7, 0x09, 0x85, 0x70, 0x6E, 0x1C,
-0xEC, 0x70, 0x20, 0x80, 0x21, 0xE5, 0x70, 0xD3, 0x99, 0x40, 0x14, 0xAD, 0x01, 0x90, 0x92, 0x39,
-0xE0, 0xFB, 0x90, 0x92, 0x3E, 0xEC, 0xF0, 0xAF, 0x70, 0x31, 0xA2, 0x8F, 0x6E, 0x80, 0x07, 0x89,
-0x6E, 0x80, 0x03, 0x0F, 0x80, 0xCB, 0x90, 0x92, 0x39, 0xE0, 0xFF, 0x12, 0x8F, 0xC5, 0xEF, 0xF0,
-0xA3, 0xE4, 0xF0, 0xA3, 0xE5, 0x6E, 0xF1, 0xBC, 0x91, 0x0F, 0x7B, 0x01, 0xFA, 0x7D, 0x05, 0x7F,
-0x08, 0x12, 0x96, 0x88, 0x90, 0x92, 0x39, 0xE0, 0xFF, 0x90, 0x91, 0x0B, 0xE5, 0x6F, 0xF0, 0xE4,
-0xFB, 0xAD, 0x6E, 0x02, 0x27, 0x3D, 0x74, 0xCC, 0x25, 0x6E, 0xF5, 0x82, 0xE4, 0x34, 0x90, 0xF5,
-0x83, 0x22, 0xE5, 0x71, 0x25, 0xE0, 0x24, 0xF5, 0xF5, 0x82, 0xE4, 0x34, 0x82, 0xF5, 0x83, 0xE4,
-0x93, 0xFE, 0x74, 0x01, 0x93, 0xFF, 0xE5, 0x6E, 0x25, 0xE0, 0x24, 0x7B, 0xF5, 0x82, 0xE4, 0x34,
-0x8F, 0xF5, 0x83, 0x22, 0x90, 0x92, 0x39, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0xA3, 0xED, 0xF0, 0xEB,
-0x75, 0xF0, 0x06, 0xA4, 0xFF, 0x90, 0x89, 0x21, 0x12, 0x87, 0x70, 0xE9, 0x2F, 0xF9, 0xEA, 0x35,
-0xF0, 0xFA, 0x90, 0x92, 0x41, 0x12, 0x87, 0x79, 0x90, 0x92, 0x3B, 0xE0, 0x71, 0x08, 0xE0, 0xFF,
-0xA3, 0xE0, 0x90, 0x92, 0x3E, 0xCF, 0xF0, 0xA3, 0xEF, 0xF0, 0xE4, 0xA3, 0xF0, 0x90, 0x92, 0x41,
-0x12, 0x87, 0x70, 0x90, 0x92, 0x40, 0xE0, 0xFF, 0xF5, 0x82, 0x75, 0x83, 0x00, 0x12, 0x03, 0x0F,
-0xFD, 0x7C, 0x00, 0x90, 0x92, 0x3B, 0xE0, 0x75, 0xF0, 0x12, 0x90, 0x89, 0x44, 0x12, 0x05, 0x28,
-0x75, 0xF0, 0x02, 0xEF, 0x91, 0x07, 0xFF, 0x90, 0x92, 0x3D, 0xE0, 0xFB, 0xEF, 0xA8, 0x03, 0x08,
-0x80, 0x05, 0xCE, 0xC3, 0x13, 0xCE, 0x13, 0xD8, 0xF9, 0x71, 0xF7, 0xEE, 0x8F, 0xF0, 0x12, 0x07,
-0x0A, 0x90, 0x92, 0x40, 0xE0, 0x04, 0xF0, 0xE0, 0xB4, 0x05, 0xB2, 0x90, 0x92, 0x41, 0x12, 0x87,
-0x70, 0x90, 0x00, 0x05, 0x12, 0x03, 0x0F, 0xFD, 0x7C, 0x00, 0x90, 0x92, 0x3D, 0xE0, 0xFF, 0x90,
-0x92, 0x39, 0xE0, 0xFE, 0xA3, 0xE0, 0xA8, 0x07, 0x08, 0x80, 0x05, 0xCE, 0xC3, 0x13, 0xCE, 0x13,
-0xD8, 0xF9, 0x71, 0xF7, 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0xD3, 0x9F, 0xEC, 0x9E, 0x40, 0x08, 0xED,
-0x9F, 0xFF, 0xEC, 0x9E, 0xFE, 0x80, 0x04, 0x7E, 0x00, 0x7F, 0x00, 0x90, 0x92, 0x3E, 0xEE, 0xF0,
-0xA3, 0xEF, 0xF0, 0x90, 0x92, 0x3E, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x90, 0x92, 0x3B, 0xE0, 0x71,
-0x08, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0x22, 0xFF, 0x12, 0x03, 0x70, 0x90, 0x92, 0x3E, 0x22, 0x75,
-0xF0, 0x12, 0xE5, 0x62, 0x90, 0x89, 0x40, 0x12, 0x05, 0x28, 0xE0, 0xFE, 0xA3, 0xE0, 0x22, 0xF0,
-0xE4, 0xA3, 0xF0, 0xA3, 0xF0, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0xE4, 0x90, 0x92,
-0xEA, 0xF0, 0xA3, 0xF0, 0xA3, 0x74, 0x08, 0xF0, 0xA3, 0x91, 0x0F, 0x90, 0x92, 0xF2, 0xF0, 0xA3,
-0xF0, 0xA3, 0xF0, 0x90, 0x01, 0xC4, 0x74, 0x16, 0xF0, 0x74, 0xAC, 0xA3, 0xF0, 0x90, 0x01, 0x1F,
-0xE0, 0xFE, 0x90, 0x01, 0x1E, 0xF1, 0x57, 0xEC, 0x3E, 0x90, 0x92, 0xE1, 0xF0, 0xA3, 0xEF, 0xF0,
-0x90, 0x02, 0x87, 0xE0, 0x90, 0x92, 0xE9, 0xF0, 0x90, 0x86, 0x72, 0xE0, 0x20, 0xE0, 0x02, 0xC1,
-0xFD, 0xE4, 0x90, 0x92, 0xE8, 0xF0, 0x90, 0x92, 0xE9, 0xE0, 0xFF, 0x90, 0x92, 0xE8, 0xE0, 0xC3,
-0x9F, 0x40, 0x02, 0xC1, 0xFD, 0x90, 0x92, 0xE1, 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0xEC, 0xFF, 0x90,
-0xFD, 0x11, 0xF0, 0x90, 0x92, 0xF2, 0xEF, 0xF0, 0xF1, 0x92, 0xF5, 0x83, 0xE0, 0xFE, 0xF1, 0x44,
-0xF1, 0xCC, 0x54, 0x3F, 0xFE, 0x90, 0x92, 0xE3, 0xF0, 0xA3, 0xEF, 0xF0, 0x90, 0x92, 0xEE, 0xEE,
-0xF0, 0xA3, 0xF1, 0xA7, 0x54, 0x0F, 0x33, 0x33, 0x33, 0x54, 0xF8, 0xFF, 0xF1, 0x9B, 0x54, 0x03,
-0xFE, 0xEF, 0x24, 0x18, 0x2E, 0xFF, 0x90, 0x92, 0xF3, 0xF0, 0x90, 0x92, 0xE2, 0xE0, 0x2F, 0xFF,
-0x90, 0x92, 0xE1, 0xE0, 0x34, 0x00, 0xFE, 0x90, 0x92, 0xE5, 0xF1, 0x29, 0xC0, 0x07, 0xF1, 0x0E,
-0x7D, 0x01, 0x12, 0x55, 0x36, 0xC0, 0x07, 0xF1, 0x0E, 0x7D, 0x04, 0x12, 0x55, 0x36, 0xAB, 0x07,
-0xD0, 0x05, 0xD0, 0x07, 0x12, 0x5D, 0x98, 0x90, 0x92, 0xEA, 0xEF, 0xF1, 0x0D, 0xE4, 0xFD, 0x12,
-0x55, 0x36, 0xEF, 0x54, 0xFC, 0x90, 0x92, 0xE7, 0xF0, 0x90, 0x92, 0xF3, 0xE0, 0xFF, 0x90, 0x92,
-0xE3, 0xE4, 0x8F, 0xF0, 0x12, 0x07, 0x0A, 0x90, 0x92, 0xE3, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x12,
-0x7A, 0xD0, 0x90, 0x92, 0xE3, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0xF1, 0x3B, 0x7D, 0x0F, 0x12, 0x55,
-0x36, 0x90, 0x92, 0xE3, 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0x90, 0x92, 0xE1, 0xEC, 0x8D, 0xF0, 0x12,
-0x07, 0x0A, 0x90, 0x85, 0xB7, 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0xD3, 0x90, 0x92, 0xE2, 0xE0, 0x9D,
-0x90, 0x92, 0xE1, 0xE0, 0x9C, 0x40, 0x1B, 0x90, 0x85, 0xB8, 0xE0, 0x24, 0x01, 0xFD, 0x90, 0x85,
-0xB7, 0xE0, 0x34, 0x00, 0xFC, 0xC3, 0x90, 0x92, 0xE2, 0xE0, 0x9D, 0xF0, 0x90, 0x92, 0xE1, 0xE0,
-0x9C, 0xF0, 0xEF, 0x30, 0xE6, 0x06, 0x90, 0x01, 0xC7, 0x74, 0x22, 0xF0, 0xEF, 0x30, 0xE7, 0x06,
-0x90, 0x01, 0xC7, 0x74, 0x21, 0xF0, 0xEF, 0x30, 0xE5, 0x06, 0x90, 0x01, 0xC7, 0x74, 0x23, 0xF0,
-0x90, 0x92, 0xE7, 0xE0, 0x24, 0x40, 0x60, 0x04, 0x24, 0x20, 0x70, 0x2C, 0x90, 0x86, 0x75, 0xE0,
-0xFF, 0x12, 0x8D, 0x59, 0x20, 0xE0, 0x02, 0xC1, 0x81, 0x90, 0x86, 0x87, 0xE0, 0x04, 0xF1, 0x0D,
-0x12, 0x59, 0x20, 0xEF, 0x70, 0x02, 0xC1, 0x81, 0x90, 0x92, 0xE7, 0xE0, 0xFF, 0x12, 0x7B, 0x77,
-0x90, 0x86, 0x88, 0xE0, 0x04, 0xF0, 0xC1, 0x81, 0x12, 0x9F, 0xD3, 0x30, 0xE0, 0x5A, 0x90, 0x92,
-0xEA, 0xE0, 0xFF, 0x90, 0x92, 0xE6, 0xE0, 0x2F, 0xFF, 0x90, 0x92, 0xE5, 0xE0, 0x34, 0x00, 0xCF,
-0x24, 0x08, 0xCF, 0x34, 0x00, 0xFE, 0x90, 0x92, 0xF0, 0xF1, 0x29, 0xEF, 0x64, 0x45, 0x70, 0x38,
-0xF1, 0x18, 0x12, 0xC7, 0x6A, 0xEF, 0x64, 0x01, 0x70, 0x2E, 0xF1, 0x18, 0x12, 0xC7, 0x2D, 0xEF,
-0x64, 0x01, 0x70, 0x24, 0x90, 0x92, 0xF4, 0x04, 0xF1, 0x17, 0xA3, 0xE0, 0xFD, 0x12, 0xC6, 0x86,
-0xEF, 0x70, 0x0D, 0x90, 0x92, 0xF2, 0xE0, 0xFD, 0x90, 0xFD, 0x11, 0xF1, 0x17, 0x12, 0xC6, 0xDE,
-0x90, 0x92, 0xF2, 0xE0, 0x90, 0xFD, 0x11, 0xF0, 0xF1, 0x0E, 0x12, 0x59, 0x20, 0xEF, 0x60, 0x18,
-0xF1, 0x0E, 0x90, 0x92, 0xEA, 0xE0, 0xFD, 0x90, 0x92, 0xED, 0xE0, 0xFB, 0x12, 0x54, 0x02, 0xEF,
-0x60, 0x06, 0x90, 0x92, 0xF4, 0x74, 0x01, 0xF0, 0x90, 0x86, 0x72, 0xE0, 0xC3, 0x13, 0x30, 0xE0,
-0x13, 0xF1, 0x0E, 0x90, 0x92, 0xEA, 0xE0, 0xFD, 0x12, 0x38, 0x10, 0xEF, 0x60, 0x06, 0x90, 0x92,
-0xF4, 0x74, 0x01, 0xF0, 0x12, 0x8F, 0xDF, 0x54, 0x3F, 0x30, 0xE0, 0x0A, 0xF1, 0x0E, 0x90, 0x92,
-0xEA, 0xE0, 0xFD, 0x12, 0x21, 0xB6, 0x90, 0x86, 0x72, 0xE0, 0xFF, 0x12, 0x8D, 0x59, 0x30, 0xE0,
-0x10, 0x90, 0x92, 0xF4, 0xE0, 0x70, 0x0A, 0xF1, 0x0E, 0x90, 0x92, 0xEA, 0xE0, 0xFD, 0x12, 0x4A,
+0x12, 0x7C, 0x72, 0xB1, 0xEB, 0x54, 0x01, 0xFF, 0x12, 0x7C, 0x7E, 0xB1, 0xEB, 0x13, 0x54, 0x01,
+0xFF, 0x12, 0x66, 0xDA, 0x90, 0x86, 0x72, 0xE0, 0xC4, 0x13, 0x13, 0x54, 0x01, 0xFF, 0xB1, 0xFF,
+0x90, 0x86, 0x72, 0xE0, 0x54, 0x01, 0xFF, 0x91, 0xDB, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x4D, 0xFF,
+0x90, 0x86, 0x72, 0xF0, 0xEE, 0x22, 0xE0, 0x54, 0xFE, 0x4E, 0xFE, 0xF0, 0xEF, 0x54, 0x02, 0xFF,
+0xEE, 0x54, 0xFD, 0x4F, 0xFF, 0xF0, 0x12, 0x02, 0xF6, 0xFE, 0x22, 0x90, 0x86, 0x72, 0xE0, 0x13,
+0x13, 0x22, 0x22, 0x90, 0x86, 0x72, 0x12, 0x9D, 0x41, 0x30, 0xE0, 0x02, 0x71, 0xE6, 0x22, 0xEF,
+0x60, 0x04, 0xD1, 0x07, 0xD1, 0xA4, 0x22, 0xE4, 0xFD, 0xFC, 0x90, 0x88, 0xD8, 0xE0, 0xFF, 0xF1,
+0xC2, 0xAB, 0x05, 0x74, 0x01, 0x2B, 0xF1, 0x7A, 0x2B, 0xF1, 0x72, 0x12, 0xB7, 0xBD, 0x90, 0x88,
+0x76, 0xF0, 0xA3, 0xEF, 0xF0, 0x74, 0x03, 0x2B, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0,
+0xFE, 0x74, 0x02, 0x2B, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xD1, 0x9B, 0x90, 0x88, 0x78, 0xF0, 0xA3,
+0xEF, 0xF0, 0x74, 0x05, 0x2B, 0xF1, 0x6A, 0xE0, 0xFE, 0x74, 0x04, 0x2B, 0xF5, 0x82, 0xE4, 0x34,
+0xFC, 0xD1, 0x9B, 0x90, 0x88, 0x7A, 0xF0, 0xA3, 0xEF, 0xF0, 0x74, 0x07, 0x2B, 0xF5, 0x82, 0xE4,
+0x34, 0xFC, 0xF5, 0x83, 0xE0, 0xFE, 0x74, 0x06, 0x2B, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xD1, 0x9B,
+0x90, 0x88, 0x7C, 0xF0, 0xA3, 0xEF, 0xF0, 0x74, 0x09, 0x2B, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5,
+0x83, 0xE0, 0xFE, 0x74, 0x08, 0x2B, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x24, 0x00,
+0xFF, 0xEC, 0x3E, 0x90, 0x88, 0x7E, 0xF0, 0xA3, 0xEF, 0xF0, 0x22, 0xF5, 0x83, 0xE0, 0x24, 0x00,
+0xFF, 0xEA, 0x3E, 0x22, 0x90, 0x88, 0xD9, 0xF1, 0x42, 0x12, 0xCA, 0xE5, 0xFD, 0x90, 0x92, 0x07,
+0xE0, 0x24, 0x2C, 0x12, 0xC9, 0xE5, 0x90, 0x92, 0x07, 0xE0, 0x2F, 0x24, 0x30, 0xA3, 0xF0, 0xE0,
+0xFD, 0x24, 0x04, 0xF1, 0xBA, 0xE0, 0xFE, 0x74, 0x05, 0x2D, 0xF1, 0x6A, 0xF1, 0x63, 0xEC, 0x3E,
+0x90, 0x88, 0x80, 0xF0, 0xA3, 0xEF, 0xF0, 0x90, 0x92, 0x08, 0xE0, 0x24, 0x0C, 0xF9, 0xE4, 0x34,
+0xFC, 0xF1, 0x53, 0x75, 0x1E, 0x04, 0x7B, 0x01, 0x7A, 0x88, 0x79, 0x82, 0x12, 0x6A, 0x21, 0x90,
+0x92, 0x08, 0xE0, 0x24, 0x14, 0xF0, 0xE0, 0xFD, 0x24, 0x01, 0xF1, 0x7A, 0x2D, 0xF1, 0x72, 0xF1,
+0x63, 0xEC, 0x3E, 0x90, 0x88, 0x86, 0xF0, 0xA3, 0xEF, 0xF0, 0x90, 0x88, 0xDA, 0xF1, 0x42, 0x90,
+0x88, 0x7C, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x4E, 0x60, 0x11, 0x90, 0x92, 0x07, 0xE0, 0xF1, 0x4D,
+0x8F, 0x1E, 0x7B, 0x01, 0x7A, 0x88, 0x79, 0x8A, 0x12, 0x6A, 0x21, 0x90, 0x88, 0xDB, 0xF1, 0x42,
+0xF1, 0x4D, 0x90, 0x88, 0x7E, 0xA3, 0xE0, 0xF5, 0x1E, 0x7B, 0x01, 0x7A, 0x88, 0x79, 0xAA, 0x02,
+0x6A, 0x21, 0xE0, 0xFF, 0x12, 0x7B, 0x2A, 0x90, 0x92, 0x07, 0xEF, 0xF0, 0x22, 0x24, 0x00, 0xF9,
+0xE4, 0x34, 0xFC, 0x75, 0x1B, 0x01, 0xF5, 0x1C, 0x89, 0x1D, 0x22, 0x90, 0x01, 0x17, 0xE0, 0xFE,
+0x90, 0x01, 0x16, 0xE0, 0x7C, 0x00, 0x24, 0x00, 0xFF, 0x22, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5,
+0x83, 0x22, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0x22, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5,
+0x83, 0xE0, 0xFE, 0x74, 0x00, 0x22, 0xE4, 0xFD, 0xFF, 0x02, 0x6E, 0x5F, 0xE4, 0xFD, 0xFF, 0x02,
+0xA6, 0xF8, 0xE0, 0x54, 0xFE, 0x4E, 0xFE, 0xF0, 0xEF, 0x22, 0x12, 0x02, 0xF6, 0xFF, 0x54, 0x01,
+0xFE, 0x22, 0x54, 0x08, 0xFE, 0xEF, 0x54, 0xF7, 0x4E, 0x22, 0x54, 0x20, 0xFE, 0xEF, 0x54, 0xDF,
+0x4E, 0x22, 0x54, 0x80, 0xFE, 0xEF, 0x54, 0x7F, 0x4E, 0x22, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5,
+0x83, 0x22, 0x12, 0x7B, 0x2A, 0x7C, 0x00, 0xAD, 0x07, 0x22, 0x90, 0x86, 0x72, 0xE0, 0x54, 0xBF,
+0xF0, 0x22, 0x25, 0xE0, 0x25, 0xE0, 0xFE, 0xEF, 0x4E, 0x22, 0x12, 0x7B, 0x3E, 0x90, 0x01, 0x01,
+0xE0, 0x22, 0x90, 0x01, 0xCC, 0xE0, 0x54, 0x0F, 0x90, 0x92, 0x01, 0xF0, 0x90, 0x92, 0x01, 0xE0,
+0xFD, 0x70, 0x03, 0x02, 0xB0, 0xDF, 0x90, 0x85, 0x1D, 0xE0, 0xFF, 0x70, 0x06, 0xA3, 0xE0, 0x64,
+0x09, 0x60, 0x0A, 0xEF, 0x14, 0xFF, 0x90, 0x85, 0x1E, 0xE0, 0xB5, 0x07, 0x04, 0x7F, 0x01, 0x80,
+0x02, 0x7F, 0x00, 0xEF, 0x60, 0x08, 0x90, 0x01, 0xC1, 0xE0, 0x44, 0x01, 0xF0, 0x22, 0x90, 0x93,
+0x8A, 0xE0, 0x31, 0x2E, 0x08, 0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0xFF, 0xEF,
+0x5D, 0x70, 0x02, 0x01, 0xC1, 0xE4, 0x90, 0x92, 0x02, 0xF0, 0x90, 0x92, 0x02, 0xE0, 0xF9, 0xC3,
+0x94, 0x04, 0x50, 0x31, 0x11, 0xE0, 0xA4, 0xFF, 0xE9, 0xFD, 0x7C, 0x00, 0x2F, 0xFF, 0xEC, 0x35,
+0xF0, 0xFE, 0x74, 0xD0, 0x11, 0xF8, 0x90, 0x84, 0xCD, 0x11, 0xE8, 0x11, 0xE0, 0xA4, 0x2D, 0xFF,
+0xEC, 0x35, 0xF0, 0xFE, 0x74, 0xF0, 0x11, 0xF8, 0x90, 0x84, 0xD1, 0x11, 0xE8, 0x90, 0x92, 0x02,
+0xE0, 0x04, 0xF0, 0x80, 0xC5, 0x90, 0x92, 0x01, 0xE0, 0xFF, 0x90, 0x93, 0x8A, 0x31, 0x10, 0x80,
+0x02, 0xC3, 0x33, 0xD8, 0xFC, 0xF4, 0x5F, 0x90, 0x92, 0x01, 0xF0, 0x90, 0x93, 0x8A, 0xE0, 0xFF,
+0x74, 0x01, 0xA8, 0x07, 0x08, 0x80, 0x02, 0xC3, 0x33, 0xD8, 0xFC, 0x90, 0x01, 0xCC, 0xF0, 0x90,
+0x93, 0x8A, 0xE0, 0x04, 0xF0, 0xE0, 0x54, 0x03, 0xF0, 0x90, 0x85, 0x1E, 0xF1, 0xA6, 0xB4, 0x0A,
+0x02, 0x7F, 0x01, 0xEF, 0x70, 0x03, 0x02, 0xAF, 0xEC, 0xE4, 0x90, 0x85, 0x1E, 0xF0, 0x02, 0xAF,
+0xEC, 0x90, 0x01, 0xC0, 0xE0, 0x44, 0x02, 0xF0, 0x90, 0x93, 0x8A, 0xE0, 0x44, 0x80, 0x90, 0x00,
+0x8A, 0xF0, 0x11, 0xE0, 0x90, 0x01, 0xD0, 0x12, 0x05, 0x28, 0xE0, 0x90, 0x01, 0xC3, 0xF0, 0x22,
+0x90, 0x93, 0x8A, 0xE0, 0x75, 0xF0, 0x04, 0x22, 0x12, 0x05, 0x28, 0xE5, 0x82, 0x29, 0xF5, 0x82,
+0xE4, 0x35, 0x83, 0xF5, 0x83, 0xEF, 0xF0, 0x22, 0x2F, 0xF5, 0x82, 0x74, 0x01, 0x3E, 0xF5, 0x83,
+0xE0, 0xFF, 0x90, 0x85, 0x1E, 0xE0, 0x75, 0xF0, 0x08, 0x22, 0x75, 0xF0, 0x03, 0x12, 0x05, 0x28,
+0xE0, 0xFE, 0x74, 0x01, 0xA8, 0x06, 0x08, 0x22, 0x13, 0x13, 0x13, 0x54, 0x1F, 0x24, 0x75, 0xF5,
+0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83, 0xE0, 0xFD, 0x7C, 0x00, 0xE5, 0x63, 0x54, 0x07, 0xFF, 0x74,
+0x01, 0x7E, 0x00, 0xA8, 0x07, 0x22, 0xE4, 0xF5, 0x74, 0xEF, 0x14, 0xF5, 0x73, 0xED, 0xFF, 0xE5,
+0x73, 0xF5, 0x82, 0x33, 0x95, 0xE0, 0xF5, 0x83, 0xC3, 0xE5, 0x82, 0x9F, 0x74, 0x80, 0xF8, 0x65,
+0x83, 0x98, 0x40, 0x52, 0xE5, 0x73, 0x78, 0x03, 0xA2, 0xE7, 0x13, 0xD8, 0xFB, 0xFF, 0x33, 0x95,
+0xE0, 0xFE, 0xEB, 0x12, 0xD1, 0x21, 0xE5, 0x82, 0x2F, 0xF5, 0x82, 0xE5, 0x83, 0x3E, 0xF5, 0x83,
+0xE0, 0xF5, 0x82, 0x75, 0x83, 0x00, 0xE5, 0x73, 0x31, 0x2C, 0x08, 0x80, 0x05, 0xC3, 0x33, 0xCE,
+0x33, 0xCE, 0xD8, 0xF9, 0xFF, 0xEE, 0x55, 0x83, 0xFE, 0xEF, 0x55, 0x82, 0x4E, 0x60, 0x13, 0x85,
+0x73, 0x75, 0x05, 0x74, 0x90, 0x92, 0x56, 0xE0, 0x65, 0x74, 0x60, 0x0A, 0xE5, 0x75, 0xD3, 0x9D,
+0x40, 0x04, 0x15, 0x73, 0x80, 0x97, 0xAF, 0x75, 0x22, 0xE4, 0xF5, 0x78, 0x90, 0x85, 0xBB, 0xE0,
+0xFF, 0xE5, 0x78, 0xC3, 0x9F, 0x50, 0x63, 0xAF, 0x78, 0x12, 0x77, 0x39, 0xEF, 0x60, 0x57, 0xE5,
+0x78, 0x13, 0x13, 0x13, 0x54, 0x1F, 0xFF, 0xE5, 0x78, 0x54, 0x07, 0xFE, 0x74, 0x75, 0x2F, 0xF5,
+0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83, 0xE0, 0xFD, 0xAF, 0x06, 0x31, 0x2F, 0x08, 0x80, 0x05, 0xC3,
+0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0xFF, 0xEF, 0x5D, 0x60, 0x2B, 0xE5, 0x78, 0x12, 0xD1, 0x70,
+0x20, 0xE7, 0x02, 0x80, 0x13, 0xE5, 0x78, 0xC4, 0x54, 0xF0, 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34,
+0x81, 0xF5, 0x83, 0xE0, 0xFF, 0x20, 0xE7, 0x09, 0x90, 0x01, 0xC1, 0xE0, 0x44, 0x20, 0xF0, 0x80,
+0x05, 0xAD, 0x78, 0x12, 0x90, 0xE3, 0x05, 0x78, 0x80, 0x92, 0x22, 0x7D, 0x01, 0xAF, 0x63, 0xAC,
+0x05, 0x90, 0x92, 0x51, 0xEF, 0xF0, 0xFD, 0xE0, 0xFF, 0x12, 0x91, 0x68, 0xE0, 0xF5, 0x6F, 0x54,
+0x7F, 0xF5, 0x71, 0x75, 0xF0, 0x12, 0xEF, 0x90, 0x89, 0x3D, 0x12, 0x05, 0x28, 0xE0, 0xF9, 0x90,
+0x92, 0x51, 0xE0, 0xF1, 0xD0, 0xFE, 0xEF, 0x12, 0x90, 0xD6, 0xE0, 0x54, 0x03, 0xF5, 0x70, 0xE5,
+0x71, 0x90, 0x83, 0x1D, 0x93, 0xFB, 0xED, 0x71, 0x1A, 0xE4, 0xF0, 0xA3, 0xEB, 0xF0, 0x12, 0x8B,
+0x12, 0xC4, 0x54, 0x03, 0x90, 0x92, 0x52, 0xF0, 0x74, 0xCC, 0x2D, 0x51, 0xFC, 0xE5, 0x71, 0xF0,
+0x74, 0x4C, 0x2D, 0xF1, 0xB5, 0xE5, 0x70, 0xF0, 0xE5, 0x71, 0xD3, 0x9E, 0x40, 0x06, 0x8E, 0x71,
+0xAF, 0x06, 0x8F, 0x6F, 0x8C, 0x72, 0xE4, 0xFF, 0xEF, 0xC3, 0x95, 0x72, 0x50, 0x2F, 0xE5, 0x6F,
+0x30, 0xE7, 0x09, 0x85, 0x71, 0x6F, 0x1C, 0xEC, 0x70, 0x20, 0x80, 0x21, 0xE5, 0x71, 0xD3, 0x99,
+0x40, 0x14, 0xAD, 0x01, 0x90, 0x92, 0x51, 0xE0, 0xFB, 0x90, 0x92, 0x56, 0xEC, 0xF0, 0xAF, 0x71,
+0x31, 0x36, 0x8F, 0x6F, 0x80, 0x07, 0x89, 0x6F, 0x80, 0x03, 0x0F, 0x80, 0xCB, 0x90, 0x92, 0x51,
+0xE0, 0xFF, 0x51, 0xF1, 0xEF, 0xF0, 0xA3, 0xE4, 0xF0, 0xA3, 0xE5, 0x6F, 0xF1, 0xAD, 0x91, 0x0F,
+0x7B, 0x01, 0xFA, 0x7D, 0x05, 0x7F, 0x08, 0x12, 0x96, 0x06, 0x90, 0x92, 0x51, 0xE0, 0xFF, 0x90,
+0x91, 0x0B, 0xE5, 0x70, 0xF0, 0xE4, 0xFB, 0xAD, 0x6F, 0x02, 0x27, 0x3D, 0xE4, 0xF0, 0xA3, 0xEF,
+0xF0, 0x90, 0x92, 0x57, 0xE4, 0xF0, 0xA3, 0x22, 0x74, 0xCC, 0x25, 0x6F, 0xF5, 0x82, 0xE4, 0x34,
+0x90, 0xF5, 0x83, 0x22, 0xE5, 0x72, 0x25, 0xE0, 0x24, 0xF5, 0xF5, 0x82, 0xE4, 0x34, 0x82, 0xF5,
+0x83, 0xE4, 0x93, 0xFE, 0x74, 0x01, 0x93, 0xFF, 0xE5, 0x6F, 0x25, 0xE0, 0x24, 0x7B, 0xF5, 0x82,
+0xE4, 0x34, 0x8F, 0xF5, 0x83, 0x22, 0x90, 0x92, 0x51, 0xF1, 0xDE, 0xEB, 0x75, 0xF0, 0x06, 0xA4,
+0xFF, 0x90, 0x89, 0x21, 0x12, 0x87, 0x70, 0xE9, 0x2F, 0xF9, 0xEA, 0x35, 0xF0, 0xFA, 0x90, 0x92,
+0x59, 0x12, 0x87, 0x79, 0x90, 0x92, 0x53, 0xE0, 0x71, 0x1A, 0xE0, 0xFF, 0xA3, 0xE0, 0x90, 0x92,
+0x56, 0xCF, 0xF0, 0xA3, 0xEF, 0xF0, 0xE4, 0xA3, 0xF0, 0x90, 0x92, 0x59, 0x12, 0x87, 0x70, 0x90,
+0x92, 0x58, 0xE0, 0xFF, 0xF5, 0x82, 0x75, 0x83, 0x00, 0x12, 0x03, 0x0F, 0xFD, 0x7C, 0x00, 0x90,
+0x92, 0x53, 0xE0, 0x75, 0xF0, 0x12, 0x90, 0x89, 0x44, 0x12, 0x05, 0x28, 0x75, 0xF0, 0x02, 0xEF,
+0x12, 0x05, 0x28, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x90, 0x92, 0x55, 0xE0, 0xFB, 0xEF, 0xA8, 0x03,
+0x08, 0x80, 0x05, 0xCE, 0xC3, 0x13, 0xCE, 0x13, 0xD8, 0xF9, 0x91, 0x05, 0xEE, 0x8F, 0xF0, 0x12,
+0x07, 0x0A, 0x90, 0x92, 0x58, 0xE0, 0x04, 0xF0, 0xE0, 0xB4, 0x05, 0xAD, 0x90, 0x92, 0x59, 0x12,
+0x87, 0x70, 0x12, 0x8F, 0xED, 0xFD, 0x7C, 0x00, 0x90, 0x92, 0x55, 0xE0, 0xFF, 0x90, 0x92, 0x51,
+0xE0, 0xFE, 0xA3, 0xE0, 0xA8, 0x07, 0x08, 0x80, 0x05, 0xCE, 0xC3, 0x13, 0xCE, 0x13, 0xD8, 0xF9,
+0x91, 0x05, 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0xD3, 0x9F, 0xEC, 0x9E, 0x40, 0x08, 0xED, 0x9F, 0xFF,
+0xEC, 0x9E, 0xFE, 0x80, 0x04, 0x7E, 0x00, 0x7F, 0x00, 0x90, 0x92, 0x56, 0xEE, 0xF0, 0xA3, 0xEF,
+0xF0, 0x90, 0x92, 0x56, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x90, 0x92, 0x53, 0xE0, 0x71, 0x1A, 0xEE,
+0xF0, 0xA3, 0xEF, 0xF0, 0x22, 0xFF, 0x12, 0x03, 0x70, 0x90, 0x92, 0x56, 0x22, 0x21, 0xA9, 0xF0,
+0xE4, 0xA3, 0xF0, 0xA3, 0xF0, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0xE4, 0x90, 0x93,
+0x3B, 0xF0, 0xA3, 0xF0, 0xA3, 0x74, 0x08, 0xF0, 0xA3, 0x91, 0x0F, 0x90, 0x93, 0x43, 0xF0, 0xA3,
+0xF0, 0xA3, 0xF0, 0x90, 0x01, 0xC4, 0x74, 0x16, 0xF0, 0x74, 0xB4, 0xA3, 0xF0, 0x90, 0x01, 0x1F,
+0xE0, 0xFE, 0x90, 0x01, 0x1E, 0x12, 0xAF, 0x63, 0xEC, 0x3E, 0x90, 0x93, 0x32, 0xF0, 0xA3, 0xEF,
+0xF0, 0x90, 0x02, 0x87, 0xE0, 0x90, 0x93, 0x3A, 0xF0, 0x90, 0x86, 0x72, 0xE0, 0x20, 0xE0, 0x02,
+0xC1, 0xFD, 0xE4, 0x90, 0x93, 0x39, 0xF0, 0x90, 0x93, 0x3A, 0xE0, 0xFF, 0x90, 0x93, 0x39, 0xE0,
+0xC3, 0x9F, 0x40, 0x02, 0xC1, 0xFD, 0x90, 0x93, 0x32, 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0xEC, 0xFF,
+0x90, 0xFD, 0x11, 0xF0, 0x90, 0x93, 0x43, 0xEF, 0xF0, 0xF1, 0x83, 0xF5, 0x83, 0xE0, 0xFE, 0xF1,
+0x44, 0xF1, 0xBD, 0x54, 0x3F, 0xFE, 0x90, 0x93, 0x34, 0xF0, 0xA3, 0xEF, 0xF0, 0x90, 0x93, 0x3F,
+0xEE, 0xF0, 0xA3, 0xF1, 0x98, 0x54, 0x0F, 0x33, 0x33, 0x33, 0x54, 0xF8, 0xFF, 0xF1, 0x8C, 0x54,
+0x03, 0xFE, 0xEF, 0x24, 0x18, 0x2E, 0xFF, 0x90, 0x93, 0x44, 0xF0, 0x90, 0x93, 0x33, 0xE0, 0x2F,
+0xFF, 0x90, 0x93, 0x32, 0xE0, 0x34, 0x00, 0xFE, 0x90, 0x93, 0x36, 0xF1, 0x29, 0xC0, 0x07, 0xF1,
+0x0E, 0x7D, 0x01, 0x12, 0x55, 0x36, 0xC0, 0x07, 0xF1, 0x0E, 0x7D, 0x04, 0x12, 0x55, 0x36, 0xAB,
+0x07, 0xD0, 0x05, 0xD0, 0x07, 0x12, 0x5D, 0x98, 0x90, 0x93, 0x3B, 0xEF, 0xF1, 0x0D, 0xE4, 0xFD,
+0x12, 0x55, 0x36, 0xEF, 0x54, 0xFC, 0x90, 0x93, 0x38, 0xF0, 0x90, 0x93, 0x44, 0xE0, 0xFF, 0x90,
+0x93, 0x34, 0xE4, 0x8F, 0xF0, 0x12, 0x07, 0x0A, 0x90, 0x93, 0x34, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF,
+0x12, 0x7A, 0xD0, 0x90, 0x93, 0x34, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0xF1, 0x3B, 0x7D, 0x0F, 0x12,
+0x55, 0x36, 0x90, 0x93, 0x34, 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0x90, 0x93, 0x32, 0xEC, 0x8D, 0xF0,
+0x12, 0x07, 0x0A, 0x90, 0x85, 0xB7, 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0xD3, 0x90, 0x93, 0x33, 0xE0,
+0x9D, 0x90, 0x93, 0x32, 0xE0, 0x9C, 0x40, 0x1B, 0x90, 0x85, 0xB8, 0xE0, 0x24, 0x01, 0xFD, 0x90,
+0x85, 0xB7, 0xE0, 0x34, 0x00, 0xFC, 0xC3, 0x90, 0x93, 0x33, 0xE0, 0x9D, 0xF0, 0x90, 0x93, 0x32,
+0xE0, 0x9C, 0xF0, 0xEF, 0x30, 0xE6, 0x06, 0x90, 0x01, 0xC7, 0x74, 0x22, 0xF0, 0xEF, 0x30, 0xE7,
+0x06, 0x90, 0x01, 0xC7, 0x74, 0x21, 0xF0, 0xEF, 0x30, 0xE5, 0x06, 0x90, 0x01, 0xC7, 0x74, 0x23,
+0xF0, 0x90, 0x93, 0x38, 0xE0, 0x24, 0x40, 0x60, 0x04, 0x24, 0x20, 0x70, 0x2C, 0x90, 0x86, 0x75,
+0xE0, 0xFF, 0x12, 0x8E, 0x8B, 0x20, 0xE0, 0x02, 0xC1, 0x81, 0x90, 0x86, 0x87, 0xE0, 0x04, 0xF1,
+0x0D, 0x12, 0x59, 0x20, 0xEF, 0x70, 0x02, 0xC1, 0x81, 0x90, 0x93, 0x38, 0xE0, 0xFF, 0x12, 0x7B,
+0x77, 0x90, 0x86, 0x88, 0xE0, 0x04, 0xF0, 0xC1, 0x81, 0xF1, 0xC6, 0x30, 0xE0, 0x5A, 0x90, 0x93,
+0x3B, 0xE0, 0xFF, 0x90, 0x93, 0x37, 0xE0, 0x2F, 0xFF, 0x90, 0x93, 0x36, 0xE0, 0x34, 0x00, 0xCF,
+0x24, 0x08, 0xCF, 0x34, 0x00, 0xFE, 0x90, 0x93, 0x41, 0xF1, 0x29, 0xEF, 0x64, 0x45, 0x70, 0x38,
+0xF1, 0x18, 0x12, 0xCA, 0xA1, 0xEF, 0x64, 0x01, 0x70, 0x2E, 0xF1, 0x18, 0x12, 0xCB, 0x28, 0xEF,
+0x64, 0x01, 0x70, 0x24, 0x90, 0x93, 0x45, 0x04, 0xF1, 0x17, 0xA3, 0xE0, 0xFD, 0x12, 0xCF, 0xE7,
+0xEF, 0x70, 0x0D, 0x90, 0x93, 0x43, 0xE0, 0xFD, 0x90, 0xFD, 0x11, 0xF1, 0x17, 0x12, 0xD0, 0x35,
+0x90, 0x93, 0x43, 0xE0, 0x90, 0xFD, 0x11, 0xF0, 0xF1, 0x0E, 0x12, 0x59, 0x20, 0xEF, 0x60, 0x18,
+0xF1, 0x0E, 0x90, 0x93, 0x3B, 0xE0, 0xFD, 0x90, 0x93, 0x3E, 0xE0, 0xFB, 0x12, 0x54, 0x02, 0xEF,
+0x60, 0x06, 0x90, 0x93, 0x45, 0x74, 0x01, 0xF0, 0x90, 0x86, 0x72, 0xE0, 0xC3, 0x13, 0x30, 0xE0,
+0x13, 0xF1, 0x0E, 0x90, 0x93, 0x3B, 0xE0, 0xFD, 0x12, 0x38, 0x10, 0xEF, 0x60, 0x06, 0x90, 0x93,
+0x45, 0x74, 0x01, 0xF0, 0x12, 0xAD, 0xEB, 0x54, 0x3F, 0x30, 0xE0, 0x0A, 0xF1, 0x0E, 0x90, 0x93,
+0x3B, 0xE0, 0xFD, 0x12, 0x21, 0xB6, 0x90, 0x86, 0x72, 0xE0, 0xFF, 0x12, 0x8E, 0x8B, 0x30, 0xE0,
+0x10, 0x90, 0x93, 0x45, 0xE0, 0x70, 0x0A, 0xF1, 0x0E, 0x90, 0x93, 0x3B, 0xE0, 0xFD, 0x12, 0x4A,
0x3F, 0x12, 0x79, 0x00, 0xEF, 0x64, 0x01, 0x60, 0x07, 0x90, 0x01, 0x3F, 0xE0, 0x30, 0xE2, 0x10,
0xF1, 0x32, 0x30, 0xE0, 0x06, 0x90, 0x01, 0x3F, 0x74, 0x04, 0xF0, 0x7F, 0x01, 0x12, 0x5F, 0xE9,
0x90, 0x01, 0x3F, 0xE0, 0x30, 0xE2, 0x02, 0xF1, 0x21, 0x12, 0x7A, 0xE7, 0xEF, 0x64, 0x01, 0x70,
@@ -3082,423 +3509,449 @@ u1Byte Array_MP_8188F_FW_WoWLAN[] = {
0x1F, 0xF1, 0x21, 0xED, 0xB4, 0x02, 0x08, 0x90, 0x01, 0xC7, 0x74, 0x42, 0xF0, 0x80, 0x0A, 0xED,
0xB4, 0x04, 0x06, 0x90, 0x01, 0xC7, 0x74, 0x43, 0xF0, 0x7F, 0x01, 0x12, 0x5F, 0xE9, 0x80, 0x1D,
0xF1, 0x3B, 0x12, 0x7C, 0x0B, 0x80, 0x0E, 0xF1, 0x32, 0x20, 0xE0, 0x11, 0x90, 0x86, 0x72, 0xE0,
-0x54, 0xFE, 0xF0, 0x80, 0x08, 0x90, 0x92, 0xE8, 0xE0, 0x04, 0xF0, 0x81, 0x66, 0x74, 0x16, 0x04,
-0x90, 0x01, 0xC4, 0xF0, 0x74, 0xAC, 0xA3, 0xF0, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xF0, 0x90, 0x92,
-0xE5, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x22, 0xF0, 0x90, 0x92, 0xF0, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF,
+0x54, 0xFE, 0xF0, 0x80, 0x08, 0x90, 0x93, 0x39, 0xE0, 0x04, 0xF0, 0x81, 0x67, 0x74, 0x16, 0x04,
+0x90, 0x01, 0xC4, 0xF0, 0x74, 0xB4, 0xA3, 0xF0, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xF0, 0x90, 0x93,
+0x36, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x22, 0xF0, 0x90, 0x93, 0x41, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF,
0x22, 0x90, 0x86, 0x7A, 0xE0, 0x44, 0x01, 0xF0, 0x22, 0xF0, 0xA3, 0xEF, 0xF0, 0xE4, 0xFD, 0x02,
-0x55, 0x36, 0x90, 0x86, 0x74, 0xE0, 0xC4, 0x13, 0x54, 0x07, 0x22, 0x90, 0x92, 0xE1, 0xE0, 0xFE,
-0xA3, 0xE0, 0xFF, 0x22, 0x74, 0x00, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0xFB, 0xF5, 0x83, 0x22, 0x90,
-0x01, 0x17, 0xE0, 0xFE, 0x90, 0x01, 0x16, 0xE0, 0x7C, 0x00, 0x24, 0x00, 0xFF, 0x22, 0xE4, 0xFC,
-0xED, 0x2C, 0x24, 0x00, 0xF1, 0x47, 0xE4, 0xF0, 0x0C, 0xEC, 0xB4, 0x18, 0xF3, 0xF1, 0x44, 0xEF,
-0xF0, 0xEE, 0x54, 0x3F, 0xFF, 0xF1, 0x92, 0xF5, 0x83, 0xF1, 0xA7, 0x54, 0xF0, 0xF0, 0xF1, 0x9B,
-0x44, 0x80, 0xF0, 0x74, 0x0B, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0xFB, 0xF5, 0x83, 0xE0, 0x44, 0x10,
-0xF0, 0x22, 0x74, 0x01, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0xFB, 0x22, 0x74, 0x03, 0x2D, 0xF5, 0x82,
-0xE4, 0x34, 0xFB, 0xF5, 0x83, 0xE0, 0x22, 0xEF, 0xF0, 0x74, 0x02, 0x2D, 0xF5, 0x82, 0xE4, 0x34,
-0xFB, 0xF5, 0x83, 0xE0, 0x22, 0xE0, 0x04, 0xF0, 0xE0, 0x7F, 0x00, 0x22, 0xF0, 0xA3, 0xE4, 0xF0,
-0xA3, 0xE5, 0x6F, 0x22, 0xF5, 0x82, 0xE4, 0x34, 0x90, 0xF5, 0x83, 0x22, 0xE0, 0x7A, 0x00, 0x24,
-0x00, 0xFF, 0xEA, 0x3E, 0x22, 0x75, 0xF0, 0x12, 0x90, 0x89, 0x3C, 0x12, 0x05, 0x28, 0xE0, 0x22,
-0x75, 0xF0, 0x08, 0xA4, 0x24, 0x00, 0xF5, 0x82, 0xE4, 0x34, 0x82, 0xF5, 0x83, 0x22, 0xD3, 0x10,
-0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x85, 0x1E, 0xE0, 0xFF, 0x90, 0x85, 0x1D, 0xE0, 0xB5, 0x07,
-0x04, 0x7F, 0x01, 0x80, 0x02, 0x7F, 0x00, 0xEF, 0x70, 0x48, 0x90, 0x85, 0x1D, 0xE0, 0xFE, 0x75,
-0xF0, 0x08, 0x90, 0x84, 0xCD, 0x12, 0x05, 0x28, 0xE0, 0xFD, 0xEE, 0x75, 0xF0, 0x08, 0xA4, 0x24,
-0xCE, 0xF9, 0x74, 0x84, 0x35, 0xF0, 0xFA, 0x7B, 0x01, 0xAF, 0x05, 0x12, 0x88, 0xD7, 0x90, 0x85,
-0x1D, 0x12, 0xAF, 0xB5, 0xB4, 0x0A, 0x02, 0x7F, 0x01, 0xEF, 0x60, 0x05, 0xE4, 0x90, 0x85, 0x1D,
-0xF0, 0x7D, 0x68, 0x7F, 0xFE, 0x12, 0x7B, 0x3E, 0x12, 0x40, 0xB9, 0x90, 0x84, 0xC1, 0xE0, 0x44,
-0x02, 0xF0, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90, 0x85, 0xB5, 0xE0, 0xFF, 0x70, 0x06, 0xA3, 0xE0,
-0x64, 0x09, 0x60, 0x0A, 0xEF, 0x14, 0xFF, 0x90, 0x85, 0xB6, 0xE0, 0xB5, 0x07, 0x04, 0x7F, 0x01,
-0x80, 0x02, 0x7F, 0x00, 0xEF, 0x60, 0x08, 0x90, 0x01, 0xC1, 0xE0, 0x44, 0x02, 0xF0, 0x22, 0xC0,
-0x01, 0x90, 0x85, 0xB6, 0xE0, 0x75, 0xF0, 0x0F, 0xA4, 0x24, 0x1F, 0xF9, 0x74, 0x85, 0x35, 0xF0,
-0xA8, 0x01, 0xFC, 0x7D, 0x01, 0xD0, 0x01, 0x7E, 0x00, 0x7F, 0x0F, 0x12, 0x02, 0xD0, 0x7D, 0xCC,
-0x7F, 0xFE, 0x12, 0x7B, 0x3E, 0x90, 0x85, 0xB6, 0x12, 0xAF, 0xB5, 0xB4, 0x0A, 0x02, 0x7F, 0x01,
-0xEF, 0x60, 0x05, 0xE4, 0x90, 0x85, 0xB6, 0xF0, 0x22, 0x90, 0x92, 0x21, 0xEF, 0xF0, 0xA3, 0x12,
-0x87, 0x79, 0x90, 0x93, 0x18, 0xE0, 0xFE, 0x04, 0xF0, 0x90, 0x00, 0x01, 0xEE, 0x12, 0x03, 0x4E,
-0x74, 0x00, 0x2F, 0xF9, 0xE4, 0x34, 0xFB, 0xFA, 0x7B, 0x01, 0xC0, 0x03, 0xC0, 0x02, 0xC0, 0x01,
-0x90, 0x92, 0x22, 0x12, 0x87, 0x70, 0x8B, 0x1B, 0x8A, 0x1C, 0x89, 0x1D, 0x75, 0x1E, 0x02, 0xD0,
-0x01, 0xD0, 0x02, 0xD0, 0x03, 0x12, 0x6A, 0x21, 0x90, 0x92, 0x21, 0xE0, 0x24, 0x02, 0xF9, 0xE4,
-0x34, 0xFB, 0xFA, 0x7B, 0x01, 0xC0, 0x03, 0xC0, 0x02, 0xC0, 0x01, 0xA3, 0x12, 0x87, 0x70, 0xE9,
-0x24, 0x02, 0xF9, 0xE4, 0x3A, 0x8B, 0x1B, 0xF5, 0x1C, 0x89, 0x1D, 0x90, 0x92, 0x22, 0x31, 0x2B,
-0xF5, 0x1E, 0xD0, 0x01, 0xD0, 0x02, 0xD0, 0x03, 0x02, 0x6A, 0x21, 0x12, 0x87, 0x70, 0x90, 0x00,
-0x0E, 0x02, 0x03, 0x0F, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x92, 0x25, 0x12, 0x87,
-0x79, 0x7F, 0x96, 0x7E, 0x02, 0x12, 0x66, 0x80, 0xEF, 0x60, 0x48, 0x12, 0xAF, 0x4F, 0xEC, 0x3E,
-0xFE, 0xEF, 0x24, 0x01, 0xFF, 0xE4, 0x3E, 0xFE, 0x90, 0x92, 0x28, 0xEF, 0xF0, 0xEE, 0xFF, 0x90,
-0xFD, 0x11, 0xF0, 0x90, 0x92, 0x28, 0xE0, 0xFD, 0x90, 0x02, 0x94, 0xF0, 0xA3, 0xEF, 0xF0, 0x90,
-0x92, 0x25, 0x31, 0x2B, 0x24, 0x02, 0xFF, 0xE4, 0x33, 0xFE, 0x12, 0x5A, 0xA5, 0x90, 0x92, 0x28,
-0xE0, 0x24, 0x18, 0xFF, 0x90, 0x92, 0x25, 0x12, 0x87, 0x70, 0x12, 0x56, 0xF4, 0x90, 0x02, 0x96,
-0x74, 0x01, 0xF0, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x02, 0x8B, 0x13, 0xE4, 0x90, 0x92, 0x2B, 0xF0,
-0xA3, 0xF0, 0xA3, 0xF0, 0x90, 0x92, 0x2B, 0xE0, 0x64, 0x01, 0xF0, 0x24, 0x9B, 0x90, 0x01, 0xC4,
-0xF0, 0x74, 0xB1, 0xA3, 0xF0, 0x12, 0x7C, 0x66, 0xBF, 0x01, 0x03, 0x12, 0x5B, 0x25, 0x90, 0x85,
-0xC5, 0xE0, 0x60, 0x0F, 0x90, 0x85, 0xC8, 0xE0, 0xFF, 0x90, 0x85, 0xC7, 0xE0, 0x6F, 0x60, 0x03,
-0x12, 0xA5, 0x90, 0xC2, 0xAF, 0xF1, 0x4D, 0xBF, 0x01, 0x02, 0x51, 0x04, 0xD2, 0xAF, 0x71, 0x0D,
-0x90, 0x92, 0x2C, 0xE4, 0x75, 0xF0, 0x01, 0x12, 0x07, 0x0A, 0x54, 0x7F, 0x45, 0xF0, 0x70, 0x0D,
-0x7F, 0xFF, 0x12, 0x7B, 0x51, 0xEF, 0x04, 0xFD, 0x7F, 0xFF, 0x12, 0x7B, 0x3E, 0x31, 0x98, 0x12,
-0x84, 0x4D, 0x80, 0xA0, 0x90, 0x85, 0xC1, 0xE0, 0x30, 0xE0, 0x18, 0x90, 0x85, 0xBC, 0xE0, 0xFF,
-0x30, 0xE0, 0x0E, 0xC3, 0x13, 0x30, 0xE0, 0x07, 0xD1, 0x92, 0xBF, 0x01, 0x06, 0x80, 0x02, 0x80,
-0x00, 0x51, 0x24, 0x22, 0x90, 0x85, 0xC8, 0xE0, 0xFF, 0x60, 0x03, 0xB4, 0x08, 0x0D, 0x71, 0x71,
-0xBF, 0x01, 0x08, 0x51, 0x3C, 0x90, 0x01, 0xE5, 0xE0, 0x04, 0xF0, 0x22, 0xD3, 0x10, 0xAF, 0x01,
-0xC3, 0xC0, 0xD0, 0x51, 0xBB, 0x51, 0x4C, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xF1, 0x2E, 0x7F, 0x08,
-0x12, 0x7B, 0x51, 0xEF, 0x54, 0xEF, 0xFD, 0x7F, 0x08, 0x12, 0x7B, 0x3E, 0xE4, 0xFF, 0x51, 0x6F,
-0x7D, 0x35, 0x7F, 0x27, 0x12, 0x7B, 0x3E, 0x90, 0x85, 0xC2, 0xE0, 0x54, 0xEF, 0xF0, 0x22, 0x90,
-0x93, 0x11, 0xEF, 0x12, 0xAC, 0x0F, 0x90, 0x01, 0x09, 0xE0, 0x7F, 0x00, 0x30, 0xE7, 0x02, 0x7F,
-0x01, 0x90, 0x93, 0x11, 0xE0, 0x6F, 0x60, 0x32, 0xC3, 0x90, 0x93, 0x13, 0xE0, 0x94, 0x88, 0x90,
-0x93, 0x12, 0xE0, 0x94, 0x13, 0x40, 0x08, 0x90, 0x01, 0xC0, 0xE0, 0x44, 0x10, 0xF0, 0x22, 0x90,
-0x93, 0x12, 0xD1, 0x9F, 0xD3, 0x90, 0x93, 0x13, 0xE0, 0x94, 0x32, 0x90, 0x93, 0x12, 0xE0, 0x94,
-0x00, 0x40, 0xC3, 0x90, 0x01, 0xC6, 0xE0, 0x30, 0xE0, 0xBC, 0x22, 0x90, 0x85, 0xC2, 0xE0, 0x44,
-0x10, 0xF0, 0x90, 0x85, 0xD0, 0xE0, 0xFD, 0x7F, 0x93, 0x12, 0x7B, 0x3E, 0x90, 0x85, 0xC6, 0xE0,
-0x60, 0x12, 0x90, 0x01, 0x2F, 0xE0, 0x30, 0xE7, 0x05, 0x74, 0x10, 0xF0, 0x80, 0x06, 0x90, 0x01,
-0x2F, 0x74, 0x90, 0xF0, 0x7F, 0x08, 0x12, 0x7B, 0x51, 0xEF, 0x44, 0x10, 0xFD, 0x7F, 0x08, 0x12,
-0x7B, 0x3E, 0x7F, 0x01, 0x51, 0x6F, 0x7D, 0x34, 0x7F, 0x27, 0x12, 0x7B, 0x3E, 0x7F, 0x90, 0x71,
-0xE6, 0x7F, 0x90, 0x12, 0x7B, 0x3E, 0x7F, 0x14, 0x7E, 0x00, 0x02, 0x7C, 0x9F, 0xD3, 0x10, 0xAF,
-0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x92, 0x85, 0xE0, 0x60, 0x25, 0x7F, 0x54, 0x7E, 0x09, 0x12, 0x70,
-0x61, 0x71, 0x65, 0xEF, 0x44, 0xFE, 0xFF, 0xEE, 0x44, 0x03, 0xFE, 0xED, 0x44, 0x04, 0xFD, 0xEC,
-0x71, 0x65, 0x90, 0x91, 0x66, 0x12, 0x04, 0xEB, 0x7F, 0x54, 0x7E, 0x09, 0x12, 0x71, 0x18, 0x90,
-0x92, 0x80, 0xE0, 0x70, 0x04, 0x90, 0x07, 0xCC, 0xF0, 0x90, 0x92, 0x88, 0xE0, 0x70, 0x0A, 0x90,
-0x92, 0x85, 0xE0, 0x70, 0x04, 0xA3, 0xE0, 0x60, 0x07, 0x90, 0x00, 0x1F, 0xE0, 0x54, 0xF0, 0xF0,
-0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90, 0x92, 0x2E, 0x12, 0x04, 0xEB, 0x90, 0x92, 0x2E, 0x02, 0x87,
-0x58, 0x90, 0x92, 0x79, 0xE0, 0xC3, 0x13, 0x20, 0xE0, 0x48, 0x90, 0x02, 0x87, 0xE0, 0x60, 0x02,
-0x80, 0x08, 0x90, 0x01, 0x00, 0xE0, 0x64, 0x3F, 0x60, 0x05, 0x75, 0x61, 0x01, 0x80, 0x40, 0x90,
-0x86, 0x72, 0xE0, 0x30, 0xE0, 0x0B, 0x90, 0x02, 0x82, 0xE0, 0x60, 0x05, 0x75, 0x61, 0x02, 0x80,
-0x2E, 0x90, 0x86, 0x7A, 0xE0, 0x30, 0xE0, 0x05, 0x75, 0x61, 0x08, 0x80, 0x22, 0x90, 0x02, 0x86,
-0xE0, 0x20, 0xE1, 0x02, 0x80, 0x07, 0x90, 0x02, 0x86, 0xE0, 0x30, 0xE3, 0x05, 0x75, 0x61, 0x04,
-0x80, 0x0D, 0x90, 0x04, 0x1D, 0xE0, 0x60, 0x05, 0x75, 0x61, 0x40, 0x80, 0x02, 0x80, 0x0F, 0x90,
-0x01, 0xB9, 0x74, 0x08, 0xF0, 0x90, 0x01, 0xB8, 0xE5, 0x61, 0xF0, 0x7F, 0x00, 0x22, 0x90, 0x01,
-0xB8, 0xE4, 0xF0, 0x7F, 0x01, 0x22, 0x12, 0x7B, 0x51, 0xEF, 0x44, 0x01, 0xFD, 0x22, 0xD3, 0x10,
-0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x7F, 0x02, 0x71, 0xE6, 0x7F, 0x02, 0xD1, 0x8A, 0x44, 0x02, 0xF0,
-0x90, 0x01, 0x00, 0x74, 0xFF, 0xF0, 0x90, 0x06, 0xB7, 0x74, 0x09, 0xF0, 0x90, 0x06, 0xB4, 0x74,
-0x86, 0xF0, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x12, 0x90, 0xD8, 0x90, 0x85, 0xBF, 0x74, 0x01, 0xF0,
-0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x85, 0xBF, 0xE0, 0x90, 0x93, 0x1E, 0xF0,
-0x6F, 0x70, 0x02, 0xA1, 0x28, 0xEF, 0x14, 0x60, 0x42, 0x14, 0x60, 0x6C, 0x14, 0x70, 0x02, 0x81,
-0xD4, 0x14, 0x70, 0x02, 0x81, 0xFF, 0x24, 0x04, 0x60, 0x02, 0xA1, 0x28, 0x90, 0x93, 0x1E, 0xE0,
-0xB4, 0x04, 0x04, 0xB1, 0x3C, 0xA1, 0x28, 0x90, 0x93, 0x1E, 0xE0, 0xB4, 0x02, 0x04, 0xB1, 0x2D,
-0xA1, 0x28, 0x90, 0x93, 0x1E, 0xE0, 0xB4, 0x03, 0x04, 0xB1, 0x53, 0xA1, 0x28, 0x90, 0x93, 0x1E,
-0xE0, 0x64, 0x01, 0x60, 0x02, 0xA1, 0x28, 0xB1, 0x2F, 0xA1, 0x28, 0x90, 0x93, 0x1E, 0xE0, 0xB4,
-0x04, 0x04, 0xB1, 0x40, 0xA1, 0x28, 0x90, 0x93, 0x1E, 0xE0, 0xB4, 0x02, 0x04, 0x91, 0x17, 0xA1,
-0x28, 0x90, 0x93, 0x1E, 0xE0, 0xB4, 0x03, 0x04, 0xB1, 0x57, 0xA1, 0x28, 0x90, 0x93, 0x1E, 0xE0,
-0x60, 0x02, 0xA1, 0x28, 0xB1, 0x84, 0xA1, 0x28, 0x90, 0x93, 0x1E, 0xE0, 0xB4, 0x04, 0x04, 0xB1,
-0xA9, 0x80, 0x75, 0x90, 0x93, 0x1E, 0xE0, 0xB4, 0x01, 0x05, 0x12, 0x97, 0xED, 0x80, 0x69, 0x90,
-0x93, 0x1E, 0xE0, 0xB4, 0x03, 0x04, 0xB1, 0xA1, 0x80, 0x5E, 0x90, 0x93, 0x1E, 0xE0, 0x70, 0x58,
-0xB1, 0xA4, 0x80, 0x54, 0x90, 0x93, 0x1E, 0xE0, 0xB4, 0x04, 0x04, 0xB1, 0x5F, 0x80, 0x49, 0x90,
-0x93, 0x1E, 0xE0, 0xB4, 0x01, 0x04, 0xB1, 0x98, 0x80, 0x3E, 0x90, 0x93, 0x1E, 0xE0, 0xB4, 0x02,
-0x04, 0xB1, 0x4A, 0x80, 0x33, 0x90, 0x93, 0x1E, 0xE0, 0x70, 0x2D, 0xB1, 0x96, 0x80, 0x29, 0x90,
-0x93, 0x1E, 0xE0, 0xB4, 0x03, 0x04, 0xB1, 0xB0, 0x80, 0x1E, 0x90, 0x93, 0x1E, 0xE0, 0xB4, 0x01,
-0x04, 0xB1, 0x88, 0x80, 0x13, 0x90, 0x93, 0x1E, 0xE0, 0xB4, 0x02, 0x04, 0xB1, 0x6A, 0x80, 0x08,
-0x90, 0x93, 0x1E, 0xE0, 0x70, 0x02, 0xB1, 0x86, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x91, 0x17, 0x90,
-0x05, 0x27, 0xE0, 0x54, 0xBF, 0xF0, 0xE4, 0x90, 0x85, 0xBF, 0xF0, 0x22, 0xB1, 0x40, 0x80, 0xEF,
-0xE4, 0xFD, 0xFF, 0xB1, 0x7C, 0x44, 0x40, 0xF0, 0x81, 0x1A, 0x71, 0xEE, 0x90, 0x85, 0xBF, 0x74,
-0x03, 0xF0, 0x22, 0xB1, 0x57, 0x80, 0xD8, 0xE4, 0xFD, 0xFF, 0x12, 0x90, 0xDE, 0x81, 0x1A, 0x7D,
-0x22, 0x7F, 0xFF, 0xB1, 0x7C, 0x44, 0x40, 0xF0, 0x80, 0xE2, 0x71, 0xEE, 0x7D, 0x24, 0xB1, 0x7A,
-0x54, 0xBF, 0xF0, 0x90, 0x85, 0xBF, 0x74, 0x04, 0xF0, 0x22, 0x7F, 0x6F, 0x12, 0x90, 0xDE, 0x90,
-0x05, 0x27, 0xE0, 0x22, 0x81, 0x1A, 0xB1, 0x84, 0x7D, 0x1F, 0xB1, 0x7A, 0x54, 0xBF, 0xF0, 0x90,
-0x85, 0xBF, 0x74, 0x04, 0xF0, 0x22, 0xB1, 0x84, 0x7D, 0x21, 0x7F, 0xFF, 0x12, 0x90, 0xDE, 0x80,
-0xAB, 0x02, 0x97, 0xF3, 0xB1, 0x84, 0x02, 0x97, 0xED, 0xD1, 0x82, 0x7D, 0x23, 0x02, 0x97, 0xEF,
-0x7D, 0x25, 0xB1, 0x7A, 0x54, 0xBF, 0xF0, 0x90, 0x85, 0xBF, 0x74, 0x04, 0xF0, 0x22, 0xD3, 0x10,
-0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x7F, 0x02, 0x12, 0x7B, 0x51, 0xEF, 0x54, 0xFE, 0xFD, 0x7F, 0x02,
-0x12, 0x7B, 0x3E, 0x90, 0x01, 0x00, 0x74, 0x3F, 0xF0, 0x90, 0x01, 0x34, 0x74, 0x08, 0xF0, 0x90,
-0x01, 0x01, 0xE0, 0x54, 0xFD, 0xF0, 0x90, 0x05, 0x53, 0xE0, 0x44, 0x20, 0xF0, 0xD0, 0xD0, 0x92,
-0xAF, 0x22, 0xEF, 0x60, 0x49, 0x90, 0x88, 0xCE, 0xE0, 0xFF, 0x60, 0x03, 0x12, 0x7B, 0x8A, 0x90,
-0x01, 0xC7, 0xE4, 0xF0, 0x12, 0xAF, 0x4F, 0xEC, 0x3E, 0x90, 0x85, 0xB7, 0xF0, 0xA3, 0xEF, 0xF0,
-0x90, 0x06, 0x09, 0xE0, 0x54, 0xFE, 0xF0, 0x7D, 0x35, 0x7F, 0xFF, 0x12, 0x90, 0xDE, 0xB1, 0xBE,
-0x90, 0x02, 0x86, 0xE0, 0x44, 0x04, 0xF0, 0x12, 0x72, 0x79, 0xD1, 0x5B, 0x12, 0x90, 0xD8, 0x12,
-0x76, 0xE6, 0x90, 0x01, 0x34, 0x74, 0x08, 0xF0, 0xFD, 0xE4, 0xFF, 0x02, 0x7C, 0xA9, 0x7D, 0x08,
-0xE4, 0xFF, 0x12, 0x7C, 0x41, 0x90, 0x06, 0x90, 0xE0, 0x54, 0xF0, 0xF0, 0x90, 0x02, 0x86, 0xE0,
-0x54, 0xFB, 0xF0, 0xD1, 0x5C, 0x12, 0x9F, 0xEB, 0x02, 0x9B, 0x26, 0x22, 0xF1, 0x1B, 0x12, 0x77,
-0x89, 0x90, 0x01, 0x3F, 0x74, 0x04, 0xF0, 0x90, 0x84, 0xC5, 0xE0, 0xFF, 0xB4, 0x01, 0x07, 0x90,
-0xFD, 0x00, 0xE0, 0x54, 0xEF, 0xF0, 0xEF, 0xB4, 0x01, 0x07, 0x90, 0xFE, 0x10, 0xE0, 0x54, 0xFB,
-0xF0, 0x22, 0x90, 0x05, 0x27, 0xE0, 0x44, 0x40, 0xF0, 0x22, 0x12, 0x7B, 0x3E, 0x90, 0x01, 0x01,
-0xE0, 0x22, 0x90, 0x85, 0xBF, 0xE0, 0x64, 0x02, 0x7F, 0x01, 0x60, 0x02, 0x7F, 0x00, 0x22, 0xE4,
-0x75, 0xF0, 0x01, 0x12, 0x07, 0x0A, 0x7F, 0x14, 0x7E, 0x00, 0x02, 0x7C, 0x9F, 0xE4, 0x90, 0x92,
-0x29, 0xF0, 0xA3, 0xF0, 0xD1, 0xFB, 0xEF, 0x64, 0x01, 0x60, 0x39, 0xC3, 0x90, 0x92, 0x2A, 0xE0,
-0x94, 0x88, 0x90, 0x92, 0x29, 0xE0, 0x94, 0x13, 0x40, 0x0F, 0x90, 0x01, 0xC1, 0xE0, 0x44, 0x10,
-0xF0, 0x90, 0x01, 0xC7, 0x74, 0xFD, 0xF0, 0x80, 0x1B, 0x90, 0x92, 0x29, 0xD1, 0x9F, 0xD3, 0x90,
-0x92, 0x2A, 0xE0, 0x94, 0x32, 0x90, 0x92, 0x29, 0xE0, 0x94, 0x00, 0x40, 0xC7, 0x90, 0x01, 0xC6,
-0xE0, 0x30, 0xE3, 0xC0, 0x90, 0x01, 0xC7, 0x74, 0xFE, 0xF0, 0x22, 0x90, 0x01, 0x9A, 0xE0, 0x54,
-0xC0, 0x44, 0x0B, 0xF1, 0x13, 0x90, 0x01, 0x98, 0xE0, 0x54, 0xC0, 0x7F, 0x00, 0xB4, 0x40, 0x02,
-0x7F, 0x01, 0x22, 0xF0, 0x7F, 0x0A, 0x7E, 0x00, 0x02, 0x7C, 0x9F, 0xD3, 0x10, 0xAF, 0x01, 0xC3,
-0xC0, 0xD0, 0xE4, 0xFD, 0x7F, 0x8F, 0x12, 0x7B, 0x3E, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90, 0x01,
-0xC4, 0x74, 0x2E, 0xF0, 0x74, 0xB7, 0xA3, 0xF0, 0x7F, 0x90, 0x12, 0x7B, 0x51, 0xEF, 0x20, 0xE0,
-0xF7, 0x74, 0x2E, 0x04, 0x90, 0x01, 0xC4, 0xF0, 0x74, 0xB7, 0xA3, 0xF0, 0x22, 0x7D, 0x02, 0x90,
-0x01, 0xC4, 0x74, 0x4D, 0xF0, 0x74, 0xB7, 0xA3, 0xF0, 0x90, 0x92, 0x7D, 0xE0, 0xFF, 0xED, 0xC3,
-0x9F, 0x50, 0x18, 0xED, 0x25, 0xE0, 0x24, 0x81, 0xF8, 0xE6, 0x30, 0xE4, 0x0B, 0x90, 0x01, 0xB8,
-0x74, 0x08, 0xF0, 0xA3, 0xF0, 0x7F, 0x00, 0x22, 0x0D, 0x80, 0xDE, 0x7F, 0x01, 0x22, 0xE4, 0x90,
-0x84, 0xC1, 0x12, 0x96, 0x40, 0x90, 0x92, 0x76, 0xF0, 0x22, 0xE4, 0xF5, 0x40, 0xF5, 0x41, 0xF5,
-0x42, 0x75, 0x43, 0x80, 0xAD, 0x40, 0x7F, 0x50, 0x12, 0x7B, 0x3E, 0xAD, 0x41, 0x7F, 0x51, 0x12,
-0x7B, 0x3E, 0xAD, 0x42, 0x7F, 0x52, 0x12, 0x7B, 0x3E, 0xAD, 0x43, 0x7F, 0x53, 0x02, 0x7B, 0x3E,
-0x12, 0x75, 0xB6, 0x12, 0x75, 0x58, 0xF1, 0xDB, 0xF1, 0xBC, 0x80, 0xCE, 0x75, 0x52, 0x06, 0x75,
-0x53, 0x01, 0x75, 0x54, 0x03, 0x75, 0x55, 0x62, 0x90, 0x01, 0x38, 0xE5, 0x52, 0xF0, 0xA3, 0xE5,
-0x53, 0xF0, 0xA3, 0xE5, 0x54, 0xF0, 0xA3, 0xE5, 0x55, 0xF0, 0x22, 0x75, 0x48, 0x12, 0xE4, 0xF5,
-0x49, 0x75, 0x4A, 0x07, 0x75, 0x4B, 0x32, 0xF5, 0x50, 0x90, 0x01, 0x30, 0xE5, 0x48, 0xF0, 0xA3,
-0xE5, 0x49, 0xF0, 0xA3, 0xE5, 0x4A, 0xF0, 0xA3, 0xE5, 0x4B, 0xF0, 0x90, 0x01, 0x20, 0xE5, 0x50,
-0xF0, 0x22, 0x12, 0x7C, 0x4E, 0x90, 0x84, 0xC5, 0xEF, 0xF0, 0x12, 0xB7, 0xB0, 0x90, 0x01, 0x64,
-0x74, 0x01, 0xF0, 0x90, 0x04, 0x23, 0xE0, 0x44, 0x80, 0xF0, 0x90, 0x00, 0x17, 0xE0, 0x54, 0xFC,
-0x44, 0x04, 0xFD, 0x7F, 0x17, 0x12, 0x7B, 0x3E, 0x90, 0x00, 0x38, 0xE0, 0x44, 0x40, 0xFD, 0x7F,
-0x38, 0x12, 0x7B, 0x3E, 0x02, 0x68, 0xE2, 0x90, 0x01, 0xE4, 0x74, 0x01, 0xF0, 0xA3, 0xF0, 0x22,
-0x90, 0x84, 0xA1, 0x74, 0x02, 0xF0, 0xA3, 0x74, 0x10, 0xF0, 0x90, 0x84, 0xA7, 0x74, 0x80, 0xF0,
-0xA3, 0x74, 0x03, 0xF0, 0x22, 0xE4, 0xFB, 0xFA, 0xFD, 0x7F, 0x01, 0x12, 0x86, 0x4E, 0x90, 0x92,
-0x32, 0xEF, 0xF0, 0x60, 0xF0, 0x90, 0x84, 0xC1, 0xE0, 0xFF, 0x70, 0x04, 0xA3, 0xE0, 0x60, 0xE5,
-0xC2, 0xAF, 0xEF, 0x30, 0xE0, 0x0F, 0x90, 0x84, 0xC1, 0xE0, 0x54, 0xFE, 0xF0, 0xE4, 0xFF, 0x12,
-0x2D, 0xBD, 0x12, 0x91, 0xE8, 0x11, 0xB0, 0x30, 0xE1, 0x06, 0x54, 0xFD, 0xF0, 0x12, 0x60, 0x5D,
-0x11, 0xB0, 0x30, 0xE2, 0x06, 0x54, 0xFB, 0xF0, 0x12, 0x6A, 0x6D, 0x11, 0xB0, 0x30, 0xE4, 0x0C,
-0x54, 0xEF, 0xF0, 0x12, 0x6F, 0x22, 0xBF, 0x01, 0x03, 0x12, 0xAC, 0x16, 0xD2, 0xAF, 0x80, 0xB5,
-0xD2, 0xAF, 0xC2, 0xAF, 0x90, 0x84, 0xC1, 0xE0, 0xFF, 0x22, 0x8F, 0x0D, 0x7F, 0x02, 0x12, 0x86,
-0x27, 0x90, 0x84, 0xC1, 0xE0, 0x45, 0x0D, 0xF0, 0x22, 0x12, 0x40, 0xB9, 0x7F, 0x02, 0x80, 0xEA,
-0x90, 0x86, 0x72, 0xE0, 0x30, 0xE0, 0x04, 0x7F, 0x10, 0x11, 0xBA, 0x22, 0xC0, 0xE0, 0xC0, 0xF0,
-0xC0, 0x83, 0xC0, 0x82, 0xC0, 0xD0, 0x75, 0xD0, 0x00, 0xC0, 0x00, 0xC0, 0x01, 0xC0, 0x02, 0xC0,
-0x03, 0xC0, 0x04, 0xC0, 0x05, 0xC0, 0x06, 0xC0, 0x07, 0x90, 0x01, 0xC4, 0x74, 0xDC, 0xF0, 0x74,
-0xB8, 0xA3, 0xF0, 0x12, 0x75, 0x28, 0xE5, 0x56, 0x30, 0xE1, 0x02, 0x51, 0x13, 0xE5, 0x56, 0x30,
-0xE2, 0x03, 0x12, 0xA6, 0x0E, 0xE5, 0x57, 0x30, 0xE0, 0x02, 0x31, 0xDF, 0xE5, 0x58, 0x30, 0xE1,
-0x02, 0x91, 0x61, 0xE5, 0x58, 0x30, 0xE0, 0x02, 0x91, 0x19, 0xE5, 0x58, 0x30, 0xE4, 0x02, 0x51,
-0x12, 0xE5, 0x59, 0x30, 0xE1, 0x04, 0x7F, 0x04, 0x11, 0xBA, 0xE5, 0x59, 0x30, 0xE4, 0x03, 0x12,
-0xA5, 0x37, 0xE5, 0x59, 0x30, 0xE5, 0x02, 0x31, 0x76, 0xE5, 0x59, 0x30, 0xE6, 0x02, 0x31, 0x9D,
-0x74, 0xDC, 0x04, 0x90, 0x01, 0xC4, 0xF0, 0x74, 0xB8, 0xA3, 0xF0, 0xD0, 0x07, 0xD0, 0x06, 0xD0,
-0x05, 0xD0, 0x04, 0xD0, 0x03, 0xD0, 0x02, 0xD0, 0x01, 0xD0, 0x00, 0xD0, 0xD0, 0xD0, 0x82, 0xD0,
-0x83, 0xD0, 0xF0, 0xD0, 0xE0, 0x32, 0x90, 0x85, 0xC1, 0x12, 0x9C, 0x0B, 0x30, 0xE0, 0x19, 0xEF,
-0x54, 0xBF, 0x31, 0xCB, 0x30, 0xE0, 0x06, 0xE0, 0x44, 0x01, 0xF0, 0x80, 0x08, 0xE0, 0x54, 0xFE,
-0x31, 0xD4, 0x74, 0x04, 0xF0, 0x12, 0xA5, 0x90, 0xE4, 0xFF, 0x02, 0x68, 0x8F, 0x90, 0x85, 0xC1,
-0xE0, 0xFF, 0x12, 0x8D, 0x59, 0x30, 0xE0, 0x1E, 0xEF, 0x54, 0x7F, 0x31, 0xCB, 0x30, 0xE1, 0x06,
-0xE0, 0x44, 0x02, 0xF0, 0x80, 0x07, 0xE0, 0x54, 0xFD, 0x31, 0xD4, 0x04, 0xF0, 0x90, 0x85, 0xC5,
-0xE0, 0x60, 0x03, 0x12, 0xA5, 0x90, 0x7F, 0x01, 0x02, 0x68, 0x8F, 0xF0, 0x90, 0x04, 0xE0, 0xE0,
-0x90, 0x85, 0xC2, 0x22, 0xF0, 0x90, 0x01, 0xB9, 0x74, 0x01, 0xF0, 0x90, 0x01, 0xB8, 0x22, 0x91,
-0xAA, 0x90, 0x92, 0x67, 0xEF, 0xF0, 0x30, 0xE0, 0x05, 0x7D, 0x01, 0xE4, 0x80, 0x02, 0xE4, 0xFD,
-0xFF, 0x12, 0x57, 0x82, 0x90, 0x92, 0x67, 0xE0, 0x30, 0xE6, 0x11, 0x90, 0x01, 0x2F, 0xE0, 0x30,
-0xE7, 0x04, 0xE4, 0xF0, 0x80, 0x06, 0x90, 0x01, 0x2F, 0x74, 0x80, 0xF0, 0x51, 0x1D, 0xFB, 0x02,
-0x51, 0x7D, 0x22, 0x90, 0x85, 0xC5, 0xE0, 0x60, 0x03, 0x12, 0xA4, 0xD0, 0x22, 0x90, 0x85, 0xD7,
-0xE0, 0xFF, 0xA3, 0xE0, 0xFD, 0x90, 0x85, 0xDE, 0xE0, 0x22, 0xE4, 0x90, 0x92, 0x56, 0xF0, 0xA3,
-0xF0, 0xA3, 0xF0, 0x90, 0x92, 0x94, 0x12, 0x87, 0x58, 0x90, 0x92, 0x90, 0x12, 0x87, 0x64, 0xC3,
-0x12, 0x04, 0xB4, 0x40, 0x50, 0x90, 0x85, 0xC1, 0xE0, 0x90, 0x92, 0x94, 0x30, 0xE0, 0x14, 0x71,
-0xA1, 0x74, 0x0A, 0x9E, 0x2F, 0xFF, 0x90, 0x85, 0xFB, 0xE0, 0x24, 0x04, 0x2F, 0xFF, 0x90, 0x92,
-0xC5, 0x80, 0x0A, 0x71, 0xA1, 0x74, 0x0A, 0x9E, 0x2F, 0xFF, 0x90, 0x92, 0xC6, 0xE0, 0xFE, 0xC3,
-0xEF, 0x9E, 0x90, 0x92, 0x57, 0xF0, 0x90, 0x92, 0x57, 0xE0, 0xFF, 0xC3, 0x94, 0x2D, 0x50, 0x15,
-0x74, 0x98, 0x2F, 0x71, 0xB9, 0xE0, 0x04, 0xF0, 0x90, 0x85, 0xDB, 0xE0, 0x04, 0xF0, 0xE0, 0xFD,
-0x7F, 0xFE, 0x12, 0x7B, 0x3E, 0x90, 0x85, 0xDB, 0xE0, 0xFF, 0xD3, 0x90, 0x92, 0xC8, 0xE0, 0x9F,
-0x90, 0x92, 0xC7, 0xE0, 0x94, 0x00, 0x40, 0x02, 0x61, 0x6D, 0x71, 0x7F, 0x71, 0x76, 0x50, 0x1C,
-0x71, 0x89, 0x90, 0x92, 0x58, 0xE0, 0xD3, 0x9F, 0x40, 0x0A, 0x90, 0x92, 0x56, 0xE0, 0x90, 0x92,
-0x59, 0xF0, 0x80, 0x08, 0x90, 0x92, 0x56, 0xE0, 0x04, 0xF0, 0x80, 0xE0, 0x71, 0x7F, 0x71, 0x76,
-0x50, 0x2C, 0x71, 0x89, 0xC3, 0x90, 0x92, 0xC8, 0xE0, 0x9F, 0xFF, 0x90, 0x92, 0xC7, 0xE0, 0x94,
-0x00, 0xFE, 0x90, 0x92, 0x58, 0xE0, 0xD3, 0x9F, 0xE4, 0x9E, 0x40, 0x0A, 0x90, 0x92, 0x56, 0xE0,
-0x90, 0x92, 0x5A, 0xF0, 0x80, 0x08, 0x90, 0x92, 0x56, 0xE0, 0x04, 0xF0, 0x80, 0xD0, 0x90, 0x92,
-0x59, 0xE0, 0x90, 0x85, 0xE0, 0xF0, 0x90, 0x92, 0x5A, 0xE0, 0x90, 0x85, 0xE1, 0x71, 0x6E, 0x94,
-0x0A, 0x40, 0x0A, 0xEF, 0x24, 0xF6, 0x90, 0x85, 0xD8, 0xF0, 0xE4, 0x80, 0x09, 0xE4, 0x90, 0x85,
-0xD8, 0x71, 0x6E, 0x74, 0x0A, 0x9F, 0x90, 0x85, 0xD7, 0xF0, 0x90, 0x85, 0xE0, 0xE0, 0xFF, 0xA3,
-0xE0, 0xC3, 0x9F, 0x90, 0x85, 0xDE, 0xF0, 0x90, 0x85, 0xC1, 0xE0, 0x30, 0xE0, 0x05, 0x90, 0x92,
-0xC5, 0x80, 0x03, 0x90, 0x92, 0xC6, 0xE0, 0xFF, 0x90, 0x85, 0xDE, 0xE0, 0x2F, 0x04, 0xF0, 0x90,
-0x85, 0xDE, 0xE0, 0xC3, 0x94, 0x0A, 0x50, 0x03, 0x74, 0x0A, 0xF0, 0x90, 0x85, 0xDE, 0xE0, 0x24,
-0x02, 0xF0, 0x51, 0x1D, 0xFB, 0x12, 0x51, 0x7D, 0xE4, 0xFF, 0x12, 0x69, 0x33, 0x22, 0xF0, 0x90,
-0x85, 0xE0, 0xE0, 0xFF, 0xC3, 0x22, 0x90, 0x92, 0x56, 0xE0, 0xFF, 0xC3, 0x94, 0x2D, 0x22, 0xE4,
-0x90, 0x92, 0x58, 0xF0, 0x90, 0x92, 0x56, 0xF0, 0x22, 0x74, 0x98, 0x2F, 0xF5, 0x82, 0xE4, 0x34,
-0x92, 0xF5, 0x83, 0xE0, 0xFF, 0x90, 0x92, 0x58, 0xE0, 0x2F, 0xF0, 0x90, 0x92, 0xC9, 0xE0, 0xFF,
-0x22, 0x12, 0x87, 0x64, 0x90, 0x92, 0x90, 0x12, 0x87, 0x58, 0x12, 0x87, 0x30, 0x78, 0x0A, 0x12,
-0x04, 0xC5, 0x90, 0x85, 0xDD, 0xE0, 0xFE, 0xC3, 0x22, 0xF5, 0x82, 0xE4, 0x34, 0x92, 0xF5, 0x83,
-0x22, 0xE4, 0xFE, 0x74, 0x98, 0x2E, 0x71, 0xB9, 0xE4, 0xF0, 0x0E, 0xEE, 0xB4, 0x2D, 0xF4, 0xE4,
-0x90, 0x85, 0xDC, 0xF0, 0x90, 0x85, 0xDB, 0xF0, 0x90, 0x85, 0xDF, 0xF0, 0xEF, 0xB4, 0x01, 0x07,
-0xA3, 0x74, 0x2D, 0xF0, 0xE4, 0xA3, 0xF0, 0x22, 0x90, 0x93, 0x14, 0x12, 0x87, 0x79, 0x12, 0x71,
-0x54, 0x90, 0x85, 0xC5, 0xE0, 0xFF, 0x12, 0x60, 0xD0, 0x90, 0x85, 0xC5, 0xE0, 0x60, 0x19, 0x90,
-0x93, 0x14, 0x12, 0x87, 0x70, 0x12, 0x8D, 0x62, 0x54, 0x0F, 0xFF, 0x12, 0x8C, 0x6F, 0xFD, 0x12,
-0x6A, 0xB8, 0x51, 0x1D, 0xFB, 0x12, 0x51, 0x7D, 0x22, 0x90, 0x85, 0xBC, 0xE0, 0xFF, 0x30, 0xE0,
-0x3F, 0x90, 0x85, 0xC0, 0xE0, 0x7E, 0x00, 0xB4, 0x02, 0x02, 0x7E, 0x01, 0x90, 0x85, 0xBF, 0xE0,
-0x7D, 0x00, 0xB4, 0x04, 0x02, 0x7D, 0x01, 0xED, 0x4E, 0x70, 0x25, 0xEF, 0xC3, 0x13, 0x30, 0xE0,
-0x03, 0x02, 0xA7, 0xBA, 0x12, 0x9F, 0x2F, 0x90, 0x85, 0xC0, 0xE0, 0xB4, 0x08, 0x06, 0xE4, 0xFD,
-0x7F, 0x0C, 0x80, 0x09, 0x90, 0x85, 0xC0, 0xE0, 0x70, 0x06, 0xFD, 0x7F, 0x04, 0x12, 0x9D, 0x7D,
-0x22, 0x90, 0x85, 0xBC, 0xE0, 0xFF, 0x30, 0xE0, 0x40, 0x90, 0x85, 0xC0, 0xE0, 0x7E, 0x00, 0xB4,
-0x02, 0x02, 0x7E, 0x01, 0x90, 0x85, 0xBF, 0xE0, 0x7D, 0x00, 0xB4, 0x04, 0x02, 0x7D, 0x01, 0xED,
-0x4E, 0x70, 0x26, 0xEF, 0xC3, 0x13, 0x30, 0xE0, 0x03, 0x02, 0xA7, 0xBA, 0x12, 0xA5, 0xC9, 0x90,
-0x85, 0xC0, 0xE0, 0xB4, 0x0C, 0x06, 0xE4, 0xFD, 0x7F, 0x08, 0x80, 0x0A, 0x90, 0x85, 0xC0, 0xE0,
-0xB4, 0x04, 0x06, 0xE4, 0xFD, 0xFF, 0x12, 0x9D, 0x7D, 0x22, 0xE4, 0x90, 0x92, 0x69, 0xF0, 0xA3,
-0xF0, 0x7F, 0x83, 0x12, 0x7B, 0x51, 0x90, 0x92, 0x68, 0xEF, 0xF0, 0x7F, 0x83, 0x12, 0x7B, 0x51,
-0xAE, 0x07, 0x90, 0x92, 0x68, 0xE0, 0xFF, 0xB5, 0x06, 0x01, 0x22, 0xC3, 0x90, 0x92, 0x6A, 0xE0,
-0x94, 0x64, 0x90, 0x92, 0x69, 0xE0, 0x94, 0x00, 0x40, 0x0D, 0x90, 0x01, 0xC0, 0xE0, 0x44, 0x40,
-0xF0, 0x90, 0x92, 0x68, 0xE0, 0xFF, 0x22, 0x90, 0x92, 0x69, 0xE4, 0x75, 0xF0, 0x01, 0x12, 0x07,
-0x0A, 0x80, 0xBE, 0x32, 0xC0, 0xE0, 0xC0, 0xF0, 0xC0, 0x83, 0xC0, 0x82, 0xC0, 0xD0, 0x75, 0xD0,
-0x00, 0xC0, 0x00, 0xC0, 0x01, 0xC0, 0x02, 0xC0, 0x03, 0xC0, 0x04, 0xC0, 0x05, 0xC0, 0x06, 0xC0,
-0x07, 0x90, 0x01, 0xC4, 0x74, 0xF4, 0xF0, 0x74, 0xBC, 0xA3, 0xF0, 0x12, 0x6C, 0xBC, 0x74, 0xF4,
-0x04, 0x90, 0x01, 0xC4, 0xF0, 0x74, 0xBC, 0xA3, 0xF0, 0xD0, 0x07, 0xD0, 0x06, 0xD0, 0x05, 0xD0,
+0x55, 0x36, 0x90, 0x86, 0x74, 0xE0, 0xC4, 0x13, 0x54, 0x07, 0x22, 0x90, 0x93, 0x32, 0xE0, 0xFE,
+0xA3, 0xE0, 0xFF, 0x22, 0x74, 0x00, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0xFB, 0xF5, 0x83, 0x22, 0xE4,
+0xFC, 0xED, 0x2C, 0x24, 0x00, 0xF1, 0x47, 0xE4, 0xF0, 0x0C, 0xEC, 0xB4, 0x18, 0xF3, 0xF1, 0x44,
+0xEF, 0xF0, 0xEE, 0x54, 0x3F, 0xFF, 0xF1, 0x83, 0xF5, 0x83, 0xF1, 0x98, 0x54, 0xF0, 0xF0, 0xF1,
+0x8C, 0x44, 0x80, 0xF0, 0x74, 0x0B, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0xFB, 0xF5, 0x83, 0xE0, 0x44,
+0x10, 0xF0, 0x22, 0x74, 0x01, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0xFB, 0x22, 0x74, 0x03, 0x2D, 0xF5,
+0x82, 0xE4, 0x34, 0xFB, 0xF5, 0x83, 0xE0, 0x22, 0xEF, 0xF0, 0x74, 0x02, 0x2D, 0xF5, 0x82, 0xE4,
+0x34, 0xFB, 0xF5, 0x83, 0xE0, 0x22, 0xE0, 0x04, 0xF0, 0xE0, 0x7F, 0x00, 0x22, 0xF0, 0xA3, 0xE4,
+0xF0, 0xA3, 0xE5, 0x70, 0x22, 0xF5, 0x82, 0xE4, 0x34, 0x90, 0xF5, 0x83, 0x22, 0xE0, 0x7A, 0x00,
+0x24, 0x00, 0xFF, 0xEA, 0x3E, 0x22, 0x90, 0x86, 0x72, 0xE0, 0xC4, 0x13, 0x13, 0x54, 0x03, 0x22,
+0x75, 0xF0, 0x12, 0x90, 0x89, 0x3C, 0x12, 0x05, 0x28, 0xE0, 0x22, 0x90, 0x92, 0x4B, 0xEE, 0xF0,
+0xA3, 0xEF, 0xF0, 0xA3, 0xED, 0xF0, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x85,
+0x1E, 0xE0, 0xFF, 0x90, 0x85, 0x1D, 0xE0, 0xB5, 0x07, 0x04, 0x7F, 0x01, 0x80, 0x02, 0x7F, 0x00,
+0xEF, 0x70, 0x48, 0x90, 0x85, 0x1D, 0xE0, 0xFE, 0x75, 0xF0, 0x08, 0x90, 0x84, 0xCD, 0x12, 0x05,
+0x28, 0xE0, 0xFD, 0xEE, 0x75, 0xF0, 0x08, 0xA4, 0x24, 0xCE, 0xF9, 0x74, 0x84, 0x35, 0xF0, 0xFA,
+0x7B, 0x01, 0xAF, 0x05, 0x12, 0x88, 0xDA, 0x90, 0x85, 0x1D, 0x12, 0xB7, 0xA6, 0xB4, 0x0A, 0x02,
+0x7F, 0x01, 0xEF, 0x60, 0x05, 0xE4, 0x90, 0x85, 0x1D, 0xF0, 0x7D, 0x68, 0x7F, 0xFE, 0x12, 0x7B,
+0x3E, 0x12, 0x40, 0xB9, 0x90, 0x84, 0xC1, 0xE0, 0x44, 0x02, 0xF0, 0xD0, 0xD0, 0x92, 0xAF, 0x22,
+0x90, 0x85, 0xB5, 0xE0, 0xFF, 0x70, 0x06, 0xA3, 0xE0, 0x64, 0x09, 0x60, 0x0A, 0xEF, 0x14, 0xFF,
+0x90, 0x85, 0xB6, 0xE0, 0xB5, 0x07, 0x04, 0x7F, 0x01, 0x80, 0x02, 0x7F, 0x00, 0xEF, 0x60, 0x08,
+0x90, 0x01, 0xC1, 0xE0, 0x44, 0x02, 0xF0, 0x22, 0xC0, 0x01, 0x90, 0x85, 0xB6, 0xE0, 0x75, 0xF0,
+0x0F, 0xA4, 0x24, 0x1F, 0xF9, 0x74, 0x85, 0x35, 0xF0, 0xA8, 0x01, 0xFC, 0x7D, 0x01, 0xD0, 0x01,
+0x7E, 0x00, 0x7F, 0x0F, 0x12, 0x02, 0xD0, 0x7D, 0xCC, 0x7F, 0xFE, 0x12, 0x7B, 0x3E, 0x90, 0x85,
+0xB6, 0x12, 0xB7, 0xA6, 0xB4, 0x0A, 0x02, 0x7F, 0x01, 0xEF, 0x60, 0x05, 0xE4, 0x90, 0x85, 0xB6,
+0xF0, 0x22, 0x90, 0x92, 0x21, 0xEF, 0xF0, 0xA3, 0x12, 0x87, 0x79, 0x90, 0x93, 0x8B, 0xE0, 0xFE,
+0x04, 0xF0, 0x90, 0x00, 0x01, 0xEE, 0x12, 0x03, 0x4E, 0x74, 0x00, 0x2F, 0xF9, 0xE4, 0x34, 0xFB,
+0xFA, 0x7B, 0x01, 0xC0, 0x03, 0xC0, 0x02, 0xC0, 0x01, 0x90, 0x92, 0x22, 0x12, 0x87, 0x70, 0x8B,
+0x1B, 0x8A, 0x1C, 0x89, 0x1D, 0x75, 0x1E, 0x02, 0xD0, 0x01, 0xD0, 0x02, 0xD0, 0x03, 0x12, 0x6A,
+0x21, 0x90, 0x92, 0x21, 0xE0, 0x24, 0x02, 0xF9, 0xE4, 0x34, 0xFB, 0xFA, 0x7B, 0x01, 0xC0, 0x03,
+0xC0, 0x02, 0xC0, 0x01, 0xA3, 0x12, 0x87, 0x70, 0xE9, 0x24, 0x02, 0xF9, 0xE4, 0x3A, 0x8B, 0x1B,
+0xF5, 0x1C, 0x89, 0x1D, 0x90, 0x92, 0x22, 0x31, 0x24, 0xF5, 0x1E, 0xD0, 0x01, 0xD0, 0x02, 0xD0,
+0x03, 0x02, 0x6A, 0x21, 0x12, 0x87, 0x70, 0x90, 0x00, 0x0E, 0x02, 0x03, 0x0F, 0xD3, 0x10, 0xAF,
+0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x92, 0x25, 0x12, 0x87, 0x79, 0x7F, 0x96, 0x7E, 0x02, 0x12, 0x66,
+0x80, 0xEF, 0x60, 0x48, 0x12, 0xAF, 0x5B, 0xEC, 0x3E, 0xFE, 0xEF, 0x24, 0x01, 0xFF, 0xE4, 0x3E,
+0xFE, 0x90, 0x92, 0x28, 0xEF, 0xF0, 0xEE, 0xFF, 0x90, 0xFD, 0x11, 0xF0, 0x90, 0x92, 0x28, 0xE0,
+0xFD, 0x90, 0x02, 0x94, 0xF0, 0xA3, 0xEF, 0xF0, 0x90, 0x92, 0x25, 0x31, 0x24, 0x24, 0x02, 0xFF,
+0xE4, 0x33, 0xFE, 0x12, 0x5A, 0xA5, 0x90, 0x92, 0x28, 0xE0, 0x24, 0x18, 0xFF, 0x90, 0x92, 0x25,
+0x12, 0x87, 0x70, 0x12, 0x56, 0xF4, 0x90, 0x02, 0x96, 0x74, 0x01, 0xF0, 0xD0, 0xD0, 0x92, 0xAF,
+0x22, 0x90, 0x92, 0x6E, 0xEF, 0xF0, 0x90, 0x04, 0x7E, 0xE0, 0xFF, 0xA3, 0xE0, 0x90, 0x92, 0x7E,
+0xF0, 0xE0, 0xFE, 0x6F, 0x60, 0x64, 0x90, 0x92, 0x6F, 0x74, 0x03, 0xF0, 0x90, 0x92, 0x7D, 0x74,
+0x08, 0xF0, 0xEE, 0x04, 0x54, 0x0F, 0xFF, 0xE4, 0xFE, 0xEF, 0x75, 0xF0, 0x08, 0xA4, 0x24, 0x00,
+0xF5, 0x82, 0xE4, 0x34, 0x80, 0xF5, 0x83, 0xE5, 0x82, 0x2E, 0x51, 0x0F, 0xFD, 0x74, 0x71, 0x2E,
+0xF5, 0x82, 0xE4, 0x34, 0x92, 0xF5, 0x83, 0xED, 0xF0, 0x0E, 0xEE, 0xB4, 0x08, 0xDB, 0x7B, 0x01,
+0x7A, 0x92, 0x79, 0x6F, 0x12, 0x5E, 0x10, 0x90, 0x92, 0x7E, 0xE0, 0x04, 0x54, 0x0F, 0xFF, 0xF0,
+0xBF, 0x0F, 0x02, 0xE4, 0xF0, 0x90, 0x92, 0x7E, 0xE0, 0x90, 0x04, 0x7F, 0xF0, 0x90, 0x92, 0x6E,
+0xE0, 0x7F, 0x04, 0x70, 0x02, 0x80, 0x11, 0x12, 0x87, 0xBB, 0x22, 0xE4, 0xFF, 0x80, 0x82, 0xF5,
+0x82, 0xE4, 0x35, 0x83, 0xF5, 0x83, 0xE0, 0x22, 0x8F, 0x0D, 0x7F, 0x02, 0x12, 0x86, 0x27, 0x90,
+0x84, 0xC1, 0xE0, 0x45, 0x0D, 0xF0, 0x22, 0x12, 0x40, 0xB9, 0x7F, 0x02, 0x80, 0xEA, 0xC0, 0xE0,
+0xC0, 0xF0, 0xC0, 0x83, 0xC0, 0x82, 0xC0, 0xD0, 0x75, 0xD0, 0x00, 0xC0, 0x00, 0xC0, 0x01, 0xC0,
+0x02, 0xC0, 0x03, 0xC0, 0x04, 0xC0, 0x05, 0xC0, 0x06, 0xC0, 0x07, 0x90, 0x01, 0xC4, 0x74, 0x2E,
+0xF0, 0x74, 0xBA, 0xA3, 0xF0, 0x12, 0x71, 0x90, 0xE5, 0x4C, 0x30, 0xE1, 0x02, 0x51, 0x0B, 0xE5,
+0x4C, 0x30, 0xE3, 0x02, 0x51, 0xEE, 0xE5, 0x4C, 0x30, 0xE4, 0x02, 0x51, 0x27, 0xE5, 0x4C, 0x30,
+0xE5, 0x03, 0x12, 0xC6, 0xB9, 0xE5, 0x4C, 0x30, 0xE6, 0x03, 0x12, 0xC5, 0x09, 0xE5, 0x4E, 0x30,
+0xE0, 0x02, 0xD1, 0xD5, 0xE5, 0x4E, 0x30, 0xE1, 0x03, 0x12, 0xA1, 0x97, 0xE5, 0x4E, 0x30, 0xE2,
+0x03, 0x12, 0xC5, 0x16, 0xE5, 0x4E, 0x30, 0xE3, 0x02, 0x51, 0xFA, 0xE5, 0x4E, 0x30, 0xE4, 0x02,
+0x71, 0x8D, 0xE5, 0x4E, 0x30, 0xE5, 0x03, 0x12, 0xC5, 0x45, 0xE5, 0x4E, 0x30, 0xE6, 0x02, 0x71,
+0x0C, 0xE5, 0x4F, 0x30, 0xE1, 0x03, 0x12, 0x9E, 0x80, 0xE5, 0x4F, 0x30, 0xE4, 0x02, 0xF1, 0xC3,
+0xE5, 0x4F, 0x30, 0xE5, 0x03, 0x12, 0xB4, 0x0D, 0x74, 0x2E, 0x04, 0x90, 0x01, 0xC4, 0xF0, 0x74,
+0xBA, 0xA3, 0xF0, 0xD0, 0x07, 0xD0, 0x06, 0xD0, 0x05, 0xD0, 0x04, 0xD0, 0x03, 0xD0, 0x02, 0xD0,
+0x01, 0xD0, 0x00, 0xD0, 0xD0, 0xD0, 0x82, 0xD0, 0x83, 0xD0, 0xF0, 0xD0, 0xE0, 0x32, 0x90, 0x86,
+0x72, 0xE0, 0x30, 0xE0, 0x04, 0x7F, 0x10, 0x51, 0x18, 0x22, 0x71, 0xA6, 0x70, 0x0D, 0x90, 0x85,
+0xC5, 0xE0, 0x60, 0x07, 0x91, 0xA2, 0x91, 0xE2, 0x12, 0x9E, 0xFC, 0x22, 0xE4, 0xFF, 0x12, 0x77,
+0x39, 0xBF, 0x01, 0x0E, 0x90, 0x85, 0xC5, 0xE0, 0x60, 0x08, 0x71, 0x23, 0x54, 0x07, 0x70, 0x02,
+0x71, 0x77, 0x22, 0x90, 0x85, 0xC9, 0xE0, 0x54, 0xFE, 0xF0, 0x22, 0xE4, 0xF5, 0x78, 0x90, 0x06,
+0xA9, 0xE0, 0xF5, 0x78, 0x54, 0xC0, 0x70, 0x07, 0x71, 0x23, 0x54, 0xFD, 0xF0, 0x80, 0x38, 0xE5,
+0x78, 0x30, 0xE6, 0x19, 0x90, 0x85, 0xC5, 0xE0, 0x64, 0x01, 0x70, 0x13, 0x12, 0x9E, 0xBF, 0x64,
+0x02, 0x60, 0x05, 0x12, 0x77, 0x61, 0x80, 0x07, 0x12, 0x79, 0x41, 0x80, 0x02, 0x71, 0x23, 0xE5,
+0x78, 0x90, 0x85, 0xC9, 0x30, 0xE7, 0x0B, 0xE0, 0x44, 0x02, 0xF0, 0x91, 0xE2, 0x12, 0x9E, 0xFC,
+0xE1, 0xD6, 0xE0, 0x54, 0xFD, 0xF0, 0x22, 0x90, 0x85, 0xBC, 0xE0, 0x90, 0x85, 0xC7, 0x30, 0xE0,
+0x05, 0xE0, 0xFF, 0x02, 0x9E, 0x2C, 0xE0, 0xFF, 0x7D, 0x01, 0x02, 0x9A, 0x74, 0x71, 0xA6, 0x70,
+0x14, 0x90, 0x85, 0xC5, 0xE0, 0x60, 0x0E, 0x91, 0xA2, 0x90, 0x85, 0xC1, 0xE0, 0x91, 0xCD, 0x54,
+0x07, 0x70, 0x02, 0x71, 0x77, 0x22, 0xE4, 0xFF, 0x12, 0x77, 0x39, 0xEF, 0x64, 0x01, 0x22, 0x12,
+0xA1, 0x76, 0x13, 0x54, 0x1F, 0x30, 0xE0, 0x0B, 0xEF, 0xC4, 0x13, 0x13, 0x54, 0x03, 0x30, 0xE0,
+0x02, 0xF1, 0xC8, 0x91, 0xD8, 0x30, 0xE0, 0x08, 0x91, 0xCC, 0x54, 0x07, 0x70, 0x37, 0x80, 0x33,
+0xD1, 0xBC, 0x40, 0x2F, 0x71, 0xA6, 0x70, 0x2D, 0x12, 0x9E, 0xC6, 0x70, 0x05, 0x12, 0x70, 0xDB,
+0x80, 0x24, 0x12, 0x70, 0xDB, 0x90, 0x85, 0xCF, 0xE0, 0x04, 0xF0, 0xE0, 0xD3, 0x94, 0x02, 0x40,
+0x09, 0x91, 0x06, 0xE4, 0x90, 0x85, 0xCF, 0xF0, 0x80, 0x03, 0x12, 0x79, 0x41, 0xE4, 0x90, 0x85,
+0xCE, 0xF0, 0x22, 0x71, 0x77, 0x22, 0x90, 0x85, 0xC2, 0xE0, 0x54, 0xFB, 0xF0, 0x22, 0x90, 0x85,
+0xC5, 0xE0, 0x60, 0x02, 0x71, 0xAF, 0x90, 0x92, 0xA1, 0xE0, 0x30, 0xE0, 0x52, 0x90, 0x92, 0xA4,
+0xE0, 0x70, 0x24, 0x7D, 0x16, 0x12, 0xA7, 0xD0, 0x12, 0xA6, 0xA9, 0x91, 0x8E, 0x7D, 0x01, 0x12,
+0xA7, 0x03, 0x12, 0xA6, 0xA9, 0x91, 0x7F, 0xE0, 0x44, 0x01, 0xF0, 0x91, 0x70, 0x12, 0x9E, 0xFC,
+0x90, 0x92, 0xA4, 0x74, 0x01, 0xF0, 0x22, 0x90, 0x92, 0xA4, 0xE0, 0x64, 0x01, 0x70, 0x1D, 0x90,
+0x92, 0xA2, 0x91, 0x79, 0xE0, 0x30, 0xE0, 0x14, 0x91, 0x8D, 0x7D, 0x01, 0x12, 0xA7, 0x03, 0x91,
+0x70, 0xF0, 0xE4, 0xFB, 0xFD, 0x7F, 0x54, 0x7E, 0x01, 0x02, 0x61, 0x41, 0x12, 0xA5, 0x94, 0x22,
+0xE4, 0x90, 0x91, 0x6E, 0xF0, 0xA3, 0x74, 0x03, 0x22, 0xE0, 0xC3, 0x13, 0x54, 0x07, 0xFF, 0x75,
+0xF0, 0x0E, 0xA4, 0x24, 0xAD, 0xF5, 0x82, 0xE4, 0x34, 0x92, 0xF5, 0x83, 0x22, 0xEF, 0x75, 0xF0,
+0x0E, 0xA4, 0x24, 0xB1, 0xF5, 0x82, 0xE4, 0x34, 0x92, 0xF5, 0x83, 0xE0, 0xFF, 0x7E, 0x00, 0xE4,
+0xFB, 0x22, 0x90, 0x01, 0x57, 0xE4, 0xF0, 0x90, 0x01, 0x3C, 0x74, 0x02, 0xF0, 0x22, 0x90, 0x01,
+0x57, 0xE0, 0x60, 0x17, 0x91, 0xA5, 0x91, 0xD8, 0x30, 0xE0, 0x02, 0x80, 0x0F, 0xD1, 0xBC, 0x40,
+0x0A, 0xE4, 0xFF, 0x12, 0x77, 0x39, 0xBF, 0x01, 0x02, 0x91, 0x06, 0x22, 0xEF, 0x54, 0xFB, 0xF0,
+0x90, 0x85, 0xC9, 0xE0, 0x54, 0xFD, 0xF0, 0x22, 0x90, 0x85, 0xC1, 0xE0, 0xFF, 0x13, 0x13, 0x54,
+0x3F, 0x22, 0xE4, 0x90, 0x91, 0x6E, 0xF0, 0x90, 0x86, 0x6E, 0xE0, 0x90, 0x91, 0x6F, 0x22, 0x90,
+0x85, 0xC5, 0xE0, 0x60, 0x0F, 0x90, 0x06, 0x92, 0xE0, 0x30, 0xE1, 0x03, 0x02, 0x6B, 0x98, 0x12,
+0xD2, 0x69, 0x71, 0x77, 0x22, 0xC0, 0xE0, 0xC0, 0xF0, 0xC0, 0x83, 0xC0, 0x82, 0xC0, 0xD0, 0x75,
+0xD0, 0x00, 0xC0, 0x00, 0xC0, 0x01, 0xC0, 0x02, 0xC0, 0x03, 0xC0, 0x04, 0xC0, 0x05, 0xC0, 0x06,
+0xC0, 0x07, 0x90, 0x01, 0xC4, 0x74, 0x05, 0xF0, 0x74, 0xBD, 0xA3, 0xF0, 0x12, 0x75, 0x28, 0xE5,
+0x56, 0x30, 0xE1, 0x02, 0x91, 0x0E, 0xE5, 0x56, 0x30, 0xE2, 0x02, 0x91, 0xEF, 0xE5, 0x56, 0x30,
+0xE5, 0x02, 0xD1, 0x6E, 0xE5, 0x57, 0x30, 0xE0, 0x02, 0xF1, 0x42, 0xE5, 0x58, 0x30, 0xE1, 0x02,
+0xD1, 0x27, 0xE5, 0x58, 0x30, 0xE0, 0x02, 0xF1, 0x7B, 0xE5, 0x58, 0x30, 0xE4, 0x02, 0xF1, 0xC2,
+0xE5, 0x59, 0x30, 0xE1, 0x04, 0x7F, 0x04, 0x51, 0x18, 0xE5, 0x59, 0x30, 0xE4, 0x02, 0xD1, 0x94,
+0xE5, 0x59, 0x30, 0xE5, 0x02, 0xB1, 0xA4, 0xE5, 0x59, 0x30, 0xE6, 0x02, 0xB1, 0xCA, 0x74, 0x05,
+0x04, 0x90, 0x01, 0xC4, 0xF0, 0x74, 0xBD, 0xA3, 0xF0, 0xD0, 0x07, 0xD0, 0x06, 0xD0, 0x05, 0xD0,
0x04, 0xD0, 0x03, 0xD0, 0x02, 0xD0, 0x01, 0xD0, 0x00, 0xD0, 0xD0, 0xD0, 0x82, 0xD0, 0x83, 0xD0,
-0xF0, 0xD0, 0xE0, 0x32, 0x32, 0xC0, 0xE0, 0xC0, 0x83, 0xC0, 0x82, 0xC0, 0xD0, 0x75, 0xD0, 0x00,
-0xC0, 0x05, 0xC0, 0x07, 0x7D, 0x45, 0x90, 0x01, 0xC4, 0xED, 0xF0, 0x74, 0xBD, 0xFF, 0xA3, 0xF0,
-0xED, 0x04, 0x90, 0x01, 0xC4, 0xF0, 0xA3, 0xEF, 0xF0, 0xD0, 0x07, 0xD0, 0x05, 0xD0, 0xD0, 0xD0,
-0x82, 0xD0, 0x83, 0xD0, 0xE0, 0x32, 0x90, 0x85, 0xBC, 0xE0, 0x30, 0xE0, 0x05, 0xE4, 0xA3, 0xF0,
-0xA3, 0xF0, 0x22, 0x90, 0x88, 0xE7, 0xE0, 0x04, 0xF0, 0x90, 0x85, 0xBC, 0xE0, 0xFF, 0x30, 0xE0,
-0x05, 0x12, 0x9F, 0x48, 0x60, 0x1B, 0x90, 0x85, 0xC5, 0xE0, 0x70, 0x04, 0xEF, 0x30, 0xE0, 0x0B,
-0x90, 0x85, 0xC8, 0xE0, 0x64, 0x02, 0x60, 0x09, 0x12, 0xA0, 0x9E, 0x90, 0x01, 0xE6, 0xE0, 0x04,
-0xF0, 0x22, 0xE4, 0xFF, 0x12, 0x77, 0x39, 0xBF, 0x01, 0x13, 0x90, 0x85, 0xC5, 0xE0, 0x60, 0x0D,
-0x12, 0x9F, 0xE4, 0x64, 0x02, 0x60, 0x03, 0x02, 0x77, 0x61, 0x12, 0x79, 0x41, 0x22, 0x90, 0x85,
-0xC5, 0xE0, 0x70, 0x07, 0x90, 0x85, 0xBC, 0xE0, 0x30, 0xE0, 0x13, 0x90, 0x85, 0xBC, 0xE0, 0x30,
-0xE0, 0x09, 0x12, 0x9F, 0xAC, 0xBF, 0x01, 0x06, 0x02, 0x9F, 0x4F, 0x12, 0x9F, 0x67, 0x22, 0x7D,
-0x07, 0xAF, 0x62, 0xED, 0x30, 0xE0, 0x21, 0x75, 0xF0, 0x12, 0xEF, 0x90, 0x89, 0x44, 0xD1, 0x42,
-0xEF, 0x90, 0x89, 0x46, 0xD1, 0x42, 0xEF, 0x90, 0x89, 0x48, 0xD1, 0x42, 0xEF, 0x90, 0x89, 0x4A,
-0xD1, 0x42, 0xEF, 0x90, 0x89, 0x4C, 0xD1, 0x4D, 0xED, 0x30, 0xE1, 0x09, 0x75, 0xF0, 0x12, 0xEF,
-0x90, 0x89, 0x40, 0xD1, 0x4D, 0xED, 0x30, 0xE2, 0x0C, 0x75, 0xF0, 0x12, 0xEF, 0x90, 0x89, 0x42,
-0x12, 0x05, 0x28, 0xE4, 0xF0, 0xD1, 0x55, 0xE0, 0x54, 0xBF, 0x44, 0x80, 0xFE, 0xD1, 0x55, 0xEE,
-0xF0, 0x22, 0x12, 0x05, 0x28, 0xE4, 0xF0, 0xA3, 0xF0, 0x75, 0xF0, 0x12, 0x22, 0x12, 0x05, 0x28,
-0xE4, 0xF0, 0xA3, 0xF0, 0x22, 0xEF, 0xC4, 0x54, 0xF0, 0x24, 0x03, 0xF5, 0x82, 0xE4, 0x34, 0x81,
-0xF5, 0x83, 0x22, 0x7B, 0x00, 0x7A, 0x00, 0x79, 0x00, 0x90, 0x89, 0x1B, 0x12, 0x87, 0x79, 0x7B,
-0xFF, 0x7A, 0x82, 0x79, 0x00, 0x90, 0x89, 0x1E, 0x12, 0x87, 0x79, 0x7A, 0x82, 0x79, 0x3F, 0x90,
-0x89, 0x21, 0x12, 0x87, 0x79, 0x7A, 0x82, 0x79, 0xE1, 0x90, 0x89, 0x27, 0x12, 0x87, 0x79, 0x7A,
-0x82, 0x79, 0xF5, 0x90, 0x89, 0x2A, 0x12, 0x87, 0x79, 0x7A, 0x83, 0x79, 0x1D, 0x90, 0x89, 0x2D,
-0x12, 0x87, 0x79, 0x7A, 0x83, 0x79, 0x31, 0x90, 0x89, 0x33, 0x12, 0x87, 0x79, 0x7A, 0x83, 0x79,
-0x59, 0x90, 0x89, 0x36, 0x12, 0x87, 0x79, 0x7A, 0x83, 0x79, 0x81, 0x90, 0x89, 0x39, 0x12, 0x87,
-0x79, 0xE4, 0x90, 0x92, 0xCB, 0xF0, 0x90, 0x92, 0x29, 0xF0, 0x90, 0x92, 0x29, 0xE0, 0xFF, 0xC3,
-0x94, 0x05, 0x50, 0x10, 0x74, 0xDC, 0x2F, 0x12, 0x96, 0x7A, 0xE4, 0xF0, 0x90, 0x92, 0x29, 0xE0,
-0x04, 0xF0, 0x80, 0xE6, 0x22, 0x90, 0x01, 0x94, 0xE0, 0x44, 0x01, 0xF0, 0x90, 0x01, 0xC7, 0xE4,
-0xF0, 0x22, 0x90, 0x01, 0xCF, 0xE0, 0x90, 0x92, 0x56, 0xF0, 0xE0, 0xFF, 0x30, 0xE0, 0x07, 0x90,
-0x01, 0xCF, 0xE0, 0x54, 0xFE, 0xF0, 0xEF, 0x30, 0xE5, 0x23, 0x90, 0x01, 0xCF, 0xE0, 0x54, 0xDF,
-0xF0, 0x90, 0x01, 0x34, 0x74, 0x20, 0xF0, 0xE4, 0xF5, 0xA8, 0xF5, 0xE8, 0x12, 0x75, 0xB6, 0x90,
-0x00, 0x03, 0xE0, 0x54, 0xFB, 0xFD, 0x7F, 0x03, 0x12, 0x7B, 0x3E, 0x80, 0xFE, 0x22, 0xE4, 0xFF,
-0x02, 0x2D, 0xBD, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x04, 0x1D, 0xE0, 0x60, 0x1A,
-0x90, 0x05, 0x22, 0xE0, 0x54, 0x90, 0x60, 0x07, 0x90, 0x01, 0xC0, 0xE0, 0x44, 0x08, 0xF0, 0x90,
-0x01, 0xC6, 0xE0, 0x30, 0xE1, 0xE4, 0x7F, 0x00, 0x80, 0x02, 0x7F, 0x01, 0xD0, 0xD0, 0x92, 0xAF,
-0x22, 0xC3, 0xEE, 0x94, 0x01, 0x40, 0x0A, 0x0D, 0xED, 0x13, 0x90, 0xFD, 0x10, 0xF0, 0xE4, 0x2F,
-0xFF, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x93, 0x08, 0xED, 0xF0, 0xA3, 0xEB,
-0xF0, 0x90, 0x93, 0x07, 0xEF, 0xF0, 0xE4, 0xFD, 0xFC, 0x12, 0xC2, 0x9E, 0x90, 0x93, 0x07, 0xE0,
-0x90, 0x04, 0x25, 0xF0, 0x90, 0x93, 0x08, 0xE0, 0x60, 0x06, 0x12, 0xC8, 0x4F, 0x44, 0x80, 0xF0,
-0xAF, 0x05, 0x74, 0x20, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x54, 0xC0, 0xF0,
-0x12, 0xC8, 0x4F, 0x54, 0xC0, 0xF0, 0x90, 0x93, 0x0A, 0xE0, 0xFF, 0xAE, 0x05, 0x74, 0x18, 0x2E,
-0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xEF, 0xF0, 0x90, 0x00, 0x8B, 0xE0, 0xD3, 0x94, 0x03,
-0x74, 0x10, 0x40, 0x08, 0x12, 0xC8, 0x8C, 0x74, 0x04, 0xF0, 0x80, 0x05, 0x12, 0xC8, 0x8C, 0xE4,
-0xF0, 0xAF, 0x05, 0x12, 0xC0, 0x1F, 0xF5, 0x83, 0xE0, 0x54, 0x01, 0xFE, 0x90, 0x93, 0x09, 0xE0,
-0x25, 0xE0, 0x25, 0xE0, 0xFB, 0xEE, 0x44, 0x02, 0x4B, 0xFE, 0x12, 0xC0, 0x1F, 0xF5, 0x83, 0xEE,
-0xF0, 0x74, 0x11, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0x74, 0xFF, 0xF0, 0x74, 0x29,
-0x2F, 0x11, 0x38, 0x54, 0xF7, 0xF0, 0xAE, 0x04, 0xAF, 0x05, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x74,
-0x12, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0x22, 0xE0, 0xFE, 0x24, 0x28, 0xF5, 0x82, 0xE4, 0x34,
-0xFC, 0xF5, 0x83, 0xE0, 0xFF, 0x74, 0x29, 0x2E, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0,
-0x22, 0x90, 0x88, 0xD9, 0x11, 0xDF, 0x11, 0x28, 0xFD, 0x90, 0x92, 0x07, 0xE0, 0x24, 0x2C, 0x51,
-0x92, 0x90, 0x92, 0x07, 0xE0, 0x2F, 0x24, 0x30, 0xA3, 0xF0, 0xE0, 0xFD, 0x24, 0x04, 0x51, 0x8A,
-0xE0, 0xFE, 0x74, 0x05, 0x2D, 0x31, 0x9D, 0x12, 0xAF, 0x57, 0xEC, 0x3E, 0x90, 0x88, 0x80, 0xF0,
-0xA3, 0xEF, 0xF0, 0x90, 0x92, 0x08, 0xE0, 0x24, 0x0C, 0xF9, 0xE4, 0x34, 0xFC, 0x11, 0xF0, 0x75,
-0x1E, 0x04, 0x7B, 0x01, 0x7A, 0x88, 0x79, 0x82, 0x12, 0x6A, 0x21, 0x90, 0x92, 0x08, 0xE0, 0x24,
-0x14, 0xF0, 0xE0, 0xFD, 0x24, 0x01, 0x31, 0xAD, 0x2D, 0x31, 0xA5, 0x12, 0xAF, 0x57, 0xEC, 0x3E,
-0x90, 0x88, 0x86, 0xF0, 0xA3, 0xEF, 0xF0, 0x90, 0x88, 0xDA, 0x11, 0xDF, 0x90, 0x88, 0x7C, 0xE0,
-0xFE, 0xA3, 0xE0, 0xFF, 0x4E, 0x60, 0x11, 0x90, 0x92, 0x07, 0xE0, 0x11, 0xEA, 0x8F, 0x1E, 0x7B,
-0x01, 0x7A, 0x88, 0x79, 0x8A, 0x12, 0x6A, 0x21, 0x90, 0x88, 0xDB, 0x11, 0xDF, 0x11, 0xEA, 0x90,
-0x88, 0x7E, 0xA3, 0xE0, 0xF5, 0x1E, 0x7B, 0x01, 0x7A, 0x88, 0x79, 0xAA, 0x02, 0x6A, 0x21, 0xE0,
-0xFF, 0x12, 0x7B, 0x2A, 0x90, 0x92, 0x07, 0xEF, 0xF0, 0x22, 0x24, 0x00, 0xF9, 0xE4, 0x34, 0xFC,
-0x75, 0x1B, 0x01, 0xF5, 0x1C, 0x89, 0x1D, 0x22, 0xEF, 0x60, 0x04, 0x31, 0x00, 0x11, 0x41, 0x22,
-0xE4, 0xFD, 0xFC, 0x90, 0x88, 0xD8, 0xE0, 0xFF, 0x51, 0x9E, 0xAB, 0x05, 0x74, 0x01, 0x2B, 0x31,
-0xAD, 0x2B, 0x31, 0xA5, 0x12, 0xAF, 0xCC, 0x90, 0x88, 0x76, 0xF0, 0xA3, 0xEF, 0xF0, 0x74, 0x03,
-0x2B, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0xFE, 0x74, 0x02, 0x2B, 0xF5, 0x82, 0xE4,
-0x34, 0xFC, 0x31, 0x94, 0x90, 0x88, 0x78, 0xF0, 0xA3, 0xEF, 0xF0, 0x74, 0x05, 0x2B, 0x31, 0x9D,
-0xE0, 0xFE, 0x74, 0x04, 0x2B, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0x31, 0x94, 0x90, 0x88, 0x7A, 0xF0,
-0xA3, 0xEF, 0xF0, 0x74, 0x07, 0x2B, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0xFE, 0x74,
-0x06, 0x2B, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0x31, 0x94, 0x90, 0x88, 0x7C, 0xF0, 0xA3, 0xEF, 0xF0,
-0x74, 0x09, 0x2B, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0xFE, 0x74, 0x08, 0x2B, 0xF5,
-0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x24, 0x00, 0xFF, 0xEC, 0x3E, 0x90, 0x88, 0x7E, 0xF0,
-0xA3, 0xEF, 0xF0, 0x22, 0xF5, 0x83, 0xE0, 0x24, 0x00, 0xFF, 0xEA, 0x3E, 0x22, 0xF5, 0x82, 0xE4,
-0x34, 0xFC, 0xF5, 0x83, 0x22, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0x22, 0xF5, 0x82, 0xE4,
-0x34, 0xFC, 0xF5, 0x83, 0xE0, 0xFE, 0x74, 0x00, 0x22, 0xAD, 0x07, 0x90, 0x88, 0x80, 0xE4, 0x75,
-0xF0, 0x01, 0x12, 0x07, 0x0A, 0x90, 0x88, 0x80, 0xE0, 0xFF, 0xAE, 0x05, 0x74, 0x04, 0x2E, 0x51,
-0x8A, 0xEF, 0xF0, 0x90, 0x88, 0x80, 0xA3, 0xE0, 0xFF, 0x74, 0x05, 0x2E, 0x31, 0x9D, 0xEF, 0xF0,
-0x22, 0xE4, 0x90, 0x92, 0x59, 0xF0, 0xA3, 0xF0, 0x90, 0x06, 0x32, 0xE0, 0x44, 0x20, 0xF0, 0x12,
-0x75, 0xE4, 0xEF, 0x64, 0x01, 0x60, 0x02, 0x41, 0x80, 0x90, 0x88, 0xD9, 0xE0, 0xFF, 0x90, 0x93,
-0x0A, 0x74, 0x0A, 0xF0, 0x7B, 0x08, 0x7D, 0x01, 0x12, 0xBF, 0x72, 0x90, 0x92, 0x56, 0xEE, 0xF0,
-0xA3, 0xEF, 0xF0, 0x90, 0x92, 0x56, 0xA3, 0x11, 0x28, 0xFD, 0x74, 0x2C, 0x2E, 0x51, 0x92, 0x90,
-0x92, 0x58, 0xEF, 0xF0, 0x90, 0x92, 0x56, 0xA3, 0xE0, 0x24, 0x28, 0xF9, 0xE4, 0x34, 0xFC, 0xFA,
-0x7B, 0x01, 0xE4, 0xFD, 0x12, 0x52, 0x21, 0x90, 0x92, 0x58, 0xE0, 0xFF, 0x90, 0x92, 0x57, 0xE0,
-0x2F, 0xFF, 0x90, 0x92, 0x56, 0xE0, 0x34, 0x00, 0xCF, 0x24, 0x30, 0xCF, 0x34, 0x00, 0xFE, 0x90,
-0x92, 0x59, 0xF0, 0xA3, 0xEF, 0xF0, 0x31, 0xB9, 0x51, 0x81, 0x90, 0x88, 0xD9, 0xE0, 0xFB, 0xE4,
-0xFF, 0x12, 0x15, 0x44, 0x51, 0x81, 0x90, 0x88, 0xD5, 0xE0, 0xFB, 0x7F, 0x11, 0x12, 0x15, 0x44,
-0x90, 0x04, 0x1F, 0x74, 0x20, 0xF0, 0x90, 0x88, 0x88, 0xE4, 0x75, 0xF0, 0x01, 0x12, 0x07, 0x0A,
-0x22, 0x90, 0x92, 0x59, 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0x22, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5,
-0x83, 0x22, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0xFB, 0x02, 0x5D, 0x98, 0x12, 0x7B,
-0x2A, 0x7C, 0x00, 0xAD, 0x07, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x92, 0xF5,
-0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0x12, 0x70, 0x61, 0x90, 0x92, 0xFF, 0x12, 0x04, 0xEB, 0x90, 0x92,
-0xF7, 0x12, 0x87, 0x58, 0x12, 0x04, 0xA7, 0x90, 0x92, 0xFF, 0x12, 0x87, 0x64, 0x12, 0x87, 0x3E,
-0xC0, 0x04, 0xC0, 0x05, 0xC0, 0x06, 0xC0, 0x07, 0x90, 0x92, 0xF7, 0x12, 0x87, 0x58, 0x90, 0x92,
-0xFB, 0x12, 0x87, 0x64, 0x12, 0x87, 0x3E, 0xD0, 0x03, 0xD0, 0x02, 0xD0, 0x01, 0xD0, 0x00, 0x12,
-0x87, 0x4B, 0x90, 0x93, 0x03, 0x12, 0x04, 0xEB, 0x90, 0x93, 0x03, 0x12, 0x87, 0x58, 0x90, 0x91,
-0x66, 0x12, 0x04, 0xEB, 0x90, 0x92, 0xF5, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x12, 0x71, 0x18, 0xD0,
-0xD0, 0x92, 0xAF, 0x22, 0x7E, 0x00, 0x7F, 0xAC, 0x7D, 0x00, 0x7B, 0x01, 0x7A, 0x85, 0x79, 0xC1,
-0x12, 0x06, 0xDE, 0x71, 0xE3, 0x12, 0x06, 0xDE, 0x90, 0x85, 0xC4, 0x74, 0x02, 0xF0, 0x90, 0x85,
-0xCB, 0x14, 0xF0, 0xA3, 0xF0, 0xA3, 0x74, 0x0A, 0xF0, 0x90, 0x85, 0xD1, 0xE4, 0xF0, 0xA3, 0x74,
-0x02, 0x71, 0xD3, 0x71, 0xF0, 0xE4, 0xFD, 0xFF, 0x12, 0x57, 0x82, 0x7D, 0x0C, 0x7F, 0x02, 0x12,
-0x57, 0x82, 0x7D, 0x0C, 0x7F, 0x01, 0x12, 0x57, 0x82, 0x90, 0x84, 0xC5, 0xE0, 0xFF, 0xB4, 0x01,
-0x08, 0x90, 0x85, 0xD0, 0x74, 0xDD, 0xF0, 0x80, 0x0F, 0xEF, 0x90, 0x85, 0xD0, 0xB4, 0x03, 0x05,
-0x74, 0xD4, 0xF0, 0x80, 0x03, 0x74, 0x40, 0xF0, 0x7F, 0x2C, 0x12, 0x7B, 0x51, 0xEF, 0x54, 0x0F,
-0xFF, 0xBF, 0x05, 0x08, 0x90, 0x85, 0xFB, 0x74, 0x02, 0xF0, 0x80, 0x05, 0xE4, 0x90, 0x85, 0xFB,
-0xF0, 0x90, 0x86, 0x6D, 0x74, 0x03, 0xF0, 0xA3, 0x74, 0x0F, 0xF0, 0xA3, 0xE0, 0x54, 0x01, 0x44,
-0x28, 0xF0, 0xA3, 0x74, 0x07, 0x71, 0xD3, 0xE4, 0x90, 0x85, 0xD7, 0xF0, 0xA3, 0xF0, 0x7F, 0x01,
-0x12, 0x69, 0x33, 0x90, 0x05, 0x58, 0x74, 0x02, 0xF0, 0x90, 0x06, 0x04, 0xE0, 0x54, 0x7F, 0xF0,
-0x90, 0x06, 0x0A, 0xE0, 0x54, 0xF8, 0xF0, 0xE4, 0xFD, 0xFF, 0x12, 0x90, 0xDE, 0xE4, 0x90, 0x86,
-0x71, 0xF0, 0x22, 0xF0, 0x90, 0x85, 0xFB, 0xE0, 0x24, 0x04, 0x90, 0x85, 0xDD, 0xF0, 0xA3, 0x74,
-0x0A, 0xF0, 0x22, 0x7E, 0x00, 0x7F, 0x04, 0x7D, 0x00, 0x7B, 0x01, 0x7A, 0x92, 0x79, 0x79, 0x22,
-0x90, 0x92, 0xC5, 0x74, 0x04, 0xF0, 0x14, 0xF0, 0xA3, 0xF0, 0xA3, 0xE4, 0xF0, 0xA3, 0x74, 0x64,
-0xF0, 0xA3, 0x74, 0x05, 0xF0, 0xA3, 0xF0, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x12,
-0x7A, 0x29, 0xEF, 0x64, 0x01, 0x60, 0x05, 0x75, 0x0F, 0x01, 0x80, 0x52, 0x90, 0x85, 0xC9, 0xE0,
-0xFF, 0x54, 0x03, 0x60, 0x05, 0x75, 0x0F, 0x02, 0x80, 0x44, 0x90, 0x85, 0xC7, 0xE0, 0xFE, 0xE4,
-0xC3, 0x9E, 0x50, 0x05, 0x75, 0x0F, 0x04, 0x80, 0x35, 0xEF, 0x30, 0xE2, 0x05, 0x75, 0x0F, 0x08,
-0x80, 0x2C, 0x90, 0x85, 0xC9, 0xE0, 0x30, 0xE4, 0x05, 0x75, 0x0F, 0x10, 0x80, 0x20, 0x90, 0x85,
-0xC2, 0xE0, 0x13, 0x13, 0x54, 0x3F, 0x20, 0xE0, 0x05, 0x75, 0x0F, 0x20, 0x80, 0x10, 0x90, 0x86,
-0x71, 0xE0, 0x60, 0x05, 0x75, 0x0F, 0x80, 0x80, 0x05, 0x12, 0xB3, 0xDE, 0x80, 0x0E, 0x90, 0x01,
-0xB9, 0x74, 0x04, 0xF0, 0x90, 0x01, 0xB8, 0xE5, 0x0F, 0xF0, 0x7F, 0x00, 0xD0, 0xD0, 0x92, 0xAF,
-0x22, 0xAC, 0x07, 0x90, 0x92, 0x8B, 0xE0, 0xF9, 0x30, 0xE0, 0x02, 0xA1, 0x35, 0x90, 0x85, 0xC1,
-0xE0, 0x30, 0xE0, 0x16, 0x90, 0x85, 0xFB, 0xE0, 0x24, 0x04, 0x90, 0x85, 0xDA, 0xF0, 0x90, 0x85,
-0xFB, 0xE0, 0x24, 0x03, 0x90, 0x85, 0xD9, 0xF0, 0x80, 0x0D, 0x90, 0x85, 0xDA, 0x74, 0x02, 0xF0,
-0x90, 0x85, 0xD9, 0x14, 0xF0, 0x0B, 0x0B, 0x90, 0x85, 0xD9, 0xE0, 0xFA, 0x90, 0x85, 0xD8, 0xE0,
-0xD3, 0x9A, 0x50, 0x0E, 0x90, 0x85, 0xCD, 0xEB, 0xF0, 0x90, 0x85, 0xDA, 0xE0, 0xC3, 0x9D, 0x2C,
-0x80, 0x11, 0xC3, 0xED, 0x9A, 0x2B, 0x90, 0x85, 0xCD, 0xF0, 0x90, 0x85, 0xD9, 0xE0, 0xFF, 0xA3,
-0xE0, 0xC3, 0x9F, 0x90, 0x85, 0xDD, 0xF0, 0x90, 0x85, 0xDA, 0xE0, 0xFF, 0x24, 0x0A, 0xFD, 0xE4,
-0x33, 0xFC, 0x90, 0x85, 0xDD, 0xB1, 0x3D, 0x98, 0x40, 0x04, 0xEF, 0x24, 0x0A, 0xF0, 0x90, 0x85,
-0xDD, 0xE0, 0xFF, 0x24, 0x23, 0xFD, 0xE4, 0x33, 0xFC, 0x90, 0x85, 0xCD, 0xB1, 0x3D, 0x98, 0x40,
-0x04, 0xEF, 0x24, 0x23, 0xF0, 0x90, 0x85, 0xDD, 0xE0, 0xFF, 0x7E, 0x00, 0x90, 0x85, 0xD1, 0xEE,
-0xF0, 0xA3, 0xEF, 0xF0, 0x90, 0x05, 0x58, 0xE0, 0x6F, 0x70, 0x01, 0xE4, 0x60, 0x02, 0xB1, 0x47,
-0xE9, 0x54, 0xFD, 0x80, 0x03, 0xE9, 0x44, 0x02, 0x90, 0x92, 0x8B, 0xF0, 0x22, 0xE0, 0xD3, 0x9D,
-0xEC, 0x64, 0x80, 0xF8, 0x74, 0x80, 0x22, 0x90, 0x85, 0xD1, 0xA3, 0xE0, 0x90, 0x05, 0x58, 0xF0,
-0x22, 0x12, 0xA7, 0xAE, 0x40, 0x2B, 0x90, 0x85, 0xDF, 0xE0, 0x04, 0xF0, 0x90, 0x92, 0xCA, 0xE0,
-0xFF, 0x90, 0x85, 0xDF, 0xE0, 0xD3, 0x9F, 0x50, 0x18, 0x90, 0x85, 0xD7, 0xE0, 0x04, 0x12, 0xA2,
-0x50, 0x90, 0x85, 0xDE, 0xF0, 0xFB, 0x90, 0x85, 0xD7, 0xE0, 0xFF, 0xA3, 0xE0, 0xFD, 0x12, 0x51,
-0x7D, 0x22, 0x90, 0x92, 0x70, 0xEF, 0xF0, 0x90, 0x84, 0xC5, 0xE0, 0x64, 0x02, 0x70, 0x1F, 0x90,
-0x92, 0x70, 0xE0, 0xFD, 0x64, 0x01, 0x70, 0x32, 0x12, 0xAF, 0x21, 0x12, 0x8D, 0x55, 0x30, 0xE0,
-0x09, 0x90, 0x01, 0x4D, 0xE0, 0x64, 0x80, 0xF0, 0x80, 0x20, 0xAF, 0x05, 0x80, 0x19, 0x90, 0x01,
-0x00, 0x74, 0xFF, 0xF0, 0x7F, 0x64, 0x7E, 0x00, 0x12, 0x7C, 0x9F, 0x90, 0x06, 0x90, 0xE0, 0x44,
-0x01, 0xF0, 0x90, 0x92, 0x70, 0xE0, 0xFF, 0x12, 0x2A, 0x87, 0x90, 0x88, 0xE1, 0xE0, 0x54, 0xFE,
-0xF0, 0x90, 0x86, 0x72, 0xE0, 0x54, 0xBF, 0xF0, 0x22, 0x90, 0x92, 0x71, 0xEE, 0xF0, 0xA3, 0xEF,
-0xF0, 0xE4, 0x90, 0x92, 0x75, 0xF0, 0x7D, 0x09, 0x12, 0x55, 0x36, 0xEF, 0x64, 0x06, 0x70, 0x2A,
-0xD1, 0x6E, 0x7D, 0x14, 0x12, 0x55, 0x36, 0xEF, 0x70, 0x20, 0xD1, 0x6E, 0x7D, 0x15, 0x12, 0x55,
-0x36, 0xEF, 0x64, 0x50, 0x70, 0x14, 0xD1, 0x6E, 0x7D, 0x21, 0x12, 0x55, 0x36, 0xEF, 0x20, 0xE0,
-0x03, 0x30, 0xE2, 0x06, 0x90, 0x92, 0x75, 0x74, 0x01, 0xF0, 0x90, 0x86, 0x73, 0xE0, 0x13, 0x13,
-0x54, 0x3F, 0x30, 0xE0, 0x3F, 0xD1, 0x6E, 0x7D, 0x09, 0x12, 0x55, 0x36, 0xEF, 0x64, 0x11, 0x70,
-0x33, 0x90, 0x92, 0x72, 0xE0, 0x24, 0x14, 0xFF, 0x90, 0x92, 0x71, 0xE0, 0x34, 0x00, 0xFE, 0x90,
-0x92, 0x73, 0xF0, 0xA3, 0xEF, 0xF0, 0x7D, 0x02, 0x12, 0x55, 0x36, 0xEF, 0x70, 0x16, 0x90, 0x92,
-0x73, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x7D, 0x03, 0x12, 0x55, 0x36, 0xBF, 0x89, 0x06, 0x90, 0x92,
-0x75, 0x74, 0x01, 0xF0, 0x90, 0x92, 0x75, 0xE0, 0xFF, 0xD1, 0x77, 0xEF, 0xF0, 0x22, 0x90, 0x92,
-0x71, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x22, 0x90, 0x84, 0xBF, 0xA3, 0xE0, 0x24, 0x7F, 0xF5, 0x82,
-0xE4, 0x34, 0x82, 0xF5, 0x83, 0x22, 0xD1, 0xCC, 0xA3, 0xED, 0xF0, 0x90, 0x88, 0x7C, 0xE0, 0x70,
-0x02, 0xA3, 0xE0, 0x60, 0x23, 0xE4, 0x90, 0x92, 0x36, 0xF0, 0xD1, 0xD5, 0x50, 0x1D, 0xF1, 0x19,
+0xF0, 0xD0, 0xE0, 0x32, 0x90, 0x85, 0xC1, 0x12, 0x9D, 0x41, 0x30, 0xE0, 0x18, 0xEF, 0x54, 0xBF,
+0xD1, 0x80, 0x30, 0xE0, 0x06, 0xE0, 0x44, 0x01, 0xF0, 0x80, 0x08, 0xE0, 0x54, 0xFE, 0xD1, 0x89,
+0x74, 0x04, 0xF0, 0x71, 0x77, 0xE4, 0xFF, 0x02, 0x68, 0x8F, 0x90, 0x85, 0xC1, 0xE0, 0xFF, 0x12,
+0x8E, 0x8B, 0x30, 0xE0, 0x1D, 0xEF, 0x54, 0x7F, 0xD1, 0x80, 0x30, 0xE1, 0x06, 0xE0, 0x44, 0x02,
+0xF0, 0x80, 0x07, 0xE0, 0x54, 0xFD, 0xD1, 0x89, 0x04, 0xF0, 0x90, 0x85, 0xC5, 0xE0, 0x60, 0x02,
+0x71, 0x77, 0x7F, 0x01, 0x12, 0x68, 0x8F, 0x90, 0x04, 0xE0, 0xE0, 0x30, 0xE1, 0x02, 0xD1, 0x01,
+0x22, 0x90, 0x92, 0xA1, 0xE0, 0x30, 0xE0, 0x1E, 0xA3, 0x91, 0x79, 0xE0, 0xFE, 0x30, 0xE0, 0x16,
+0xEF, 0x91, 0x7F, 0xEE, 0x54, 0xFE, 0xF0, 0x90, 0x92, 0xA4, 0x74, 0x05, 0xF0, 0x12, 0xA6, 0xA9,
+0xFD, 0x7F, 0x02, 0x12, 0xA5, 0xFE, 0x22, 0x90, 0x85, 0xBC, 0xE0, 0xFF, 0x30, 0xE0, 0x3E, 0x90,
+0x85, 0xC0, 0xE0, 0x7E, 0x00, 0xB4, 0x02, 0x02, 0x7E, 0x01, 0x90, 0x85, 0xBF, 0xE0, 0x7D, 0x00,
+0xB4, 0x04, 0x02, 0x7D, 0x01, 0xED, 0x4E, 0x70, 0x24, 0xEF, 0xC3, 0x13, 0x30, 0xE0, 0x02, 0xE1,
+0x27, 0x91, 0xAE, 0x90, 0x85, 0xC0, 0xE0, 0xB4, 0x0C, 0x06, 0xE4, 0xFD, 0x7F, 0x08, 0x80, 0x0A,
+0x90, 0x85, 0xC0, 0xE0, 0xB4, 0x04, 0x06, 0xE4, 0xFD, 0xFF, 0x12, 0x9A, 0x74, 0x22, 0x90, 0x92,
+0xA1, 0xE0, 0x30, 0xE0, 0x0A, 0xF1, 0xCF, 0xE4, 0x90, 0x92, 0xA4, 0xF0, 0x12, 0x9E, 0xCD, 0x22,
+0xF0, 0x90, 0x04, 0xE0, 0xE0, 0x90, 0x85, 0xC2, 0x22, 0xF0, 0x90, 0x01, 0xB9, 0x74, 0x01, 0xF0,
+0x90, 0x01, 0xB8, 0x22, 0x12, 0x9F, 0x07, 0x12, 0xA7, 0xBB, 0x7F, 0x01, 0xD1, 0xF1, 0x90, 0x92,
+0x9C, 0xE0, 0x30, 0xE0, 0x16, 0x12, 0xD2, 0x19, 0x90, 0x92, 0x9F, 0xE0, 0x60, 0x05, 0x14, 0xF0,
+0x02, 0x7A, 0x8A, 0x12, 0xD1, 0xE1, 0xE4, 0xFF, 0x12, 0xA0, 0x2E, 0x22, 0x90, 0x85, 0xCE, 0xE0,
+0x04, 0xF0, 0x90, 0x85, 0xC9, 0xE0, 0x54, 0xEF, 0xF0, 0x90, 0x86, 0x6D, 0xE0, 0xFF, 0x90, 0x85,
+0xCE, 0xE0, 0xD3, 0x9F, 0x22, 0x90, 0x85, 0xBC, 0xE0, 0x30, 0xE0, 0x10, 0xA3, 0x74, 0x01, 0xF0,
+0x90, 0x85, 0xBC, 0xE0, 0xFF, 0xC3, 0x13, 0x30, 0xE0, 0x02, 0xF1, 0x27, 0x12, 0x9D, 0x67, 0xE4,
+0xFF, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x92, 0xDC, 0xE0, 0xFE, 0x13, 0x13, 0x54,
+0x3F, 0x30, 0xE0, 0x1E, 0x90, 0x92, 0x7F, 0x74, 0x1E, 0xF0, 0x90, 0x92, 0x8D, 0x74, 0x01, 0xF0,
+0x90, 0x92, 0x81, 0xEF, 0xF0, 0x7B, 0x01, 0x7A, 0x92, 0x79, 0x7F, 0x12, 0x5E, 0x10, 0x7F, 0x04,
+0x51, 0x18, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x12, 0x9D,
+0x5B, 0xBF, 0x01, 0x04, 0x7F, 0x01, 0x80, 0x02, 0x7F, 0x02, 0x12, 0x9C, 0x1F, 0xD0, 0xD0, 0x92,
+0xAF, 0x22, 0x12, 0xC8, 0x0A, 0x90, 0x92, 0x7F, 0xEF, 0xF0, 0x30, 0xE0, 0x05, 0x7D, 0x01, 0xE4,
+0x80, 0x02, 0xE4, 0xFD, 0xFF, 0x12, 0x57, 0x82, 0x90, 0x92, 0x7F, 0xE0, 0x30, 0xE6, 0x11, 0x90,
+0x01, 0x2F, 0xE0, 0x30, 0xE7, 0x04, 0xE4, 0xF0, 0x80, 0x06, 0x90, 0x01, 0x2F, 0x74, 0x80, 0xF0,
+0x12, 0xCF, 0x41, 0x90, 0x85, 0xDE, 0xE0, 0xFB, 0x02, 0x51, 0x7D, 0x90, 0x85, 0xBC, 0xE0, 0xFF,
+0x30, 0xE0, 0x3E, 0x90, 0x85, 0xC0, 0xE0, 0x7E, 0x00, 0xB4, 0x02, 0x02, 0x7E, 0x01, 0x90, 0x85,
+0xBF, 0xE0, 0x7D, 0x00, 0xB4, 0x04, 0x02, 0x7D, 0x01, 0xED, 0x4E, 0x70, 0x24, 0xEF, 0xC3, 0x13,
+0x30, 0xE0, 0x02, 0x80, 0x82, 0x12, 0x9E, 0x48, 0x90, 0x85, 0xC0, 0xE0, 0xB4, 0x08, 0x06, 0xE4,
+0xFD, 0x7F, 0x0C, 0x80, 0x09, 0x90, 0x85, 0xC0, 0xE0, 0x70, 0x06, 0xFD, 0x7F, 0x04, 0x12, 0x9A,
+0x74, 0x22, 0x22, 0xE4, 0xFF, 0x02, 0x2D, 0xBD, 0x7D, 0x02, 0x7F, 0x02, 0x02, 0x7C, 0x41, 0x7D,
+0x20, 0xE4, 0xFF, 0x02, 0x7B, 0xBF, 0x90, 0x85, 0xC1, 0xE0, 0x44, 0x04, 0xF0, 0x22, 0xE4, 0x90,
+0x84, 0xC1, 0x12, 0x95, 0xBE, 0x90, 0x92, 0x99, 0xF0, 0x22, 0x75, 0x48, 0x12, 0xE4, 0xF5, 0x49,
+0x75, 0x4A, 0x07, 0x75, 0x4B, 0x32, 0xF5, 0x50, 0x90, 0x01, 0x30, 0xE5, 0x48, 0xF0, 0xA3, 0xE5,
+0x49, 0xF0, 0xA3, 0xE5, 0x4A, 0xF0, 0xA3, 0xE5, 0x4B, 0xF0, 0x90, 0x01, 0x20, 0xE5, 0x50, 0xF0,
+0x22, 0x75, 0x52, 0x06, 0x75, 0x53, 0x01, 0x75, 0x54, 0x03, 0x75, 0x55, 0x62, 0x90, 0x01, 0x38,
+0xE5, 0x52, 0xF0, 0xA3, 0xE5, 0x53, 0xF0, 0xA3, 0xE5, 0x54, 0xF0, 0xA3, 0xE5, 0x55, 0xF0, 0x22,
+0x90, 0x01, 0xE4, 0x74, 0x01, 0xF0, 0xA3, 0x74, 0x0D, 0xF0, 0x22, 0x7D, 0x02, 0x90, 0x01, 0xC4,
+0x74, 0x3B, 0xF0, 0x74, 0xC0, 0xA3, 0xF0, 0x90, 0x92, 0xA0, 0xE0, 0xFF, 0xED, 0xC3, 0x9F, 0x50,
+0x18, 0xED, 0x25, 0xE0, 0x24, 0x81, 0xF8, 0xE6, 0x30, 0xE4, 0x0B, 0x90, 0x01, 0xB8, 0x74, 0x08,
+0xF0, 0xA3, 0xF0, 0x7F, 0x00, 0x22, 0x0D, 0x80, 0xDE, 0x7F, 0x01, 0x22, 0xE4, 0x90, 0x92, 0x43,
+0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0x90, 0x92, 0x43, 0xE0, 0x64, 0x01, 0xF0, 0x24, 0x6C, 0x90, 0x01,
+0xC4, 0xF0, 0x74, 0xC0, 0xA3, 0xF0, 0x12, 0x7C, 0x66, 0xBF, 0x01, 0x03, 0x12, 0x5B, 0x25, 0x90,
+0x85, 0xC5, 0xE0, 0x60, 0x0F, 0x90, 0x85, 0xC8, 0xE0, 0xFF, 0x90, 0x85, 0xC7, 0xE0, 0x6F, 0x60,
+0x03, 0x12, 0xBB, 0x77, 0xC2, 0xAF, 0x11, 0x3B, 0xBF, 0x01, 0x02, 0x11, 0xD6, 0xD2, 0xAF, 0x31,
+0xDF, 0x90, 0x92, 0x44, 0xE4, 0x75, 0xF0, 0x01, 0x12, 0x07, 0x0A, 0x54, 0x7F, 0x45, 0xF0, 0x70,
+0x0D, 0x7F, 0xFF, 0x12, 0x7B, 0x51, 0xEF, 0x04, 0xFD, 0x7F, 0xFF, 0x12, 0x7B, 0x3E, 0x12, 0x8F,
+0xF9, 0x12, 0x84, 0x4D, 0x80, 0x9F, 0x90, 0x85, 0xC1, 0xE0, 0x30, 0xE0, 0x18, 0x90, 0x85, 0xBC,
+0xE0, 0xFF, 0x30, 0xE0, 0x0E, 0xC3, 0x13, 0x30, 0xE0, 0x07, 0x51, 0xC0, 0xBF, 0x01, 0x06, 0x80,
+0x02, 0x80, 0x00, 0x11, 0xF6, 0x22, 0x90, 0x85, 0xC8, 0xE0, 0xFF, 0x60, 0x03, 0xB4, 0x08, 0x0D,
+0x51, 0x43, 0xBF, 0x01, 0x08, 0x31, 0x0E, 0x90, 0x01, 0xE5, 0xE0, 0x04, 0xF0, 0x22, 0xD3, 0x10,
+0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x31, 0x8D, 0x31, 0x1E, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x51, 0xDB,
+0x7F, 0x08, 0x12, 0x7B, 0x51, 0xEF, 0x54, 0xEF, 0xFD, 0x7F, 0x08, 0x12, 0x7B, 0x3E, 0xE4, 0xFF,
+0x31, 0x41, 0x7D, 0x35, 0x7F, 0x27, 0x12, 0x7B, 0x3E, 0x90, 0x85, 0xC2, 0xE0, 0x54, 0xEF, 0xF0,
+0x22, 0x90, 0x93, 0x84, 0xEF, 0x12, 0xB4, 0x0F, 0x90, 0x01, 0x09, 0xE0, 0x7F, 0x00, 0x30, 0xE7,
+0x02, 0x7F, 0x01, 0x90, 0x93, 0x84, 0xE0, 0x6F, 0x60, 0x32, 0xC3, 0x90, 0x93, 0x86, 0xE0, 0x94,
+0x88, 0x90, 0x93, 0x85, 0xE0, 0x94, 0x13, 0x40, 0x08, 0x90, 0x01, 0xC0, 0xE0, 0x44, 0x10, 0xF0,
+0x22, 0x90, 0x93, 0x85, 0x51, 0xCD, 0xD3, 0x90, 0x93, 0x86, 0xE0, 0x94, 0x32, 0x90, 0x93, 0x85,
+0xE0, 0x94, 0x00, 0x40, 0xC3, 0x90, 0x01, 0xC6, 0xE0, 0x30, 0xE0, 0xBC, 0x22, 0x90, 0x85, 0xC2,
+0xE0, 0x44, 0x10, 0xF0, 0x90, 0x85, 0xD0, 0xE0, 0xFD, 0x7F, 0x93, 0x12, 0x7B, 0x3E, 0x90, 0x85,
+0xC6, 0xE0, 0x60, 0x12, 0x90, 0x01, 0x2F, 0xE0, 0x30, 0xE7, 0x05, 0x74, 0x10, 0xF0, 0x80, 0x06,
+0x90, 0x01, 0x2F, 0x74, 0x90, 0xF0, 0x7F, 0x08, 0x12, 0x7B, 0x51, 0xEF, 0x44, 0x10, 0xFD, 0x7F,
+0x08, 0x12, 0x7B, 0x3E, 0x7F, 0x01, 0x31, 0x41, 0x7D, 0x34, 0x7F, 0x27, 0x12, 0x7B, 0x3E, 0x7F,
+0x90, 0x51, 0xB8, 0x7F, 0x90, 0x12, 0x7B, 0x3E, 0x7F, 0x14, 0x7E, 0x00, 0x02, 0x7C, 0x9F, 0xD3,
+0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x92, 0xD6, 0xE0, 0x60, 0x25, 0x7F, 0x54, 0x7E, 0x09,
+0x12, 0x70, 0x61, 0x51, 0x37, 0xEF, 0x44, 0xFE, 0xFF, 0xEE, 0x44, 0x03, 0xFE, 0xED, 0x44, 0x04,
+0xFD, 0xEC, 0x51, 0x37, 0x90, 0x91, 0x66, 0x12, 0x04, 0xEB, 0x7F, 0x54, 0x7E, 0x09, 0x12, 0x71,
+0x18, 0x90, 0x92, 0xD1, 0xE0, 0x70, 0x04, 0x90, 0x07, 0xCC, 0xF0, 0x90, 0x92, 0xD9, 0xE0, 0x70,
+0x0A, 0x90, 0x92, 0xD6, 0xE0, 0x70, 0x04, 0xA3, 0xE0, 0x60, 0x07, 0x90, 0x00, 0x1F, 0xE0, 0x54,
+0xF0, 0xF0, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90, 0x92, 0x46, 0x12, 0x04, 0xEB, 0x90, 0x92, 0x46,
+0x02, 0x87, 0x58, 0x90, 0x92, 0x9C, 0xE0, 0xC3, 0x13, 0x20, 0xE0, 0x48, 0x90, 0x02, 0x87, 0xE0,
+0x60, 0x02, 0x80, 0x08, 0x90, 0x01, 0x00, 0xE0, 0x64, 0x3F, 0x60, 0x05, 0x75, 0x62, 0x01, 0x80,
+0x40, 0x90, 0x86, 0x72, 0xE0, 0x30, 0xE0, 0x0B, 0x90, 0x02, 0x82, 0xE0, 0x60, 0x05, 0x75, 0x62,
+0x02, 0x80, 0x2E, 0x90, 0x86, 0x7A, 0xE0, 0x30, 0xE0, 0x05, 0x75, 0x62, 0x08, 0x80, 0x22, 0x90,
+0x02, 0x86, 0xE0, 0x20, 0xE1, 0x02, 0x80, 0x07, 0x90, 0x02, 0x86, 0xE0, 0x30, 0xE3, 0x05, 0x75,
+0x62, 0x04, 0x80, 0x0D, 0x90, 0x04, 0x1D, 0xE0, 0x60, 0x05, 0x75, 0x62, 0x40, 0x80, 0x02, 0x80,
+0x0F, 0x90, 0x01, 0xB9, 0x74, 0x08, 0xF0, 0x90, 0x01, 0xB8, 0xE5, 0x62, 0xF0, 0x7F, 0x00, 0x22,
+0x90, 0x01, 0xB8, 0xE4, 0xF0, 0x7F, 0x01, 0x22, 0x12, 0x7B, 0x51, 0xEF, 0x44, 0x01, 0xFD, 0x22,
+0x90, 0x85, 0xBF, 0xE0, 0x64, 0x02, 0x7F, 0x01, 0x60, 0x02, 0x7F, 0x00, 0x22, 0xE4, 0x75, 0xF0,
+0x01, 0x12, 0x07, 0x0A, 0x7F, 0x14, 0x7E, 0x00, 0x02, 0x7C, 0x9F, 0x90, 0x01, 0xC4, 0x74, 0xDB,
+0xF0, 0x74, 0xC2, 0xA3, 0xF0, 0x7F, 0x90, 0x12, 0x7B, 0x51, 0xEF, 0x20, 0xE0, 0xF7, 0x74, 0xDB,
+0x04, 0x90, 0x01, 0xC4, 0xF0, 0x74, 0xC2, 0xA3, 0xF0, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0,
+0xD0, 0x7F, 0x02, 0x51, 0xB8, 0x7F, 0x02, 0x12, 0xAF, 0xDA, 0x44, 0x02, 0xF0, 0x90, 0x01, 0x00,
+0x74, 0xFF, 0xF0, 0x90, 0x06, 0xB7, 0x74, 0x09, 0xF0, 0x90, 0x06, 0xB4, 0x74, 0x86, 0xF0, 0xD0,
+0xD0, 0x92, 0xAF, 0x22, 0x51, 0xFA, 0x7D, 0x24, 0x71, 0x39, 0x54, 0xBF, 0xF0, 0x90, 0x85, 0xBF,
+0x74, 0x04, 0xF0, 0x22, 0x51, 0xFA, 0x02, 0xA7, 0xE4, 0x7F, 0x6F, 0x12, 0xA6, 0xF8, 0x90, 0x05,
+0x27, 0xE0, 0x22, 0xE4, 0xFD, 0xFF, 0x71, 0x3B, 0x44, 0x40, 0xF0, 0x02, 0x9F, 0xE1, 0x71, 0x43,
+0x90, 0x05, 0x27, 0xE0, 0x54, 0xBF, 0xF0, 0xE4, 0x90, 0x85, 0xBF, 0xF0, 0x22, 0x12, 0x9F, 0xE8,
+0x80, 0xEE, 0x12, 0x9F, 0xDB, 0x80, 0xE9, 0x7D, 0x22, 0x7F, 0xFF, 0x71, 0x3B, 0x44, 0x40, 0xF0,
+0x02, 0xA7, 0xE4, 0x7D, 0x1F, 0x71, 0x39, 0x54, 0xBF, 0xF0, 0x90, 0x85, 0xBF, 0x74, 0x04, 0xF0,
+0x22, 0x12, 0x9F, 0xD9, 0x80, 0xED, 0x7D, 0x25, 0x71, 0x39, 0x54, 0xBF, 0xF0, 0x90, 0x85, 0xBF,
+0x74, 0x04, 0xF0, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x12, 0x7A, 0x29, 0xEF, 0x64,
+0x01, 0x60, 0x05, 0x75, 0x10, 0x01, 0x80, 0x51, 0x90, 0x85, 0xC9, 0xE0, 0xFF, 0x54, 0x03, 0x60,
+0x05, 0x75, 0x10, 0x02, 0x80, 0x43, 0x90, 0x85, 0xC7, 0xE0, 0xFE, 0xE4, 0xC3, 0x9E, 0x50, 0x05,
+0x75, 0x10, 0x04, 0x80, 0x34, 0xEF, 0x30, 0xE2, 0x05, 0x75, 0x10, 0x08, 0x80, 0x2B, 0x90, 0x85,
+0xC9, 0xE0, 0x30, 0xE4, 0x05, 0x75, 0x10, 0x10, 0x80, 0x1F, 0x90, 0x85, 0xC2, 0xE0, 0x13, 0x13,
+0x54, 0x3F, 0x20, 0xE0, 0x05, 0x75, 0x10, 0x20, 0x80, 0x0F, 0x90, 0x86, 0x71, 0xE0, 0x60, 0x05,
+0x75, 0x10, 0x80, 0x80, 0x04, 0x51, 0xB0, 0x80, 0x0E, 0x90, 0x01, 0xB9, 0x74, 0x04, 0xF0, 0x90,
+0x01, 0xB8, 0xE5, 0x10, 0xF0, 0x7F, 0x00, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90, 0x84, 0xA1, 0x74,
+0x02, 0xF0, 0xA3, 0x74, 0x10, 0xF0, 0x90, 0x84, 0xA7, 0x74, 0x80, 0xF0, 0xA3, 0x74, 0x03, 0xF0,
+0x22, 0xE4, 0xFB, 0xFA, 0xFD, 0x7F, 0x01, 0x12, 0x86, 0x4E, 0x90, 0x92, 0x4A, 0xEF, 0xF0, 0x60,
+0xF0, 0x90, 0x84, 0xC1, 0xE0, 0xFF, 0x70, 0x04, 0xA3, 0xE0, 0x60, 0xE5, 0xC2, 0xAF, 0xEF, 0x30,
+0xE0, 0x0F, 0x90, 0x84, 0xC1, 0xE0, 0x54, 0xFE, 0xF0, 0xE4, 0xFF, 0x12, 0x2D, 0xBD, 0x12, 0x91,
+0x75, 0x91, 0x7C, 0x30, 0xE1, 0x06, 0x54, 0xFD, 0xF0, 0x12, 0x60, 0x5D, 0x91, 0x7C, 0x30, 0xE2,
+0x06, 0x54, 0xFB, 0xF0, 0x12, 0x6A, 0x6D, 0x91, 0x7C, 0x30, 0xE4, 0x0C, 0x54, 0xEF, 0xF0, 0x12,
+0x6F, 0x22, 0xBF, 0x01, 0x03, 0x12, 0xB4, 0x16, 0xD2, 0xAF, 0x80, 0xB5, 0xD2, 0xAF, 0xC2, 0xAF,
+0x90, 0x84, 0xC1, 0xE0, 0xFF, 0x22, 0x32, 0xC0, 0xE0, 0xC0, 0xF0, 0xC0, 0x83, 0xC0, 0x82, 0xC0,
+0xD0, 0x75, 0xD0, 0x00, 0xC0, 0x00, 0xC0, 0x01, 0xC0, 0x02, 0xC0, 0x03, 0xC0, 0x04, 0xC0, 0x05,
+0xC0, 0x06, 0xC0, 0x07, 0x90, 0x01, 0xC4, 0x74, 0x87, 0xF0, 0x74, 0xC4, 0xA3, 0xF0, 0x12, 0x6C,
+0xBC, 0x74, 0x87, 0x04, 0x90, 0x01, 0xC4, 0xF0, 0x74, 0xC4, 0xA3, 0xF0, 0xD0, 0x07, 0xD0, 0x06,
+0xD0, 0x05, 0xD0, 0x04, 0xD0, 0x03, 0xD0, 0x02, 0xD0, 0x01, 0xD0, 0x00, 0xD0, 0xD0, 0xD0, 0x82,
+0xD0, 0x83, 0xD0, 0xF0, 0xD0, 0xE0, 0x32, 0x32, 0xC0, 0xE0, 0xC0, 0x83, 0xC0, 0x82, 0xC0, 0xD0,
+0x75, 0xD0, 0x00, 0xC0, 0x05, 0xC0, 0x07, 0x7D, 0xD8, 0x90, 0x01, 0xC4, 0xED, 0xF0, 0x74, 0xC4,
+0xFF, 0xA3, 0xF0, 0xED, 0x04, 0x90, 0x01, 0xC4, 0xF0, 0xA3, 0xEF, 0xF0, 0xD0, 0x07, 0xD0, 0x05,
+0xD0, 0xD0, 0xD0, 0x82, 0xD0, 0x83, 0xD0, 0xE0, 0x32, 0x90, 0x85, 0xBC, 0xE0, 0x30, 0xE0, 0x05,
+0xE4, 0xA3, 0xF0, 0xA3, 0xF0, 0x22, 0x90, 0x88, 0xE7, 0xE0, 0x04, 0xF0, 0x90, 0x85, 0xBC, 0xE0,
+0xFF, 0x30, 0xE0, 0x05, 0x12, 0x9E, 0x61, 0x60, 0x1B, 0x90, 0x85, 0xC5, 0xE0, 0x70, 0x04, 0xEF,
+0x30, 0xE0, 0x0B, 0x90, 0x85, 0xC8, 0xE0, 0x64, 0x02, 0x60, 0x09, 0x12, 0xA0, 0x7F, 0x90, 0x01,
+0xE6, 0xE0, 0x04, 0xF0, 0x22, 0xE4, 0xFF, 0x12, 0x77, 0x39, 0xBF, 0x01, 0x13, 0x90, 0x85, 0xC5,
+0xE0, 0x60, 0x0D, 0x12, 0x9E, 0xC6, 0x64, 0x02, 0x60, 0x03, 0x02, 0x77, 0x61, 0x12, 0x79, 0x41,
+0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x7F, 0x02, 0x12, 0x7B, 0x51, 0xEF, 0x54, 0xFE,
+0xFD, 0x7F, 0x02, 0x12, 0x7B, 0x3E, 0x90, 0x01, 0x00, 0x74, 0x3F, 0xF0, 0x90, 0x01, 0x34, 0x74,
+0x08, 0xF0, 0x90, 0x01, 0x01, 0xE0, 0x54, 0xFD, 0xF0, 0x90, 0x05, 0x53, 0xE0, 0x44, 0x20, 0xF0,
+0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xB1, 0x9F, 0x7D, 0x23, 0x02, 0x9F, 0xEF, 0x02, 0x9F, 0xF4, 0x90,
+0x05, 0x27, 0xE0, 0x44, 0x40, 0xF0, 0x22, 0x7D, 0x07, 0xAF, 0x63, 0xED, 0x30, 0xE0, 0x21, 0x75,
+0xF0, 0x12, 0xEF, 0x90, 0x89, 0x44, 0xB1, 0xFA, 0xEF, 0x90, 0x89, 0x46, 0xB1, 0xFA, 0xEF, 0x90,
+0x89, 0x48, 0xB1, 0xFA, 0xEF, 0x90, 0x89, 0x4A, 0xB1, 0xFA, 0xEF, 0x90, 0x89, 0x4C, 0xD1, 0x05,
+0xED, 0x30, 0xE1, 0x09, 0x75, 0xF0, 0x12, 0xEF, 0x90, 0x89, 0x40, 0xD1, 0x05, 0xED, 0x30, 0xE2,
+0x0C, 0x75, 0xF0, 0x12, 0xEF, 0x90, 0x89, 0x42, 0x12, 0x05, 0x28, 0xE4, 0xF0, 0xD1, 0x0D, 0xE0,
+0x54, 0xBF, 0x44, 0x80, 0xFE, 0xD1, 0x0D, 0xEE, 0xF0, 0x22, 0x12, 0x05, 0x28, 0xE4, 0xF0, 0xA3,
+0xF0, 0x75, 0xF0, 0x12, 0x22, 0x12, 0x05, 0x28, 0xE4, 0xF0, 0xA3, 0xF0, 0x22, 0xEF, 0xC4, 0x54,
+0xF0, 0x24, 0x03, 0xF5, 0x82, 0xE4, 0x34, 0x81, 0xF5, 0x83, 0x22, 0x7B, 0x00, 0x7A, 0x00, 0x79,
+0x00, 0x90, 0x89, 0x1B, 0x12, 0x87, 0x79, 0x7B, 0xFF, 0x7A, 0x82, 0x79, 0x00, 0x90, 0x89, 0x1E,
+0x12, 0x87, 0x79, 0x7A, 0x82, 0x79, 0x3F, 0x90, 0x89, 0x21, 0x12, 0x87, 0x79, 0x7A, 0x82, 0x79,
+0xE1, 0x90, 0x89, 0x27, 0x12, 0x87, 0x79, 0x7A, 0x82, 0x79, 0xF5, 0x90, 0x89, 0x2A, 0x12, 0x87,
+0x79, 0x7A, 0x83, 0x79, 0x1D, 0x90, 0x89, 0x2D, 0x12, 0x87, 0x79, 0x7A, 0x83, 0x79, 0x31, 0x90,
+0x89, 0x33, 0x12, 0x87, 0x79, 0x7A, 0x83, 0x79, 0x59, 0x90, 0x89, 0x36, 0x12, 0x87, 0x79, 0x7A,
+0x83, 0x79, 0x81, 0x90, 0x89, 0x39, 0x12, 0x87, 0x79, 0xE4, 0x90, 0x93, 0x1C, 0xF0, 0x90, 0x92,
+0x29, 0xF0, 0x90, 0x92, 0x29, 0xE0, 0xFF, 0xC3, 0x94, 0x05, 0x50, 0x10, 0x74, 0x2D, 0x2F, 0x12,
+0x95, 0xF8, 0xE4, 0xF0, 0x90, 0x92, 0x29, 0xE0, 0x04, 0xF0, 0x80, 0xE6, 0x22, 0x7E, 0x00, 0x7F,
+0x2E, 0x7D, 0x00, 0x7B, 0x01, 0x7A, 0x92, 0x79, 0xA1, 0x02, 0x06, 0xDE, 0x90, 0x01, 0x94, 0xE0,
+0x44, 0x01, 0xF0, 0x90, 0x01, 0xC7, 0xE4, 0xF0, 0x22, 0x90, 0x01, 0xCF, 0xE0, 0x90, 0x92, 0x6E,
+0xF0, 0xE0, 0xFF, 0x30, 0xE0, 0x07, 0x90, 0x01, 0xCF, 0xE0, 0x54, 0xFE, 0xF0, 0xEF, 0x30, 0xE5,
+0x23, 0x90, 0x01, 0xCF, 0xE0, 0x54, 0xDF, 0xF0, 0x90, 0x01, 0x34, 0x74, 0x20, 0xF0, 0xE4, 0xF5,
+0xA8, 0xF5, 0xE8, 0x12, 0x75, 0xB6, 0x90, 0x00, 0x03, 0xE0, 0x54, 0xFB, 0xFD, 0x7F, 0x03, 0x12,
+0x7B, 0x3E, 0x80, 0xFE, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x04, 0x1D, 0xE0,
+0x60, 0x1A, 0x90, 0x05, 0x22, 0xE0, 0x54, 0x90, 0x60, 0x07, 0x90, 0x01, 0xC0, 0xE0, 0x44, 0x08,
+0xF0, 0x90, 0x01, 0xC6, 0xE0, 0x30, 0xE1, 0xE4, 0x7F, 0x00, 0x80, 0x02, 0x7F, 0x01, 0xD0, 0xD0,
+0x92, 0xAF, 0x22, 0xC3, 0xEE, 0x94, 0x01, 0x40, 0x0A, 0x0D, 0xED, 0x13, 0x90, 0xFD, 0x10, 0xF0,
+0xE4, 0x2F, 0xFF, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x93, 0x77, 0xED, 0xF0,
+0xA3, 0xEB, 0xF0, 0x90, 0x93, 0x76, 0xEF, 0xF0, 0xE4, 0xFD, 0xFC, 0x12, 0xAF, 0xC2, 0x90, 0x93,
+0x76, 0xE0, 0x90, 0x04, 0x25, 0xF0, 0x90, 0x93, 0x77, 0xE0, 0x60, 0x06, 0x12, 0xD1, 0x97, 0x44,
+0x80, 0xF0, 0xAF, 0x05, 0x74, 0x20, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x54,
+0xC0, 0xF0, 0x12, 0xD1, 0x97, 0x54, 0xC0, 0xF0, 0x90, 0x93, 0x79, 0xE0, 0xFF, 0xAE, 0x05, 0x74,
+0x18, 0x2E, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xEF, 0xF0, 0x90, 0x00, 0x8B, 0xE0, 0xD3,
+0x94, 0x03, 0x74, 0x10, 0x40, 0x08, 0x12, 0xD2, 0x10, 0x74, 0x04, 0xF0, 0x80, 0x05, 0x12, 0xD2,
+0x10, 0xE4, 0xF0, 0xAF, 0x05, 0x12, 0xD2, 0x2B, 0xF5, 0x83, 0xE0, 0x54, 0x01, 0xFE, 0x90, 0x93,
+0x78, 0xE0, 0x25, 0xE0, 0x25, 0xE0, 0xFB, 0xEE, 0x44, 0x02, 0x4B, 0xFE, 0x12, 0xD2, 0x2B, 0xF5,
+0x83, 0xEE, 0xF0, 0x74, 0x11, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0x74, 0xFF, 0xF0,
+0x74, 0x29, 0x2F, 0x12, 0xCA, 0xF5, 0x54, 0xF7, 0xF0, 0xAE, 0x04, 0xAF, 0x05, 0xD0, 0xD0, 0x92,
+0xAF, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0xE4, 0xFE, 0xFD, 0xEF, 0xB4, 0x01, 0x0D,
+0xEB, 0xB4, 0x02, 0x03, 0x0D, 0x80, 0x06, 0xEB, 0xB4, 0x01, 0x02, 0x7D, 0x02, 0xAF, 0x06, 0xEF,
+0xC4, 0x54, 0xF0, 0x4D, 0xFF, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xE4, 0x90, 0x92, 0x81, 0xF0, 0xA3,
+0xF0, 0x7F, 0x83, 0x12, 0x7B, 0x51, 0x90, 0x92, 0x80, 0xEF, 0xF0, 0x7F, 0x83, 0x12, 0x7B, 0x51,
+0xAE, 0x07, 0x90, 0x92, 0x80, 0xE0, 0xFF, 0xB5, 0x06, 0x01, 0x22, 0xC3, 0x90, 0x92, 0x82, 0xE0,
+0x94, 0x64, 0x90, 0x92, 0x81, 0xE0, 0x94, 0x00, 0x40, 0x0D, 0x90, 0x01, 0xC0, 0xE0, 0x44, 0x40,
+0xF0, 0x90, 0x92, 0x80, 0xE0, 0xFF, 0x22, 0x90, 0x92, 0x81, 0xE4, 0x75, 0xF0, 0x01, 0x12, 0x07,
+0x0A, 0x80, 0xBE, 0x7E, 0x00, 0x7F, 0x01, 0x7D, 0x00, 0x7B, 0x01, 0x7A, 0x85, 0x79, 0xBC, 0x12,
+0x06, 0xDE, 0x90, 0x85, 0xBC, 0xE0, 0x54, 0xFD, 0xF0, 0xE4, 0x12, 0x95, 0xBF, 0xA3, 0x74, 0x0C,
+0xF0, 0x22, 0x12, 0x9F, 0xD9, 0x02, 0x9F, 0xED, 0x12, 0x9F, 0xD9, 0x02, 0xA7, 0xDE, 0x12, 0x7A,
+0x29, 0xEF, 0x70, 0x03, 0x12, 0x9E, 0x9E, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90,
+0x92, 0x8E, 0xEF, 0xF0, 0xA3, 0xED, 0xF0, 0x90, 0x84, 0xC3, 0xE0, 0x04, 0xF0, 0x90, 0x04, 0x1D,
+0xE0, 0x60, 0x37, 0x90, 0x05, 0x22, 0xE0, 0x90, 0x92, 0x92, 0xF0, 0x7D, 0x26, 0x12, 0xA7, 0x4B,
+0xEF, 0x64, 0x01, 0x70, 0x17, 0x31, 0x0E, 0xFB, 0x7D, 0x01, 0x12, 0x3A, 0xC2, 0x31, 0x23, 0xE0,
+0x20, 0xE0, 0x09, 0x90, 0x92, 0xA1, 0xE0, 0x20, 0xE0, 0x02, 0x31, 0x18, 0x90, 0x92, 0x92, 0xE0,
+0xFF, 0x7D, 0x27, 0x12, 0xA6, 0xF8, 0x31, 0x06, 0x80, 0x1F, 0x31, 0x06, 0x31, 0x0E, 0xFB, 0x90,
+0x93, 0x79, 0x74, 0x0A, 0xF0, 0x7D, 0x01, 0x12, 0xC7, 0x34, 0x31, 0x23, 0xE0, 0x20, 0xE0, 0x09,
+0x90, 0x92, 0xA1, 0xE0, 0x20, 0xE0, 0x02, 0x31, 0x18, 0x31, 0x39, 0x31, 0xF1, 0x74, 0x01, 0xF0,
+0xFF, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90, 0x92, 0x8E, 0xE0, 0xFF, 0x02, 0x5C, 0xA3, 0x90, 0x84,
+0xC8, 0xE0, 0xFF, 0x90, 0x92, 0x8F, 0xE0, 0x22, 0x90, 0x92, 0x90, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF,
+0x02, 0x50, 0xD7, 0x90, 0x92, 0x90, 0xEE, 0xF0, 0xFC, 0xA3, 0xEF, 0xF0, 0xFD, 0x90, 0x92, 0x8E,
+0xE0, 0xFF, 0x12, 0x65, 0x61, 0x90, 0x92, 0xA2, 0x22, 0x90, 0x04, 0x1F, 0x74, 0x20, 0xF0, 0x22,
+0xE4, 0x90, 0x92, 0x71, 0xF0, 0xA3, 0xF0, 0x90, 0x06, 0x32, 0xE0, 0x44, 0x20, 0xF0, 0x12, 0x75,
+0xE4, 0xEF, 0x64, 0x01, 0x60, 0x02, 0x21, 0xDB, 0x90, 0x88, 0xD9, 0xE0, 0xFF, 0x90, 0x93, 0x79,
+0x74, 0x0A, 0xF0, 0x7B, 0x08, 0x7D, 0x01, 0x12, 0xC7, 0x34, 0x90, 0x92, 0x6E, 0xEE, 0xF0, 0xA3,
+0xEF, 0xF0, 0x90, 0x92, 0x6E, 0xA3, 0x51, 0xE5, 0xFD, 0x74, 0x2C, 0x2E, 0x31, 0xE5, 0x90, 0x92,
+0x70, 0xEF, 0xF0, 0x90, 0x92, 0x6E, 0xA3, 0xE0, 0x24, 0x28, 0xF9, 0xE4, 0x34, 0xFC, 0xFA, 0x7B,
+0x01, 0xE4, 0xFD, 0x12, 0x52, 0x21, 0x90, 0x92, 0x70, 0xE0, 0xFF, 0x90, 0x92, 0x6F, 0xE0, 0x2F,
+0xFF, 0x90, 0x92, 0x6E, 0xE0, 0x34, 0x00, 0xCF, 0x24, 0x30, 0xCF, 0x34, 0x00, 0xFE, 0x90, 0x92,
+0x71, 0xF0, 0xA3, 0xEF, 0xF0, 0x51, 0xFE, 0x31, 0xDC, 0x90, 0x88, 0xD9, 0xE0, 0xFB, 0xE4, 0xFF,
+0x12, 0x15, 0x44, 0x31, 0xDC, 0x90, 0x88, 0xD5, 0xE0, 0xFB, 0x7F, 0x11, 0x12, 0x15, 0x44, 0x31,
+0x39, 0x90, 0x88, 0x88, 0xE4, 0x75, 0xF0, 0x01, 0x12, 0x07, 0x0A, 0x22, 0x90, 0x92, 0x71, 0xE0,
+0xFC, 0xA3, 0xE0, 0xFD, 0x22, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0xFB, 0x02, 0x5D,
+0x98, 0x90, 0x84, 0xBF, 0xA3, 0xE0, 0x24, 0x7F, 0xF5, 0x82, 0xE4, 0x34, 0x82, 0xF5, 0x83, 0x22,
+0x90, 0x92, 0x94, 0x51, 0x9A, 0x90, 0x92, 0x98, 0xF0, 0x7D, 0x09, 0x12, 0x55, 0x36, 0xEF, 0x64,
+0x06, 0x70, 0x2A, 0x51, 0x91, 0x7D, 0x14, 0x12, 0x55, 0x36, 0xEF, 0x70, 0x20, 0x51, 0x91, 0x7D,
+0x15, 0x12, 0x55, 0x36, 0xEF, 0x64, 0x50, 0x70, 0x14, 0x51, 0x91, 0x7D, 0x21, 0x12, 0x55, 0x36,
+0xEF, 0x20, 0xE0, 0x03, 0x30, 0xE2, 0x06, 0x90, 0x92, 0x98, 0x74, 0x01, 0xF0, 0x90, 0x86, 0x73,
+0xE0, 0x13, 0x13, 0x54, 0x3F, 0x30, 0xE0, 0x3F, 0x51, 0x91, 0x7D, 0x09, 0x12, 0x55, 0x36, 0xEF,
+0x64, 0x11, 0x70, 0x33, 0x90, 0x92, 0x95, 0xE0, 0x24, 0x14, 0xFF, 0x90, 0x92, 0x94, 0xE0, 0x34,
+0x00, 0xFE, 0x90, 0x92, 0x96, 0xF0, 0xA3, 0xEF, 0xF0, 0x7D, 0x02, 0x12, 0x55, 0x36, 0xEF, 0x70,
+0x16, 0x90, 0x92, 0x96, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x7D, 0x03, 0x12, 0x55, 0x36, 0xBF, 0x89,
+0x06, 0x90, 0x92, 0x98, 0x74, 0x01, 0xF0, 0x90, 0x92, 0x98, 0xE0, 0xFF, 0x31, 0xF1, 0xEF, 0xF0,
+0x22, 0x90, 0x92, 0x94, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x22, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0xE4,
+0x22, 0x90, 0x92, 0x4B, 0x51, 0x9A, 0xA3, 0xF0, 0x90, 0x92, 0x4D, 0xE0, 0xFD, 0xC3, 0x94, 0x04,
+0x50, 0x27, 0x90, 0x92, 0x4C, 0xE0, 0x24, 0x10, 0x51, 0xDC, 0x12, 0x55, 0x36, 0x90, 0x92, 0x4D,
+0xE0, 0x24, 0x82, 0xF5, 0x82, 0xE4, 0x34, 0x88, 0xF5, 0x83, 0xE0, 0x6F, 0x60, 0x03, 0x7F, 0x00,
+0x22, 0x90, 0x92, 0x4D, 0xE0, 0x04, 0xF0, 0x80, 0xCF, 0x7F, 0x01, 0x22, 0xFF, 0x90, 0x92, 0x4B,
+0xE0, 0x34, 0x00, 0xFE, 0x22, 0xE0, 0xFE, 0x24, 0x28, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83,
+0xE0, 0xFF, 0x74, 0x29, 0x2E, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x22, 0xAD, 0x07,
+0x90, 0x88, 0x80, 0xE4, 0x75, 0xF0, 0x01, 0x12, 0x07, 0x0A, 0x90, 0x88, 0x80, 0xE0, 0xFF, 0xAE,
+0x05, 0x74, 0x04, 0x2E, 0x12, 0xAF, 0xBA, 0xEF, 0xF0, 0x90, 0x88, 0x80, 0xA3, 0xE0, 0xFF, 0x74,
+0x05, 0x2E, 0x12, 0xAF, 0x6A, 0xEF, 0xF0, 0x22, 0x90, 0x92, 0x4B, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0,
+0x24, 0x16, 0xFF, 0xE4, 0x3E, 0xFE, 0xE4, 0xFD, 0x12, 0x55, 0x36, 0x90, 0x88, 0x86, 0xA3, 0xE0,
+0xB5, 0x07, 0x19, 0x90, 0x92, 0x4C, 0xE0, 0x24, 0x16, 0x51, 0xDC, 0x7D, 0x01, 0x12, 0x55, 0x36,
+0xEF, 0xFD, 0x90, 0x88, 0x86, 0xE0, 0x6D, 0x70, 0x01, 0xE4, 0x60, 0x03, 0x7F, 0x00, 0x22, 0x7F,
+0x01, 0x22, 0x7E, 0x00, 0x7F, 0xAC, 0x7D, 0x00, 0x7B, 0x01, 0x7A, 0x85, 0x79, 0xC1, 0x12, 0x06,
+0xDE, 0x91, 0x2F, 0x12, 0x06, 0xDE, 0x90, 0x85, 0xC4, 0x74, 0x02, 0xF0, 0x90, 0x85, 0xCB, 0x14,
+0xF0, 0xA3, 0xF0, 0xA3, 0x74, 0x0A, 0xF0, 0x90, 0x85, 0xD1, 0xE4, 0xF0, 0xA3, 0x74, 0x02, 0x91,
+0x1F, 0x91, 0x3C, 0xE4, 0xFD, 0xFF, 0x12, 0x57, 0x82, 0x7D, 0x0C, 0x7F, 0x02, 0x12, 0x57, 0x82,
+0x7D, 0x0C, 0x7F, 0x01, 0x12, 0x57, 0x82, 0x90, 0x84, 0xC5, 0xE0, 0xFF, 0xB4, 0x01, 0x08, 0x90,
+0x85, 0xD0, 0x74, 0xDD, 0xF0, 0x80, 0x0F, 0xEF, 0x90, 0x85, 0xD0, 0xB4, 0x03, 0x05, 0x74, 0xD4,
+0xF0, 0x80, 0x03, 0x74, 0x40, 0xF0, 0x7F, 0x2C, 0x12, 0x7B, 0x51, 0xEF, 0x54, 0x0F, 0xFF, 0xBF,
+0x05, 0x08, 0x90, 0x85, 0xFB, 0x74, 0x02, 0xF0, 0x80, 0x05, 0xE4, 0x90, 0x85, 0xFB, 0xF0, 0x90,
+0x86, 0x6D, 0x74, 0x03, 0xF0, 0xA3, 0x74, 0x0F, 0xF0, 0xA3, 0xE0, 0x54, 0x01, 0x44, 0x28, 0xF0,
+0xA3, 0x74, 0x07, 0x91, 0x1F, 0xE4, 0x90, 0x85, 0xD7, 0xF0, 0xA3, 0xF0, 0x7F, 0x01, 0x12, 0x69,
+0x33, 0x90, 0x05, 0x58, 0x74, 0x02, 0xF0, 0x90, 0x06, 0x04, 0xE0, 0x54, 0x7F, 0xF0, 0x90, 0x06,
+0x0A, 0xE0, 0x54, 0xF8, 0xF0, 0x90, 0x05, 0x22, 0xE4, 0xF0, 0x90, 0x86, 0x71, 0xF0, 0x22, 0xF0,
+0x90, 0x85, 0xFB, 0xE0, 0x24, 0x04, 0x90, 0x85, 0xDD, 0xF0, 0xA3, 0x74, 0x0A, 0xF0, 0x22, 0x7E,
+0x00, 0x7F, 0x04, 0x7D, 0x00, 0x7B, 0x01, 0x7A, 0x92, 0x79, 0x9C, 0x22, 0x90, 0x93, 0x16, 0x74,
+0x04, 0xF0, 0x14, 0xF0, 0xA3, 0xF0, 0xA3, 0xE4, 0xF0, 0xA3, 0x74, 0x64, 0xF0, 0xA3, 0x74, 0x05,
+0xF0, 0xA3, 0xF0, 0x22, 0x90, 0x93, 0x87, 0x12, 0x87, 0x79, 0x12, 0x71, 0x54, 0x90, 0x85, 0xC5,
+0xE0, 0xFF, 0x12, 0x60, 0xD0, 0x90, 0x85, 0xC5, 0xE0, 0x60, 0x15, 0x90, 0x93, 0x87, 0x12, 0x87,
+0x70, 0x12, 0x8D, 0x96, 0x54, 0x0F, 0xFF, 0x12, 0x8C, 0x7A, 0xFD, 0x12, 0x6A, 0xB8, 0x91, 0x81,
+0x22, 0x90, 0x85, 0xD7, 0xE0, 0xFF, 0xA3, 0xE0, 0xFD, 0x90, 0x85, 0xDE, 0xE0, 0xFB, 0x02, 0x51,
+0x7D, 0xE4, 0x90, 0x92, 0x6E, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0x90, 0x92, 0xE5, 0x12, 0x87, 0x58,
+0x90, 0x92, 0xE1, 0x12, 0x87, 0x64, 0xC3, 0x12, 0x04, 0xB4, 0x40, 0x46, 0x90, 0x85, 0xC1, 0xE0,
+0x90, 0x92, 0xE5, 0x30, 0xE0, 0x0F, 0xB1, 0xFA, 0x90, 0x85, 0xFB, 0xE0, 0x24, 0x04, 0x2F, 0xFF,
+0x90, 0x93, 0x16, 0x80, 0x05, 0xB1, 0xFA, 0x90, 0x93, 0x17, 0xE0, 0xFE, 0xC3, 0xEF, 0x9E, 0x90,
+0x92, 0x6F, 0xF0, 0x90, 0x92, 0x6F, 0xE0, 0xFF, 0xC3, 0x94, 0x2D, 0x50, 0x15, 0x74, 0xE9, 0x2F,
+0xD1, 0x17, 0xE0, 0x04, 0xF0, 0x90, 0x85, 0xDB, 0xE0, 0x04, 0xF0, 0xE0, 0xFD, 0x7F, 0xFE, 0x12,
+0x7B, 0x3E, 0x90, 0x85, 0xDB, 0xE0, 0xFF, 0xD3, 0x90, 0x93, 0x19, 0xE0, 0x9F, 0x90, 0x93, 0x18,
+0xE0, 0x94, 0x00, 0x40, 0x02, 0xA1, 0xC6, 0xB1, 0xD8, 0xB1, 0xCF, 0x50, 0x1C, 0xB1, 0xE2, 0x90,
+0x92, 0x70, 0xE0, 0xD3, 0x9F, 0x40, 0x0A, 0x90, 0x92, 0x6E, 0xE0, 0x90, 0x92, 0x71, 0xF0, 0x80,
+0x08, 0x90, 0x92, 0x6E, 0xE0, 0x04, 0xF0, 0x80, 0xE0, 0xB1, 0xD8, 0xB1, 0xCF, 0x50, 0x2C, 0xB1,
+0xE2, 0xC3, 0x90, 0x93, 0x19, 0xE0, 0x9F, 0xFF, 0x90, 0x93, 0x18, 0xE0, 0x94, 0x00, 0xFE, 0x90,
+0x92, 0x70, 0xE0, 0xD3, 0x9F, 0xE4, 0x9E, 0x40, 0x0A, 0x90, 0x92, 0x6E, 0xE0, 0x90, 0x92, 0x72,
+0xF0, 0x80, 0x08, 0x90, 0x92, 0x6E, 0xE0, 0x04, 0xF0, 0x80, 0xD0, 0x90, 0x92, 0x71, 0xE0, 0x90,
+0x85, 0xE0, 0xF0, 0x90, 0x92, 0x72, 0xE0, 0x90, 0x85, 0xE1, 0xB1, 0xC7, 0x94, 0x0A, 0x40, 0x0A,
+0xEF, 0x24, 0xF6, 0x90, 0x85, 0xD8, 0xF0, 0xE4, 0x80, 0x09, 0xE4, 0x90, 0x85, 0xD8, 0xB1, 0xC7,
+0x74, 0x0A, 0x9F, 0x90, 0x85, 0xD7, 0xF0, 0x90, 0x85, 0xE0, 0xE0, 0xFF, 0xA3, 0xE0, 0xC3, 0x9F,
+0x90, 0x85, 0xDE, 0xF0, 0x90, 0x85, 0xC1, 0xE0, 0x30, 0xE0, 0x05, 0x90, 0x93, 0x16, 0x80, 0x03,
+0x90, 0x93, 0x17, 0xE0, 0xFF, 0x90, 0x85, 0xDE, 0xE0, 0x2F, 0x04, 0xF0, 0x90, 0x85, 0xDE, 0xE0,
+0xC3, 0x94, 0x0A, 0x50, 0x03, 0x74, 0x0A, 0xF0, 0x90, 0x85, 0xDE, 0xE0, 0x24, 0x02, 0xF0, 0x91,
+0x81, 0xE4, 0xFF, 0x12, 0x69, 0x33, 0x22, 0xF0, 0x90, 0x85, 0xE0, 0xE0, 0xFF, 0xC3, 0x22, 0x90,
+0x92, 0x6E, 0xE0, 0xFF, 0xC3, 0x94, 0x2D, 0x22, 0xE4, 0x90, 0x92, 0x70, 0xF0, 0x90, 0x92, 0x6E,
+0xF0, 0x22, 0x74, 0xE9, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x92, 0xF5, 0x83, 0xE0, 0xFF, 0x90, 0x92,
+0x70, 0xE0, 0x2F, 0xF0, 0x90, 0x93, 0x1A, 0xE0, 0xFF, 0x22, 0x12, 0x87, 0x64, 0x90, 0x92, 0xE1,
+0x12, 0x87, 0x58, 0x12, 0x87, 0x30, 0x78, 0x0A, 0x12, 0x04, 0xC5, 0x90, 0x85, 0xDD, 0xE0, 0xFE,
+0xC3, 0x74, 0x0A, 0x9E, 0x2F, 0xFF, 0x22, 0xF5, 0x82, 0xE4, 0x34, 0x92, 0xF5, 0x83, 0x22, 0xE4,
+0xFE, 0x74, 0xE9, 0x2E, 0xD1, 0x17, 0xE4, 0xF0, 0x0E, 0xEE, 0xB4, 0x2D, 0xF4, 0xE4, 0x90, 0x85,
+0xDC, 0xF0, 0x90, 0x85, 0xDB, 0xF0, 0x90, 0x85, 0xDF, 0xF0, 0xEF, 0xB4, 0x01, 0x07, 0xA3, 0x74,
+0x2D, 0xF0, 0xE4, 0xA3, 0xF0, 0x22, 0xAC, 0x07, 0x90, 0x92, 0xDC, 0xE0, 0xF9, 0x30, 0xE0, 0x02,
+0xC1, 0xFA, 0x90, 0x85, 0xC1, 0xE0, 0x30, 0xE0, 0x16, 0x90, 0x85, 0xFB, 0xE0, 0x24, 0x04, 0x90,
+0x85, 0xDA, 0xF0, 0x90, 0x85, 0xFB, 0xE0, 0x24, 0x03, 0x90, 0x85, 0xD9, 0xF0, 0x80, 0x0D, 0x90,
+0x85, 0xDA, 0x74, 0x02, 0xF0, 0x90, 0x85, 0xD9, 0x14, 0xF0, 0x0B, 0x0B, 0x90, 0x85, 0xD9, 0xE0,
+0xFA, 0x90, 0x85, 0xD8, 0xE0, 0xD3, 0x9A, 0x50, 0x0E, 0x90, 0x85, 0xCD, 0xEB, 0xF0, 0x90, 0x85,
+0xDA, 0xE0, 0xC3, 0x9D, 0x2C, 0x80, 0x11, 0xC3, 0xED, 0x9A, 0x2B, 0x90, 0x85, 0xCD, 0xF0, 0x90,
+0x85, 0xD9, 0xE0, 0xFF, 0xA3, 0xE0, 0xC3, 0x9F, 0x90, 0x85, 0xDD, 0xF0, 0x90, 0x85, 0xDA, 0xE0,
+0xFF, 0x24, 0x0A, 0xFD, 0xE4, 0x33, 0xFC, 0x90, 0x85, 0xDD, 0xF1, 0x02, 0x98, 0x40, 0x04, 0xEF,
+0x24, 0x0A, 0xF0, 0x90, 0x85, 0xDD, 0xE0, 0xFF, 0x24, 0x23, 0xFD, 0xE4, 0x33, 0xFC, 0x90, 0x85,
+0xCD, 0xF1, 0x02, 0x98, 0x40, 0x04, 0xEF, 0x24, 0x23, 0xF0, 0x90, 0x85, 0xDD, 0xE0, 0xFF, 0x7E,
+0x00, 0x90, 0x85, 0xD1, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0x90, 0x05, 0x58, 0xE0, 0x6F, 0x70, 0x01,
+0xE4, 0x60, 0x02, 0xF1, 0x0C, 0xE9, 0x54, 0xFD, 0x80, 0x03, 0xE9, 0x44, 0x02, 0x90, 0x92, 0xDC,
+0xF0, 0x22, 0xE0, 0xD3, 0x9D, 0xEC, 0x64, 0x80, 0xF8, 0x74, 0x80, 0x22, 0x90, 0x85, 0xD1, 0xA3,
+0xE0, 0x90, 0x05, 0x58, 0xF0, 0x22, 0x12, 0xBE, 0xC9, 0x40, 0x25, 0x90, 0x85, 0xDF, 0xE0, 0x04,
+0xF0, 0x90, 0x93, 0x1B, 0xE0, 0xFF, 0x90, 0x85, 0xDF, 0xE0, 0xD3, 0x9F, 0x50, 0x12, 0x90, 0x85,
+0xD7, 0xE0, 0x04, 0x12, 0x9E, 0x0A, 0x90, 0x85, 0xDE, 0xF0, 0xFB, 0xF1, 0x41, 0x12, 0x51, 0x7D,
+0x22, 0x90, 0x85, 0xD7, 0xE0, 0xFF, 0xA3, 0xE0, 0xFD, 0x22, 0x90, 0x92, 0x9C, 0xE0, 0x30, 0xE0,
+0x0A, 0x90, 0x01, 0x3B, 0xE0, 0x30, 0xE4, 0x03, 0x12, 0xA7, 0xAD, 0x22, 0x90, 0x92, 0x93, 0xEF,
+0xF0, 0x90, 0x84, 0xC5, 0xE0, 0x64, 0x02, 0x70, 0x1F, 0x90, 0x92, 0x93, 0xE0, 0xFD, 0x64, 0x01,
+0x70, 0x32, 0x12, 0xB7, 0x21, 0x12, 0x8E, 0x87, 0x30, 0xE0, 0x09, 0x90, 0x01, 0x4D, 0xE0, 0x64,
+0x80, 0xF0, 0x80, 0x20, 0xAF, 0x05, 0x80, 0x19, 0x90, 0x01, 0x00, 0x74, 0xFF, 0xF0, 0x7F, 0x64,
+0x7E, 0x00, 0x12, 0x7C, 0x9F, 0x90, 0x06, 0x90, 0xE0, 0x44, 0x01, 0xF0, 0x90, 0x92, 0x93, 0xE0,
+0xFF, 0x12, 0x2A, 0x87, 0x90, 0x88, 0xE1, 0xE0, 0x54, 0xFE, 0xF0, 0x02, 0xAF, 0xCA, 0xD3, 0x10,
+0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0xE4, 0xFD, 0x7F, 0x8F, 0x12, 0x7B, 0x3E, 0xD0, 0xD0, 0x92, 0xAF,
+0x22, 0xF1, 0xAE, 0x12, 0x77, 0x89, 0x90, 0x01, 0x3F, 0x74, 0x04, 0xF0, 0x90, 0x84, 0xC5, 0xE0,
+0xFF, 0xB4, 0x01, 0x07, 0x90, 0xFD, 0x00, 0xE0, 0x54, 0xEF, 0xF0, 0xEF, 0xB4, 0x01, 0x07, 0x90,
+0xFE, 0x10, 0xE0, 0x54, 0xFB, 0xF0, 0x22, 0x12, 0xB7, 0xDB, 0x90, 0x88, 0x7C, 0xE0, 0x70, 0x02,
+0xA3, 0xE0, 0x60, 0x24, 0xE4, 0x90, 0x92, 0x4E, 0xF0, 0x12, 0xD0, 0x2C, 0x50, 0x1D, 0x11, 0x6E,
0x24, 0x8A, 0xF5, 0x82, 0xE4, 0x34, 0x88, 0xF5, 0x83, 0xE0, 0x6F, 0x60, 0x03, 0x7F, 0x00, 0x22,
-0x90, 0x92, 0x36, 0xE0, 0x04, 0xF0, 0x80, 0xE2, 0x7F, 0x00, 0x22, 0x90, 0x06, 0x32, 0xE0, 0x44,
-0x40, 0xF0, 0xE4, 0x90, 0x88, 0x88, 0xF0, 0xA3, 0xF0, 0x7F, 0x01, 0x22, 0x90, 0x92, 0x33, 0xEE,
-0xF0, 0xA3, 0xEF, 0xF0, 0x22, 0x90, 0x92, 0x36, 0xE0, 0xFD, 0xC3, 0x94, 0x02, 0x22, 0xD1, 0xCC,
-0xA3, 0xED, 0xF0, 0xE4, 0xA3, 0xF0, 0xD1, 0xD5, 0x50, 0x17, 0xF1, 0x19, 0x24, 0xAA, 0xF5, 0x82,
-0xE4, 0x34, 0x88, 0xF5, 0x83, 0xE0, 0xB5, 0x07, 0x1D, 0x90, 0x92, 0x36, 0xE0, 0x04, 0xF0, 0x80,
-0xE5, 0x90, 0x06, 0x32, 0xE0, 0x44, 0x80, 0xF0, 0x90, 0x01, 0xC7, 0x74, 0x30, 0xF0, 0x7F, 0x01,
-0x12, 0x5F, 0xE9, 0x7F, 0x01, 0x22, 0x7F, 0x00, 0x22, 0x90, 0x92, 0x33, 0xE0, 0xFE, 0xA3, 0xE0,
-0xFF, 0xED, 0x24, 0x1C, 0xFD, 0x12, 0x55, 0x36, 0x90, 0x92, 0x36, 0xE0, 0x22, 0xD1, 0xCC, 0x24,
-0x16, 0xFF, 0xE4, 0x3E, 0xFE, 0xE4, 0xFD, 0x12, 0x55, 0x36, 0x90, 0x88, 0x86, 0xA3, 0xE0, 0xB5,
-0x07, 0x19, 0x90, 0x92, 0x34, 0xE0, 0x24, 0x16, 0xF1, 0x61, 0x7D, 0x01, 0x12, 0x55, 0x36, 0xEF,
-0xFD, 0x90, 0x88, 0x86, 0xE0, 0x6D, 0x70, 0x01, 0xE4, 0x60, 0x03, 0x7F, 0x00, 0x22, 0x7F, 0x01,
-0x22, 0xFF, 0x90, 0x92, 0x33, 0xE0, 0x34, 0x00, 0xFE, 0x22, 0xD1, 0xCC, 0xE4, 0xA3, 0xF0, 0x90,
-0x92, 0x35, 0xE0, 0xFD, 0xC3, 0x94, 0x04, 0x50, 0x27, 0x90, 0x92, 0x34, 0xE0, 0x24, 0x10, 0xF1,
-0x61, 0x12, 0x55, 0x36, 0x90, 0x92, 0x35, 0xE0, 0x24, 0x82, 0xF5, 0x82, 0xE4, 0x34, 0x88, 0xF5,
-0x83, 0xE0, 0x6F, 0x60, 0x03, 0x7F, 0x00, 0x22, 0x90, 0x92, 0x35, 0xE0, 0x04, 0xF0, 0x80, 0xCF,
-0x7F, 0x01, 0x22, 0xE5, 0x64, 0x25, 0xE0, 0x24, 0xF5, 0xF5, 0x82, 0xE4, 0x34, 0x82, 0xF5, 0x83,
-0xE4, 0x93, 0xFF, 0x74, 0x01, 0x93, 0x90, 0x92, 0x41, 0xCF, 0xF0, 0xA3, 0xEF, 0xF0, 0x90, 0x92,
-0x3F, 0xE5, 0x66, 0xF0, 0xA3, 0xE5, 0x67, 0xF0, 0x22, 0x90, 0x05, 0x63, 0xE0, 0x90, 0x92, 0x94,
-0xF0, 0x90, 0x05, 0x62, 0xE0, 0x90, 0x92, 0x95, 0xF0, 0x90, 0x05, 0x61, 0xE0, 0x90, 0x92, 0x96,
-0xF0, 0x90, 0x05, 0x60, 0xE0, 0x90, 0x92, 0x97, 0xF0, 0x90, 0x92, 0x8B, 0xE0, 0x44, 0x01, 0xF0,
-0x22, 0x90, 0x92, 0x6D, 0xEE, 0xF0, 0xFC, 0xA3, 0xEF, 0xF0, 0xFD, 0x90, 0x92, 0x6B, 0xE0, 0xFF,
-0x12, 0x65, 0x61, 0x90, 0x92, 0x6D, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x02, 0x50, 0xD7, 0x90, 0x01,
-0x34, 0x74, 0x40, 0xF0, 0xFD, 0xE4, 0xFF, 0x12, 0x7C, 0xA9, 0x43, 0x5E, 0x08, 0x22, 0xE5, 0x64,
-0x25, 0xE0, 0x24, 0xF5, 0xF5, 0x82, 0xE4, 0x34, 0x82, 0xF5, 0x83, 0x22, 0xC4, 0x54, 0xF0, 0x24,
-0x01, 0xF5, 0x82, 0xE4, 0x34, 0x81, 0xF5, 0x83, 0xE0, 0x22, 0xE0, 0x90, 0x01, 0xBA, 0xF0, 0x90,
-0x85, 0xC7, 0xE0, 0x90, 0x01, 0xBB, 0x22, 0x12, 0x02, 0xF6, 0xFF, 0x54, 0x01, 0xFE, 0x22, 0x74,
-0x21, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x22, 0xF0, 0x74, 0xCC, 0x2D, 0xF5,
-0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83, 0x22, 0x74, 0xBC, 0x25, 0x62, 0xF5, 0x82, 0xE4, 0x34, 0x8F,
-0xF5, 0x83, 0x22, 0x90, 0x92, 0x41, 0xE4, 0xF0, 0xA3, 0x22, 0x90, 0x92, 0x07, 0x12, 0x87, 0x79,
-0x02, 0x02, 0xF6, 0x90, 0x92, 0x33, 0x12, 0x87, 0x70, 0x02, 0x03, 0xED, 0x2E, 0xF5, 0x82, 0xE4,
-0x34, 0xFC, 0xF5, 0x83, 0x22, 0xE0, 0xFF, 0xA3, 0xE0, 0x90, 0x92, 0x41, 0xCF, 0x22, 0x54, 0x08,
-0xFE, 0xEF, 0x54, 0xF7, 0x4E, 0x22, 0x54, 0x20, 0xFE, 0xEF, 0x54, 0xDF, 0x4E, 0x22, 0x54, 0x80,
-0xFE, 0xEF, 0x54, 0x7F, 0x4E, 0x22, 0x12, 0x02, 0xF6, 0x13, 0x13, 0x54, 0x3F, 0x22, 0xE5, 0x68,
-0xF0, 0xA3, 0xE5, 0x69, 0xF0, 0x22, 0x90, 0x00, 0x02, 0x12, 0x04, 0x18, 0xFF, 0x22, 0x90, 0x85,
-0xC1, 0xE0, 0x54, 0xF7, 0xF0, 0x22, 0x8B, 0xAC,
+0x90, 0x92, 0x4E, 0xE0, 0x04, 0xF0, 0x80, 0xE1, 0x7F, 0x00, 0x22, 0x90, 0x06, 0x32, 0xE0, 0x44,
+0x40, 0xF0, 0xE4, 0x90, 0x88, 0x88, 0xF0, 0xA3, 0xF0, 0x7F, 0x01, 0x22, 0x90, 0x92, 0x4E, 0xE0,
+0xFD, 0xC3, 0x94, 0x02, 0x22, 0x12, 0xB7, 0xDB, 0xE4, 0xA3, 0xF0, 0x11, 0x2C, 0x50, 0x17, 0x11,
+0x6E, 0x24, 0xAA, 0xF5, 0x82, 0xE4, 0x34, 0x88, 0xF5, 0x83, 0xE0, 0xB5, 0x07, 0x1D, 0x90, 0x92,
+0x4E, 0xE0, 0x04, 0xF0, 0x80, 0xE5, 0x90, 0x06, 0x32, 0xE0, 0x44, 0x80, 0xF0, 0x90, 0x01, 0xC7,
+0x74, 0x30, 0xF0, 0x7F, 0x01, 0x12, 0x5F, 0xE9, 0x7F, 0x01, 0x22, 0x7F, 0x00, 0x22, 0x90, 0x92,
+0x4B, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0xED, 0x24, 0x1C, 0xFD, 0x12, 0x55, 0x36, 0x90, 0x92, 0x4E,
+0xE0, 0x22, 0x90, 0x93, 0x6B, 0xA3, 0xE0, 0xFF, 0x90, 0x93, 0x79, 0x74, 0x03, 0xF0, 0x7B, 0x06,
+0x7D, 0x01, 0x12, 0xC7, 0x34, 0x90, 0x93, 0x6F, 0xEE, 0xF0, 0xFC, 0xA3, 0xEF, 0xF0, 0xFD, 0x90,
+0x93, 0x6E, 0xE0, 0xFF, 0x74, 0x10, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xEF, 0xF0,
+0x90, 0x93, 0x6D, 0xE0, 0xFF, 0x02, 0x65, 0x61, 0xE5, 0x65, 0x25, 0xE0, 0x24, 0xF5, 0xF5, 0x82,
+0xE4, 0x34, 0x82, 0xF5, 0x83, 0xE4, 0x93, 0xFF, 0x74, 0x01, 0x93, 0x90, 0x92, 0x59, 0xCF, 0xF0,
+0xA3, 0xEF, 0xF0, 0x90, 0x92, 0x57, 0xE5, 0x67, 0xF0, 0xA3, 0xE5, 0x68, 0xF0, 0x22, 0x90, 0x05,
+0x63, 0xE0, 0x90, 0x92, 0xE5, 0xF0, 0x90, 0x05, 0x62, 0xE0, 0x90, 0x92, 0xE6, 0xF0, 0x90, 0x05,
+0x61, 0xE0, 0x90, 0x92, 0xE7, 0xF0, 0x90, 0x05, 0x60, 0xE0, 0x90, 0x92, 0xE8, 0xF0, 0x90, 0x92,
+0xDC, 0xE0, 0x44, 0x01, 0xF0, 0x22, 0xEB, 0x75, 0xF0, 0x0E, 0xA4, 0x24, 0xA9, 0xF5, 0x82, 0xE4,
+0x34, 0x92, 0x22, 0x75, 0xF0, 0x0E, 0xA4, 0x24, 0xA7, 0xF5, 0x82, 0xE4, 0x34, 0x92, 0xF5, 0x83,
+0x22, 0x75, 0xF0, 0x08, 0xA4, 0x24, 0x00, 0xF5, 0x82, 0xE4, 0x34, 0x82, 0xF5, 0x83, 0x22, 0x74,
+0x1D, 0x25, 0x6F, 0xF5, 0x82, 0xE4, 0x34, 0x93, 0xF5, 0x83, 0x22, 0x75, 0xF0, 0x12, 0xE5, 0x63,
+0x90, 0x89, 0x42, 0x12, 0x05, 0x28, 0xE0, 0x22, 0x75, 0xF0, 0x12, 0xE5, 0x63, 0x90, 0x89, 0x40,
+0x12, 0x05, 0x28, 0xE0, 0x22, 0x74, 0xBC, 0x25, 0x79, 0xF5, 0x82, 0xE4, 0x34, 0x90, 0xF5, 0x83,
+0xE0, 0x22, 0xE0, 0x54, 0x03, 0x90, 0x91, 0x0B, 0xF0, 0x7B, 0x01, 0xAF, 0x79, 0x02, 0x27, 0x3D,
+0xC4, 0x54, 0xF0, 0x24, 0x01, 0xF5, 0x82, 0xE4, 0x34, 0x81, 0xF5, 0x83, 0xE0, 0x22, 0xE0, 0x90,
+0x01, 0xBA, 0xF0, 0x90, 0x85, 0xC7, 0xE0, 0x90, 0x01, 0xBB, 0x22, 0xE5, 0x65, 0x25, 0xE0, 0x24,
+0xF5, 0xF5, 0x82, 0xE4, 0x34, 0x82, 0x22, 0x74, 0x21, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5,
+0x83, 0xE0, 0x22, 0x12, 0x05, 0x28, 0xE0, 0xFC, 0xA3, 0xE0, 0xF5, 0x82, 0x8C, 0x83, 0x22, 0xF0,
+0x74, 0xCC, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83, 0x22, 0x74, 0xBC, 0x25, 0x63, 0xF5,
+0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83, 0x22, 0x90, 0x92, 0x5B, 0xE4, 0xF0, 0xA3, 0x22, 0x90, 0x92,
+0x59, 0xE4, 0xF0, 0xA3, 0x22, 0x90, 0x00, 0x06, 0x02, 0x04, 0x18, 0x90, 0x00, 0x08, 0x02, 0x04,
+0x18, 0x90, 0x92, 0x9D, 0xE0, 0x14, 0x90, 0x92, 0x9F, 0xF0, 0x22, 0xFE, 0x54, 0x03, 0xFD, 0xEE,
+0x13, 0x13, 0x54, 0x07, 0x22, 0x90, 0x92, 0xA2, 0xE0, 0xFE, 0xC3, 0x13, 0x54, 0x07, 0x22, 0x90,
+0x93, 0x75, 0xE0, 0xFF, 0x90, 0x93, 0x73, 0xE0, 0x22, 0x8B, 0x5B, 0x8A, 0x5C, 0x89, 0x5D, 0x22,
+0x2E, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0x22, 0x90, 0x92, 0x9E, 0xE0, 0x90, 0x05, 0x73,
+0xF0, 0x22, 0x90, 0x85, 0xCB, 0xE0, 0x90, 0x05, 0x73, 0xF0, 0x22, 0x74, 0x12, 0x2F, 0xF5, 0x82,
+0xE4, 0x34, 0xFC, 0x22, 0x12, 0x02, 0xF6, 0x13, 0x13, 0x54, 0x3F, 0x22, 0x90, 0x85, 0xC9, 0xE0,
+0x44, 0x10, 0xF0, 0x22, 0xF9, 0xE4, 0x3A, 0xFA, 0x02, 0x02, 0xF6, 0x7D, 0x05, 0x7F, 0x01, 0x02,
+0x96, 0x06, 0xE5, 0x69, 0xF0, 0xA3, 0xE5, 0x6A, 0xF0, 0x22, 0x90, 0x00, 0x02, 0x12, 0x04, 0x18,
+0xFF, 0x22, 0x7D, 0x05, 0x7F, 0x04, 0x02, 0x96, 0x06, 0x90, 0x85, 0xC1, 0xE0, 0x54, 0xF7, 0xF0,
+0x22, 0xFF, 0x12, 0x02, 0xF6, 0xFE, 0x54, 0x0F, 0x22, 0x00, 0xF8, 0x34,
};
-u4Byte ArrayLength_MP_8188F_FW_WoWLAN = 18680;
+u4Byte ArrayLength_MP_8188F_FW_WoWLAN = 21148;
void
diff --git a/rtl8188FU/hal/phydm/rtl8188f/halhwimg8188f_mac.c b/rtl8188FU/hal/phydm/rtl8188f/halhwimg8188f_mac.c
index b35376b..7ae319d 100755
--- a/rtl8188FU/hal/phydm/rtl8188f/halhwimg8188f_mac.c
+++ b/rtl8188FU/hal/phydm/rtl8188f/halhwimg8188f_mac.c
@@ -281,7 +281,7 @@ ODM_ReadAndConfig_MP_8188F_MAC_REG(
u4Byte
ODM_GetVersion_MP_8188F_MAC_REG(void)
{
- return 24;
+ return 28;
}
#endif /* end of HWIMG_SUPPORT*/
diff --git a/rtl8188FU/hal/phydm/rtl8188f/halhwimg8188f_rf.c b/rtl8188FU/hal/phydm/rtl8188f/halhwimg8188f_rf.c
index c8b39dd..0221806 100755
--- a/rtl8188FU/hal/phydm/rtl8188f/halhwimg8188f_rf.c
+++ b/rtl8188FU/hal/phydm/rtl8188f/halhwimg8188f_rf.c
@@ -124,6 +124,11 @@ u4Byte Array_MP_8188F_RadioA[] = {
0x008, 0x00008400,
0x018, 0x00000407,
0x019, 0x00000012,
+ 0x80000400, 0x00000000, 0x40000000, 0x00000000,
+ 0x01B, 0x00000C6C,
+ 0xA0000000, 0x00000000,
+ 0x01B, 0x00001C6C,
+ 0xB0000000, 0x00000000,
0x01E, 0x00080009,
0x01F, 0x00000880,
0x02F, 0x0001A060,
@@ -158,11 +163,19 @@ u4Byte Array_MP_8188F_RadioA[] = {
0x0EF, 0x000001A0,
0x81000000, 0x00000000, 0x40000000, 0x00000000,
0x051, 0x000E8231,
- 0x052, 0x000FAC88,
- 0x053, 0x00000141,
0xA0000000, 0x00000000,
0x051, 0x000E8333,
+ 0xB0000000, 0x00000000,
+ 0x80000400, 0x00000000, 0x40000000, 0x00000000,
0x052, 0x000FAC88,
+ 0x91000000, 0x00000000, 0x40000000, 0x00000000,
+ 0x052, 0x000FAC2C,
+ 0xA0000000, 0x00000000,
+ 0x052, 0x000FAC2C,
+ 0xB0000000, 0x00000000,
+ 0x81000000, 0x00000000, 0x40000000, 0x00000000,
+ 0x053, 0x00000141,
+ 0xA0000000, 0x00000000,
0x053, 0x00000103,
0xB0000000, 0x00000000,
0x056, 0x000517F0,
@@ -198,6 +211,18 @@ u4Byte Array_MP_8188F_RadioA[] = {
0x034, 0x00002CC8,
0x034, 0x00001C4B,
0x034, 0x00000C48,
+ 0x91000000, 0x00000000, 0x40000000, 0x00000000,
+ 0x034, 0x0000ADD2,
+ 0x034, 0x00009DD0,
+ 0x034, 0x00008CF3,
+ 0x034, 0x00007CF0,
+ 0x034, 0x00006CED,
+ 0x034, 0x00005CD2,
+ 0x034, 0x00004CCF,
+ 0x034, 0x00003CCC,
+ 0x034, 0x00002CC9,
+ 0x034, 0x00001C4C,
+ 0x034, 0x00000C49,
0xA0000000, 0x00000000,
0x034, 0x0000ADD6,
0x034, 0x00009DD3,
@@ -314,7 +339,7 @@ ODM_ReadAndConfig_MP_8188F_RadioA(
u4Byte
ODM_GetVersion_MP_8188F_RadioA(void)
{
- return 24;
+ return 28;
}
/******************************************************************************
@@ -470,12 +495,12 @@ u1Byte gDeltaSwingTableIdx_MP_5GA_P_TxPowerTrack_USB_8188F[][DELTA_SWINGIDX_SIZE
};
u1Byte gDeltaSwingTableIdx_MP_2GB_N_TxPowerTrack_USB_8188F[] = {0, 0, 1, 1, 2, 2, 2, 3, 3, 3, 3, 4, 5, 5, 5, 6, 6, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9};
u1Byte gDeltaSwingTableIdx_MP_2GB_P_TxPowerTrack_USB_8188F[] = {0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 4, 4, 4, 5, 5, 5, 6, 7, 8, 8, 8, 8};
-u1Byte gDeltaSwingTableIdx_MP_2GA_N_TxPowerTrack_USB_8188F[] = {0, 0, 1, 1, 1, 1, 3, 4, 5, 5, 6, 6, 7, 8, 8, 9, 9, 11, 12, 13, 14, 15, 15, 17, 17, 17, 17, 17, 17, 17};
-u1Byte gDeltaSwingTableIdx_MP_2GA_P_TxPowerTrack_USB_8188F[] = {0, 2, 2, 4, 5, 5, 6, 6, 7, 8, 8, 9, 9, 10, 11, 12, 13, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14};
+u1Byte gDeltaSwingTableIdx_MP_2GA_N_TxPowerTrack_USB_8188F[] = {0, 1, 1, 2, 3, 4, 4, 4, 5, 6, 7, 8, 8, 9, 10, 11, 12, 13, 13, 14, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15};
+u1Byte gDeltaSwingTableIdx_MP_2GA_P_TxPowerTrack_USB_8188F[] = {0, 1, 2, 3, 4, 4, 5, 6, 7, 8, 9, 10, 10, 11, 12, 13, 14, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15};
u1Byte gDeltaSwingTableIdx_MP_2GCCKB_N_TxPowerTrack_USB_8188F[] = {0, 1, 2, 2, 3, 3, 3, 4, 4, 4, 4, 5, 5, 6, 6, 6, 6, 7, 7, 7, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9};
u1Byte gDeltaSwingTableIdx_MP_2GCCKB_P_TxPowerTrack_USB_8188F[] = {0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 5, 6, 6, 6, 6, 7, 7};
-u1Byte gDeltaSwingTableIdx_MP_2GCCKA_N_TxPowerTrack_USB_8188F[] = {0, 1, 1, 2, 3, 3, 3, 5, 5, 7, 7, 8, 8, 9, 9, 10, 12, 12, 13, 14, 14, 16, 16, 17, 17, 17, 17, 17, 17, 17};
-u1Byte gDeltaSwingTableIdx_MP_2GCCKA_P_TxPowerTrack_USB_8188F[] = {0, 1, 2, 2, 2, 4, 4, 5, 6, 6, 7, 7, 8, 9, 10, 11, 12, 12, 13, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14};
+u1Byte gDeltaSwingTableIdx_MP_2GCCKA_N_TxPowerTrack_USB_8188F[] = {0, 1, 2, 3, 4, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 13, 14, 14, 15, 15, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16};
+u1Byte gDeltaSwingTableIdx_MP_2GCCKA_P_TxPowerTrack_USB_8188F[] = {0, 0, 1, 2, 2, 3, 3, 4, 6, 6, 7, 8, 8, 10, 10, 11, 13, 14, 14, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15};
#endif
void
@@ -544,10 +569,10 @@ const char *Array_MP_8188F_TXPWR_LMT[] = {
"FCC", "2.4G", "20M", "CCK", "1T", "11", "32",
"ETSI", "2.4G", "20M", "CCK", "1T", "11", "26",
"MKK", "2.4G", "20M", "CCK", "1T", "11", "32",
- "FCC", "2.4G", "20M", "CCK", "1T", "12", "63",
+ "FCC", "2.4G", "20M", "CCK", "1T", "12", "30",
"ETSI", "2.4G", "20M", "CCK", "1T", "12", "26",
"MKK", "2.4G", "20M", "CCK", "1T", "12", "32",
- "FCC", "2.4G", "20M", "CCK", "1T", "13", "63",
+ "FCC", "2.4G", "20M", "CCK", "1T", "13", "26",
"ETSI", "2.4G", "20M", "CCK", "1T", "13", "26",
"MKK", "2.4G", "20M", "CCK", "1T", "13", "32",
"FCC", "2.4G", "20M", "CCK", "1T", "14", "63",
@@ -586,10 +611,10 @@ const char *Array_MP_8188F_TXPWR_LMT[] = {
"FCC", "2.4G", "20M", "OFDM", "1T", "11", "28",
"ETSI", "2.4G", "20M", "OFDM", "1T", "11", "30",
"MKK", "2.4G", "20M", "OFDM", "1T", "11", "30",
- "FCC", "2.4G", "20M", "OFDM", "1T", "12", "63",
+ "FCC", "2.4G", "20M", "OFDM", "1T", "12", "24",
"ETSI", "2.4G", "20M", "OFDM", "1T", "12", "30",
"MKK", "2.4G", "20M", "OFDM", "1T", "12", "30",
- "FCC", "2.4G", "20M", "OFDM", "1T", "13", "63",
+ "FCC", "2.4G", "20M", "OFDM", "1T", "13", "16",
"ETSI", "2.4G", "20M", "OFDM", "1T", "13", "30",
"MKK", "2.4G", "20M", "OFDM", "1T", "13", "30",
"FCC", "2.4G", "20M", "OFDM", "1T", "14", "63",
@@ -628,10 +653,10 @@ const char *Array_MP_8188F_TXPWR_LMT[] = {
"FCC", "2.4G", "20M", "HT", "1T", "11", "28",
"ETSI", "2.4G", "20M", "HT", "1T", "11", "30",
"MKK", "2.4G", "20M", "HT", "1T", "11", "30",
- "FCC", "2.4G", "20M", "HT", "1T", "12", "63",
+ "FCC", "2.4G", "20M", "HT", "1T", "12", "24",
"ETSI", "2.4G", "20M", "HT", "1T", "12", "30",
"MKK", "2.4G", "20M", "HT", "1T", "12", "30",
- "FCC", "2.4G", "20M", "HT", "1T", "13", "63",
+ "FCC", "2.4G", "20M", "HT", "1T", "13", "16",
"ETSI", "2.4G", "20M", "HT", "1T", "13", "30",
"MKK", "2.4G", "20M", "HT", "1T", "13", "30",
"FCC", "2.4G", "20M", "HT", "1T", "14", "63",
@@ -706,10 +731,10 @@ const char *Array_MP_8188F_TXPWR_LMT[] = {
"FCC", "2.4G", "40M", "HT", "1T", "09", "26",
"ETSI", "2.4G", "40M", "HT", "1T", "09", "26",
"MKK", "2.4G", "40M", "HT", "1T", "09", "26",
- "FCC", "2.4G", "40M", "HT", "1T", "10", "26",
+ "FCC", "2.4G", "40M", "HT", "1T", "10", "24",
"ETSI", "2.4G", "40M", "HT", "1T", "10", "26",
"MKK", "2.4G", "40M", "HT", "1T", "10", "26",
- "FCC", "2.4G", "40M", "HT", "1T", "11", "26",
+ "FCC", "2.4G", "40M", "HT", "1T", "11", "10",
"ETSI", "2.4G", "40M", "HT", "1T", "11", "26",
"MKK", "2.4G", "40M", "HT", "1T", "11", "26",
"FCC", "2.4G", "40M", "HT", "1T", "12", "63",
diff --git a/rtl8188FU/hal/phydm/rtl8188f/halphyrf_8188f.c b/rtl8188FU/hal/phydm/rtl8188f/halphyrf_8188f.c
index 3f9290a..26e373e 100755
--- a/rtl8188FU/hal/phydm/rtl8188f/halphyrf_8188f.c
+++ b/rtl8188FU/hal/phydm/rtl8188f/halphyrf_8188f.c
@@ -1566,12 +1566,16 @@ _PHY_MACSettingCalibration8188F(
#endif
ODM_RT_TRACE(pDM_Odm, ODM_COMP_CALIBRATION, ODM_DBG_LOUD, ("MAC settings for Calibration.\n"));
+#if 0
ODM_Write1Byte(pDM_Odm, MACReg[i], 0x3F);
for (i = 1; i < (IQK_MAC_REG_NUM - 1); i++)
ODM_Write1Byte(pDM_Odm, MACReg[i], (u1Byte)(MACBackup[i] & (~BIT3)));
ODM_Write1Byte(pDM_Odm, MACReg[i], (u1Byte)(MACBackup[i] & (~BIT5)));
+#else
+ ODM_SetBBReg(pDM_Odm, 0x520, 0x00ff0000, 0xff);
+#endif
}
VOID
@@ -1844,6 +1848,7 @@ phy_IQCalibrate_8188F(
if (t == 0)
pDM_Odm->RFCalibrateInfo.bRfPiEnable = (u1Byte)ODM_GetBBReg(pDM_Odm, rFPGA0_XA_HSSIParameter1, BIT(8));
+#if 0
if (!pDM_Odm->RFCalibrateInfo.bRfPiEnable) {
// Switch BB to PI mode to do IQ Calibration.
#if !(DM_ODM_SUPPORT_TYPE & ODM_AP)
@@ -1852,6 +1857,7 @@ phy_IQCalibrate_8188F(
_PHY_PIModeSwitch8188F(pDM_Odm, TRUE);
#endif
}
+#endif
//save RF path
Path_SEL_BB = ODM_GetBBReg(pDM_Odm, 0x948, bMaskDWord);
@@ -1859,7 +1865,7 @@ phy_IQCalibrate_8188F(
//BB setting
- ODM_SetBBReg(pDM_Odm, rFPGA0_RFMOD, BIT24, 0x00);
+ /*ODM_SetBBReg(pDM_Odm, rFPGA0_RFMOD, BIT24, 0x00);*/
ODM_SetBBReg(pDM_Odm, rOFDM0_TRxPathEnable, bMaskDWord, 0x03a05600);
ODM_SetBBReg(pDM_Odm, rOFDM0_TRMuxPar, bMaskDWord, 0x000800e4);
ODM_SetBBReg(pDM_Odm, rFPGA0_XCD_RFInterfaceSW, bMaskDWord, 0x25204000);
@@ -2080,71 +2086,46 @@ phy_LCCalibrate_8188F(
)
{
u1Byte tmpReg;
- u4Byte RF_Amode = 0, RF_Bmode = 0, LC_Cal;
+ u4Byte RF_Amode = 0, RF_Bmode = 0, LC_Cal, cnt;
#if !(DM_ODM_SUPPORT_TYPE & ODM_AP)
PADAPTER pAdapter = pDM_Odm->Adapter;
#endif
- //Check continuous TX and Packet TX
+ /*Check continuous TX and Packet TX*/
tmpReg = ODM_Read1Byte(pDM_Odm, 0xd03);
- if ((tmpReg & 0x70) != 0) //Deal with contisuous TX case
- ODM_Write1Byte(pDM_Odm, 0xd03, tmpReg & 0x8F); //disable all continuous TX
- else // Deal with Packet TX case
- ODM_Write1Byte(pDM_Odm, REG_TXPAUSE, 0xFF); // block all queues
+ if ((tmpReg & 0x70) != 0) /*Deal with contisuous TX case*/
+ ODM_Write1Byte(pDM_Odm, 0xd03, tmpReg & 0x8F); /*disable all continuous TX*/
+ else /* Deal with Packet TX case*/
+ ODM_Write1Byte(pDM_Odm, REG_TXPAUSE, 0xFF); /* block all queues*/
- if ((tmpReg & 0x70) != 0) {
- //1. Read original RF mode
- //Path-A
-#if !(DM_ODM_SUPPORT_TYPE & ODM_AP)
- RF_Amode = PHY_QueryRFReg(pAdapter, ODM_RF_PATH_A, RF_AC, bMask12Bits);
- //Path-B
- if (is2T)
- RF_Bmode = PHY_QueryRFReg(pAdapter, ODM_RF_PATH_B, RF_AC, bMask12Bits);
-#else
- RF_Amode = ODM_GetRFReg(pDM_Odm, ODM_RF_PATH_A, RF_AC, bMask12Bits);
+ /*backup RF0x18*/
+ LC_Cal = ODM_GetRFReg(pDM_Odm, ODM_RF_PATH_A, RF_CHNLBW, bRFRegOffsetMask);
- //Path-B
- if (is2T)
- RF_Bmode = ODM_GetRFReg(pDM_Odm, ODM_RF_PATH_B, RF_AC, bMask12Bits);
-#endif
+ /*Start LCK*/
+ ODM_SetRFReg(pDM_Odm, ODM_RF_PATH_A, RF_CHNLBW, bRFRegOffsetMask, LC_Cal|0x08000);
- //2. Set RF mode = standby mode
- //Path-A
- ODM_SetRFReg(pDM_Odm, ODM_RF_PATH_A, RF_AC, bMask12Bits, (RF_Amode & 0x8FFFF) | 0x10000);
-
- //Path-B
- if (is2T)
- ODM_SetRFReg(pDM_Odm, ODM_RF_PATH_B, RF_AC, bMask12Bits, (RF_Bmode & 0x8FFFF) | 0x10000);
+ for(cnt=0;cnt<100;cnt++)
+ {
+ if(ODM_GetRFReg(pDM_Odm, ODM_RF_PATH_A, RF_CHNLBW, 0x8000) != 0x1)
+ break;
+ ODM_delay_ms(10);
}
- //3. Read RF reg18
-#if !(DM_ODM_SUPPORT_TYPE & ODM_AP)
- LC_Cal = PHY_QueryRFReg(pAdapter, ODM_RF_PATH_A, RF_CHNLBW, bMask12Bits);
-#else
- LC_Cal = ODM_GetRFReg(pDM_Odm, ODM_RF_PATH_A, RF_CHNLBW, bMask12Bits);
-#endif
-
- //4. Set LC calibration begin bit15
- ODM_SetRFReg(pDM_Odm, ODM_RF_PATH_A, 0xB0, bRFRegOffsetMask, 0xDFBF0); // LDO ON
- ODM_SetRFReg(pDM_Odm, ODM_RF_PATH_A, RF_CHNLBW, bMask12Bits, LC_Cal | 0x08000);
+ /*Recover channel number*/
+ ODM_SetRFReg(pDM_Odm, ODM_RF_PATH_A, RF_CHNLBW, bRFRegOffsetMask, LC_Cal);
- ODM_delay_ms(100);
- ODM_SetRFReg(pDM_Odm, ODM_RF_PATH_A, 0xB0, bRFRegOffsetMask, 0xDFFF0); // LDO OFF
-
- //Restore original situation
- if ((tmpReg & 0x70) != 0) { //Deal with contisuous TX case
- //Path-A
+ /*Restore original situation*/
+ if ((tmpReg&0x70) != 0) {
+ /*Deal with contisuous TX case*/
ODM_Write1Byte(pDM_Odm, 0xd03, tmpReg);
- ODM_SetRFReg(pDM_Odm, ODM_RF_PATH_A, RF_AC, bMask12Bits, RF_Amode);
-
- //Path-B
- if (is2T)
- ODM_SetRFReg(pDM_Odm, ODM_RF_PATH_B, RF_AC, bMask12Bits, RF_Bmode);
- } else // Deal with Packet TX case
+ } else {
+ /* Deal with Packet TX case*/
ODM_Write1Byte(pDM_Odm, REG_TXPAUSE, 0x00);
+ }
+
}
//Analog Pre-distortion calibration
diff --git a/rtl8188FU/hal/phydm/rtl8188f/version_rtl8188f.h b/rtl8188FU/hal/phydm/rtl8188f/version_rtl8188f.h
index e351e4c..3c47841 100755
--- a/rtl8188FU/hal/phydm/rtl8188f/version_rtl8188f.h
+++ b/rtl8188FU/hal/phydm/rtl8188f/version_rtl8188f.h
@@ -5,6 +5,6 @@
You do not need to fill up the version.h anymore,
only the maintenance supervisor fills it before formal release.
*/
-#define RELEASE_DATE_8188F 20150921
+#define RELEASE_DATE_8188F 20160516
#define COMMIT_BY_8188F "BB_DAVID"
-#define RELEASE_VERSION_8188F 24
+#define RELEASE_VERSION_8188F 28
diff --git a/rtl8188FU/hal/rtl8188f/rtl8188f_cmd.c b/rtl8188FU/hal/rtl8188f/rtl8188f_cmd.c
index 635e7ee..18a8bb1 100755
--- a/rtl8188FU/hal/rtl8188f/rtl8188f_cmd.c
+++ b/rtl8188FU/hal/rtl8188f/rtl8188f_cmd.c
@@ -707,6 +707,25 @@ void rtl8188f_set_FwPwrMode_cmd(PADAPTER padapter, u8 psmode)
_func_exit_;
}
+#ifdef CONFIG_TDLS
+#ifdef CONFIG_TDLS_CH_SW
+void rtl8188f_set_BcnEarly_C2H_Rpt_cmd(PADAPTER padapter, u8 enable)
+{
+ u8 u1H2CSetPwrMode[H2C_PWRMODE_LEN] = {0};
+
+ SET_8188F_H2CCMD_PWRMODE_PARM_MODE(u1H2CSetPwrMode, 1);
+ SET_8188F_H2CCMD_PWRMODE_PARM_RLBM(u1H2CSetPwrMode, 1);
+ SET_8188F_H2CCMD_PWRMODE_PARM_SMART_PS(u1H2CSetPwrMode, 0);
+ SET_8188F_H2CCMD_PWRMODE_PARM_BCN_PASS_TIME(u1H2CSetPwrMode, 0);
+ SET_8188F_H2CCMD_PWRMODE_PARM_ALL_QUEUE_UAPSD(u1H2CSetPwrMode, 0);
+ SET_8188F_H2CCMD_PWRMODE_PARM_BCN_EARLY_C2H_RPT(u1H2CSetPwrMode, enable);
+ SET_8188F_H2CCMD_PWRMODE_PARM_PWR_STATE(u1H2CSetPwrMode, 0x0C);
+ SET_8188F_H2CCMD_PWRMODE_PARM_BYTE5(u1H2CSetPwrMode, 0);
+ FillH2CCmd8188F(padapter, H2C_8188F_SET_PWR_MODE, sizeof(u1H2CSetPwrMode), u1H2CSetPwrMode);
+}
+#endif
+#endif
+
void rtl8188f_set_FwPsTuneParam_cmd(PADAPTER padapter)
{
struct pwrctrl_priv *pwrpriv = adapter_to_pwrctl(padapter);
@@ -896,9 +915,8 @@ void rtl8188f_set_FwJoinBssRpt_cmd(PADAPTER padapter, u8 mstatus)
void rtl8188f_Add_RateATid(PADAPTER pAdapter, u64 rate_bitmap, u8 *arg, u8 rssi_level)
{
HAL_DATA_TYPE *pHalData = GET_HAL_DATA(pAdapter);
- struct mlme_ext_priv *pmlmeext = &pAdapter->mlmeextpriv;
- struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
- struct sta_info *psta;
+ struct macid_ctl_t *macid_ctl = &pAdapter->dvobj->macid_ctl;
+ struct sta_info *psta = NULL;
u8 mac_id = arg[0];
u8 raid = arg[1];
u8 shortGI = arg[2];
@@ -906,9 +924,13 @@ void rtl8188f_Add_RateATid(PADAPTER pAdapter, u64 rate_bitmap, u8 *arg, u8 rssi_
u32 bitmap = (u32) rate_bitmap;
u32 mask = bitmap & 0x0FFFFFFF;
- psta = pmlmeinfo->FW_sta_info[mac_id].psta;
- if (psta == NULL)
+ if (mac_id < macid_ctl->num)
+ psta = macid_ctl->sta[mac_id];
+ if (psta == NULL) {
+ DBG_871X_LEVEL(_drv_always_, FUNC_ADPT_FMT" macid:%u, sta is NULL\n"
+ , FUNC_ADPT_ARG(pAdapter), mac_id);
return;
+ }
bw = psta->bw_mode;
diff --git a/rtl8188FU/hal/rtl8188f/rtl8188f_dm.c b/rtl8188FU/hal/rtl8188f/rtl8188f_dm.c
index 748bb1b..9d5b0d4 100755
--- a/rtl8188FU/hal/rtl8188f/rtl8188f_dm.c
+++ b/rtl8188FU/hal/rtl8188f/rtl8188f_dm.c
@@ -239,7 +239,6 @@ static void Init_ODM_ComInfo_8188f(PADAPTER Adapter)
Init_ODM_ComInfo(Adapter);
ODM_CmnInfoInit(pDM_Odm, ODM_CMNINFO_PACKAGE_TYPE, pHalData->PackageType);
- ODM_CmnInfoInit(pDM_Odm, ODM_CMNINFO_IC_TYPE, ODM_RTL8188F);
fab_ver = ODM_TSMC;
cut_ver = GET_CVID_CUT_VERSION(pHalData->VersionID);
@@ -254,8 +253,6 @@ static void Init_ODM_ComInfo_8188f(PADAPTER Adapter)
SupportAbility = ODM_RF_CALIBRATION |
ODM_RF_TX_PWR_TRACK /*| */
;
- /*if(pHalData->AntDivCfg) */
- /* pdmpriv->InitODMFlag |= ODM_BB_ANT_DIV; */
#endif
ODM_CmnInfoUpdate(pDM_Odm, ODM_CMNINFO_ABILITY, SupportAbility);
@@ -273,8 +270,8 @@ static void Update_ODM_ComInfo_8188f(PADAPTER Adapter)
| ODM_BB_DYNAMIC_TXPWR
| ODM_BB_FA_CNT
| ODM_BB_RSSI_MONITOR
- /*| ODM_BB_CCK_PD
- | ODM_BB_PWR_SAVE */
+ | ODM_BB_CCK_PD
+ /* | ODM_BB_PWR_SAVE */
| ODM_BB_CFO_TRACKING
| ODM_MAC_EDCA_TURBO
| ODM_RF_TX_PWR_TRACK
@@ -327,8 +324,7 @@ rtl8188f_InitHalDm(
Update_ODM_ComInfo_8188f(Adapter);
- if (Adapter->registrypriv.mp_mode == 0)
- ODM_DMInit(pDM_Odm);
+ ODM_DMInit(pDM_Odm);
}
diff --git a/rtl8188FU/hal/rtl8188f/rtl8188f_hal_init.c b/rtl8188FU/hal/rtl8188f/rtl8188f_hal_init.c
index cc28349..4bc98e6 100755
--- a/rtl8188FU/hal/rtl8188f/rtl8188f_hal_init.c
+++ b/rtl8188FU/hal/rtl8188f/rtl8188f_hal_init.c
@@ -84,7 +84,7 @@ _BlockWrite(
#endif
#ifdef CONFIG_USB_HCI
- blockSize_p1 = 254;
+ blockSize_p1 = 196; // the same as 8188e
#endif
/*printk("====>%s %d\n", __func__, __LINE__); */
@@ -311,7 +311,7 @@ static s32 polling_fwdl_chksum(_adapter *adapter, u32 min_cnt, u32 timeout_ms)
do {
cnt++;
value32 = rtw_read32(adapter, REG_MCUFWDL);
- if (value32 & FWDL_ChkSum_rpt || RTW_CANNOT_RUN(adapter))
+ if (value32 & FWDL_ChkSum_rpt || RTW_CANNOT_IO(adapter))
break;
rtw_yield_os();
} while (rtw_get_passing_time_ms(start) < timeout_ms || cnt < min_cnt);
@@ -352,7 +352,7 @@ static s32 _FWFreeToGo(_adapter *adapter, u32 min_cnt, u32 timeout_ms)
cnt++;
value32 = rtw_read32(adapter, REG_MCUFWDL);
value_to_check = value32 & value_expected;
- if ((value_to_check == value_expected) || RTW_CANNOT_RUN(adapter))
+ if ((value_to_check == value_expected) || RTW_CANNOT_IO(adapter))
break;
rtw_yield_os();
} while (rtw_get_passing_time_ms(start) < timeout_ms || cnt < min_cnt);
@@ -1080,7 +1080,6 @@ s32 rtl8188f_FirmwareDownload(PADAPTER padapter, BOOLEAN bUsedWoWLANFw)
u8 write_fw = 0;
u32 fwdl_start_time;
PHAL_DATA_TYPE pHalData = GET_HAL_DATA(padapter);
- s8 R8188FFwImageFileName[] = {RTL8188F_FW_IMG};
u8 *FwImage;
u32 FwImageLen;
u8 *pFwImageFileName;
@@ -1234,9 +1233,18 @@ s32 rtl8188f_FirmwareDownload(PADAPTER padapter, BOOLEAN bUsedWoWLANFw)
#if 1
DBG_871X("%s by IO write!\n", __func__);
+ /*
+ * Suggested by Filen. If 8051 is running in RAM code, driver should inform Fw to reset by itself,
+ * or it will cause download Fw fail. 2010.02.01. by tynli.
+ */
+ if (rtw_read8(padapter, REG_MCUFWDL) & RAM_DL_SEL) {
+ rtw_write8(padapter, REG_MCUFWDL, 0x00);
+ _8051Reset8188(padapter);
+ }
+
_FWDownloadEnable(padapter, _TRUE);
- while (!RTW_CANNOT_RUN(padapter)
+ while (!RTW_CANNOT_IO(padapter)
&& (write_fw++ < 3 || rtw_get_passing_time_ms(fwdl_start_time) < 500)) {
/* reset FWDL chksum */
rtw_write8(padapter, REG_MCUFWDL, rtw_read8(padapter, REG_MCUFWDL) | FWDL_ChkSum_rpt);
@@ -1338,6 +1346,8 @@ exit:
if (pFirmware)
rtw_mfree((u8 *)pFirmware, sizeof(RT_FIRMWARE_8188F));
+ rtl8188f_InitializeFirmwareVars(padapter);
+
DBG_871X(" <=== %s()\n", __func__);
return rtStatus;
@@ -1360,42 +1370,6 @@ void rtl8188f_InitializeFirmwareVars(PADAPTER padapter)
/*pHalData->H2CStopInsertQueue = _FALSE; */
}
-#if defined(CONFIG_WOWLAN) || defined(CONFIG_AP_WOWLAN)
-/*=========================================== */
-
-/* */
-/* Description: Prepare some information to Fw for WoWLAN. */
-/* (1) Download wowlan Fw. */
-/* (2) Download RSVD page packets. */
-/* (3) Enable AP offload if needed. */
-/* */
-/* 2011.04.12 by tynli. */
-/* */
-VOID
-SetFwRelatedForWoWLAN8188f(
- IN PADAPTER padapter,
- IN u8 bHostIsGoingtoSleep
-)
-{
- int status = _FAIL;
- HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);
- u8 bRecover = _FALSE;
- /* */
- /* 1. Before WoWLAN we need to re-download WoWLAN Fw. */
- /* */
- status = rtl8188f_FirmwareDownload(padapter, bHostIsGoingtoSleep);
- if (status != _SUCCESS) {
- DBG_871X("SetFwRelatedForWoWLAN8188f(): Re-Download Firmware failed!!\n");
- return;
- } else
- DBG_871X("SetFwRelatedForWoWLAN8188f(): Re-Download Firmware Success !!\n");
- /* */
- /* 2. Re-Init the variables about Fw related setting. */
- /* */
- rtl8188f_InitializeFirmwareVars(padapter);
-}
-#endif /*CONFIG_WOWLAN */
-
/*=========================================================== */
/* Efuse related code */
/*=========================================================== */
@@ -1511,7 +1485,7 @@ Hal_GetEfuseDefinition(
pu2Tmp = (u16 *)pOut;
if (efuseType == EFUSE_WIFI)
- *pu2Tmp = EFUSE_MAX_MAP_LEN;
+ *pu2Tmp = EFUSE_MAP_LEN_8188F;
else
*pu2Tmp = EFUSE_BT_MAP_LEN;
}
@@ -1667,11 +1641,7 @@ Hal_EfusePowerSwitch(
if (bWrite == _TRUE) {
/* Enable LDO 2.5V before read/write action */
tempval = rtw_read8(padapter, EFUSE_TEST + 3);
- tempval &= 0x0F;
- tempval |= (VOLTAGE_V25 << 4);
rtw_write8(padapter, EFUSE_TEST + 3, (tempval | 0x80));
-
- /*rtw_write8(padapter, REG_EFUSE_ACCESS, EFUSE_ACCESS_ON); */
}
} else {
rtw_write8(padapter, REG_EFUSE_ACCESS, EFUSE_ACCESS_OFF);
@@ -2272,9 +2242,10 @@ Hal_EfuseWordEnableDataWrite(
tmpaddr = start_addr;
efuse_OneByteWrite(padapter, start_addr++, data[0], bPseudoTest);
efuse_OneByteWrite(padapter, start_addr++, data[1], bPseudoTest);
-
+ PHY_SetMacReg(padapter, EFUSE_TEST, BIT26, 0);
efuse_OneByteRead(padapter, tmpaddr, &tmpdata[0], bPseudoTest);
efuse_OneByteRead(padapter, tmpaddr + 1, &tmpdata[1], bPseudoTest);
+ PHY_SetMacReg(padapter, EFUSE_TEST, BIT26, 1);
if ((data[0] != tmpdata[0]) || (data[1] != tmpdata[1]))
badworden &= (~BIT(0));
}
@@ -2282,9 +2253,10 @@ Hal_EfuseWordEnableDataWrite(
tmpaddr = start_addr;
efuse_OneByteWrite(padapter, start_addr++, data[2], bPseudoTest);
efuse_OneByteWrite(padapter, start_addr++, data[3], bPseudoTest);
-
+ PHY_SetMacReg(padapter, EFUSE_TEST, BIT26, 0);
efuse_OneByteRead(padapter, tmpaddr, &tmpdata[2], bPseudoTest);
efuse_OneByteRead(padapter, tmpaddr + 1, &tmpdata[3], bPseudoTest);
+ PHY_SetMacReg(padapter, EFUSE_TEST, BIT26, 1);
if ((data[2] != tmpdata[2]) || (data[3] != tmpdata[3]))
badworden &= (~BIT(1));
}
@@ -2292,9 +2264,10 @@ Hal_EfuseWordEnableDataWrite(
tmpaddr = start_addr;
efuse_OneByteWrite(padapter, start_addr++, data[4], bPseudoTest);
efuse_OneByteWrite(padapter, start_addr++, data[5], bPseudoTest);
-
+ PHY_SetMacReg(padapter, EFUSE_TEST, BIT26, 0);
efuse_OneByteRead(padapter, tmpaddr, &tmpdata[4], bPseudoTest);
efuse_OneByteRead(padapter, tmpaddr + 1, &tmpdata[5], bPseudoTest);
+ PHY_SetMacReg(padapter, EFUSE_TEST, BIT26, 1);
if ((data[4] != tmpdata[4]) || (data[5] != tmpdata[5]))
badworden &= (~BIT(2));
}
@@ -2302,9 +2275,10 @@ Hal_EfuseWordEnableDataWrite(
tmpaddr = start_addr;
efuse_OneByteWrite(padapter, start_addr++, data[6], bPseudoTest);
efuse_OneByteWrite(padapter, start_addr++, data[7], bPseudoTest);
-
+ PHY_SetMacReg(padapter, EFUSE_TEST, BIT26, 0);
efuse_OneByteRead(padapter, tmpaddr, &tmpdata[6], bPseudoTest);
efuse_OneByteRead(padapter, tmpaddr + 1, &tmpdata[7], bPseudoTest);
+ PHY_SetMacReg(padapter, EFUSE_TEST, BIT26, 1);
if ((data[6] != tmpdata[6]) || (data[7] != tmpdata[7]))
badworden &= (~BIT(3));
}
@@ -2613,6 +2587,42 @@ hal_EfusePartialWriteCheck(
return bRet;
}
+BOOLEAN
+hal_EfuseFixHeaderProcess(
+ IN PADAPTER pAdapter,
+ IN u1Byte efuseType,
+ IN PPGPKT_STRUCT pFixPkt,
+ IN pu2Byte pAddr,
+ IN BOOLEAN bPseudoTest
+)
+{
+ u1Byte originaldata[8], badworden=0;
+ u2Byte efuse_addr=*pAddr;
+ u4Byte PgWriteSuccess=0;
+
+ _rtw_memset((PVOID)originaldata, 8, 0xff);
+
+ if (Efuse_PgPacketRead(pAdapter, pFixPkt->offset, originaldata, bPseudoTest)) {
+ badworden = Hal_EfuseWordEnableDataWrite(pAdapter, efuse_addr+1, pFixPkt->word_en, originaldata, bPseudoTest);
+
+ if (badworden != 0xf) {
+
+ PgWriteSuccess = Efuse_PgPacketWrite(pAdapter, pFixPkt->offset, badworden, originaldata, bPseudoTest);
+ if (!PgWriteSuccess)
+ return FALSE;
+ else
+ efuse_addr = Hal_EfuseGetCurrentSize(pAdapter, efuseType, bPseudoTest);
+ } else {
+ efuse_addr = efuse_addr + (pFixPkt->word_cnts*2) +1;
+ }
+ } else {
+ efuse_addr = efuse_addr + (pFixPkt->word_cnts*2) +1;
+ }
+
+ *pAddr = efuse_addr;
+ return TRUE;
+}
+
static u8
hal_EfusePgPacketWrite1ByteHeader(
PADAPTER pAdapter,
@@ -2627,21 +2637,41 @@ hal_EfusePgPacketWrite1ByteHeader(
u8 repeatcnt = 0;
- /*DBG_8192C("%s\n", __func__); */
+ /* RTW_INFO("%s\n", __FUNCTION__); */
pg_header = ((pTargetPkt->offset << 4) & 0xf0) | pTargetPkt->word_en;
+ if (IS_HARDWARE_TYPE_8723BE(pAdapter))
+ efuse_OneByteWrite(pAdapter, 0x1FF, 00, FALSE); /* increase current */
- do {
efuse_OneByteWrite(pAdapter, efuse_addr, pg_header, bPseudoTest);
+
+ PHY_SetMacReg(pAdapter, EFUSE_TEST, BIT26, 0);
+
efuse_OneByteRead(pAdapter, efuse_addr, &tmp_header, bPseudoTest);
- if (tmp_header != 0xFF) break;
+
+ PHY_SetMacReg(pAdapter, EFUSE_TEST, BIT26, 1);
+
+ while (tmp_header == 0xFF || pg_header != tmp_header) {
if (repeatcnt++ > EFUSE_REPEAT_THRESHOLD_) {
- DBG_8192C("%s: Repeat over limit for pg_header!!\n", __func__);
+ DBG_8192C("retry %d times fail!!\n", repeatcnt);
return _FALSE;
}
- } while (1);
+ efuse_OneByteWrite(pAdapter,efuse_addr, pg_header, bPseudoTest);
+ efuse_OneByteRead(pAdapter,efuse_addr, &tmp_header, bPseudoTest);
+ DBG_8192C("===>%s: Keep %d-th retrying,pg_header = 0x%X tmp_header = 0x%X\n", __FUNCTION__,repeatcnt, pg_header, tmp_header);
+ }
- if (tmp_header != pg_header) {
- DBG_8192C(KERN_ERR "%s: PG Header Fail!!(pg=0x%02X read=0x%02X)\n", __func__, pg_header, tmp_header);
+ if (pg_header == tmp_header)
+ bRet = _TRUE;
+ else {
+ PGPKT_STRUCT fixPkt;
+
+ DBG_8192C(" pg_header(0x%X) != tmp_header(0x%X)\n", pg_header, tmp_header);
+ DBG_8192C("Error condition for fixed PG packet, need to cover the existed data: (Addr, Data) = (0x%X, 0x%X)\n",
+ efuse_addr, tmp_header);
+ fixPkt.offset = (tmp_header>>4) & 0x0F;
+ fixPkt.word_en = tmp_header & 0x0F;
+ fixPkt.word_cnts = Efuse_CalculateWordCnts(fixPkt.word_en);
+ if (!hal_EfuseFixHeaderProcess(pAdapter, efuseType, &fixPkt, &efuse_addr, bPseudoTest))
return _FALSE;
}
@@ -2659,54 +2689,81 @@ hal_EfusePgPacketWrite2ByteHeader(
u8 bPseudoTest)
{
u16 efuse_addr, efuse_max_available_len = 0;
- u8 pg_header = 0, tmp_header = 0;
+ u8 pg_header = 0, tmp_header = 0, pg_header_temp = 0;
u8 repeatcnt = 0;
- /*DBG_8192C("%s\n", __func__); */
+ /* RTW_INFO("%s\n", __FUNCTION__); */
EFUSE_GetEfuseDefinition(padapter, efuseType, TYPE_AVAILABLE_EFUSE_BYTES_BANK, &efuse_max_available_len, bPseudoTest);
efuse_addr = *pAddr;
+
if (efuse_addr >= efuse_max_available_len) {
- DBG_8192C("%s: addr(%d) over available(%d)!!\n", __func__, efuse_addr, efuse_max_available_len);
+ DBG_8192C("%s: addr(%d) over avaliable(%d)!!\n", __FUNCTION__, efuse_addr, efuse_max_available_len);
return _FALSE;
}
+ while (efuse_addr < efuse_max_available_len) {
pg_header = ((pTargetPkt->offset & 0x07) << 5) | 0x0F;
- /*DBG_8192C("%s: pg_header=0x%x\n", __func__, pg_header); */
-
- do {
efuse_OneByteWrite(padapter, efuse_addr, pg_header, bPseudoTest);
+ PHY_SetMacReg(padapter, EFUSE_TEST, BIT26, 0);
efuse_OneByteRead(padapter, efuse_addr, &tmp_header, bPseudoTest);
- if (tmp_header != 0xFF) break;
+ PHY_SetMacReg(padapter, EFUSE_TEST, BIT26, 1);
+
+ while (tmp_header == 0xFF || pg_header != tmp_header) {
if (repeatcnt++ > EFUSE_REPEAT_THRESHOLD_) {
- DBG_8192C("%s: Repeat over limit for pg_header!!\n", __func__);
+ DBG_8192C("%s, Repeat over limit for pg_header!!\n", __FUNCTION__);
return _FALSE;
}
- } while (1);
- if (tmp_header != pg_header) {
- DBG_8192C(KERN_ERR "%s: PG Header Fail!!(pg=0x%02X read=0x%02X)\n", __func__, pg_header, tmp_header);
- return _FALSE;
+ efuse_OneByteWrite(padapter, efuse_addr, pg_header, bPseudoTest);
+ efuse_OneByteRead(padapter, efuse_addr, &tmp_header, bPseudoTest);
}
- /* to write ext_header */
+ /*to write ext_header*/
+ if (tmp_header == pg_header) {
efuse_addr++;
+ pg_header_temp = pg_header;
pg_header = ((pTargetPkt->offset & 0x78) << 1) | pTargetPkt->word_en;
- do {
efuse_OneByteWrite(padapter, efuse_addr, pg_header, bPseudoTest);
+ PHY_SetMacReg(padapter, EFUSE_TEST, BIT26, 0);
efuse_OneByteRead(padapter, efuse_addr, &tmp_header, bPseudoTest);
- if (tmp_header != 0xFF) break;
+ PHY_SetMacReg(padapter, EFUSE_TEST, BIT26, 1);
+
+ while (tmp_header == 0xFF || pg_header != tmp_header) {
if (repeatcnt++ > EFUSE_REPEAT_THRESHOLD_) {
- DBG_8192C("%s: Repeat over limit for ext_header!!\n", __func__);
+ DBG_8192C("%s, Repeat over limit for ext_header!!\n", __FUNCTION__);
return _FALSE;
}
- } while (1);
- if (tmp_header != pg_header) { /*offset PG fail */
- DBG_8192C(KERN_ERR "%s: PG EXT Header Fail!!(pg=0x%02X read=0x%02X)\n", __func__, pg_header, tmp_header);
+ efuse_OneByteWrite(padapter, efuse_addr, pg_header, bPseudoTest);
+ efuse_OneByteRead(padapter, efuse_addr, &tmp_header, bPseudoTest);
+ }
+
+ if ((tmp_header & 0x0F) == 0x0F) {
+ if (repeatcnt++ > EFUSE_REPEAT_THRESHOLD_) {
+ DBG_8192C("Repeat over limit for word_en!!\n");
+ return _FALSE;
+ } else {
+ efuse_addr++;
+ continue;
+ }
+ } else if (pg_header != tmp_header) {
+ PGPKT_STRUCT fixPkt;
+ DBG_8192C("Error, efuse_PgPacketWrite2ByteHeader(), offset PG fail, need to cover the existed data!!\n");
+ DBG_8192C("Error condition for offset PG fail, need to cover the existed data\n");
+ fixPkt.offset = ((pg_header_temp & 0xE0) >> 5) | ((tmp_header & 0xF0) >> 1);
+ fixPkt.word_en = tmp_header & 0x0F;
+ fixPkt.word_cnts = Efuse_CalculateWordCnts(fixPkt.word_en);
+ if (!hal_EfuseFixHeaderProcess(padapter, efuseType, &fixPkt, &efuse_addr, bPseudoTest))
return _FALSE;
+ } else
+ break;
+ } else if ((tmp_header & 0x1F) == 0x0F) {/*wrong extended header*/
+ efuse_addr += 2;
+ continue;
+ }
}
*pAddr = efuse_addr;
@@ -2742,16 +2799,24 @@ hal_EfusePgPacketWriteData(
{
u16 efuse_addr;
u8 badworden;
+ u8 PgWriteSuccess = 0;
efuse_addr = *pAddr;
badworden = Efuse_WordEnableDataWrite(pAdapter, efuse_addr + 1, pTargetPkt->word_en, pTargetPkt->data, bPseudoTest);
- if (badworden != 0x0F) {
- DBG_8192C("%s: Fail!!\n", __func__);
- return _FALSE;
+ if (badworden == 0x0F) {
+ DBG_8192C("%s: Fail!!\n", __FUNCTION__);
+ return _TRUE;
+ } else { /* Reorganize other pg packet */
+ DBG_8192C ("Error, efuse_PgPacketWriteData(), wirte data fail!!\n");
+ DBG_8192C ("efuse_PgPacketWriteData Fail!!\n");
+ PgWriteSuccess = Efuse_PgPacketWrite(pAdapter, pTargetPkt->offset, badworden, pTargetPkt->data, bPseudoTest);
+ if (!PgWriteSuccess)
+ return FALSE;
+ else
+ return TRUE;
}
- /*DBG_8192C("%s: ok\n", __func__); */
return _TRUE;
}
@@ -3125,19 +3190,19 @@ void UpdateHalRAMask8188F(PADAPTER padapter, u32 mac_id, u8 rssi_level)
{
u32 mask, rate_bitmap;
u8 shortGIrate = _FALSE;
- struct sta_info *psta;
+ struct sta_info *psta = NULL;
HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);
struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
+ struct macid_ctl_t *macid_ctl = &padapter->dvobj->macid_ctl;
- DBG_871X("%s(): mac_id=%d rssi_level=%d\n", __func__, mac_id, rssi_level);
-
- if (mac_id >= NUM_STA) /*CAM_SIZE */
- return;
-
- psta = pmlmeinfo->FW_sta_info[mac_id].psta;
- if (psta == NULL)
+ if (mac_id < macid_ctl->num)
+ psta = macid_ctl->sta[mac_id];
+ if (psta == NULL) {
+ DBG_871X_LEVEL(_drv_always_, FUNC_ADPT_FMT" macid:%u, sta is NULL\n"
+ , FUNC_ADPT_ARG(padapter), mac_id);
return;
+ }
shortGIrate = query_ra_short_GI(psta);
@@ -3323,36 +3388,20 @@ void rtl8188f_set_hal_ops(struct hal_ops *pHalFunc)
pHalFunc->fill_h2c_cmd = &FillH2CCmd8188F;
pHalFunc->fill_fake_txdesc = &rtl8188f_fill_fake_txdesc;
-#ifdef CONFIG_WOWLAN
- pHalFunc->hal_set_wowlan_fw = &SetFwRelatedForWoWLAN8188f;
-#endif
+ pHalFunc->fw_dl = &rtl8188f_FirmwareDownload;
pHalFunc->hal_get_tx_buff_rsvd_page_num = &GetTxBufferRsvdPageNum8188F;
}
void rtl8188f_InitAntenna_Selection(PADAPTER padapter)
{
- PHAL_DATA_TYPE pHalData;
- u8 val;
-
+#ifdef CONFIG_ANTENNA_DIVERSITY
+ HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);
+
+ if (pHalData->AntDivCfg == 0)
+ return;
- pHalData = GET_HAL_DATA(padapter);
-#if 0
- val = rtw_read8(padapter, REG_LEDCFG2);
- /* Let 8051 take control antenna setting */
- val |= BIT(7); /* DPDT_SEL_EN, 0x4C[23] */
- rtw_write8(padapter, REG_LEDCFG2, val);
-#else
- /* TODO: <20130114, Kordan> The following setting is only for DPDT and Fixed board type. */
- /* TODO: A better solution is configure it according EFUSE during the run-time. */
- PHY_SetMacReg(padapter, 0x64, BIT20, 0x0); /*0x66[4]=0 */
- PHY_SetMacReg(padapter, 0x64, BIT24, 0x0); /*0x66[8]=0 */
- PHY_SetMacReg(padapter, 0x40, BIT4, 0x0); /*0x40[4]=0 */
- PHY_SetMacReg(padapter, 0x40, BIT3, 0x1); /*0x40[3]=1 */
- PHY_SetMacReg(padapter, 0x4C, BIT24, 0x1); /*0x4C[24:23]=10 */
- PHY_SetMacReg(padapter, 0x4C, BIT23, 0x0); /*0x4C[24:23]=10 */
- PHY_SetBBReg(padapter, 0x944, BIT1 | BIT0, 0x3); /*0x944[1:0]=11 */
- PHY_SetBBReg(padapter, 0x930, bMaskByte0, 0x77); /*0x930[7:0]=77 */
- PHY_SetMacReg(padapter, 0x38, BIT11, 0x1); /*0x38[11]=1 */
+ /* LED(GPIO4) disable for AntDiv */
+ PHY_SetMacReg(padapter, 0x4C, BIT21, 0x0);
#endif
}
@@ -3389,12 +3438,14 @@ void init_hal_spec_8188f(_adapter *adapter)
{
struct hal_spec_t *hal_spec = GET_HAL_SPEC(adapter);
+ hal_spec->ic_name = "rtl8188f";
hal_spec->macid_num = MACID_NUM_8188F;
hal_spec->sec_cam_ent_num = SEC_CAM_ENT_NUM_8188F;
hal_spec->sec_cap = 0;
hal_spec->nss_num = NSS_NUM_8188F;
hal_spec->band_cap = BAND_CAP_8188F;
hal_spec->bw_cap = BW_CAP_8188F;
+ hal_spec->proto_cap = PROTO_CAP_8188F;
hal_spec->wl_func = 0
| WL_FUNC_P2P
@@ -4194,122 +4245,6 @@ Hal_EfuseParseEEPROMVer_8188F(
pHalData->EEPROMVersion));
}
-#ifndef DBG_PPG_MAC_HIDDEN_HANDLE
- #define DBG_PPG_MAC_HIDDEN_HANDLE 0
-#endif
-
-#define PPG_MAC_HIDDEN_START_8188F 0xF8
-#define PPG_MAC_HIDDEN_END_8188F 0xFD
-
-#define IS_PPG_RANGE_UUID_8188F ((PPG_MAC_HIDDEN_START_8188F <= 0xF4) && (PPG_MAC_HIDDEN_END_8188F >= 0xF7))
-#define GET_PMH_UUID_X_8188F(_pmh_m) LE_BITS_TO_1BYTE(((u8 *)(_pmh_m)) + 0xF4 - PPG_MAC_HIDDEN_START_8188F, 0, 8)
-#define GET_PMH_UUID_Y_8188F(_pmh_m) LE_BITS_TO_1BYTE(((u8 *)(_pmh_m)) + 0xF5 - PPG_MAC_HIDDEN_START_8188F, 0, 8)
-#define GET_PMH_UUID_Z_8188F(_pmh_m) LE_BITS_TO_1BYTE(((u8 *)(_pmh_m)) + 0xF6 - PPG_MAC_HIDDEN_START_8188F, 0, 5)
-#define GET_PMH_UUID_CRC_8188F(_pmh_m) LE_BITS_TO_2BYTE(((u8 *)(_pmh_m)) + 0xF6 - PPG_MAC_HIDDEN_START_8188F, 5, 11)
-
-#define IS_PPG_RANGE_HCI_TYPE_8188F ((PPG_MAC_HIDDEN_START_8188F <= 0xF8) && (PPG_MAC_HIDDEN_END_8188F >= 0xF8))
-#define IS_PPG_RANGE_PACKAGE_TYPE_8188F ((PPG_MAC_HIDDEN_START_8188F <= 0xF8) && (PPG_MAC_HIDDEN_END_8188F >= 0xF8))
-#define GET_PMH_HCI_TYPE_8188F(_pmh_m) LE_BITS_TO_1BYTE(((u8 *)(_pmh_m)) + 0xF8 - PPG_MAC_HIDDEN_START_8188F, 0, 4)
-#define GET_PMH_PACKAGE_TYPE_8188F(_pmh_m) LE_BITS_TO_1BYTE(((u8 *)(_pmh_m)) + 0xF8 - PPG_MAC_HIDDEN_START_8188F, 4, 4)
-
-#define IS_PPG_RANGE_WL_FUNC_8188F ((PPG_MAC_HIDDEN_START_8188F <= 0xF9) && (PPG_MAC_HIDDEN_END_8188F >= 0xF9))
-#define IS_PPG_RANGE_HW_SPECIAL_TYPE_8188F ((PPG_MAC_HIDDEN_START_8188F <= 0xF9) && (PPG_MAC_HIDDEN_END_8188F >= 0xF9))
-#define GET_PMH_WL_FUNC_8188F(_pmh_m) LE_BITS_TO_1BYTE(((u8 *)(_pmh_m)) + 0xF9 - PPG_MAC_HIDDEN_START_8188F, 0, 4)
-#define GET_PMH_HW_SPECIAL_TYPE_8188F(_pmh_m) LE_BITS_TO_1BYTE(((u8 *)(_pmh_m)) + 0xF9 - PPG_MAC_HIDDEN_START_8188F, 4, 4)
-
-#define IS_PPG_RANGE_BW_8188F ((PPG_MAC_HIDDEN_START_8188F <= 0xFB) && (PPG_MAC_HIDDEN_END_8188F >= 0xFB))
-#define IS_PPG_RANGE_ANT_NUM_8188F ((PPG_MAC_HIDDEN_START_8188F <= 0xFB) && (PPG_MAC_HIDDEN_END_8188F >= 0xFB))
-#define GET_PMH_BW_8188F(_pmh_m) LE_BITS_TO_1BYTE(((u8 *)(_pmh_m)) + 0xFB - PPG_MAC_HIDDEN_START_8188F, 0, 3)
-#define GET_PMH_ANT_NUM_8188F(_pmh_m) LE_BITS_TO_1BYTE(((u8 *)(_pmh_m)) + 0xFB - PPG_MAC_HIDDEN_START_8188F, 5, 3)
-
-#define IS_PPG_RANGE_80211_PROTOCOL_8188F ((PPG_MAC_HIDDEN_START_8188F <= 0xFD) && (PPG_MAC_HIDDEN_END_8188F >= 0xFD))
-#define IS_PPG_RANGE_NIC_8188F ((PPG_MAC_HIDDEN_START_8188F <= 0xFD) && (PPG_MAC_HIDDEN_END_8188F >= 0xFD))
-#define GET_PMH_80211_PROTOCOL_8188F(_pmh_m) LE_BITS_TO_1BYTE(((u8 *)(_pmh_m)) + 0xFD - PPG_MAC_HIDDEN_START_8188F, 2, 2)
-#define GET_PMH_NIC_8188F(_pmh_m) LE_BITS_TO_1BYTE(((u8 *)(_pmh_m)) + 0xFD - PPG_MAC_HIDDEN_START_8188F, 6, 2)
-
-VOID
-Hal_EfuseParseMacHidden_8188F(
- IN PADAPTER adapter,
- IN u8 *hwinfo,
- IN BOOLEAN AutoLoadFail
-)
-{
- HAL_DATA_TYPE *hal_data = GET_HAL_DATA(adapter);
- struct hal_spec_t *hal_spec = GET_HAL_SPEC(adapter);
-
- u8 pmh_map[PPG_MAC_HIDDEN_END_8188F - PPG_MAC_HIDDEN_START_8188F + 1];
- u16 start = PPG_MAC_HIDDEN_START_8188F;
- u16 end = PPG_MAC_HIDDEN_END_8188F;
- int i;
-
- u8 uuid_x = 0;
- u8 uuid_y = 0;
- u8 uuid_z = 0;
- u16 uuid_crc = 0;
- u8 hci_type = 0x0F; /* no used */
- u8 package_type = 0x0F; /* QFN24 */
- u8 wl_func = 0xF; /* all support */
- u8 hw_stype = 0x0F; /* no used */
- u8 bw = 0x6; /* 40MHz */
- u8 ant_num = 0x01 /* 1 ANT */;
- u8 protocol = 0x02; /* 11n only */
- u8 nic = 0x03; /* NIC */
-
- Efuse_PowerSwitch(adapter, _FALSE, _TRUE);
- for (i = 0; i <= end - start; i++)
- efuse_OneByteRead(adapter, start + i, pmh_map + i, FALSE);
- Efuse_PowerSwitch(adapter, _FALSE, _FALSE);
-
-#if IS_PPG_RANGE_UUID_8188F
- uuid_x = GET_PMH_UUID_X_8188F(pmh_map);
- uuid_y = GET_PMH_UUID_Y_8188F(pmh_map);
- uuid_z = GET_PMH_UUID_Z_8188F(pmh_map);
- uuid_crc = GET_PMH_UUID_CRC_8188F(pmh_map);
-#endif
-#if IS_PPG_RANGE_HCI_TYPE_8188F
- hci_type = GET_PMH_HCI_TYPE_8188F(pmh_map);
-#endif
-#if IS_PPG_RANGE_PACKAGE_TYPE_8188F
- package_type = GET_PMH_PACKAGE_TYPE_8188F(pmh_map);
-#endif
-#if IS_PPG_RANGE_WL_FUNC_8188F
- wl_func = GET_PMH_WL_FUNC_8188F(pmh_map);
-#endif
-#if IS_PPG_RANGE_HW_SPECIAL_TYPE_8188F
- hw_stype = GET_PMH_HW_SPECIAL_TYPE_8188F(pmh_map);
-#endif
-#if IS_PPG_RANGE_BW_8188F
- bw = GET_PMH_BW_8188F(pmh_map);
-#endif
-#if IS_PPG_RANGE_ANT_NUM_8188F
- ant_num = GET_PMH_ANT_NUM_8188F(pmh_map);
-#endif
-#if IS_PPG_RANGE_80211_PROTOCOL_8188F
- protocol = GET_PMH_80211_PROTOCOL_8188F(pmh_map);
-#endif
-#if IS_PPG_RANGE_NIC_8188F
- nic = GET_PMH_NIC_8188F(pmh_map);
-#endif
-
- if (DBG_PPG_MAC_HIDDEN_HANDLE) {
- if (IS_PPG_RANGE_UUID_8188F)
- DBG_871X("uuid x:0x%02x y:0x%02x z:0x%x crc:0x%x\n", uuid_x, uuid_y, uuid_z, uuid_crc);
- DBG_871X("hci_type:0x%x\n", hci_type);
- DBG_871X("package_type:0x%x\n", package_type);
- DBG_871X("wl_func:0x%x\n", wl_func);
- DBG_871X("hw_stype:0x%x\n", hw_stype);
- DBG_871X("bw:0x%x\n", bw);
- DBG_871X("ant_num:0x%x\n", ant_num);
- DBG_871X("protocol:0x%x\n", protocol);
- DBG_871X("nic:0x%x\n", nic);
- }
-
- hal_data->PackageType = package_type;
- hal_spec->wl_func &= mac_hidden_wl_func_to_hal_wl_func(wl_func);
- hal_spec->bw_cap &= mac_hidden_max_bw_to_hal_bw_cap(bw);
- hal_spec->nss_num = rtw_min(hal_spec->nss_num, ant_num);
-}
-
#if 0 /* Do not need for rtl8188f */
VOID
Hal_EfuseParseVoltage_8188F(
@@ -4336,13 +4271,13 @@ Hal_EfuseParseChnlPlan_8188F(
{
padapter->mlmepriv.ChannelPlan = hal_com_config_channel_plan(
padapter
+ , hwinfo ? &hwinfo[EEPROM_COUNTRY_CODE_8188F] : NULL
, hwinfo ? hwinfo[EEPROM_ChannelPlan_8188F] : 0xFF
+ , padapter->registrypriv.alpha2
, padapter->registrypriv.channel_plan
, RTW_CHPLAN_WORLD_NULL
, AutoLoadFail
);
-
- RT_TRACE(_module_hci_hal_init_c_, _drv_notice_, ("EEPROM ChannelPlan=0x%02x\n", padapter->mlmepriv.ChannelPlan));
}
VOID
@@ -4411,29 +4346,34 @@ Hal_EfuseParseAntennaDiversity_8188F(
PHAL_DATA_TYPE pHalData = GET_HAL_DATA(pAdapter);
struct registry_priv *registry_par = &pAdapter->registrypriv;
- if (pHalData->EEPROMBluetoothAntNum == Ant_x1)
- pHalData->AntDivCfg = 0;
- else {
- if (registry_par->antdiv_cfg == 2) /* 0:OFF , 1:ON, 2:By EFUSE */
+ /* default:rtw_antdiv_cfg, 0:OFF, 1:ON, 2:By EFUSE */
+ if (registry_par->antdiv_cfg == 2) {
+ if (0x01 == hwinfo[EEPROM_RF_ANTENNA_OPT_8188F])
pHalData->AntDivCfg = 1;
else
- pHalData->AntDivCfg = registry_par->antdiv_cfg;
- }
+ pHalData->AntDivCfg = 0;
+ } else if (registry_par->antdiv_cfg == 1)
+ pHalData->AntDivCfg = 1;
+ else
+ pHalData->AntDivCfg = 0;
/* If TRxAntDivType is AUTO in advanced setting, use EFUSE value instead. */
+ /* default:rtw_antdiv_type */
if (registry_par->antdiv_type == 0) {
+#if 0
pHalData->TRxAntDivType = hwinfo[EEPROM_RFE_OPTION_8188F];
if (pHalData->TRxAntDivType == 0xFF)
- pHalData->TRxAntDivType = S0S1_SW_ANTDIV;/*GetRegAntDivType(pAdapter); */
- else if (pHalData->TRxAntDivType == 0x10)
- pHalData->TRxAntDivType = S0S1_SW_ANTDIV; /*intrnal switch S0S1 */
- else if (pHalData->TRxAntDivType == 0x11)
- pHalData->TRxAntDivType = S0S1_SW_ANTDIV; /*intrnal switch S0S1 */
+ pHalData->TRxAntDivType = S0S1_SW_ANTDIV;
else
DBG_8192C("%s: efuse[0x%x]=0x%02x is unknown type\n",
- __func__, EEPROM_RFE_OPTION_8188F, pHalData->TRxAntDivType);
+ __func__, EEPROM_RFE_OPTION_8188F, pHalData->TRxAntDivType);
+#else
+ /* 8188F only intrnal switch S0S1 */
+ pHalData->TRxAntDivType = S0S1_SW_ANTDIV;
+#endif
} else {
- pHalData->TRxAntDivType = registry_par->antdiv_type;/*GetRegAntDivType(pAdapter); */
+ /* 8188F only intrnal switch S0S1 */
+ pHalData->TRxAntDivType = S0S1_SW_ANTDIV;
}
DBG_8192C("%s: AntDivCfg=%d, AntDivType=%d\n",
@@ -4493,39 +4433,39 @@ void Hal_EfuseParseKFreeData_8188F(
IN u8 *PROMContent,
IN BOOLEAN AutoloadFail)
{
-#ifdef CONFIG_RF_GAIN_OFFSET
+#ifdef CONFIG_RF_POWER_TRIM
+#define THERMAL_K_MEAN_OFFSET_8188F 5 /* 8188F FT thermal K mean value has +5 offset, it's special case */
HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
struct kfree_data_t *kfree_data = &pHalData->kfree_data;
+ u8 pg_pwrtrim = 0xFF, pg_therm = 0xFF;
- if ((Adapter->registrypriv.RegRfKFreeEnable == 1) || !AutoloadFail) {
- kfree_data->bb_gain[BB_GAIN_2G][RF_PATH_A]
- = KFREE_BB_GAIN_2G_TX_OFFSET(EFUSE_Read1Byte(Adapter, PPG_BB_GAIN_2G_TXA_OFFSET_8188F) & PPG_BB_GAIN_2G_TX_OFFSET_MASK);
- kfree_data->thermal
- = KFREE_THERMAL_OFFSET(EFUSE_Read1Byte(Adapter, PPG_THERMAL_OFFSET_8188F) & PPG_THERMAL_OFFSET_MASK);
-
- if (GET_PG_KFREE_ON_8188F(PROMContent) && PROMContent[0xc1] != 0xff)
- kfree_data->flag |= KFREE_FLAG_ON;
- if (GET_PG_KFREE_THERMAL_K_ON_8188F(PROMContent) && PROMContent[0xc8] != 0xff)
- kfree_data->flag |= KFREE_FLAG_THERMAL_K_ON;
+ pg_pwrtrim = EFUSE_Read1Byte(Adapter, PPG_BB_GAIN_2G_TXA_OFFSET_8188F);
+ pg_therm = EFUSE_Read1Byte(Adapter, PPG_THERMAL_OFFSET_8188F);
+ if (pg_pwrtrim != 0xFF) {
+ kfree_data->bb_gain[BB_GAIN_2G][RF_PATH_A]
+ = KFREE_BB_GAIN_2G_TX_OFFSET(pg_pwrtrim & PPG_BB_GAIN_2G_TX_OFFSET_MASK);
+ kfree_data->flag |= KFREE_FLAG_ON;
}
- if (Adapter->registrypriv.RegRfKFreeEnable == 1) {
- kfree_data->flag |= KFREE_FLAG_ON;
+ if (pg_therm != 0xFF) {
+ kfree_data->thermal
+ = KFREE_THERMAL_OFFSET(pg_therm & PPG_THERMAL_OFFSET_MASK) - THERMAL_K_MEAN_OFFSET_8188F;
+ if (GET_PG_KFREE_THERMAL_K_ON_8188F(PROMContent))
kfree_data->flag |= KFREE_FLAG_THERMAL_K_ON;
}
if (kfree_data->flag & KFREE_FLAG_THERMAL_K_ON)
- pHalData->EEPROMThermalMeter += kfree_data->thermal;
+ pHalData->EEPROMThermalMeter -= kfree_data->thermal;
- DBG_871X("kfree flag:%u\n", kfree_data->flag);
- if (Adapter->registrypriv.RegRfKFreeEnable == 1 || kfree_data->flag & KFREE_FLAG_ON)
+ DBG_871X("kfree Pwr Trim flag:%u\n", kfree_data->flag);
+ if (kfree_data->flag & KFREE_FLAG_ON)
DBG_871X("bb_gain:%d\n", kfree_data->bb_gain[BB_GAIN_2G][RF_PATH_A]);
- if (Adapter->registrypriv.RegRfKFreeEnable == 1 || kfree_data->flag & KFREE_FLAG_THERMAL_K_ON)
+ if (kfree_data->flag & KFREE_FLAG_THERMAL_K_ON)
DBG_871X("thermal:%d\n", kfree_data->thermal);
-#endif /*CONFIG_RF_GAIN_OFFSET */
+#endif /*CONFIG_RF_POWER_TRIM */
}
u8
@@ -4716,8 +4656,12 @@ static void rtl8188f_fill_default_txdesc(
SET_TX_DESC_SEC_TYPE_8188F(pbuf, fill_txdesc_sectype(pattrib));
fill_txdesc_vcs_8188f(padapter, pattrib, pbuf);
- if (pattrib->icmp_pkt == 1 && padapter->registrypriv.wifi_spec == 1)
- drv_userate = 1;
+#ifdef CONFIG_P2P
+ if (!rtw_p2p_chk_state(&padapter->wdinfo, P2P_STATE_NONE)) {
+ if (pattrib->icmp_pkt == 1 && padapter->registrypriv.wifi_spec == 1)
+ drv_userate = 1;
+ }
+#endif
if ((pattrib->ether_type != 0x888e) &&
(pattrib->ether_type != 0x0806) &&
@@ -5896,6 +5840,7 @@ s32 c2h_handler_8188f(PADAPTER padapter, u8 *buf)
break;
#endif
*/
+
default:
break;
}
@@ -6014,13 +5959,24 @@ void rtl8188f_c2h_packet_handler(PADAPTER padapter, u8 *pbuf, u16 length)
process_c2h_event(padapter, &C2hEvent, pdata);
break;
+ case C2H_BCN_EARLY_RPT:
+#ifdef CONFIG_TDLS
+#ifdef CONFIG_TDLS_CH_SW
+ rtw_tdls_ch_sw_back_to_base_chnl(padapter);
+#endif
+#endif
+ break;
+
+ case C2H_FW_CHNL_SWITCH_COMPLETE:
+#ifdef CONFIG_TDLS
+#ifdef CONFIG_TDLS_CH_SW
+ rtw_tdls_chsw_oper_done(padapter);
+#endif
+#endif
+ break;
+
default:
- pdata = rtw_zmalloc(length);
- if (pdata == NULL)
- break;
- _rtw_memcpy(pdata, pbuf, length);
- if (rtw_c2h_packet_wk_cmd(padapter, pdata, length) == _FAIL)
- rtw_mfree(pdata, length);
+ rtw_c2h_packet_wk_cmd(padapter, pbuf, length);
break;
}
}
@@ -6443,24 +6399,6 @@ void SetHwReg8188F(PADAPTER padapter, u8 variable, u8 *val)
rtw_write32(padapter, REG_RCR, rtw_read32(padapter, REG_RCR) | (RCR_CBSSID_DATA));
break;
#endif /*CONFIG_TDLS */
-
-#ifdef CONFIG_ANTENNA_DIVERSITY
- case HW_VAR_ANTENNA_DIVERSITY_SELECT:
- {
- u8 Optimum_antenna = (*(u8 *)val);
- u8 Ant;
- /*switch antenna to Optimum_antenna*/
- /*DBG_8192C("==> HW_VAR_ANTENNA_DIVERSITY_SELECT , Ant_(%s)\n",(Optimum_antenna==2)?"A":"B");*/
- if (pHalData->CurAntenna != Optimum_antenna) {
- Ant = (Optimum_antenna == 2) ? MAIN_ANT : AUX_ANT;
- ODM_UpdateRxIdleAnt(&pHalData->odmpriv, Ant);
-
- pHalData->CurAntenna = Optimum_antenna;
- /*DBG_8192C("==> HW_VAR_ANTENNA_DIVERSITY_SELECT , Ant_(%s)\n",(Optimum_antenna==2)?"A":"B");*/
- }
- }
- break;
-#endif
case HW_VAR_EFUSE_USAGE:
pHalData->EfuseUsedPercentage = *val;
@@ -6728,6 +6666,13 @@ void SetHwReg8188F(PADAPTER padapter, u8 variable, u8 *val)
case HW_VAR_EN_HW_UPDATE_TSF:
hw_var_set_hw_update_tsf(padapter);
break;
+#ifdef CONFIG_TDLS
+#ifdef CONFIG_TDLS_CH_SW
+ case HW_VAR_TDLS_BCN_EARLY_C2H_RPT:
+ rtl8188f_set_BcnEarly_C2H_Rpt_cmd(padapter, *val);
+ break;
+#endif
+#endif
default:
SetHwReg(padapter, variable, val);
break;
@@ -6851,12 +6796,6 @@ void GetHwReg8188F(PADAPTER padapter, u8 variable, u8 *val)
}
break;
-#ifdef CONFIG_ANTENNA_DIVERSITY
- case HW_VAR_CURRENT_ANTENNA:
- *val = pHalData->CurAntenna;
- break;
-#endif
-
case HW_VAR_EFUSE_USAGE:
*val = pHalData->EfuseUsedPercentage;
break;
@@ -6954,6 +6893,91 @@ void SetHwRegWithBuf8188F(PADAPTER padapter, u8 variable, u8 *pbuf, int len)
}
#endif /* CONFIG_C2H_PACKET_EN */
+void hal_ra_info_dump(_adapter *padapter , void *sel)
+{
+ int i;
+ u8 mac_id;
+ u32 cmd;
+ u32 ra_info1, ra_info2, bw_set;
+ u32 rate_mask1, rate_mask2;
+ u8 curr_tx_rate, curr_tx_sgi, hight_rate, lowest_rate;
+ HAL_DATA_TYPE *HalData = GET_HAL_DATA(padapter);
+ struct dvobj_priv *dvobj = adapter_to_dvobj(padapter);
+ struct macid_ctl_t *macid_ctl = dvobj_to_macidctl(dvobj);
+
+ for (i = 0; i < macid_ctl->num; i++) {
+
+ if (rtw_macid_is_used(macid_ctl, i) && !rtw_macid_is_bmc(macid_ctl, i)) {
+
+ mac_id = (u8) i;
+ DBG_871X_SEL(sel , "============ RA status check Mac_id:%d ===================\n", mac_id);
+
+ cmd = 0x40000100 | mac_id;
+ rtw_write32(padapter, REG_HMEBOX_DBG_2_8188F, cmd);
+ rtw_msleep_os(10);
+ ra_info1 = rtw_read32(padapter, 0x2F0);
+ curr_tx_rate = ra_info1 & 0x7F;
+ curr_tx_sgi = (ra_info1 >> 7) & 0x01;
+
+ DBG_871X_SEL(sel , "[ ra_info1:0x%08x ] =>cur_tx_rate= %s,cur_sgi:%d\n" , ra_info1 , HDATA_RATE(curr_tx_rate), curr_tx_sgi);
+ DBG_871X_SEL(sel , "[ ra_info1:0x%08x ] => PWRSTS = 0x%02x\n", ra_info1, (ra_info1 >> 8) & 0x07);
+
+ cmd = 0x40000400 | mac_id;
+ rtw_write32(padapter, REG_HMEBOX_DBG_2_8188F, cmd);
+ rtw_msleep_os(10);
+ ra_info1 = rtw_read32(padapter, 0x2F0);
+ ra_info2 = rtw_read32(padapter, 0x2F4);
+ rate_mask1 = rtw_read32(padapter, 0x2F8);
+ rate_mask2 = rtw_read32(padapter, 0x2FC);
+ hight_rate = ra_info2 & 0xFF;
+ lowest_rate = (ra_info2 >> 8) & 0xFF;
+ bw_set = (ra_info1 >> 8) & 0xFF;
+
+ DBG_871X_SEL(sel , "[ ra_info1:0x%08x ] => VHT_EN=0x%02x, ", ra_info1, (ra_info1>>24) & 0xFF);
+
+ switch (bw_set) {
+
+ case CHANNEL_WIDTH_20:
+ DBG_871X_SEL(sel , "BW_setting=20M\n");
+ break;
+
+ case CHANNEL_WIDTH_40:
+ DBG_871X_SEL(sel , "BW_setting=40M\n");
+ break;
+
+ case CHANNEL_WIDTH_80:
+ DBG_871X_SEL(sel , "BW_setting=80M\n");
+ break;
+
+ case CHANNEL_WIDTH_160:
+ DBG_871X_SEL(sel , "BW_setting=160M\n");
+ break;
+
+ default:
+ DBG_871X_SEL(sel , "BW_setting=0x%02x\n", bw_set);
+ break;
+
+ }
+
+ DBG_871X_SEL(sel , "[ ra_info1:0x%08x ] =>RSSI=%d, DISRA=0x%02x\n",
+ ra_info1,
+ ra_info1 & 0xFF,
+ (ra_info1 >> 16) & 0xFF);
+
+ DBG_871X_SEL(sel , "[ ra_info2:0x%08x ] =>hight_rate=%s, lowest_rate=%s, SGI=0x%02x, RateID=%d\n",
+ ra_info2,
+ HDATA_RATE(hight_rate),
+ HDATA_RATE(lowest_rate),
+ (ra_info2 >> 16) & 0xFF,
+ (ra_info2 >> 24) & 0xFF);
+
+ DBG_871X_SEL(sel , "rate_mask2=0x%08x, rate_mask1=0x%08x\n", rate_mask2, rate_mask1);
+
+
+ }
+ }
+}
+
/*
* Description:
* Query setting of specified variable.
@@ -7000,54 +7024,8 @@ u8 GetHalDefVar8188F(PADAPTER padapter, HAL_DEF_VARIABLE variable, void *pval)
*((u8 *)pval) = _FALSE;
break;
- case HW_DEF_RA_INFO_DUMP: {
- u8 mac_id = *(u8 *)pval;
- u32 cmd;
- u32 ra_info1, ra_info2;
- u32 rate_mask1, rate_mask2;
- u8 curr_tx_rate, curr_tx_sgi, hight_rate, lowest_rate;
-
- DBG_8192C("============ RA status check Mac_id:%d ===================\n", mac_id);
-
- cmd = 0x40000100 | mac_id;
- rtw_write32(padapter, REG_HMEBOX_DBG_2_8188F, cmd);
- rtw_msleep_os(10);
- ra_info1 = rtw_read32(padapter, 0x2F0);
- curr_tx_rate = ra_info1 & 0x7F;
- curr_tx_sgi = (ra_info1 >> 7) & 0x01;
- DBG_8192C("[ ra_info1:0x%08x ] =>cur_tx_rate= %s,cur_sgi:%d, PWRSTS = 0x%02x\n",
- ra_info1,
- HDATA_RATE(curr_tx_rate),
- curr_tx_sgi,
- (ra_info1 >> 8) & 0x07);
-
- cmd = 0x40000400 | mac_id;
- rtw_write32(padapter, REG_HMEBOX_DBG_2_8188F, cmd);
- rtw_msleep_os(10);
- ra_info1 = rtw_read32(padapter, 0x2F0);
- ra_info2 = rtw_read32(padapter, 0x2F4);
- rate_mask1 = rtw_read32(padapter, 0x2F8);
- rate_mask2 = rtw_read32(padapter, 0x2FC);
- hight_rate = ra_info2 & 0xFF;
- lowest_rate = (ra_info2 >> 8) & 0xFF;
-
- DBG_8192C("[ ra_info1:0x%08x ] =>RSSI=%d, BW_setting=0x%02x, DISRA=0x%02x, VHT_EN=0x%02x\n",
- ra_info1,
- ra_info1 & 0xFF,
- (ra_info1 >> 8) & 0xFF,
- (ra_info1 >> 16) & 0xFF,
- (ra_info1 >> 24) & 0xFF);
-
- DBG_8192C("[ ra_info2:0x%08x ] =>hight_rate=%s, lowest_rate=%s, SGI=0x%02x, RateID=%d\n",
- ra_info2,
- HDATA_RATE(hight_rate),
- HDATA_RATE(lowest_rate),
- (ra_info2 >> 16) & 0xFF,
- (ra_info2 >> 24) & 0xFF);
-
- DBG_8192C("rate_mask2=0x%08x, rate_mask1=0x%08x\n", rate_mask2, rate_mask1);
-
- }
+ case HW_DEF_RA_INFO_DUMP:
+ hal_ra_info_dump(padapter, pval);
break;
case HAL_DEF_TX_PAGE_BOUNDARY:
diff --git a/rtl8188FU/hal/rtl8188f/rtl8188f_phycfg.c b/rtl8188FU/hal/rtl8188f/rtl8188f_phycfg.c
index 94fa1a9..40fe483 100755
--- a/rtl8188FU/hal/rtl8188f/rtl8188f_phycfg.c
+++ b/rtl8188FU/hal/rtl8188f/rtl8188f_phycfg.c
@@ -234,6 +234,7 @@ phy_RFSerialRead_8188F(
u4Byte MaskforPhySet = 0;
int i = 0;
+ _enter_critical_mutex(&(adapter_to_dvobj(Adapter)->rf_read_reg_mutex) , NULL);
/* */
/* Make sure RF register offset is correct */
/* */
@@ -277,6 +278,7 @@ phy_RFSerialRead_8188F(
/*RT_DISP(FINIT, INIT_RF,("Readback from RF-SI : 0x%x\n", retValue)); */
}
+ _exit_critical_mutex(&(adapter_to_dvobj(Adapter)->rf_read_reg_mutex) , NULL);
return retValue;
}
@@ -471,17 +473,12 @@ s32 PHY_MACConfig8188F(PADAPTER Adapter)
{
int rtStatus = _SUCCESS;
HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
- s8 *pszMACRegFile;
- s8 sz8188MACRegFile[] = RTL8188F_PHY_MACREG;
-
-
- pszMACRegFile = sz8188MACRegFile;
/* */
/* Config MAC */
/* */
#ifdef CONFIG_LOAD_PHY_PARA_FROM_FILE
- rtStatus = phy_ConfigMACWithParaFile(Adapter, pszMACRegFile);
+ rtStatus = phy_ConfigMACWithParaFile(Adapter, PHY_FILE_MAC_REG);
if (rtStatus == _FAIL)
#endif
{
@@ -539,76 +536,6 @@ phy_InitBBRFRegisterDefinition(
}
-#if 0 /* (MP_DRIVER == 1) */
-
-/*-----------------------------------------------------------------------------
- * Function: phy_ConfigBBWithMpHeaderFile
- *
- * Overview: Config PHY_REG_MP array
- *
- * Input: NONE
- *
- * Output: NONE
- *
- * Return: NONE
- *
- * Revised History:
- * When Who Remark
- * 02/04/2010 chiyokolin Modify to new files.
- *---------------------------------------------------------------------------*/
-static int
-phy_ConfigBBWithMpHeaderFile(
- IN PADAPTER Adapter,
- IN u1Byte ConfigType)
-{
- int i;
- u32 *Rtl8192CPHY_REGArray_Table_MP;
- u16 PHY_REGArrayMPLen;
- HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
-
-
- PHY_REGArrayMPLen = Rtl8188F_PHY_REG_Array_MPLength;
- Rtl8192CPHY_REGArray_Table_MP = (u32 *)Rtl8188F_PHY_REG_Array_MP;
-
- if (ConfigType == BaseBand_Config_PHY_REG) {
- for (i = 0; i < PHY_REGArrayMPLen; i = i + 2) {
- if (Rtl8192CPHY_REGArray_Table_MP[i] == 0xfe) {
-#ifdef CONFIG_LONG_DELAY_ISSUE
- rtw_msleep_os(50);
-#else
- rtw_mdelay_os(50);
-#endif
- } else if (Rtl8192CPHY_REGArray_Table_MP[i] == 0xfd)
- rtw_mdelay_os(5);
- else if (Rtl8192CPHY_REGArray_Table_MP[i] == 0xfc)
- rtw_mdelay_os(1);
- else if (Rtl8192CPHY_REGArray_Table_MP[i] == 0xfb) {
-#ifdef CONFIG_LONG_DELAY_ISSUE
- rtw_msleep_os(50);
-#else
- rtw_mdelay_os(50);
-#endif
- } else if (Rtl8192CPHY_REGArray_Table_MP[i] == 0xfa)
- rtw_mdelay_os(5);
- else if (Rtl8192CPHY_REGArray_Table_MP[i] == 0xf9)
- rtw_mdelay_os(1);
- PHY_SetBBReg(Adapter, Rtl8192CPHY_REGArray_Table_MP[i], bMaskDWord, Rtl8192CPHY_REGArray_Table_MP[i + 1]);
-
- /* Add 1us delay between BB/RF register setting. */
- rtw_mdelay_os(1);
-
- /*RT_TRACE(COMP_INIT, DBG_TRACE, ("The Rtl8192CPHY_REGArray_Table_MP[%d] is %lx Rtl8192CPHY_REGArray_Table_MP[%d] is %lx\n", i, i+1, Rtl8192CPHY_REGArray_Table_MP[i], Rtl8192CPHY_REGArray_Table_MP[i+1])); */
- }
- } else {
- /*RT_TRACE(COMP_SEND, DBG_LOUD, ("phy_ConfigBBWithMpHeaderFile(): ConfigType != BaseBand_Config_PHY_REG\n")); */
- }
-
- return _SUCCESS;
-} /* phy_ConfigBBWithMpHeaderFile */
-
-#endif /* #if (MP_DRIVER == 1) */
-
-
static int
phy_BB8188f_Config_ParaFile(
IN PADAPTER Adapter
@@ -616,20 +543,12 @@ phy_BB8188f_Config_ParaFile(
{
HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
int rtStatus = _SUCCESS;
- u8 sz8188FBRegFile[] = RTL8188F_PHY_REG;
- u8 sz8188AGCTableFile[] = RTL8188F_AGC_TAB;
- u8 sz8188FBRegMpFile[] = RTL8188F_PHY_REG_MP;
- u8 *pszBBRegFile = NULL, *pszAGCTableFile = NULL, *pszBBRegMpFile = NULL;
-
- pszBBRegFile = sz8188FBRegFile;
- pszAGCTableFile = sz8188AGCTableFile;
- pszBBRegMpFile = sz8188FBRegMpFile;
/* */
/* 1. Read PHY_REG.TXT BB INIT!! */
/* */
#ifdef CONFIG_LOAD_PHY_PARA_FROM_FILE
- if (phy_ConfigBBWithParaFile(Adapter, pszBBRegFile, CONFIG_BB_PHY_REG) == _FAIL)
+ if (phy_ConfigBBWithParaFile(Adapter, PHY_FILE_PHY_REG, CONFIG_BB_PHY_REG) == _FAIL)
#endif
{
#ifdef CONFIG_EMBEDDED_FWIMG
@@ -649,7 +568,7 @@ phy_BB8188f_Config_ParaFile(
/* 1.1 Read PHY_REG_MP.TXT BB INIT!! */
/* */
#ifdef CONFIG_LOAD_PHY_PARA_FROM_FILE
- if (phy_ConfigBBWithMpParaFile(Adapter, pszBBRegMpFile) == _FAIL)
+ if (phy_ConfigBBWithMpParaFile(Adapter, PHY_FILE_PHY_REG_MP) == _FAIL)
#endif
{
#ifdef CONFIG_EMBEDDED_FWIMG
@@ -669,7 +588,7 @@ phy_BB8188f_Config_ParaFile(
/* 2. Read BB AGC table Initialization */
/* */
#ifdef CONFIG_LOAD_PHY_PARA_FROM_FILE
- if (phy_ConfigBBWithParaFile(Adapter, pszAGCTableFile, CONFIG_BB_AGC_TAB) == _FAIL)
+ if (phy_ConfigBBWithParaFile(Adapter, PHY_FILE_AGC_TAB, CONFIG_BB_AGC_TAB) == _FAIL)
#endif
{
#ifdef CONFIG_EMBEDDED_FWIMG
@@ -740,16 +659,6 @@ PHY_BBConfig8188F(
return rtStatus;
}
-void phy_LCK_8188F(
- IN PADAPTER Adapter
-)
-{
- PHY_SetRFReg(Adapter, RF_PATH_A, 0xB0, bRFRegOffsetMask, 0xDFBE0);
- PHY_SetRFReg(Adapter, RF_PATH_A, RF_CHNLBW, bRFRegOffsetMask, 0x8C01);
- rtw_mdelay_os(200);
- PHY_SetRFReg(Adapter, RF_PATH_A, 0xB0, bRFRegOffsetMask, 0xDFFE0);
-}
-
#if 0
/* Block & Path enable */
#define rOFDMCCKEN_Jaguar 0x808 /* OFDM/CCK block enable */
@@ -798,7 +707,6 @@ PHY_RFConfig8188F(
/* */
rtStatus = PHY_RF6052_Config8188F(Adapter);
- phy_LCK_8188F(Adapter);
/*PHY_BB8188F_Config_1T(Adapter); */
return rtStatus;
@@ -1004,13 +912,16 @@ PHY_SetTxPowerLevel8188F(
)
{
PHAL_DATA_TYPE pHalData = GET_HAL_DATA(Adapter);
- PDM_ODM_T pDM_Odm = &pHalData->odmpriv;
- pFAT_T pDM_FatTable = &pDM_Odm->DM_FatTable;
+ u8 cur_antenna;
u8 RFPath = ODM_RF_PATH_A;
+#ifdef CONFIG_ANTENNA_DIVERSITY
+ rtw_hal_get_odm_var(Adapter, HAL_ODM_ANTDIV_SELECT, &cur_antenna, NULL);
+
if (pHalData->AntDivCfg) /* antenna diversity Enable */
- RFPath = ((pDM_FatTable->RxIdleAnt == MAIN_ANT) ? ODM_RF_PATH_A : ODM_RF_PATH_B);
+ RFPath = ((cur_antenna == MAIN_ANT) ? ODM_RF_PATH_A : ODM_RF_PATH_B);
else /* antenna diversity disable */
+#endif
RFPath = pHalData->ant_path;
RT_TRACE(_module_hal_init_c_, _drv_info_, ("==>PHY_SetTxPowerLevel8188F()\n"));
@@ -1047,7 +958,7 @@ phy_SpurCalibration_8188F(
IN u1Byte threshold
)
{
- u4Byte freq[6] = {0xFCCD, 0xFC4D, 0xFFCD, 0xFF4D, 0xFCCD, 0xFF9A}; /* {chnl 5, 6, 7, 8, 13, 14} */
+ u4Byte freq[7] = {0xFCCD, 0xFC4D, 0xFFCD, 0xFF4D, 0xFCCD, 0xFF9A, 0xFDCD}; /* {chnl 5, 6, 7, 8, 13, 14 , 11} */
u1Byte idx = 0;
u1Byte b_doNotch = FALSE;
u1Byte initial_gain;
@@ -1059,6 +970,8 @@ phy_SpurCalibration_8188F(
HAL_DATA_TYPE *pHalData = GET_HAL_DATA(pAdapter);
PDM_ODM_T pDM_Odm = &(pHalData->odmpriv);
+ ODM_SetBBReg(pDM_Odm, 0xC40, BIT28 | BIT27 | BIT26 | BIT25 | BIT24, 0x1F);
+ ODM_SetBBReg(pDM_Odm, 0xC40, BIT9, 0x1); /*enable notch filter */
/* check threshold */
if (threshold <= 0x0)
threshold = 0x16;
@@ -1077,6 +990,8 @@ phy_SpurCalibration_8188F(
idx = 4;
else if (ToChannel == 14)
idx = 5;
+ else if (ToChannel == 11)
+ idx = 6;
else
idx = 10;
@@ -1092,8 +1007,9 @@ phy_SpurCalibration_8188F(
bSW_Ctrl_S1 = ((reg948 & BIT9) == 0x0) ? TRUE : FALSE;
/* If wlan at S1 (both HW control & SW control) and current channel=5,6,7,8,13,14 */
- if ((bHW_Ctrl_S1 || bSW_Ctrl_S1) && (idx <= 5)) {
+ if ((bHW_Ctrl_S1 || bSW_Ctrl_S1) && (idx <= 6)) {
initial_gain = (u1Byte)(ODM_GetBBReg(pDM_Odm, rOFDM0_XAAGCCore1, bMaskByte0) & 0x7f);
+ PHY_SetBBReg(pAdapter, rFPGA0_RFMOD, BIT24, 0); /* Disable CCK block */
ODM_Write_DIG(pDM_Odm, 0x30);
PHY_SetBBReg(pAdapter, rFPGA0_AnalogParameter4, bMaskDWord, 0xccf000c0); /* disable 3-wire */
@@ -1106,7 +1022,9 @@ phy_SpurCalibration_8188F(
b_doNotch = TRUE;
PHY_SetBBReg(pAdapter, rFPGA0_PSDFunction, bMaskDWord, freq[idx]); /* turn off PSD */
+
PHY_SetBBReg(pAdapter, rFPGA0_AnalogParameter4, bMaskDWord, 0xccc000c0); /* enable 3-wire */
+ PHY_SetBBReg(pAdapter, rFPGA0_RFMOD, BIT24, 1); /* Enable CCK block */
ODM_Write_DIG(pDM_Odm, initial_gain);
}
@@ -1118,8 +1036,8 @@ phy_SpurCalibration_8188F(
switch (wlan_channel) { /*Set notch filter */
case 5:
case 13:
- ODM_SetBBReg(pDM_Odm, 0xC40, BIT28 | BIT27 | BIT26 | BIT25 | BIT24, 0xB);
- ODM_SetBBReg(pDM_Odm, 0xC40, BIT9, 0x1); /*enable notch filter */
+ // ODM_SetBBReg(pDM_Odm, 0xC40, BIT28 | BIT27 | BIT26 | BIT25 | BIT24, 0xB);
+ // ODM_SetBBReg(pDM_Odm, 0xC40, BIT9, 0x1); /*enable notch filter */
ODM_SetBBReg(pDM_Odm, 0xD40, bMaskDWord, 0x06000000);
ODM_SetBBReg(pDM_Odm, 0xD44, bMaskDWord, 0x00000000);
ODM_SetBBReg(pDM_Odm, 0xD48, bMaskDWord, 0x00000000);
@@ -1127,8 +1045,8 @@ phy_SpurCalibration_8188F(
ODM_SetBBReg(pDM_Odm, 0xD2C, BIT28, 0x1); /*enable CSI mask */
break;
case 6:
- ODM_SetBBReg(pDM_Odm, 0xC40, BIT28 | BIT27 | BIT26 | BIT25 | BIT24, 0x4);
- ODM_SetBBReg(pDM_Odm, 0xC40, BIT9, 0x1); /*enable notch filter */
+ // ODM_SetBBReg(pDM_Odm, 0xC40, BIT28 | BIT27 | BIT26 | BIT25 | BIT24, 0x4);
+ // ODM_SetBBReg(pDM_Odm, 0xC40, BIT9, 0x1); /*enable notch filter */
ODM_SetBBReg(pDM_Odm, 0xD40, bMaskDWord, 0x00000600);
ODM_SetBBReg(pDM_Odm, 0xD44, bMaskDWord, 0x00000000);
ODM_SetBBReg(pDM_Odm, 0xD48, bMaskDWord, 0x00000000);
@@ -1136,8 +1054,8 @@ phy_SpurCalibration_8188F(
ODM_SetBBReg(pDM_Odm, 0xD2C, BIT28, 0x1); /*enable CSI mask */
break;
case 7:
- ODM_SetBBReg(pDM_Odm, 0xC40, BIT28 | BIT27 | BIT26 | BIT25 | BIT24, 0x3);
- ODM_SetBBReg(pDM_Odm, 0xC40, BIT9, 0x1); /*enable notch filter */
+ // ODM_SetBBReg(pDM_Odm, 0xC40, BIT28 | BIT27 | BIT26 | BIT25 | BIT24, 0x3);
+ // ODM_SetBBReg(pDM_Odm, 0xC40, BIT9, 0x1); /*enable notch filter */
ODM_SetBBReg(pDM_Odm, 0xD40, bMaskDWord, 0x00000000);
ODM_SetBBReg(pDM_Odm, 0xD44, bMaskDWord, 0x00000000);
ODM_SetBBReg(pDM_Odm, 0xD48, bMaskDWord, 0x00000000);
@@ -1145,17 +1063,26 @@ phy_SpurCalibration_8188F(
ODM_SetBBReg(pDM_Odm, 0xD2C, BIT28, 0x1); /*enable CSI mask */
break;
case 8:
- ODM_SetBBReg(pDM_Odm, 0xC40, BIT28 | BIT27 | BIT26 | BIT25 | BIT24, 0xA);
- ODM_SetBBReg(pDM_Odm, 0xC40, BIT9, 0x1); /*enable notch filter */
+ // ODM_SetBBReg(pDM_Odm, 0xC40, BIT28 | BIT27 | BIT26 | BIT25 | BIT24, 0xA);
+ // ODM_SetBBReg(pDM_Odm, 0xC40, BIT9, 0x1); /*enable notch filter */
ODM_SetBBReg(pDM_Odm, 0xD40, bMaskDWord, 0x00000000);
ODM_SetBBReg(pDM_Odm, 0xD44, bMaskDWord, 0x00000000);
ODM_SetBBReg(pDM_Odm, 0xD48, bMaskDWord, 0x00000000);
ODM_SetBBReg(pDM_Odm, 0xD4C, bMaskDWord, 0x00000380);
ODM_SetBBReg(pDM_Odm, 0xD2C, BIT28, 0x1); /*enable CSI mask */
break;
+ case 11:
+ // ODM_SetBBReg(pDM_Odm, 0xC40, BIT28|BIT27|BIT26|BIT25|BIT24, 0x19);
+ // ODM_SetBBReg(pDM_Odm, 0xC40, BIT9, 0x1); //enable notch filter
+ ODM_SetBBReg(pDM_Odm, 0xD40, bMaskDWord, 0x00000000);
+ ODM_SetBBReg(pDM_Odm, 0xD44, bMaskDWord, 0x04000000);
+ ODM_SetBBReg(pDM_Odm, 0xD48, bMaskDWord, 0x00000000);
+ ODM_SetBBReg(pDM_Odm, 0xD4C, bMaskDWord, 0x00000000);
+ ODM_SetBBReg(pDM_Odm, 0xD2C, BIT28, 0x1); //enable CSI mask
+ break;
case 14:
- ODM_SetBBReg(pDM_Odm, 0xC40, BIT28 | BIT27 | BIT26 | BIT25 | BIT24, 0x5);
- ODM_SetBBReg(pDM_Odm, 0xC40, BIT9, 0x1); /*enable notch filter */
+ // ODM_SetBBReg(pDM_Odm, 0xC40, BIT28 | BIT27 | BIT26 | BIT25 | BIT24, 0x5);
+ // ODM_SetBBReg(pDM_Odm, 0xC40, BIT9, 0x1); /*enable notch filter */
ODM_SetBBReg(pDM_Odm, 0xD40, bMaskDWord, 0x00000000);
ODM_SetBBReg(pDM_Odm, 0xD44, bMaskDWord, 0x00000000);
ODM_SetBBReg(pDM_Odm, 0xD48, bMaskDWord, 0x00000000);
@@ -1163,14 +1090,14 @@ phy_SpurCalibration_8188F(
ODM_SetBBReg(pDM_Odm, 0xD2C, BIT28, 0x1); /*enable CSI mask */
break;
default:
- ODM_SetBBReg(pDM_Odm, 0xC40, BIT9, 0x0); /*disable notch filter */
+ // ODM_SetBBReg(pDM_Odm, 0xC40, BIT9, 0x0); /*disable notch filter */
ODM_SetBBReg(pDM_Odm, 0xD2C, BIT28, 0x0); /*disable CSI mask function */
break;
} /*switch(wlan_channel) */
return;
}
- ODM_SetBBReg(pDM_Odm, 0xC40, BIT9, 0x0); /*disable notch filter */
+ // ODM_SetBBReg(pDM_Odm, 0xC40, BIT9, 0x0); /*disable notch filter */
ODM_SetBBReg(pDM_Odm, 0xD2C, BIT28, 0x0); /*disable CSI mask */
}
@@ -1299,7 +1226,8 @@ phy_PostSetBwMode8188F(
0x483[3:0]=1/2
0x440[22:21]=2'b00
- 0xc84[31:28]=0x2
+ 0xc84[31:28]=0x2 (SDIO)
+ 0xc84[31:28]=0x7 (USB)
*/
PHY_SetBBReg(Adapter, rFPGA0_RFMOD, BIT0, 0x1);
PHY_SetBBReg(Adapter, rFPGA1_RFMOD, BIT0, 0x1);
@@ -1317,8 +1245,6 @@ phy_PostSetBwMode8188F(
PHY_SetMacReg(Adapter, REG_DATA_SC_8188F, BIT3 | BIT2 | BIT1 | BIT0, SubChnlNum); /* txsc_20 */
PHY_SetMacReg(Adapter, REG_RRSR_8188F, BIT22 | BIT21, 0x0); /* RRSR_RSC */
- PHY_SetBBReg(Adapter, rOFDM0_XATxAFE, BIT31 | BIT30 | BIT29 | BIT28, 0x2); /* PDTH_BW40/ACPR */
-
if (0)
DBG_871X("%s: REG_DATA_SC_8188F(%d) nCur40MhzPrimeSC(%d)\n", __func__, SubChnlNum, pHalData->nCur40MhzPrimeSC);
break;
diff --git a/rtl8188FU/hal/rtl8188f/rtl8188f_rf6052.c b/rtl8188FU/hal/rtl8188f/rtl8188f_rf6052.c
index 827c9ba..60c3d44 100755
--- a/rtl8188FU/hal/rtl8188f/rtl8188f_rf6052.c
+++ b/rtl8188FU/hal/rtl8188f/rtl8188f_rf6052.c
@@ -83,32 +83,48 @@ PHY_RF6052SetBandwidth8188F(
RF_A_reg 0x87=0x00065
RF_A_reg 0x1c=0x00000
RF_A_reg 0xDF=0x00140
- RF_A_reg 0x1b=0x00c6c
+ RF_A_reg 0x1b=0x00c6c (for SDIO)
+ RF_A_reg 0x1b=0x01c6c (for USB)
*/
pHalData->RfRegChnlVal[0] = ((pHalData->RfRegChnlVal[0] & 0xfffff3ff) | BIT10 | BIT11);
PHY_SetRFReg(Adapter, ODM_RF_PATH_A, 0x18, bRFRegOffsetMask, pHalData->RfRegChnlVal[0]); /* RF TRX_BW */
PHY_SetRFReg(Adapter, ODM_RF_PATH_A, 0x87, bRFRegOffsetMask, 0x00065); /* FILTER BW&RC Corner (ACPR) */
PHY_SetRFReg(Adapter, ODM_RF_PATH_A, 0x1C, bRFRegOffsetMask, 0x00000); /* FILTER BW&RC Corner (ACPR) */
- PHY_SetRFReg(Adapter, ODM_RF_PATH_A, 0xDF, bRFRegOffsetMask, 0x00140); /* FILTER BW&RC Corner (ACPR) */
- PHY_SetRFReg(Adapter, ODM_RF_PATH_A, 0x1B, bRFRegOffsetMask, 0x00C6C); /* FILTER BW&RC Corner (ACPR) */
+
+ PHY_SetRFReg(Adapter, ODM_RF_PATH_A, 0xDF, bRFRegOffsetMask, 0x00140); /* RC Corner */
+#ifdef CONFIG_SDIO_HCI
+ PHY_SetRFReg(Adapter, ODM_RF_PATH_A, 0x1B, bRFRegOffsetMask, 0x00C6C); /* RC Corner */
+#endif /* CONFIG_SDIO_HCI */
+#ifdef CONFIG_USB_HCI
+ PHY_SetRFReg(Adapter, ODM_RF_PATH_A, 0x1B, bRFRegOffsetMask, 0x01C6C); /* RC Corner */
+#endif
break;
case CHANNEL_WIDTH_40:
/*
RF_A_reg 0x18[11:10]=2'b01
RF_A_reg 0x87=0x00025
- RF_A_reg 0x1c=0x00800
+ RF_A_reg 0x1c=0x00800 (for SDIO)
+ RF_A_reg 0x1c=0x01000 (for USB)
RF_A_reg 0xDF=0x00140
- RF_A_reg 0x1b=0x00c6c
+ RF_A_reg 0x1b=0x00c6c (for SDIO)
+ RF_A_reg 0x1b=0x01c6c (for USB)
*/
pHalData->RfRegChnlVal[0] = ((pHalData->RfRegChnlVal[0] & 0xfffff3ff) | BIT10);
PHY_SetRFReg(Adapter, ODM_RF_PATH_A, 0x18, bRFRegOffsetMask, pHalData->RfRegChnlVal[0]); /* RF TRX_BW */
PHY_SetRFReg(Adapter, ODM_RF_PATH_A, 0x87, bRFRegOffsetMask, 0x00025); /* FILTER BW&RC Corner (ACPR) */
+#ifdef CONFIG_SDIO_HCI
PHY_SetRFReg(Adapter, ODM_RF_PATH_A, 0x1C, bRFRegOffsetMask, 0x00800); /* FILTER BW&RC Corner (ACPR) */
- PHY_SetRFReg(Adapter, ODM_RF_PATH_A, 0xDF, bRFRegOffsetMask, 0x00140); /* FILTER BW&RC Corner (ACPR) */
- PHY_SetRFReg(Adapter, ODM_RF_PATH_A, 0x1B, bRFRegOffsetMask, 0x00C6C); /* FILTER BW&RC Corner (ACPR) */
+ PHY_SetRFReg(Adapter, ODM_RF_PATH_A, 0xDF, bRFRegOffsetMask, 0x00140); /* RC Corner */
+ PHY_SetRFReg(Adapter, ODM_RF_PATH_A, 0x1B, bRFRegOffsetMask, 0x00C6C); /* RC Corner */
+#endif /* CONFIG_SDIO_HCI */
+#ifdef CONFIG_USB_HCI
+ PHY_SetRFReg(Adapter, ODM_RF_PATH_A, 0x1C, bRFRegOffsetMask, 0x01000); /* FILTER BW&RC Corner (ACPR) */
+ PHY_SetRFReg(Adapter, ODM_RF_PATH_A, 0xDF, bRFRegOffsetMask, 0x00140); /* RC Corner */
+ PHY_SetRFReg(Adapter, ODM_RF_PATH_A, 0x1B, bRFRegOffsetMask, 0x01C6C); /* RC Corner */
+#endif
break;
default:
@@ -143,15 +159,6 @@ phy_RF6052_Config_ParaFile(
int rtStatus = _SUCCESS;
HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
- static char sz8188RadioAFile[] = RTL8188F_PHY_RADIO_A;
- static char sz8188RadioBFile[] = RTL8188F_PHY_RADIO_B;
- static s1Byte sz8188FTxPwrTrackFile[] = RTL8188F_TXPWR_TRACK;
- char *pszRadioAFile, *pszRadioBFile, *pszTxPwrTrackFile;
-
- pszRadioAFile = sz8188RadioAFile;
- pszRadioBFile = sz8188RadioBFile;
- pszTxPwrTrackFile = sz8188FTxPwrTrackFile;
-
/*3//----------------------------------------------------------------- */
/*3// <2> Initialize RF */
/*3//----------------------------------------------------------------- */
@@ -191,7 +198,7 @@ phy_RF6052_Config_ParaFile(
switch (eRFPath) {
case RF_PATH_A:
#ifdef CONFIG_LOAD_PHY_PARA_FROM_FILE
- if (PHY_ConfigRFWithParaFile(Adapter, pszRadioAFile, eRFPath) == _FAIL)
+ if (PHY_ConfigRFWithParaFile(Adapter, PHY_FILE_RADIO_A, eRFPath) == _FAIL)
#endif
{
#ifdef CONFIG_EMBEDDED_FWIMG
@@ -202,7 +209,7 @@ phy_RF6052_Config_ParaFile(
break;
case RF_PATH_B:
#ifdef CONFIG_LOAD_PHY_PARA_FROM_FILE
- if (PHY_ConfigRFWithParaFile(Adapter, pszRadioBFile, eRFPath) == _FAIL)
+ if (PHY_ConfigRFWithParaFile(Adapter, PHY_FILE_RADIO_B, eRFPath) == _FAIL)
#endif
{
#ifdef CONFIG_EMBEDDED_FWIMG
@@ -241,7 +248,7 @@ phy_RF6052_Config_ParaFile(
/*3 ----------------------------------------------------------------- */
#ifdef CONFIG_LOAD_PHY_PARA_FROM_FILE
- if (PHY_ConfigRFWithTxPwrTrackParaFile(Adapter, pszTxPwrTrackFile) == _FAIL)
+ if (PHY_ConfigRFWithTxPwrTrackParaFile(Adapter, PHY_FILE_TXPWR_TRACK) == _FAIL)
#endif
{
#ifdef CONFIG_EMBEDDED_FWIMG
diff --git a/rtl8188FU/hal/rtl8188f/usb/rtl8188fu_xmit.c b/rtl8188FU/hal/rtl8188f/usb/rtl8188fu_xmit.c
index db98dab..823c518 100755
--- a/rtl8188FU/hal/rtl8188f/usb/rtl8188fu_xmit.c
+++ b/rtl8188FU/hal/rtl8188f/usb/rtl8188fu_xmit.c
@@ -438,8 +438,9 @@ s32 rtl8188fu_xmitframe_complete(_adapter *padapter, struct xmit_priv *pxmitpriv
pxmitframe->buf_addr = pxmitbuf->pbuf;
pxmitbuf->priv_data = pxmitframe;
- /*pxmitframe->agg_num = 1; // alloc xmitframe should assign to 1. */
- pxmitframe->pkt_offset = 1; /* first frame of aggregation, reserve offset */
+ /* pxmitframe->agg_num = 1; */ /* alloc xmitframe should assign to 1. */
+ /* pxmitframe->pkt_offset = 1; */ /* first frame of aggregation, reserve offset */
+ pxmitframe->pkt_offset = (PACKET_OFFSET_SZ/8);
if (rtw_xmitframe_coalesce(padapter, pxmitframe->pkt, pxmitframe) == _FALSE) {
DBG_871X("%s coalesce 1st xmitframe failed\n", __func__);
@@ -597,7 +598,8 @@ s32 rtl8188fu_xmitframe_complete(_adapter *padapter, struct xmit_priv *pxmitpriv
#ifndef CONFIG_USE_USB_BUFFER_ALLOC_TX
/*3 3. update first frame txdesc */
- if ((pbuf_tail % bulkSize) == 0) {
+ if ((PACKET_OFFSET_SZ != 0)
+ && (pbuf_tail % bulkSize) == 0) {
/* remove pkt_offset */
pbuf_tail -= PACKET_OFFSET_SZ;
pfirstframe->buf_addr += PACKET_OFFSET_SZ;
diff --git a/rtl8188FU/hal/rtl8188f/usb/usb_halinit.c b/rtl8188FU/hal/rtl8188f/usb/usb_halinit.c
index 7ecafbb..383c3cc 100755
--- a/rtl8188FU/hal/rtl8188f/usb/usb_halinit.c
+++ b/rtl8188FU/hal/rtl8188f/usb/usb_halinit.c
@@ -225,33 +225,6 @@ static u8 _LLTWrite(
}
-static u8 _LLTRead(
- IN PADAPTER Adapter,
- IN u32 address
-)
-{
- int count = 0;
- u32 value = _LLT_INIT_ADDR(address) | _LLT_OP(_LLT_READ_ACCESS);
-
- rtw_write32(Adapter, REG_LLT_INIT, value);
-
- /*polling and get value */
- do {
-
- value = rtw_read32(Adapter, REG_LLT_INIT);
- if (_LLT_NO_ACTIVE == _LLT_OP_VALUE(value))
- return (u8)value;
-
- if (count > POLLING_LLT_THRESHOLD) {
- /*RT_TRACE(COMP_INIT,DBG_SERIOUS,("Failed to polling read LLT done at address %d!\n", address)); */
- break;
- }
- } while (count++);
-
- return 0xFF;
-
-}
-
/*--------------------------------------------------------------- */
/* */
@@ -1006,6 +979,69 @@ rt_rf_power_state RfOnOffDetect(IN PADAPTER pAdapter)
void _ps_open_RF(_adapter *padapter);
+#ifdef CONFIG_8188FTV_SOLUTION_D
+/*
+Write corresponding register of efuse. Indirect Write.
+Offset: reg offset.
+Value: u8 value
+*/
+VOID WriteUSB2PHYReg(PADAPTER Adapter, u8 Offset, u8 Value)
+{
+ rtw_write8(Adapter, 0xFE41, Value);
+ rtw_write8(Adapter, 0xFE40, Offset);
+ rtw_write8(Adapter, 0xFE42, 0x81);
+}
+
+/*
+Read corresponding register of efuse. Indirect Read.
+Offset: reg offset.
+*/
+u1Byte ReadUSB2PHYReg(PADAPTER Adapter, u8 Offset)
+{
+ u8 value = 0;
+ rtw_write8(Adapter, 0xFE40, Offset);
+ rtw_write8(Adapter, 0xFE42, 0x81);
+ value = rtw_read8(Adapter, 0xFE43);
+
+ return value;
+}
+
+void rtl8188fu_solution_d(PADAPTER Adapter)
+{
+ u8 reg_val[6] = {0};
+ u16 reg0mask = BIT(10) | BIT(11) | BIT(12) | BIT(13);
+ u16 reg1mask = BIT(0) | BIT(1) | BIT(2) | BIT(3);
+
+ reg_val[0] = PHY_QueryMacReg(Adapter, 0x10, reg0mask); /* efuse 0x3 */
+ reg_val[1] = PHY_QueryMacReg(Adapter, 0xC4, reg1mask); /* efuse 0xd */
+ reg_val[2] = ReadUSB2PHYReg(Adapter, 0xC1); /* efuse 0x131 */
+ reg_val[3] = PHY_QueryMacReg(Adapter, 0x4, BIT(11)); /* efuse 0xa */
+ reg_val[4] = ReadUSB2PHYReg(Adapter, 0xD2); /* efuse 0x13a */
+ reg_val[5] = ReadUSB2PHYReg(Adapter, 0xD3); /* efuse 0x13b */
+
+ if(!(reg_val[3] == 0 && reg_val[4] == 0 && reg_val[5] == 0x31)) /* solution "EP" not applied */
+ {
+ if((reg_val[0] == 0xC && reg_val[1] == 0xC && reg_val[2] == 0xAE) /* solution O */
+ ||(reg_val[0] == 0xF && reg_val[1] == 0xC && reg_val[2] == 0xAE) /* solution A */
+ ||(reg_val[0] == 0xC && reg_val[1] == 0xB && reg_val[2] == 0xAE) /* solution B */
+ ||(reg_val[0] == 0xC && reg_val[1] == 0xC && reg_val[2] == 0xBE)) /* solution C */
+ {
+ /* apply solution D */
+ PHY_SetMacReg(Adapter, 0x10, reg0mask, 0xF);
+ PHY_SetMacReg(Adapter, 0xC4, reg1mask, 0x7);
+ WriteUSB2PHYReg(Adapter, 0xE1, 0xB6);
+ DBG_871X("%s, Aplly Solution D\n", __func__);
+ }
+ else if(reg_val[0] == 0xF && reg_val[1] == 0x7 && reg_val[2] == 0xB6)
+ DBG_871X("%s, Solution D already apllied\n", __func__);
+ else
+ DBG_871X("%s, Unexpected efuse content\n", __func__);
+ }
+ else
+ DBG_871X("%s, Solution EP already applied\n", __func__);
+}
+#endif
+
u32 rtl8188fu_hal_init(PADAPTER padapter)
{
u8 value8 = 0, u1bRegCR;
@@ -1187,8 +1223,6 @@ u32 rtl8188fu_hal_init(PADAPTER padapter)
}
}
- rtl8188f_InitializeFirmwareVars(padapter);
-
if (pwrctrlpriv->reg_rfoff == _TRUE)
pwrctrlpriv->rf_pwrstate = rf_off;
@@ -1349,6 +1383,7 @@ u32 rtl8188fu_hal_init(PADAPTER padapter)
PHY_LCCalibrate_8188F(&pHalData->odmpriv);
+#ifdef CONFIG_BT_COEXIST
/* Inform WiFi FW that it is the beginning of IQK */
h2cCmdBuf = 1;
FillH2CCmd8188F(padapter, H2C_8188F_BT_WLAN_CALIBRATION, 1, &h2cCmdBuf);
@@ -1361,19 +1396,21 @@ u32 rtl8188fu_hal_init(PADAPTER padapter)
rtw_msleep_os(50);
} while (rtw_get_passing_time_ms(start_time) <= 400);
-#ifdef CONFIG_BT_COEXIST
+
rtw_btcoex_IQKNotify(padapter, _TRUE);
#endif
+
restore_iqk_rst = (pwrpriv->bips_processing == _TRUE) ? _TRUE : _FALSE;
PHY_IQCalibrate_8188F(padapter, _FALSE, restore_iqk_rst);
pHalData->odmpriv.RFCalibrateInfo.bIQKInitialized = _TRUE;
+
#ifdef CONFIG_BT_COEXIST
rtw_btcoex_IQKNotify(padapter, _FALSE);
-#endif
/* Inform WiFi FW that it is the finish of IQK */
h2cCmdBuf = 0;
FillH2CCmd8188F(padapter, H2C_8188F_BT_WLAN_CALIBRATION, 1, &h2cCmdBuf);
+#endif
ODM_TXPowerTrackingCheck(&pHalData->odmpriv);
}
@@ -2190,7 +2227,7 @@ InitAdapterVariablesByPROM_8188FU(
/*hal_CustomizedBehavior_8188FU(Adapter); */
Hal_EfuseParseKFreeData_8188F(padapter, hwinfo, pHalData->bautoload_fail_flag);
- Hal_EfuseParseMacHidden_8188F(padapter, hwinfo, pHalData->bautoload_fail_flag);
+ hal_read_mac_hidden_rpt(padapter);
/* Adapter->bDongle = (PROMContent[EEPROM_EASY_REPLACEMENT] == 1)? 0: 1; */
DBG_8192C("%s(): REPLACEMENT = %x\n", __func__, padapter->bDongle);
@@ -2211,6 +2248,10 @@ static void _ReadPROMContent(
DBG_8192C("Boot from %s, Autoload %s !\n", (pHalData->EepromOrEfuse ? "EEPROM" : "EFUSE"),
(pHalData->bautoload_fail_flag ? "Fail" : "OK"));
+#ifdef CONFIG_8188FTV_SOLUTION_D
+ rtl8188fu_solution_d(Adapter);
+#endif
+
InitAdapterVariablesByPROM_8188FU(Adapter);
}
@@ -2358,11 +2399,7 @@ GetHalDefVar8188FUsb(
*((u8 *)pValue) = (pHalData->AntDivCfg == 0) ? _FALSE : _TRUE;
#endif
break;
- case HAL_DEF_CURRENT_ANTENNA:
-#ifdef CONFIG_ANTENNA_DIVERSITY
- *((u8 *)pValue) = pHalData->CurAntenna;
-#endif
- break;
+
case HAL_DEF_DRVINFO_SZ:
*((u32 *)pValue) = DRVINFO_SZ;
break;
@@ -2370,7 +2407,7 @@ GetHalDefVar8188FUsb(
*((u32 *)pValue) = MAX_RECVBUF_SZ;
break;
case HAL_DEF_RX_PACKET_OFFSET:
- *((u32 *)pValue) = RXDESC_SIZE + DRVINFO_SZ;
+ *((u32 *)pValue) = RXDESC_SIZE + DRVINFO_SZ*8;
break;
case HW_VAR_MAX_RX_AMPDU_FACTOR:
*((HT_CAP_AMPDU_FACTOR *)pValue) = MAX_AMPDU_FACTOR_64K;
diff --git a/rtl8188FU/include/Hal8188EPhyCfg.h b/rtl8188FU/include/Hal8188EPhyCfg.h
index cbe8dcb..404e1fa 100755
--- a/rtl8188FU/include/Hal8188EPhyCfg.h
+++ b/rtl8188FU/include/Hal8188EPhyCfg.h
@@ -159,6 +159,10 @@ PHY_SetSwChnlBWMode8188E(
IN u8 Offset80
);
+VOID
+PHY_SetRFEReg_8188E(
+ IN PADAPTER Adapter
+);
//
// BB/MAC/RF other monitor API
//
diff --git a/rtl8188FU/include/HalVerDef.h b/rtl8188FU/include/HalVerDef.h
index d3df5df..8c361c9 100755
--- a/rtl8188FU/include/HalVerDef.h
+++ b/rtl8188FU/include/HalVerDef.h
@@ -178,9 +178,11 @@ typedef struct tag_HAL_VERSION
#define IS_8723A_A_CUT(version) ((IS_8723_SERIES(version)) ? ( IS_A_CUT(version)?TRUE : FALSE) : FALSE)
#define IS_8723A_B_CUT(version) ((IS_8723_SERIES(version)) ? ( IS_B_CUT(version)?TRUE : FALSE) : FALSE)
#endif
-
+#ifdef CONFIG_USB_HCI
+#define IS_VENDOR_8188E_I_CUT_SERIES(_Adapter) (FALSE)
+#else
#define IS_VENDOR_8188E_I_CUT_SERIES(_Adapter) ((IS_8188E(GET_HAL_DATA(_Adapter)->VersionID)) ? ((GET_CVID_CUT_VERSION(GET_HAL_DATA(_Adapter)->VersionID) >= I_CUT_VERSION) ? TRUE : FALSE) : FALSE)
-
+#endif
#define IS_VENDOR_8812A_TEST_CHIP(_Adapter) ((IS_8812_SERIES(GET_HAL_DATA(_Adapter)->VersionID)) ? ((IS_NORMAL_CHIP(GET_HAL_DATA(_Adapter)->VersionID)) ? FALSE : TRUE) : FALSE)
#define IS_VENDOR_8812A_MP_CHIP(_Adapter) ((IS_8812_SERIES(GET_HAL_DATA(_Adapter)->VersionID)) ? ((IS_NORMAL_CHIP(GET_HAL_DATA(_Adapter)->VersionID)) ? TRUE : FALSE) : FALSE)
#define IS_VENDOR_8812A_C_CUT(_Adapter) ((IS_8812_SERIES(GET_HAL_DATA(_Adapter)->VersionID)) ? ((GET_CVID_CUT_VERSION(GET_HAL_DATA(_Adapter)->VersionID) == C_CUT_VERSION) ? TRUE : FALSE) : FALSE)
diff --git a/rtl8188FU/include/autoconf.h b/rtl8188FU/include/autoconf.h
index 83f61e2..746a64d 100755
--- a/rtl8188FU/include/autoconf.h
+++ b/rtl8188FU/include/autoconf.h
@@ -55,6 +55,7 @@
/* #define CONFIG_DRV_ISSUE_PROV_REQ */ /* IOT FOR S2 */
#define CONFIG_SET_SCAN_DENY_TIMER
+ /*#define SUPPLICANT_RTK_VERSION_LOWER_THAN_JB42*/ /* wpa_supplicant realtek version <= jb42 will be defined this */
#endif
#define CONFIG_AP_MODE
@@ -81,7 +82,6 @@
/* #define CONFIG_DBG_P2P */
#define CONFIG_P2P_PS
- /* #define CONFIG_P2P_IPS */
#define CONFIG_P2P_OP_CHK_SOCIAL_CH
#define CONFIG_CFG80211_ONECHANNEL_UNDER_CONCURRENT /* replace CONFIG_P2P_CHK_INVITE_CH_LIST flag */
#define CONFIG_P2P_INVITE_IOT
@@ -99,7 +99,7 @@
#define CONFIG_TDLS_AUTOSETUP
*/
#define CONFIG_TDLS_AUTOCHECKALIVE
- #define CONFIG_TDLS_CH_SW /* Enable "CONFIG_TDLS_CH_SW" by default, however limit it to only work in wifi logo test mode but not in normal mode currently */
+ #define CONFIG_TDLS_CH_SW /* Enable this flag only when we confirm that TDLS CH SW is supported in FW */
#endif
/* #define CONFIG_CONCURRENT_MODE */ /* Set from Makefile */
@@ -140,7 +140,7 @@
#define CONFIG_C2H_PACKET_EN
-#define CONFIG_RF_GAIN_OFFSET
+#define CONFIG_RF_POWER_TRIM
#define DISABLE_BB_RF 0
@@ -263,7 +263,7 @@
#endif /* CONFIG_BT_COEXIST */
#ifdef CONFIG_WOWLAN
- /* #define CONFIG_GTK_OL */
+ #define CONFIG_GTK_OL
#endif /* CONFIG_WOWLAN */
#ifdef CONFIG_GPIO_WAKEUP
diff --git a/rtl8188FU/include/basic_types.h b/rtl8188FU/include/basic_types.h
index 0b75813..4ce0290 100755
--- a/rtl8188FU/include/basic_types.h
+++ b/rtl8188FU/include/basic_types.h
@@ -271,7 +271,7 @@
(LE_P2BYTE_TO_HOST_2BYTE(__pStart) & (~BIT_OFFSET_LEN_MASK_16(__BitOffset, __BitLen)))
#define LE_BITS_CLEARED_TO_1BYTE(__pStart, __BitOffset, __BitLen) \
- (LE_P1BYTE_TO_HOST_1BYTE(__pStart) & (~BIT_OFFSET_LEN_MASK_8(__BitOffset, __BitLen)))
+ (LE_P1BYTE_TO_HOST_1BYTE(__pStart) & ((u8)(~BIT_OFFSET_LEN_MASK_8(__BitOffset, __BitLen))))
/*
* Mask subfield (continuous bits in big-endian) of 4-byte value in BE byte oredering
diff --git a/rtl8188FU/include/drv_conf.h b/rtl8188FU/include/drv_conf.h
index 730ae2c..467862e 100755
--- a/rtl8188FU/include/drv_conf.h
+++ b/rtl8188FU/include/drv_conf.h
@@ -173,6 +173,17 @@
#define CONFIG_IEEE80211_BAND_5GHZ
#endif
+#ifndef RTW_DEF_MODULE_REGULATORY_CERT
+ #define RTW_DEF_MODULE_REGULATORY_CERT 0
+#endif
+
+#if RTW_DEF_MODULE_REGULATORY_CERT
+ /* force enable TX power by rate and TX power limit */
+ #ifndef CONFIG_CALIBRATE_TX_POWER_BY_REGULATORY
+ #define CONFIG_CALIBRATE_TX_POWER_BY_REGULATORY
+ #endif
+#endif
+
/*
Mark CONFIG_DEAUTH_BEFORE_CONNECT by Arvin 2015/07/20
If the failure of Wi-Fi connection is due to some irregular disconnection behavior (like unplug dongle,
diff --git a/rtl8188FU/include/drv_types.h b/rtl8188FU/include/drv_types.h
index a9cf4cc..2efc01f 100755
--- a/rtl8188FU/include/drv_types.h
+++ b/rtl8188FU/include/drv_types.h
@@ -256,6 +256,7 @@ struct registry_priv
u8 wifi_spec;// !turbo_mode
u8 special_rf_path; // 0: 2T2R ,1: only turn on path A 1T1R
+ char alpha2[2];
u8 channel_plan;
u8 full_ch_in_p2p_handshake; /* 0: reply only softap channel, 1: reply full channel list*/
#ifdef CONFIG_BT_COEXIST
@@ -327,7 +328,7 @@ struct registry_priv
u8 RFE_Type;
u8 GLNA_Type;
u8 check_fw_ps;
- u8 RegRfKFreeEnable;
+ u8 RegPwrTrimEnable;
#ifdef CONFIG_LOAD_PHY_PARA_FROM_FILE
u8 load_phy_file;
@@ -377,6 +378,9 @@ struct registry_priv
#define REGSTY_IS_BW_2G_SUPPORT(regsty, bw) (REGSTY_BW_2G((regsty)) >= (bw))
#define REGSTY_IS_BW_5G_SUPPORT(regsty, bw) (REGSTY_BW_5G((regsty)) >= (bw))
+#define REGSTY_IS_11AC_ENABLE(regsty) ((regsty)->vht_enable != 0)
+#define REGSTY_IS_11AC_AUTO(regsty) ((regsty)->vht_enable == 2)
+
#ifdef CONFIG_SDIO_HCI
#include <drv_types_sdio.h>
#define INTF_DATA SDIO_DATA
@@ -655,6 +659,7 @@ struct macid_ctl_t {
struct macid_bmp if_g[IFACE_ID_MAX];
struct macid_bmp ch_g[2]; /* 2 ch concurrency */
u8 h2c_msr[MACID_NUM_SW_LIMIT];
+ struct sta_info *sta[MACID_NUM_SW_LIMIT];
};
struct rf_ctl_t {
@@ -700,6 +705,7 @@ struct dvobj_priv
_mutex h2c_fwcmd_mutex;
_mutex setch_mutex;
_mutex setbw_mutex;
+ _mutex rf_read_reg_mutex;
#ifdef CONFIG_SDIO_INDIRECT_ACCESS
_mutex sd_indirect_access_mutex;
#endif
diff --git a/rtl8188FU/include/hal_com.h b/rtl8188FU/include/hal_com.h
index 80b4400..206a193 100755
--- a/rtl8188FU/include/hal_com.h
+++ b/rtl8188FU/include/hal_com.h
@@ -208,6 +208,11 @@ typedef enum _FIRMWARE_SOURCE {
FW_SOURCE_HEADER_FILE = 1, //from header file
} FIRMWARE_SOURCE, *PFIRMWARE_SOURCE;
+typedef enum _CH_SW_USE_CASE{
+ CH_SW_USE_CASE_TDLS = 0,
+ CH_SW_USE_CASE_MCC = 1
+} CH_SW_USE_CASE;
+
//
// Queue Select Value in TxDesc
//
@@ -246,6 +251,7 @@ void rtw_dump_mac_rx_counters(_adapter* padapter,struct dbg_rx_counter *rx_count
void rtw_dump_phy_rx_counters(_adapter* padapter,struct dbg_rx_counter *rx_counter);
void rtw_reset_mac_rx_counters(_adapter* padapter);
void rtw_reset_phy_rx_counters(_adapter* padapter);
+void rtw_reset_phy_trx_ok_counters(_adapter *padapter);
#ifdef DBG_RX_COUNTER_DUMP
#define DUMP_DRV_RX_COUNTER BIT0
@@ -273,6 +279,12 @@ void rtw_hal_config_rftype(PADAPTER padapter);
#define BW_CAP_80_80M BIT6
#define BW_CAP_BIT_NUM 7
+#define PROTO_CAP_11B BIT0
+#define PROTO_CAP_11G BIT1
+#define PROTO_CAP_11N BIT2
+#define PROTO_CAP_11AC BIT3
+#define PROTO_CAP_BIT_NUM 4
+
#define WL_FUNC_P2P BIT0
#define WL_FUNC_MIRACAST BIT1
#define WL_FUNC_TDLS BIT2
@@ -284,19 +296,22 @@ void dump_hal_spec(void *sel, _adapter *adapter);
bool hal_chk_band_cap(_adapter *adapter, u8 cap);
bool hal_chk_bw_cap(_adapter *adapter, u8 cap);
+bool hal_chk_proto_cap(_adapter *adapter, u8 cap);
bool hal_is_band_support(_adapter *adapter, u8 band);
bool hal_is_bw_support(_adapter *adapter, u8 bw);
+bool hal_is_wireless_mode_support(_adapter *adapter, u8 mode);
u8 hal_largest_bw(_adapter *adapter, u8 in_bw);
bool hal_chk_wl_func(_adapter *adapter, u8 func);
-u8 //return the final channel plan decision
-hal_com_config_channel_plan(
- IN PADAPTER padapter,
- IN u8 hw_channel_plan, //channel plan from HW (efuse/eeprom)
- IN u8 sw_channel_plan, //channel plan from SW (registry/module param)
- IN u8 def_channel_plan, //channel plan used when the former two is invalid
- IN BOOLEAN AutoLoadFail
+u8 hal_com_config_channel_plan(
+ IN PADAPTER padapter,
+ IN char *hw_alpha2,
+ IN u8 hw_chplan,
+ IN char *sw_alpha2,
+ IN u8 sw_chplan,
+ IN u8 def_chplan,
+ IN BOOLEAN AutoLoadFail
);
int hal_config_macaddr(_adapter *adapter, bool autoload_fail);
@@ -357,11 +372,6 @@ eqNByte(
u32 num
);
-BOOLEAN
-IsHexDigit(
- IN char chTmp
- );
-
u32
MapCharToHexDigit(
IN char chTmp
@@ -412,7 +422,7 @@ void linked_info_dump(_adapter *padapter,u8 benable);
#ifdef DBG_RX_SIGNAL_DISPLAY_RAW_DATA
void rtw_get_raw_rssi_info(void *sel, _adapter *padapter);
void rtw_store_phy_info(_adapter *padapter, union recv_frame *prframe);
-void rtw_dump_raw_rssi_info(_adapter *padapter);
+void rtw_dump_raw_rssi_info(_adapter *padapter, void *sel);
#endif
#define HWSET_MAX_SIZE 512
@@ -426,9 +436,9 @@ int check_phy_efuse_tx_power_info_valid(PADAPTER padapter);
int hal_efuse_macaddr_offset(_adapter *adapter);
int Hal_GetPhyEfuseMACAddr(PADAPTER padapter, u8 *mac_addr);
-#ifdef CONFIG_RF_GAIN_OFFSET
+#ifdef CONFIG_RF_POWER_TRIM
void rtw_bb_rf_gain_offset(_adapter *padapter);
-#endif //CONFIG_RF_GAIN_OFFSET
+#endif /*CONFIG_RF_POWER_TRIM*/
void dm_DynamicUsbTxAgg(_adapter *padapter, u8 from_timer);
u8 rtw_hal_busagg_qsel_check(_adapter *padapter,u8 pre_qsel,u8 next_qsel);
@@ -454,9 +464,15 @@ struct noise_info
#endif
void rtw_get_noise(_adapter* padapter);
-
+u8 rtw_get_current_tx_rate(_adapter *padapter, u8 macid);
void rtw_hal_set_fw_rsvd_page(_adapter* adapter, bool finished);
+#ifdef CONFIG_TDLS
+#ifdef CONFIG_TDLS_CH_SW
+s32 rtw_hal_ch_sw_oper_offload(_adapter *padapter, u8 channel, u8 channel_offset, u16 bwmode);
+#endif
+#endif
+
#ifdef CONFIG_GPIO_API
u8 rtw_hal_get_gpio(_adapter* adapter, u8 gpio_num);
int rtw_hal_set_gpio_output_value(_adapter* adapter, u8 gpio_num, bool isHigh);
@@ -465,7 +481,12 @@ int rtw_hal_register_gpio_interrupt(_adapter* adapter, int gpio_num, void(*callb
int rtw_hal_disable_gpio_interrupt(_adapter* adapter, int gpio_num);
#endif
+s8 rtw_hal_ch_sw_iqk_info_search(_adapter* padapter, u8 central_chnl, u8 bw_mode);
+void rtw_hal_ch_sw_iqk_info_backup(_adapter* adapter);
+void rtw_hal_ch_sw_iqk_info_restore(_adapter* padapter, u8 ch_sw_use_case);
+
#ifdef CONFIG_GPIO_WAKEUP
+void rtw_hal_switch_gpio_wl_ctrl(_adapter *padapter, u8 index, u8 enable);
void rtw_hal_set_output_gpio(_adapter *padapter, u8 index, u8 outputval);
#endif
@@ -515,7 +536,7 @@ static inline u32 rtw_phydm_ability_get(_adapter *adapter)
#ifdef CONFIG_LOAD_PHY_PARA_FROM_FILE
extern char *rtw_phy_file_path;
-extern char file_path[PATH_LENGTH_MAX];
+extern char rtw_phy_para_file_path[PATH_LENGTH_MAX];
#define GetLineFromBuffer(buffer) strsep(&buffer, "\r\n")
#endif
@@ -532,5 +553,10 @@ void rtw_acs_start(_adapter *padapter, bool bStart);
void hal_set_crystal_cap(_adapter *adapter, u8 crystal_cap);
+#ifdef CONFIG_ANTENNA_DIVERSITY
+u8 rtw_hal_antdiv_before_linked(_adapter *padapter);
+void rtw_hal_antdiv_rssi_compared(_adapter *padapter, WLAN_BSSID_EX *dst, WLAN_BSSID_EX *src);
+#endif
+
#endif //__HAL_COMMON_H__
diff --git a/rtl8188FU/include/hal_com_h2c.h b/rtl8188FU/include/hal_com_h2c.h
index 38dc04b..681d37a 100755
--- a/rtl8188FU/include/hal_com_h2c.h
+++ b/rtl8188FU/include/hal_com_h2c.h
@@ -38,6 +38,7 @@ enum h2c_cmd{
H2C_FCS_RSVDPAGE = 0x10,
H2C_FCS_INFO = 0x11,
H2C_AP_WOW_GPIO_CTRL = 0x13,
+ H2C_CHNL_SWITCH_OPER_OFFLOAD = 0x1C,
//PoweSave Class: 001
H2C_SET_PWR_MODE = 0x20,
@@ -201,7 +202,8 @@ enum h2c_cmd{
#define H2C_MSR_ROLE_GC 3
#define H2C_MSR_ROLE_GO 4
#define H2C_MSR_ROLE_TDLS 5
-#define H2C_MSR_ROLE_MAX 6
+#define H2C_MSR_ROLE_ADHOC 6
+#define H2C_MSR_ROLE_MAX 7
extern const char * const _h2c_msr_role_str[];
#define h2c_msr_role_str(role) (((role) >= H2C_MSR_ROLE_MAX) ? _h2c_msr_role_str[H2C_MSR_ROLE_MAX] : _h2c_msr_role_str[(role)])
@@ -311,6 +313,12 @@ s32 rtw_hal_set_FwMediaStatusRpt_range_cmd(_adapter *adapter, bool opmode, bool
#define SET_H2CCMD_RSVDPAGE_LOC_P2P_PD_RSP(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+4, 0, 8, __Value)
#endif //CONFIG_P2P_WOWLAN
+/* CHNL_SWITCH_OPER_OFFLOAD_0x1C */
+#define SET_H2CCMD_CH_SW_OPER_OFFLOAD_CH_NUM(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 0, 8, __Value)
+#define SET_H2CCMD_CH_SW_OPER_OFFLOAD_BW_MODE(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd) + 1, 0, 2, __Value)
+#define SET_H2CCMD_CH_SW_OPER_OFFLOAD_BW_40M_SC(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd) + 1, 2, 3, __Value)
+#define SET_H2CCMD_CH_SW_OPER_OFFLOAD_BW_80M_SC(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd) + 1, 5, 3, __Value)
+#define SET_H2CCMD_CH_SW_OPER_OFFLOAD_RFE_TYPE(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd) + 2, 0, 4, __Value)
//---------------------------------------------------------------------------------------------------------//
//------------------------------------------- Structure --------------------------------------------------//
//---------------------------------------------------------------------------------------------------------//
diff --git a/rtl8188FU/include/hal_com_led.h b/rtl8188FU/include/hal_com_led.h
index 79e62c6..b764b50 100755
--- a/rtl8188FU/include/hal_com_led.h
+++ b/rtl8188FU/include/hal_com_led.h
@@ -265,7 +265,6 @@ typedef struct _LED_USB{
_timer BlinkTimer; // Timer object for led blinking.
_workitem BlinkWorkItem; // Workitem used by BlinkTimer to manipulate H/W to blink LED.'
- ATOMIC_T bCancelWorkItem; //check if WorkItem is cancelled
} LED_USB, *PLED_USB;
typedef struct _LED_USB LED_DATA, *PLED_DATA;
diff --git a/rtl8188FU/include/hal_com_phycfg.h b/rtl8188FU/include/hal_com_phycfg.h
index a765d6c..f363355 100755
--- a/rtl8188FU/include/hal_com_phycfg.h
+++ b/rtl8188FU/include/hal_com_phycfg.h
@@ -239,9 +239,9 @@ PHY_SetTxPowerIndex(
bool phy_is_tx_power_limit_needed(_adapter *adapter);
bool phy_is_tx_power_by_rate_needed(_adapter *adapter);
-int phy_load_tx_power_by_rate(_adapter *adapter, const char *hal_file_name, u8 force);
-int phy_load_tx_power_limit(_adapter *adapter, const char *hal_file_name, u8 force);
-void phy_load_tx_power_ext_info(_adapter *adapter, u8 chk_file, u8 force);
+int phy_load_tx_power_by_rate(_adapter *adapter, u8 chk_file);
+int phy_load_tx_power_limit(_adapter *adapter, u8 chk_file);
+void phy_load_tx_power_ext_info(_adapter *adapter, u8 chk_file);
void phy_reload_tx_power_ext_info(_adapter *adapter);
void phy_reload_default_tx_power_ext_info(_adapter *adapter);
@@ -250,9 +250,27 @@ void dump_target_tx_power(void *sel, _adapter *adapter);
void dump_tx_power_by_rate(void *sel, _adapter *adapter);
void dump_tx_power_limit(void *sel, _adapter *adapter);
-int rtw_is_phy_file_readable(const char *hal_file_name);
+int rtw_get_phy_file_path(_adapter *adapter, const char *file_name);
#ifdef CONFIG_LOAD_PHY_PARA_FROM_FILE
+#define MAC_FILE_FW_NIC "FW_NIC.bin"
+#define MAC_FILE_FW_WW_IMG "FW_WoWLAN.bin"
+#define PHY_FILE_MAC_REG "MAC_REG.txt"
+
+#define PHY_FILE_AGC_TAB "AGC_TAB.txt"
+#define PHY_FILE_PHY_REG "PHY_REG.txt"
+#define PHY_FILE_PHY_REG_MP "PHY_REG_MP.txt"
+#define PHY_FILE_PHY_REG_PG "PHY_REG_PG.txt"
+
+#define PHY_FILE_RADIO_A "RadioA.txt"
+#define PHY_FILE_RADIO_B "RadioB.txt"
+#define PHY_FILE_RADIO_C "RadioC.txt"
+#define PHY_FILE_RADIO_D "RadioD.txt"
+#define PHY_FILE_TXPWR_TRACK "TxPowerTrack.txt"
+#define PHY_FILE_TXPWR_LMT "TXPWR_LMT.txt"
+
+#define PHY_FILE_WIFI_ANT_ISOLATION "wifi_ant_isolation.txt"
+
#define MAX_PARA_FILE_BUF_LEN 25600
#define LOAD_MAC_PARA_FILE BIT0
diff --git a/rtl8188FU/include/hal_data.h b/rtl8188FU/include/hal_data.h
index bbcc98a..5a41e25 100755
--- a/rtl8188FU/include/hal_data.h
+++ b/rtl8188FU/include/hal_data.h
@@ -175,6 +175,9 @@ struct auto_chan_sel {
#define KFREE_FLAG_ON BIT0
#define KFREE_FLAG_THERMAL_K_ON BIT1
+#define MAX_IQK_INFO_BACKUP_CHNL_NUM 5
+#define MAX_IQK_INFO_BACKUP_REG_NUM 10
+
struct kfree_data_t {
u8 flag;
s8 bb_gain[BB_GAIN_NUM][RF_PATH_MAX];
@@ -189,6 +192,7 @@ struct kfree_data_t {
bool kfree_data_is_bb_gain_empty(struct kfree_data_t *data);
struct hal_spec_t {
+ char *ic_name;
u8 macid_num;
u8 sec_cam_ent_num;
@@ -197,10 +201,17 @@ struct hal_spec_t {
u8 nss_num;
u8 band_cap; /* value of BAND_CAP_XXX */
u8 bw_cap; /* value of BW_CAP_XXX */
+ u8 proto_cap; /* value of PROTO_CAP_XXX */
u8 wl_func; /* value of WL_FUNC_XXX */
};
+struct hal_iqk_reg_backup {
+ u8 central_chnl;
+ u8 bw_mode;
+ u32 reg_backup[MAX_RF_PATH][MAX_IQK_INFO_BACKUP_REG_NUM];
+};
+
typedef struct hal_com_data
{
HAL_VERSION VersionID;
@@ -284,11 +295,11 @@ typedef struct hal_com_data
u8 bTXPowerDataReadFromEEPORM;
u8 EEPROMMACAddr[ETH_ALEN];
-#ifdef CONFIG_RF_GAIN_OFFSET
+#ifdef CONFIG_RF_POWER_TRIM
u8 EEPROMRFGainOffset;
u8 EEPROMRFGainVal;
struct kfree_data_t kfree_data;
-#endif /*CONFIG_RF_GAIN_OFFSET*/
+#endif /*CONFIG_RF_POWER_TRIM*/
#if defined(CONFIG_RTL8723B) || defined(CONFIG_RTL8703B)
u8 adjuseVoltageVal;
@@ -430,13 +441,13 @@ typedef struct hal_com_data
u16 RegRRSR;
/****** antenna diversity ******/
- u8 CurAntenna;
u8 AntDivCfg;
u8 AntDetection;
u8 TRxAntDivType;
u8 ant_path; //for 8723B s0/s1 selection
u32 AntennaTxPath; /* Antenna path Tx */
u32 AntennaRxPath; /* Antenna path Rx */
+ u8 sw_antdiv_bl_state;
/******** PHY DM & DM Section **********/
u8 DM_Type;
@@ -618,6 +629,7 @@ typedef struct hal_com_data
BOOLEAN bCorrectBCN;
#endif
+ struct hal_iqk_reg_backup iqk_reg_backup[MAX_IQK_INFO_BACKUP_CHNL_NUM];
} HAL_DATA_COMMON, *PHAL_DATA_COMMON;
@@ -625,6 +637,7 @@ typedef struct hal_com_data
typedef struct hal_com_data HAL_DATA_TYPE, *PHAL_DATA_TYPE;
#define GET_HAL_DATA(__pAdapter) ((HAL_DATA_TYPE *)((__pAdapter)->HalData))
#define GET_HAL_SPEC(__pAdapter) (&(GET_HAL_DATA((__pAdapter))->hal_spec))
+#define GET_ODM(__pAdapter) (&(GET_HAL_DATA((__pAdapter))->odmpriv))
#define GET_HAL_RFPATH_NUM(__pAdapter) (((HAL_DATA_TYPE *)((__pAdapter)->HalData))->NumTotalRFPath )
#define RT_GetInterfaceSelection(_Adapter) (GET_HAL_DATA(_Adapter)->InterfaceSel)
diff --git a/rtl8188FU/include/hal_intf.h b/rtl8188FU/include/hal_intf.h
index 04fc044..c212796 100755
--- a/rtl8188FU/include/hal_intf.h
+++ b/rtl8188FU/include/hal_intf.h
@@ -42,6 +42,9 @@ enum _CHIP_TYPE {
MAX_CHIP_TYPE
};
+extern const u32 _chip_type_to_odm_ic_type[];
+#define chip_type_to_odm_ic_type(chip_type) (((chip_type) >= MAX_CHIP_TYPE) ? _chip_type_to_odm_ic_type[MAX_CHIP_TYPE] : _chip_type_to_odm_ic_type[(chip_type)])
+
typedef enum _HAL_HW_TIMER_TYPE {
HAL_TIMER_NONE = 0,
HAL_TIMER_TXBF = 1,
@@ -92,13 +95,9 @@ typedef enum _HW_VARIABLES{
HW_VAR_H2C_FW_JOINBSSRPT,
HW_VAR_FWLPS_RF_ON,
HW_VAR_H2C_FW_P2P_PS_OFFLOAD,
- HW_VAR_TDLS_WRCR,
- HW_VAR_TDLS_RS_RCR,
HW_VAR_TRIGGER_GPIO_0,
HW_VAR_BT_SET_COEXIST,
HW_VAR_BT_ISSUE_DELBA,
- HW_VAR_CURRENT_ANTENNA,
- HW_VAR_ANTENNA_DIVERSITY_SELECT,
HW_VAR_SWITCH_EPHY_WoWLAN,
HW_VAR_EFUSE_USAGE,
HW_VAR_EFUSE_BYTES,
@@ -155,12 +154,21 @@ typedef enum _HW_VARIABLES{
HW_VAR_DUMP_MAC_QUEUE_INFO,
HW_VAR_ASIX_IOT,
HW_VAR_EN_HW_UPDATE_TSF,
+ HW_VAR_CH_SW_NEED_TO_TAKE_CARE_IQK_INFO,
+ HW_VAR_CH_SW_IQK_INFO_BACKUP,
+ HW_VAR_CH_SW_IQK_INFO_RESTORE,
+#ifdef CONFIG_TDLS
+ HW_VAR_TDLS_WRCR,
+ HW_VAR_TDLS_RS_RCR,
+#ifdef CONFIG_TDLS_CH_SW
+ HW_VAR_TDLS_BCN_EARLY_C2H_RPT
+#endif
+#endif
}HW_VARIABLES;
typedef enum _HAL_DEF_VARIABLE{
HAL_DEF_UNDERCORATEDSMOOTHEDPWDB,
HAL_DEF_IS_SUPPORT_ANT_DIV,
- HAL_DEF_CURRENT_ANTENNA,
HAL_DEF_DRVINFO_SZ,
HAL_DEF_MAX_RECVBUF_SZ,
HAL_DEF_RX_PACKET_OFFSET,
@@ -208,10 +216,12 @@ typedef enum _HAL_ODM_VARIABLE{
HAL_ODM_DBG_FLAG,
HAL_ODM_DBG_LEVEL,
HAL_ODM_RX_INFO_DUMP,
-
#ifdef CONFIG_AUTO_CHNL_SEL_NHM
HAL_ODM_AUTO_CHNL_SEL,
#endif
+#ifdef CONFIG_ANTENNA_DIVERSITY
+ HAL_ODM_ANTDIV_SELECT
+#endif
}HAL_ODM_VARIABLE;
typedef enum _HAL_INTF_PS_FUNC{
@@ -307,15 +317,8 @@ struct hal_ops {
void (*SetBeaconRelatedRegistersHandler)(_adapter *padapter);
void (*Add_RateATid)(_adapter *padapter, u64 bitmap, u8 *arg, u8 rssi_level);
-
-
-#ifdef CONFIG_ANTENNA_DIVERSITY
- u8 (*AntDivBeforeLinkHandler)(_adapter *padapter);
- void (*AntDivCompareHandler)(_adapter *padapter, WLAN_BSSID_EX *dst, WLAN_BSSID_EX *src);
-#endif
u8 (*interface_ps_func)(_adapter *padapter,HAL_INTF_PS_FUNC efunc_id, u8* val);
-
u32 (*read_bbreg)(_adapter *padapter, u32 RegAddr, u32 BitMask);
void (*write_bbreg)(_adapter *padapter, u32 RegAddr, u32 BitMask, u32 Data);
u32 (*read_rfreg)(_adapter *padapter, u8 eRFPath, u32 RegAddr, u32 BitMask);
@@ -355,9 +358,9 @@ struct hal_ops {
s32 (*fill_h2c_cmd)(PADAPTER, u8 ElementID, u32 CmdLen, u8 *pCmdBuffer);
void (*fill_fake_txdesc)(PADAPTER, u8 *pDesc, u32 BufferLen,
u8 IsPsPoll, u8 IsBTQosNull, u8 bDataFrame);
-
+ s32 (*fw_dl)(_adapter *adapter, u8 wowlan);
+
#if defined(CONFIG_WOWLAN) || defined(CONFIG_AP_WOWLAN)
- void (*hal_set_wowlan_fw)(_adapter *adapter, u8 sleep);
void (*clear_interrupt)(_adapter *padapter);
#endif
u8 (*hal_get_tx_buff_rsvd_page_num)(_adapter *adapter, bool wowlan);
@@ -626,11 +629,6 @@ void rtw_hal_dm_watchdog_in_lps(_adapter *padapter);
void rtw_hal_set_tx_power_level(_adapter *padapter, u8 channel);
void rtw_hal_get_tx_power_level(_adapter *padapter, s32 *powerlevel);
-#ifdef CONFIG_ANTENNA_DIVERSITY
-u8 rtw_hal_antdiv_before_linked(_adapter *padapter);
-void rtw_hal_antdiv_rssi_compared(_adapter *padapter, WLAN_BSSID_EX *dst, WLAN_BSSID_EX *src);
-#endif
-
#ifdef CONFIG_HOSTAPD_MLME
s32 rtw_hal_hostap_mgnt_xmit_entry(_adapter *padapter, _pkt *pkt);
#endif
@@ -675,10 +673,10 @@ void rtw_hal_update_hisr_hsisr_ind(_adapter *padapter, u32 flag);
#endif
void rtw_hal_fw_correct_bcn(_adapter *padapter);
+s32 rtw_hal_fw_dl(_adapter *padapter, u8 wowlan);
#if defined(CONFIG_WOWLAN) || defined(CONFIG_AP_WOWLAN)
void rtw_hal_clear_interrupt(_adapter *padapter);
-void rtw_hal_set_wowlan_fw(_adapter *padapter, u8 sleep);
#endif
u8 rtw_hal_ops_check(_adapter *padapter);
diff --git a/rtl8188FU/include/hal_pg.h b/rtl8188FU/include/hal_pg.h
index ded4c5d..ee9a799 100755
--- a/rtl8188FU/include/hal_pg.h
+++ b/rtl8188FU/include/hal_pg.h
@@ -46,6 +46,8 @@
#define EEPROM_VERSION_88E 0xC4
#define EEPROM_CustomID_88E 0xC5
#define EEPROM_RF_ANTENNA_OPT_88E 0xC9
+#define EEPROM_COUNTRY_CODE_88E 0xCB
+#define EEPROM_RFE_OPTION_8188E 0xCA
// RTL88EE
#define EEPROM_MAC_ADDR_88EE 0xD0
@@ -93,6 +95,7 @@
#define EEPROM_TX_PWR_CALIBRATE_RATE_8192E 0xC8
#define EEPROM_RF_ANTENNA_OPT_8192E 0xC9
#define EEPROM_RFE_OPTION_8192E 0xCA
+#define EEPROM_COUNTRY_CODE_8192E 0xCB
// RTL8192EE
#define EEPROM_MAC_ADDR_8192EE 0xD0
@@ -136,6 +139,7 @@
#define EEPROM_TX_PWR_CALIBRATE_RATE_8812 0xC8
#define EEPROM_RF_ANTENNA_OPT_8812 0xC9
#define EEPROM_RFE_OPTION_8812 0xCA
+#define EEPROM_COUNTRY_CODE_8812 0xCB
// RTL8812AE
#define EEPROM_MAC_ADDR_8812AE 0xD0
@@ -199,6 +203,7 @@
#define EEPROM_TX_BBSWING_5G_8814 0xC7
#define EEPROM_TRX_ANTENNA_OPTION_8814 0xC9
#define EEPROM_RFE_OPTION_8814 0xCA
+#define EEPROM_COUNTRY_CODE_8814 0xCB
//====================================================
// EEPROM/Efuse PG Offset for 8821AE/8821AU/8821AS
@@ -304,6 +309,7 @@
#define EEPROM_TX_PWR_CALIBRATE_RATE_8188F 0xC8
#define EEPROM_RF_ANTENNA_OPT_8188F 0xC9
#define EEPROM_RFE_OPTION_8188F 0xCA
+#define EEPROM_COUNTRY_CODE_8188F 0xCB
#define EEPROM_CUSTOMER_ID_8188F 0x7F
#define EEPROM_SUBCUSTOMER_ID_8188F 0x59
@@ -342,6 +348,7 @@
#define EEPROM_TX_PWR_CALIBRATE_RATE_8723B 0xC8
#define EEPROM_RF_ANTENNA_OPT_8723B 0xC9
#define EEPROM_RFE_OPTION_8723B 0xCA
+#define EEPROM_COUNTRY_CODE_8723B 0xCB
// RTL8723BE
#define EEPROM_MAC_ADDR_8723BE 0xD0
@@ -390,6 +397,7 @@
#define EEPROM_TX_PWR_CALIBRATE_RATE_8703B 0xC8
#define EEPROM_RF_ANTENNA_OPT_8703B 0xC9
#define EEPROM_RFE_OPTION_8703B 0xCA
+#define EEPROM_COUNTRY_CODE_8703B 0xCB
/* MAC Hidden */
#define PPG_MAC_HIDDEN_START_8703B 0xF0
@@ -523,6 +531,7 @@
#define EEPROM_DEFAULT_CHANNEL_PLAN 0x7F
#define EEPROM_DEFAULT_BOARD_OPTION 0x00
#define EEPROM_DEFAULT_RFE_OPTION_8192E 0xFF
+#define EEPROM_DEFAULT_RFE_OPTION_8188E 0xFF
#define EEPROM_DEFAULT_RFE_OPTION 0x04
#define EEPROM_DEFAULT_FEATURE_OPTION 0x00
#define EEPROM_DEFAULT_BT_OPTION 0x10
diff --git a/rtl8188FU/include/mlme_osdep.h b/rtl8188FU/include/mlme_osdep.h
index 5380cd4..a740a13 100755
--- a/rtl8188FU/include/mlme_osdep.h
+++ b/rtl8188FU/include/mlme_osdep.h
@@ -26,7 +26,7 @@ extern int time_after(u32 now, u32 old);
#endif
extern void rtw_init_mlme_timer(_adapter *padapter);
-extern void rtw_os_indicate_disconnect( _adapter *adapter );
+extern void rtw_os_indicate_disconnect(_adapter *adapter, u16 reason, u8 locally_generated);
extern void rtw_os_indicate_connect( _adapter *adapter );
void rtw_os_indicate_scan_done( _adapter *padapter, bool aborted);
extern void rtw_report_sec_ie(_adapter *adapter,u8 authmode,u8 *sec_ie);
diff --git a/rtl8188FU/include/osdep_service.h b/rtl8188FU/include/osdep_service.h
index c059711..4423eea 100755
--- a/rtl8188FU/include/osdep_service.h
+++ b/rtl8188FU/include/osdep_service.h
@@ -258,7 +258,7 @@ extern void rtw_mfree2d(void *pbuf, int h, int w, int size);
extern void _rtw_memcpy(void *dec, const void *sour, u32 sz);
extern void _rtw_memmove(void *dst, const void *src, u32 sz);
-extern int _rtw_memcmp(void *dst, void *src, u32 sz);
+extern int _rtw_memcmp(void *dst, const void *src, u32 sz);
extern void _rtw_memset(void *pbuf, int c, u32 sz);
extern void _rtw_init_listhead(_list *list);
@@ -615,6 +615,11 @@ struct rtw_cbuf *rtw_cbuf_alloc(u32 size);
void rtw_cbuf_free(struct rtw_cbuf *cbuf);
// String handler
+
+BOOLEAN IsHexDigit(char chTmp);
+BOOLEAN is_alpha(char chTmp);
+char alpha_to_upper(char c);
+
/*
* Write formatted output to sized buffer
*/
diff --git a/rtl8188FU/include/osdep_service_linux.h b/rtl8188FU/include/osdep_service_linux.h
index a4926e6..288edbf 100755
--- a/rtl8188FU/include/osdep_service_linux.h
+++ b/rtl8188FU/include/osdep_service_linux.h
@@ -373,11 +373,13 @@ static inline void rtw_netif_stop_queue(struct net_device *pnetdev)
#endif
}
-static inline void rtw_merge_string(char *dst, int dst_len, const char *src1, const char *src2)
+static inline int rtw_merge_string(char *dst, int dst_len, const char *src1, const char *src2)
{
int len = 0;
len += snprintf(dst+len, dst_len - len, "%s", src1);
len += snprintf(dst+len, dst_len - len, "%s", src2);
+
+ return len;
}
#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,27))
diff --git a/rtl8188FU/include/rtl8188e_cmd.h b/rtl8188FU/include/rtl8188e_cmd.h
index 76e426d..9fc2ad6 100755
--- a/rtl8188FU/include/rtl8188e_cmd.h
+++ b/rtl8188FU/include/rtl8188e_cmd.h
@@ -163,10 +163,6 @@ int reset_tsf(PADAPTER Adapter, u8 reset_port );
//#define H2C_8188E_RSVDPAGE_LOC_LEN 5
//#define H2C_8188E_AOAC_RSVDPAGE_LOC_LEN 7
-#ifdef CONFIG_WOWLAN
-void SetFwRelatedForWoWLAN8188ES(_adapter* padapter, u8 bHostIsGoingtoSleep);
-#endif//CONFIG_WOWLAN
-
//---------------------------------------------------------------------------------------------------------//
//---------------------------------- H2C CMD CONTENT --------------------------------------------------//
//---------------------------------------------------------------------------------------------------------//
diff --git a/rtl8188FU/include/rtl8188e_dm.h b/rtl8188FU/include/rtl8188e_dm.h
index eb97de1..d6637a5 100755
--- a/rtl8188FU/include/rtl8188e_dm.h
+++ b/rtl8188FU/include/rtl8188e_dm.h
@@ -29,9 +29,5 @@ void rtl8188e_HalDmWatchDog(IN PADAPTER Adapter);
//void rtl8192c_dm_RF_Saving(IN PADAPTER pAdapter, IN u8 bForceInNormal);
-#ifdef CONFIG_ANTENNA_DIVERSITY
-void AntDivCompare8188E(PADAPTER Adapter, WLAN_BSSID_EX *dst, WLAN_BSSID_EX *src);
-u8 AntDivBeforeLink8188E(PADAPTER Adapter );
-#endif
#endif
diff --git a/rtl8188FU/include/rtl8188e_hal.h b/rtl8188FU/include/rtl8188e_hal.h
index 3dfd97e..41a464a 100755
--- a/rtl8188FU/include/rtl8188e_hal.h
+++ b/rtl8188FU/include/rtl8188e_hal.h
@@ -278,6 +278,9 @@ void Hal_ReadThermalMeter_88E(PADAPTER Adapter,u8* PROMContent,BOOLEAN Autoload
void Hal_EfuseParseXtal_8188E(PADAPTER pAdapter,u8* hwinfo,BOOLEAN AutoLoadFail);
void Hal_EfuseParseBoardType88E(PADAPTER pAdapter,u8* hwinfo,BOOLEAN AutoLoadFail);
void Hal_ReadPowerSavingMode88E(PADAPTER pAdapter,u8* hwinfo,BOOLEAN AutoLoadFail);
+void Hal_ReadPAType_8188E(PADAPTER Adapter, u8 *PROMContent, BOOLEAN AutoloadFail);
+void Hal_ReadAmplifierType_8188E(PADAPTER Adapter, u8 *PROMContent, BOOLEAN AutoloadFail);
+void Hal_ReadRFEType_8188E(PADAPTER Adapter, u8 *PROMContent, BOOLEAN AutoloadFail);
BOOLEAN HalDetectPwrDownMode88E(PADAPTER Adapter);
@@ -286,9 +289,9 @@ void Hal_DetectWoWMode(PADAPTER pAdapter);
#endif //CONFIG_WOWLAN
-#ifdef CONFIG_RF_GAIN_OFFSET
+#ifdef CONFIG_RF_POWER_TRIM
void Hal_ReadRFGainOffset(PADAPTER pAdapter,u8* hwinfo,BOOLEAN AutoLoadFail);
-#endif //CONFIG_RF_GAIN_OFFSET
+#endif /*CONFIG_RF_POWER_TRIM*/
void rtl8188e_init_default_value(_adapter *adapter);
diff --git a/rtl8188FU/include/rtl8188e_spec.h b/rtl8188FU/include/rtl8188e_spec.h
index a678dd9..9bd8fd7 100755
--- a/rtl8188FU/include/rtl8188e_spec.h
+++ b/rtl8188FU/include/rtl8188e_spec.h
@@ -101,11 +101,11 @@
// 0x0600h ~ 0x07FFh WMAC Configuration
//
//-----------------------------------------------------
-#ifdef CONFIG_RF_GAIN_OFFSET
+#ifdef CONFIG_RF_POWER_TRIM
#define EEPROM_RF_GAIN_OFFSET 0xC1
#define EEPROM_RF_GAIN_VAL 0xF6
#define EEPROM_THERMAL_OFFSET 0xF5
-#endif //CONFIG_RF_GAIN_OFFSET
+#endif /*CONFIG_RF_POWER_TRIM*/
//----------------------------------------------------------------------------
// 88E Driver Initialization Offload REG_FDHM0(Offset 0x88, 8 bits)
//----------------------------------------------------------------------------
@@ -152,6 +152,7 @@
#define NSS_NUM_88E 1
#define BAND_CAP_88E (BAND_CAP_2G)
#define BW_CAP_88E (BW_CAP_20M | BW_CAP_40M)
+#define PROTO_CAP_88E (PROTO_CAP_11B|PROTO_CAP_11G|PROTO_CAP_11N)
//----------------------------------------------------------------------------
// 8192C EEPROM/EFUSE share register definition.
diff --git a/rtl8188FU/include/rtl8188f_cmd.h b/rtl8188FU/include/rtl8188f_cmd.h
index ff8e526..66d374d 100755
--- a/rtl8188FU/include/rtl8188f_cmd.h
+++ b/rtl8188FU/include/rtl8188f_cmd.h
@@ -116,6 +116,7 @@ enum h2c_cmd_8188F{
#define SET_8188F_H2CCMD_PWRMODE_PARM_SMART_PS(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+1, 4, 4, __Value)
#define SET_8188F_H2CCMD_PWRMODE_PARM_BCN_PASS_TIME(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+2, 0, 8, __Value)
#define SET_8188F_H2CCMD_PWRMODE_PARM_ALL_QUEUE_UAPSD(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+3, 0, 8, __Value)
+#define SET_8188F_H2CCMD_PWRMODE_PARM_BCN_EARLY_C2H_RPT(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+3, 2, 1, __Value)
#define SET_8188F_H2CCMD_PWRMODE_PARM_PWR_STATE(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+4, 0, 8, __Value)
#define SET_8188F_H2CCMD_PWRMODE_PARM_BYTE5(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+5, 0, 8, __Value)
@@ -199,9 +200,11 @@ void rtl8188f_set_p2p_ps_offload_cmd(PADAPTER padapter, u8 p2p_ps_state);
void CheckFwRsvdPageContent(PADAPTER padapter);
-#if defined(CONFIG_WOWLAN) || defined(CONFIG_AP_WOWLAN)
-void SetFwRelatedForWoWLAN8188f(_adapter* padapter, u8 bHostIsGoingtoSleep);
-#endif//CONFIG_WOWLAN
+#ifdef CONFIG_TDLS
+#ifdef CONFIG_TDLS_CH_SW
+void rtl8188f_set_BcnEarly_C2H_Rpt_cmd(PADAPTER padapter, u8 enable);
+#endif
+#endif
#ifdef CONFIG_P2P_WOWLAN
void rtl8188f_set_p2p_wowlan_offload_cmd(PADAPTER padapter);
diff --git a/rtl8188FU/include/rtl8188f_hal.h b/rtl8188FU/include/rtl8188f_hal.h
index acb5996..b7726a9 100755
--- a/rtl8188FU/include/rtl8188f_hal.h
+++ b/rtl8188FU/include/rtl8188f_hal.h
@@ -36,38 +36,6 @@
#include "rtl8188f_sreset.h"
#endif
-
-//---------------------------------------------------------------------
-// RTL8188F From file
-//---------------------------------------------------------------------
- #define RTL8188F_FW_IMG "rtl8188f/FW_NIC.bin"
- #define RTL8188F_FW_WW_IMG "rtl8188f/FW_WoWLAN.bin"
- #define RTL8188F_PHY_REG "rtl8188f/PHY_REG.txt"
- #define RTL8188F_PHY_RADIO_A "rtl8188f/RadioA.txt"
- #define RTL8188F_PHY_RADIO_B "rtl8188f/RadioB.txt"
- #define RTL8188F_TXPWR_TRACK "rtl8188f/TxPowerTrack.txt"
- #define RTL8188F_AGC_TAB "rtl8188f/AGC_TAB.txt"
- #define RTL8188F_PHY_MACREG "rtl8188f/MAC_REG.txt"
- #define RTL8188F_PHY_REG_PG "rtl8188f/PHY_REG_PG.txt"
- #define RTL8188F_PHY_REG_MP "rtl8188f/PHY_REG_MP.txt"
- #define RTL8188F_TXPWR_LMT "rtl8188f/TXPWR_LMT.txt"
-
-//---------------------------------------------------------------------
-// RTL8188F From header
-//---------------------------------------------------------------------
-
-#if MP_DRIVER == 1
- #define Rtl8188F_FwBTImgArray Rtl8188FFwBTImgArray
- #define Rtl8188F_FwBTImgArrayLength Rtl8188FFwBTImgArrayLength
-
- #define Rtl8188F_FwMPImageArray Rtl8188FFwMPImgArray
- #define Rtl8188F_FwMPImgArrayLength Rtl8188FMPImgArrayLength
-
- #define Rtl8188F_PHY_REG_Array_MP Rtl8188F_PHYREG_Array_MP
- #define Rtl8188F_PHY_REG_Array_MPLength Rtl8188F_PHYREG_Array_MPLength
-#endif
-
-
#define FW_8188F_SIZE 0x8000
#define FW_8188F_START_ADDRESS 0x1000
#define FW_8188F_END_ADDRESS 0x1FFF //0x5FFF
@@ -193,14 +161,14 @@ typedef struct _RT_8188F_FIRMWARE_HDR
#include "HalVerDef.h"
#include "hal_com.h"
-#define EFUSE_OOB_PROTECT_BYTES 15
+#define EFUSE_OOB_PROTECT_BYTES (18 + 1)
#define HAL_EFUSE_MEMORY
#define HWSET_MAX_SIZE_8188F 512
-#define EFUSE_REAL_CONTENT_LEN_8188F 512
+#define EFUSE_REAL_CONTENT_LEN_8188F 256
#define EFUSE_MAP_LEN_8188F 512
-#define EFUSE_MAX_SECTION_8188F 64
+#define EFUSE_MAX_SECTION_8188F (EFUSE_MAP_LEN_8188F / 8)
#define EFUSE_IC_ID_OFFSET 506 //For some inferiority IC purpose. added by Roger, 2009.09.02.
#define AVAILABLE_EFUSE_ADDR(addr) (addr < EFUSE_REAL_CONTENT_LEN_8188F)
@@ -257,7 +225,6 @@ void Hal_EfuseParseAntennaDiversity_8188F(PADAPTER padapter, u8 *hwinfo, BOOLEAN
void Hal_EfuseParseXtal_8188F(PADAPTER pAdapter, u8 *hwinfo, u8 AutoLoadFail);
void Hal_EfuseParseThermalMeter_8188F(PADAPTER padapter, u8 *hwinfo, u8 AutoLoadFail);
void Hal_EfuseParseKFreeData_8188F(PADAPTER pAdapter, u8 *hwinfo, BOOLEAN AutoLoadFail);
-VOID Hal_EfuseParseMacHidden_8188F(PADAPTER pAdapter, u8 *hwinfo, BOOLEAN AutoLoadFail);
#if 0 /* Do not need for rtl8188f */
VOID Hal_EfuseParseVoltage_8188F(PADAPTER pAdapter,u8* hwinfo,BOOLEAN AutoLoadFail);
diff --git a/rtl8188FU/include/rtl8188f_spec.h b/rtl8188FU/include/rtl8188f_spec.h
index 52a02b1..4324a53 100755
--- a/rtl8188FU/include/rtl8188f_spec.h
+++ b/rtl8188FU/include/rtl8188f_spec.h
@@ -297,6 +297,7 @@
#define NSS_NUM_8188F 1
#define BAND_CAP_8188F (BAND_CAP_2G)
#define BW_CAP_8188F (BW_CAP_20M | BW_CAP_40M)
+#define PROTO_CAP_8188F (PROTO_CAP_11B|PROTO_CAP_11G|PROTO_CAP_11N)
#endif /* __RTL8188F_SPEC_H__ */
diff --git a/rtl8188FU/include/rtl8192e_cmd.h b/rtl8188FU/include/rtl8192e_cmd.h
index 28bebe3..6704b40 100755
--- a/rtl8188FU/include/rtl8192e_cmd.h
+++ b/rtl8188FU/include/rtl8192e_cmd.h
@@ -105,6 +105,7 @@ typedef struct _RSVDPAGE_LOC_92E {
#define SET_8192E_H2CCMD_PWRMODE_PARM_SMART_PS(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+1, 4, 4, __Value)
#define SET_8192E_H2CCMD_PWRMODE_PARM_BCN_PASS_TIME(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+2, 0, 8, __Value)
#define SET_8192E_H2CCMD_PWRMODE_PARM_ALL_QUEUE_UAPSD(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+3, 0, 8, __Value)
+#define SET_8192E_H2CCMD_PWRMODE_PARM_BCN_EARLY_C2H_RPT(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+3, 2, 1, __Value)
#define SET_8192E_H2CCMD_PWRMODE_PARM_PWR_STATE(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+4, 0, 8, __Value)
#define SET_8192E_H2CCMD_PWRMODE_PARM_BYTE5(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+5, 0, 8, __Value)
#define GET_8192E_H2CCMD_PWRMODE_PARM_MODE(__pH2CCmd) LE_BITS_TO_1BYTE(__pH2CCmd, 0, 8)
@@ -137,14 +138,16 @@ void rtl8192e_set_p2p_ps_offload_cmd(PADAPTER padapter, u8 p2p_ps_state);
void CheckFwRsvdPageContent(PADAPTER padapter);
+#ifdef CONFIG_TDLS
+#ifdef CONFIG_TDLS_CH_SW
+void rtl8192e_set_BcnEarly_C2H_Rpt_cmd(PADAPTER padapter, u8 enable);
+#endif
+#endif
+
#ifdef CONFIG_TSF_RESET_OFFLOAD
int reset_tsf(PADAPTER Adapter, u8 reset_port );
#endif // CONFIG_TSF_RESET_OFFLOAD
-
-#if defined(CONFIG_WOWLAN) || defined(CONFIG_AP_WOWLAN)
-void SetFwRelatedForWoWLAN8192E(_adapter* padapter, u8 bHostIsGoingtoSleep);
-#endif
/// TX Feedback Content
#define USEC_UNIT_FOR_8192E_C2H_TX_RPT_QUEUE_TIME 256
@@ -172,4 +175,4 @@ C2HPacketHandler_8192E(
IN u1Byte Length
);
-#endif//__RTL8192E_CMD_H__ \ No newline at end of file
+#endif//__RTL8192E_CMD_H__
diff --git a/rtl8188FU/include/rtl8192e_dm.h b/rtl8188FU/include/rtl8192e_dm.h
index bb4f7a5..677de0c 100755
--- a/rtl8188FU/include/rtl8192e_dm.h
+++ b/rtl8188FU/include/rtl8192e_dm.h
@@ -30,9 +30,5 @@ void rtl8192e_HalDmWatchDog(IN PADAPTER Adapter);
//void rtl8192c_dm_RF_Saving(IN PADAPTER pAdapter, IN u8 bForceInNormal);
-#ifdef CONFIG_ANTENNA_DIVERSITY
-void AntDivCompare8192e(PADAPTER Adapter, WLAN_BSSID_EX *dst, WLAN_BSSID_EX *src);
-u8 AntDivBeforeLink8192e(PADAPTER Adapter );
-#endif
#endif
diff --git a/rtl8188FU/include/rtl8192e_spec.h b/rtl8188FU/include/rtl8192e_spec.h
index 6ecfbeb..d6b63ba 100755
--- a/rtl8188FU/include/rtl8192e_spec.h
+++ b/rtl8188FU/include/rtl8192e_spec.h
@@ -322,6 +322,7 @@
#define NSS_NUM_8192E 2
#define BAND_CAP_8192E (BAND_CAP_2G)
#define BW_CAP_8192E (BW_CAP_20M | BW_CAP_40M)
+#define PROTO_CAP_8192E (PROTO_CAP_11B|PROTO_CAP_11G|PROTO_CAP_11N)
#endif //__RTL8192E_SPEC_H__
diff --git a/rtl8188FU/include/rtl8703b_cmd.h b/rtl8188FU/include/rtl8703b_cmd.h
index 972bed5..663f315 100755
--- a/rtl8188FU/include/rtl8703b_cmd.h
+++ b/rtl8188FU/include/rtl8703b_cmd.h
@@ -116,6 +116,7 @@ enum h2c_cmd_8703B{
#define SET_8703B_H2CCMD_PWRMODE_PARM_SMART_PS(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+1, 4, 4, __Value)
#define SET_8703B_H2CCMD_PWRMODE_PARM_BCN_PASS_TIME(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+2, 0, 8, __Value)
#define SET_8703B_H2CCMD_PWRMODE_PARM_ALL_QUEUE_UAPSD(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+3, 0, 8, __Value)
+#define SET_8703B_H2CCMD_PWRMODE_PARM_BCN_EARLY_C2H_RPT(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+3, 2, 1, __Value)
#define SET_8703B_H2CCMD_PWRMODE_PARM_PWR_STATE(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+4, 0, 8, __Value)
#define SET_8703B_H2CCMD_PWRMODE_PARM_BYTE5(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+5, 0, 8, __Value)
@@ -198,9 +199,11 @@ void rtl8703b_set_p2p_ps_offload_cmd(PADAPTER padapter, u8 p2p_ps_state);
void CheckFwRsvdPageContent(PADAPTER padapter);
-#if defined(CONFIG_WOWLAN) || defined(CONFIG_AP_WOWLAN)
-void SetFwRelatedForWoWLAN8703b(_adapter* padapter, u8 bHostIsGoingtoSleep);
-#endif//CONFIG_WOWLAN
+#ifdef CONFIG_TDLS
+#ifdef CONFIG_TDLS_CH_SW
+void rtl8703b_set_BcnEarly_C2H_Rpt_cmd(PADAPTER padapter, u8 enable);
+#endif
+#endif
#ifdef CONFIG_P2P_WOWLAN
void rtl8703b_set_p2p_wowlan_offload_cmd(PADAPTER padapter);
diff --git a/rtl8188FU/include/rtl8703b_spec.h b/rtl8188FU/include/rtl8703b_spec.h
index d83e1e3..29d48a0 100755
--- a/rtl8188FU/include/rtl8703b_spec.h
+++ b/rtl8188FU/include/rtl8703b_spec.h
@@ -395,14 +395,14 @@
//----------------------------------------------------------------------------
#define BIT_BCN_PORT_SEL BIT5
-#ifdef CONFIG_RF_GAIN_OFFSET
+#ifdef CONFIG_RF_POWER_TRIM
#ifdef CONFIG_RTL8703B
#define EEPROM_RF_GAIN_OFFSET 0xC1
#endif
#define EEPROM_RF_GAIN_VAL 0x1F6
-#endif //CONFIG_RF_GAIN_OFFSET
+#endif /*CONFIG_RF_POWER_TRIM*/
//----------------------------------------------------------------------------
@@ -474,6 +474,7 @@
#define NSS_NUM_8703B 1
#define BAND_CAP_8703B (BAND_CAP_2G)
#define BW_CAP_8703B (BW_CAP_20M | BW_CAP_40M)
+#define PROTO_CAP_8703B (PROTO_CAP_11B|PROTO_CAP_11G|PROTO_CAP_11N)
#endif /* __RTL8703B_SPEC_H__ */
diff --git a/rtl8188FU/include/rtl8723b_cmd.h b/rtl8188FU/include/rtl8723b_cmd.h
index aa8c645..5663cb1 100755
--- a/rtl8188FU/include/rtl8723b_cmd.h
+++ b/rtl8188FU/include/rtl8723b_cmd.h
@@ -116,6 +116,7 @@ enum h2c_cmd_8723B{
#define SET_8723B_H2CCMD_PWRMODE_PARM_SMART_PS(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+1, 4, 4, __Value)
#define SET_8723B_H2CCMD_PWRMODE_PARM_BCN_PASS_TIME(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+2, 0, 8, __Value)
#define SET_8723B_H2CCMD_PWRMODE_PARM_ALL_QUEUE_UAPSD(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+3, 0, 8, __Value)
+#define SET_8723B_H2CCMD_PWRMODE_PARM_BCN_EARLY_C2H_RPT(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+3, 2, 1, __Value)
#define SET_8723B_H2CCMD_PWRMODE_PARM_PWR_STATE(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+4, 0, 8, __Value)
#define SET_8723B_H2CCMD_PWRMODE_PARM_BYTE5(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+5, 0, 8, __Value)
@@ -198,9 +199,11 @@ void rtl8723b_set_p2p_ps_offload_cmd(PADAPTER padapter, u8 p2p_ps_state);
void CheckFwRsvdPageContent(PADAPTER padapter);
-#if defined(CONFIG_WOWLAN) || defined(CONFIG_AP_WOWLAN)
-void SetFwRelatedForWoWLAN8723b(_adapter* padapter, u8 bHostIsGoingtoSleep);
-#endif//CONFIG_WOWLAN
+#ifdef CONFIG_TDLS
+#ifdef CONFIG_TDLS_CH_SW
+void rtl8723b_set_BcnEarly_C2H_Rpt_cmd(PADAPTER padapter, u8 enable);
+#endif
+#endif
#ifdef CONFIG_P2P_WOWLAN
void rtl8723b_set_p2p_wowlan_offload_cmd(PADAPTER padapter);
diff --git a/rtl8188FU/include/rtl8723b_hal.h b/rtl8188FU/include/rtl8723b_hal.h
index 8424308..5e8f9be 100755
--- a/rtl8188FU/include/rtl8723b_hal.h
+++ b/rtl8188FU/include/rtl8723b_hal.h
@@ -313,9 +313,9 @@ s32 c2h_handler_8723b(PADAPTER padapter, u8 *pC2hEvent);
u8 MRateToHwRate8723B(u8 rate);
u8 HwRateToMRate8723B(u8 rate);
-#ifdef CONFIG_RF_GAIN_OFFSET
+#ifdef CONFIG_RF_POWER_TRIM
void Hal_ReadRFGainOffset(PADAPTER pAdapter,u8* hwinfo,BOOLEAN AutoLoadFail);
-#endif //CONFIG_RF_GAIN_OFFSET
+#endif /*CONFIG_RF_POWER_TRIM*/
#ifdef CONFIG_PCI_HCI
BOOLEAN InterruptRecognized8723BE(PADAPTER Adapter);
diff --git a/rtl8188FU/include/rtl8723b_spec.h b/rtl8188FU/include/rtl8723b_spec.h
index 63f3059..817d980 100755
--- a/rtl8188FU/include/rtl8723b_spec.h
+++ b/rtl8188FU/include/rtl8723b_spec.h
@@ -211,14 +211,14 @@
// 0x0600h ~ 0x07FFh WMAC Configuration
//
//-----------------------------------------------------
-#ifdef CONFIG_RF_GAIN_OFFSET
+#ifdef CONFIG_RF_POWER_TRIM
#ifdef CONFIG_RTL8723B
#define EEPROM_RF_GAIN_OFFSET 0xC1
#endif
#define EEPROM_RF_GAIN_VAL 0x1F6
-#endif //CONFIG_RF_GAIN_OFFSET
+#endif /*CONFIG_RF_POWER_TRIM*/
//----------------------------------------------------------------------------
@@ -290,6 +290,7 @@
#define NSS_NUM_8723B 1
#define BAND_CAP_8723B (BAND_CAP_2G)
#define BW_CAP_8723B (BW_CAP_20M | BW_CAP_40M)
+#define PROTO_CAP_8723B (PROTO_CAP_11B|PROTO_CAP_11G|PROTO_CAP_11N)
#endif /* __RTL8723B_SPEC_H__ */
diff --git a/rtl8188FU/include/rtl8812a_cmd.h b/rtl8188FU/include/rtl8812a_cmd.h
index e34683b..4fe423d 100755
--- a/rtl8188FU/include/rtl8812a_cmd.h
+++ b/rtl8188FU/include/rtl8812a_cmd.h
@@ -87,6 +87,7 @@ struct H2C_SS_RFOFF_PARAM{
#define SET_8812_H2CCMD_PWRMODE_PARM_SMART_PS(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+1, 4, 4, __Value)
#define SET_8812_H2CCMD_PWRMODE_PARM_BCN_PASS_TIME(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+2, 0, 8, __Value)
#define SET_8812_H2CCMD_PWRMODE_PARM_ALL_QUEUE_UAPSD(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+3, 0, 8, __Value)
+#define SET_8812_H2CCMD_PWRMODE_PARM_BCN_EARLY_C2H_RPT(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+3, 2, 1, __Value)
#define SET_8812_H2CCMD_PWRMODE_PARM_PWR_STATE(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+4, 0, 8, __Value)
#define SET_8812_H2CCMD_PWRMODE_PARM_BYTE5(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+5, 0, 8, __Value)
@@ -124,14 +125,16 @@ void rtl8812_set_p2p_ps_offload_cmd(PADAPTER padapter, u8 p2p_ps_state);
void CheckFwRsvdPageContent(PADAPTER padapter);
+#ifdef CONFIG_TDLS
+#ifdef CONFIG_TDLS_CH_SW
+void rtl8812_set_BcnEarly_C2H_Rpt_cmd(PADAPTER padapter, u8 enable);
+#endif
+#endif
+
#ifdef CONFIG_TSF_RESET_OFFLOAD
int reset_tsf(PADAPTER Adapter, u8 reset_port );
#endif // CONFIG_TSF_RESET_OFFLOAD
-#ifdef CONFIG_WOWLAN
-void SetFwRelatedForWoWLAN8812(_adapter* padapter, u8 bHostIsGoingtoSleep);
-#endif//CONFIG_WOWLAN
-
//------------------------------------
// C2H format
//------------------------------------
diff --git a/rtl8188FU/include/rtl8812a_dm.h b/rtl8188FU/include/rtl8812a_dm.h
index 3196973..f697e5c 100755
--- a/rtl8188FU/include/rtl8812a_dm.h
+++ b/rtl8188FU/include/rtl8812a_dm.h
@@ -29,9 +29,5 @@ void rtl8812_HalDmWatchDog(IN PADAPTER Adapter);
//void rtl8192c_dm_RF_Saving(IN PADAPTER pAdapter, IN u8 bForceInNormal);
-#ifdef CONFIG_ANTENNA_DIVERSITY
-void AntDivCompare8812(PADAPTER Adapter, WLAN_BSSID_EX *dst, WLAN_BSSID_EX *src);
-u8 AntDivBeforeLink8812(PADAPTER Adapter );
-#endif
#endif
diff --git a/rtl8188FU/include/rtl8812a_spec.h b/rtl8188FU/include/rtl8812a_spec.h
index eab6d1c..d0a6233 100755
--- a/rtl8188FU/include/rtl8812a_spec.h
+++ b/rtl8188FU/include/rtl8812a_spec.h
@@ -266,6 +266,7 @@
#define NSS_NUM_8812A 2
#define BAND_CAP_8812A (BAND_CAP_2G | BAND_CAP_5G)
#define BW_CAP_8812A (BW_CAP_20M | BW_CAP_40M | BW_CAP_80M)
+#define PROTO_CAP_8812A (PROTO_CAP_11B|PROTO_CAP_11G|PROTO_CAP_11N|PROTO_CAP_11AC)
#endif /* __RTL8812A_SPEC_H__ */
diff --git a/rtl8188FU/include/rtl8814a_cmd.h b/rtl8188FU/include/rtl8814a_cmd.h
index 6f9cdc2..d86c97b 100755
--- a/rtl8188FU/include/rtl8814a_cmd.h
+++ b/rtl8188FU/include/rtl8814a_cmd.h
@@ -34,6 +34,7 @@
#define SET_8814A_H2CCMD_PWRMODE_PARM_SMART_PS(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+1, 4, 4, __Value)
#define SET_8814A_H2CCMD_PWRMODE_PARM_BCN_PASS_TIME(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+2, 0, 8, __Value)
#define SET_8814A_H2CCMD_PWRMODE_PARM_ALL_QUEUE_UAPSD(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+3, 0, 8, __Value)
+#define SET_8814A_H2CCMD_PWRMODE_PARM_BCN_EARLY_C2H_RPT(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+3, 2, 1, __Value)
#define SET_8814A_H2CCMD_PWRMODE_PARM_PWR_STATE(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+4, 0, 8, __Value)
#define SET_8814A_H2CCMD_PWRMODE_PARM_BYTE5(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+5, 0, 8, __Value)
@@ -124,6 +125,12 @@ void rtl8814_set_FwPwrMode_cmd(PADAPTER padapter, u8 PSMode);
u8 GetTxBufferRsvdPageNum8814(_adapter *padapter, bool wowlan);
u8 rtl8814_set_rssi_cmd(_adapter*padapter, u8 *param);
+#ifdef CONFIG_TDLS
+#ifdef CONFIG_TDLS_CH_SW
+void rtl8814_set_BcnEarly_C2H_Rpt_cmd(PADAPTER padapter, u8 enable);
+#endif
+#endif
+
void
Set_RA_LDPC_8814(
struct sta_info *psta,
diff --git a/rtl8188FU/include/rtl8814a_dm.h b/rtl8188FU/include/rtl8814a_dm.h
index 4883770..f51d93d 100755
--- a/rtl8188FU/include/rtl8814a_dm.h
+++ b/rtl8188FU/include/rtl8814a_dm.h
@@ -25,10 +25,5 @@ void rtl8814_deinit_dm_priv(IN PADAPTER Adapter);
void rtl8814_InitHalDm(IN PADAPTER Adapter);
void rtl8814_HalDmWatchDog(IN PADAPTER Adapter);
-#ifdef CONFIG_ANTENNA_DIVERSITY
-void AntDivCompare8814(PADAPTER Adapter, WLAN_BSSID_EX *dst, WLAN_BSSID_EX *src);
-u8 AntDivBeforeLink8814(PADAPTER Adapter );
-#endif //CONFIG_ANTENNA_DIVERSITY
-
#endif
diff --git a/rtl8188FU/include/rtl8814a_spec.h b/rtl8188FU/include/rtl8814a_spec.h
index 132ef03..919f78a 100755
--- a/rtl8188FU/include/rtl8814a_spec.h
+++ b/rtl8188FU/include/rtl8814a_spec.h
@@ -637,5 +637,6 @@ So the following defines for 92C is not entire!!!!!!
#define NSS_NUM_8814A 3
#define BAND_CAP_8814A (BAND_CAP_2G | BAND_CAP_5G)
#define BW_CAP_8814A (BW_CAP_20M | BW_CAP_40M | BW_CAP_80M)
+#define PROTO_CAP_8814A (PROTO_CAP_11B|PROTO_CAP_11G|PROTO_CAP_11N|PROTO_CAP_11AC)
#endif //__RTL8814A_SPEC_H__
diff --git a/rtl8188FU/include/rtl8821a_spec.h b/rtl8188FU/include/rtl8821a_spec.h
index 10a616b..ce0bac4 100755
--- a/rtl8188FU/include/rtl8821a_spec.h
+++ b/rtl8188FU/include/rtl8821a_spec.h
@@ -102,6 +102,7 @@
#define NSS_NUM_8821A 1
#define BAND_CAP_8821A (BAND_CAP_2G | BAND_CAP_5G)
#define BW_CAP_8821A (BW_CAP_20M | BW_CAP_40M | BW_CAP_80M)
+#define PROTO_CAP_8821A (PROTO_CAP_11B|PROTO_CAP_11G|PROTO_CAP_11N|PROTO_CAP_11AC)
#endif /* __RTL8821A_SPEC_H__ */
diff --git a/rtl8188FU/include/rtw_cmd.h b/rtl8188FU/include/rtw_cmd.h
index 550adb1..3a20368 100755
--- a/rtl8188FU/include/rtw_cmd.h
+++ b/rtl8188FU/include/rtw_cmd.h
@@ -238,6 +238,7 @@ enum rtw_drvextra_cmd_id
DFS_MASTER_WK_CID,
SESSION_TRACKER_WK_CID,
EN_HW_UPDATE_TSF_WK_CID,
+ MP_CMD_WK_CID,
MAX_WK_CID
};
@@ -898,6 +899,14 @@ struct addBaReq_parm
u8 addr[ETH_ALEN];
};
+struct addBaRsp_parm {
+ unsigned int tid;
+ unsigned int start_seq;
+ u8 addr[ETH_ALEN];
+ u8 status;
+ u8 size;
+};
+
/*H2C Handler index: 46 */
struct set_ch_parm {
u8 ch;
@@ -966,6 +975,7 @@ struct SwitchBandwidth_parm
/*H2C Handler index: 59 */
struct SetChannelPlan_param
{
+ const struct country_chplan *country_ent;
u8 channel_plan;
};
@@ -1057,6 +1067,7 @@ extern u8 rtw_setfwdig_cmd(_adapter*padapter, u8 type);
extern u8 rtw_setfwra_cmd(_adapter*padapter, u8 type);
extern u8 rtw_addbareq_cmd(_adapter*padapter, u8 tid, u8 *addr);
+extern u8 rtw_addbarsp_cmd(_adapter *padapter, u8 *addr, u16 tid, u8 status, u8 size, u16 start_seq);
// add for CONFIG_IEEE80211W, none 11w also can use
extern u8 rtw_reset_securitypriv_cmd(_adapter*padapter);
extern u8 rtw_free_assoc_resources_cmd(_adapter *padapter);
@@ -1103,10 +1114,15 @@ u8 rtw_btinfo_cmd(PADAPTER padapter, u8 *pbuf, u16 length);
u8 rtw_enable_hw_update_tsf_cmd(_adapter *padapter);
u8 rtw_set_ch_cmd(_adapter*padapter, u8 ch, u8 bw, u8 ch_offset, u8 enqueue);
+
u8 rtw_set_chplan_cmd(_adapter *adapter, int flags, u8 chplan, u8 swconfig);
+u8 rtw_set_country_cmd(_adapter *adapter, int flags, const char *country_code, u8 swconfig);
+
extern u8 rtw_led_blink_cmd(_adapter*padapter, PVOID pLed);
extern u8 rtw_set_csa_cmd(_adapter*padapter, u8 new_ch_no);
-extern u8 rtw_tdls_cmd(_adapter*padapter, u8 *addr, u8 option);
+extern u8 rtw_tdls_cmd(_adapter *padapter, const u8 *addr, u8 option);
+
+u8 rtw_mp_cmd(_adapter *adapter, u8 mp_cmd_id, u8 flags);
//#ifdef CONFIG_C2H_PACKET_EN
extern u8 rtw_c2h_packet_wk_cmd(PADAPTER padapter, u8 *pbuf, u16 length);
@@ -1216,6 +1232,7 @@ enum rtw_h2c_cmd
GEN_CMD_CODE(_ChkBMCSleepq), /*63*/
GEN_CMD_CODE(_RunInThreadCMD), /*64*/
+ GEN_CMD_CODE(_AddBARsp) , /*65*/
MAX_H2CCMD
};
@@ -1303,6 +1320,7 @@ struct _cmd_callback rtw_cmd_callback[] =
{GEN_CMD_CODE(_ChkBMCSleepq), NULL}, /*63*/
{GEN_CMD_CODE(_RunInThreadCMD), NULL},/*64*/
+ {GEN_CMD_CODE(_AddBARsp), NULL}, /*65*/
};
#endif
diff --git a/rtl8188FU/include/rtw_debug.h b/rtl8188FU/include/rtw_debug.h
index 5b6779f..2146dd4 100755
--- a/rtl8188FU/include/rtw_debug.h
+++ b/rtl8188FU/include/rtw_debug.h
@@ -229,7 +229,7 @@ extern void rtl871x_cedbg(const char *fmt, ...);
if (sel == RTW_DBGDUMP)\
_DBG_871X_LEVEL(_drv_always_, fmt, ##arg); \
else {\
- if(_seqdump(sel, fmt, ##arg)) /*rtw_warn_on(1)*/; \
+ _seqdump(sel, fmt, ##arg); \
} \
}while(0)
@@ -239,7 +239,7 @@ extern void rtl871x_cedbg(const char *fmt, ...);
if (sel == RTW_DBGDUMP)\
DBG_871X_LEVEL(_drv_always_, fmt, ##arg); \
else {\
- if(_seqdump(sel, fmt, ##arg)) /*rtw_warn_on(1)*/; \
+ _seqdump(sel, fmt, ##arg) /*rtw_warn_on(1)*/; \
} \
}while(0)
@@ -421,6 +421,8 @@ int proc_get_best_channel(struct seq_file *m, void *v);
ssize_t proc_set_best_channel(struct file *file, const char __user *buffer, size_t count, loff_t *pos, void *data);
#endif /* CONFIG_FIND_BEST_CHANNEL */
+int proc_get_trx_info_debug(struct seq_file *m, void *v);
+
int proc_get_rx_signal(struct seq_file *m, void *v);
ssize_t proc_set_rx_signal(struct file *file, const char __user *buffer, size_t count, loff_t *pos, void *data);
int proc_get_hw_status(struct seq_file *m, void *v);
diff --git a/rtl8188FU/include/rtw_efuse.h b/rtl8188FU/include/rtw_efuse.h
index 43513f2..945ccf7 100755
--- a/rtl8188FU/include/rtw_efuse.h
+++ b/rtl8188FU/include/rtw_efuse.h
@@ -168,6 +168,8 @@ extern u8 fakeBTEfuseContent[EFUSE_MAX_BT_BANK][EFUSE_MAX_HW_SIZE];
extern u8 fakeBTEfuseInitMap[];
extern u8 fakeBTEfuseModifiedMap[];
/*------------------------Export global variable----------------------------*/
+u8 efuse_bt_GetCurrentSize(PADAPTER padapter, u16 *size);
+u16 efuse_bt_GetMaxSize(PADAPTER padapter);
u8 efuse_GetCurrentSize(PADAPTER padapter, u16 *size);
u16 efuse_GetMaxSize(PADAPTER padapter);
@@ -201,6 +203,10 @@ u8 rtw_efuse_file_read(PADAPTER padapter,u8 *filepatch,u8 *buf, u32 len);
extern const u8 _mac_hidden_max_bw_to_hal_bw_cap[];
#define mac_hidden_max_bw_to_hal_bw_cap(max_bw) (((max_bw) >= MAC_HIDDEN_MAX_BW_NUM) ? 0 : _mac_hidden_max_bw_to_hal_bw_cap[(max_bw)])
+#define MAC_HIDDEN_PROTOCOL_NUM 4
+extern const u8 _mac_hidden_proto_to_hal_proto_cap[];
+#define mac_hidden_proto_to_hal_proto_cap(proto) (((proto) >= MAC_HIDDEN_PROTOCOL_NUM) ? 0 : _mac_hidden_proto_to_hal_proto_cap[(proto)])
+
u8 mac_hidden_wl_func_to_hal_wl_func(u8 func);
#ifdef PLATFORM_LINUX
diff --git a/rtl8188FU/include/rtw_event.h b/rtl8188FU/include/rtw_event.h
index 2fb9503..06b8612 100755
--- a/rtl8188FU/include/rtw_event.h
+++ b/rtl8188FU/include/rtw_event.h
@@ -66,14 +66,12 @@ It is used in AP/Ad-HoC(M) mode.
*/
struct stassoc_event {
unsigned char macaddr[6];
- unsigned char rsvd[2];
- int cam_id;
-
};
struct stadel_event {
unsigned char macaddr[6];
unsigned char rsvd[2]; //for reason
+ unsigned char locally_generated;
int mac_id;
};
diff --git a/rtl8188FU/include/rtw_mlme.h b/rtl8188FU/include/rtw_mlme.h
index 94211e9..5b1666a 100755
--- a/rtl8188FU/include/rtw_mlme.h
+++ b/rtl8188FU/include/rtw_mlme.h
@@ -448,6 +448,7 @@ struct tdls_ch_switch{
u32 cur_time;
u8 delay_switch_back;
u8 dump_stack;
+ struct submit_ctx chsw_sctx;
};
#endif
@@ -524,7 +525,9 @@ struct mlme_priv {
u8 *nic_hdl;
+ #ifdef SUPPLICANT_RTK_VERSION_LOWER_THAN_JB42
u8 not_indic_disco;
+ #endif
_list *pscanned;
_queue free_bss_pool;
_queue scanned_queue;
@@ -604,6 +607,7 @@ struct mlme_priv {
_timer dynamic_chk_timer; //dynamic/periodic check timer
u8 acm_mask; // for wmm acm mask
+ const struct country_chplan *country_ent;
u8 ChannelPlan;
RT_SCAN_TYPE scan_mode; // active: 1, passive: 0
@@ -781,6 +785,7 @@ extern void rtw_surveydone_event_callback(_adapter *adapter, u8 *pbuf);
extern void rtw_joinbss_event_callback(_adapter *adapter, u8 *pbuf);
extern void rtw_stassoc_event_callback(_adapter *adapter, u8 *pbuf);
extern void rtw_stadel_event_callback(_adapter *adapter, u8 *pbuf);
+void rtw_sta_mstatus_report(_adapter *adapter);
extern void rtw_atimdone_event_callback(_adapter *adapter, u8 *pbuf);
extern void rtw_cpwm_event_callback(_adapter *adapter, u8 *pbuf);
extern void rtw_wmm_event_callback(PADAPTER padapter, u8 *pbuf);
@@ -902,7 +907,7 @@ struct wlan_network *_rtw_find_same_network(_queue *scanned_queue, struct wlan_n
struct wlan_network *rtw_find_same_network(_queue *scanned_queue, struct wlan_network *network);
extern void rtw_free_assoc_resources(_adapter* adapter, int lock_scanned_queue);
-extern void rtw_indicate_disconnect(_adapter* adapter);
+extern void rtw_indicate_disconnect(_adapter *adapter, u16 reason, u8 locally_generated);
extern void rtw_indicate_connect(_adapter* adapter);
void rtw_indicate_scan_done( _adapter *padapter, bool aborted);
diff --git a/rtl8188FU/include/rtw_mlme_ext.h b/rtl8188FU/include/rtw_mlme_ext.h
index 5ea6780..9fdb560 100755
--- a/rtl8188FU/include/rtw_mlme_ext.h
+++ b/rtl8188FU/include/rtw_mlme_ext.h
@@ -129,6 +129,7 @@ typedef enum _RT_CHANNEL_DOMAIN
RTW_CHPLAN_MKK1_MKK1 = 0x27,
RTW_CHPLAN_WORLD_KCC1 = 0x28,
RTW_CHPLAN_WORLD_FCC2 = 0x29,
+ RTW_CHPLAN_FCC2_NULL = 0x2A,
RTW_CHPLAN_WORLD_FCC3 = 0x30,
RTW_CHPLAN_WORLD_FCC4 = 0x31,
RTW_CHPLAN_WORLD_FCC5 = 0x32,
@@ -159,6 +160,7 @@ typedef enum _RT_CHANNEL_DOMAIN
RTW_CHPLAN_FCC1_FCC10 = 0x57,
RTW_CHPLAN_MKK2_MKK4 = 0x58,
RTW_CHPLAN_WORLD_ETSI14 = 0x59,
+ RTW_CHPLAN_FCC1_FCC5 = 0x60,
RTW_CHPLAN_MAX,
RTW_CHPLAN_REALTEK_DEFINE = 0x7F,
@@ -174,6 +176,7 @@ typedef enum _RT_CHANNEL_DOMAIN_2G
RTW_RD_2G_ETSI2 = 5, /* France */
RTW_RD_2G_GLOBAL = 6, /* Global domain */
RTW_RD_2G_MKK2 = 7, /* Japan */
+ RTW_RD_2G_FCC2 = 8, /* US */
RTW_RD_2G_MAX,
}RT_CHANNEL_DOMAIN_2G, *PRT_CHANNEL_DOMAIN_2G;
@@ -223,9 +226,9 @@ typedef enum _RT_CHANNEL_DOMAIN_5G
RTW_RD_5G_MAX,
}RT_CHANNEL_DOMAIN_5G, *PRT_CHANNEL_DOMAIN_5G;
-#define rtw_is_channel_plan_valid(chplan) ((chplan) < RTW_CHPLAN_MAX || (chplan) == RTW_CHPLAN_REALTEK_DEFINE)
-#define rtw_is_legacy_channel_plan(chplan) ((chplan) < 0x20)
bool rtw_chplan_is_empty(u8 id);
+#define rtw_is_channel_plan_valid(chplan) (((chplan) < RTW_CHPLAN_MAX || (chplan) == RTW_CHPLAN_REALTEK_DEFINE) && !rtw_chplan_is_empty(chplan))
+#define rtw_is_legacy_channel_plan(chplan) ((chplan) < 0x20)
typedef struct _RT_CHANNEL_PLAN
{
@@ -344,6 +347,8 @@ struct ss_res {
u16 scan_ch_ms;
u8 rx_ampdu_accept;
u8 rx_ampdu_size;
+ u8 igi_scan;
+ u8 igi_before_scan; /* used for restoring IGI value without enable DIG & FA_CNT */
#ifdef CONFIG_SCAN_BACKOP
u8 backop_flags_sta; /* policy for station mode*/
u8 backop_flags_ap; /* policy for ap mode */
@@ -384,27 +389,24 @@ struct ss_res {
#ifdef CONFIG_TDLS
enum TDLS_option
{
- TDLS_ESTABLISHED = 1,
- TDLS_ISSUE_PTI = 2,
- TDLS_CH_SW_RESP = 3,
- TDLS_CH_SW = 4,
- TDLS_CH_SW_BACK = 5,
- TDLS_RS_RCR = 6,
- TDLS_TEAR_STA = 7,
+ TDLS_ESTABLISHED = 1,
+ TDLS_ISSUE_PTI,
+ TDLS_CH_SW_RESP,
+ TDLS_CH_SW_PREPARE,
+ TDLS_CH_SW_START,
+ TDLS_CH_SW_TO_OFF_CHNL,
+ TDLS_CH_SW_TO_BASE_CHNL_UNSOLICITED,
+ TDLS_CH_SW_TO_BASE_CHNL,
+ TDLS_CH_SW_END_TO_BASE_CHNL,
+ TDLS_CH_SW_END,
+ TDLS_RS_RCR,
+ TDLS_TEARDOWN_STA,
+ TDLS_TEARDOWN_STA_LOCALLY,
maxTDLS,
};
#endif //CONFIG_TDLS
-struct FW_Sta_Info
-{
- struct sta_info *psta;
- u32 status;
- u32 rx_pkt;
- u32 retry;
- NDIS_802_11_RATES_EX SupportedRates;
-};
-
/*
* Usage:
* When one iface acted as AP mode and the other iface is STA mode and scanning,
@@ -475,7 +477,6 @@ struct mlme_ext_info
struct HT_caps_element HT_caps;
struct HT_info_element HT_info;
WLAN_BSSID_EX network;//join network or bss_network, if in ap mode, it is the same to cur_network.network
- struct FW_Sta_Info FW_sta_info[NUM_STA];
};
// The channel information about this channel including joining, scanning, and power constraints.
@@ -525,6 +526,8 @@ enum {
RTW_CHF_NON_LONG_CAC = BIT5,
};
bool rtw_choose_available_chbw(_adapter *adapter, u8 req_bw, u8 *dec_ch, u8 *dec_bw, u8 *dec_offset, u8 d_flags);
+void dump_country_chplan(void *sel, const struct country_chplan *ent);
+void dump_country_chplan_map(void *sel);
void dump_chplan_id_list(void *sel);
void dump_chplan_test(void *sel);
void dump_chset(void *sel, RT_CHANNEL_INFO *ch_set);
@@ -748,8 +751,6 @@ void clear_cam_cache(_adapter *adapter, u8 id);
void invalidate_cam_all(_adapter *padapter);
void CAM_empty_entry(PADAPTER Adapter, u8 ucIndex);
-
-int allocate_fw_sta_entry(_adapter *padapter);
void flush_all_cam_entry(_adapter *padapter);
BOOLEAN IsLegal5GChannel(PADAPTER Adapter, u8 channel);
@@ -795,7 +796,7 @@ void update_capinfo(PADAPTER Adapter, u16 updateCap);
void update_wireless_mode(_adapter * padapter);
void update_tx_basic_rate(_adapter *padapter, u8 modulation);
void update_sta_basic_rate(struct sta_info *psta, u8 wireless_mode);
-int update_sta_support_rate(_adapter *padapter, u8* pvar_ie, uint var_ie_len, int cam_idx);
+int rtw_ies_get_supported_rate(u8 *ies, uint ies_len, u8 *rate_set, u8 *rate_num);
//for sta/adhoc mode
void update_sta_info(_adapter *padapter, struct sta_info *psta);
@@ -805,7 +806,7 @@ unsigned int update_MCS_rate(struct HT_caps_element *pHT_caps);
void Update_RA_Entry(_adapter *padapter, struct sta_info *psta);
void set_sta_rate(_adapter *padapter, struct sta_info *psta);
-unsigned int receive_disconnect(_adapter *padapter, unsigned char *MacAddr, unsigned short reason);
+unsigned int receive_disconnect(_adapter *padapter, unsigned char *MacAddr, unsigned short reason, u8 locally_generated);
unsigned char get_highest_rate_idx(u32 mask);
int support_short_GI(_adapter *padapter, struct HT_caps_element *pHT_caps, u8 bwmode);
@@ -846,11 +847,11 @@ void rtw_macid_ctl_set_h2c_msr(struct macid_ctl_t *macid_ctl, u8 id, u8 h2c_msr)
void rtw_macid_ctl_init(struct macid_ctl_t *macid_ctl);
void rtw_macid_ctl_deinit(struct macid_ctl_t *macid_ctl);
-void report_join_res(_adapter *padapter, int res);
+u32 report_join_res(_adapter *padapter, int res);
void report_survey_event(_adapter *padapter, union recv_frame *precv_frame);
void report_surveydone_event(_adapter *padapter);
-void report_del_sta_event(_adapter *padapter, unsigned char *MacAddr, unsigned short reason, bool enqueue);
-void report_add_sta_event(_adapter *padapter, unsigned char* MacAddr, int cam_idx);
+u32 report_del_sta_event(_adapter *padapter, unsigned char *MacAddr, unsigned short reason, bool enqueue, u8 locally_generated);
+void report_add_sta_event(_adapter *padapter, unsigned char *MacAddr);
bool rtw_port_switch_chk(_adapter *adapter);
void report_wmm_edca_update(_adapter *padapter);
@@ -865,6 +866,7 @@ void update_mgntframe_attrib_addr(_adapter *padapter, struct xmit_frame *pmgntfr
void dump_mgntframe(_adapter *padapter, struct xmit_frame *pmgntframe);
s32 dump_mgntframe_and_wait(_adapter *padapter, struct xmit_frame *pmgntframe, int timeout_ms);
s32 dump_mgntframe_and_wait_ack(_adapter *padapter, struct xmit_frame *pmgntframe);
+s32 dump_mgntframe_and_wait_ack_timeout(_adapter *padapter, struct xmit_frame *pmgntframe, int timeout_ms);
#ifdef CONFIG_P2P
void issue_probersp_p2p(_adapter *padapter, unsigned char *da);
@@ -890,6 +892,7 @@ int issue_deauth_ex(_adapter *padapter, u8 *da, unsigned short reason, int try_c
void issue_action_spct_ch_switch(_adapter *padapter, u8 *ra, u8 new_ch, u8 ch_offset);
void issue_addba_req(_adapter *adapter, unsigned char *ra, u8 tid);
void issue_addba_rsp(_adapter *adapter, unsigned char *ra, u8 tid, u16 status, u8 size);
+u8 issue_addba_rsp_wait_ack(_adapter *adapter, unsigned char *ra, u8 tid, u16 status, u8 size, int try_cnt, int wait_ms);
void issue_del_ba(_adapter *adapter, unsigned char *ra, u8 tid, u16 reason, u8 initiator);
int issue_del_ba_ex(_adapter *adapter, unsigned char *ra, u8 tid, u16 reason, u8 initiator, int try_cnt, int wait_ms);
@@ -1037,6 +1040,7 @@ u8 set_stakey_hdl(_adapter *padapter, u8 *pbuf);
u8 set_assocsta_hdl(_adapter *padapter, u8 *pbuf);
u8 del_assocsta_hdl(_adapter *padapter, u8 *pbuf);
u8 add_ba_hdl(_adapter *padapter, unsigned char *pbuf);
+u8 add_ba_rsp_hdl(_adapter *padapter, unsigned char *pbuf);
u8 mlme_evt_hdl(_adapter *padapter, unsigned char *pbuf);
u8 h2c_msg_hdl(_adapter *padapter, unsigned char *pbuf);
@@ -1125,6 +1129,7 @@ struct cmd_hdl wlancmds[] =
GEN_MLME_EXT_HANDLER(sizeof(struct TDLSoption_param), tdls_hdl) /*62*/
GEN_MLME_EXT_HANDLER(0, chk_bmc_sleepq_hdl) /*63*/
GEN_MLME_EXT_HANDLER(sizeof(struct RunInThread_param), run_in_thread_hdl) /*64*/
+ GEN_MLME_EXT_HANDLER(sizeof(struct addBaRsp_parm), add_ba_rsp_hdl) /* 65 */
};
#endif
diff --git a/rtl8188FU/include/rtw_mp.h b/rtl8188FU/include/rtw_mp.h
index 660aeed..ded281a 100755
--- a/rtl8188FU/include/rtw_mp.h
+++ b/rtl8188FU/include/rtw_mp.h
@@ -140,6 +140,45 @@ struct mp_tx
#define ULONG u32
#define PULONG u32*
+typedef struct _RT_PMAC_PKT_INFO {
+ UCHAR MCS;
+ UCHAR Nss;
+ UCHAR Nsts;
+ UINT N_sym;
+ UCHAR SIGA2B3;
+} RT_PMAC_PKT_INFO, *PRT_PMAC_PKT_INFO;
+
+typedef struct _RT_PMAC_TX_INFO {
+ u8 bEnPMacTx:1; /* 0: Disable PMac 1: Enable PMac */
+ u8 Mode:3; /* 0: Packet TX 3:Continuous TX */
+ u8 Ntx:4; /* 0-7 */
+ u8 TX_RATE; /* MPT_RATE_E */
+ u8 TX_RATE_HEX;
+ u8 TX_SC;
+ u8 bSGI:1;
+ u8 bSPreamble:1;
+ u8 bSTBC:1;
+ u8 bLDPC:1;
+ u8 NDP_sound:1;
+ u8 BandWidth:3; /* 0: 20 1:40 2:80Mhz */
+ u8 m_STBC; /* bSTBC + 1 */
+ USHORT PacketPeriod;
+ UINT PacketCount;
+ UINT PacketLength;
+ u8 PacketPattern;
+ USHORT SFD;
+ u8 SignalField;
+ u8 ServiceField;
+ USHORT LENGTH;
+ u8 CRC16[2];
+ u8 LSIG[3];
+ u8 HT_SIG[6];
+ u8 VHT_SIG_A[6];
+ u8 VHT_SIG_B[4];
+ u8 VHT_SIG_B_CRC;
+ u8 VHT_Delimiter[4];
+ u8 MacAddress[6];
+} RT_PMAC_TX_INFO, *PRT_PMAC_TX_INFO;
typedef VOID (*MPT_WORK_ITEM_HANDLER)(IN PVOID Adapter);
@@ -244,7 +283,12 @@ typedef struct _MPT_CONTEXT
u1Byte btInBuf[100];
ULONG mptOutLen;
u1Byte mptOutBuf[100];
-
+ RT_PMAC_TX_INFO PMacTxInfo;
+ RT_PMAC_PKT_INFO PMacPktInfo;
+ u8 HWTxmode;
+
+ BOOLEAN bldpc;
+ BOOLEAN bstbc;
}MPT_CONTEXT, *PMPT_CONTEXT;
//#endif
@@ -318,6 +362,7 @@ enum {
EFUSE_FILE,
MP_TX,
MP_RX,
+ MP_HW_TX_MODE,
#ifdef CONFIG_WOWLAN
MP_WOW_ENABLE,
MP_WOW_SET_PATTERN,
@@ -349,6 +394,7 @@ struct mp_priv
u8 TID;
u32 tx_pktcount;
u32 pktInterval;
+ u32 pktLength;
struct mp_tx tx;
//Rx Section
@@ -418,6 +464,7 @@ struct mp_priv
BOOLEAN bSetRxBssid;
BOOLEAN bTxBufCkFail;
BOOLEAN bRTWSmbCfg;
+ BOOLEAN bloopback;
MPT_CONTEXT MptCtx;
u8 *TXradomBuffer;
@@ -495,6 +542,16 @@ typedef enum _MP_MODE_ {
MP_PACKET_RX
} MP_MODE;
+typedef enum _TEST_MODE {
+ TEST_NONE ,
+ PACKETS_TX ,
+ PACKETS_RX ,
+ CONTINUOUS_TX ,
+ OFDM_Single_Tone_TX ,
+ CCK_Carrier_Suppression_TX
+} TEST_MODE;
+
+
typedef enum _MPT_BANDWIDTH {
MPT_BW_20MHZ = 0,
MPT_BW_40MHZ_DUPLICATE = 1,
@@ -519,7 +576,7 @@ extern u8 mpdatarate[NumRates];
typedef enum _MPT_RATE_INDEX
{
/* CCK rate. */
- MPT_RATE_1M =0 , /* 0 */
+ MPT_RATE_1M = 1 , /* 0 */
MPT_RATE_2M,
MPT_RATE_55M,
MPT_RATE_11M, /* 3 */
@@ -568,7 +625,7 @@ typedef enum _MPT_RATE_INDEX
MPT_RATE_MCS30, // #42
MPT_RATE_MCS31, // #43
/* VHT rate. Total: 20*/
- MPT_RATE_VHT1SS_MCS0,// #44
+ MPT_RATE_VHT1SS_MCS0 = 100,/* #44*/
MPT_RATE_VHT1SS_MCS1, // #
MPT_RATE_VHT1SS_MCS2,
MPT_RATE_VHT1SS_MCS3,
@@ -613,6 +670,27 @@ typedef enum _MPT_RATE_INDEX
#define MAX_TX_PWR_INDEX_N_MODE 64 // 0x3F
+#define MPT_IS_CCK_RATE(_value) (MPT_RATE_1M <= _value && _value <= MPT_RATE_11M)
+#define MPT_IS_OFDM_RATE(_value) (MPT_RATE_6M <= _value && _value <= MPT_RATE_54M)
+#define MPT_IS_HT_RATE(_value) (MPT_RATE_MCS0 <= _value && _value <= MPT_RATE_MCS31)
+#define MPT_IS_HT_1S_RATE(_value) (MPT_RATE_MCS0 <= _value && _value <= MPT_RATE_MCS7)
+#define MPT_IS_HT_2S_RATE(_value) (MPT_RATE_MCS8 <= _value && _value <= MPT_RATE_MCS15)
+#define MPT_IS_HT_3S_RATE(_value) (MPT_RATE_MCS16 <= _value && _value <= MPT_RATE_MCS23)
+#define MPT_IS_HT_4S_RATE(_value) (MPT_RATE_MCS24 <= _value && _value <= MPT_RATE_MCS31)
+
+#define MPT_IS_VHT_RATE(_value) (MPT_RATE_VHT1SS_MCS0 <= _value && _value <= MPT_RATE_VHT4SS_MCS9)
+#define MPT_IS_VHT_1S_RATE(_value) (MPT_RATE_VHT1SS_MCS0 <= _value && _value <= MPT_RATE_VHT1SS_MCS9)
+#define MPT_IS_VHT_2S_RATE(_value) (MPT_RATE_VHT2SS_MCS0 <= _value && _value <= MPT_RATE_VHT2SS_MCS9)
+#define MPT_IS_VHT_3S_RATE(_value) (MPT_RATE_VHT3SS_MCS0 <= _value && _value <= MPT_RATE_VHT3SS_MCS9)
+#define MPT_IS_VHT_4S_RATE(_value) (MPT_RATE_VHT4SS_MCS0 <= _value && _value <= MPT_RATE_VHT4SS_MCS9)
+
+#define MPT_IS_2SS_RATE(_rate) ((MPT_RATE_MCS8 <= _rate && _rate <= MPT_RATE_MCS15) ||\
+ (MPT_RATE_VHT2SS_MCS0 <= _rate && _rate <= MPT_RATE_VHT2SS_MCS9))
+#define MPT_IS_3SS_RATE(_rate) ((MPT_RATE_MCS16 <= _rate && _rate <= MPT_RATE_MCS23) ||\
+ (MPT_RATE_VHT3SS_MCS0 <= _rate && _rate <= MPT_RATE_VHT3SS_MCS9))
+#define MPT_IS_4SS_RATE(_rate) ((MPT_RATE_MCS24 <= _rate && _rate <= MPT_RATE_MCS31) ||\
+ (MPT_RATE_VHT4SS_MCS0 <= _rate && _rate <= MPT_RATE_VHT4SS_MCS9))
+
typedef enum _POWER_MODE_ {
POWER_LOW = 0,
POWER_NORMAL
@@ -657,7 +735,7 @@ typedef enum _MPT_TXPWR_DEF{
MPT_VHT
}MPT_TXPWR_DEF;
-#ifdef CONFIG_RF_GAIN_OFFSET
+#ifdef CONFIG_RF_POWER_TRIM
#if defined(CONFIG_RTL8723B)
#define REG_RF_BB_GAIN_OFFSET 0x7f
@@ -670,8 +748,12 @@ typedef enum _MPT_TXPWR_DEF{
#define RF_GAIN_OFFSET_MASK 0xfffff
#endif //CONFIG_RTL8723B
-#endif //CONFIG_RF_GAIN_OFFSET
+#endif /*CONFIG_RF_POWER_TRIM*/
+#define IS_MPT_HT_RATE(_rate) (_rate >= MPT_RATE_MCS0 && _rate <= MPT_RATE_MCS31)
+#define IS_MPT_VHT_RATE(_rate) (_rate >= MPT_RATE_VHT1SS_MCS0 && _rate <= MPT_RATE_VHT4SS_MCS9)
+#define IS_MPT_CCK_RATE(_rate) (_rate >= MPT_RATE_1M && _rate <= MPT_RATE_11M)
+#define IS_MPT_OFDM_RATE(_rate) (_rate >= MPT_RATE_6M && _rate <= MPT_RATE_54M)
//=======================================================================
//extern struct mp_xmit_frame *alloc_mp_xmitframe(struct mp_priv *pmp_priv);
//extern int free_mp_xmitframe(struct xmit_priv *pxmitpriv, struct mp_xmit_frame *pmp_xmitframe);
@@ -738,6 +820,7 @@ void hal_mpt_SetSingleToneTx(PADAPTER pAdapter, u8 bStart);
void hal_mpt_SetCarrierSuppressionTx(PADAPTER pAdapter, u8 bStart);
void hal_mpt_SetCCKContinuousTx(PADAPTER pAdapter, u8 bStart);
void hal_mpt_SetOFDMContinuousTx(PADAPTER pAdapter, u8 bStart);
+void mpt_ProSetPMacTx(PADAPTER Adapter);
void MP_PHY_SetRFPathSwitch(PADAPTER pAdapter , BOOLEAN bMain);
ULONG mpt_ProQueryCalTxPower(PADAPTER pAdapter, u8 RfPath);
@@ -745,6 +828,44 @@ void MPT_PwrCtlDM(PADAPTER padapter, u32 bstart);
u8 MptToMgntRate(u32 MptRateIdx);
u8 rtw_mpRateParseFunc(PADAPTER pAdapter, u8 *targetStr);
u32 mp_join(PADAPTER padapter, u8 mode);
+u32 hal_mpt_query_phytxok(PADAPTER pAdapter);
+
+void
+PMAC_Get_Pkt_Param(
+ PRT_PMAC_TX_INFO pPMacTxInfo,
+ PRT_PMAC_PKT_INFO pPMacPktInfo
+ );
+void
+CCK_generator(
+ PRT_PMAC_TX_INFO pPMacTxInfo,
+ PRT_PMAC_PKT_INFO pPMacPktInfo
+ );
+void
+PMAC_Nsym_generator(
+ PRT_PMAC_TX_INFO pPMacTxInfo,
+ PRT_PMAC_PKT_INFO pPMacPktInfo
+ );
+void
+L_SIG_generator(
+ UINT N_SYM, /* Max: 750*/
+ PRT_PMAC_TX_INFO pPMacTxInfo,
+ PRT_PMAC_PKT_INFO pPMacPktInfo
+ );
+
+void HT_SIG_generator(
+ PRT_PMAC_TX_INFO pPMacTxInfo,
+ PRT_PMAC_PKT_INFO pPMacPktInfo);
+
+void VHT_SIG_A_generator(
+ PRT_PMAC_TX_INFO pPMacTxInfo,
+ PRT_PMAC_PKT_INFO pPMacPktInfo);
+
+void VHT_SIG_B_generator(
+ PRT_PMAC_TX_INFO pPMacTxInfo);
+
+void VHT_Delimiter_generator(
+ PRT_PMAC_TX_INFO pPMacTxInfo);
+
int rtw_mp_write_reg(struct net_device *dev,
struct iw_request_info *info,
@@ -826,7 +947,7 @@ int rtw_mp_phypara(struct net_device *dev,
struct iw_point *wrqu, char *extra);
int rtw_mp_SetRFPath(struct net_device *dev,
struct iw_request_info *info,
- union iwreq_data *wrqu, char *extra);
+ struct iw_point *wrqu, char *extra);
int rtw_mp_QueryDrv(struct net_device *dev,
struct iw_request_info *info,
union iwreq_data *wrqu, char *extra);
@@ -855,6 +976,10 @@ int rtw_mp_tx(struct net_device *dev,
int rtw_mp_rx(struct net_device *dev,
struct iw_request_info *info,
union iwreq_data *wrqu, char *extra);
+int rtw_mp_hwtx(struct net_device *dev,
+ struct iw_request_info *info,
+ union iwreq_data *wrqu, char *extra);
+u8 HwRateToMPTRate(u8 rate);
#endif //_RTW_MP_H_
diff --git a/rtl8188FU/include/rtw_odm.h b/rtl8188FU/include/rtw_odm.h
index 8c0faeb..8375fe1 100755
--- a/rtl8188FU/include/rtw_odm.h
+++ b/rtl8188FU/include/rtw_odm.h
@@ -34,6 +34,8 @@ void rtw_odm_dbg_level_set(_adapter *adapter, u32 level);
void rtw_odm_ability_msg(void *sel, _adapter *adapter);
void rtw_odm_ability_set(_adapter *adapter, u32 ability);
+void rtw_odm_init_ic_type(_adapter *adapter);
+
void rtw_odm_adaptivity_config_msg(void *sel, _adapter *adapter);
bool rtw_odm_adaptivity_needed(_adapter *adapter);
diff --git a/rtl8188FU/include/rtw_recv.h b/rtl8188FU/include/rtw_recv.h
index a2d7f9e..498e88a 100755
--- a/rtl8188FU/include/rtw_recv.h
+++ b/rtl8188FU/include/rtw_recv.h
@@ -103,6 +103,7 @@ struct recv_reorder_ctrl
u8 ampdu_size;
_queue pending_recvframe_queue;
_timer reordering_ctrl_timer;
+ u8 bReorderWaiting;
};
struct stainfo_rxcache {
diff --git a/rtl8188FU/include/rtw_rf.h b/rtl8188FU/include/rtw_rf.h
index e8e1bf1..d4dd6a2 100755
--- a/rtl8188FU/include/rtw_rf.h
+++ b/rtl8188FU/include/rtw_rf.h
@@ -207,7 +207,41 @@ int rtw_ch2freq(int chan);
int rtw_freq2ch(int freq);
bool rtw_chbw_to_freq_range(u8 ch, u8 bw, u8 offset, u32 *hi, u32 *lo);
-int rtw_get_chplan_from_country(const char *country_code);
+#define RTW_MODULE_RTL8821AE_HMC_M2 BIT0 /* RTL8821AE(HMC+M.2) */
+#define RTW_MODULE_RTL8821AU BIT1 /* RTL8821AU */
+#define RTW_MODULE_RTL8812AENF_NGFF BIT2 /* RTL8812AENF(8812AE+8761)_NGFF */
+#define RTW_MODULE_RTL8812AEBT_HMC BIT3 /* RTL8812AEBT(8812AE+8761)_HMC */
+#define RTW_MODULE_RTL8188EE_HMC_M2 BIT4 /* RTL8188EE(HMC+M.2) */
+#define RTW_MODULE_RTL8723BE_HMC_M2 BIT5 /* RTL8723BE(HMC+M.2) */
+#define RTW_MODULE_RTL8723BS_NGFF1216 BIT6 /* RTL8723BS(NGFF1216) */
+#define RTW_MODULE_RTL8192EEBT_HMC_M2 BIT7 /* RTL8192EEBT(8192EE+8761AU)_(HMC+M.2) */
+
+#define IS_ALPHA2_NO_SPECIFIED(_alpha2) ((*((u16 *)(_alpha2))) == 0xFFFF)
+
+struct country_chplan {
+ char alpha2[2];
+ u8 chplan;
+#ifdef CONFIG_80211AC_VHT
+ u8 en_11ac;
+#endif
+#if RTW_DEF_MODULE_REGULATORY_CERT
+ u8 def_module_flags; /* RTW_MODULE_RTLXXX */
+#endif
+};
+
+#ifdef CONFIG_80211AC_VHT
+#define COUNTRY_CHPLAN_EN_11AC(_ent) ((_ent)->en_11ac)
+#else
+#define COUNTRY_CHPLAN_EN_11AC(_ent) 0
+#endif
+
+#if RTW_DEF_MODULE_REGULATORY_CERT
+#define COUNTRY_CHPLAN_DEF_MODULE_FALGS(_ent) ((_ent)->def_module_flags)
+#else
+#define COUNTRY_CHPLAN_DEF_MODULE_FALGS(_ent) 0
+#endif
+
+const struct country_chplan *rtw_get_chplan_from_country(const char *country_code);
#define BB_GAIN_2G 0
#ifdef CONFIG_IEEE80211_BAND_5GHZ
diff --git a/rtl8188FU/include/rtw_tdls.h b/rtl8188FU/include/rtw_tdls.h
index ed54a99..8642e69 100755
--- a/rtl8188FU/include/rtw_tdls.h
+++ b/rtl8188FU/include/rtw_tdls.h
@@ -35,24 +35,34 @@
/* TDLS Check ALive */
#define TDLS_ALIVE_STATE BIT(20) /* 0x00100000 */ /* Check if peer sta is alived. */
/* TDLS Channel Switch */
-#define TDLS_CH_SWITCH_ON_STATE BIT(16) /* 0x00010000 */
-#define TDLS_PEER_AT_OFF_STATE BIT(17) /* 0x00020000 */ /* Could send pkt on target ch */
-#define TDLS_CH_SW_INITIATOR_STATE BIT(18) /* 0x00040000 */ /* Avoid duplicated or unconditional ch. switch rsp. */
-#define TDLS_WAIT_CH_RSP_STATE BIT(19) /* 0x00080000 */ /* Wait Ch. response as we are TDLS channel switch initiator */
+#define TDLS_CH_SWITCH_PREPARE_STATE BIT(15) /* 0x00008000 */
+#define TDLS_CH_SWITCH_ON_STATE BIT(16) /* 0x00010000 */
+#define TDLS_PEER_AT_OFF_STATE BIT(17) /* 0x00020000 */ /* Could send pkt on target ch */
+#define TDLS_CH_SW_INITIATOR_STATE BIT(18) /* 0x00040000 */ /* Avoid duplicated or unconditional ch. switch rsp. */
+#define TDLS_WAIT_CH_RSP_STATE BIT(19) /* 0x00080000 */ /* Wait Ch. response as we are TDLS channel switch initiator */
-#define TPK_RESEND_COUNT 1800 /*Unit: seconds */
-#define CH_SWITCH_TIME 5
-#define CH_SWITCH_TIMEOUT 20
+#define TDLS_TPK_RESEND_COUNT 86400 /*Unit: seconds */
+#define TDLS_CH_SWITCH_TIME 15
+#define TDLS_CH_SWITCH_TIMEOUT 30
+#define TDLS_CH_SWITCH_OPER_OFFLOAD_TIMEOUT 10
#define TDLS_SIGNAL_THRESH 0x20
#define TDLS_WATCHDOG_PERIOD 10 /* Periodically sending tdls discovery request in TDLS_WATCHDOG_PERIOD * 2 sec */
#define TDLS_HANDSHAKE_TIME 3000
#define TDLS_PTI_TIME 7000
+#define TDLS_CH_SW_STAY_ON_BASE_CHNL_TIMEOUT 20 /* ms */
+#define TDLS_CH_SW_MONITOR_TIMEOUT 2000 /*ms */
+
#define TDLS_MIC_LEN 16
#define WPA_NONCE_LEN 32
#define TDLS_TIMEOUT_LEN 4
+enum TDLS_CH_SW_CHNL{
+ TDLS_CH_SW_BASE_CHNL = 0,
+ TDLS_CH_SW_OFF_CHNL
+};
+
struct wpa_tdls_ftie {
u8 ie_type; /* FTIE */
u8 ie_len;
@@ -92,6 +102,12 @@ static u8 TDLS_SRC[] = { 0x01, 0x01, 0x02, 0x03, 0x04, 0x0c, 0x16, 0x17, 0x18, 0
int check_ap_tdls_prohibited(u8 *pframe, u8 pkt_len);
int check_ap_tdls_ch_switching_prohibited(u8 *pframe, u8 pkt_len);
+
+u8 rtw_tdls_is_setup_allowed(_adapter *padapter);
+#ifdef CONFIG_TDLS_CH_SW
+u8 rtw_tdls_is_chsw_allowed(_adapter *padapter);
+#endif
+
void rtw_reset_tdls_info(_adapter* padapter);
int rtw_init_tdls_info(_adapter* padapter);
void rtw_free_tdls_info(struct tdls_info *ptdlsinfo);
@@ -99,6 +115,14 @@ int issue_nulldata_to_TDLS_peer_STA(_adapter *padapter, unsigned char *da, unsig
void rtw_init_tdls_timer(_adapter *padapter, struct sta_info *psta);
void rtw_free_tdls_timer(struct sta_info *psta);
void free_tdls_sta(_adapter *padapter, struct sta_info *ptdls_sta);
+
+#ifdef CONFIG_TDLS_CH_SW
+void rtw_tdls_set_ch_sw_oper_control(_adapter *padapter, u8 enable);
+void rtw_tdls_ch_sw_back_to_base_chnl(_adapter *padapter);
+s32 rtw_tdls_do_ch_sw(_adapter *padapter, struct sta_info *ptdls_sta, u8 chnl_type, u8 channel, u8 channel_offset, u16 bwmode, u16 ch_switch_time);
+void rtw_tdls_chsw_oper_done(_adapter* padapter);
+#endif
+
#ifdef CONFIG_WFD
int issue_tunneled_probe_req(_adapter *padapter);
int issue_tunneled_probe_rsp(_adapter *padapter, union recv_frame *precv_frame);
@@ -111,8 +135,10 @@ int issue_tdls_dis_rsp(_adapter * padapter, struct tdls_txmgmt *ptxmgmt, u8 priv
int issue_tdls_teardown(_adapter *padapter, struct tdls_txmgmt *ptxmgmt, u8 wait_ack);
int issue_tdls_peer_traffic_rsp(_adapter *padapter, struct sta_info *psta, struct tdls_txmgmt *ptxmgmt);
int issue_tdls_peer_traffic_indication(_adapter *padapter, struct sta_info *psta);
+#ifdef CONFIG_TDLS_CH_SW
int issue_tdls_ch_switch_req(_adapter *padapter, struct sta_info *ptdls_sta);
int issue_tdls_ch_switch_rsp(_adapter *padapter, struct tdls_txmgmt *ptxmgmt, int wait_ack);
+#endif
sint On_TDLS_Dis_Rsp(_adapter *adapter, union recv_frame *precv_frame);
sint On_TDLS_Setup_Req(_adapter *adapter, union recv_frame *precv_frame);
int On_TDLS_Setup_Rsp(_adapter *adapter, union recv_frame *precv_frame);
diff --git a/rtl8188FU/include/rtw_version.h b/rtl8188FU/include/rtw_version.h
index b7314cc..41d5eff 100755
--- a/rtl8188FU/include/rtw_version.h
+++ b/rtl8188FU/include/rtw_version.h
@@ -1 +1 @@
-#define DRIVERVERSION "v4.3.23_15345.20150930_beta"
+#define DRIVERVERSION "v4.3.23.4_19019.20160811"
diff --git a/rtl8188FU/include/sta_info.h b/rtl8188FU/include/sta_info.h
index 5f26e9e..7cd5e61 100755
--- a/rtl8188FU/include/sta_info.h
+++ b/rtl8188FU/include/sta_info.h
@@ -242,7 +242,7 @@ struct sta_info {
u8 SNonce[32];
u8 ANonce[32];
u32 TDLS_PeerKey_Lifetime;
- u16 TPK_count;
+ u32 TPK_count;
_timer TPK_timer;
struct TDLS_PeerKey tpk;
#ifdef CONFIG_TDLS_CH_SW
@@ -251,6 +251,8 @@ struct sta_info {
//u8 option;
_timer ch_sw_timer;
_timer delay_timer;
+ _timer stay_on_base_chnl_timer;
+ _timer ch_sw_monitor_timer;
#endif
_timer handshake_timer;
u8 alive_count;
@@ -285,13 +287,14 @@ struct sta_info {
//AP_Mode:
//curr_network(mlme_priv/security_priv/qos/ht) : AP CAP/INFO
//sta_info: (AP & STA) CAP/INFO
-
+
+ unsigned int expire_to;
+
#ifdef CONFIG_AP_MODE
_list asoc_list;
_list auth_list;
-
- unsigned int expire_to;
+
unsigned int auth_seq;
unsigned int authalg;
unsigned char chg_txt[128];
@@ -517,7 +520,8 @@ struct sta_priv {
_queue wakeup_q;
_adapter *padapter;
-
+
+ u32 adhoc_expire_to;
#ifdef CONFIG_AP_MODE
_list asoc_list;
@@ -552,7 +556,7 @@ struct sta_priv {
};
-__inline static u32 wifi_mac_hash(u8 *mac)
+static inline u32 wifi_mac_hash(const u8 *mac)
{
u32 x;
@@ -577,10 +581,10 @@ extern u32 _rtw_free_sta_priv(struct sta_priv *pstapriv);
int rtw_stainfo_offset(struct sta_priv *stapriv, struct sta_info *sta);
struct sta_info *rtw_get_stainfo_by_offset(struct sta_priv *stapriv, int offset);
-extern struct sta_info *rtw_alloc_stainfo(struct sta_priv *pstapriv, u8 *hwaddr);
+extern struct sta_info *rtw_alloc_stainfo(struct sta_priv *pstapriv, const u8 *hwaddr);
extern u32 rtw_free_stainfo(_adapter *padapter , struct sta_info *psta);
extern void rtw_free_all_stainfo(_adapter *padapter);
-extern struct sta_info *rtw_get_stainfo(struct sta_priv *pstapriv, u8 *hwaddr);
+extern struct sta_info *rtw_get_stainfo(struct sta_priv *pstapriv, const u8 *hwaddr);
extern u32 rtw_init_bcmc_stainfo(_adapter* padapter);
extern struct sta_info* rtw_get_bcmc_stainfo(_adapter* padapter);
extern u8 rtw_access_ctrl(_adapter *padapter, u8 *mac_addr);
diff --git a/rtl8188FU/os_dep/linux/ioctl_cfg80211.c b/rtl8188FU/os_dep/linux/ioctl_cfg80211.c
index 3d1e8b4..6aa374b 100755
--- a/rtl8188FU/os_dep/linux/ioctl_cfg80211.c
+++ b/rtl8188FU/os_dep/linux/ioctl_cfg80211.c
@@ -828,7 +828,7 @@ check_bss:
}
}
-void rtw_cfg80211_indicate_disconnect(_adapter *padapter)
+void rtw_cfg80211_indicate_disconnect(_adapter *padapter, u16 reason, u8 locally_generated)
{
struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
struct wireless_dev *pwdev = padapter->rtw_wdev;
@@ -838,6 +838,11 @@ void rtw_cfg80211_indicate_disconnect(_adapter *padapter)
DBG_871X(FUNC_ADPT_FMT"\n", FUNC_ADPT_ARG(padapter));
+ /*always replace privated definitions with wifi reserved value 0*/
+ if ((reason == WLAN_REASON_ACTIVE_ROAM) || (reason == WLAN_REASON_JOIN_WRONG_CHANNEL) || (reason == WLAN_REASON_EXPIRATION_CHK)) {
+ reason = 0;
+ }
+
if (pwdev->iftype != NL80211_IFTYPE_STATION
#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) || defined(COMPAT_KERNEL_RELEASE)
&& pwdev->iftype != NL80211_IFTYPE_P2P_CLIENT
@@ -866,15 +871,24 @@ void rtw_cfg80211_indicate_disconnect(_adapter *padapter)
}
#endif //CONFIG_P2P
+ #ifdef SUPPLICANT_RTK_VERSION_LOWER_THAN_JB42
if (!padapter->mlmepriv.not_indic_disco || padapter->ndev_unregistering) {
+ #else
+ {
+ #endif
#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 11, 0) || defined(COMPAT_KERNEL_RELEASE)
DBG_8192C("pwdev->sme_state(b)=%d\n", pwdev->sme_state);
if(pwdev->sme_state==CFG80211_SME_CONNECTING)
cfg80211_connect_result(padapter->pnetdev, NULL, NULL, 0, NULL, 0,
WLAN_STATUS_UNSPECIFIED_FAILURE, GFP_ATOMIC/*GFP_KERNEL*/);
- else if(pwdev->sme_state==CFG80211_SME_CONNECTED)
+ else if (pwdev->sme_state == CFG80211_SME_CONNECTED) {
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 2, 0))
+ cfg80211_disconnected(padapter->pnetdev, reason, NULL, 0, locally_generated, GFP_ATOMIC);
+#else
cfg80211_disconnected(padapter->pnetdev, 0, NULL, 0, GFP_ATOMIC);
+#endif
+ }
//else
//DBG_8192C("pwdev->sme_state=%d\n", pwdev->sme_state);
@@ -882,8 +896,13 @@ void rtw_cfg80211_indicate_disconnect(_adapter *padapter)
#else
if (check_fwstate(&padapter->mlmepriv, _FW_LINKED)) {
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 2, 0))
+ DBG_871X(FUNC_ADPT_FMT" call cfg80211_disconnected\n", FUNC_ADPT_ARG(padapter));
+ cfg80211_disconnected(padapter->pnetdev, reason, NULL, 0, locally_generated, GFP_ATOMIC);
+#else
DBG_871X(FUNC_ADPT_FMT" call cfg80211_disconnected\n", FUNC_ADPT_ARG(padapter));
cfg80211_disconnected(padapter->pnetdev, 0, NULL, 0, GFP_ATOMIC);
+#endif
} else {
DBG_871X(FUNC_ADPT_FMT" call cfg80211_connect_result\n", FUNC_ADPT_ARG(padapter));
cfg80211_connect_result(padapter->pnetdev, NULL, NULL, 0, NULL, 0,
@@ -2544,7 +2563,7 @@ if (padapter->registrypriv.mp_mode == 1)
}
_status = rtw_sitesurvey_cmd(padapter, ssid, RTW_SSID_SCAN_AMOUNT, ch, survey_times * request->n_channels);
} else {
- _status = rtw_sitesurvey_cmd(padapter, ssid, RTW_SSID_SCAN_AMOUNT, NULL, 0);
+ _status = rtw_sitesurvey_cmd(padapter, ssid, RTW_SSID_SCAN_AMOUNT, ch, request->n_channels);
}
_exit_critical_bh(&pmlmepriv->lock, &irqL);
@@ -3080,7 +3099,9 @@ static int cfg80211_rtw_leave_ibss(struct wiphy *wiphy, struct net_device *ndev)
DBG_871X(FUNC_NDEV_FMT"\n", FUNC_NDEV_ARG(ndev));
+ #ifdef SUPPLICANT_RTK_VERSION_LOWER_THAN_JB42
padapter->mlmepriv.not_indic_disco = _TRUE;
+ #endif
old_type = rtw_wdev->iftype;
@@ -3103,7 +3124,9 @@ static int cfg80211_rtw_leave_ibss(struct wiphy *wiphy, struct net_device *ndev)
}
leave_ibss:
+ #ifdef SUPPLICANT_RTK_VERSION_LOWER_THAN_JB42
padapter->mlmepriv.not_indic_disco = _FALSE;
+ #endif
return 0;
}
@@ -3127,7 +3150,9 @@ static int cfg80211_rtw_connect(struct wiphy *wiphy, struct net_device *ndev,
struct security_priv *psecuritypriv = &padapter->securitypriv;
_queue *queue = &pmlmepriv->scanned_queue;
+ #ifdef SUPPLICANT_RTK_VERSION_LOWER_THAN_JB42
padapter->mlmepriv.not_indic_disco = _TRUE;
+ #endif
DBG_871X("=>"FUNC_NDEV_FMT" - Start to Connection\n", FUNC_NDEV_ARG(ndev));
DBG_871X("privacy=%d, key=%p, key_len=%d, key_idx=%d, auth_type=%d\n",
@@ -3354,7 +3379,9 @@ exit:
DBG_8192C("<=%s, ret %d\n",__FUNCTION__, ret);
+ #ifdef SUPPLICANT_RTK_VERSION_LOWER_THAN_JB42
padapter->mlmepriv.not_indic_disco = _FALSE;
+ #endif
return ret;
}
@@ -3366,7 +3393,9 @@ static int cfg80211_rtw_disconnect(struct wiphy *wiphy, struct net_device *ndev,
DBG_871X(FUNC_NDEV_FMT" - Start to Disconnect\n", FUNC_NDEV_ARG(ndev));
+ #ifdef SUPPLICANT_RTK_VERSION_LOWER_THAN_JB42
padapter->mlmepriv.not_indic_disco = _TRUE;
+ #endif
rtw_set_to_roam(padapter, 0);
@@ -3375,16 +3404,18 @@ static int cfg80211_rtw_disconnect(struct wiphy *wiphy, struct net_device *ndev,
rtw_scan_abort(padapter);
LeaveAllPowerSaveMode(padapter);
rtw_disassoc_cmd(padapter, 500, _FALSE);
+ rtw_sta_mstatus_report(padapter);
- DBG_871X("%s...call rtw_indicate_disconnect\n", __FUNCTION__);
-
- rtw_indicate_disconnect(padapter);
+ DBG_871X("%s...call rtw_indicate_disconnect\n", __func__);
rtw_free_assoc_resources(padapter, 1);
+ rtw_indicate_disconnect(padapter, 0, _TRUE);
rtw_pwr_wakeup(padapter);
}
+ #ifdef SUPPLICANT_RTK_VERSION_LOWER_THAN_JB42
padapter->mlmepriv.not_indic_disco = _FALSE;
+ #endif
DBG_871X(FUNC_NDEV_FMT" return 0\n", FUNC_NDEV_ARG(ndev));
return 0;
@@ -3597,7 +3628,7 @@ void rtw_cfg80211_indicate_sta_assoc(_adapter *padapter, u8 *pmgmt_frame, uint f
else // WIFI_REASSOCREQ
ie_offset = _REASOCREQ_IE_OFFSET_;
- sinfo.filled = 0;
+ memset(&sinfo, 0, sizeof(sinfo));
sinfo.filled = STATION_INFO_ASSOC_REQ_IES;
sinfo.assoc_req_ies = pmgmt_frame + WLAN_HDR_A3_LEN + ie_offset;
sinfo.assoc_req_ies_len = frame_len - WLAN_HDR_A3_LEN - ie_offset;
@@ -3709,7 +3740,7 @@ static int rtw_cfg80211_monitor_if_xmit_entry(struct sk_buff *skb, struct net_de
u16 frame_ctl;
unsigned char src_mac_addr[6];
unsigned char dst_mac_addr[6];
- struct ieee80211_hdr *dot11_hdr;
+ struct rtw_ieee80211_hdr *dot11_hdr;
struct ieee80211_radiotap_header *rtap_hdr;
_adapter *padapter = (_adapter *)rtw_netdev_priv(ndev);
@@ -3738,16 +3769,16 @@ static int rtw_cfg80211_monitor_if_xmit_entry(struct sk_buff *skb, struct net_de
/* Skip the ratio tap header */
skb_pull(skb, rtap_len);
- dot11_hdr = (struct ieee80211_hdr *)skb->data;
- frame_ctl = le16_to_cpu(dot11_hdr->frame_control);
+ dot11_hdr = (struct rtw_ieee80211_hdr *)skb->data;
+ frame_ctl = le16_to_cpu(dot11_hdr->frame_ctl);
/* Check if the QoS bit is set */
if ((frame_ctl & RTW_IEEE80211_FCTL_FTYPE) == RTW_IEEE80211_FTYPE_DATA) {
/* Check if this ia a Wireless Distribution System (WDS) frame
* which has 4 MAC addresses
*/
- if (dot11_hdr->frame_control & 0x0080)
+ if (dot11_hdr->frame_ctl & 0x0080)
qos_len = 2;
- if ((dot11_hdr->frame_control & 0x0300) == 0x0300)
+ if ((dot11_hdr->frame_ctl & 0x0300) == 0x0300)
dot11_hdr_len += 6;
memcpy(dst_mac_addr, dot11_hdr->addr1, sizeof(dst_mac_addr));
@@ -4276,9 +4307,9 @@ static int cfg80211_rtw_add_station(struct wiphy *wiphy, struct net_device *ndev
DBG_871X(FUNC_NDEV_FMT"\n", FUNC_NDEV_ARG(ndev));
#ifdef CONFIG_TDLS
- psta = rtw_get_stainfo(pstapriv, mac);
+ psta = rtw_get_stainfo(pstapriv, (u8 *)mac);
if (psta == NULL) {
- psta = rtw_alloc_stainfo(pstapriv, mac);
+ psta = rtw_alloc_stainfo(pstapriv, (u8 *)mac);
if (psta ==NULL) {
DBG_871X("[%s] Alloc station for "MAC_FMT" fail\n", __FUNCTION__, MAC_ARG(mac));
ret =-EOPNOTSUPP;
@@ -5661,10 +5692,20 @@ exit:
#if defined(CONFIG_TDLS) && (LINUX_VERSION_CODE >= KERNEL_VERSION(3,2,0))
static int cfg80211_rtw_tdls_mgmt(struct wiphy *wiphy,
struct net_device *ndev,
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 16, 0))
+ const u8 *peer,
+#else
u8 *peer,
+#endif
u8 action_code,
u8 dialog_token,
u16 status_code,
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 15, 0))
+ u32 peer_capability,
+#endif
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 17, 0))
+ bool initiator,
+#endif
const u8 *buf,
size_t len)
{
@@ -5707,7 +5748,7 @@ static int cfg80211_rtw_tdls_mgmt(struct wiphy *wiphy,
int i=0;
for(;i < len; i++)
printk("%02x ", *(txmgmt.buf+i));
- DBG_871X("len:%d\n", txmgmt.len);
+ DBG_871X("len:%d\n", (u32)txmgmt.len);
}
#endif
@@ -5742,7 +5783,11 @@ discard:
static int cfg80211_rtw_tdls_oper(struct wiphy *wiphy,
struct net_device *ndev,
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 16, 0))
+ const u8 *peer,
+#else
u8 *peer,
+#endif
enum nl80211_tdls_operation oper)
{
_adapter *padapter = (_adapter *)rtw_netdev_priv(ndev);
@@ -5799,7 +5844,7 @@ static int cfg80211_rtw_tdls_oper(struct wiphy *wiphy,
break;
case NL80211_TDLS_ENABLE_LINK:
DBG_871X(FUNC_NDEV_FMT", NL80211_TDLS_ENABLE_LINK;mac:"MAC_FMT"\n", FUNC_NDEV_ARG(ndev), MAC_ARG(peer));
- ptdls_sta = rtw_get_stainfo(&(padapter->stapriv), peer);
+ ptdls_sta = rtw_get_stainfo(&(padapter->stapriv), (u8 *)peer);
if (ptdls_sta != NULL) {
ptdlsinfo->link_established = _TRUE;
ptdls_sta->tdls_sta_state |= TDLS_LINKED_STATE;
@@ -5809,9 +5854,9 @@ static int cfg80211_rtw_tdls_oper(struct wiphy *wiphy,
break;
case NL80211_TDLS_DISABLE_LINK:
DBG_871X(FUNC_NDEV_FMT", NL80211_TDLS_DISABLE_LINK;mac:"MAC_FMT"\n", FUNC_NDEV_ARG(ndev), MAC_ARG(peer));
- ptdls_sta = rtw_get_stainfo(&(padapter->stapriv), peer);
+ ptdls_sta = rtw_get_stainfo(&(padapter->stapriv), (u8 *)peer);
if (ptdls_sta != NULL) {
- rtw_tdls_cmd(padapter, peer, TDLS_TEAR_STA );
+ rtw_tdls_cmd(padapter, (u8 *)peer, TDLS_TEARDOWN_STA_LOCALLY);
}
break;
}
@@ -6033,16 +6078,15 @@ static int rtw_cfg80211_set_probe_resp_wpsp2pie(struct net_device *net, char *bu
#ifdef CONFIG_DEBUG_CFG80211
//printk("config_method in wpsie of probe_resp = 0x%x\n", be16_to_cpu(*puconfig_method));
#endif
-
- //if(check_fwstate(pmlmepriv, WIFI_AP_STATE) != _TRUE)
+
#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) || defined(COMPAT_KERNEL_RELEASE)
- if(wdev->iftype != NL80211_IFTYPE_P2P_GO) //for WIFI-DIRECT LOGO 4.2.2, AUTO GO can't set PUSH_BUTTON flags
- {
+ /* for WIFI-DIRECT LOGO 4.2.2, AUTO GO can't set PUSH_BUTTON flags */
+ if (wdev->iftype == NL80211_IFTYPE_P2P_GO) {
uconfig_method = WPS_CM_PUSH_BUTTON;
- uconfig_method = cpu_to_be16( uconfig_method );
-
- *puconfig_method |= uconfig_method;
- }
+ uconfig_method = cpu_to_be16(uconfig_method);
+
+ *puconfig_method &= ~uconfig_method;
+ }
#endif
}
@@ -6727,7 +6771,13 @@ void rtw_wdev_unregister(struct wireless_dev *wdev)
rtw_cfg80211_indicate_scan_done(adapter, _TRUE);
- #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 11, 0)) || defined(COMPAT_KERNEL_RELEASE)
+ #if (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 2, 0))
+ if (wdev->current_bss) {
+ u8 locally_generated = 1;
+ DBG_871X(FUNC_ADPT_FMT" clear current_bss by cfg80211_disconnected\n", FUNC_ADPT_ARG(adapter));
+ cfg80211_disconnected(adapter->pnetdev, 0, NULL, 0, locally_generated, GFP_ATOMIC);
+ }
+ #elif ((LINUX_VERSION_CODE >= KERNEL_VERSION(3, 11, 0)) && (LINUX_VERSION_CODE < KERNEL_VERSION(4, 2, 0))) || defined(COMPAT_KERNEL_RELEASE)
if (wdev->current_bss) {
DBG_871X(FUNC_ADPT_FMT" clear current_bss by cfg80211_disconnected\n", FUNC_ADPT_ARG(adapter));
cfg80211_disconnected(adapter->pnetdev, 0, NULL, 0, GFP_ATOMIC);
diff --git a/rtl8188FU/os_dep/linux/ioctl_cfg80211.h b/rtl8188FU/os_dep/linux/ioctl_cfg80211.h
index 9b483c6..6e6f88d 100755
--- a/rtl8188FU/os_dep/linux/ioctl_cfg80211.h
+++ b/rtl8188FU/os_dep/linux/ioctl_cfg80211.h
@@ -152,7 +152,7 @@ struct cfg80211_bss *rtw_cfg80211_inform_bss(_adapter *padapter, struct wlan_net
int rtw_cfg80211_check_bss(_adapter *padapter);
void rtw_cfg80211_ibss_indicate_connect(_adapter *padapter);
void rtw_cfg80211_indicate_connect(_adapter *padapter);
-void rtw_cfg80211_indicate_disconnect(_adapter *padapter);
+void rtw_cfg80211_indicate_disconnect(_adapter *padapter, u16 reason, u8 locally_generated);
void rtw_cfg80211_indicate_scan_done(_adapter *adapter, bool aborted);
u32 rtw_cfg80211_wait_scan_req_empty(_adapter *adapter, u32 timeout_ms);
diff --git a/rtl8188FU/os_dep/linux/ioctl_linux.c b/rtl8188FU/os_dep/linux/ioctl_linux.c
index 38cc38d..1e63df2 100755
--- a/rtl8188FU/os_dep/linux/ioctl_linux.c
+++ b/rtl8188FU/os_dep/linux/ioctl_linux.c
@@ -3831,7 +3831,7 @@ static int rtw_wx_set_auth(struct net_device *dev,
LeaveAllPowerSaveMode(padapter);
rtw_disassoc_cmd(padapter, 500, _FALSE);
DBG_871X("%s...call rtw_indicate_disconnect\n ",__FUNCTION__);
- rtw_indicate_disconnect(padapter);
+ rtw_indicate_disconnect(padapter, 0, _FALSE);
rtw_free_assoc_resources(padapter, 1);
}
#endif
@@ -7455,7 +7455,7 @@ static int rtw_dbg_port(struct net_device *dev,
break;
case 0x7a:
receive_disconnect(padapter, pmlmeinfo->network.MacAddress
- , WLAN_REASON_EXPIRATION_CHK);
+ , WLAN_REASON_EXPIRATION_CHK, _FALSE);
break;
case 0x7F:
switch(minor_cmd)
@@ -7706,9 +7706,8 @@ static int rtw_dbg_port(struct net_device *dev,
case 0x13: //set ampdu_enable
{
struct registry_priv *pregpriv = &padapter->registrypriv;
- // 0: disable, 0x1:enable (but wifi_spec should be 0), 0x2: force enable (don't care wifi_spec)
- if( pregpriv && extra_arg < 3 )
- {
+ /* 0: disable, 0x1:enable */
+ if (pregpriv && extra_arg < 2) {
pregpriv->ampdu_enable= extra_arg;
DBG_871X("set ampdu_enable=%d\n",pregpriv->ampdu_enable);
}
@@ -9534,7 +9533,7 @@ static bool rtw_wowlan_parser_pattern_cmd(u8 *input, char *pattern,
{
char *cp = NULL, *end = NULL;
size_t len = 0;
- int pos = 0, temp = 0, mask_pos = 0, res = 0;
+ int pos = 0, mask_pos = 0, res = 0;
u8 member[2] = {0};
cp = strchr(input, '=');
@@ -9561,16 +9560,16 @@ static bool rtw_wowlan_parser_pattern_cmd(u8 *input, char *pattern,
strcmp(input, "--") == 0)) {
/* skip this byte and leave mask bit unset */
} else {
+ u8 hex;
strncpy(member, input, len);
if (!rtw_check_pattern_valid(member, sizeof(member))) {
DBG_871X("%s:[ERROR] pattern is invalid!!\n",
__func__);
goto error;
}
- res = sscanf(member, "%02x", &temp);
- if (temp < 0 || temp > 256)
- goto error;
- pattern[pos] = temp;
+
+ res = sscanf(member, "%02hhx", &hex);
+ pattern[pos] = hex;
mask_pos = pos / 8;
if (bit_mask)
bit_mask[mask_pos] |= 1 << (pos % 8);
@@ -9653,11 +9652,9 @@ static int rtw_wowlan_set_pattern(struct net_device *dev,
&pwrpriv->patterns[index].len,
pwrpriv->patterns[index].mask);
- if (ret) {
+ if (ret == _TRUE) {
pwrpriv->wowlan_pattern_idx++;
pwrpriv->wowlan_pattern = _TRUE;
- } else {
- goto _rtw_wowlan_set_pattern_exit;
}
}
} else if (strncmp(input, "clean", 5) == 0) {
@@ -9776,7 +9773,7 @@ static int rtw_mp_efuse_get(struct net_device *dev,
u8 *rawdata = NULL;
char *pch, *ptmp, *token, *tmp[3]={0x00,0x00,0x00};
u16 i=0, j=0, mapLen=0, addr=0, cnts=0;
- u16 max_available_size=0, raw_cursize=0, raw_maxsize=0;
+ u16 max_available_len = 0, raw_cursize = 0, raw_maxsize = 0;
int err;
#ifdef CONFIG_IOL
u8 org_fw_iol = padapter->registrypriv.fw_iol;// 0:Disable, 1:enable, 2:by usb speed
@@ -9914,8 +9911,8 @@ static int rtw_mp_efuse_get(struct net_device *dev,
}
DBG_871X("%s: cnts=%d\n", __FUNCTION__, cnts);
- EFUSE_GetEfuseDefinition(padapter, EFUSE_WIFI, TYPE_EFUSE_MAP_LEN , (PVOID)&max_available_size, _FALSE);
- if ((addr+ cnts) > max_available_size)
+ EFUSE_GetEfuseDefinition(padapter, EFUSE_WIFI, TYPE_EFUSE_MAP_LEN , (PVOID)&max_available_len, _FALSE);
+ if ((addr + cnts) > max_available_len)
{
DBG_871X("%s: addr(0x%X)+cnts(%d) parameter error!\n", __FUNCTION__, addr, cnts);
err = -EINVAL;
@@ -10010,8 +10007,8 @@ static int rtw_mp_efuse_get(struct net_device *dev,
addr = hal_efuse_macaddr_offset(padapter);
cnts = 6;
- EFUSE_GetEfuseDefinition(padapter, EFUSE_WIFI, TYPE_AVAILABLE_EFUSE_BYTES_TOTAL, (PVOID)&max_available_size, _FALSE);
- if ((addr + cnts) > max_available_size) {
+ EFUSE_GetEfuseDefinition(padapter, EFUSE_WIFI, TYPE_EFUSE_MAP_LEN, (PVOID)&max_available_len, _FALSE);
+ if ((addr + cnts) > max_available_len) {
DBG_871X("%s: addr(0x%02x)+cnts(%d) parameter error!\n", __FUNCTION__, addr, cnts);
err = -EFAULT;
goto exit;
@@ -10073,9 +10070,8 @@ static int rtw_mp_efuse_get(struct net_device *dev,
cnts = 4;
- EFUSE_GetEfuseDefinition(padapter, EFUSE_WIFI, TYPE_AVAILABLE_EFUSE_BYTES_TOTAL, (PVOID)&max_available_size, _FALSE);
- if ((addr + cnts) > max_available_size)
- {
+ EFUSE_GetEfuseDefinition(padapter, EFUSE_WIFI, TYPE_EFUSE_MAP_LEN, (PVOID)&max_available_len, _FALSE);
+ if ((addr + cnts) > max_available_len) {
DBG_871X("%s: addr(0x%02x)+cnts(%d) parameter error!\n", __FUNCTION__, addr, cnts);
err = -EFAULT;
goto exit;
@@ -10100,15 +10096,16 @@ static int rtw_mp_efuse_get(struct net_device *dev,
}
}
// DBG_871X("}\n");
- }
- else if (strcmp(tmp[0], "ableraw") == 0)
- {
- efuse_GetCurrentSize(padapter,&raw_cursize);
- raw_maxsize = efuse_GetMaxSize(padapter);
- sprintf(extra, "[available raw size]= %d bytes", raw_maxsize-raw_cursize);
- }
- else if (strcmp(tmp[0], "btfmap") == 0)
- {
+ } else if (strcmp(tmp[0], "ableraw") == 0) {
+ efuse_GetCurrentSize(padapter, &raw_cursize);
+ raw_maxsize = efuse_GetMaxSize(padapter);
+ sprintf(extra, "[available raw size]= %d bytes\n", raw_maxsize - raw_cursize);
+ } else if (strcmp(tmp[0], "btableraw") == 0) {
+ efuse_bt_GetCurrentSize(padapter, &raw_cursize);
+ raw_maxsize = efuse_bt_GetMaxSize(padapter);
+ sprintf(extra, "[available raw size]= %d bytes\n", raw_maxsize - raw_cursize);
+ } else if (strcmp(tmp[0], "btfmap") == 0) {
+
BTEfuse_PowerSwitch(padapter,1,_TRUE);
mapLen = EFUSE_BT_MAX_MAP_LEN;
@@ -10197,9 +10194,8 @@ static int rtw_mp_efuse_get(struct net_device *dev,
}
DBG_871X("%s: cnts=%d\n", __FUNCTION__, cnts);
- EFUSE_GetEfuseDefinition(padapter, EFUSE_BT, TYPE_AVAILABLE_EFUSE_BYTES_TOTAL, (PVOID)&max_available_size, _FALSE);
- if ((addr + cnts) > max_available_size)
- {
+ EFUSE_GetEfuseDefinition(padapter, EFUSE_BT, TYPE_EFUSE_MAP_LEN, (PVOID)&max_available_len, _FALSE);
+ if ((addr + cnts) > max_available_len) {
DBG_871X("%s: addr(0x%X)+cnts(%d) parameter error!\n", __FUNCTION__, addr, cnts);
err = -EFAULT;
goto exit;
@@ -10387,6 +10383,7 @@ static int rtw_mp_efuse_set(struct net_device *dev,
struct pwrctrl_priv *pwrctrlpriv ;
PHAL_DATA_TYPE pHalData;
PEFUSE_HAL pEfuseHal;
+ struct hal_ops *pHalFunc;
u8 ips_mode = IPS_NUM; // init invalid value
u8 lps_mode = PS_MODE_NUM; // init invalid value
@@ -10396,7 +10393,7 @@ static int rtw_mp_efuse_set(struct net_device *dev,
u8 *ShadowMapWiFi = NULL;
u8 *setrawdata = NULL;
char *pch, *ptmp, *token, *tmp[3]={0x00,0x00,0x00};
- u16 addr=0xFF, cnts=0, BTStatus=0 , max_available_size=0;
+ u16 addr = 0xFF, cnts = 0, BTStatus = 0 , max_available_len = 0;
int err;
wrqu = (struct iw_point*)wdata;
@@ -10404,6 +10401,8 @@ static int rtw_mp_efuse_set(struct net_device *dev,
pwrctrlpriv = adapter_to_pwrctl(padapter);
pHalData = GET_HAL_DATA(padapter);
pEfuseHal = &pHalData->EfuseHal;
+ pHalFunc = &padapter->HalFunc;
+
err = 0;
if (copy_from_user(extra, wrqu->pointer, wrqu->length))
@@ -10501,14 +10500,10 @@ static int rtw_mp_efuse_set(struct net_device *dev,
{
setdata[jj] = key_2char2num(tmp[2][kk], tmp[2][kk+1]);
}
-#ifndef CONFIG_RTL8188E
- EFUSE_GetEfuseDefinition(padapter, EFUSE_WIFI, TYPE_AVAILABLE_EFUSE_BYTES_TOTAL, (PVOID)&max_available_size, _FALSE);
-#else
- //Change to check TYPE_EFUSE_MAP_LEN ,beacuse 8188E raw 256,logic map over 256.
- EFUSE_GetEfuseDefinition(padapter, EFUSE_WIFI, TYPE_EFUSE_MAP_LEN, (PVOID)&max_available_size, _FALSE);
-#endif
- if ((addr+cnts) > max_available_size)
- {
+
+ EFUSE_GetEfuseDefinition(padapter, EFUSE_WIFI, TYPE_EFUSE_MAP_LEN, (PVOID)&max_available_len, _FALSE);
+
+ if ((addr + cnts) > max_available_len) {
DBG_871X("%s: addr(0x%X)+cnts(%d) parameter error!\n", __FUNCTION__, addr, cnts);
err = -EFAULT;
goto exit;
@@ -10623,14 +10618,10 @@ static int rtw_mp_efuse_set(struct net_device *dev,
{
setdata[jj] = key_2char2num(tmp[1][kk], tmp[1][kk+1]);
}
-#ifndef CONFIG_RTL8188E
- EFUSE_GetEfuseDefinition(padapter, EFUSE_WIFI, TYPE_AVAILABLE_EFUSE_BYTES_TOTAL, (PVOID)&max_available_size, _FALSE);
-#else
- //Change to check TYPE_EFUSE_MAP_LEN ,beacuse 8188E raw 256,logic map over 256.
- EFUSE_GetEfuseDefinition(padapter, EFUSE_WIFI, TYPE_EFUSE_MAP_LEN, (PVOID)&max_available_size, _FALSE);
-#endif
- if ((addr+cnts) > max_available_size)
- {
+
+ EFUSE_GetEfuseDefinition(padapter, EFUSE_WIFI, TYPE_EFUSE_MAP_LEN, (PVOID)&max_available_len, _FALSE);
+
+ if ((addr + cnts) > max_available_len) {
DBG_871X("%s: addr(0x%X)+cnts(%d) parameter error!\n", __FUNCTION__, addr, cnts);
err = -EFAULT;
goto exit;
@@ -10706,9 +10697,8 @@ static int rtw_mp_efuse_set(struct net_device *dev,
setdata[jj] = key_2char2num(tmp[1][kk], tmp[1][kk+1]);
}
- EFUSE_GetEfuseDefinition(padapter, EFUSE_WIFI, TYPE_AVAILABLE_EFUSE_BYTES_TOTAL, (PVOID)&max_available_size, _FALSE);
- if ((addr+cnts) > max_available_size)
- {
+ EFUSE_GetEfuseDefinition(padapter, EFUSE_WIFI, TYPE_EFUSE_MAP_LEN, (PVOID)&max_available_len, _FALSE);
+ if ((addr + cnts) > max_available_len) {
DBG_871X("%s: addr(0x%X)+cnts(%d) parameter error!\n", __FUNCTION__, addr, cnts);
err = -EFAULT;
goto exit;
@@ -10782,9 +10772,8 @@ static int rtw_mp_efuse_set(struct net_device *dev,
setdata[jj] = key_2char2num(tmp[2][kk], tmp[2][kk+1]);
}
- EFUSE_GetEfuseDefinition(padapter, EFUSE_BT, TYPE_AVAILABLE_EFUSE_BYTES_TOTAL, (PVOID)&max_available_size, _FALSE);
- if ((addr+cnts) > max_available_size)
- {
+ EFUSE_GetEfuseDefinition(padapter, EFUSE_BT, TYPE_EFUSE_MAP_LEN, (PVOID)&max_available_len, _FALSE);
+ if ((addr + cnts) > max_available_len) {
DBG_871X("%s: addr(0x%X)+cnts(%d) parameter error!\n", __FUNCTION__, addr, cnts);
err = -EFAULT;
goto exit;
@@ -10881,13 +10870,6 @@ static int rtw_mp_efuse_set(struct net_device *dev,
rtw_read8(padapter, EFUSE_CTRL);
_rtw_memcpy(pEfuseHal->BTEfuseModifiedMap, pEfuseHal->fakeBTEfuseModifiedMap, EFUSE_BT_MAX_MAP_LEN);
-
- EFUSE_GetEfuseDefinition(padapter, EFUSE_BT, TYPE_AVAILABLE_EFUSE_BYTES_TOTAL, (PVOID)&max_available_size, _FALSE);
- if (max_available_size < 1)
- {
- err = -EFAULT;
- goto exit;
- }
if (rtw_BT_efuse_map_write(padapter, 0x00, EFUSE_BT_MAX_MAP_LEN, pEfuseHal->fakeBTEfuseModifiedMap) == _FAIL)
{
@@ -10958,12 +10940,6 @@ static int rtw_mp_efuse_set(struct net_device *dev,
}
else if (strcmp(tmp[0], "wlfk2map") == 0)
{
- EFUSE_GetEfuseDefinition(padapter, EFUSE_WIFI, TYPE_AVAILABLE_EFUSE_BYTES_TOTAL, (PVOID)&max_available_size, _FALSE);
- if (max_available_size < 1)
- {
- err = -EFAULT;
- goto exit;
- }
if (rtw_efuse_map_write(padapter, 0x00, EFUSE_MAP_SIZE, pEfuseHal->fakeEfuseModifiedMap) == _FAIL)
{
DBG_871X("%s: rtw_efuse_map_write fakeEfuseModifiedMap error!\n", __FUNCTION__);
@@ -11024,6 +11000,25 @@ static int rtw_mp_efuse_set(struct net_device *dev,
}
_rtw_memset(extra, '\0', strlen(extra));
sprintf(extra, "wlwfake OK\n");
+ } else if(strcmp(tmp[0], "update") == 0) {
+ DBG_871X("To Use new eFuse map\n");
+ /*step read efuse/eeprom data and get mac_addr*/
+ rtw_hal_read_chip_info(padapter);
+ /* set mac addr*/
+ rtw_macaddr_cfg(adapter_mac_addr(padapter), get_hal_mac_addr(padapter));
+ _rtw_memcpy(padapter->pnetdev->dev_addr, get_hal_mac_addr(padapter), ETH_ALEN); /* set mac addr to net_device */
+
+#ifdef CONFIG_P2P
+ rtw_init_wifidirect_addrs(padapter, adapter_mac_addr(padapter), adapter_mac_addr(padapter));
+#endif
+ rtw_hal_set_hwreg(padapter, HW_VAR_MAC_ADDR, adapter_mac_addr(padapter)); /* set mac addr to mac register */
+ /*pHalFunc->hal_deinit(padapter);*/
+ if (pHalFunc->hal_init(padapter) == _FAIL) {
+ err = -EINVAL;
+ goto exit;
+ }
+ _rtw_memset(extra, '\0', strlen(extra));
+ sprintf(extra, "eFuse Update OK\n");
}
exit:
@@ -11224,29 +11219,6 @@ static int rtw_mp_set(struct net_device *dev,
switch(subcmd)
{
- case MP_START:
- DBG_871X("set case mp_start \n");
- rtw_mp_start (dev,info,wrqu,extra);
- break;
-
- case MP_STOP:
- DBG_871X("set case mp_stop \n");
- rtw_mp_stop (dev,info,wrqu,extra);
- break;
-
- case MP_BANDWIDTH:
- DBG_871X("set case mp_bandwidth \n");
- rtw_mp_bandwidth (dev,info,wrqu,extra);
- break;
-
- case MP_RESET_STATS:
- DBG_871X("set case MP_RESET_STATS \n");
- rtw_mp_reset_stats (dev,info,wrqu,extra);
- break;
- case MP_SetRFPathSwh:
- DBG_871X("set MP_SetRFPathSwitch \n");
- rtw_mp_SetRFPath (dev,info,wdata,extra);
- break;
case CTA_TEST:
DBG_871X("set CTA_TEST\n");
rtw_cta_test_start (dev, info, wdata, extra);
@@ -11310,6 +11282,31 @@ static int rtw_mp_get(struct net_device *dev,
}
switch (subcmd) {
+ case MP_START:
+ DBG_871X("set case mp_start \n");
+ rtw_mp_start (dev,info,wrqu,extra);
+ break;
+
+ case MP_STOP:
+ DBG_871X("set case mp_stop \n");
+ rtw_mp_stop (dev,info,wrqu,extra);
+ break;
+
+ case MP_BANDWIDTH:
+ DBG_871X("set case mp_bandwidth \n");
+ rtw_mp_bandwidth (dev,info,wrqu,extra);
+ break;
+
+ case MP_RESET_STATS:
+ DBG_871X("set case MP_RESET_STATS \n");
+ rtw_mp_reset_stats (dev,info,wrqu,extra);
+ break;
+
+ case MP_SetRFPathSwh:
+ DBG_871X("set MP_SetRFPathSwitch \n");
+ rtw_mp_SetRFPath (dev,info,wrqu,extra);
+ break;
+
case WRITE_REG:
rtw_mp_write_reg(dev, info, wrqu, extra);
break;
@@ -11432,6 +11429,10 @@ static int rtw_mp_get(struct net_device *dev,
DBG_871X("mp_get MP_RX\n");
rtw_mp_rx(dev, info, wdata, extra);
break;
+ case MP_HW_TX_MODE:
+ DBG_871X("mp_get MP_HW_TX_MODE\n");
+ rtw_mp_hwtx(dev, info, wdata, extra);
+ break;
#if defined(CONFIG_RTL8723B)
case MP_SetBT:
DBG_871X("set MP_SetBT\n");
@@ -11684,6 +11685,7 @@ static int rtw_tdls_ch_switch(struct net_device *dev,
union iwreq_data *wrqu, char *extra)
{
int ret = 0;
+ u8 tmp;
#ifdef CONFIG_TDLS
#ifdef CONFIG_TDLS_CH_SW
@@ -11691,12 +11693,13 @@ static int rtw_tdls_ch_switch(struct net_device *dev,
struct tdls_ch_switch *pchsw_info = &padapter->tdlsinfo.chsw_info;
u8 i, j;
struct sta_info *ptdls_sta = NULL;
+ u8 take_care_iqk;
DBG_8192C( "[%s] %s %d\n", __FUNCTION__, extra, wrqu->data.length -1 );
- if (padapter->tdlsinfo.ch_switch_prohibited == _TRUE)
+ if (rtw_tdls_is_chsw_allowed(padapter) == _FALSE)
{
- DBG_871X("Can't do TDLS channel switch since ch_switch_prohibited = _TRUE\n");
+ DBG_871X("TDLS channel switch is not allowed\n");
return ret;
}
@@ -11717,6 +11720,22 @@ static int rtw_tdls_ch_switch(struct net_device *dev,
DBG_871X( "TDLS peer not found\n");
}
+ rtw_pm_set_lps(padapter, PS_MODE_ACTIVE);
+
+ rtw_hal_get_hwreg(padapter, HW_VAR_CH_SW_NEED_TO_TAKE_CARE_IQK_INFO, &take_care_iqk);
+ if (take_care_iqk == _TRUE) {
+ u8 central_chnl;
+ u8 bw_mode;
+
+ bw_mode = (pchsw_info->ch_offset) ? CHANNEL_WIDTH_40 : CHANNEL_WIDTH_20;
+ central_chnl = rtw_get_center_ch(pchsw_info->off_ch_num, bw_mode, pchsw_info->ch_offset);
+ if (rtw_hal_ch_sw_iqk_info_search(padapter, central_chnl, bw_mode) >= 0)
+ rtw_tdls_cmd(padapter, ptdls_sta->hwaddr, TDLS_CH_SW_START);
+ else
+ rtw_tdls_cmd(padapter, ptdls_sta->hwaddr, TDLS_CH_SW_PREPARE);
+ }
+ else
+ rtw_tdls_cmd(padapter, ptdls_sta->hwaddr, TDLS_CH_SW_START);
//issue_tdls_ch_switch_req(padapter, ptdls_sta);
/* DBG_871X("issue tdls ch switch req\n"); */
@@ -11746,9 +11765,9 @@ static int rtw_tdls_ch_switch_off(struct net_device *dev,
DBG_871X( "[%s] %s %d\n", __FUNCTION__, extra, wrqu->data.length -1 );
- if (padapter->tdlsinfo.ch_switch_prohibited == _TRUE)
+ if (rtw_tdls_is_chsw_allowed(padapter) == _FALSE)
{
- DBG_871X("Can't do TDLS channel switch since ch_switch_prohibited = _TRUE\n");
+ DBG_871X("TDLS channel switch is not allowed\n");
return ret;
}
@@ -11758,23 +11777,24 @@ static int rtw_tdls_ch_switch_off(struct net_device *dev,
ptdls_sta = rtw_get_stainfo(&padapter->stapriv, mac_addr);
}
- if (padapter->mlmeextpriv.cur_channel != rtw_get_oper_ch(padapter)) {
- SelectChannel(padapter, padapter->mlmeextpriv.cur_channel);
- }
+ if (ptdls_sta == NULL)
+ return ret;
+
+ rtw_tdls_cmd(padapter, ptdls_sta->hwaddr, TDLS_CH_SW_END_TO_BASE_CHNL);
pchsw_info->ch_sw_state &= ~(TDLS_CH_SW_INITIATOR_STATE |
TDLS_CH_SWITCH_ON_STATE |
TDLS_PEER_AT_OFF_STATE);
- ATOMIC_SET(&pchsw_info->chsw_on, _FALSE);
_rtw_memset(pchsw_info->addr, 0x00, ETH_ALEN);
- if (ptdls_sta != NULL) {
- ptdls_sta->ch_switch_time = 0;
- ptdls_sta->ch_switch_timeout = 0;
- _cancel_timer_ex(&ptdls_sta->ch_sw_timer);
- _cancel_timer_ex(&ptdls_sta->delay_timer);
- }
+ ptdls_sta->ch_switch_time = 0;
+ ptdls_sta->ch_switch_timeout = 0;
+ _cancel_timer_ex(&ptdls_sta->ch_sw_timer);
+ _cancel_timer_ex(&ptdls_sta->delay_timer);
+ _cancel_timer_ex(&ptdls_sta->stay_on_base_chnl_timer);
+ _cancel_timer_ex(&ptdls_sta->ch_sw_monitor_timer);
+ rtw_pm_set_lps(padapter, PS_MODE_MAX);
#endif /* CONFIG_TDLS_CH_SW */
#endif /* CONFIG_TDLS */
@@ -11843,7 +11863,20 @@ static int rtw_tdls_ch_offset(struct net_device *dev,
DBG_8192C("[%s] ch_offset:%s\n", __FUNCTION__, extra);
extra[ wrqu->data.length ] = 0x00;
- ptdlsinfo->chsw_info.ch_offset = rtw_atoi( extra );
+ switch (rtw_atoi(extra))
+ {
+ case SCA:
+ ptdlsinfo->chsw_info.ch_offset = HAL_PRIME_CHNL_OFFSET_LOWER;
+ break;
+
+ case SCB:
+ ptdlsinfo->chsw_info.ch_offset = HAL_PRIME_CHNL_OFFSET_UPPER;
+ break;
+
+ default:
+ ptdlsinfo->chsw_info.ch_offset = HAL_PRIME_CHNL_OFFSET_DONT_CARE;
+ break;
+ }
return ret;
@@ -13221,13 +13254,13 @@ static const struct iw_priv_args rtw_private_args[] = {
{ SIOCIWFIRSTPRIV + 0x0E, IW_PRIV_TYPE_CHAR | 1024, 0 , ""}, //set
{ SIOCIWFIRSTPRIV + 0x0F, IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK , ""},//get
/* --- sub-ioctls definitions --- */
- { MP_START , IW_PRIV_TYPE_CHAR | 1024, 0, "mp_start" }, //set
+ { MP_START , IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, "mp_start" }, //set
{ MP_PHYPARA, IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, "mp_phypara" },//get
- { MP_STOP , IW_PRIV_TYPE_CHAR | 1024, 0, "mp_stop" }, //set
+ { MP_STOP , IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, "mp_stop" }, //set
{ MP_CHANNEL , IW_PRIV_TYPE_CHAR | 1024 , IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, "mp_channel" },//get
- { MP_BANDWIDTH , IW_PRIV_TYPE_CHAR | 1024, 0, "mp_bandwidth"}, //set
+ { MP_BANDWIDTH , IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, "mp_bandwidth"}, //set
{ MP_RATE , IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, "mp_rate" },//get
- { MP_RESET_STATS , IW_PRIV_TYPE_CHAR | 1024, 0, "mp_reset_stats"},
+ { MP_RESET_STATS , IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, "mp_reset_stats"},
{ MP_QUERY , IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK , "mp_query"}, //get
{ READ_REG , IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, "read_reg" },
{ MP_RATE , IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, "mp_rate" },
@@ -13244,10 +13277,10 @@ static const struct iw_priv_args rtw_private_args[] = {
{ MP_THER , IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, "mp_ther"},
{ EFUSE_SET, IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, "efuse_set" },
{ EFUSE_GET, IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, "efuse_get" },
- { MP_PWRTRK , IW_PRIV_TYPE_CHAR | 1024, 0, "mp_pwrtrk"},
+ { MP_PWRTRK , IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, "mp_pwrtrk"},
{ MP_QueryDrvStats, IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, "mp_drvquery" },
{ MP_IOCTL, IW_PRIV_TYPE_CHAR | 1024, 0, "mp_ioctl"}, // mp_ioctl
- { MP_SetRFPathSwh, IW_PRIV_TYPE_CHAR | 1024, 0, "mp_setrfpath" },
+ { MP_SetRFPathSwh, IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, "mp_setrfpath" },
{ MP_PwrCtlDM, IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, "mp_pwrctldm" },
{ MP_GET_TXPOWER_INX, IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, "mp_get_txpower" },
{ MP_GETVER, IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, "mp_priv_ver" },
@@ -13256,6 +13289,7 @@ static const struct iw_priv_args rtw_private_args[] = {
{ EFUSE_FILE, IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, "efuse_file" },
{ MP_TX, IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, "mp_tx" },
{ MP_RX, IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, "mp_rx" },
+ { MP_HW_TX_MODE, IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, "mp_hxtx" },
#if defined(CONFIG_RTL8723B)
{ MP_SetBT, IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, "mp_setbt" },
{ MP_DISABLE_BT_COEXIST, IW_PRIV_TYPE_CHAR | 1024, 0, "mp_disa_btcoex"},
diff --git a/rtl8188FU/os_dep/linux/ioctl_mp.c b/rtl8188FU/os_dep/linux/ioctl_mp.c
index 2e62bbf..a399795 100755
--- a/rtl8188FU/os_dep/linux/ioctl_mp.c
+++ b/rtl8188FU/os_dep/linux/ioctl_mp.c
@@ -364,6 +364,7 @@ int rtw_mp_start(struct net_device *dev,
struct iw_request_info *info,
struct iw_point *wrqu, char *extra)
{
+ int ret = 0;
u8 val8;
PADAPTER padapter = rtw_netdev_priv(dev);
HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);
@@ -372,45 +373,15 @@ int rtw_mp_start(struct net_device *dev,
rtw_pm_set_ips(padapter, IPS_NONE);
LeaveAllPowerSaveMode(padapter);
- if (padapter->registrypriv.mp_mode == 0) {
- rtw_hal_deinit(padapter);
- padapter->registrypriv.mp_mode = 1;
- #ifdef CONFIG_RF_GAIN_OFFSET
- if (!IS_HARDWARE_TYPE_8814A(padapter))
- padapter->registrypriv.RegRfKFreeEnable = 1;
- rtw_hal_read_chip_info(padapter);
- #endif /*CONFIG_RF_GAIN_OFFSET*/
- rtw_hal_init(padapter);
- }
-
- if (padapter->registrypriv.mp_mode == 0)
- return -EPERM;
-
- if (padapter->mppriv.mode == MP_OFF) {
- if (mp_start_test(padapter) == _FAIL)
- return -EPERM;
- padapter->mppriv.mode = MP_ON;
- MPT_PwrCtlDM(padapter, 0);
- }
- padapter->mppriv.bmac_filter = _FALSE;
-#ifdef CONFIG_RTL8723B
-#ifdef CONFIG_USB_HCI
- rtw_write32(padapter, 0x765, 0x0000);
- rtw_write32(padapter, 0x948, 0x0280);
-#else
- rtw_write32(padapter, 0x765, 0x0000);
- rtw_write32(padapter, 0x948, 0x0000);
-#endif
-#ifdef CONFIG_FOR_RTL8723BS_VQ0
- rtw_write32(padapter, 0x765, 0x0000);
- rtw_write32(padapter, 0x948, 0x0280);
-#endif
- rtw_write8(padapter, 0x66, 0x27); /*Open BT uart Log*/
- rtw_write8(padapter, 0xc50, 0x20); /*for RX init Gain*/
-#endif
- ODM_Write_DIG(&pHalData->odmpriv, 0x20);
+ if (rtw_mp_cmd(padapter, MP_START, RTW_CMDF_WAIT_ACK) != _SUCCESS)
+ ret = -EPERM;
+
- return 0;
+ _rtw_memset(extra, 0, wrqu->length);
+ sprintf(extra, "mp_start %s\n", ret == 0 ? "ok" : "fail");
+ wrqu->length = strlen(extra);
+
+ return ret;
}
@@ -419,23 +390,18 @@ int rtw_mp_stop(struct net_device *dev,
struct iw_request_info *info,
struct iw_point *wrqu, char *extra)
{
+ int ret = 0;
PADAPTER padapter = rtw_netdev_priv(dev);
struct hal_ops *pHalFunc = &padapter->HalFunc;
- if (padapter->registrypriv.mp_mode == 1) {
-
- MPT_DeInitAdapter(padapter);
- pHalFunc->hal_deinit(padapter);
- padapter->registrypriv.mp_mode = 0;
- pHalFunc->hal_init(padapter);
- }
+ if (rtw_mp_cmd(padapter, MP_STOP, RTW_CMDF_WAIT_ACK) != _SUCCESS)
+ ret = -EPERM;
- if (padapter->mppriv.mode != MP_OFF) {
- mp_stop_test(padapter);
- padapter->mppriv.mode = MP_OFF;
- }
+ _rtw_memset(extra, 0, wrqu->length);
+ sprintf(extra, "mp_stop %s\n", ret == 0 ? "ok" : "fail");
+ wrqu->length = strlen(extra);
- return 0;
+ return ret;
}
@@ -452,14 +418,16 @@ int rtw_mp_rate(struct net_device *dev,
return -EFAULT;
rate = rtw_mpRateParseFunc(padapter, input);
+ padapter->mppriv.rateidx = rate;
if (rate == 0 && strcmp(input, "1M") != 0) {
rate = rtw_atoi(input);
- if (rate <= 0x7f)
+ padapter->mppriv.rateidx = MRateToHwRate(rate);
+ /*if (rate <= 0x7f)
rate = wifirate2_ratetbl_inx((u8)rate);
else if (rate < 0xC8)
- rate = (rate - 0x80 + MPT_RATE_MCS0);
- /*HT rate 0x80(MCS0) ~ 0x8F(MCS15) ~ 0x9F(MCS31) 128~159
+ rate = (rate - 0x79 + MPT_RATE_MCS0);
+ HT rate 0x80(MCS0) ~ 0x8F(MCS15) ~ 0x9F(MCS31) 128~159
VHT1SS~2SS rate 0xA0 (VHT1SS_MCS0 44) ~ 0xB3 (VHT2SS_MCS9 #63) 160~179
VHT rate 0xB4 (VHT3SS_MCS0 64) ~ 0xC7 (VHT2SS_MCS9 #83) 180~199
else
@@ -469,14 +437,13 @@ int rtw_mp_rate(struct net_device *dev,
}
_rtw_memset(extra, 0, wrqu->length);
- sprintf(extra, "Set data rate to %s index %d" , input, rate);
- DBG_871X("%s: %s rate index=%d\n", __func__, input, rate);
+ sprintf(extra, "Set data rate to %s index %d" , input, padapter->mppriv.rateidx);
+ DBG_871X("%s: %s rate index=%d\n", __func__, input, padapter->mppriv.rateidx);
- if (rate >= MPT_RATE_LAST)
+ if (padapter->mppriv.rateidx >= DESC_RATEVHTSS4MCS9)
return -EINVAL;
- padapter->mppriv.rateidx = rate;
- pMptCtx->MptRateIndex = rate;
+ pMptCtx->MptRateIndex = HwRateToMPTRate(padapter->mppriv.rateidx);
SetDataRate(padapter);
wrqu->length = strlen(extra);
@@ -519,8 +486,12 @@ int rtw_mp_bandwidth(struct net_device *dev,
int cur_ch_offset;
PADAPTER padapter = rtw_netdev_priv(dev);
HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);
+ u8 input[wrqu->length];
+
+ if (copy_from_user(input, wrqu->pointer, wrqu->length))
+ return -EFAULT;
- if (sscanf(extra, "40M=%d,shortGI=%d", &bandwidth, &sg) > 0)
+ if (sscanf(input, "40M=%d,shortGI=%d", &bandwidth, &sg) > 0)
DBG_871X("%s: bw=%d sg=%d\n", __func__, bandwidth , sg);
if (bandwidth == 1)
@@ -530,11 +501,14 @@ int rtw_mp_bandwidth(struct net_device *dev,
padapter->mppriv.bandwidth = (u8)bandwidth;
padapter->mppriv.preamble = sg;
+ _rtw_memset(extra, 0, wrqu->length);
+ sprintf(extra, "Change BW %d to BW %d\n", pHalData->CurrentChannelBW , bandwidth);
SetBandwidth(padapter);
pHalData->CurrentChannelBW = bandwidth;
/*cur_ch_offset = rtw_get_offset_by_ch(padapter->mppriv.channel);*/
/*set_channel_bwmode(padapter, padapter->mppriv.channel, cur_ch_offset, bandwidth);*/
+ wrqu->length = strlen(extra);
return 0;
}
@@ -741,7 +715,13 @@ int rtw_mp_ctx(struct net_device *dev,
return -EFAULT;
DBG_871X("%s: in=%s\n", __func__, extra);
-
+#ifdef CONFIG_CONCURRENT_MODE
+ if (padapter->adapter_type == SECONDARY_ADAPTER) {
+ sprintf(extra, "Error: MP mode can't support Virtual Adapter, Please to use main Adapter.\n");
+ wrqu->length = strlen(extra);
+ return 0;
+ }
+#endif
countPkTx = strncmp(extra, "count=", 5); /* strncmp TRUE is 0*/
cotuTx = strncmp(extra, "background", 20);
CarrSprTx = strncmp(extra, "background,cs", 20);
@@ -783,8 +763,10 @@ int rtw_mp_ctx(struct net_device *dev,
bStartTest = 0; /* To set Stop*/
pmp_priv->tx.stop = 1;
sprintf(extra, "Stop continuous Tx");
+ ODM_Write_DIG(&pHalData->odmpriv, 0x20);
} else {
bStartTest = 1;
+ ODM_Write_DIG(&pHalData->odmpriv, 0x7f);
if (pmp_priv->mode != MP_ON) {
if (pmp_priv->tx.stop != 1) {
DBG_871X("%s: MP_MODE != ON %d\n", __func__, pmp_priv->mode);
@@ -859,7 +841,7 @@ int rtw_mp_arx(struct net_device *dev,
struct iw_point *wrqu, char *extra)
{
int bStartRx = 0, bStopRx = 0, bQueryPhy = 0, bQueryMac = 0, bSetBssid = 0;
- int bmac_filter = 0, bfilter_init = 0, bmon = 0, bSmpCfg = 0;
+ int bmac_filter = 0, bfilter_init = 0, bmon = 0, bSmpCfg = 0, bloopbk = 0;
u8 input[wrqu->length];
char *pch, *ptmp, *token, *tmp[2] = {0x00, 0x00};
u32 i = 0, ii = 0, jj = 0, kk = 0, cnts = 0, ret;
@@ -871,7 +853,13 @@ int rtw_mp_arx(struct net_device *dev,
return -EFAULT;
DBG_871X("%s: %s\n", __func__, input);
-
+#ifdef CONFIG_CONCURRENT_MODE
+ if (padapter->adapter_type == SECONDARY_ADAPTER) {
+ sprintf(extra, "Error: MP mode can't support Virtual Adapter, Please to use main Adapter.\n");
+ wrqu->length = strlen(extra);
+ return 0;
+ }
+#endif
bStartRx = (strncmp(input, "start", 5) == 0) ? 1 : 0; /* strncmp TRUE is 0*/
bStopRx = (strncmp(input, "stop", 5) == 0) ? 1 : 0; /* strncmp TRUE is 0*/
bQueryPhy = (strncmp(input, "phy", 3) == 0) ? 1 : 0; /* strncmp TRUE is 0*/
@@ -881,6 +869,7 @@ int rtw_mp_arx(struct net_device *dev,
bmac_filter = (strncmp(input, "accept_mac", 10) == 0) ? 1 : 0;
bmon = (strncmp(input, "mon=", 4) == 0) ? 1 : 0;
bSmpCfg = (strncmp(input , "smpcfg=" , 7) == 0) ? 1 : 0;
+ pmppriv->bloopback = (strncmp(input, "loopbk", 6) == 0) ? 1 : 0; /* strncmp TRUE is 0*/
if (bSetBssid == 1) {
pch = input;
@@ -979,6 +968,14 @@ int rtw_mp_arx(struct net_device *dev,
}
}
+ if (pmppriv->bloopback == _TRUE) {
+ sprintf(extra , "Enter MAC LoopBack mode\n");
+ _rtw_write32(padapter, 0x100, 0xB0106FF);
+ DBG_871X("0x100 :0x%x" , _rtw_read32(padapter, 0x100));
+ _rtw_write16(padapter, 0x608, 0x30c);
+ DBG_871X("0x100 :0x%x" , _rtw_read32(padapter, 0x608));
+ }
+
wrqu->length = strlen(extra) + 1;
return 0;
@@ -991,8 +988,14 @@ int rtw_mp_trx_query(struct net_device *dev,
{
u32 txok, txfail, rxok, rxfail, rxfilterout;
PADAPTER padapter = rtw_netdev_priv(dev);
+ PMPT_CONTEXT pMptCtx = &(padapter->mppriv.MptCtx);
+ RT_PMAC_TX_INFO PMacTxInfo = pMptCtx->PMacTxInfo;
+
+ if (PMacTxInfo.bEnPMacTx == TRUE)
+ txok = hal_mpt_query_phytxok(padapter);
+ else
+ txok = padapter->mppriv.tx.sended;
- txok = padapter->mppriv.tx.sended;
txfail = 0;
rxok = padapter->mppriv.rx_pktcount;
rxfail = padapter->mppriv.rx_crcerrpktcount;
@@ -1144,6 +1147,10 @@ int rtw_mp_reset_stats(struct net_device *dev,
rtw_reset_phy_rx_counters(padapter);
rtw_reset_mac_rx_counters(padapter);
+ _rtw_memset(extra, 0, wrqu->length);
+ sprintf(extra, "mp_reset_stats ok\n");
+ wrqu->length = strlen(extra);
+
return 0;
}
@@ -1204,27 +1211,34 @@ int rtw_mp_phypara(struct net_device *dev,
int rtw_mp_SetRFPath(struct net_device *dev,
struct iw_request_info *info,
- union iwreq_data *wrqu, char *extra)
+ struct iw_point *wrqu, char *extra)
{
PADAPTER padapter = rtw_netdev_priv(dev);
- char input[wrqu->data.length];
+ char input[wrqu->length];
int bMain = 1, bTurnoff = 1;
- if (copy_from_user(input, wrqu->data.pointer, wrqu->data.length))
- return -EFAULT;
DBG_871X("%s:iwpriv in=%s\n", __func__, input);
+ if (copy_from_user(input, wrqu->pointer, wrqu->length))
+ return -EFAULT;
+
bMain = strncmp(input, "1", 2); /* strncmp TRUE is 0*/
bTurnoff = strncmp(input, "0", 3); /* strncmp TRUE is 0*/
+ _rtw_memset(extra, 0, wrqu->length);
+
if (bMain == 0) {
MP_PHY_SetRFPathSwitch(padapter, _TRUE);
DBG_871X("%s:PHY_SetRFPathSwitch=TRUE\n", __func__);
+ sprintf(extra, "mp_setrfpath Main\n");
} else if (bTurnoff == 0) {
MP_PHY_SetRFPathSwitch(padapter, _FALSE);
DBG_871X("%s:PHY_SetRFPathSwitch=FALSE\n", __func__);
+ sprintf(extra, "mp_setrfpath Aux\n");
}
+ wrqu->length = strlen(extra);
+
return 0;
}
@@ -1344,7 +1358,7 @@ int rtw_mp_mon(struct net_device *dev,
/*rtw_disassoc_cmd(padapter, 0, _TRUE);*/
if (check_fwstate(pmlmepriv, _FW_LINKED) == _TRUE) {
rtw_disassoc_cmd(padapter, 500, _TRUE);
- rtw_indicate_disconnect(padapter);
+ rtw_indicate_disconnect(padapter, 0, _FALSE);
/*rtw_free_assoc_resources(padapter, 1);*/
}
rtw_pm_set_ips(padapter, IPS_NORMAL);
@@ -1388,7 +1402,7 @@ int rtw_mp_pretx_proc(PADAPTER padapter, u8 bStartTest, char *extra)
break;
case MP_CARRIER_SUPPRISSION_TX:
if (bStartTest != 0) {
- if (pmp_priv->rateidx <= MPT_RATE_11M)
+ if (HwRateToMPTRate(pmp_priv->rateidx) <= MPT_RATE_11M)
sprintf(extra, "%s\nStart continuous DA=ffffffffffff len=1500\n infinite=yes.", extra);
else
sprintf(extra, "%s\nSpecify carrier suppression but not CCK rate", extra);
@@ -1444,14 +1458,22 @@ int rtw_mp_tx(struct net_device *dev,
HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);
struct mp_priv *pmp_priv = &padapter->mppriv;
PMPT_CONTEXT pMptCtx = &(padapter->mppriv.MptCtx);
+ struct registry_priv *pregistrypriv = &padapter->registrypriv;
u32 bandwidth = 0, sg = 0, channel = 6, txpower = 40, rate = 108, ant = 0, txmode = 1, count = 0;
- u8 i = 0, j = 0, bStartTest = 1, status = 0;
+ u8 i = 0, j = 0, bStartTest = 1, status = 0, Idx = 0, tmpU1B = 0;
u16 antenna = 0;
if (copy_from_user(extra, wrqu->data.pointer, wrqu->data.length))
return -EFAULT;
DBG_871X("extra = %s\n", extra);
+#ifdef CONFIG_CONCURRENT_MODE
+ if (padapter->adapter_type == SECONDARY_ADAPTER) {
+ sprintf(extra, "Error: MP mode can't support Virtual Adapter, Please to use main Adapter.\n");
+ wrqu->data.length = strlen(extra);
+ return 0;
+ }
+#endif
if (strncmp(extra, "stop", 3) == 0) {
bStartTest = 0; /* To set Stop*/
@@ -1465,7 +1487,7 @@ int rtw_mp_tx(struct net_device *dev,
DBG_871X("Got Count=%d]\n", count);
pmp_priv->tx.count = count;
return 0;
- } else if (strncmp(extra, "setting", 5) == 0) {
+ } else if (strncmp(extra, "setting", 7) == 0) {
_rtw_memset(extra, 0, wrqu->data.length);
sprintf(extra, "Current Setting :\n Channel:%d", pmp_priv->channel);
sprintf(extra, "%s\n Bandwidth:%d", extra, pmp_priv->bandwidth);
@@ -1476,6 +1498,136 @@ int rtw_mp_tx(struct net_device *dev,
sprintf(extra, "%s\n MP Mode:%d", extra, pmp_priv->mode);
wrqu->data.length = strlen(extra);
return 0;
+#ifdef CONFIG_MP_VHT_HW_TX_MODE
+ } else if (strncmp(extra, "pmact", 5) == 0) {
+ if (strncmp(extra, "pmact=", 6) == 0) {
+ _rtw_memset(&pMptCtx->PMacTxInfo, 0, sizeof(pMptCtx->PMacTxInfo));
+ if (strncmp(extra, "pmact=start", 11) == 0) {
+ pMptCtx->PMacTxInfo.bEnPMacTx = _TRUE;
+ sprintf(extra, "Set PMac Tx Mode start\n");
+ } else {
+ pMptCtx->PMacTxInfo.bEnPMacTx = _FALSE;
+ sprintf(extra, "Set PMac Tx Mode Stop\n");
+ }
+ if (pMptCtx->bldpc == TRUE)
+ pMptCtx->PMacTxInfo.bLDPC = _TRUE;
+
+ if (pMptCtx->bstbc == TRUE)
+ pMptCtx->PMacTxInfo.bSTBC = _TRUE;
+
+ pMptCtx->PMacTxInfo.bSPreamble = pmp_priv->preamble;
+ pMptCtx->PMacTxInfo.bSGI = pmp_priv->preamble;
+ pMptCtx->PMacTxInfo.BandWidth = pmp_priv->bandwidth;
+ pMptCtx->PMacTxInfo.TX_RATE = HwRateToMPTRate(pmp_priv->rateidx);
+
+ pMptCtx->PMacTxInfo.Mode = pMptCtx->HWTxmode;
+
+ pMptCtx->PMacTxInfo.NDP_sound = FALSE;/*(Adapter.PacketType == NDP_PKT)?TRUE:FALSE;*/
+
+ if (padapter->mppriv.pktInterval == 0)
+ pMptCtx->PMacTxInfo.PacketPeriod = 100;
+ else
+ pMptCtx->PMacTxInfo.PacketPeriod = padapter->mppriv.pktInterval;
+
+ if (padapter->mppriv.pktLength < 1000)
+ pMptCtx->PMacTxInfo.PacketLength = 1000;
+ else
+ pMptCtx->PMacTxInfo.PacketLength = padapter->mppriv.pktLength;
+
+ pMptCtx->PMacTxInfo.PacketPattern = rtw_random32() % 0xFF;
+
+ if (padapter->mppriv.tx_pktcount != 0)
+ pMptCtx->PMacTxInfo.PacketCount = padapter->mppriv.tx_pktcount;
+
+ pMptCtx->PMacTxInfo.Ntx = 0;
+ for (Idx = 16; Idx < 20; Idx++) {
+ tmpU1B = (padapter->mppriv.antenna_tx >> Idx) & 1;
+ if (tmpU1B)
+ pMptCtx->PMacTxInfo.Ntx++;
+ }
+
+ _rtw_memset(pMptCtx->PMacTxInfo.MacAddress, 0xFF, ETH_ALEN);
+
+ PMAC_Get_Pkt_Param(&pMptCtx->PMacTxInfo, &pMptCtx->PMacPktInfo);
+
+ if (MPT_IS_CCK_RATE(pMptCtx->PMacTxInfo.TX_RATE)) {
+
+ CCK_generator(&pMptCtx->PMacTxInfo, &pMptCtx->PMacPktInfo);
+ } else {
+ PMAC_Nsym_generator(&pMptCtx->PMacTxInfo, &pMptCtx->PMacPktInfo);
+ /* 24 BIT*/
+ L_SIG_generator(pMptCtx->PMacPktInfo.N_sym, &pMptCtx->PMacTxInfo, &pMptCtx->PMacPktInfo);
+ }
+ /* 48BIT*/
+ if (MPT_IS_HT_RATE(pMptCtx->PMacTxInfo.TX_RATE))
+ HT_SIG_generator(&pMptCtx->PMacTxInfo, &pMptCtx->PMacPktInfo);
+ else if (MPT_IS_VHT_RATE(pMptCtx->PMacTxInfo.TX_RATE)) {
+ /* 48BIT*/
+ VHT_SIG_A_generator(&pMptCtx->PMacTxInfo, &pMptCtx->PMacPktInfo);
+
+ /* 26/27/29 BIT & CRC 8 BIT*/
+ VHT_SIG_B_generator(&pMptCtx->PMacTxInfo);
+
+ /* 32 BIT*/
+ VHT_Delimiter_generator(&pMptCtx->PMacTxInfo);
+ }
+
+ mpt_ProSetPMacTx(padapter);
+
+ } else if (strncmp(extra, "pmact,mode=", 11) == 0) {
+ int txmode = 0;
+
+ if (sscanf(extra, "pmact,mode=%d", &txmode) > 0) {
+ if (txmode == 1) {
+ pMptCtx->HWTxmode = CONTINUOUS_TX;
+ sprintf(extra, "\t Config HW Tx mode = CONTINUOUS_TX\n");
+ } else if (txmode == 2) {
+ pMptCtx->HWTxmode = OFDM_Single_Tone_TX;
+ sprintf(extra, "\t Config HW Tx mode = OFDM_Single_Tone_TX\n");
+ } else {
+ pMptCtx->HWTxmode = PACKETS_TX;
+ sprintf(extra, "\t Config HW Tx mode = PACKETS_TX\n");
+ }
+ } else {
+ pMptCtx->HWTxmode = PACKETS_TX;
+ sprintf(extra, "\t Config HW Tx mode=\n 0 = PACKETS_TX\n 1 = CONTINUOUS_TX\n 2 = OFDM_Single_Tone_TX");
+ }
+ } else if (strncmp(extra, "pmact,", 6) == 0) {
+ int PacketPeriod = 0, PacketLength = 0, PacketCout = 0;
+ int bldpc = 0, bstbc = 0;
+
+ if (sscanf(extra, "pmact,period=%d", &PacketPeriod) > 0) {
+ padapter->mppriv.pktInterval = PacketPeriod;
+ DBG_871X("PacketPeriod=%d\n", padapter->mppriv.pktInterval);
+ sprintf(extra, "PacketPeriod [1~255]= %d\n", padapter->mppriv.pktInterval);
+
+ } else if (sscanf(extra, "pmact,length=%d", &PacketLength) > 0) {
+ padapter->mppriv.pktLength = PacketLength;
+ DBG_871X("PacketPeriod=%d\n", padapter->mppriv.pktLength);
+ sprintf(extra, "PacketLength[~65535]=%d\n", padapter->mppriv.pktLength);
+
+ } else if (sscanf(extra, "pmact,count=%d", &PacketCout) > 0) {
+ padapter->mppriv.tx_pktcount = PacketCout;
+ DBG_871X("Packet Cout =%d\n", padapter->mppriv.tx_pktcount);
+ sprintf(extra, "Packet Cout =%d\n", padapter->mppriv.tx_pktcount);
+
+ } else if (sscanf(extra, "pmact,ldpc=%d", &bldpc) > 0) {
+ pMptCtx->bldpc = bldpc;
+ DBG_871X("Set LDPC =%d\n", pMptCtx->bldpc);
+ sprintf(extra, "Set LDPC =%d\n", pMptCtx->bldpc);
+
+ } else if (sscanf(extra, "pmact,stbc=%d", &bstbc) > 0) {
+ pMptCtx->bstbc = bstbc;
+ DBG_871X("Set STBC =%d\n", pMptCtx->bstbc);
+ sprintf(extra, "Set STBC =%d\n", pMptCtx->bstbc);
+ } else
+ sprintf(extra, "\n period={1~255}\n length={1000~65535}\n count={0~}\n ldpc={0/1}\n stbc={0/1}");
+
+ }
+
+ wrqu->data.length = strlen(extra);
+ return 0;
+#endif
} else {
if (sscanf(extra, "ch=%d,bw=%d,rate=%d,pwr=%d,ant=%d,tx=%d", &channel, &bandwidth, &rate, &txpower, &ant, &txmode) < 6) {
@@ -1633,6 +1785,14 @@ int rtw_mp_rx(struct net_device *dev,
if (copy_from_user(extra, wrqu->data.pointer, wrqu->data.length))
return -EFAULT;
+#ifdef CONFIG_CONCURRENT_MODE
+ if (padapter->adapter_type == SECONDARY_ADAPTER) {
+ sprintf(extra, "Error: MP mode can't support Virtual Adapter, Please to use main Adapter.\n");
+ wrqu->data.length = strlen(extra);
+ return 0;
+ }
+#endif
+
if (strncmp(extra, "stop", 4) == 0) {
_rtw_memset(extra, 0, wrqu->data.length);
SetPacketRx(padapter, bStartRx, _FALSE);
@@ -1730,6 +1890,33 @@ int rtw_mp_rx(struct net_device *dev,
}
+int rtw_mp_hwtx(struct net_device *dev,
+ struct iw_request_info *info,
+ union iwreq_data *wrqu, char *extra)
+{
+ PADAPTER padapter = rtw_netdev_priv(dev);
+ HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);
+ struct mp_priv *pmp_priv = &padapter->mppriv;
+ PMPT_CONTEXT pMptCtx = &(padapter->mppriv.MptCtx);
+
+#if defined(CONFIG_RTL8814A) || defined(CONFIG_RTL8821B) || defined(CONFIG_RTL8822B)
+ u8 input[wrqu->data.length];
+
+ if (copy_from_user(input, wrqu->data.pointer, wrqu->data.length))
+ return -EFAULT;
+
+ _rtw_memset(&pMptCtx->PMacTxInfo, 0, sizeof(RT_PMAC_TX_INFO));
+ _rtw_memcpy((void *)&pMptCtx->PMacTxInfo, (void *)input, sizeof(RT_PMAC_TX_INFO));
+
+ mpt_ProSetPMacTx(padapter);
+ sprintf(extra, "Set PMac Tx Mode start\n");
+
+ wrqu->data.length = strlen(extra);
+#endif
+ return 0;
+
+}
+
int rtw_efuse_mask_file(struct net_device *dev,
struct iw_request_info *info,
union iwreq_data *wrqu, char *extra)
diff --git a/rtl8188FU/os_dep/linux/mlme_linux.c b/rtl8188FU/os_dep/linux/mlme_linux.c
index dd52afa..c3edb3a 100755
--- a/rtl8188FU/os_dep/linux/mlme_linux.c
+++ b/rtl8188FU/os_dep/linux/mlme_linux.c
@@ -253,7 +253,7 @@ void rtw_reset_securitypriv( _adapter *adapter )
DBG_871X(FUNC_ADPT_FMT" - End to Disconnect\n", FUNC_ADPT_ARG(adapter));
}
-void rtw_os_indicate_disconnect( _adapter *adapter )
+void rtw_os_indicate_disconnect(_adapter *adapter, u16 reason, u8 locally_generated)
{
//RT_PMKID_LIST backupPMKIDList[ NUM_PMKID_CACHE ];
@@ -262,7 +262,7 @@ _func_enter_;
netif_carrier_off(adapter->pnetdev); // Do it first for tx broadcast pkt after disconnection issue!
#ifdef CONFIG_IOCTL_CFG80211
- rtw_cfg80211_indicate_disconnect(adapter);
+ rtw_cfg80211_indicate_disconnect(adapter, reason, locally_generated);
#endif //CONFIG_IOCTL_CFG80211
rtw_indicate_wx_disassoc_event(adapter);
diff --git a/rtl8188FU/os_dep/linux/os_intfs.c b/rtl8188FU/os_dep/linux/os_intfs.c
index d3ddbe0..7bfd28e 100755
--- a/rtl8188FU/os_dep/linux/os_intfs.c
+++ b/rtl8188FU/os_dep/linux/os_intfs.c
@@ -100,9 +100,9 @@ int rtw_uapsd_acbe_en = 0;
int rtw_uapsd_acvi_en = 0;
int rtw_uapsd_acvo_en = 0;
#ifdef CONFIG_RTL8814A
-int rtw_rfkfree_enable = 2; /* disable kfree */
+int rtw_pwrtrim_enable = 2; /* disable kfree , rename to power trim disable */
#else
-int rtw_rfkfree_enable = 0; /* Default Enalbe kfree by efuse config */
+int rtw_pwrtrim_enable = 0; /* Default Enalbe power trim by efuse config */
#endif
#ifdef CONFIG_80211N_HT
int rtw_ht_enable = 1;
@@ -110,7 +110,7 @@ int rtw_ht_enable = 1;
// 2.4G use bit 0 ~ 3, 5G use bit 4 ~ 7
// 0x21 means enable 2.4G 40MHz & 5G 80MHz
int rtw_bw_mode = 0x21;
-int rtw_ampdu_enable = 1;//for enable tx_ampdu ,// 0: disable, 0x1:enable (but wifi_spec should be 0), 0x2: force enable (don't care wifi_spec)
+int rtw_ampdu_enable = 1;//for enable tx_ampdu ,// 0: disable, 0x1:enable
int rtw_rx_stbc = 1;// 0: disable, bit(0):enable 2.4g, bit(1):enable 5g, default is set to enable 2.4GHZ for IOT issue with bufflao's AP at 5GHZ
int rtw_ampdu_amsdu = 0;// 0: disabled, 1:enabled, 2:auto . There is an IOT issu with DLINK DIR-629 when the flag turn on
// Short GI support Bit Map
@@ -150,7 +150,14 @@ int rtw_wifi_spec = 0;
int rtw_special_rf_path = 0; //0: 2T2R ,1: only turn on path A 1T1R
+char rtw_country_unspecified[] = {0xFF, 0xFF, 0x00};
+char *rtw_country_code = rtw_country_unspecified;
+module_param(rtw_country_code, charp, 0644);
+MODULE_PARM_DESC(rtw_country_code, "The default country code (in alpha2)");
+
int rtw_channel_plan = RTW_CHPLAN_MAX;
+module_param(rtw_channel_plan, int, 0644);
+MODULE_PARM_DESC(rtw_channel_plan, "The default chplan ID when rtw_alpha2 is not specified or valid");
/*if concurrent softap + p2p(GO) is needed, this param lets p2p response full channel list.
But Softap must be SHUT DOWN once P2P decide to set up connection and become a GO.*/
@@ -249,9 +256,8 @@ int rtw_ext_iface_num = 1;//primary/secondary iface is excluded
module_param(rtw_ext_iface_num, int, 0644);
#endif //CONFIG_MULTI_VIR_IFACES
-module_param(rtw_rfkfree_enable, int, 0644);
+module_param(rtw_pwrtrim_enable, int, 0644);
module_param(rtw_initmac, charp, 0644);
-module_param(rtw_channel_plan, int, 0644);
module_param(rtw_special_rf_path, int, 0644);
module_param(rtw_chip_version, int, 0644);
module_param(rtw_rfintfs, int, 0644);
@@ -407,10 +413,6 @@ uint rtw_FileMaskEfuse = 0;
module_param(rtw_FileMaskEfuse, uint, 0644);
MODULE_PARM_DESC(rtw_FileMaskEfuse, "default drv Mask Efuse value:0");
-uint rtw_kfree = 0;
-module_param(rtw_kfree, uint, 0644);
-MODULE_PARM_DESC(rtw_kfree, "default kfree config value:0");
-
uint rtw_pll_ref_clk_sel = CONFIG_RTW_PLL_REF_CLK_SEL;
module_param(rtw_pll_ref_clk_sel, uint, 0644);
MODULE_PARM_DESC(rtw_pll_ref_clk_sel, "force pll_ref_clk_sel, 0xF:use autoload value");
@@ -604,7 +606,7 @@ _func_enter_;
registry_par->uapsd_acvi_en = (u8)rtw_uapsd_acvi_en;
registry_par->uapsd_acvo_en = (u8)rtw_uapsd_acvo_en;
- registry_par->RegRfKFreeEnable = (u8)rtw_rfkfree_enable;
+ registry_par->RegPwrTrimEnable = (u8)rtw_pwrtrim_enable;
#ifdef CONFIG_80211N_HT
registry_par->ht_enable = (u8)rtw_ht_enable;
@@ -636,6 +638,16 @@ _func_enter_;
registry_par->wifi_spec = (u8)rtw_wifi_spec;
+ if (strlen(rtw_country_code) != 2
+ || is_alpha(rtw_country_code[0]) == _FALSE
+ || is_alpha(rtw_country_code[1]) == _FALSE
+ ) {
+ if (rtw_country_code != rtw_country_unspecified)
+ DBG_871X_LEVEL(_drv_err_, "%s discard rtw_country_code not in alpha2\n", __func__);
+ _rtw_memset(registry_par->alpha2, 0xFF, 2);
+ } else
+ _rtw_memcpy(registry_par->alpha2, rtw_country_code, 2);
+
registry_par->channel_plan = (u8)rtw_channel_plan;
registry_par->special_rf_path = (u8)rtw_special_rf_path;
@@ -917,7 +929,13 @@ static int rtw_ndev_notifier_call(struct notifier_block * nb, unsigned long stat
struct net_device *dev = ptr;
#endif
+ if (dev == NULL)
+ return NOTIFY_DONE;
+
#if (LINUX_VERSION_CODE>=KERNEL_VERSION(2,6,29))
+ if (dev->netdev_ops == NULL)
+ return NOTIFY_DONE;
+
if (dev->netdev_ops->ndo_do_ioctl == NULL)
return NOTIFY_DONE;
@@ -1502,6 +1520,7 @@ struct dvobj_priv *devobj_init(void)
_rtw_mutex_init(&pdvobj->h2c_fwcmd_mutex);
_rtw_mutex_init(&pdvobj->setch_mutex);
_rtw_mutex_init(&pdvobj->setbw_mutex);
+ _rtw_mutex_init(&pdvobj->rf_read_reg_mutex);
#ifdef CONFIG_SDIO_INDIRECT_ACCESS
_rtw_mutex_init(&pdvobj->sd_indirect_access_mutex);
#endif
@@ -1532,6 +1551,7 @@ void devobj_deinit(struct dvobj_priv *pdvobj)
_rtw_mutex_free(&pdvobj->h2c_fwcmd_mutex);
_rtw_mutex_free(&pdvobj->setch_mutex);
_rtw_mutex_free(&pdvobj->setbw_mutex);
+ _rtw_mutex_free(&pdvobj->rf_read_reg_mutex);
#ifdef CONFIG_SDIO_INDIRECT_ACCESS
_rtw_mutex_free(&pdvobj->sd_indirect_access_mutex);
#endif
@@ -1708,8 +1728,9 @@ _func_enter_;
#endif
rtw_hal_dm_init(padapter);
+#ifdef CONFIG_SW_LED
rtw_hal_sw_led_init(padapter);
-
+#endif
#ifdef DBG_CONFIG_ERROR_DETECT
rtw_hal_sreset_init(padapter);
#endif
@@ -2104,7 +2125,6 @@ void rtw_drv_stop_vir_if(_adapter *padapter)
pnetdev = padapter->pnetdev;
- rtw_cancel_all_timer(padapter);
if (padapter->bup == _TRUE)
{
@@ -2122,6 +2142,9 @@ void rtw_drv_stop_vir_if(_adapter *padapter)
padapter->bup = _FALSE;
}
+
+ /* cancel timer after thread stop */
+ rtw_cancel_all_timer(padapter);
}
void rtw_drv_free_vir_if(_adapter *padapter)
@@ -2447,7 +2470,6 @@ void rtw_drv_if2_stop(_adapter *if2)
if (padapter == NULL)
return;
- rtw_cancel_all_timer(padapter);
if (padapter->bup == _TRUE) {
#ifdef CONFIG_XMIT_ACK
@@ -2464,6 +2486,9 @@ void rtw_drv_if2_stop(_adapter *if2)
padapter->bup = _FALSE;
}
+
+ /* cancel timer after thread stop */
+ rtw_cancel_all_timer(padapter);
}
#endif //end of CONFIG_CONCURRENT_MODE
@@ -2964,7 +2989,7 @@ static int netdev_close(struct net_device *pnetdev)
LeaveAllPowerSaveMode(padapter);
rtw_disassoc_cmd(padapter, 500, _FALSE);
//s2-2. indicate disconnect to os
- rtw_indicate_disconnect(padapter);
+ rtw_indicate_disconnect(padapter, 0, _FALSE);
//s2-3.
rtw_free_assoc_resources(padapter, 1);
//s2-4.
@@ -3432,7 +3457,9 @@ void rtw_dev_unload(PADAPTER padapter)
RT_TRACE(_module_hci_intfs_c_, _drv_notice_, ("%s: bup==_FALSE\n",__FUNCTION__));
DBG_871X("%s: bup==_FALSE\n",__FUNCTION__);
}
-
+
+ /* cancel timer after thread stop */
+ rtw_cancel_all_timer(padapter);
RT_TRACE(_module_hci_intfs_c_, _drv_notice_, ("-%s\n",__FUNCTION__));
}
@@ -3467,7 +3494,7 @@ int rtw_suspend_free_assoc_resource(_adapter *padapter)
{
rtw_disassoc_cmd(padapter, 0, _FALSE);
//s2-2. indicate disconnect to os
- rtw_indicate_disconnect(padapter);
+ rtw_indicate_disconnect(padapter, 0, _FALSE);
}
#ifdef CONFIG_AP_MODE
else if(check_fwstate(pmlmepriv, WIFI_AP_STATE))
@@ -3494,7 +3521,7 @@ int rtw_suspend_free_assoc_resource(_adapter *padapter)
if (check_fwstate(pmlmepriv, _FW_UNDER_LINKING) == _TRUE)
{
DBG_871X_LEVEL(_drv_always_, "%s: fw_under_linking\n", __FUNCTION__);
- rtw_indicate_disconnect(padapter);
+ rtw_indicate_disconnect(padapter, 0, _FALSE);
}
DBG_871X("<== "FUNC_ADPT_FMT" exit....\n", FUNC_ADPT_ARG(padapter));
@@ -4065,7 +4092,7 @@ _func_enter_;
DBG_871X("%s: disconnect reason: %02x\n", __func__,
pwrpriv->wowlan_wake_reason);
- rtw_indicate_disconnect(padapter);
+ rtw_indicate_disconnect(padapter, 0, _FALSE);
rtw_sta_media_status_rpt(padapter,
rtw_get_stainfo(&padapter->stapriv,
@@ -4091,10 +4118,15 @@ _func_enter_;
}
if (pwrpriv->wowlan_wake_reason == RX_PNOWakeUp) {
-#ifdef CONFIG_IOCTL_CFG80211
- cfg80211_disconnected(padapter->pnetdev, 0, NULL, 0,
- GFP_ATOMIC);
+#ifdef CONFIG_IOCTL_CFG80211
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 2, 0))
+ u8 locally_generated = 1;
+
+ cfg80211_disconnected(padapter->pnetdev, 0, NULL, 0, locally_generated, GFP_ATOMIC);
+#else
+ cfg80211_disconnected(padapter->pnetdev, 0, NULL, 0, GFP_ATOMIC);
#endif
+#endif /* CONFIG_IOCTL_CFG80211 */
rtw_lock_ext_suspend_timeout(10000);
}
@@ -4111,14 +4143,14 @@ _func_enter_;
pwrpriv->wowlan_mode =_FALSE;
// Power On LED
- rtw_hal_sw_led_init(padapter);
+#ifdef CONFIG_SW_LED
if(pwrpriv->wowlan_wake_reason == Rx_DisAssoc ||
pwrpriv->wowlan_wake_reason == Rx_DeAuth ||
pwrpriv->wowlan_wake_reason == FWDecisionDisconnect)
rtw_led_control(padapter, LED_CTL_NO_LINK);
else
rtw_led_control(padapter, LED_CTL_LINK);
-
+#endif
//clean driver side wake up reason.
pwrpriv->wowlan_wake_reason = 0;
@@ -4255,8 +4287,9 @@ _func_enter_;
pwrpriv->wowlan_wake_reason = 0;
// Power On LED
- rtw_hal_sw_led_init(padapter);
+#ifdef CONFIG_SW_LED
rtw_led_control(padapter, LED_CTL_LINK);
+#endif
exit:
DBG_871X("<== "FUNC_ADPT_FMT" exit....\n", FUNC_ADPT_ARG(padapter));
_func_exit_;
diff --git a/rtl8188FU/os_dep/linux/rtw_proc.c b/rtl8188FU/os_dep/linux/rtw_proc.c
index cee446f..dffb383 100755
--- a/rtl8188FU/os_dep/linux/rtw_proc.c
+++ b/rtl8188FU/os_dep/linux/rtw_proc.c
@@ -146,6 +146,12 @@ static int proc_get_mstat(struct seq_file *m, void *v)
}
#endif /* DBG_MEM_ALLOC */
+static int proc_get_country_chplan_map(struct seq_file *m, void *v)
+{
+ dump_country_chplan_map(m);
+ return 0;
+}
+
static int proc_get_chplan_id_list(struct seq_file *m, void *v)
{
dump_chplan_id_list(m);
@@ -169,6 +175,7 @@ const struct rtw_proc_hdl drv_proc_hdls [] = {
#ifdef DBG_MEM_ALLOC
{"mstat", proc_get_mstat, NULL},
#endif /* DBG_MEM_ALLOC */
+ {"country_chplan_map", proc_get_country_chplan_map, NULL},
{"chplan_id_list", proc_get_chplan_id_list, NULL},
{"chplan_test", proc_get_chplan_test, NULL},
};
@@ -403,6 +410,45 @@ static ssize_t proc_set_gpio(struct file *file, const char __user *buffer, size_
return count;
}
#endif
+static int proc_get_current_tx_rate(struct seq_file *m, void *v)
+{
+
+ struct net_device *dev = m->private;
+ _adapter *adapter = (_adapter *)rtw_netdev_priv(dev);
+ struct dvobj_priv *dvobj = adapter_to_dvobj(adapter);
+ struct macid_ctl_t *macid_ctl = dvobj_to_macidctl(dvobj);
+ u8 i;
+ u8 null_addr[ETH_ALEN] = {0};
+ u8 *macaddr;
+ u8 current_rate_id = 0;
+
+ DBG_871X_SEL_NL(m, "%-5s %-4s %-17s %-7s\n"
+ , "macid", "if_g", "macaddr", "tx_rate");
+
+ for (i = 0; i < macid_ctl->num; i++) {
+ if (rtw_macid_is_used(macid_ctl, i) || macid_ctl->h2c_msr[i]) {
+ if (macid_ctl->sta[i])
+ macaddr = macid_ctl->sta[i]->hwaddr;
+ else
+ macaddr = null_addr;
+ current_rate_id = rtw_get_current_tx_rate(adapter, i);
+ if (!rtw_macid_is_bmc(macid_ctl, i)) {
+ DBG_871X_SEL_NL(m, "%5u %4u "MAC_FMT" %s\n"
+ , i
+ , rtw_macid_get_if_g(macid_ctl, i)
+ , MAC_ARG(macaddr)
+ , HDATA_RATE(current_rate_id)
+ );
+ }
+
+
+ }
+ }
+
+
+return 0;
+
+}
static int proc_get_linked_info_dump(struct seq_file *m, void *v)
@@ -415,6 +461,7 @@ static int proc_get_linked_info_dump(struct seq_file *m, void *v)
return 0;
}
+
static ssize_t proc_set_linked_info_dump(struct file *file, const char __user *buffer, size_t count, loff_t *pos, void *data)
{
struct net_device *dev = data;
@@ -512,14 +559,9 @@ static ssize_t proc_set_chan_plan(struct file *file, const char __user *buffer,
}
if (buffer && !copy_from_user(tmp, buffer, count)) {
-
int num = sscanf(tmp, "%hhx", &chan_plan);
-
- if (num != 1) {
- DBG_871X("invalid read_reg parameter!\n");
+ if (num != 1)
return count;
- }
-
}
rtw_set_channel_plan(padapter, chan_plan);
@@ -527,6 +569,48 @@ static ssize_t proc_set_chan_plan(struct file *file, const char __user *buffer,
return count;
}
+static int proc_get_country_code(struct seq_file *m, void *v)
+{
+ struct net_device *dev = m->private;
+ _adapter *adapter = (_adapter *)rtw_netdev_priv(dev);
+
+ if (adapter->mlmepriv.country_ent)
+ dump_country_chplan(m, adapter->mlmepriv.country_ent);
+ else
+ DBG_871X_SEL_NL(m, "unspecified\n");
+
+ return 0;
+}
+
+static ssize_t proc_set_country_code(struct file *file, const char __user *buffer, size_t count, loff_t *pos, void *data)
+{
+ struct net_device *dev = data;
+ _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
+ char tmp[32];
+ char alpha2[2];
+ int num;
+
+ if (count < 1)
+ return -EFAULT;
+
+ if (count > sizeof(tmp)) {
+ rtw_warn_on(1);
+ return -EFAULT;
+ }
+
+ if (!buffer || copy_from_user(tmp, buffer, count))
+ goto exit;
+
+ num = sscanf(tmp, "%c%c", &alpha2[0], &alpha2[1]);
+ if (num != 2)
+ return count;
+
+ rtw_set_country(padapter, alpha2);
+
+exit:
+ return count;
+}
+
#ifdef CONFIG_DFS_MASTER
ssize_t proc_set_update_non_ocp(struct file *file, const char __user *buffer, size_t count, loff_t *pos, void *data)
{
@@ -651,6 +735,8 @@ static int proc_get_macid_info(struct seq_file *m, void *v)
struct dvobj_priv *dvobj = adapter_to_dvobj(adapter);
struct macid_ctl_t *macid_ctl = dvobj_to_macidctl(dvobj);
u8 i;
+ u8 null_addr[ETH_ALEN] = {0};
+ u8 *macaddr;
DBG_871X_SEL_NL(m, "max_num:%u\n", macid_ctl->num);
DBG_871X_SEL_NL(m, "\n");
@@ -659,21 +745,27 @@ static int proc_get_macid_info(struct seq_file *m, void *v)
dump_macid_map(m, &macid_ctl->used, macid_ctl->num);
DBG_871X_SEL_NL(m, "\n");
- DBG_871X_SEL_NL(m, "%-3s %-3s %-4s %-4s %s"
+ DBG_871X_SEL_NL(m, "%-3s %-3s %-4s %-4s %-17s %s"
"\n"
- , "id", "bmc", "if_g", "ch_g", "status"
+ , "id", "bmc", "if_g", "ch_g", "macaddr", "status"
);
for (i=0;i<macid_ctl->num;i++) {
if (rtw_macid_is_used(macid_ctl, i)
|| macid_ctl->h2c_msr[i]
) {
- DBG_871X_SEL_NL(m, "%3u %3u %4d %4d "H2C_MSR_FMT" %s"
+ if (macid_ctl->sta[i])
+ macaddr = macid_ctl->sta[i]->hwaddr;
+ else
+ macaddr = null_addr;
+
+ DBG_871X_SEL_NL(m, "%3u %3u %4d %4d "MAC_FMT" "H2C_MSR_FMT" %s"
"\n"
, i
, rtw_macid_is_bmc(macid_ctl, i)
, rtw_macid_get_if_g(macid_ctl, i)
, rtw_macid_get_ch_g(macid_ctl, i)
+ , MAC_ARG(macaddr)
, H2C_MSR_ARG(&macid_ctl->h2c_msr[i])
, rtw_macid_is_used(macid_ctl, i) ? "" : "[unused]"
);
@@ -858,7 +950,9 @@ static ssize_t proc_set_tx_power_ext_info(struct file *file, const char __user *
if (num < 1)
return count;
+ #ifdef CONFIG_LOAD_PHY_PARA_FROM_FILE
phy_free_filebuf_mask(adapter, LOAD_BB_PG_PARA_FILE | LOAD_RF_TXPWR_LMT_PARA_FILE);
+ #endif
rtw_ps_deny(adapter, PS_DENY_IOCTL);
LeaveAllPowerSaveModeDirect(adapter);
@@ -874,7 +968,7 @@ static ssize_t proc_set_tx_power_ext_info(struct file *file, const char __user *
return count;
}
-#ifdef CONFIG_RF_GAIN_OFFSET
+#ifdef CONFIG_RF_POWER_TRIM
static int proc_get_kfree_flag(struct seq_file *m, void *v)
{
struct net_device *dev = m->private;
@@ -1073,7 +1167,7 @@ static ssize_t proc_set_tx_gain_offset(struct file *file, const char __user *buf
return count;
}
-#endif /* CONFIG_RF_GAIN_OFFSET */
+#endif /* CONFIG_RF_POWER_TRIM */
#ifdef CONFIG_BT_COEXIST
ssize_t proc_set_btinfo_evt(struct file *file, const char __user *buffer, size_t count, loff_t *pos, void *data)
@@ -1126,7 +1220,7 @@ static u8 *btreg_type[] = {
"le"
};
-static int btreg_parse_str(char *input, u8 *type, u16 *addr, u16 *val)
+static int btreg_parse_str(char const *input, u8 *type, u16 *addr, u16 *val)
{
u32 num;
u8 str[80] = {0};
@@ -1261,6 +1355,8 @@ ssize_t proc_set_btreg_read(struct file *file, const char __user *buffer, size_t
err = -EFAULT;
goto exit;
}
+ /* [Coverity] sure tmp end with '\0'(string terminal) */
+ tmp[sizeof(tmp) - 1] = 0;
err = btreg_parse_str(tmp, &btreg_read_type, &btreg_read_addr, NULL);
if (err)
@@ -1505,8 +1601,9 @@ const struct rtw_proc_hdl adapter_proc_hdls [] = {
#if defined(DBG_CONFIG_ERROR_DETECT)
{"sreset", proc_get_sreset, proc_set_sreset},
#endif /* DBG_CONFIG_ERROR_DETECT */
+ {"trx_info_debug", proc_get_trx_info_debug, NULL},
{"linked_info_dump",proc_get_linked_info_dump,proc_set_linked_info_dump},
-
+ {"current_tx_rate", proc_get_current_tx_rate, NULL},
#ifdef CONFIG_GPIO_API
{"gpio_info",proc_get_gpio,proc_set_gpio},
{"gpio_set_output_value",proc_get_dummy,proc_set_gpio_output_value},
@@ -1530,7 +1627,8 @@ const struct rtw_proc_hdl adapter_proc_hdls [] = {
#ifdef CONFIG_P2P_WOWLAN
{"p2p_wowlan_info", proc_get_p2p_wowlan_info, NULL},
#endif
- {"chan_plan",proc_get_chan_plan,proc_set_chan_plan},
+ {"country_code", proc_get_country_code, proc_set_country_code},
+ {"chan_plan", proc_get_chan_plan, proc_set_chan_plan},
#ifdef CONFIG_DFS_MASTER
{"dfs_master_test_case", proc_get_dfs_master_test_case, proc_set_dfs_master_test_case},
{"update_non_ocp", proc_get_dummy, proc_set_update_non_ocp},
@@ -1546,7 +1644,7 @@ const struct rtw_proc_hdl adapter_proc_hdls [] = {
{"tx_power_by_rate", proc_get_tx_power_by_rate, NULL},
{"tx_power_limit", proc_get_tx_power_limit, NULL},
{"tx_power_ext_info", proc_get_tx_power_ext_info, proc_set_tx_power_ext_info},
-#ifdef CONFIG_RF_GAIN_OFFSET
+#ifdef CONFIG_RF_POWER_TRIM
{"tx_gain_offset", proc_get_dummy, proc_set_tx_gain_offset},
{"kfree_flag", proc_get_kfree_flag, proc_set_kfree_flag},
{"kfree_bb_gain", proc_get_kfree_bb_gain, proc_set_kfree_bb_gain},
@@ -1564,7 +1662,7 @@ const struct rtw_proc_hdl adapter_proc_hdls [] = {
{"acs", proc_get_best_chan, proc_set_acs},
#endif
#ifdef CONFIG_PREALLOC_RX_SKB_BUFFER
- {"rtkm_info", proc_get_rtkm_info, NULL}
+ {"rtkm_info", proc_get_rtkm_info, NULL},
#endif
{"efuse_map", proc_get_efuse_map, NULL},
#ifdef CONFIG_IEEE80211W
diff --git a/rtl8188FU/os_dep/linux/usb_intf.c b/rtl8188FU/os_dep/linux/usb_intf.c
index 274735d..78c03c3 100755
--- a/rtl8188FU/os_dep/linux/usb_intf.c
+++ b/rtl8188FU/os_dep/linux/usb_intf.c
@@ -840,7 +840,7 @@ int rtw_hw_suspend(_adapter *padapter )
_clr_fwstate_(pmlmepriv, _FW_LINKED);
rtw_led_control(padapter, LED_CTL_NO_LINK);
- rtw_os_indicate_disconnect(padapter);
+ rtw_os_indicate_disconnect(padapter, 0, _FALSE);
#ifdef CONFIG_LPS
//donnot enqueue cmd
@@ -1378,8 +1378,6 @@ static void rtw_usb_if1_deinit(_adapter *if1)
#endif
#endif
- rtw_cancel_all_timer(if1);
-
#ifdef CONFIG_WOWLAN
pwrctl->wowlan_mode=_FALSE;
#endif //CONFIG_WOWLAN
@@ -1556,6 +1554,9 @@ _func_enter_;
LeaveAllPowerSaveMode(padapter);
}
rtw_set_drv_stopped(padapter); /*for stop thread*/
+
+ /* stop cmd thread */
+ rtw_stop_cmd_thread(padapter);
#ifdef CONFIG_CONCURRENT_MODE
#ifdef CONFIG_MULTI_VIR_IFACES
rtw_drv_stop_vir_ifaces(dvobj);
diff --git a/rtl8188FU/os_dep/osdep_service.c b/rtl8188FU/os_dep/osdep_service.c
index ef9d022..447d026 100755
--- a/rtl8188FU/os_dep/osdep_service.c
+++ b/rtl8188FU/os_dep/osdep_service.c
@@ -830,7 +830,7 @@ inline void _rtw_memmove(void *dst, const void *src, u32 sz)
#endif
}
-int _rtw_memcmp(void *dst, void *src, u32 sz)
+int _rtw_memcmp(void *dst, const void *src, u32 sz)
{
#if defined (PLATFORM_LINUX)|| defined (PLATFORM_FREEBSD)
@@ -1901,12 +1901,20 @@ static int closeFile(struct file *fp)
static int readFile(struct file *fp,char *buf,int len)
{
int rlen=0, sum=0;
-
- if (!fp->f_op || !fp->f_op->read)
+
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 1, 0))
+ if (!(fp->f_mode & FMODE_CAN_READ))
+#else
+ if (!fp->f_op || !fp->f_op->read)
+#endif
return -EPERM;
while(sum<len) {
- rlen=fp->f_op->read(fp,buf+sum,len-sum, &fp->f_pos);
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 1, 0))
+ rlen = __vfs_read(fp, buf+sum, len-sum, &fp->f_pos);
+#else
+ rlen = fp->f_op->read(fp, buf+sum, len-sum, &fp->f_pos);
+#endif
if(rlen>0)
sum+=rlen;
else if(0 != rlen)
@@ -2486,3 +2494,41 @@ void rtw_cbuf_free(struct rtw_cbuf *cbuf)
rtw_mfree((u8*)cbuf, sizeof(*cbuf) + sizeof(void*)*cbuf->size);
}
+/**
+* IsHexDigit -
+*
+* Return TRUE if chTmp is represent for hex digit
+* FALSE otherwise.
+*/
+inline BOOLEAN IsHexDigit(char chTmp)
+{
+ if ((chTmp >= '0' && chTmp <= '9') ||
+ (chTmp >= 'a' && chTmp <= 'f') ||
+ (chTmp >= 'A' && chTmp <= 'F'))
+ return _TRUE;
+ else
+ return _FALSE;
+}
+
+/**
+* is_alpha -
+*
+* Return TRUE if chTmp is represent for alphabet
+* FALSE otherwise.
+*/
+inline BOOLEAN is_alpha(char chTmp)
+{
+ if ((chTmp >= 'a' && chTmp <= 'z') ||
+ (chTmp >= 'A' && chTmp <= 'Z'))
+ return _TRUE;
+ else
+ return _FALSE;
+}
+
+inline char alpha_to_upper(char c)
+{
+ if ((c >= 'a' && c <= 'z'))
+ c = 'A' + (c - 'a');
+ return c;
+}
+