+ drivers/scsi/Kconfig | 2
+ drivers/scsi/Makefile | 1
+ drivers/scsi/qla2xxx/Kconfig | 37
+ drivers/scsi/qla2xxx/Makefile | 56
+ drivers/scsi/qla2xxx/README.qla2x00 | 744 ++++
+ drivers/scsi/qla2xxx/exioct.h | 947 +++++
+ drivers/scsi/qla2xxx/exioctln.h | 255 +
+ drivers/scsi/qla2xxx/inioct.h | 129
+ drivers/scsi/qla2xxx/ql2100tp_fw.c | 4866 ++++++++++++++++++++++++++
+ drivers/scsi/qla2xxx/ql2200ip_fw.c | 5884 ++++++++++++++++++++++++++++++++
+ drivers/scsi/qla2xxx/ql2300tpx_fw.c | 6494 +++++++++++++++++++++++++++++++++++
+ drivers/scsi/qla2xxx/qla_cfg.c | 2780 +++++++++++++++
+ drivers/scsi/qla2xxx/qla_cfg.h | 181
+ drivers/scsi/qla2xxx/qla_cfgln.c | 726 +++
+ drivers/scsi/qla2xxx/qla_dbg.c | 1000 +++++
+ drivers/scsi/qla2xxx/qla_dbg.h | 138
+ drivers/scsi/qla2xxx/qla_def.h | 2484 +++++++++++++
+ drivers/scsi/qla2xxx/qla_fo.c | 1681 +++++++++
+ drivers/scsi/qla2xxx/qla_fo.cfg | 31
+ drivers/scsi/qla2xxx/qla_fo.h | 75
+ drivers/scsi/qla2xxx/qla_gbl.h | 395 ++
+ drivers/scsi/qla2xxx/qla_inioct.c | 495 ++
+ drivers/scsi/qla2xxx/qla_init.c | 5945 ++++++++++++++++++++++++++++++++
+ drivers/scsi/qla2xxx/qla_inline.h | 375 ++
+ drivers/scsi/qla2xxx/qla_iocb.c | 1276 ++++++
+ drivers/scsi/qla2xxx/qla_ip.c | 1769 +++++++++
+ drivers/scsi/qla2xxx/qla_ip.h | 420 ++
+ drivers/scsi/qla2xxx/qla_isr.c | 1474 ++++++++
+ drivers/scsi/qla2xxx/qla_listops.h | 397 ++
+ drivers/scsi/qla2xxx/qla_mbx.c | 2884 +++++++++++++++
+ drivers/scsi/qla2xxx/qla_os.c | 5879 ++++++++++++++++++++++++++++++++
+ drivers/scsi/qla2xxx/qla_os.h | 156
+ drivers/scsi/qla2xxx/qla_settings.h | 80
+ drivers/scsi/qla2xxx/qla_sup.c | 560 +++
+ drivers/scsi/qla2xxx/qla_vendor.c | 193 +
+ drivers/scsi/qla2xxx/qla_version.h | 31
+ drivers/scsi/qla2xxx/qla_xioct.c | 6589 ++++++++++++++++++++++++++++++++++++
+ drivers/scsi/qla2xxx/qlfo.h | 413 ++
+ drivers/scsi/qla2xxx/qlfolimits.h | 92
+ drivers/scsi/qla2xxx/qlfoln.h | 76
+ drivers/scsi/qla2xxx/release.txt | 22
+ drivers/scsi/qla2xxx/revision.notes | 167
+ 42 files changed, 58199 insertions(+)
---- linux-2.5.73/drivers/scsi/Makefile~qla2xxx-v8.00.00b1-2.5.73 2003-06-22 11:33:08.000000000 -0700
-+++ linux-2.5.73-n9560/drivers/scsi/Makefile 2003-07-01 16:29:54.000000000 -0700
+--- linux-2.5.73/drivers/scsi/Makefile~qla2xxx-v8.00.00b1-2.5.73 Sun Jun 22 11:33:08 2003
++++ linux-2.5.73-n9560/drivers/scsi/Makefile Thu Jul 3 15:34:28 2003
@@ -73,6 +73,7 @@ obj-$(CONFIG_SCSI_QLOGIC_FAS) += qlogicf
obj-$(CONFIG_SCSI_QLOGIC_ISP) += qlogicisp.o
obj-$(CONFIG_SCSI_QLOGIC_FC) += qlogicfc.o
obj-$(CONFIG_SCSI_PAS16) += pas16.o
obj-$(CONFIG_SCSI_SEAGATE) += seagate.o
obj-$(CONFIG_SCSI_FD_8xx) += seagate.o
---- linux-2.5.73/drivers/scsi/Kconfig~qla2xxx-v8.00.00b1-2.5.73 2003-06-22 11:33:16.000000000 -0700
-+++ linux-2.5.73-n9560/drivers/scsi/Kconfig 2003-07-01 16:29:54.000000000 -0700
+--- linux-2.5.73/drivers/scsi/Kconfig~qla2xxx-v8.00.00b1-2.5.73 Sun Jun 22 11:33:16 2003
++++ linux-2.5.73-n9560/drivers/scsi/Kconfig Thu Jul 3 15:34:28 2003
@@ -1283,6 +1283,8 @@ config SCSI_QLOGIC_1280
The module will be called qla1280. If you want to compile it as
a module, say M here and read <file:Documentation/modules.txt>.
config SCSI_QLOGICPTI
tristate "PTI Qlogic, ISP Driver"
depends on SBUS && SCSI
+--- /dev/null Thu Apr 11 07:25:15 2002
++++ linux-2.5.73-n9560/drivers/scsi/qla2xxx/Kconfig Thu Jul 3 15:34:42 2003
+@@ -0,0 +1,37 @@
++config SCSI_QLA2XXX
++ bool "QLogic QLA2XXX FC-SCSI support (v8)"
++ ---help---
++ help here...
++
++config SCSI_QLA2XXX_QLA21XX
++ tristate "QLogic QLA21xx FC-SCSI support (v8)"
++ depends on SCSI_QLA2XXX
++ ---help---
++ help here...
++
++ If you want to compile the driver as a module ( = code which can be
++ inserted in and removed from the running kernel whenever you want),
++ say M here and read <file:Documentation/modules.txt>. The module
++ will be called qla2100.
++
++config SCSI_QLA2XXX_QLA22XX
++ tristate "QLogic QLA22xx FC-SCSI support (v8)"
++ depends on SCSI_QLA2XXX
++ ---help---
++ help here...
++
++ If you want to compile the driver as a module ( = code which can be
++ inserted in and removed from the running kernel whenever you want),
++ say M here and read <file:Documentation/modules.txt>. The module
++ will be called qla2200.
++
++config SCSI_QLA2XXX_QLA23XX
++ tristate "QLogic QLA23xx FC-SCSI support (v8)"
++ depends on SCSI_QLA2XXX
++ ---help---
++ help here...
++
++ If you want to compile the driver as a module ( = code which can be
++ inserted in and removed from the running kernel whenever you want),
++ say M here and read <file:Documentation/modules.txt>. The module
++ will be called qla2300.
+--- /dev/null Thu Apr 11 07:25:15 2002
++++ linux-2.5.73-n9560/drivers/scsi/qla2xxx/Makefile Thu Jul 3 15:34:42 2003
+@@ -0,0 +1,56 @@
++# Kernel makefile for 8.x series QLogic Fibre Channel driver.
++#
++EXTRA_CFLAGS += -Idrivers/scsi -I$(obj) -DUNIQUE_FW_NAME
++
++ISPTYPES := qla2100 qla2200 qla2300
++ISPDIRS := $(foreach dir, $(ISPTYPES), $(addsuffix /, $(addprefix .,$(dir))))
++
++ISP2100_FW := ql2100tp_fw.o
++ISP2200_FW := ql2200ip_fw.o
++ISP2300_FW := ql2300tpx_fw.o #ql2322tpx_fw.o
++
++COMMON_SRCS := qla_os.c qla_init.c qla_mbx.c qla_iocb.c qla_isr.c qla_xioct.c qla_inioct.c \
++ qla_dbg.c qla_sup.c qla_fo.c qla_cfg.c qla_cfgln.c qla_vendor.c
++COMMON_OBJS := $(foreach file, $(COMMON_SRCS), $(patsubst %.c, %.o, $(file)))
++
++ISP2100_DIR_SRCS := $(foreach file, $(COMMON_SRCS), $(addprefix .qla2100/,$(file)))
++ISP2100_DIR_OBJS := $(foreach file, $(COMMON_OBJS), $(addprefix .qla2100/,$(file)))
++ISP2200_DIR_SRCS := $(foreach file, $(COMMON_SRCS), $(addprefix .qla2200/,$(file)))
++ISP2200_DIR_OBJS := $(foreach file, $(COMMON_OBJS), $(addprefix .qla2200/,$(file)))
++ISP2300_DIR_SRCS := $(foreach file, $(COMMON_SRCS), $(addprefix .qla2300/,$(file)))
++ISP2300_DIR_OBJS := $(foreach file, $(COMMON_OBJS), $(addprefix .qla2300/,$(file)))
++
++PREPALL := $(shell for dir in $(ISPDIRS) ; \
++ do \
++ if [ ! -d $(obj)/$${dir} ] ; then \
++ mkdir $(obj)/$${dir} ; \
++ fi ; \
++ for link in $(foreach file, $(COMMON_OBJS), $(patsubst %.o, %.c, $(file))) ; \
++ do \
++ if [ ! -h $(obj)/$${dir}$${link} ] ; then \
++ ln -sf ../$${link} $(obj)/$${dir}$${link} ; \
++ fi ; \
++ done \
++ done)
++
++obj-$(CONFIG_SCSI_QLA2XXX_QLA21XX) += qla2100.o
++obj-$(CONFIG_SCSI_QLA2XXX_QLA22XX) += qla2200.o
++obj-$(CONFIG_SCSI_QLA2XXX_QLA23XX) += qla2300.o
++
++$(obj)/qla2100.o: $(PREPALL)
++$(obj)/qla2100.o: ISPTYPE := qla21xx
++$(obj)/qla2100.o: EXTRA_CFLAGS += -D$(ISPTYPE)
++
++$(obj)/qla2200.o: $(PREPALL)
++$(obj)/qla2200.o: ISPTYPE := qla22xx
++$(obj)/qla2200.o: EXTRA_CFLAGS += -D$(ISPTYPE)
++
++$(obj)/qla2300.o: $(PREPALL)
++$(obj)/qla2300.o: ISPTYPE := qla23xx
++$(obj)/qla2300.o: EXTRA_CFLAGS += -D$(ISPTYPE) -DTPX -DEXTENDED_IDS
++
++qla2100-objs := $(ISP2100_DIR_OBJS) $(ISP2100_FW)
++qla2200-objs := $(ISP2200_DIR_OBJS) $(ISP2200_FW)
++qla2300-objs := $(ISP2300_DIR_OBJS) $(ISP2300_FW)
++
++clean-files := $(ISP2100_DIR_SRCS) $(ISP2200_DIR_SRCS) $(ISP2300_DIR_SRCS)
+--- /dev/null Thu Apr 11 07:25:15 2002
++++ linux-2.5.73-n9560/drivers/scsi/qla2xxx/README.qla2x00 Thu Jul 3 15:34:42 2003
+@@ -0,0 +1,744 @@
++ QLogic Fibre Channel Driver
++ for Red Hat Linux 7.2, 7.3, and Advanced Server 2.1
++ and Suse Linux 7.3, and Enterprise 7
++
++Products supported: QLA22XX, QLA23XX
++
++09/10/2002
++
++Contents
++--------
++
++1. OS Support
++
++2. Supported Features
++
++3. Release History
++
++4. Saving the Driver Source to Diskette
++
++5. Installing the Driver
++
++ 5.1 Building the driver from the Source
++ 5.1.1. Building a Uni-Processor (UP) version of the driver
++ 5.1.2. Building a Symmetric Multi-Processor(SMP) version of the
++ Driver
++ 5.2 Load the Driver Manually using INSMOD or MODPROBE
++ 5.3 Making a RAMDISK Image to Load the Driver
++
++6. Driver Parameters
++
++ 6.1 System Parameters
++ 6.1.1 Multiple LUN Support
++ 6.2 NVRAM Parameters
++ 6.3 Driver Command Line Parameters
++
++7. Limitations
++
++8. Additional Notes
++
++ 8.1 Proc Filesystem Support
++ 8.2 Co-existence of QLogic 4.x and 6.x Linux Drivers
++ 8.3 Failover Support
++ 8.3.1 How to enable the Failover support in the Driver
++ 8.3.2 Using SANsurfer with QLA2XXX Driver the First Time
++ 8.3.3 Configuration Changes Made via SANsurfer
++ 8.4 Persistent Binding
++
++9. Diskette Content
++
++10. Contacting QLogic
++
++
++**********************************************************************
++
++
++1. OS Support
++-------------
++
++This driver works with Red Hat Linux 7.2, 7.3, and Advanced Server
++2.1 and Suse Linux 7.3 and Enterprise 7. Earlier or later versions
++of Linux may be supported but were not tested at the time of this
++release. Refer to the SUPPORTED_KERNEL_VERSION.txt file for a list
++of kernel versions tested with this release.
++
++
++**********************************************************************
++
++
++2. Supported Features
++---------------------
++
++* FCAL - direct attach loop
++* Point-to-point
++* Fabric support
++* Initiator mode only
++* Fault recovery on down loops
++* Persistent binding
++* Extended LUN support up to 255 LUNs
++* FC tape support
++* IPFC support
++* Non Failover and Failover capability
++
++
++**********************************************************************
++
++
++3. Release History
++------------------
++
++Please refer to Release Notes (release.txt).
++
++
++**********************************************************************
++
++
++4. Saving the Driver Source to Diskette
++---------------------------------------
++
++1. Download the failover or non-failover qla2x00src-vx.yy-*.tgz file
++ from QLogic's website.
++
++ * Failover compressed file has suffix "fo" while non failover
++ does not.
++
++2. If prompted "What would you like to do with this file?" choose
++ "Save this file to disk."
++3. Insert a blank diskette and download to the diskette directly.
++
++
++**********************************************************************
++
++
++5. Installing the Driver
++------------------------
++
++NOTE: Refer to the file BUILD_KERNEL.txt for instructions on how
++ to build a custom kernel with the QLogic Driver embedded.
++
++5.1 Building a Driver from the Source Code
++-------------------------------------------
++
++From the source code, you can build a qla2200.o or qla2300.o for
++your UP or SMP system, and load the driver manually or automatically
++using a RAMDISK image during system boot time.
++
++
++5.1.1 Building a Uni-Processor (UP) Version of the Driver
++---------------------------------------------------------
++
++1. Extract the kernel-headers and kernel-sources RPM files from the
++ first RedHat CD:
++
++ # cd /mnt/cdrom/RedHat/RPMS
++ # rpm -iv kernel-headers*.rpm (not required for Red Hat 7.3)
++ # rpm -iv kernel-source*.rpm
++
++2. Using the diskette you created in Section 4, copy the
++ qla2x00src-vx.yy-*.tgz file to /qla2x00. Follow these steps from
++ the "/" (root) directory:
++
++ # mkdir qla2x00
++ # cd qla2x00
++ # mount /mnt/floppy
++ # cp /mnt/floppy/*.tgz . (the period at the end is required)
++ # tar -xvzf *.tgz
++ # cd qlogic
++ # ./drvsetup (this will extract the source files in to the
++ current directory)
++
++3. Build the Driver qla2200.o and qla2300.o from the source code by
++ typing:
++
++ # make all
++
++ For SuSE Distribution:
++
++ # make all OSVER=linux
++
++4. To load the driver manually, see section 5.2. To make a RAMDISK
++ image to load the driver during system boot time, see section 5.3.
++
++
++5.1.2. Building a Symmetric Multi-Processor (SMP) Version of the Driver
++-----------------------------------------------------------------------
++
++1. Extract the kernel-headers and kernel-source RPM files from the
++ first RedHat CD:
++
++ # cd /mnt/cdrom/RedHat/RPMS
++ # rpm -iv kernel-headers*.rpm (not required for Red Hat 7.3)
++ # rpm -iv kernel-source*.rpm
++
++2. Using the diskette you created in Section 4, copy the
++ qla2x00src-vx.yy-*.tgz file to /qla2x00. Follow these steps from
++ the "/" (root) directory:
++
++ # mkdir qla2x00
++ # cd qla2x00
++ # mount /mnt/floppy
++ # cp /mnt/floppy/*.tgz . (the period at the end is required)
++ # tar -xvzf *.tgz
++ # cd qlogic
++ # ./drvsetup (this will extract the source files in to the
++ current directory)
++
++3. Build the Driver qla2200.o and qla2300.o from the source code by
++ typing:
++
++ # make all SMP=1
++
++ For SuSE Distribution:
++
++ # make all SMP=1 OSVER=linux
++
++4. To load the driver manually, see section 5.2. To make a RAMDISK
++ image to load the driver during system boot time, see section 5.3.
++
++
++5.2 Load the Driver Manually using INSMOD or MODPROBE
++------------------------------------------------------
++
++Before loading the driver manually, first build the driver binary from
++the driver source files as described in sections 5.1.1 and 5.1.2.
++
++- To load the driver directly from the local build directory, type
++ the following:
++
++ # insmod qla2200.o
++ or
++ # insmod qla2300.o
++
++- To load the driver using modprobe:
++
++ 1. Build the driver qla2200.o and qla2300.o from the source
++ code by typing:
++
++ # make all install
++
++ For SuSE Distribution:
++
++ # make all OSVER=linux install
++
++ 2. To ensure that the older driver binary included in the
++ original distribution does not interfere with the updated
++ version, please rename the old driver binary as follows:
++
++ # cd /lib/modules/<kernel_version>/kernel/drivers/addon/qla2200
++ # mv qla2200.o qla2200_rh.o
++ # mv qla2300.o qla2300_rh.o
++
++ 3. Type the following to load the Driver:
++
++ # modprobe qla2200
++ or
++ # modprobe qla2300
++
++
++5.3 Making a RAMDISK Image to Load the Driver
++----------------------------------------------
++
++1. Build the Driver binary files (see 5.1.1 and 5.1.2).
++
++2. Copy the files to:
++
++ /lib/modules/<kernel version>/kernel/drivers/scsi/
++
++
++NOTE: To ensure that the older Driver binary included in the original
++ distribution does not interfere with the updated version,
++ please rename the old Driver binary as follows:
++
++ # cd /lib/modules/<kernel_version>/kernel/drivers/addon/qla2200
++ # mv qla2200.o qla2200_rh.o
++ # mv qla2300.o qla2300_rh.o
++
++3. Add the following line to /etc/modules.conf.
++
++ alias scsi_hostadapter0 qla2200
++ or
++ alias scsi_hostadapter0 qla2300
++
++NOTE: Must add one entry for each HBA in the system. For example,
++ If two QLA2200 hbas are installed add the following:
++
++ alias scsi_hostadapter0 qla2200
++ alias scsi_hostadapter1 qla2200
++
++4. Type the following command:
++
++ # mkinitrd -f <ramdisk image file name> <kernel version>
++
++NOTE: This step will overwrite the original ramdisk image file if
++ executed within the /boot directory. Specify a unique ramdisk
++ image name to preserve the original ramdisk image.
++
++ - Copy the file to /boot.
++
++ For SuSE Distribution:
++
++ - Type the following command:
++
++ # /sbin/mk_initrd
++
++ NOTE: By default, the RAMDISK images created are:
++
++ /boot/initrd
++ /boot/initrd.suse
++
++5. Configure the boot loader with the new RAMDISK image.
++
++ For LILO:
++
++ Add "initrd=/boot/<ramdisk file name>" in
++ /etc/lilo.conf under one of the kernel entries
++ to use the RAMDISK image.
++
++ Run "lilo" and reboot system. Select the kernel
++ with the new RAMDISK image to come up.
++
++ For GRUB:
++
++ Add "initrd=/boot/<RAMDISK file name>" in
++ /etc/grub.conf under one of the kernel entries
++ to use the RAMDISK image.
++
++**********************************************************************
++
++
++6. Driver Parameters
++--------------------
++
++The Driver parameters are divided into System Parameters and NVRAM
++Parameters sections.
++
++
++6.1 System Parameters
++----------------------
++
++6.1.1 Multiple LUN Support
++--------------------------
++
++Support for multiple LUNs can be configured in one of three ways.
++Currently, the maximum number of LUNs that can be scanned for each
++device is 128.
++
++The kernel must be configured to have multiple LUN support enabled
++in order for non-zero LUNs to be configured and accessible. Use
++"make menuconfig" (as described in step 6, section 5.1) to build a
++kernel which has the option under SCSI Support enabled to probe all
++LUNs on SCSI devices.
++
++
++NOTE: If you have multiple adapters, set max_scsi_luns to the
++ largest number of LUNs supported by any one of these adapters.
++
++- To configure multiple LUN support during boot time, type the
++following at the boot prompt:
++
++boot: linux max_scsi_luns=128
++
++- If the SCSI Mid-Layer is compiled as a module, add the following
++line to the /etc/modules.conf file to scan for multiple LUNs at
++each boot:
++
++options scsi_mod max_scsi_luns=128
++
++- If the SCSI Mid-Layer is not compiled as a module, the boot loader
++can be configured to scan for multiple LUNs each time the system
++boots.
++
++For LILO, perform the following steps:
++
++a) Add the following line to each of the kernel images listed in the
++ /etc/lilo.conf file:
++
++append="max_scsi_luns=128"
++
++b) Run "lilo" and reboot the system.
++
++For GRUB, perform the following steps:
++
++a) Append the max_scsi_luns parameters to each of the kernel images
++listed in the /etc/grub.conf file. For example:
++
++kernel /vmlinux-2.4.7-10 ro root=/dev/hda2 max_scsi_luns=128
++
++b) Reboot the system.
++
++
++6.2 NVRAM Parameters
++---------------------
++
++The NVRAM features described below are hard-coded in the Driver. The
++changes made for the particular NVRAM feature in the Fast!Util do not
++take effect unless otherwise noted.
++
++None.
++
++
++6.3 Driver Command Line Parameters
++-----------------------------------
++
++'verbose' and 'quiet' are the available command line options.
++
++ verbose - Verbose detail debug information
++
++ quiet - Driver does not display:
++ Waiting for LIP to complete....
++ scsi%d: Topology - %s, Host Loop address 0x%x
++ scsi(%d): LIP occurred
++ scsi(%d): LIP reset occurred
++
++ Usage examples:
++
++ # insmod qla2200.o options = verbose
++ # insmod qla2300.o options = verbose
++ # insmod qla2200.o ql2xopts = quiet
++ # insmod qla2300.o ql2xopts = quiet
++
++
++**********************************************************************
++
++
++7. Limitations
++--------------
++
++ N/A
++
++
++**********************************************************************
++
++
++8. Additional Notes
++---------------------
++
++
++8.1 Proc Filesystem Support
++-----------------------------
++
++The /proc filesystem for the QLA2200 and QLA2300 driver can be found
++in the /proc/scsi/qla2200/ and /proc/scsi/qla2300/ directories. These
++directories contain a file for each QLogic Fibre Channel adapter
++in the system. Each file will present information about the adapter
++and transfer statistics for each discovered LUN.
++
++
++8.2 Co-existence of QLogic 4.x and 6.x Linux Drivers
++-----------------------------------------------------
++
++The 4.x driver provides support for QLA2100, QLA2200, and QLA23xx.
++The 6.x driver supports the QLA2200 and QLA23xx only. To make the
++drivers "co-exist", perform the following:
++
++ Option 1. 4.x support for QLA2100
++ 6.x support for QLA2200 and QLA23xx
++
++ o Remove QLA2200/QLA2300/QLA2312 support from the 4.x series
++ driver:
++
++ - Edit the qla2x00.c file
++
++ - Look for the following line:
++
++ {"QLA2300 ", QLA2300_DEVICE_ID, MAX_BUSES,
++
++ OR
++
++ {"QLA2312 ", QLA2312_DEVICE_ID, MAX_BUSES,
++
++ - Above the found line, add this line:
++
++ #if 0
++
++ - The resulting lines should read as:
++
++ #if 0
++ {"QLA2300 ", QLA2300_DEVICE_ID, MAX_BUSES,
++
++ OR
++
++ #if 0
++ {"QLA2312 ", QLA2312_DEVICE_ID, MAX_BUSES,
++
++ - Look for the following line:
++
++ {"QLA2100 ", QLA2100_DEVICE_ID, MAX_BUSES,
++
++ - Above the found line, add this line:
++
++ #endif
++
++ - The resulting lines should read as:
++
++ #endif
++ {"QLA2100 ", QLA2100_DEVICE_ID, MAX_BUSES,
++
++ Option 2. 4.x support for QLA2100 and QLA2200
++ 6.x support for QLA23xx
++
++ o Remove QLA2300/QLA2312 support from the 4.x series driver:
++
++ - Edit the qla2x00.c file
++
++ - Look for the following line:
++
++ {"QLA2300 ", QLA2300_DEVICE_ID, MAX_BUSES,
++
++ OR
++
++ {"QLA2312 ", QLA2312_DEVICE_ID, MAX_BUSES,
++
++ - Above the found line, add this line:
++
++ #if 0
++
++ - The resulting lines should read as:
++
++ #if 0
++ {"QLA2300 ", QLA2300_DEVICE_ID, MAX_BUSES,
++
++ OR
++
++ #if 0
++ {"QLA2312 ", QLA2312_DEVICE_ID, MAX_BUSES,
++
++ - Look for the following line:
++
++ {"QLA2200 ", QLA2200_DEVICE_ID, MAX_BUSES,
++
++ - Above the found line, add this line:
++
++ #endif
++
++ - The resulting lines should read as:
++
++ #endif
++ {"QLA2200 ", QLA2200_DEVICE_ID, MAX_BUSES,
++
++
++8.3 Failover Support
++---------------------
++
++8.3.1 How to enable the Failover support in the Driver
++-------------------------------------------------------
++
++Failover support can be enabled in the QLA2XXX driver by enabling the
++macro MPIO_SUPPORT in qla_settings.h file ie
++
++#define MPIO_SUPPORT 1
++
++Note: The failover distribution package, qla2x00src-vx.yy.zz-fo.tgz,
++has the above macro enabled by default.
++
++
++8.3.2 Using SANsurfer with QLA2XXX Driver the First Time
++________________________________________________________
++
++1. To work with SANsurfer, the driver should always be built
++ with MPIO_SUPPORT set to 1 in qla_settings.h.
++
++2. Add the following parameter in modules.conf file:
++
++ options qla2200 ConfigRequired=1 ql2xopts=
++ or
++ options qla2300 ConfigRequired=1 ql2xopts=
++
++3. Now you can load the driver and SANsurfer.
++
++
++8.3.3 Configuration Changes Made via SANsurfer
++--------------------------------------------
++
++1. LUN Masking
++
++ For the new LUN masking configuration to take effect, the
++ driver must be reloaded. The following is an example of
++ the sequence of actions to take:
++
++ - Load the driver:
++
++ modprobe <driver>
++
++ - Load the qlremote agent.
++
++ - Start the GUI and connect it to the destination system.
++
++ - Make LUN masking changes.
++
++ - Disconnect the host from GUI and stop qlremote agent.
++
++ - Unload the driver:
++
++ modprobe -r <driver>
++
++ - Reload the driver:
++
++ modprobe <driver>
++
++ - Load qlremote agent again.
++
++ - Start the GUI and connect it to the destination system.
++
++ Now you should see the updated LUN masking configuration.
++
++Please note that when using modprobe to load the driver, the
++length of the option line specified in /etc/modules.conf file
++has a limit of 2K characters. Any longer option line will cause
++a string overflow error from modprobe.
++
++
++8.4 Persistent Binding
++______________________
++
++
++The Persistent Binding information consists of some adapter parameter
++entries along with some target entries. However, the Linux entries
++have been shorten to save space on the command line. Currently, there
++is no limit on the size of the command line when using modprobe. But,
++if you embedded the driver in the kernel you are using lilo that has
++a string size limitation.
++
++Persistent Binding can be specified in two ways. Manually or using
++SANsurfer. We recommend using SANsurfer for ease of use. Reference
++section 8.3.3 for additonal information about SANsurfer. The
++following is the procedure to manually add persistent binding
++commands:
++
++The driver displays the current configuration when the displayConfig
++command line option is specified. The persistent binding
++configuration is found in /var/log/messages file. It prints the
++configuration information in the format required by the driver.
++The best way to extract configuration messages is to use grep and
++direct the output to a file. You need to remove the Linux timestamp at
++the beginning of each message and combine them together on single line.
++For example
++ #insmod qla2200 displayConfig=1
++ #grep "scsi-qla" /var/log/messages > /tmp/info.cfg
++
++The format of the persistent binding commands is as follows:
++
++Device descriptions
++
++scsi-qla<#>-adapter-port=<adapter port name value>;
++The designated by qla<#>, where the <#> is the adapter instance number.
++
++The parameter specifies the FC port name to be used for the adapter.
++where <adapter port name value> is the FC port name value in hexa-
++ decimal format. If this entry is not specified in the conf file,
++ the default value is the adapter's port name as saved in the NVRAM.
++Example:
++scsi-qla00-adapter-port=210000e08b01158d\;
++
++host adapter instance 0 has a portname of 210000e08b01158d
++
++scsi-qla<#1>-tgt-<#2>-di-<#3>-node=<device FC name>;
++This parameter associates the specified <device FC name> with the
++SCSI target ID value specified by <#2> and a device id value specified
++by <#3>. where <device FC name> type is the FC node name of the
++device, and <#2> is the SCSI target ID to be assigned to the device
++and <#3> is the device unique id.
++Where
++ <#1> Specifies the adapter instance number
++ <#2> Specifies the SCSI ID of Target
++ <#3> Specifies the path/device id
++
++scsi-qla<#1>-tgt-<#2>-di-<#3>-port=<device FC name>;
++This parameter associates the specified <device FC name> with the
++SCSI target ID value specified by <#2> and a device id value specified
++by <#3>. where <device FC name> type is the FC port
++Where
++ <#1> Specifies the adapter instance number
++ <#2> Specifies the SCSI ID of Target
++ <#3> Specifies the path/device id (always 0 for non-failover)
++
++name of the device, and <#2> is the SCSI target ID to be assigned to
++the device and <#3> is the device unique id.
++
++scsi-qla<#1>-tgt-<#2>-di-<#3>-disabled=<256 bit mask>;
++This parameter associates the specified <256 bit mask> with the
++SCSI target ID value specified by <#2> and a device id value specified
++by <#3>.
++
++Where
++ <#1> Specifies the adapter instance number
++ <#2> Specifies the SCSI ID of Target
++ <#3> Specifies the path/device id
++
++<256 bit mask>
++msb lsb
++ 000000000000000000000000000000000000000000000000000000000000000F
++
++the mask above will make the first four luns, 3, 2, 1, and 0 of a
++given Target disabled on that target/path.
++
++This mask specification is heavily type checked to be a sequence of
++64 hex digits.
++
++**********************************************************************
++
++
++9. Diskette Content
++--------------------
++
++The qla2x00src-vx.yy.zz-*.tgz files can be extracted into the
++following files:
++
++ listops.h
++ Makefile.kernel
++ Config.in
++ makefile
++ qla_settings.h
++ qla_debug.h
++ ql2100_fw.h
++ ql2200_fw.h
++ ql2300_fw.h
++ ql2200ip_fw.h
++ ql2300ip_fw.h
++ qla2100.c
++ qla2200.c
++ qla2300.c
++ qla2x00.c
++ qla2x00.h
++ qla2x00_ioctl.c
++ qla_vendor.c
++ qla_cfg.c
++ qla_cfgln.c
++ qla_fo.c
++ qla_fo.cfg
++ qla_inioct.c
++ qla_ip.c
++ qla_mbx.c
++ qla_mbx.h
++ exioctln.h
++ exioct.h
++ inioct.h
++ qla_cfg.h
++ qla_fo.h
++ qla_gbl.h
++ qla_ip.h
++ qlfo.h
++ qlfolimits.h
++ qlfoln.h
++ qla_version.h
++ revision.notes - Revision history
++ release.txt - Release notes
++ README.qla2x00 - This file
++
++
++**********************************************************************
++
++
++10. Contacting QLogic
++---------------------
++
++Please visit QLogic's website (www.qlogic.com). On this site you will
++find product information, our latest drivers, and links for technical
++assistance if needed.
++
++
++======================================================================
++
++
++ Copyright (c) 2003 QLogic Corporation. All rights reserved
++ worldwide.
+--- /dev/null Thu Apr 11 07:25:15 2002
++++ linux-2.5.73-n9560/drivers/scsi/qla2xxx/exioct.h Thu Jul 3 15:34:42 2003
+@@ -0,0 +1,947 @@
++/******************************************************************************
++ * QLOGIC LINUX SOFTWARE
++ *
++ * QLogic ISP2x00 device driver for Linux 2.5.x
++ * Copyright (C) 2003 Qlogic Corporation
++ * (www.qlogic.com)
++ *
++ * This program is free software; you can redistribute it and/or modify it
++ * under the terms of the GNU General Public License as published by the
++ * Free Software Foundation; either version 2, or (at your option) any
++ * later version.
++ *
++ * This program is distributed in the hope that it will be useful, but
++ * WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ * General Public License for more details.
++ *
++ ******************************************************************************/
++
++/*
++ * File Name: exioct.h
++ *
++ * San/Device Management Ioctl Header
++ * File is created to adhere to Solaris requirement using 8-space tabs.
++ *
++ * !!!!! PLEASE DO NOT REMOVE THE TABS !!!!!
++ * !!!!! PLEASE NO SINGLE LINE COMMENTS: // !!!!!
++ * !!!!! PLEASE NO MORE THAN 80 CHARS PER LINE !!!!!
++ *
++ * Revision History:
++ *
++ * Rev. 0 March 1, 2000
++ * YPL - Created.
++ *
++ * Rev. 1 March 2, 2000
++ * RLU - Updated with latest definitions. Added more comments.
++ *
++ * Rev. 2 May 16, 2000
++ * SP - Updated definitions and changed structures (March 27, 2000)
++ * SP - Addded structures
++ *
++ * Rev. 3 June 1, 2000
++ * THL - Made major changes to include all changes talked in our meeting.
++ *
++ * Rev. 4 June 5, 2000
++ * RLU - Added new definitions/structures for SDM_GET_AEN and SDM_REG_AEN
++ * functions.
++ * - Major definition/structure name changes as discussed in meetings.
++ * - Deleted duplicated command code and structure definitions.
++ *
++ * Rev. 4.1 June 14, 2000
++ * WTR - Moved Solaris specific defines to exioctso.h. This makes it
++ * possible for application developers to include only exioct.h
++ * in their Solaris application development.
++ *
++ * Rev. 4.2 June 15, 2000
++ * THL - Changed UINT16 and UINT32 back to WORD and DWORD for NT; otherwise,
++ * NT will get a compilation error for redefining UINT16 and UINT32.
++ * Added RISC_CODE/FLASH_RAM macros.
++ *
++ * Rev. 4.3 June 22, 2000
++ * THL - Changed SDM_FC_ADDR according to External Ioctls document.
++ * Added SDM_DEF_TYPE macros.
++ *
++ * Rev. 4.4 June 22, 2000
++ * THL - Moved NT specific defines to exioctnt.h.
++ *
++ * Rev. 4.5 August 15, 2000
++ * SP - Rolled back some changes made by Todd R.
++ * Kept new status code SDM_STATUS_NO_MEMORY
++ * Port types fabric and tape device
++ *
++ * Rev. 4.7 Sep 6, 2000
++ * YPL - Replace SDM_ with EXT_, _ISP with _CHIP.
++ * Add vendor specific statuses, device update, config defines.
++ *
++ * Rev. 5.0 Sep 13, 2000
++ * YPL - Update version to 5, remove max defines, make port type bit.
++ * Change HBA_PORT_PROPERTY to have bus/target/lun defined as UINT16
++ *
++ * Rev. 5.1 Sep 22, 2000
++ * THL - Add destination address for specify scsi address or FC address.
++ * Remove "not support" comment and add more macros.
++ *
++ * Rev. 5.2 Sep 27, 2000
++ * THL - Add new macros and structure for add and swap target device.
++ * Create new data structure for get port database.
++ * TLE - Merge changes needed for FailOver
++ *
++ * Rev. 5.3 Sep 29, 2000
++ * THL - Add access mode for NVRAM.
++ *
++ * Rev. 5.4 Oct 03, 2000
++ * THL - Add EXT_SC_GET_FC_STATISTICS.
++ *
++ * Rev. 5.5 Oct 18, 2000
++ * THL - Remove duplicated EXT_DEF_ADDR_MODE_32 and EXT_DEF_ADDR_MODE_16.
++ * Reformat new data structures and defines.
++ *
++ * Rev. 5.6 Oct 19, 2000
++ * RLU - Changed file name from ExIoct.h to exioct.h.
++ * - Added definition of EXT_RNID_DATA for API implementation.
++ * - Reformat some lines to conform to the format agreed
++ * upon in IOCTL meeting (and mentioned at beginning of
++ * this file).
++ *
++ * Rev. 5.7 Oct 25, 2000
++ * BN - Added LUN bitmask structure and macros
++ *
++ * Rev. 5.8 Oct 25, 2000
++ * BN - Added EXT_CC_DRIVER_PROP define
++ *
++ * Rev. 5.9 Oct 26, 2000
++ * BN - Sync with UnixApi project
++ *
++ * Rev. 5.10 Oct 30, 2000
++ * BN - Remove not needed #define for EXT_CC_DRIVER_PROP
++ * - Add EXT_ to IS_LUN_BIT_SET, SET_LUN_BIT, CLR_LUN_BIT
++ *
++ * Rev. 5.11 Nov 1, 2000
++ * BN - Increased [1] of EXT_DEVICEDATA to [EXT_MAX_TARGET]
++ * TLE - Decreased [EXT_MAX_TARGET] of EXT_DEVICEDATA to [1]
++ *
++ * Rev. 5.12 Nov 7, 2000
++ * RLU - Deleted EXT_DEF_MAX_LUNS define and changed all references
++ * to it to use EXT_MAX_LUN.
++ * - Changed the revision numbers for the last 2 revisions down
++ * to use 5.x.
++ *
++ * Rev. 5.13 Nov 14, 2000
++ * WTR - Fixed pointer referencing problem in the LUN_BIT_MASK macros.
++ * Updated comment at bit mask definition.
++ *
++ * Rev. 5.14 Dec 6, 2000
++ * THL - Added Local and LoopID to discovered port/target property.
++ *
++ * Rev. 5.15 Dec 24, 2000
++ * YPL - Enhance port connection modes and driver attrib
++ *
++ * Rev. 5.16 Dec 27, 2000
++ * TLE - Add BufferHandle member to _EXT_ASYNC_EVENT data structure for
++ * SCTP support
++ *
++ * Rev. 5.17 Jan 10, 2001
++ * YPL - Add edtov, ratov & fabric name in port property
++ *
++ * Rev. 5.18 Feb 28, 2001
++ * YPL - Remove SCTP fields and add fabric parameter flags in port property
++ *
++ * Rev. 5.19 Mar 08, 2001
++ * YPL - Remove SCTP fields from hba port prop
++ *
++ * Rev. 5.20 June 11, 2001
++ * YPL - Change to reserved fields and add fabric name field in port property
++ *
++ * Rev. 5.21 June 29, 2001
++ * YPL - Merge in changes decided long time ago (use _DEF_ for defines) &
++ * reserved some EXT_CC for legacy ioctls, plus add RNID dataformat
++ * values definition
++ *
++ * Rev. 5.21 Sep 18, 2001
++ * SP - Added New return status codes
++ *
++ * Rev. 5.22 Oct 23, 2001
++ * SP - Change reserve fields to add fields to EXT_HBA_PORT
++ * Added port speeds and FC4Types fields and related definitions
++ *
++ * Rev. 5.23 Dec 04, 2001
++ * RL - Added port speed value definition.
++ *
++ * Rev. 5.24 Jan 20, 2002
++ * JJ - Added PCI device function bits field in EXT_CHIP structure.
++ *
++ * Rev. 5.25 Feb 04, 2002
++ * JJ - Added 16 bytes CDB support. Also added SenseLength field
++ * in SCSI_PASSTHRU structure.
++ *
++ * Rev. 5.26 Feb 12, 2002
++ * AV - Changed type size used in SCSI_PASSTHRU structure definitions
++ * to re-enable gcc's automatic structure padding for backward
++ * compatibility.
++ *
++ * Rev. 5.27 Mar 01, 2002
++ * RL - Added new SC value for SCSI3 command passthru.
++ *
++ * Rev. 5.28 Dec 09, 2002
++ * Sync up with NT version of exioct.h:
++ * TLE - Modify EXT_RNID_REQ data structure for IBM SendRNID workaround
++ * YPL - Add firmware state (online diagnostics)
++ * YPL - Add ELS PS
++ * YPL - Add els event, # of els buffers & size
++ */
++
++#ifndef _EXIOCT_H
++#define _EXIOCT_H
++
++/*
++ * NOTE: the following version defines must be updated each time the
++ * changes made may affect the backward compatibility of the
++ * input/output relations of the SDM IOCTL functions.
++ */
++#define EXT_VERSION 5
++
++
++/*
++ * OS independent General definitions
++ */
++#define EXT_DEF_SIGNATURE_SIZE 8
++#define EXT_DEF_WWN_NAME_SIZE 8
++#define EXT_DEF_WWP_NAME_SIZE 8
++#define EXT_DEF_SERIAL_NUM_SIZE 4
++#define EXT_DEF_PORTID_SIZE 4
++#define EXT_DEF_PORTID_SIZE_ACTUAL 3
++#define EXT_DEF_MAX_STR_SIZE 128
++#define EXT_DEF_SCSI_PASSTHRU_CDB_LENGTH 16
++
++#define EXT_DEF_ADDR_MODE_32 1
++#define EXT_DEF_ADDR_MODE_64 2
++
++/*
++ * ***********************************************************************
++ * X OS type definitions
++ * ***********************************************************************
++ */
++#ifdef _MSC_VER /* NT */
++
++#pragma pack(1)
++#include "ExIoctNT.h"
++
++#elif defined(linux) /* Linux */
++
++#include "exioctln.h"
++
++#elif defined(sun) || defined(__sun) /* Solaris */
++
++#include "exioctso.h"
++
++#endif
++
++/*
++ * ***********************************************************************
++ * OS dependent General configuration defines
++ * ***********************************************************************
++ */
++#define EXT_DEF_MAX_HBA EXT_DEF_MAX_HBA_OS
++#define EXT_DEF_MAX_BUS EXT_DEF_MAX_BUS_OS
++#define EXT_DEF_MAX_TARGET EXT_DEF_MAX_TARGET_OS
++#define EXT_DEF_MAX_LUN EXT_DEF_MAX_LUN_OS
++
++/*
++ * ***********************************************************************
++ * Common header struct definitions for San/Device Mgmt
++ * ***********************************************************************
++ */
++typedef struct {
++ UINT64 Signature; /* 8 chars string */
++ UINT16 AddrMode; /* 2 */
++ UINT16 Version; /* 2 */
++ UINT16 SubCode; /* 2 */
++ UINT16 Instance; /* 2 */
++ UINT32 Status; /* 4 */
++ UINT32 DetailStatus; /* 4 */
++ UINT32 Reserved1; /* 4 */
++ UINT32 RequestLen; /* 4 */
++ UINT32 ResponseLen; /* 4 */
++ UINT64 RequestAdr; /* 8 */
++ UINT64 ResponseAdr; /* 8 */
++ UINT16 HbaSelect; /* 2 */
++ UINT16 VendorSpecificStatus[11]; /* 22 */
++ UINT64 VendorSpecificData; /* 8 chars string */
++} EXT_IOCTL, *PEXT_IOCTL; /* 84 / 0x54 */
++
++/*
++ * Addressing mode used by the user application
++ */
++#define EXT_ADDR_MODE EXT_ADDR_MODE_OS
++
++/*
++ * Status. These macros are being used for setting Status field in
++ * EXT_IOCTL structure.
++ */
++#define EXT_STATUS_OK 0
++#define EXT_STATUS_ERR 1
++#define EXT_STATUS_BUSY 2
++#define EXT_STATUS_PENDING 3
++#define EXT_STATUS_SUSPENDED 4
++#define EXT_STATUS_RETRY_PENDING 5
++#define EXT_STATUS_INVALID_PARAM 6
++#define EXT_STATUS_DATA_OVERRUN 7
++#define EXT_STATUS_DATA_UNDERRUN 8
++#define EXT_STATUS_DEV_NOT_FOUND 9
++#define EXT_STATUS_COPY_ERR 10
++#define EXT_STATUS_MAILBOX 11
++#define EXT_STATUS_UNSUPPORTED_SUBCODE 12
++#define EXT_STATUS_UNSUPPORTED_VERSION 13
++#define EXT_STATUS_MS_NO_RESPONSE 14
++#define EXT_STATUS_SCSI_STATUS 15
++#define EXT_STATUS_BUFFER_TOO_SMALL 16
++#define EXT_STATUS_NO_MEMORY 17
++#define EXT_STATUS_UNKNOWN 18
++#define EXT_STATUS_UNKNOWN_DSTATUS 19
++#define EXT_STATUS_INVALID_REQUEST 20
++
++#define EXT_STATUS_DEVICE_NOT_READY 21
++#define EXT_STATUS_DEVICE_OFFLINE 22
++#define EXT_STATUS_HBA_NOT_READY 23
++#define EXT_STATUS_HBA_QUEUE_FULL 24
++
++/*
++ * Detail Status contains the SCSI bus status codes.
++ */
++
++#define EXT_DSTATUS_GOOD 0x00
++#define EXT_DSTATUS_CHECK_CONDITION 0x02
++#define EXT_DSTATUS_CONDITION_MET 0x04
++#define EXT_DSTATUS_BUSY 0x08
++#define EXT_DSTATUS_INTERMEDIATE 0x10
++#define EXT_DSTATUS_INTERMEDIATE_COND_MET 0x14
++#define EXT_DSTATUS_RESERVATION_CONFLICT 0x18
++#define EXT_DSTATUS_COMMAND_TERMINATED 0x22
++#define EXT_DSTATUS_QUEUE_FULL 0x28
++
++/*
++ * Detail Status contains the needed Response buffer space(bytes)
++ * when Status = EXT_STATUS_BUFFER_TOO_SMALL
++ */
++
++
++/*
++ * Detail Status contains one of the following codes
++ * when Status = EXT_STATUS_INVALID_PARAM or
++ * = EXT_STATUS_DEV_NOT_FOUND
++ */
++#define EXT_DSTATUS_NOADNL_INFO 0x00
++#define EXT_DSTATUS_HBA_INST 0x01
++#define EXT_DSTATUS_TARGET 0x02
++#define EXT_DSTATUS_LUN 0x03
++#define EXT_DSTATUS_REQUEST_LEN 0x04
++#define EXT_DSTATUS_PATH_INDEX 0x05
++
++/*
++ * Currently supported DeviceControl / ioctl command codes
++ */
++#define EXT_CC_QUERY EXT_CC_QUERY_OS
++#define EXT_CC_SEND_FCCT_PASSTHRU EXT_CC_SEND_FCCT_PASSTHRU_OS
++#define EXT_CC_REG_AEN EXT_CC_REG_AEN_OS
++#define EXT_CC_GET_AEN EXT_CC_GET_AEN_OS
++#define EXT_CC_SEND_ELS_RNID EXT_CC_SEND_ELS_RNID_OS
++#define EXT_CC_SEND_SCSI_PASSTHRU EXT_CC_SCSI_PASSTHRU_OS
++#define EXT_CC_SEND_ELS_PASSTHRU EXT_CC_SEND_ELS_PASSTHRU_OS
++
++/*
++ * HBA port operations
++ */
++#define EXT_CC_GET_DATA EXT_CC_GET_DATA_OS
++#define EXT_CC_SET_DATA EXT_CC_SET_DATA_OS
++
++
++/* Reserved command codes. */
++#define EXT_CC_RESERVED0A EXT_CC_RESERVED0A_OS
++#define EXT_CC_RESERVED0B EXT_CC_RESERVED0B_OS
++#define EXT_CC_RESERVED0C EXT_CC_RESERVED0C_OS
++#define EXT_CC_RESERVED0D EXT_CC_RESERVED0D_OS
++#define EXT_CC_RESERVED0E EXT_CC_RESERVED0E_OS
++#define EXT_CC_RESERVED0F EXT_CC_RESERVED0F_OS
++#define EXT_CC_RESERVED0G EXT_CC_RESERVED0G_OS
++#define EXT_CC_RESERVED0H EXT_CC_RESERVED0H_OS
++#define EXT_CC_RESERVED0I EXT_CC_RESERVED0I_OS
++#define EXT_CC_RESERVED0J EXT_CC_RESERVED0J_OS
++#define EXT_CC_RESERVED0Z EXT_CC_RESERVED0Z_OS
++
++
++/*
++ * ***********************************************************************
++ * EXT_IOCTL SubCode definition.
++ * These macros are being used for setting SubCode field in EXT_IOCTL
++ * structure.
++ * ***********************************************************************
++ */
++
++/*
++ * Query.
++ * Uses with EXT_QUERY as the ioctl code.
++ */
++#define EXT_SC_QUERY_HBA_NODE 1
++#define EXT_SC_QUERY_HBA_PORT 2
++#define EXT_SC_QUERY_DISC_PORT 3
++#define EXT_SC_QUERY_DISC_TGT 4
++#define EXT_SC_QUERY_DISC_LUN 5 /* Currently Not Supported */
++#define EXT_SC_QUERY_DRIVER 6
++#define EXT_SC_QUERY_FW 7
++#define EXT_SC_QUERY_CHIP 8
++
++/*
++ * Sub codes for Get Data.
++ * Use in combination with EXT_GET_DATA as the ioctl code
++ */
++/* 1 - 99 Common */
++#define EXT_SC_GET_SCSI_ADDR 1 /* Currently Not Supported */
++#define EXT_SC_GET_ERR_DETECTIONS 2 /* Currently Not Supported */
++#define EXT_SC_GET_STATISTICS 3
++#define EXT_SC_GET_BUS_MODE 4 /* Currently Not Supported */
++#define EXT_SC_GET_DR_DUMP_BUF 5 /* Currently Not Supported */
++#define EXT_SC_GET_RISC_CODE 6 /* Currently Not Supported */
++#define EXT_SC_GET_FLASH_RAM 7 /* for backward compatible */
++
++/* 100 - 199 FC_INTF_TYPE */
++#define EXT_SC_GET_LINK_STATUS 101 /* Currently Not Supported */
++#define EXT_SC_GET_LOOP_ID 102 /* Currently Not Supported */
++#define EXT_SC_GET_LUN_BITMASK 103
++#define EXT_SC_GET_PORT_DATABASE 104 /* Currently Not Supported */
++#define EXT_SC_GET_PORT_DATABASE_MEM 105 /* Currently Not Supported */
++#define EXT_SC_GET_PORT_SUMMARY 106
++#define EXT_SC_GET_POSITION_MAP 107
++#define EXT_SC_GET_RETRY_CNT 108 /* Currently Not Supported */
++#define EXT_SC_GET_RNID 109
++#define EXT_SC_GET_RTIN 110 /* Currently Not Supported */
++#define EXT_SC_GET_FC_LUN_BITMASK 111
++#define EXT_SC_GET_FC_STATISTICS 112 /* for backward compatible */
++
++/* 200 - 299 SCSI_INTF_TYPE */
++#define EXT_SC_GET_SEL_TIMEOUT 201 /* Currently Not Supported */
++
++
++/*
++ * Sub codes for Set Data.
++ * Use in combination with EXT_SET_DATA as the ioctl code
++ */
++/* 1 - 99 Common */
++#define EXT_SC_RST_STATISTICS 3
++#define EXT_SC_RESERVED_BC7 7
++
++/* 100 - 199 FC_INTF_TYPE */
++#define EXT_SC_SET_LUN_BITMASK 103
++#define EXT_SC_SET_RNID 109
++#define EXT_SC_SET_FC_LUN_BITMASK 111
++#define EXT_SC_RESERVED_BC112 112
++#define EXT_SC_RESERVED_BC113 113
++
++/* 200 - 299 SCSI_INTF_TYPE */
++
++/* SCSI passthrough */
++#define EXT_SC_SEND_SCSI_PASSTHRU 0
++#define EXT_SC_SEND_FC_SCSI_PASSTHRU 1
++#define EXT_SC_SCSI3_PASSTHRU 2
++
++/* Read */
++
++/* Write */
++
++/* Reset */
++
++/* Request struct */
++
++
++/*
++ * Response struct
++ */
++typedef struct _EXT_HBA_NODE {
++ UINT8 WWNN [EXT_DEF_WWN_NAME_SIZE]; /* 8 */
++ UINT8 Manufacturer [EXT_DEF_MAX_STR_SIZE]; /* 128; "QLOGIC" */
++ UINT8 Model [EXT_DEF_MAX_STR_SIZE]; /* 128; "QLA2200" */
++ UINT8 SerialNum [EXT_DEF_SERIAL_NUM_SIZE];/* 4; 123 */
++ UINT8 DriverVersion[EXT_DEF_MAX_STR_SIZE]; /* 128; "7.4.3" */
++ UINT8 FWVersion [EXT_DEF_MAX_STR_SIZE]; /* 128; "2.1.6" */
++
++ /* The following field is currently not supported */
++ UINT8 OptRomVersion[EXT_DEF_MAX_STR_SIZE]; /* 128; "1.44" */
++
++ UINT16 PortCount; /* 2; 1 */
++ UINT16 InterfaceType; /* 2; FC/SCSI */
++
++ /* The following two fields are not yet supported */
++ UINT32 DriverAttr; /* 4 */
++ UINT32 FWAttr; /* 4 */
++
++ UINT32 Reserved[8]; /* 32 */
++} EXT_HBA_NODE, *PEXT_HBA_NODE; /* 696 */
++
++/* HBA node query interface type */
++#define EXT_DEF_FC_INTF_TYPE 1
++#define EXT_DEF_SCSI_INTF_TYPE 2
++
++typedef struct _EXT_HBA_PORT {
++ UINT8 WWPN[EXT_DEF_WWN_NAME_SIZE]; /* 8 */
++ UINT8 Id [EXT_DEF_PORTID_SIZE]; /* 4; 3 bytes valid Port Id. */
++ UINT16 Type; /* 2; Port Type */
++ UINT16 State; /* 2; Port State */
++ UINT16 Mode; /* 2 */
++ UINT16 DiscPortCount; /* 2 */
++ UINT16 DiscPortNameType; /* 2; USE_NODE_NAME or */
++ /* USE_PORT_NAME */
++ UINT16 DiscTargetCount; /* 2 */
++ UINT16 Bus; /* 2 */
++ UINT16 Target; /* 2 */
++ UINT16 Lun; /* 2 */
++ /* 2 */
++ UINT8 PortSupportedFC4Types;
++ UINT8 PortActiveFC4Types;
++ UINT8 FabricName[EXT_DEF_WWN_NAME_SIZE]; /* 8 */
++
++ /* 2*/
++ UINT8 PortSupportedSpeed;
++ UINT8 PortSpeed;
++ UINT16 Unused; /* 2 */
++ UINT32 Reserved[3]; /* 12 */
++} EXT_HBA_PORT, *PEXT_HBA_PORT; /* 56 */
++
++/* port type */
++#define EXT_DEF_INITIATOR_DEV 1
++#define EXT_DEF_TARGET_DEV 2
++#define EXT_DEF_TAPE_DEV 4
++#define EXT_DEF_FABRIC_DEV 8
++
++
++/* HBA port state */
++#define EXT_DEF_HBA_OK 0
++#define EXT_DEF_HBA_SUSPENDED 1
++#define EXT_DEF_HBA_LOOP_DOWN 2
++
++/* Connection mode */
++#define EXT_DEF_UNKNOWN_MODE 0
++#define EXT_DEF_P2P_MODE 1
++#define EXT_DEF_LOOP_MODE 2
++#define EXT_DEF_FL_MODE 3
++#define EXT_DEF_N_MODE 4
++
++/* Valid name type for Disc. port/target */
++#define EXT_DEF_USE_NODE_NAME 1
++#define EXT_DEF_USE_PORT_NAME 2
++
++/* FC4 type values */
++#define EXT_DEF_FC4_TYPE_SCSI 0x1
++#define EXT_DEF_FC4_TYPE_IP 0x2
++#define EXT_DEF_FC4_TYPE_SCTP 0x4
++#define EXT_DEF_FC4_TYPE_VI 0x8
++
++/* Port Speed values */
++#define EXT_DEF_PORTSPEED_1GBIT 1
++#define EXT_DEF_PORTSPEED_2GBIT 2
++#define EXT_DEF_PORTSPEED_10GBIT 4
++
++typedef struct _EXT_DISC_PORT {
++ UINT8 WWNN[EXT_DEF_WWN_NAME_SIZE]; /* 8 */
++ UINT8 WWPN[EXT_DEF_WWN_NAME_SIZE]; /* 8 */
++ UINT8 Id [EXT_DEF_PORTID_SIZE];
++ /* 4; last 3 bytes used. big endian */
++
++ /* The following fields currently are not supported */
++ UINT16 Type; /* 2; Port Type */
++ UINT16 Status; /* 2; Port Status */
++ UINT16 Bus; /* 2; n/a for Solaris */
++
++ UINT16 TargetId; /* 2 */
++ UINT8 Local; /* 1; Local or Remote */
++ UINT8 ReservedByte[1]; /* 1 */
++
++ UINT16 LoopID; /* 2; Loop ID */
++
++ UINT32 Reserved[7]; /* 28 */
++} EXT_DISC_PORT, *PEXT_DISC_PORT; /* 60 */
++
++typedef struct _EXT_DISC_TARGET {
++ UINT8 WWNN[EXT_DEF_WWN_NAME_SIZE]; /* 8 */
++ UINT8 WWPN[EXT_DEF_WWN_NAME_SIZE]; /* 8 */
++ UINT8 Id [EXT_DEF_PORTID_SIZE];
++ /* 4; last 3 bytes used. big endian */
++
++ /* The following fields currently are not supported */
++ UINT16 Type; /* 2; Target Type */
++ UINT16 Status; /* 2; Target Status*/
++ UINT16 Bus; /* 2; n/a for Solaris */
++
++ UINT16 TargetId; /* 2 */
++
++ /* The following field is currently not supported */
++ UINT16 LunCount; /* 2; n/a for nt */
++
++ UINT8 Local; /* 1; Local or Remote */
++ UINT8 ReservedByte[1]; /* 1 */
++
++ UINT16 LoopID; /* 2; Loop ID */
++
++ UINT16 Reserved[13]; /* 26 */
++} EXT_DISC_TARGET, *PEXT_DISC_TARGET; /* 60 */
++
++/* The following command is not supported */
++typedef struct _EXT_DISC_LUN { /* n/a for nt */
++ UINT16 Id; /* 2 */
++ UINT16 State; /* 2 */
++ UINT16 IoCount; /* 2 */
++ UINT16 Reserved[15]; /* 30 */
++} EXT_DISC_LUN, *PEXT_DISC_LUN; /* 36 */
++
++
++/* SCSI address */
++typedef struct _EXT_SCSI_ADDR {
++ UINT16 Bus; /* 2 */
++ UINT16 Target; /* 2 */
++ UINT16 Lun; /* 2 */
++ UINT16 Padding[5]; /* 10 */
++} EXT_SCSI_ADDR, *PEXT_SCSI_ADDR; /* 16 */
++
++
++/* Fibre Channel address */
++typedef struct _EXT_FC_ADDR {
++ union {
++ UINT8 WWNN[EXT_DEF_WWN_NAME_SIZE]; /* 8 */
++ UINT8 WWPN[EXT_DEF_WWN_NAME_SIZE]; /* 8 */
++ UINT8 Id[EXT_DEF_PORTID_SIZE]; /* 4 */
++ } FcAddr;
++ UINT16 Type; /* 2 */
++ UINT16 Padding[2]; /* 2 */
++} EXT_FC_ADDR, *PEXT_FC_ADDR; /* 24 */
++
++#define EXT_DEF_TYPE_WWNN 1
++#define EXT_DEF_TYPE_WWPN 2
++#define EXT_DEF_TYPE_PORTID 3
++#define EXT_DEF_TYPE_FABRIC 4
++
++
++/* Destination address */
++typedef struct _EXT_DEST_ADDR {
++ union {
++ UINT8 WWNN[EXT_DEF_WWN_NAME_SIZE]; /* 8 */
++ UINT8 WWPN[EXT_DEF_WWN_NAME_SIZE]; /* 8 */
++ UINT8 Id[EXT_DEF_PORTID_SIZE]; /* 4 */
++ struct {
++ UINT16 Bus; /* 2 */
++ UINT16 Target; /* 2 */
++ } ScsiAddr;
++ } DestAddr;
++ UINT16 DestType; /* 2 */
++ UINT16 Lun; /* 2 */
++ UINT16 Padding[2]; /* 4 */
++} EXT_DEST_ADDR, *PEXT_DEST_ADDR; /* 16 */
++
++
++#define EXT_DEF_DESTTYPE_WWNN 1
++#define EXT_DEF_DESTTYPE_WWPN 2
++#define EXT_DEF_DESTTYPE_PORTID 3
++#define EXT_DEF_DESTTYPE_FABRIC 4
++#define EXT_DEF_DESTTYPE_SCSI 5
++
++/* Statistic */
++typedef struct _EXT_HBA_PORT_STAT {
++ UINT32 ControllerErrorCount; /* 4 */
++ UINT32 DeviceErrorCount; /* 4 */
++ UINT32 TotalIoCount; /* 4 */
++ UINT32 TotalMBytes; /* 4; MB of data processed */
++ UINT32 TotalLipResets; /* 4; Total no. of LIP Reset */
++ UINT32 Reserved2; /* 4 */
++ UINT32 TotalLinkFailures; /* 4 */
++ UINT32 TotalLossOfSync; /* 4 */
++ UINT32 TotalLossOfSignals; /* 4 */
++ UINT32 PrimitiveSeqProtocolErrorCount;/* 4 */
++ UINT32 InvalidTransmissionWordCount; /* 4 */
++ UINT32 InvalidCRCCount; /* 4 */
++ UINT32 Reserved[16]; /* 64 */
++} EXT_HBA_PORT_STAT, *PEXT_HBA_PORT_STAT; /* 112 */
++
++
++/* Driver property */
++typedef struct _EXT_DRIVER {
++ UINT8 Version[EXT_DEF_MAX_STR_SIZE];/* 128 */
++ UINT16 NumOfBus; /* 2; Port Type */
++ UINT16 TargetsPerBus; /* 2; Port Status */
++ UINT16 LunsPerTarget; /* 2 */
++ UINT32 MaxTransferLen; /* 4 */
++ UINT32 MaxDataSegments; /* 4 */
++ UINT16 DmaBitAddresses; /* 2 */
++ UINT16 IoMapType; /* 2 */
++ UINT32 Attrib; /* 4 */
++ UINT32 InternalFlags[4]; /* 16 */
++ UINT32 Reserved[8]; /* 32 */
++} EXT_DRIVER, *PEXT_DRIVER; /* 198 */
++
++
++/* Firmware property */
++typedef struct _EXT_FW {
++ UINT8 Version[EXT_DEF_MAX_STR_SIZE];/* 128 */
++ UINT32 Attrib; /* 4 */
++ UINT16 Reserved[33]; /* 66 */
++} EXT_FW, *PEXT_FW; /* 198 */
++
++
++/* ISP/Chip property */
++typedef struct _EXT_CHIP {
++ UINT16 VendorId; /* 2 */
++ UINT16 DeviceId; /* 2 */
++ UINT16 SubVendorId; /* 2 */
++ UINT16 SubSystemId; /* 2 */
++ UINT16 PciBusNumber; /* 2 */
++ UINT16 PciSlotNumber; /* 2 */
++ UINT32 IoAddr; /* 4 */
++ UINT32 IoAddrLen; /* 4 */
++ UINT32 MemAddr; /* 4 */
++ UINT32 MemAddrLen; /* 4 */
++ UINT16 ChipType; /* 2 */
++ UINT16 InterruptLevel; /* 2 */
++ UINT16 OutMbx[8]; /* 16 */
++ UINT16 PciDevFunc; /* 2 */
++ UINT16 Reserved[15]; /* 30 */
++} EXT_CHIP, *PEXT_CHIP; /* 80 */
++
++
++/* Request Buffer for RNID */
++typedef struct _EXT_RNID_REQ {
++ EXT_FC_ADDR Addr; /* 14 */
++ UINT8 DataFormat; /* 1 */
++ UINT8 Pad; /* 1 */
++ UINT8 OptWWN[EXT_DEF_WWN_NAME_SIZE]; /* 8 */
++ UINT8 OptPortId[EXT_DEF_PORTID_SIZE]; /* 4 */
++ UINT32 Reserved[12]; /* 48 */
++ UINT8 Pad1[3]; /* 3 */
++} EXT_RNID_REQ, *PEXT_RNID_REQ; /* 79 */
++
++#define EXT_DEF_RNID_DFORMAT_NONE 0
++#define EXT_DEF_RNID_DFORMAT_TOPO_DISC 0xDF
++
++/* Request Buffer for Set RNID */
++typedef struct _EXT_SET_RNID_REQ {
++ UINT8 IPVersion[2];
++ UINT8 UDPPortNumber[2];
++ UINT8 IPAddress[16];
++ UINT32 Reserved[16];
++} EXT_SET_RNID_REQ, *PEXT_SET_RNID_REQ;
++
++/* RNID definition and data struct */
++#define SEND_RNID_RSP_SIZE 72
++
++typedef struct _RNID_DATA
++{
++ UINT8 WWN[16]; /* 16 */
++ UINT32 UnitType; /* 4 */
++ UINT8 PortId[4]; /* 4 */
++ UINT32 NumOfAttachedNodes; /* 4 */
++ UINT8 IPVersion[2]; /* 2 */
++ UINT8 UDPPortNumber[2]; /* 2 */
++ UINT8 IPAddress[16]; /* 16 */
++ UINT16 Reserved; /* 2 */
++ UINT16 TopoDiscFlags; /* 2 */
++} EXT_RNID_DATA, *PEXT_RNID_DATA; /* 52 */
++
++
++/* SCSI pass-through */
++typedef struct _EXT_SCSI_PASSTHRU {
++ EXT_SCSI_ADDR TargetAddr;
++ UINT8 Direction;
++ UINT8 CdbLength;
++ UINT8 Cdb[EXT_DEF_SCSI_PASSTHRU_CDB_LENGTH];
++ UINT32 Reserved[14];
++ UINT16 Reserved2;
++ UINT16 SenseLength;
++ UINT8 SenseData[256];
++} EXT_SCSI_PASSTHRU, *PEXT_SCSI_PASSTHRU;
++
++/* FC SCSI pass-through */
++typedef struct _EXT_FC_SCSI_PASSTHRU {
++ EXT_DEST_ADDR FCScsiAddr;
++ UINT8 Direction;
++ UINT8 CdbLength;
++ UINT8 Cdb[EXT_DEF_SCSI_PASSTHRU_CDB_LENGTH];
++ UINT32 Reserved[14];
++ UINT16 Reserved2;
++ UINT16 SenseLength;
++ UINT8 SenseData[256];
++} EXT_FC_SCSI_PASSTHRU, *PEXT_FC_SCSI_PASSTHRU;
++
++/* SCSI pass-through direction */
++#define EXT_DEF_SCSI_PASSTHRU_DATA_IN 1
++#define EXT_DEF_SCSI_PASSTHRU_DATA_OUT 2
++
++
++/* EXT_REG_AEN Request struct */
++typedef struct _EXT_REG_AEN {
++ UINT32 Enable; /* 4; non-0 to enable, 0 to disable. */
++ UINT32 Reserved; /* 4 */
++} EXT_REG_AEN, *PEXT_REG_AEN; /* 8 */
++
++/* EXT_GET_AEN Response struct */
++typedef struct _EXT_ASYNC_EVENT {
++ UINT32 AsyncEventCode; /* 4 */
++ union {
++ struct {
++ UINT8 RSCNInfo[EXT_DEF_PORTID_SIZE_ACTUAL];/* 3, BE */
++ UINT8 AddrFormat; /* 1 */
++ UINT32 Rsvd_1[2]; /* 8 */
++ } RSCN;
++
++ UINT32 Reserved[3]; /* 12 */
++ } Payload;
++} EXT_ASYNC_EVENT, *PEXT_ASYNC_EVENT; /* 16 */
++
++
++/* Asynchronous Event Codes */
++#define EXT_DEF_LIP_OCCURRED 0x8010
++#define EXT_DEF_LINK_UP 0x8011
++#define EXT_DEF_LINK_DOWN 0x8012
++#define EXT_DEF_LIP_RESET 0x8013
++#define EXT_DEF_RSCN 0x8015
++#define EXT_DEF_DEVICE_UPDATE 0x8014
++#define EXT_DEF_ELS 0x8200
++
++/* Required # of entries in the queue buffer allocated. */
++#define EXT_DEF_MAX_AEN_QUEUE EXT_DEF_MAX_AEN_QUEUE_OS
++#define EXT_DEF_MAX_ELS_BUFS EXT_DEF_MAX_ELS_BUFS_OS
++#define EXT_DEF_SIZE_ELS_BUF EXT_DEF_SIZE_ELS_BUF_OS
++
++/* Device type to get for EXT_SC_GET_PORT_SUMMARY */
++#define EXT_DEF_GET_KNOWN_DEVICE 0x1
++#define EXT_DEF_GET_VISIBLE_DEVICE 0x2
++#define EXT_DEF_GET_HIDDEN_DEVICE 0x4
++#define EXT_DEF_GET_FABRIC_DEVICE 0x8
++#define EXT_DEF_GET_LOOP_DEVICE 0x10
++
++/* Each entry in device database */
++typedef struct _EXT_DEVICEDATAENTRY
++{
++ UINT8 NodeWWN[8]; /* Node World Wide Name for device */
++ UINT8 PortWWN[8]; /* Port World Wide Name for device */
++ UINT8 PortID[3]; /* Current PortId for device */
++ UINT8 ControlFlags; /* Control flag */
++ EXT_SCSI_ADDR TargetAddress; /* scsi address */
++ UINT32 DeviceFlags; /* Flags for device */
++ UINT16 LoopID; /* Loop ID */
++ UINT16 BaseLunNumber;
++ UINT32 Reserved[32];
++} EXT_DEVICEDATAENTRY, *PEXT_DEVICEDATAENTRY;
++
++/* Device database information */
++typedef struct _EXT_DEVICEDATA
++{
++ UINT32 TotalDevices; /* Set to total number of device. */
++ UINT32 ReturnListEntryCount; /* Set to number of device entries */
++ /* returned in list. */
++
++ EXT_DEVICEDATAENTRY EntryList[1]; /* Variable length */
++} EXT_DEVICEDATA, *PEXT_DEVICEDATA;
++
++
++/* Swap Target Device Data structure */
++typedef struct _EXT_SWAPTARGETDEVICE
++{
++ EXT_DEVICEDATAENTRY CurrentExistDevice;
++ EXT_DEVICEDATAENTRY NewDevice;
++} EXT_SWAPTARGETDEVICE, *PEXT_SWAPTARGETDEVICE;
++
++/* LUN BitMask structure definition, array of 8bit bytes,
++ * 1 bit per lun. When bit == 1, the lun is masked.
++ * Most significant bit of mask[0] is lun 0.
++ * Least significant bit of mask[0] is lun 7.
++ */
++typedef struct _EXT_LUN_BIT_MASK {
++#if ((EXT_DEF_MAX_LUN & 0x7) == 0)
++ UINT8 mask[EXT_DEF_MAX_LUN >> 3];
++#else
++ UINT8 mask[(EXT_DEF_MAX_LUN + 8) >> 3 ];
++#endif
++} EXT_LUN_BIT_MASK, *PEXT_LUN_BIT_MASK;
++
++/*
++ * LUN mask bit manipulation macros
++ *
++ * P = Pointer to an EXT_LUN_BIT_MASK union.
++ * L = LUN number.
++ */
++#define EXT_IS_LUN_BIT_SET(P,L) \
++ (((P)->mask[L/8] & (0x80 >> (L%8)))?1:0)
++
++#define EXT_SET_LUN_BIT(P,L) \
++ ((P)->mask[L/8] |= (0x80 >> (L%8)))
++
++#define EXT_CLR_LUN_BIT(P,L) \
++ ((P)->mask[L/8] &= ~(0x80 >> (L%8)))
++
++#define EXT_DEF_LUN_BITMASK_LIST_MIN_ENTRIES 1
++#define EXT_DEF_LUN_BITMASK_LIST_MAX_ENTRIES 256
++
++#ifdef _WIN64
++#define EXT_DEF_LUN_BITMASK_LIST_HEADER_SIZE 32
++#else
++#define EXT_DEF_LUN_BITMASK_LIST_HEADER_SIZE \
++ offsetof(LUN_BITMASK_LIST_BUFFER, asBitmaskEntry)
++#endif
++
++#define EXT_DEF_LUN_COUNT 2048
++#define EXT_DEF_LUN_BITMASK_BYTES (EXT_DEF_LUN_COUNT / 8)
++
++typedef struct _EXT_LUN_BITMASK_ENTRY
++{
++ UINT8 NodeName[EXT_DEF_WWN_NAME_SIZE];
++ UINT8 PortName[EXT_DEF_WWN_NAME_SIZE];
++
++ UINT32 Reserved2;
++ UINT32 Reserved3;
++ UINT32 Reserved4;
++ UINT32 Reserved5; /* Pad to 32-byte header.*/
++
++ UINT8 Bitmask[EXT_DEF_LUN_BITMASK_BYTES];
++} EXT_LUN_BITMASK_ENTRY, *PEXT_LUN_BITMASK_ENTRY;
++
++/* Structure as it is stored in the config file.*/
++typedef struct _LUN_BITMASK_LIST
++{
++ UINT16 Version; /* Should be LUN_BITMASK_REGISTRY_VERSION */
++ UINT16 EntryCount; /* Count of variable entries following.*/
++ UINT32 Reserved1;
++ UINT32 Reserved2;
++ UINT32 Reserved3;
++ UINT32 Reserved4;
++ UINT32 Reserved5;
++ UINT32 Reserved6;
++ UINT32 Reserved7; /* Pad to 32-byte header.*/
++
++ EXT_LUN_BITMASK_ENTRY BitmaskEntry[1]; /* Variable-length data.*/
++
++} EXT_LUN_BITMASK_LIST, *PEXT_LUN_BITMASK_LIST;
++
++
++#define EXT_DEF_LUN_BITMASK_LIST_MIN_SIZE \
++ (EXT_DEF_LUN_BITMASK_LIST_HEADER_SIZE + \
++ (sizeof(EXT_DEF_LUN_BITMASK_ENTRY) * EXT_DEF_LUN_BITMASK_LIST_MIN_ENTRIES))
++#define EXT_DEF_LUN_BITMASK_LIST_MAX_SIZE \
++ (EXT_DEF_LUN_BITMASK_LIST_HEADER_SIZE + \
++ (sizeof(EXT_DEF_LUN_BITMASK_ENTRY) * EXT_DEF_LUN_BITMASK_LIST_MAX_ENTRIES))
++
++/* Request Buffer for ELS PT*/
++#define EXT_DEF_WWPN_VALID 1
++#define EXT_DEF_WWNN_VALID 2
++#define EXT_DEF_PID_VALID 4
++typedef struct _EXT_ELS_PT_REQ {
++ UINT8 WWNN[EXT_DEF_WWN_NAME_SIZE]; /* 8 */
++ UINT8 WWPN[EXT_DEF_WWN_NAME_SIZE]; /* 8 */
++ UINT8 Id[EXT_DEF_PORTID_SIZE]; /* 4 */
++ UINT16 ValidMask; /* 2 */
++ UINT16 Lid; /* 2 */
++ UINT16 Rxid; /* 2 */
++ UINT16 AccRjt; /* 2 */
++ UINT32 Reserved; /* 4 */
++} EXT_ELS_PT_REQ, *PEXT_ELS_PT_REQ; /* 32 */
++
++#ifdef _MSC_VER
++#pragma pack()
++#endif
++
++#endif /* _EXIOCT_H */
+--- /dev/null Thu Apr 11 07:25:15 2002
++++ linux-2.5.73-n9560/drivers/scsi/qla2xxx/exioctln.h Thu Jul 3 15:34:42 2003
+@@ -0,0 +1,255 @@
++/*****************************************************************************
++* QLOGIC LINUX SOFTWARE
++*
++* QLogic ISP2x00 device driver for Linux 2.5.x
++* Copyright (C) 2003 QLogic Corporation
++* (www.qlogic.com)
++*
++* This program is free software; you can redistribute it and/or modify it
++* under the terms of the GNU General Public License as published by the
++* Free Software Foundation; either version 2, or (at your option) any
++* later version.
++*
++* This program is distributed in the hope that it will be useful, but
++* WITHOUT ANY WARRANTY; without even the implied warranty of
++* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++* General Public License for more details.
++****************************************************************************/
++
++/*
++ * File Name: exioctln.h
++
++ Rev 14 February 25, 2003 RL
++ - Added EXT_CC_DRIVER_SPECIFIC ioctl command to return
++ some driver specific data that can be used by API library
++ to determine how to maintain backward compatibility
++ of certain features.
++
++ Rev 13 January 31, 2003 RL
++ - Changed the value of EXT_DEF_USE_HBASELECT to avoid
++ conflicting with older implementation of FO API lib.
++
++ Rev 12 January 20, 2003 RL
++ - Added EXT_DEF_USE_HBASELECT definition for use by
++ the SETINSTANCE command.
++
++ Rev 11 December 10, 2002 RL
++ - Added EXT_CC_SEND_ELS_PASSTHRU_OS definition.
++
++ Rev 10 October 26, 2001 RL
++ - Corrected MAX_HBA, MAX_TARGET and MAX_LUN values to 255.
++
++ Rev 9 July 26, 2001 RL
++ - Added definition of signed types.
++
++ Rev 8 July 05, 2001 RL
++ - Redefined ioctl command values.
++
++ Rev 7 Nov 06, 2000 BN
++ - Added EXT_DEF_MAX_AEN_QUEUE_OS define
++ - Added define for handle_hba_t
++
++ Rev 6 Oct 25, 2000 BN
++ - Added EXT_CC_DRIVER_PROP_OS define
++
++ Rev 5 Oct 25, 2000 BN
++ - Redo the copyright header and add AEN details
++
++ Rev 4 Oct 23, 2000 BN
++ - Added definition for BOOLEAN
++
++ Rev 3 Oct 23, 2000 BN
++ - Added definitions for EXT_ADDR_MODE_OS
++ and also include of <linux/ioctl.h>
++
++ Rev 2 Oct 18, 2000 BN
++ - Enable API Exention support
++
++ Rev 1 Original version Sep 7, 2000 BN
++
++*/
++
++
++#ifndef _EXIOCT_LN_H_
++#define _EXIOCT_LN_H_
++
++#include <linux/ioctl.h>
++
++#ifdef APILIB
++#include <stdint.h>
++#endif
++
++
++#define INT8 int8_t
++#define INT16 int16_t
++#define INT32 int32_t
++#define UINT8 uint8_t
++#define UINT16 uint16_t
++#define UINT32 uint32_t
++#define UINT64 void *
++#define BOOLEAN uint8_t
++
++typedef struct track_instance {
++ int handle;
++} track_instance_t;
++
++
++#if BITS_PER_LONG <= 32
++#define EXT_ADDR_MODE_OS EXT_DEF_ADDR_MODE_32
++#else
++#define EXT_ADDR_MODE_OS EXT_DEF_ADDR_MODE_64
++#endif
++
++
++#define QLMULTIPATH_MAGIC 'y'
++
++#define _QLBUILD /* for exioct.h to enable include of qinsdmgt.h */
++
++
++
++#define EXT_DEF_MAX_HBA_OS 255 /* 0 - 0xFE */
++#define EXT_DEF_MAX_BUS_OS 1
++#define EXT_DEF_MAX_TARGET_OS 255 /* 0 - 0xFE */
++#define EXT_DEF_MAX_LUN_OS 255 /* 0 - 0xFE */
++
++#define EXT_DEF_MAX_AEN_QUEUE_OS 64
++
++#define EXT_DEF_FC_HEADER_LEN 24
++#define EXT_DEF_ELS_RJT_LENGTH 0x08 /* 8 */
++#define EXT_DEF_ELS_RPS_ACC_LENGTH 0x40 /* 64 */
++#define EXT_DEF_ELS_RLS_ACC_LENGTH 0x1C /* 28 */
++
++#define EXT_DEF_USE_HBASELECT 0x02 /* bit 1: HbaSelect field now
++ * used to specify destination
++ * HBA of each command.
++ * SetInstance cmd is now
++ * issued only once during
++ * API initialization.
++ */
++
++
++/*****************/
++/* Command codes */
++/*****************/
++
++/*************************************************************/
++/* These are regular/external command codes, starting from 0 */
++/*************************************************************/
++#define EXT_CC_QUERY_OS /* QUERY */ \
++ _IOWR(QLMULTIPATH_MAGIC, 0x00, sizeof(EXT_IOCTL))
++#define EXT_CC_SEND_FCCT_PASSTHRU_OS /* FCCT_PASSTHRU */ \
++ _IOWR(QLMULTIPATH_MAGIC, 0x01, sizeof(EXT_IOCTL))
++#define EXT_CC_REG_AEN_OS /* REG_AEN */ \
++ _IOWR(QLMULTIPATH_MAGIC, 0x02, sizeof(EXT_IOCTL))
++#define EXT_CC_GET_AEN_OS /* GET_AEN */ \
++ _IOWR(QLMULTIPATH_MAGIC, 0x03, sizeof(EXT_IOCTL))
++#define EXT_CC_SEND_ELS_RNID_OS /* SEND_ELS_RNID */ \
++ _IOWR(QLMULTIPATH_MAGIC, 0x04, sizeof(EXT_IOCTL))
++#define EXT_CC_SCSI_PASSTHRU_OS /* SCSI_PASSTHRU */ \
++ _IOWR(QLMULTIPATH_MAGIC, 0x05, sizeof(EXT_IOCTL))
++
++#define EXT_CC_GET_DATA_OS /* GET_DATA */ \
++ _IOWR(QLMULTIPATH_MAGIC, 0x06, sizeof(EXT_IOCTL))
++#define EXT_CC_SET_DATA_OS /* SET_DATA */ \
++ _IOWR(QLMULTIPATH_MAGIC, 0x07, sizeof(EXT_IOCTL))
++
++/*****************************************/
++/* following are internal command codes. */
++/*****************************************/
++#define EXT_CC_RESERVED0A_OS \
++ _IOWR(QLMULTIPATH_MAGIC, 0x08, sizeof(EXT_IOCTL))
++#define EXT_CC_RESERVED0B_OS \
++ _IOWR(QLMULTIPATH_MAGIC, 0x09, sizeof(EXT_IOCTL))
++
++#define EXT_CC_RESERVED0C_OS \
++ _IOWR(QLMULTIPATH_MAGIC, 0x0a, sizeof(EXT_IOCTL))
++#define EXT_CC_RESERVED0D_OS \
++ _IOWR(QLMULTIPATH_MAGIC, 0x0b, sizeof(EXT_IOCTL))
++
++#define EXT_CC_RESERVED0E_OS \
++ _IOWR(QLMULTIPATH_MAGIC, 0x0c, sizeof(EXT_IOCTL))
++#define EXT_CC_RESERVED0F_OS \
++ _IOWR(QLMULTIPATH_MAGIC, 0x0d, sizeof(EXT_IOCTL))
++
++#define EXT_CC_RESERVED0G_OS \
++ _IOWR(QLMULTIPATH_MAGIC, 0x0e, sizeof(EXT_IOCTL))
++#define EXT_CC_RESERVED0H_OS \
++ _IOWR(QLMULTIPATH_MAGIC, 0x0f, sizeof(EXT_IOCTL))
++
++#define EXT_CC_RESERVED0I_OS \
++ _IOWR(QLMULTIPATH_MAGIC, 0x10, sizeof(EXT_IOCTL))
++#define EXT_CC_RESERVED0J_OS \
++ _IOWR(QLMULTIPATH_MAGIC, 0x11, sizeof(EXT_IOCTL))
++
++#define EXT_CC_RESERVED0Z_OS \
++ _IOWR(QLMULTIPATH_MAGIC, 0x21, sizeof(EXT_IOCTL))
++
++/********************************************************/
++/* These are additional regular/external command codes. */
++/********************************************************/
++#define EXT_CC_SEND_ELS_PASSTHRU_OS \
++ _IOWR(QLMULTIPATH_MAGIC, 0x30, sizeof(EXT_IOCTL))
++
++
++/********************************************************/
++/* Failover ioctl command codes range from 0xc0 to 0xdf */
++/********************************************************/
++
++
++/*******************************************************************/
++/* These are Linux driver implementation specific commands. Values */
++/* start from highest possible value and in decreasing order. */
++/*******************************************************************/
++
++#define EXT_CC_STARTIOCTL /* STARTIOCTL */ \
++ _IOWR(QLMULTIPATH_MAGIC, 0xff, sizeof(EXT_IOCTL))
++#define EXT_CC_SETINSTANCE /* SETINSTANCE */ \
++ _IOWR(QLMULTIPATH_MAGIC, 0xfe, sizeof(EXT_IOCTL))
++#define EXT_CC_WWPN_TO_SCSIADDR /* WWPN_TO_SCSIADDR */ \
++ _IOWR(QLMULTIPATH_MAGIC, 0xfd, sizeof(EXT_IOCTL))
++#define EXT_CC_DRIVER_SPECIFIC /* DRIVER_SPECIFIC */ \
++ _IOWR(QLMULTIPATH_MAGIC, 0xfc, sizeof(EXT_IOCTL))
++
++
++/*
++ * Response struct definition
++ */
++typedef struct _EXT_LN_DRV_VERSION {
++ UINT8 Major;
++ UINT8 Minor;
++ UINT8 Patch;
++ UINT8 Beta;
++ UINT8 Reserved[4];
++} EXT_LN_DRV_VERSION; /* 8 */
++
++typedef struct _EXT_LN_DRIVER_DATA {
++ EXT_LN_DRV_VERSION DrvVer; /* 8 */
++ UINT32 Reserved[14]; /* 56 */
++} EXT_LN_DRIVER_DATA, *PEXT_LN_DRIVER_DATA; /* 64 */
++
++
++
++
++
++
++/*
++ * Overrides for Emacs so that we almost follow Linus's tabbing style.
++ * Emacs will notice this stuff at the end of the file and automatically
++ * adjust the settings for this buffer only. This must remain at the end
++ * of the file.
++ * ---------------------------------------------------------------------------
++ * Local variables:
++ * c-indent-level: 2
++ * c-brace-imaginary-offset: 0
++ * c-brace-offset: -2
++ * c-argdecl-indent: 2
++ * c-label-offset: -2
++ * c-continued-statement-offset: 4
++ * c-continued-brace-offset: 0
++ * indent-tabs-mode: nil
++ * tab-width: 8
++ * End:
++ */
++
++#endif /* _EXIOCT_LN_H_ */
++
+--- /dev/null Thu Apr 11 07:25:15 2002
++++ linux-2.5.73-n9560/drivers/scsi/qla2xxx/inioct.h Thu Jul 3 15:34:42 2003
+@@ -0,0 +1,129 @@
++/******************************************************************************
++ * QLOGIC LINUX SOFTWARE
++ *
++ * QLogic ISP2x00 device driver for Linux 2.5.x
++ * Copyright (C) 2003 Qlogic Corporation
++ * (www.qlogic.com)
++ *
++ * This program is free software; you can redistribute it and/or modify it
++ * under the terms of the GNU General Public License as published by the
++ * Free Software Foundation; either version 2, or (at your option) any
++ * later version.
++ *
++ * This program is distributed in the hope that it will be useful, but
++ * WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ * General Public License for more details.
++ *
++ ******************************************************************************/
++
++/*
++ * File Name: inioct.h
++ *
++ * San/Device Management Ioctl Header
++ * File is created to adhere to Solaris requirement using 8-space tabs.
++ *
++ * !!!!! PLEASE DO NOT REMOVE THE TABS !!!!!
++ * !!!!! PLEASE NO SINGLE LINE COMMENTS: // !!!!!
++ * !!!!! PLEASE NO MORE THAN 80 CHARS PER LINE !!!!!
++ *
++ *
++ * Revision History:
++ *
++ * Rev. 0 June 15, 2001
++ * YPL - Created.
++ *
++ * Rev. 1 June 26, 2001
++ * YPL - Change the loop back structure and delete cc that is not used.
++ *
++ * Rev. 2 June 29, 2001
++ * YPL - Use new EXT_CC defines from exioct.h
++ *
++ * Rev. 3 July 12, 2001
++ * RL - Added definitions for loopback mbx command completion codes.
++ *
++ * Rev. 4 July 12, 2001
++ * RL - Added definitions for loopback mbx command completion codes.
++ *
++ * Rev. 5 October 9, 2002
++ * AV - Added definition for Read Option ROM IOCTL.
++ *
++ */
++
++#ifndef _INIOCT_H
++#define _INIOCT_H
++
++/*
++ * ***********************************************************************
++ * X OS type definitions
++ * ***********************************************************************
++ */
++#ifdef _MSC_VER /* NT */
++#pragma pack(1)
++#endif
++
++/*
++ * ***********************************************************************
++ * INT_IOCTL SubCode definition.
++ * These macros are being used for setting SubCode field in EXT_IOCTL
++ * structure.
++ * ***********************************************************************
++ */
++
++/*
++ * Currently supported DeviceControl / ioctl command codes
++ */
++#define INT_CC_GET_PORT_STAT_FC EXT_CC_RESERVED0A_OS
++#define INT_CC_LOOPBACK EXT_CC_RESERVED0B_OS
++#define INT_CC_UPDATE_OPTION_ROM EXT_CC_RESERVED0C_OS
++#define INT_CC_ADD_TARGET_DEVICE EXT_CC_RESERVED0D_OS
++#define INT_CC_READ_NVRAM EXT_CC_RESERVED0E_OS
++#define INT_CC_UPDATE_NVRAM EXT_CC_RESERVED0F_OS
++#define INT_CC_SWAP_TARGET_DEVICE EXT_CC_RESERVED0G_OS
++#define INT_CC_READ_OPTION_ROM EXT_CC_RESERVED0H_OS
++#define INT_CC_LEGACY_LOOPBACK EXT_CC_RESERVED0Z_OS
++
++
++
++/* NVRAM */
++#define INT_SC_NVRAM_HARDWARE 0 /* Save */
++#define INT_SC_NVRAM_DRIVER 1 /* Driver (Apply) */
++#define INT_SC_NVRAM_ALL 2 /* NVRAM/Driver (Save+Apply) */
++
++/* Loopback */
++typedef struct _INT_LOOPBACK_REQ
++{
++ UINT16 Options; /* 2 */
++ UINT32 TransferCount; /* 4 */
++ UINT32 IterationCount; /* 4 */
++ UINT64 BufferAddress; /* 8 */
++ UINT32 BufferLength; /* 4 */
++ UINT16 Reserved[9]; /* 18 */
++}
++INT_LOOPBACK_REQ, *PINT_LOOPBACK_REQ; /* 408 */
++
++typedef struct _INT_LOOPBACK_RSP
++{
++ UINT64 BufferAddress; /* 8 */
++ UINT32 BufferLength; /* 4 */
++ UINT16 CompletionStatus; /* 2 */
++ UINT16 CrcErrorCount; /* 2 */
++ UINT16 DisparityErrorCount; /* 2 */
++ UINT16 FrameLengthErrorCount; /* 2 */
++ UINT32 IterationCountLastError; /* 4 */
++ UINT16 Reserved[8]; /* 16 */
++}
++INT_LOOPBACK_RSP, *PINT_LOOPBACK_RSP; /* 40 */
++
++/* definition for interpreting CompletionStatus values */
++#define INT_DEF_LB_COMPLETE 0x4000
++#define INT_DEF_LB_PARAM_ERR 0x4006
++#define INT_DEF_LB_LOOP_DOWN 0x400b
++#define INT_DEF_LB_CMD_ERROR 0x400c
++
++
++#ifdef _MSC_VER
++#pragma pack()
++#endif
++
++#endif /* _INIOCT_H */
+--- /dev/null Thu Apr 11 07:25:15 2002
++++ linux-2.5.73-n9560/drivers/scsi/qla2xxx/ql2100tp_fw.c Thu Jul 3 15:34:42 2003
+@@ -0,0 +1,4866 @@
++/******************************************************************************
++ * QLOGIC LINUX SOFTWARE
++ *
++ * QLogic ISP2x00 device driver for Linux 2.5.x
++ * Copyright (C) 2003 Qlogic Corporation
++ * (www.qlogic.com)
++ *
++ * This program is free software; you can redistribute it and/or modify it
++ * under the terms of the GNU General Public License as published by the
++ * Free Software Foundation; either version 2, or (at your option) any
++ * later version.
++ *
++ * This program is distributed in the hope that it will be useful, but
++ * WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ * General Public License for more details.
++ *
++ *************************************************************************/
++
++/************************************************************************
++ * *
++ * --- ISP2100 Fabric Initiator/Target Firmware --- *
++ * with expanded LUN addressing *
++ * and FcTape (FCP-2) support *
++ * *
++ * *
++ ************************************************************************/
++/*
++ * Firmware Version 1.19.24 (14:02 Jul 16, 2002)
++ */
++
++#ifdef UNIQUE_FW_NAME
++unsigned short fw2100tp_version = 1*1024+19;
++#else
++unsigned short risc_code_version = 1*1024+19;
++#endif
++
++#ifdef UNIQUE_FW_NAME
++unsigned char fw2100tp_version_str[] = {1,19,24};
++#else
++unsigned char firmware_version[] = {1,19,24};
++#endif
++
++#ifdef UNIQUE_FW_NAME
++#define fw2100tp_VERSION_STRING "1.19.24"
++#else
++#define FW_VERSION_STRING "1.19.24"
++#endif
++
++#ifdef UNIQUE_FW_NAME
++unsigned short fw2100tp_addr01 = 0x1000 ;
++#else
++unsigned short risc_code_addr01 = 0x1000 ;
++#endif
++
++#ifdef UNIQUE_FW_NAME
++unsigned short fw2100tp_code01[] = {
++#else
++unsigned short risc_code01[] = {
++#endif
++ 0x0078, 0x102d, 0x0000, 0x95f1, 0x0000, 0x0001, 0x0013, 0x0018,
++ 0x0017, 0x2043, 0x4f50, 0x5952, 0x4947, 0x4854, 0x2032, 0x3030,
++ 0x3120, 0x514c, 0x4f47, 0x4943, 0x2043, 0x4f52, 0x504f, 0x5241,
++ 0x5449, 0x4f4e, 0x2049, 0x5350, 0x3231, 0x3030, 0x2046, 0x6972,
++ 0x6d77, 0x6172, 0x6520, 0x2056, 0x6572, 0x7369, 0x6f6e, 0x2030,
++ 0x312e, 0x3139, 0x2020, 0x2020, 0x2400, 0x2091, 0x2000, 0x20c1,
++ 0x0021, 0x2039, 0xffff, 0x2019, 0xaaaa, 0x2760, 0x2069, 0x7fff,
++ 0x20c1, 0x0020, 0x2c2c, 0x2d34, 0x2762, 0x236a, 0x2c24, 0x2d04,
++ 0x266a, 0x2562, 0xa406, 0x00c0, 0x1052, 0x20c1, 0x0021, 0x2c2c,
++ 0x2362, 0x2c04, 0x2562, 0xa306, 0x0040, 0x1052, 0x20c1, 0x0020,
++ 0x2039, 0x8fff, 0x20a1, 0xad00, 0x2708, 0x810d, 0x810d, 0x810d,
++ 0x810d, 0xa18c, 0x000f, 0x2001, 0x000a, 0xa112, 0xa00e, 0x21a8,
++ 0x41a4, 0x3400, 0x8211, 0x00c0, 0x105f, 0x2708, 0x3400, 0xa102,
++ 0x0040, 0x106f, 0x0048, 0x106f, 0x20a8, 0xa00e, 0x41a4, 0x20a1,
++ 0xa5f1, 0x2009, 0x0000, 0x20a9, 0x070f, 0x41a4, 0x3400, 0x20c9,
++ 0xaaff, 0x2059, 0x0000, 0x2b78, 0x7823, 0x0004, 0x2089, 0x25c7,
++ 0x2051, 0xa600, 0x2a70, 0x7762, 0xa786, 0x8fff, 0x0040, 0x1092,
++ 0x705f, 0xcd00, 0x705b, 0xccf1, 0x7067, 0x0200, 0x706b, 0x0200,
++ 0x0078, 0x109a, 0x705b, 0xbd01, 0x7067, 0x0100, 0x706b, 0x0100,
++ 0x705f, 0xbd00, 0x1078, 0x12df, 0x1078, 0x13ca, 0x1078, 0x1577,
++ 0x1078, 0x1ce9, 0x1078, 0x42ec, 0x1078, 0x76bf, 0x1078, 0x1355,
++ 0x1078, 0x2ac0, 0x1078, 0x4e93, 0x1078, 0x49a3, 0x1078, 0x594a,
++ 0x1078, 0x2263, 0x1078, 0x5c43, 0x1078, 0x5485, 0x1078, 0x2162,
++ 0x1078, 0x2240, 0x2091, 0x3009, 0x7823, 0x0000, 0x0090, 0x10cf,
++ 0x7820, 0xa086, 0x0002, 0x00c0, 0x10cf, 0x7823, 0x4000, 0x0068,
++ 0x10c7, 0x781b, 0x0001, 0x2091, 0x5000, 0x2091, 0x4080, 0x2a70,
++ 0x7003, 0x0000, 0x2001, 0x017f, 0x2003, 0x0000, 0x2a70, 0x7000,
++ 0xa08e, 0x0003, 0x00c0, 0x10ef, 0x1078, 0x365e, 0x1078, 0x2ae8,
++ 0x1078, 0x4ee3, 0x1078, 0x4b66, 0x2009, 0x0100, 0x2104, 0xa082,
++ 0x0002, 0x0048, 0x10f3, 0x1078, 0x5966, 0x0078, 0x10d6, 0x1079,
++ 0x10f7, 0x0078, 0x10dc, 0x1078, 0x7197, 0x0078, 0x10eb, 0x1101,
++ 0x1102, 0x11be, 0x10ff, 0x1246, 0x12dc, 0x12dd, 0x12de, 0x1078,
++ 0x1332, 0x007c, 0x127e, 0x0f7e, 0x2091, 0x8000, 0x7000, 0xa086,
++ 0x0001, 0x00c0, 0x1198, 0x1078, 0x3aec, 0x2079, 0x0100, 0x7844,
++ 0xa005, 0x00c0, 0x1198, 0x2011, 0x41dc, 0x1078, 0x5a45, 0x1078,
++ 0x1adf, 0x780f, 0x00ff, 0x7840, 0xa084, 0xfffb, 0x7842, 0x2011,
++ 0x8010, 0x73c4, 0x1078, 0x361b, 0x2001, 0xffff, 0x1078, 0x5ae6,
++ 0x723c, 0xc284, 0x723e, 0x2001, 0xa60c, 0x2014, 0xc2ac, 0x2202,
++ 0x1078, 0x6f9f, 0x2011, 0x0004, 0x1078, 0x8d1b, 0x1078, 0x489e,
++ 0x1078, 0x42d4, 0x0040, 0x1144, 0x7087, 0x0001, 0x70bf, 0x0000,
++ 0x1078, 0x3c9e, 0x0078, 0x1198, 0x1078, 0x4967, 0x0040, 0x114d,
++ 0x7a0c, 0xc2b4, 0x7a0e, 0x0078, 0x1159, 0x1078, 0x90a6, 0x70cc,
++ 0xd09c, 0x00c0, 0x1159, 0x7098, 0xa005, 0x0040, 0x1159, 0x1078,
++ 0x42b8, 0x70d7, 0x0000, 0x70d3, 0x0000, 0x72cc, 0x2079, 0xa652,
++ 0x7804, 0xd0ac, 0x0040, 0x1165, 0xc295, 0x72ce, 0xa296, 0x0004,
++ 0x0040, 0x1186, 0x2011, 0x0001, 0x1078, 0x8d1b, 0x7093, 0x0000,
++ 0x7097, 0xffff, 0x7003, 0x0002, 0x0f7f, 0x1078, 0x2677, 0x2011,
++ 0x0005, 0x1078, 0x70e0, 0x1078, 0x62d1, 0x0c7e, 0x2061, 0x0100,
++ 0x60e3, 0x0008, 0x0c7f, 0x127f, 0x0078, 0x119a, 0x7093, 0x0000,
++ 0x7097, 0xffff, 0x7003, 0x0002, 0x2011, 0x0005, 0x1078, 0x70e0,
++ 0x1078, 0x62d1, 0x0c7e, 0x2061, 0x0100, 0x60e3, 0x0008, 0x0c7f,
++ 0x0f7f, 0x127f, 0x007c, 0x0c7e, 0x20a9, 0x0082, 0x2009, 0x007e,
++ 0x017e, 0x027e, 0x037e, 0x2110, 0x027e, 0x2019, 0x0029, 0x1078,
++ 0x73d0, 0x027f, 0x1078, 0xa4f1, 0x037f, 0x027f, 0x017f, 0x1078,
++ 0x298e, 0x8108, 0x00f0, 0x11a0, 0x0c7f, 0x706f, 0x0000, 0x7070,
++ 0xa084, 0x00ff, 0x7072, 0x709b, 0x0000, 0x007c, 0x127e, 0x2091,
++ 0x8000, 0x7000, 0xa086, 0x0002, 0x00c0, 0x1244, 0x7094, 0xa086,
++ 0xffff, 0x0040, 0x11d1, 0x1078, 0x2677, 0x1078, 0x62d1, 0x0078,
++ 0x1244, 0x70cc, 0xd09c, 0x0040, 0x11fd, 0xd084, 0x0040, 0x11fd,
++ 0x0f7e, 0x2079, 0x0100, 0x790c, 0xc1b5, 0x790e, 0x0f7f, 0xd08c,
++ 0x0040, 0x11fd, 0x70d0, 0xa086, 0xffff, 0x0040, 0x11f9, 0x1078,
++ 0x27f7, 0x1078, 0x62d1, 0x70cc, 0xd094, 0x00c0, 0x1244, 0x2011,
++ 0x0001, 0x2019, 0x0000, 0x1078, 0x282f, 0x1078, 0x62d1, 0x0078,
++ 0x1244, 0x70d4, 0xa005, 0x00c0, 0x1244, 0x7090, 0xa005, 0x00c0,
++ 0x1244, 0x1078, 0x4967, 0x00c0, 0x1244, 0x2001, 0xa653, 0x2004,
++ 0xd0ac, 0x0040, 0x1227, 0x157e, 0x0c7e, 0x20a9, 0x007f, 0x2009,
++ 0x0000, 0x017e, 0x1078, 0x45c4, 0x00c0, 0x121a, 0x6000, 0xd0ec,
++ 0x00c0, 0x1222, 0x017f, 0x8108, 0x00f0, 0x1211, 0x0c7f, 0x157f,
++ 0x0078, 0x1227, 0x017f, 0x0c7f, 0x157f, 0x0078, 0x1244, 0x7003,
++ 0x0003, 0x7097, 0xffff, 0x2001, 0x0000, 0x1078, 0x24e8, 0x1078,
++ 0x3699, 0x2001, 0xa8b2, 0x2004, 0xa086, 0x0005, 0x00c0, 0x123c,
++ 0x2011, 0x0000, 0x1078, 0x70e0, 0x2011, 0x0000, 0x1078, 0x70ea,
++ 0x1078, 0x62d1, 0x1078, 0x639b, 0x127f, 0x007c, 0x017e, 0x0f7e,
++ 0x127e, 0x2091, 0x8000, 0x2079, 0x0100, 0x2009, 0x00f7, 0x1078,
++ 0x42a1, 0x7940, 0xa18c, 0x0010, 0x7942, 0x7924, 0xd1b4, 0x0040,
++ 0x125b, 0x7827, 0x0040, 0xd19c, 0x0040, 0x1260, 0x7827, 0x0008,
++ 0x007e, 0x037e, 0x157e, 0xa006, 0x1078, 0x5ae6, 0x7900, 0xa18a,
++ 0x0003, 0x0050, 0x1289, 0x7954, 0xd1ac, 0x00c0, 0x1289, 0x2009,
++ 0x00f8, 0x1078, 0x42a1, 0x7843, 0x0090, 0x7843, 0x0010, 0x20a9,
++ 0x09c4, 0x7820, 0xd09c, 0x00c0, 0x1281, 0x7824, 0xd0ac, 0x00c0,
++ 0x12ca, 0x00f0, 0x1279, 0x2001, 0x0001, 0x1078, 0x24e8, 0x0078,
++ 0x12d5, 0x7853, 0x0000, 0x782f, 0x0020, 0x20a9, 0x0050, 0x00e0,
++ 0x128f, 0x2091, 0x6000, 0x00f0, 0x128f, 0x7853, 0x0400, 0x782f,
++ 0x0000, 0x2009, 0x00f8, 0x1078, 0x42a1, 0x20a9, 0x000e, 0x0005,
++ 0x00f0, 0x129f, 0x7853, 0x1400, 0x7843, 0x0090, 0x7843, 0x0010,
++ 0x2019, 0x61a8, 0x7854, 0x0005, 0x0005, 0xd08c, 0x0040, 0x12b4,
++ 0x7824, 0xd0ac, 0x00c0, 0x12ca, 0x8319, 0x00c0, 0x12aa, 0x2009,
++ 0xa632, 0x2104, 0x8000, 0x200a, 0xa084, 0xfff0, 0x0040, 0x12c4,
++ 0x200b, 0x0000, 0x1078, 0x2588, 0x2001, 0x0001, 0x1078, 0x24e8,
++ 0x0078, 0x12d3, 0x2001, 0xa632, 0x2003, 0x0000, 0x7828, 0xc09d,
++ 0x782a, 0x7827, 0x0048, 0x7853, 0x0400, 0x157f, 0x037f, 0x007f,
++ 0x127f, 0x0f7f, 0x017f, 0x007c, 0x007c, 0x007c, 0x007c, 0x2a70,
++ 0x2061, 0xa8ad, 0x2063, 0x0001, 0x6007, 0x0013, 0x600b, 0x0018,
++ 0x600f, 0x0017, 0x2009, 0x0100, 0x2104, 0xa082, 0x0002, 0x0048,
++ 0x12f5, 0x7053, 0xffff, 0x0078, 0x12f7, 0x7053, 0x0000, 0x7057,
++ 0xffff, 0x706f, 0x0000, 0x7073, 0x0000, 0x1078, 0x90a6, 0x2061,
++ 0xa88d, 0x6003, 0x0909, 0x6007, 0x0000, 0x600b, 0x8800, 0x600f,
++ 0x0200, 0x6013, 0x00ff, 0x6017, 0x0003, 0x601b, 0x0000, 0x601f,
++ 0x07d0, 0x2061, 0xa895, 0x6003, 0x8000, 0x6007, 0x0000, 0x600b,
++ 0x0000, 0x600f, 0x0200, 0x6013, 0x00ff, 0x6017, 0x0000, 0x601b,
++ 0x0001, 0x601f, 0x0000, 0x2061, 0xa8a5, 0x6003, 0x514c, 0x6007,
++ 0x4f47, 0x600b, 0x4943, 0x600f, 0x2020, 0x2001, 0xa626, 0x2003,
++ 0x0000, 0x007c, 0x2091, 0x8000, 0x0068, 0x1334, 0x007e, 0x017e,
++ 0x2079, 0x0000, 0x7818, 0xd084, 0x00c0, 0x133a, 0x017f, 0x792e,
++ 0x007f, 0x782a, 0x007f, 0x7826, 0x3900, 0x783a, 0x7823, 0x8002,
++ 0x781b, 0x0001, 0x2091, 0x5000, 0x2091, 0x4080, 0x2079, 0xa600,
++ 0x7803, 0x0005, 0x0078, 0x1352, 0x007c, 0x2071, 0xa600, 0x715c,
++ 0x712e, 0x2021, 0x0001, 0xa190, 0x002d, 0xa298, 0x002d, 0x0048,
++ 0x136b, 0x7060, 0xa302, 0x00c8, 0x136b, 0x220a, 0x2208, 0x2310,
++ 0x8420, 0x0078, 0x135d, 0x200b, 0x0000, 0x74aa, 0x74ae, 0x007c,
++ 0x0e7e, 0x127e, 0x2091, 0x8000, 0x2071, 0xa600, 0x70ac, 0xa0ea,
++ 0x0010, 0x00c8, 0x137e, 0xa06e, 0x0078, 0x1388, 0x8001, 0x70ae,
++ 0x702c, 0x2068, 0x2d04, 0x702e, 0x206b, 0x0000, 0x6807, 0x0000,
++ 0x127f, 0x0e7f, 0x007c, 0x0e7e, 0x2071, 0xa600, 0x127e, 0x2091,
++ 0x8000, 0x70ac, 0x8001, 0x00c8, 0x1398, 0xa06e, 0x0078, 0x13a1,
++ 0x70ae, 0x702c, 0x2068, 0x2d04, 0x702e, 0x206b, 0x0000, 0x6807,
++ 0x0000, 0x127f, 0x0e7f, 0x007c, 0x0e7e, 0x127e, 0x2091, 0x8000,
++ 0x2071, 0xa600, 0x702c, 0x206a, 0x2d00, 0x702e, 0x70ac, 0x8000,
++ 0x70ae, 0x127f, 0x0e7f, 0x007c, 0x8dff, 0x0040, 0x13c0, 0x6804,
++ 0x6807, 0x0000, 0x007e, 0x1078, 0x13a4, 0x0d7f, 0x0078, 0x13b4,
++ 0x007c, 0x0e7e, 0x2071, 0xa600, 0x70ac, 0xa08a, 0x0010, 0xa00d,
++ 0x0e7f, 0x007c, 0x0e7e, 0x2071, 0xa8d6, 0x7007, 0x0000, 0x701b,
++ 0x0000, 0x701f, 0x0000, 0x2071, 0x0000, 0x7010, 0xa085, 0x8004,
++ 0x7012, 0x0e7f, 0x007c, 0x127e, 0x2091, 0x8000, 0x0e7e, 0x2270,
++ 0x700b, 0x0000, 0x2071, 0xa8d6, 0x7018, 0xa088, 0xa8df, 0x220a,
++ 0x8000, 0xa084, 0x0007, 0x701a, 0x7004, 0xa005, 0x00c0, 0x13f6,
++ 0x0f7e, 0x2079, 0x0010, 0x1078, 0x1408, 0x0f7f, 0x0e7f, 0x127f,
++ 0x007c, 0x0e7e, 0x2071, 0xa8d6, 0x7004, 0xa005, 0x00c0, 0x1406,
++ 0x0f7e, 0x2079, 0x0010, 0x1078, 0x1408, 0x0f7f, 0x0e7f, 0x007c,
++ 0x7000, 0x0079, 0x140b, 0x140f, 0x1479, 0x1496, 0x1496, 0x7018,
++ 0x711c, 0xa106, 0x00c0, 0x1417, 0x7007, 0x0000, 0x007c, 0x0d7e,
++ 0xa180, 0xa8df, 0x2004, 0x700a, 0x2068, 0x8108, 0xa18c, 0x0007,
++ 0x711e, 0x7803, 0x0026, 0x6824, 0x7832, 0x6828, 0x7836, 0x682c,
++ 0x783a, 0x6830, 0x783e, 0x6810, 0x700e, 0x680c, 0x7016, 0x6804,
++ 0x0d7f, 0xd084, 0x0040, 0x1439, 0x7007, 0x0001, 0x1078, 0x143e,
++ 0x007c, 0x7007, 0x0002, 0x1078, 0x1454, 0x007c, 0x017e, 0x027e,
++ 0x710c, 0x2011, 0x0040, 0xa182, 0x0040, 0x00c8, 0x1449, 0x2110,
++ 0xa006, 0x700e, 0x7212, 0x8203, 0x7822, 0x7803, 0x0020, 0x7803,
++ 0x0041, 0x027f, 0x017f, 0x007c, 0x017e, 0x027e, 0x137e, 0x147e,
++ 0x157e, 0x7014, 0x2098, 0x20a1, 0x0014, 0x7803, 0x0026, 0x710c,
++ 0x2011, 0x0040, 0xa182, 0x0040, 0x00c8, 0x1468, 0x2110, 0xa006,
++ 0x700e, 0x22a8, 0x53a6, 0x8203, 0x7822, 0x7803, 0x0020, 0x3300,
++ 0x7016, 0x7803, 0x0001, 0x157f, 0x147f, 0x137f, 0x027f, 0x017f,
++ 0x007c, 0x137e, 0x147e, 0x157e, 0x2099, 0xa6fa, 0x20a1, 0x0018,
++ 0x20a9, 0x0008, 0x53a3, 0x7803, 0x0020, 0x127e, 0x2091, 0x8000,
++ 0x7803, 0x0041, 0x7007, 0x0003, 0x7000, 0xc084, 0x7002, 0x700b,
++ 0xa6f5, 0x127f, 0x157f, 0x147f, 0x137f, 0x007c, 0x137e, 0x147e,
++ 0x157e, 0x2001, 0xa729, 0x209c, 0x20a1, 0x0014, 0x7803, 0x0026,
++ 0x2001, 0xa72a, 0x20ac, 0x53a6, 0x2099, 0xa72b, 0x20a1, 0x0018,
++ 0x20a9, 0x0008, 0x53a3, 0x7803, 0x0020, 0x127e, 0x2091, 0x8000,
++ 0x7803, 0x0001, 0x7007, 0x0004, 0x7000, 0xc08c, 0x7002, 0x700b,
++ 0xa726, 0x127f, 0x157f, 0x147f, 0x137f, 0x007c, 0x017e, 0x0e7e,
++ 0x2071, 0xa8d6, 0x0f7e, 0x2079, 0x0010, 0x7904, 0x7803, 0x0002,
++ 0xd1fc, 0x0040, 0x14d0, 0xa18c, 0x0700, 0x7004, 0x1079, 0x14d4,
++ 0x0f7f, 0x0e7f, 0x017f, 0x007c, 0x1408, 0x14dc, 0x1509, 0x1531,
++ 0x1564, 0x14da, 0x0078, 0x14da, 0xa18c, 0x0700, 0x00c0, 0x1502,
++ 0x137e, 0x147e, 0x157e, 0x7014, 0x20a0, 0x2099, 0x0014, 0x7803,
++ 0x0040, 0x7010, 0x20a8, 0x53a5, 0x3400, 0x7016, 0x157f, 0x147f,
++ 0x137f, 0x700c, 0xa005, 0x0040, 0x151e, 0x1078, 0x143e, 0x007c,
++ 0x7008, 0xa080, 0x0002, 0x2003, 0x0100, 0x7007, 0x0000, 0x1078,
++ 0x1408, 0x007c, 0x7008, 0xa080, 0x0002, 0x2003, 0x0200, 0x0078,
++ 0x14fd, 0xa18c, 0x0700, 0x00c0, 0x1514, 0x700c, 0xa005, 0x0040,
++ 0x151e, 0x1078, 0x1454, 0x007c, 0x7008, 0xa080, 0x0002, 0x2003,
++ 0x0200, 0x7007, 0x0000, 0x1078, 0x1408, 0x007c, 0x0d7e, 0x7008,
++ 0x2068, 0x7830, 0x6826, 0x7834, 0x682a, 0x7838, 0x682e, 0x783c,
++ 0x6832, 0x680b, 0x0100, 0x0d7f, 0x7007, 0x0000, 0x1078, 0x1408,
++ 0x007c, 0xa18c, 0x0700, 0x00c0, 0x155e, 0x137e, 0x147e, 0x157e,
++ 0x2001, 0xa6f8, 0x2004, 0xa080, 0x000d, 0x20a0, 0x2099, 0x0014,
++ 0x7803, 0x0040, 0x20a9, 0x0020, 0x53a5, 0x2001, 0xa6fa, 0x2004,
++ 0xd0bc, 0x0040, 0x1554, 0x2001, 0xa703, 0x2004, 0xa080, 0x000d,
++ 0x20a0, 0x20a9, 0x0020, 0x53a5, 0x157f, 0x147f, 0x137f, 0x7007,
++ 0x0000, 0x1078, 0x4f8c, 0x1078, 0x1408, 0x007c, 0x2011, 0x8003,
++ 0x1078, 0x361b, 0x0078, 0x1562, 0xa18c, 0x0700, 0x00c0, 0x1571,
++ 0x2001, 0xa728, 0x2003, 0x0100, 0x7007, 0x0000, 0x1078, 0x1408,
++ 0x007c, 0x2011, 0x8004, 0x1078, 0x361b, 0x0078, 0x1575, 0x127e,
++ 0x2091, 0x2100, 0x2079, 0x0030, 0x2071, 0xa8e7, 0x7803, 0x0004,
++ 0x7003, 0x0000, 0x700f, 0xa8ed, 0x7013, 0xa8ed, 0x780f, 0x0076,
++ 0x7803, 0x0004, 0x127f, 0x007c, 0x6934, 0xa184, 0x0007, 0x0079,
++ 0x1591, 0x1599, 0x15df, 0x1599, 0x1599, 0x1599, 0x15c4, 0x15a8,
++ 0x159d, 0xa085, 0x0001, 0x0078, 0x15f9, 0x684c, 0xd0bc, 0x0040,
++ 0x1599, 0x6860, 0x682e, 0x685c, 0x682a, 0x6858, 0x0078, 0x15e7,
++ 0xa18c, 0x00ff, 0xa186, 0x001e, 0x00c0, 0x1599, 0x684c, 0xd0bc,
++ 0x0040, 0x1599, 0x6860, 0x682e, 0x685c, 0x682a, 0x6804, 0x681a,
++ 0xa080, 0x000d, 0x2004, 0xa084, 0x000f, 0xa080, 0x206a, 0x2004,
++ 0x6832, 0x6858, 0x0078, 0x15ef, 0xa18c, 0x00ff, 0xa186, 0x0015,
++ 0x00c0, 0x1599, 0x684c, 0xd0ac, 0x0040, 0x1599, 0x6804, 0x681a,
++ 0xa080, 0x000d, 0x2004, 0xa084, 0x000f, 0xa080, 0x206a, 0x2004,
++ 0x6832, 0xa006, 0x682e, 0x682a, 0x6858, 0x0078, 0x15ef, 0x684c,
++ 0xd0ac, 0x0040, 0x1599, 0xa006, 0x682e, 0x682a, 0x6858, 0xa18c,
++ 0x000f, 0xa188, 0x206a, 0x210c, 0x6932, 0x2d08, 0x691a, 0x6826,
++ 0x684c, 0xc0dd, 0x684e, 0xa006, 0x680a, 0x697c, 0x6912, 0x6980,
++ 0x6916, 0x007c, 0x20e1, 0x0007, 0x20e1, 0x2000, 0x2001, 0x020a,
++ 0x2004, 0x82ff, 0x0040, 0x161c, 0xa280, 0x0004, 0x0d7e, 0x206c,
++ 0x684c, 0xd0dc, 0x00c0, 0x1618, 0x1078, 0x158c, 0x0040, 0x1618,
++ 0x0d7f, 0xa280, 0x0000, 0x2003, 0x0002, 0xa016, 0x0078, 0x161c,
++ 0x6808, 0x8000, 0x680a, 0x0d7f, 0x127e, 0x047e, 0x037e, 0x027e,
++ 0x2091, 0x2100, 0x027f, 0x037f, 0x047f, 0x7000, 0xa005, 0x00c0,
++ 0x1630, 0x7206, 0x2001, 0x1651, 0x007e, 0x2260, 0x0078, 0x17e0,
++ 0x710c, 0x220a, 0x8108, 0x230a, 0x8108, 0x240a, 0x8108, 0xa182,
++ 0xa908, 0x0048, 0x163d, 0x2009, 0xa8ed, 0x710e, 0x7010, 0xa102,
++ 0xa082, 0x0009, 0x0040, 0x1648, 0xa080, 0x001b, 0x00c0, 0x164b,
++ 0x2009, 0x0138, 0x200a, 0x7000, 0xa005, 0x00c0, 0x1651, 0x1078,
++ 0x17c1, 0x127f, 0x007c, 0x127e, 0x027e, 0x037e, 0x0c7e, 0x007e,
++ 0x2091, 0x2100, 0x007f, 0x047f, 0x037f, 0x027f, 0x0d7e, 0x0c7e,
++ 0x2460, 0x6110, 0x2168, 0x6a62, 0x6b5e, 0xa005, 0x0040, 0x16dd,
++ 0x6808, 0xa005, 0x0040, 0x174a, 0x7000, 0xa005, 0x00c0, 0x1672,
++ 0x0078, 0x16d2, 0x700c, 0x7110, 0xa106, 0x00c0, 0x1753, 0x7004,
++ 0xa406, 0x00c0, 0x16d2, 0x2001, 0x0005, 0x2004, 0xd08c, 0x0040,
++ 0x168f, 0x047e, 0x1078, 0x1913, 0x047f, 0x2460, 0x6010, 0xa080,
++ 0x0002, 0x2004, 0xa005, 0x0040, 0x174a, 0x0078, 0x166c, 0x2001,
++ 0x0207, 0x2004, 0xd09c, 0x00c0, 0x167b, 0x7804, 0xa084, 0x6000,
++ 0x0040, 0x16a0, 0xa086, 0x6000, 0x0040, 0x16a0, 0x0078, 0x167b,
++ 0x7100, 0xa186, 0x0002, 0x00c0, 0x16c0, 0x0e7e, 0x2b68, 0x6818,
++ 0x2060, 0x1078, 0x203f, 0x2804, 0xac70, 0x6034, 0xd09c, 0x00c0,
++ 0x16b5, 0x7108, 0x720c, 0x0078, 0x16b7, 0x7110, 0x7214, 0x6810,
++ 0xa100, 0x6812, 0x6814, 0xa201, 0x6816, 0x0e7f, 0x0078, 0x16c4,
++ 0xa186, 0x0001, 0x00c0, 0x16cc, 0x7820, 0x6910, 0xa100, 0x6812,
++ 0x7824, 0x6914, 0xa101, 0x6816, 0x7803, 0x0004, 0x7003, 0x0000,
++ 0x7004, 0x2060, 0x6100, 0xa18e, 0x0004, 0x00c0, 0x1753, 0x2009,
++ 0x0048, 0x1078, 0x775c, 0x0078, 0x1753, 0x6808, 0xa005, 0x0040,
++ 0x174a, 0x7000, 0xa005, 0x00c0, 0x16e7, 0x0078, 0x174a, 0x700c,
++ 0x7110, 0xa106, 0x00c0, 0x16f0, 0x7004, 0xa406, 0x00c0, 0x174a,
++ 0x2001, 0x0005, 0x2004, 0xd08c, 0x0040, 0x1704, 0x047e, 0x1078,
++ 0x1913, 0x047f, 0x2460, 0x6010, 0xa080, 0x0002, 0x2004, 0xa005,
++ 0x0040, 0x174a, 0x0078, 0x16e1, 0x2001, 0x0207, 0x2004, 0xd09c,
++ 0x00c0, 0x16f0, 0x2001, 0x0005, 0x2004, 0xd08c, 0x00c0, 0x16f6,
++ 0x7804, 0xa084, 0x6000, 0x0040, 0x171b, 0xa086, 0x6000, 0x0040,
++ 0x171b, 0x0078, 0x16f0, 0x7007, 0x0000, 0xa016, 0x2218, 0x7000,
++ 0xa08e, 0x0001, 0x0040, 0x173c, 0xa08e, 0x0002, 0x00c0, 0x174a,
++ 0x0c7e, 0x0e7e, 0x6818, 0x2060, 0x1078, 0x203f, 0x2804, 0xac70,
++ 0x6034, 0xd09c, 0x00c0, 0x1738, 0x7308, 0x720c, 0x0078, 0x173a,
++ 0x7310, 0x7214, 0x0e7f, 0x0c7f, 0x7820, 0xa318, 0x7824, 0xa211,
++ 0x6810, 0xa300, 0x6812, 0x6814, 0xa201, 0x6816, 0x7803, 0x0004,
++ 0x7003, 0x0000, 0x6100, 0xa18e, 0x0004, 0x00c0, 0x1753, 0x2009,
++ 0x0048, 0x1078, 0x775c, 0x0c7f, 0x0d7f, 0x127f, 0x007c, 0x0f7e,
++ 0x0e7e, 0x027e, 0x037e, 0x047e, 0x057e, 0x2071, 0xa8e7, 0x7000,
++ 0xa086, 0x0000, 0x0040, 0x17ba, 0x7004, 0xac06, 0x00c0, 0x17ab,
++ 0x2079, 0x0030, 0x7000, 0xa086, 0x0003, 0x0040, 0x17ab, 0x7804,
++ 0xd0fc, 0x00c0, 0x17a7, 0x20e1, 0x6000, 0x2011, 0x0032, 0x2001,
++ 0x0208, 0x200c, 0x2001, 0x0209, 0x2004, 0xa106, 0x00c0, 0x176f,
++ 0x8211, 0x00c0, 0x1777, 0x7804, 0xd0fc, 0x00c0, 0x17a7, 0x1078,
++ 0x1b22, 0x027e, 0x057e, 0x7803, 0x0004, 0x7804, 0xd0ac, 0x00c0,
++ 0x178d, 0x7803, 0x0002, 0x7803, 0x0009, 0x7003, 0x0003, 0x7007,
++ 0x0000, 0x057f, 0x027f, 0x2001, 0x015d, 0x2003, 0x0000, 0x2001,
++ 0x0160, 0x2502, 0x2001, 0x0138, 0x2202, 0x0078, 0x17ab, 0x1078,
++ 0x1913, 0x0078, 0x175f, 0x157e, 0x20a9, 0x0009, 0x2009, 0xa8ed,
++ 0x2104, 0xac06, 0x00c0, 0x17b5, 0x200a, 0xa188, 0x0003, 0x00f0,
++ 0x17b0, 0x157f, 0x057f, 0x047f, 0x037f, 0x027f, 0x0e7f, 0x0f7f,
++ 0x007c, 0x700c, 0x7110, 0xa106, 0x00c0, 0x17c9, 0x7003, 0x0000,
++ 0x007c, 0x2104, 0x7006, 0x2060, 0x8108, 0x211c, 0x8108, 0x2124,
++ 0x8108, 0xa182, 0xa908, 0x0048, 0x17d7, 0x2009, 0xa8ed, 0x7112,
++ 0x700c, 0xa106, 0x00c0, 0x17e0, 0x2001, 0x0138, 0x2003, 0x0008,
++ 0x8cff, 0x00c0, 0x17e7, 0x1078, 0x1b4d, 0x0078, 0x1854, 0x6010,
++ 0x2068, 0x2d58, 0x6828, 0xa406, 0x00c0, 0x17f2, 0x682c, 0xa306,
++ 0x0040, 0x182f, 0x601c, 0xa086, 0x0008, 0x0040, 0x182f, 0x6024,
++ 0xd0f4, 0x00c0, 0x181c, 0xd0d4, 0x0040, 0x1818, 0x6038, 0xa402,
++ 0x6034, 0xa303, 0x0040, 0x1806, 0x00c8, 0x1818, 0x643a, 0x6336,
++ 0x6c2a, 0x6b2e, 0x047e, 0x037e, 0x2400, 0x6c7c, 0xa402, 0x6812,
++ 0x2300, 0x6b80, 0xa303, 0x6816, 0x037f, 0x047f, 0x0078, 0x181c,
++ 0x1078, 0x9053, 0x0040, 0x17e3, 0x2001, 0xa674, 0x2004, 0xd0b4,
++ 0x00c0, 0x182b, 0x6018, 0x2004, 0xd0bc, 0x00c0, 0x182b, 0x6817,
++ 0x7fff, 0x6813, 0xffff, 0x1078, 0x208a, 0x00c0, 0x17e3, 0x0c7e,
++ 0x7004, 0x2060, 0x6024, 0xc0d4, 0x6026, 0x0c7f, 0x684c, 0xd0f4,
++ 0x0040, 0x1840, 0x6817, 0xffff, 0x6813, 0xffff, 0x0078, 0x17e3,
++ 0x6824, 0x2050, 0x6818, 0x2060, 0x6830, 0x2040, 0x6034, 0xa0cc,
++ 0x000f, 0x2009, 0x0011, 0x1078, 0x1855, 0x0040, 0x1853, 0x2009,
++ 0x0001, 0x1078, 0x1855, 0x2d58, 0x007c, 0x8aff, 0x0040, 0x18ec,
++ 0xa03e, 0x2730, 0x6850, 0xd0fc, 0x00c0, 0x1877, 0xd0f4, 0x00c0,
++ 0x1887, 0x0d7e, 0x2804, 0xac68, 0x2900, 0x0079, 0x1867, 0x18ce,
++ 0x188e, 0x188e, 0x18ce, 0x18ce, 0x18c6, 0x18ce, 0x188e, 0x18ce,
++ 0x1894, 0x1894, 0x18ce, 0x18ce, 0x18ce, 0x18bd, 0x1894, 0xc0fc,
++ 0x6852, 0x6b6c, 0x6a70, 0x6d1c, 0x6c20, 0x0d7e, 0xd99c, 0x0040,
++ 0x18d1, 0x2804, 0xac68, 0x6f08, 0x6e0c, 0x0078, 0x18d1, 0xc0f4,
++ 0x6852, 0x6b6c, 0x6a70, 0x0d7e, 0x0078, 0x18d8, 0x6b08, 0x6a0c,
++ 0x6d00, 0x6c04, 0x0078, 0x18d1, 0x7b0c, 0xd3bc, 0x0040, 0x18b5,
++ 0x7004, 0x0e7e, 0x2070, 0x701c, 0x0e7f, 0xa086, 0x0008, 0x00c0,
++ 0x18b5, 0x7b08, 0xa39c, 0x0fff, 0x2d20, 0x0d7f, 0x0d7e, 0x6a14,
++ 0x82ff, 0x00c0, 0x18b0, 0x6810, 0xa302, 0x0048, 0x18b0, 0x6b10,
++ 0x2011, 0x0000, 0x2468, 0x0078, 0x18b7, 0x6b10, 0x6a14, 0x6d00,
++ 0x6c04, 0x6f08, 0x6e0c, 0x0078, 0x18d1, 0x0d7f, 0x0d7e, 0x6834,
++ 0xa084, 0x00ff, 0xa086, 0x001e, 0x00c0, 0x18ce, 0x0d7f, 0x1078,
++ 0x2026, 0x00c0, 0x1855, 0xa00e, 0x0078, 0x18ec, 0x0d7f, 0x1078,
++ 0x1332, 0x7b22, 0x7a26, 0x7d32, 0x7c36, 0x7f3a, 0x7e3e, 0x7902,
++ 0x7000, 0x8000, 0x7002, 0x0d7f, 0x6828, 0xa300, 0x682a, 0x682c,
++ 0xa201, 0x682e, 0x2300, 0x6b10, 0xa302, 0x6812, 0x2200, 0x6a14,
++ 0xa203, 0x6816, 0x1078, 0x2026, 0x007c, 0x1078, 0x1332, 0x1078,
++ 0x1c97, 0x7004, 0x2060, 0x0d7e, 0x6010, 0x2068, 0x7003, 0x0000,
++ 0x1078, 0x1af4, 0x1078, 0x8d06, 0x0040, 0x190c, 0x6808, 0x8001,
++ 0x680a, 0x697c, 0x6912, 0x6980, 0x6916, 0x682b, 0xffff, 0x682f,
++ 0xffff, 0x6850, 0xc0bd, 0x6852, 0x0d7f, 0x1078, 0x8a01, 0x0078,
++ 0x1adb, 0x1078, 0x1332, 0x127e, 0x2091, 0x2100, 0x007e, 0x017e,
++ 0x2b68, 0x6818, 0x2060, 0x7904, 0x7803, 0x0002, 0xa184, 0x0700,
++ 0x00c0, 0x18ef, 0xa184, 0x0003, 0xa086, 0x0003, 0x0040, 0x1911,
++ 0x7000, 0x0079, 0x192b, 0x1933, 0x1935, 0x1a34, 0x1ab2, 0x1ac9,
++ 0x1933, 0x1933, 0x1933, 0x1078, 0x1332, 0x8001, 0x7002, 0xa184,
++ 0x0880, 0x00c0, 0x194a, 0x8aff, 0x0040, 0x19d4, 0x2009, 0x0001,
++ 0x1078, 0x1855, 0x0040, 0x1adb, 0x2009, 0x0001, 0x1078, 0x1855,
++ 0x0078, 0x1adb, 0x7803, 0x0004, 0x7003, 0x0000, 0xd1bc, 0x00c0,
++ 0x19b2, 0x027e, 0x037e, 0x017e, 0x7808, 0xd0ec, 0x00c0, 0x1962,
++ 0x7c20, 0x7d24, 0x7e30, 0x7f34, 0x7803, 0x0009, 0x7003, 0x0004,
++ 0x0078, 0x1964, 0x1078, 0x1bd7, 0x017f, 0xd194, 0x0040, 0x196b,
++ 0x8aff, 0x0040, 0x19a1, 0x6b28, 0x6a2c, 0x2400, 0x686e, 0xa31a,
++ 0x2500, 0x6872, 0xa213, 0x6b2a, 0x6a2e, 0x0c7e, 0x7004, 0x2060,
++ 0x6024, 0xd0f4, 0x00c0, 0x197e, 0x633a, 0x6236, 0x0c7f, 0x2400,
++ 0x6910, 0xa100, 0x6812, 0x2500, 0x6914, 0xa101, 0x6816, 0x037f,
++ 0x027f, 0x2600, 0x681e, 0x2700, 0x6822, 0x1078, 0x203f, 0x2a00,
++ 0x6826, 0x2c00, 0x681a, 0x2800, 0x6832, 0x6850, 0xc0fd, 0x6852,
++ 0x6808, 0x8001, 0x680a, 0x00c0, 0x19a7, 0x684c, 0xd0e4, 0x0040,
++ 0x19a7, 0x7004, 0x2060, 0x2009, 0x0048, 0x1078, 0x775c, 0x7000,
++ 0xa086, 0x0004, 0x0040, 0x1adb, 0x7003, 0x0000, 0x1078, 0x17c1,
++ 0x0078, 0x1adb, 0x057e, 0x7d0c, 0xd5bc, 0x00c0, 0x19b9, 0x1078,
++ 0xa57e, 0x057f, 0x1078, 0x1af4, 0x0f7e, 0x7004, 0x2078, 0x1078,
++ 0x4963, 0x0040, 0x19c6, 0x7824, 0xc0f5, 0x7826, 0x0f7f, 0x682b,
++ 0xffff, 0x682f, 0xffff, 0x6808, 0x8001, 0x680a, 0x697c, 0x6912,
++ 0x6980, 0x6916, 0x0078, 0x1adb, 0x7004, 0x0c7e, 0x2060, 0x6024,
++ 0x0c7f, 0xd0f4, 0x0040, 0x19e1, 0x6808, 0x8001, 0x680a, 0x0078,
++ 0x19f5, 0x684c, 0xc0f5, 0x684e, 0x7814, 0xa005, 0x00c0, 0x19f9,
++ 0x7003, 0x0000, 0x6808, 0x8001, 0x680a, 0x00c0, 0x19f5, 0x7004,
++ 0x2060, 0x2009, 0x0048, 0x1078, 0x775c, 0x1078, 0x17c1, 0x0078,
++ 0x1adb, 0x7814, 0x6910, 0xa102, 0x6812, 0x6914, 0xa183, 0x0000,
++ 0x6816, 0x7814, 0x7908, 0xa18c, 0x0fff, 0xa192, 0x0841, 0x00c8,
++ 0x18ef, 0xa188, 0x0007, 0x8114, 0x8214, 0x8214, 0xa10a, 0x8104,
++ 0x8004, 0x8004, 0xa20a, 0x810b, 0x810b, 0x810b, 0x1078, 0x1b5e,
++ 0x7803, 0x0004, 0x780f, 0xffff, 0x7803, 0x0001, 0x7804, 0xd0fc,
++ 0x0040, 0x1a1e, 0x7803, 0x0002, 0x7803, 0x0004, 0x780f, 0x0076,
++ 0x7004, 0x7007, 0x0000, 0x2060, 0x2009, 0x0048, 0x1078, 0x775c,
++ 0x1078, 0x1b92, 0x0040, 0x19f5, 0x8001, 0x7002, 0xd194, 0x0040,
++ 0x1a46, 0x7804, 0xd0fc, 0x00c0, 0x191b, 0x8aff, 0x0040, 0x1adb,
++ 0x2009, 0x0001, 0x1078, 0x1855, 0x0078, 0x1adb, 0xa184, 0x0880,
++ 0x00c0, 0x1a53, 0x8aff, 0x0040, 0x1adb, 0x2009, 0x0001, 0x1078,
++ 0x1855, 0x0078, 0x1adb, 0x7803, 0x0004, 0x7003, 0x0000, 0xd1bc,
++ 0x00c0, 0x1a93, 0x027e, 0x037e, 0x7808, 0xd0ec, 0x00c0, 0x1a66,
++ 0x7803, 0x0009, 0x7003, 0x0004, 0x0078, 0x1a68, 0x1078, 0x1bd7,
++ 0x6b28, 0x6a2c, 0x1078, 0x203f, 0x0d7e, 0x0f7e, 0x2d78, 0x2804,
++ 0xac68, 0x6034, 0xd09c, 0x00c0, 0x1a83, 0x6808, 0x2008, 0xa31a,
++ 0x680c, 0xa213, 0x7810, 0xa100, 0x7812, 0x690c, 0x7814, 0xa101,
++ 0x7816, 0x0078, 0x1a8f, 0x6810, 0x2008, 0xa31a, 0x6814, 0xa213,
++ 0x7810, 0xa100, 0x7812, 0x6914, 0x7814, 0xa101, 0x7816, 0x0f7f,
++ 0x0d7f, 0x0078, 0x196d, 0x057e, 0x7d0c, 0x1078, 0xa57e, 0x057f,
++ 0x1078, 0x1af4, 0x0f7e, 0x7004, 0x2078, 0x1078, 0x4963, 0x0040,
++ 0x1aa4, 0x7824, 0xc0f5, 0x7826, 0x0f7f, 0x682b, 0xffff, 0x682f,
++ 0xffff, 0x6808, 0x8001, 0x680a, 0x697c, 0x6912, 0x6980, 0x6916,
++ 0x0078, 0x1adb, 0x7803, 0x0004, 0x7003, 0x0000, 0x7004, 0xa00d,
++ 0x0040, 0x1ac5, 0x6808, 0x8001, 0x680a, 0x00c0, 0x1ac5, 0x7004,
++ 0x2060, 0x2009, 0x0048, 0x1078, 0x775c, 0x1078, 0x17c1, 0x0078,
++ 0x1adb, 0x7803, 0x0004, 0x7003, 0x0000, 0x7004, 0x2060, 0x6010,
++ 0xa005, 0x0040, 0x1ac5, 0x2068, 0x6808, 0x8000, 0x680a, 0x6c28,
++ 0x6b2c, 0x1078, 0x17e0, 0x017f, 0x007f, 0x127f, 0x007c, 0x127e,
++ 0x2091, 0x2100, 0x7000, 0xa086, 0x0003, 0x00c0, 0x1af2, 0x700c,
++ 0x7110, 0xa106, 0x0040, 0x1af2, 0x20e1, 0x9028, 0x700f, 0xa8ed,
++ 0x7013, 0xa8ed, 0x127f, 0x007c, 0x0c7e, 0x1078, 0x1b22, 0x20e1,
++ 0x9028, 0x700c, 0x7110, 0xa106, 0x0040, 0x1b19, 0x2104, 0xa005,
++ 0x0040, 0x1b08, 0x2060, 0x6010, 0x2060, 0x6008, 0x8001, 0x600a,
++ 0xa188, 0x0003, 0xa182, 0xa908, 0x0048, 0x1b10, 0x2009, 0xa8ed,
++ 0x7112, 0x700c, 0xa106, 0x00c0, 0x1af9, 0x2011, 0x0008, 0x0078,
++ 0x1af9, 0x2001, 0x015d, 0x2003, 0x0000, 0x2001, 0x0138, 0x2202,
++ 0x0c7f, 0x007c, 0x2001, 0x0138, 0x2014, 0x2003, 0x0000, 0x2021,
++ 0xb015, 0x2001, 0x0141, 0x201c, 0xd3dc, 0x00c0, 0x1b3f, 0x2001,
++ 0x0109, 0x201c, 0xa39c, 0x0048, 0x00c0, 0x1b3f, 0x2001, 0x0111,
++ 0x201c, 0x83ff, 0x00c0, 0x1b3f, 0x8421, 0x00c0, 0x1b29, 0x007c,
++ 0x2011, 0x0201, 0x2009, 0x003c, 0x2204, 0xa005, 0x00c0, 0x1b4c,
++ 0x8109, 0x00c0, 0x1b44, 0x007c, 0x007c, 0x1078, 0x1b40, 0x0040,
++ 0x1b55, 0x780c, 0xd0a4, 0x0040, 0x1b5b, 0x1078, 0x1af4, 0xa085,
++ 0x0001, 0x0078, 0x1b5d, 0x1078, 0x1b92, 0x007c, 0x0e7e, 0x2071,
++ 0x0200, 0x7808, 0xa084, 0xf000, 0xa10d, 0x1078, 0x1b22, 0x2019,
++ 0x5000, 0x8319, 0x0040, 0x1b7c, 0x2001, 0xa908, 0x2004, 0xa086,
++ 0x0000, 0x0040, 0x1b7c, 0x2001, 0x0021, 0xd0fc, 0x0040, 0x1b69,
++ 0x1078, 0x1eaa, 0x0078, 0x1b67, 0x20e1, 0x7000, 0x7324, 0x7420,
++ 0x7028, 0x7028, 0x7426, 0x7037, 0x0001, 0x810f, 0x712e, 0x702f,
++ 0x0100, 0x7037, 0x0008, 0x7326, 0x7422, 0x2001, 0x0138, 0x2202,
++ 0x0e7f, 0x007c, 0x027e, 0x2001, 0x015d, 0x2001, 0x0000, 0x7908,
++ 0xa18c, 0x0fff, 0xa182, 0x0ffd, 0x0048, 0x1ba0, 0x2009, 0x0000,
++ 0xa190, 0x0007, 0xa294, 0x1ff8, 0x8214, 0x8214, 0x8214, 0x2001,
++ 0x020a, 0x82ff, 0x0040, 0x1bb5, 0x20e1, 0x6000, 0x200c, 0x200c,
++ 0x200c, 0x200c, 0x8211, 0x00c0, 0x1bae, 0x20e1, 0x7000, 0x200c,
++ 0x200c, 0x7003, 0x0000, 0x20e1, 0x6000, 0x2001, 0x0208, 0x200c,
++ 0x2001, 0x0209, 0x2004, 0xa106, 0x0040, 0x1bd4, 0x1078, 0x1b40,
++ 0x0040, 0x1bd2, 0x7908, 0xd1ec, 0x00c0, 0x1bd4, 0x790c, 0xd1a4,
++ 0x0040, 0x1b97, 0x1078, 0x1af4, 0xa006, 0x027f, 0x007c, 0x7c20,
++ 0x7d24, 0x7e30, 0x7f34, 0x700c, 0x7110, 0xa106, 0x0040, 0x1c69,
++ 0x7004, 0x017e, 0x210c, 0xa106, 0x017f, 0x0040, 0x1c69, 0x0d7e,
++ 0x0c7e, 0x216c, 0x2d00, 0xa005, 0x0040, 0x1c67, 0x681c, 0xa086,
++ 0x0008, 0x0040, 0x1c67, 0x6824, 0xd0d4, 0x00c0, 0x1c67, 0x6810,
++ 0x2068, 0x6850, 0xd0fc, 0x0040, 0x1c29, 0x8108, 0x2104, 0x6b2c,
++ 0xa306, 0x00c0, 0x1c67, 0x8108, 0x2104, 0x6a28, 0xa206, 0x00c0,
++ 0x1c67, 0x6850, 0xc0fc, 0xc0f5, 0x6852, 0x686c, 0x7822, 0x6870,
++ 0x7826, 0x681c, 0x7832, 0x6820, 0x7836, 0x6818, 0x2060, 0x6034,
++ 0xd09c, 0x0040, 0x1c24, 0x6830, 0x2004, 0xac68, 0x6808, 0x783a,
++ 0x680c, 0x783e, 0x0078, 0x1c65, 0xa006, 0x783a, 0x783e, 0x0078,
++ 0x1c65, 0x8108, 0x2104, 0xa005, 0x00c0, 0x1c67, 0x6b2c, 0xa306,
++ 0x00c0, 0x1c67, 0x8108, 0x2104, 0xa005, 0x00c0, 0x1c67, 0x6a28,
++ 0xa206, 0x00c0, 0x1c67, 0x6850, 0xc0f5, 0x6852, 0x6830, 0x2004,
++ 0x6918, 0xa160, 0xa180, 0x000d, 0x2004, 0xd09c, 0x00c0, 0x1c57,
++ 0x6008, 0x7822, 0x686e, 0x600c, 0x7826, 0x6872, 0x6000, 0x7832,
++ 0x6004, 0x7836, 0xa006, 0x783a, 0x783e, 0x0078, 0x1c65, 0x6010,
++ 0x7822, 0x686e, 0x6014, 0x7826, 0x6872, 0x6000, 0x7832, 0x6004,
++ 0x7836, 0x6008, 0x783a, 0x600c, 0x783e, 0x7803, 0x0011, 0x0c7f,
++ 0x0d7f, 0x007c, 0x0f7e, 0x0e7e, 0x017e, 0x027e, 0x2071, 0xa8e7,
++ 0x2079, 0x0030, 0x2011, 0x0050, 0x7000, 0xa086, 0x0000, 0x0040,
++ 0x1c92, 0x8211, 0x0040, 0x1c90, 0x2001, 0x0005, 0x2004, 0xd08c,
++ 0x0040, 0x1c79, 0x7904, 0xa18c, 0x0780, 0x017e, 0x1078, 0x1913,
++ 0x017f, 0x81ff, 0x00c0, 0x1c90, 0x2011, 0x0050, 0x0078, 0x1c74,
++ 0xa085, 0x0001, 0x027f, 0x017f, 0x0e7f, 0x0f7f, 0x007c, 0x7803,
++ 0x0004, 0x2009, 0x0064, 0x7804, 0xd0ac, 0x0040, 0x1ce8, 0x8109,
++ 0x00c0, 0x1c9b, 0x2009, 0x0100, 0x210c, 0xa18a, 0x0003, 0x1048,
++ 0x1332, 0x1078, 0x1fca, 0x0e7e, 0x0f7e, 0x2071, 0xa8d6, 0x2079,
++ 0x0010, 0x7004, 0xa086, 0x0000, 0x0040, 0x1ce0, 0x7800, 0x007e,
++ 0x7820, 0x007e, 0x7830, 0x007e, 0x7834, 0x007e, 0x7838, 0x007e,
++ 0x783c, 0x007e, 0x7803, 0x0004, 0x7823, 0x0000, 0x0005, 0x0005,
++ 0x2079, 0x0030, 0x7804, 0xd0ac, 0x10c0, 0x1332, 0x2079, 0x0010,
++ 0x007f, 0x783e, 0x007f, 0x783a, 0x007f, 0x7836, 0x007f, 0x7832,
++ 0x007f, 0x7822, 0x007f, 0x7802, 0x0f7f, 0x0e7f, 0x0078, 0x1ce6,
++ 0x0f7f, 0x0e7f, 0x7804, 0xd0ac, 0x10c0, 0x1332, 0x1078, 0x639b,
++ 0x007c, 0x0e7e, 0x2071, 0xa908, 0x7003, 0x0000, 0x0e7f, 0x007c,
++ 0x0d7e, 0xa280, 0x0004, 0x206c, 0x694c, 0xd1dc, 0x00c0, 0x1d6b,
++ 0x6934, 0xa184, 0x0007, 0x0079, 0x1cfd, 0x1d05, 0x1d56, 0x1d05,
++ 0x1d05, 0x1d05, 0x1d3b, 0x1d18, 0x1d07, 0x1078, 0x1332, 0x684c,
++ 0xd0b4, 0x0040, 0x1e79, 0x6860, 0x682e, 0x6816, 0x685c, 0x682a,
++ 0x6812, 0x687c, 0x680a, 0x6880, 0x680e, 0x6958, 0x0078, 0x1d5e,
++ 0x6834, 0xa084, 0x00ff, 0xa086, 0x001e, 0x00c0, 0x1d05, 0x684c,
++ 0xd0b4, 0x0040, 0x1e79, 0x6860, 0x682e, 0x6816, 0x685c, 0x682a,
++ 0x6812, 0x687c, 0x680a, 0x6880, 0x680e, 0x6804, 0x681a, 0xa080,
++ 0x000d, 0x2004, 0xa084, 0x000f, 0xa080, 0x206a, 0x2004, 0x6832,
++ 0x6958, 0x0078, 0x1d67, 0xa18c, 0x00ff, 0xa186, 0x0015, 0x00c0,
++ 0x1d6b, 0x684c, 0xd0b4, 0x0040, 0x1e79, 0x6804, 0x681a, 0xa080,
++ 0x000d, 0x2004, 0xa084, 0x000f, 0xa080, 0x206a, 0x2004, 0x6832,
++ 0x6958, 0xa006, 0x682e, 0x682a, 0x0078, 0x1d67, 0x684c, 0xd0b4,
++ 0x0040, 0x18ed, 0x6958, 0xa006, 0x682e, 0x682a, 0x2d00, 0x681a,
++ 0x6834, 0xa084, 0x000f, 0xa080, 0x206a, 0x2004, 0x6832, 0x6926,
++ 0x684c, 0xc0dd, 0x684e, 0x0d7f, 0x007c, 0x0f7e, 0x2079, 0x0020,
++ 0x7804, 0xd0fc, 0x10c0, 0x1eaa, 0x0e7e, 0x0d7e, 0x2071, 0xa908,
++ 0x7000, 0xa005, 0x00c0, 0x1df0, 0x0c7e, 0x7206, 0xa280, 0x0004,
++ 0x205c, 0x7004, 0x2068, 0x7803, 0x0004, 0x6818, 0x0d7e, 0x2068,
++ 0x686c, 0x7812, 0x6890, 0x0f7e, 0x20e1, 0x9040, 0x2079, 0x0200,
++ 0x781a, 0x2079, 0x0100, 0x8004, 0x78d6, 0x0f7f, 0x0d7f, 0x2b68,
++ 0x6824, 0x2050, 0x6818, 0x2060, 0x6830, 0x2040, 0x6034, 0xa0cc,
++ 0x000f, 0x6908, 0x2001, 0x04fd, 0x2004, 0xa086, 0x0007, 0x0040,
++ 0x1db2, 0xa184, 0x0007, 0x0040, 0x1db2, 0x017e, 0x2009, 0x0008,
++ 0xa102, 0x017f, 0xa108, 0x791a, 0x7116, 0x701e, 0x680c, 0xa081,
++ 0x0000, 0x781e, 0x701a, 0xa006, 0x700e, 0x7012, 0x7004, 0x692c,
++ 0x6814, 0xa106, 0x00c0, 0x1dc9, 0x6928, 0x6810, 0xa106, 0x0040,
++ 0x1dd6, 0x037e, 0x047e, 0x6b14, 0x6c10, 0x1078, 0x208a, 0x047f,
++ 0x037f, 0x0040, 0x1dd6, 0x0c7f, 0x0078, 0x1df0, 0x8aff, 0x00c0,
++ 0x1dde, 0x0c7f, 0xa085, 0x0001, 0x0078, 0x1df0, 0x127e, 0x2091,
++ 0x8000, 0x2079, 0x0020, 0x2009, 0x0001, 0x1078, 0x1df4, 0x0040,
++ 0x1ded, 0x2009, 0x0001, 0x1078, 0x1df4, 0x127f, 0x0c7f, 0xa006,
++ 0x0d7f, 0x0e7f, 0x0f7f, 0x007c, 0x077e, 0x067e, 0x057e, 0x047e,
++ 0x037e, 0x027e, 0x8aff, 0x0040, 0x1e72, 0x700c, 0x7214, 0xa23a,
++ 0x7010, 0x7218, 0xa203, 0x0048, 0x1e71, 0xa705, 0x0040, 0x1e71,
++ 0xa03e, 0x2730, 0x6850, 0xd0fc, 0x00c0, 0x1e24, 0x0d7e, 0x2804,
++ 0xac68, 0x2900, 0x0079, 0x1e14, 0x1e53, 0x1e34, 0x1e34, 0x1e53,
++ 0x1e53, 0x1e4b, 0x1e53, 0x1e34, 0x1e53, 0x1e3a, 0x1e3a, 0x1e53,
++ 0x1e53, 0x1e53, 0x1e42, 0x1e3a, 0xc0fc, 0x6852, 0x6b6c, 0x6a70,
++ 0x6d1c, 0x6c20, 0xd99c, 0x0040, 0x1e57, 0x0d7e, 0x2804, 0xac68,
++ 0x6f08, 0x6e0c, 0x0078, 0x1e56, 0x6b08, 0x6a0c, 0x6d00, 0x6c04,
++ 0x0078, 0x1e56, 0x6b10, 0x6a14, 0x6d00, 0x6c04, 0x6f08, 0x6e0c,
++ 0x0078, 0x1e56, 0x0d7f, 0x0d7e, 0x6834, 0xa084, 0x00ff, 0xa086,
++ 0x001e, 0x00c0, 0x1e53, 0x0d7f, 0x1078, 0x2026, 0x00c0, 0x1dfa,
++ 0xa00e, 0x0078, 0x1e72, 0x0d7f, 0x1078, 0x1332, 0x0d7f, 0x7b22,
++ 0x7a26, 0x7d32, 0x7c36, 0x7f3a, 0x7e3e, 0x7902, 0x7000, 0x8000,
++ 0x7002, 0x6828, 0xa300, 0x682a, 0x682c, 0xa201, 0x682e, 0x700c,
++ 0xa300, 0x700e, 0x7010, 0xa201, 0x7012, 0x1078, 0x2026, 0x0078,
++ 0x1e72, 0xa006, 0x027f, 0x037f, 0x047f, 0x057f, 0x067f, 0x077f,
++ 0x007c, 0x1078, 0x1332, 0x027e, 0x2001, 0x0105, 0x2003, 0x0010,
++ 0x20e1, 0x9040, 0x7803, 0x0004, 0x7003, 0x0000, 0x7004, 0x2060,
++ 0x0d7e, 0x6010, 0x2068, 0x1078, 0x8d06, 0x0040, 0x1e92, 0x6850,
++ 0xc0bd, 0x6852, 0x0d7f, 0x0c7e, 0x1078, 0x8a01, 0x0c7f, 0x2001,
++ 0xa8c0, 0x2004, 0xac06, 0x00c0, 0x1ea7, 0x20e1, 0x9040, 0x1078,
++ 0x738a, 0x2011, 0x0000, 0x1078, 0x70ea, 0x1078, 0x639b, 0x027f,
++ 0x0078, 0x1f76, 0x127e, 0x2091, 0x2200, 0x007e, 0x017e, 0x0f7e,
++ 0x0e7e, 0x0d7e, 0x0c7e, 0x2079, 0x0020, 0x2071, 0xa908, 0x2b68,
++ 0x6818, 0x2060, 0x7904, 0x7803, 0x0002, 0xa184, 0x0700, 0x00c0,
++ 0x1e7b, 0x7000, 0x0079, 0x1ec4, 0x1f76, 0x1ec8, 0x1f43, 0x1f74,
++ 0x8001, 0x7002, 0xd19c, 0x00c0, 0x1edc, 0x8aff, 0x0040, 0x1efb,
++ 0x2009, 0x0001, 0x1078, 0x1df4, 0x0040, 0x1f76, 0x2009, 0x0001,
++ 0x1078, 0x1df4, 0x0078, 0x1f76, 0x7803, 0x0004, 0xd194, 0x0040,
++ 0x1eec, 0x6850, 0xc0fc, 0x6852, 0x8aff, 0x00c0, 0x1ef1, 0x684c,
++ 0xc0f5, 0x684e, 0x0078, 0x1ef1, 0x1078, 0x203f, 0x6850, 0xc0fd,
++ 0x6852, 0x2a00, 0x6826, 0x2c00, 0x681a, 0x2800, 0x6832, 0x7003,
++ 0x0000, 0x0078, 0x1f76, 0x711c, 0x81ff, 0x0040, 0x1f11, 0x7918,
++ 0x7922, 0x7827, 0x0000, 0x7803, 0x0001, 0x7000, 0x8000, 0x7002,
++ 0x700c, 0xa100, 0x700e, 0x7010, 0xa081, 0x0000, 0x7012, 0x0078,
++ 0x1f76, 0x0f7e, 0x027e, 0x781c, 0x007e, 0x7818, 0x007e, 0x2079,
++ 0x0100, 0x7a14, 0xa284, 0x0004, 0xa085, 0x0012, 0x7816, 0x037e,
++ 0x2019, 0x1000, 0x8319, 0x1040, 0x1332, 0x7820, 0xd0bc, 0x00c0,
++ 0x1f22, 0x037f, 0x79c8, 0x007f, 0xa102, 0x017f, 0x007e, 0x017e,
++ 0x79c4, 0x007f, 0xa103, 0x78c6, 0x007f, 0x78ca, 0xa284, 0x0004,
++ 0xa085, 0x0012, 0x7816, 0x027f, 0x0f7f, 0x7803, 0x0008, 0x7003,
++ 0x0000, 0x0078, 0x1f76, 0x8001, 0x7002, 0xd194, 0x0040, 0x1f58,
++ 0x7804, 0xd0fc, 0x00c0, 0x1eba, 0xd19c, 0x00c0, 0x1f72, 0x8aff,
++ 0x0040, 0x1f76, 0x2009, 0x0001, 0x1078, 0x1df4, 0x0078, 0x1f76,
++ 0x027e, 0x037e, 0x6b28, 0x6a2c, 0x1078, 0x203f, 0x0d7e, 0x2804,
++ 0xac68, 0x6034, 0xd09c, 0x00c0, 0x1f6b, 0x6808, 0xa31a, 0x680c,
++ 0xa213, 0x0078, 0x1f6f, 0x6810, 0xa31a, 0x6814, 0xa213, 0x0d7f,
++ 0x0078, 0x1eec, 0x0078, 0x1eec, 0x1078, 0x1332, 0x0c7f, 0x0d7f,
++ 0x0e7f, 0x0f7f, 0x017f, 0x007f, 0x127f, 0x007c, 0x0f7e, 0x0e7e,
++ 0x2071, 0xa908, 0x7000, 0xa086, 0x0000, 0x0040, 0x1fc7, 0x2079,
++ 0x0020, 0x017e, 0x2009, 0x0207, 0x210c, 0xd194, 0x0040, 0x1fa4,
++ 0x2009, 0x020c, 0x210c, 0xa184, 0x0003, 0x0040, 0x1fa4, 0x1078,
++ 0xa5d2, 0x2001, 0x0133, 0x2004, 0xa005, 0x1040, 0x1332, 0x20e1,
++ 0x9040, 0x2001, 0x020c, 0x2102, 0x2009, 0x0206, 0x2104, 0x2009,
++ 0x0203, 0x210c, 0xa106, 0x00c0, 0x1faf, 0x20e1, 0x9040, 0x7804,
++ 0xd0fc, 0x0040, 0x1f8a, 0x1078, 0x1eaa, 0x7000, 0xa086, 0x0000,
++ 0x00c0, 0x1f8a, 0x017f, 0x7803, 0x0004, 0x7804, 0xd0ac, 0x00c0,
++ 0x1fbd, 0x20e1, 0x9040, 0x7803, 0x0002, 0x7003, 0x0000, 0x0e7f,
++ 0x0f7f, 0x007c, 0x027e, 0x0c7e, 0x0d7e, 0x0e7e, 0x0f7e, 0x2071,
++ 0xa908, 0x2079, 0x0020, 0x7000, 0xa086, 0x0000, 0x0040, 0x2003,
++ 0x7004, 0x2060, 0x6010, 0x2068, 0x1078, 0x8d06, 0x0040, 0x1fed,
++ 0x6850, 0xc0b5, 0x6852, 0x680c, 0x7a1c, 0xa206, 0x00c0, 0x1fed,
++ 0x6808, 0x7a18, 0xa206, 0x0040, 0x2009, 0x2001, 0x0105, 0x2003,
++ 0x0010, 0x20e1, 0x9040, 0x7803, 0x0004, 0x7003, 0x0000, 0x7004,
++ 0x2060, 0x1078, 0x8a01, 0x20e1, 0x9040, 0x1078, 0x738a, 0x2011,
++ 0x0000, 0x1078, 0x70ea, 0x0f7f, 0x0e7f, 0x0d7f, 0x0c7f, 0x027f,
++ 0x007c, 0x6810, 0x6a14, 0xa205, 0x00c0, 0x1fed, 0x684c, 0xc0dc,
++ 0x684e, 0x2c10, 0x1078, 0x1cf0, 0x2001, 0x0105, 0x2003, 0x0010,
++ 0x20e1, 0x9040, 0x7803, 0x0004, 0x7003, 0x0000, 0x2069, 0xa8b1,
++ 0x6833, 0x0000, 0x683f, 0x0000, 0x0078, 0x2003, 0x8840, 0x2804,
++ 0xa005, 0x00c0, 0x203a, 0x6004, 0xa005, 0x0040, 0x203c, 0x681a,
++ 0x2060, 0x6034, 0xa084, 0x000f, 0xa080, 0x206a, 0x2044, 0x88ff,
++ 0x1040, 0x1332, 0x8a51, 0x007c, 0x2051, 0x0000, 0x007c, 0x8a50,
++ 0x8841, 0x2804, 0xa005, 0x00c0, 0x2059, 0x2c00, 0xad06, 0x0040,
++ 0x204e, 0x6000, 0xa005, 0x00c0, 0x204e, 0x2d00, 0x2060, 0x681a,
++ 0x6034, 0xa084, 0x000f, 0xa080, 0x207a, 0x2044, 0x88ff, 0x1040,
++ 0x1332, 0x007c, 0x0000, 0x0011, 0x0015, 0x0019, 0x001d, 0x0021,
++ 0x0025, 0x0029, 0x0000, 0x000f, 0x0015, 0x001b, 0x0021, 0x0027,
++ 0x0000, 0x0000, 0x0000, 0x205f, 0x205b, 0x0000, 0x0000, 0x2069,
++ 0x0000, 0x205f, 0x0000, 0x2066, 0x2063, 0x0000, 0x0000, 0x0000,
++ 0x2069, 0x2066, 0x0000, 0x2061, 0x2061, 0x0000, 0x0000, 0x2069,
++ 0x0000, 0x2061, 0x0000, 0x2067, 0x2067, 0x0000, 0x0000, 0x0000,
++ 0x2069, 0x2067, 0x0a7e, 0x097e, 0x087e, 0x6b2e, 0x6c2a, 0x6858,
++ 0xa055, 0x0040, 0x212d, 0x2d60, 0x6034, 0xa0cc, 0x000f, 0xa9c0,
++ 0x206a, 0xa986, 0x0007, 0x0040, 0x20a5, 0xa986, 0x000e, 0x0040,
++ 0x20a5, 0xa986, 0x000f, 0x00c0, 0x20a9, 0x605c, 0xa422, 0x6060,
++ 0xa31a, 0x2804, 0xa045, 0x00c0, 0x20b7, 0x0050, 0x20b1, 0x0078,
++ 0x212d, 0x6004, 0xa065, 0x0040, 0x212d, 0x0078, 0x2094, 0x2804,
++ 0xa005, 0x0040, 0x20d5, 0xac68, 0xd99c, 0x00c0, 0x20c5, 0x6808,
++ 0xa422, 0x680c, 0xa31b, 0x0078, 0x20c9, 0x6810, 0xa422, 0x6814,
++ 0xa31b, 0x0048, 0x20f4, 0x2300, 0xa405, 0x0040, 0x20db, 0x8a51,
++ 0x0040, 0x212d, 0x8840, 0x0078, 0x20b7, 0x6004, 0xa065, 0x0040,
++ 0x212d, 0x0078, 0x2094, 0x8a51, 0x0040, 0x212d, 0x8840, 0x2804,
++ 0xa005, 0x00c0, 0x20ee, 0x6004, 0xa065, 0x0040, 0x212d, 0x6034,
++ 0xa0cc, 0x000f, 0xa9c0, 0x206a, 0x2804, 0x2040, 0x2b68, 0x6850,
++ 0xc0fc, 0x6852, 0x0078, 0x2121, 0x8422, 0x8420, 0x831a, 0xa399,
++ 0x0000, 0x0d7e, 0x2b68, 0x6c6e, 0x6b72, 0x0d7f, 0xd99c, 0x00c0,
++ 0x210f, 0x6908, 0x2400, 0xa122, 0x690c, 0x2300, 0xa11b, 0x1048,
++ 0x1332, 0x6800, 0xa420, 0x6804, 0xa319, 0x0078, 0x211b, 0x6910,
++ 0x2400, 0xa122, 0x6914, 0x2300, 0xa11b, 0x1048, 0x1332, 0x6800,
++ 0xa420, 0x6804, 0xa319, 0x2b68, 0x6c1e, 0x6b22, 0x6850, 0xc0fd,
++ 0x6852, 0x2c00, 0x681a, 0x2800, 0x6832, 0x2a00, 0x6826, 0x007f,
++ 0x007f, 0x007f, 0xa006, 0x0078, 0x2132, 0x087f, 0x097f, 0x0a7f,
++ 0xa085, 0x0001, 0x007c, 0x2001, 0x0005, 0x2004, 0xa084, 0x0007,
++ 0x0079, 0x213a, 0x2142, 0x2143, 0x2146, 0x2149, 0x214e, 0x2151,
++ 0x2156, 0x215b, 0x007c, 0x1078, 0x1eaa, 0x007c, 0x1078, 0x1913,
++ 0x007c, 0x1078, 0x1913, 0x1078, 0x1eaa, 0x007c, 0x1078, 0x14be,
++ 0x007c, 0x1078, 0x1eaa, 0x1078, 0x14be, 0x007c, 0x1078, 0x1913,
++ 0x1078, 0x14be, 0x007c, 0x1078, 0x1913, 0x1078, 0x1eaa, 0x1078,
++ 0x14be, 0x007c, 0x127e, 0x2091, 0x2300, 0x2079, 0x0200, 0x2071,
++ 0xab80, 0x2069, 0xa600, 0x2009, 0x0004, 0x7912, 0x7817, 0x0004,
++ 0x1078, 0x251f, 0x781b, 0x0002, 0x20e1, 0x8700, 0x127f, 0x007c,
++ 0x127e, 0x2091, 0x2300, 0x781c, 0xa084, 0x0007, 0x0079, 0x2180,
++ 0x21a4, 0x2188, 0x218c, 0x2190, 0x2196, 0x219a, 0x219e, 0x21a2,
++ 0x1078, 0x548e, 0x0078, 0x21a4, 0x1078, 0x54da, 0x0078, 0x21a4,
++ 0x1078, 0x548e, 0x1078, 0x54da, 0x0078, 0x21a4, 0x1078, 0x21a6,
++ 0x0078, 0x21a4, 0x1078, 0x21a6, 0x0078, 0x21a4, 0x1078, 0x21a6,
++ 0x0078, 0x21a4, 0x1078, 0x21a6, 0x127f, 0x007c, 0x007e, 0x017e,
++ 0x027e, 0x1078, 0xa5d2, 0x7930, 0xa184, 0x0003, 0x0040, 0x21c9,
++ 0x2001, 0xa8c0, 0x2004, 0xa005, 0x0040, 0x21c5, 0x2001, 0x0133,
++ 0x2004, 0xa005, 0x1040, 0x1332, 0x0c7e, 0x2001, 0xa8c0, 0x2064,
++ 0x1078, 0x8a01, 0x0c7f, 0x0078, 0x21f2, 0x20e1, 0x9040, 0x0078,
++ 0x21f2, 0xa184, 0x0030, 0x0040, 0x21da, 0x6a00, 0xa286, 0x0003,
++ 0x00c0, 0x21d4, 0x0078, 0x21d6, 0x1078, 0x4224, 0x20e1, 0x9010,
++ 0x0078, 0x21f2, 0xa184, 0x00c0, 0x0040, 0x21ec, 0x0e7e, 0x037e,
++ 0x047e, 0x057e, 0x2071, 0xa8e7, 0x1078, 0x1af4, 0x057f, 0x047f,
++ 0x037f, 0x0e7f, 0x0078, 0x21f2, 0xa184, 0x0300, 0x0040, 0x21f2,
++ 0x20e1, 0x9020, 0x7932, 0x027f, 0x017f, 0x007f, 0x007c, 0x017e,
++ 0x0e7e, 0x0f7e, 0x2071, 0xa600, 0x7128, 0x2001, 0xa890, 0x2102,
++ 0x2001, 0xa898, 0x2102, 0xa182, 0x0211, 0x00c8, 0x220b, 0x2009,
++ 0x0008, 0x0078, 0x2235, 0xa182, 0x0259, 0x00c8, 0x2213, 0x2009,
++ 0x0007, 0x0078, 0x2235, 0xa182, 0x02c1, 0x00c8, 0x221b, 0x2009,
++ 0x0006, 0x0078, 0x2235, 0xa182, 0x0349, 0x00c8, 0x2223, 0x2009,
++ 0x0005, 0x0078, 0x2235, 0xa182, 0x0421, 0x00c8, 0x222b, 0x2009,
++ 0x0004, 0x0078, 0x2235, 0xa182, 0x0581, 0x00c8, 0x2233, 0x2009,
++ 0x0003, 0x0078, 0x2235, 0x2009, 0x0002, 0x2079, 0x0200, 0x7912,
++ 0x7817, 0x0004, 0x1078, 0x251f, 0x0f7f, 0x0e7f, 0x017f, 0x007c,
++ 0x127e, 0x2091, 0x2200, 0x2061, 0x0100, 0x2071, 0xa600, 0x6024,
++ 0x6026, 0x6053, 0x0030, 0x6033, 0x00ef, 0x60e7, 0x0000, 0x60eb,
++ 0x00ef, 0x60e3, 0x0008, 0x604b, 0xf7f7, 0x6043, 0x0000, 0x602f,
++ 0x0080, 0x602f, 0x0000, 0x6007, 0x0eaf, 0x600f, 0x00ff, 0x602b,
++ 0x002f, 0x127f, 0x007c, 0x2001, 0xa630, 0x2003, 0x0000, 0x2001,
++ 0xa62f, 0x2003, 0x0001, 0x007c, 0x127e, 0x2091, 0x2200, 0x007e,
++ 0x017e, 0x027e, 0x6124, 0xa184, 0x002c, 0x00c0, 0x227b, 0xa184,
++ 0x0007, 0x0079, 0x2281, 0xa195, 0x0004, 0xa284, 0x0007, 0x0079,
++ 0x2281, 0x22ad, 0x2289, 0x228d, 0x2291, 0x2297, 0x229b, 0x22a1,
++ 0x22a7, 0x1078, 0x5c56, 0x0078, 0x22ad, 0x1078, 0x5d45, 0x0078,
++ 0x22ad, 0x1078, 0x5d45, 0x1078, 0x5c56, 0x0078, 0x22ad, 0x1078,
++ 0x22b2, 0x0078, 0x22ad, 0x1078, 0x5c56, 0x1078, 0x22b2, 0x0078,
++ 0x22ad, 0x1078, 0x5d45, 0x1078, 0x22b2, 0x0078, 0x22ad, 0x1078,
++ 0x5d45, 0x1078, 0x5c56, 0x1078, 0x22b2, 0x027f, 0x017f, 0x007f,
++ 0x127f, 0x007c, 0x6124, 0xd1ac, 0x0040, 0x23ac, 0x017e, 0x047e,
++ 0x0c7e, 0x644c, 0xa486, 0xf0f0, 0x00c0, 0x22c5, 0x2061, 0x0100,
++ 0x644a, 0x6043, 0x0090, 0x6043, 0x0010, 0x74c6, 0xa48c, 0xff00,
++ 0x7034, 0xd084, 0x0040, 0x22dd, 0xa186, 0xf800, 0x00c0, 0x22dd,
++ 0x703c, 0xd084, 0x00c0, 0x22dd, 0xc085, 0x703e, 0x037e, 0x2418,
++ 0x2011, 0x8016, 0x1078, 0x361b, 0x037f, 0xa196, 0xff00, 0x0040,
++ 0x231f, 0x6030, 0xa084, 0x00ff, 0x810f, 0xa116, 0x0040, 0x231f,
++ 0x7130, 0xd184, 0x00c0, 0x231f, 0x2011, 0xa653, 0x2214, 0xd2ec,
++ 0x0040, 0x22fa, 0xc18d, 0x7132, 0x2011, 0xa653, 0x2214, 0xd2ac,
++ 0x00c0, 0x231f, 0x6240, 0xa294, 0x0010, 0x0040, 0x2306, 0x6248,
++ 0xa294, 0xff00, 0xa296, 0xff00, 0x0040, 0x231f, 0x7030, 0xd08c,
++ 0x0040, 0x2371, 0x7034, 0xd08c, 0x00c0, 0x2316, 0x2001, 0xa60c,
++ 0x200c, 0xd1ac, 0x00c0, 0x2371, 0xc1ad, 0x2102, 0x037e, 0x73c4,
++ 0x2011, 0x8013, 0x1078, 0x361b, 0x037f, 0x0078, 0x2371, 0x7034,
++ 0xd08c, 0x00c0, 0x232b, 0x2001, 0xa60c, 0x200c, 0xd1ac, 0x00c0,
++ 0x2371, 0xc1ad, 0x2102, 0x037e, 0x73c4, 0x2011, 0x8013, 0x1078,
++ 0x361b, 0x037f, 0x7130, 0xc185, 0x7132, 0x2011, 0xa653, 0x220c,
++ 0xd1a4, 0x0040, 0x2355, 0x017e, 0x2009, 0x0001, 0x2011, 0x0100,
++ 0x1078, 0x5bf1, 0x2019, 0x000e, 0x1078, 0xa195, 0xa484, 0x00ff,
++ 0xa080, 0x29c0, 0x200c, 0xa18c, 0xff00, 0x810f, 0x8127, 0xa006,
++ 0x2009, 0x000e, 0x1078, 0xa21d, 0x017f, 0xd1ac, 0x00c0, 0x2362,
++ 0x017e, 0x2009, 0x0000, 0x2019, 0x0004, 0x1078, 0x284f, 0x017f,
++ 0x0078, 0x2371, 0x157e, 0x20a9, 0x007f, 0x2009, 0x0000, 0x1078,
++ 0x45c4, 0x00c0, 0x236d, 0x1078, 0x42f8, 0x8108, 0x00f0, 0x2367,
++ 0x157f, 0x0c7f, 0x047f, 0x0f7e, 0x2079, 0xa8c4, 0x783c, 0xa086,
++ 0x0000, 0x0040, 0x2383, 0x6027, 0x0004, 0x783f, 0x0000, 0x2079,
++ 0x0140, 0x7803, 0x0000, 0x0f7f, 0x2011, 0x0003, 0x1078, 0x70e0,
++ 0x2011, 0x0002, 0x1078, 0x70ea, 0x1078, 0x6fc4, 0x037e, 0x2019,
++ 0x0000, 0x1078, 0x7058, 0x037f, 0x60e3, 0x0000, 0x017f, 0x2001,
++ 0xa600, 0x2014, 0xa296, 0x0004, 0x00c0, 0x23a4, 0xd19c, 0x00c0,
++ 0x23ac, 0x6228, 0xc29d, 0x622a, 0x2003, 0x0001, 0x2001, 0xa622,
++ 0x2003, 0x0000, 0x6027, 0x0020, 0xd194, 0x0040, 0x2490, 0x0f7e,
++ 0x2079, 0xa8c4, 0x783c, 0xa086, 0x0001, 0x00c0, 0x23d0, 0x017e,
++ 0x6027, 0x0004, 0x783f, 0x0000, 0x2079, 0x0140, 0x7803, 0x1000,
++ 0x7803, 0x0000, 0x2079, 0xa8b1, 0x7807, 0x0000, 0x7833, 0x0000,
++ 0x1078, 0x62d1, 0x1078, 0x639b, 0x017f, 0x0f7f, 0x0078, 0x2490,
++ 0x0f7f, 0x017e, 0x3900, 0xa082, 0xa9e3, 0x00c8, 0x23db, 0x017e,
++ 0x1078, 0x747a, 0x017f, 0x6220, 0xd2b4, 0x0040, 0x2446, 0x1078,
++ 0x5acb, 0x1078, 0x6e0f, 0x6027, 0x0004, 0x0f7e, 0x2019, 0xa8ba,
++ 0x2304, 0xa07d, 0x0040, 0x241c, 0x7804, 0xa086, 0x0032, 0x00c0,
++ 0x241c, 0x0d7e, 0x0c7e, 0x0e7e, 0x2069, 0x0140, 0x618c, 0x6288,
++ 0x7818, 0x608e, 0x7808, 0x608a, 0x6043, 0x0002, 0x2001, 0x0003,
++ 0x8001, 0x00c0, 0x2400, 0x6043, 0x0000, 0x6803, 0x1000, 0x6803,
++ 0x0000, 0x618e, 0x628a, 0x1078, 0x61cd, 0x1078, 0x62d1, 0x7810,
++ 0x2070, 0x7037, 0x0103, 0x2f60, 0x1078, 0x772d, 0x0e7f, 0x0c7f,
++ 0x0d7f, 0x0f7f, 0x017f, 0x007c, 0x0f7f, 0x0d7e, 0x2069, 0x0140,
++ 0x6804, 0xa084, 0x4000, 0x0040, 0x2429, 0x6803, 0x1000, 0x6803,
++ 0x0000, 0x0d7f, 0x0c7e, 0x2061, 0xa8b1, 0x6028, 0xa09a, 0x00c8,
++ 0x00c8, 0x2439, 0x8000, 0x602a, 0x0c7f, 0x1078, 0x6e01, 0x0078,
++ 0x248f, 0x2019, 0xa8ba, 0x2304, 0xa065, 0x0040, 0x2443, 0x2009,
++ 0x0027, 0x1078, 0x775c, 0x0c7f, 0x0078, 0x248f, 0xd2bc, 0x0040,
++ 0x248f, 0x1078, 0x5ad8, 0x6017, 0x0010, 0x6027, 0x0004, 0x0d7e,
++ 0x2069, 0x0140, 0x6804, 0xa084, 0x4000, 0x0040, 0x245b, 0x6803,
++ 0x1000, 0x6803, 0x0000, 0x0d7f, 0x0c7e, 0x2061, 0xa8b1, 0x6044,
++ 0xa09a, 0x00c8, 0x00c8, 0x247e, 0x8000, 0x6046, 0x603c, 0x0c7f,
++ 0xa005, 0x0040, 0x248f, 0x2009, 0x07d0, 0x1078, 0x5ad0, 0xa080,
++ 0x0007, 0x2004, 0xa086, 0x0006, 0x00c0, 0x247a, 0x6017, 0x0012,
++ 0x0078, 0x248f, 0x6017, 0x0016, 0x0078, 0x248f, 0x037e, 0x2019,
++ 0x0001, 0x1078, 0x7058, 0x037f, 0x2019, 0xa8c0, 0x2304, 0xa065,
++ 0x0040, 0x248e, 0x2009, 0x004f, 0x1078, 0x775c, 0x0c7f, 0x017f,
++ 0xd19c, 0x0040, 0x24e4, 0x7034, 0xd0ac, 0x00c0, 0x24c1, 0x017e,
++ 0x157e, 0x6027, 0x0008, 0x602f, 0x0020, 0x20a9, 0x000a, 0x00f0,
++ 0x249f, 0x602f, 0x0000, 0x6150, 0xa185, 0x1400, 0x6052, 0x20a9,
++ 0x0320, 0x00e0, 0x24a9, 0x2091, 0x6000, 0x6020, 0xd09c, 0x00c0,
++ 0x24b8, 0x157f, 0x6152, 0x017f, 0x6027, 0x0008, 0x0078, 0x24e4,
++ 0x1078, 0x2577, 0x00f0, 0x24a9, 0x157f, 0x6152, 0x017f, 0x6027,
++ 0x0008, 0x017e, 0x6028, 0xc09c, 0x602a, 0x2011, 0x0003, 0x1078,
++ 0x70e0, 0x2011, 0x0002, 0x1078, 0x70ea, 0x1078, 0x6fc4, 0x037e,
++ 0x2019, 0x0000, 0x1078, 0x7058, 0x037f, 0x60e3, 0x0000, 0x1078,
++ 0xa5ad, 0x1078, 0xa5cb, 0x2001, 0xa600, 0x2003, 0x0004, 0x6027,
++ 0x0008, 0x1078, 0x1246, 0x017f, 0xa18c, 0xffd0, 0x6126, 0x007c,
++ 0x007e, 0x017e, 0x027e, 0x0e7e, 0x0f7e, 0x127e, 0x2091, 0x8000,
++ 0x2071, 0xa600, 0x71bc, 0x70be, 0xa116, 0x0040, 0x2518, 0x81ff,
++ 0x0040, 0x2500, 0x2011, 0x8011, 0x1078, 0x361b, 0x0078, 0x2518,
++ 0x2011, 0x8012, 0x1078, 0x361b, 0x2001, 0xa672, 0x2004, 0xd0fc,
++ 0x00c0, 0x2518, 0x037e, 0x0c7e, 0x1078, 0x6f9f, 0x2061, 0x0100,
++ 0x2019, 0x0028, 0x2009, 0x0000, 0x1078, 0x284f, 0x0c7f, 0x037f,
++ 0x127f, 0x0f7f, 0x0e7f, 0x027f, 0x017f, 0x007f, 0x007c, 0x0c7e,
++ 0x0f7e, 0x007e, 0x027e, 0x2061, 0x0100, 0xa190, 0x253b, 0x2204,
++ 0x60f2, 0x2011, 0x2548, 0x6000, 0xa082, 0x0003, 0x00c8, 0x2534,
++ 0x2001, 0x00ff, 0x0078, 0x2535, 0x2204, 0x60ee, 0x027f, 0x007f,
++ 0x0f7f, 0x0c7f, 0x007c, 0x0840, 0x0840, 0x0840, 0x0580, 0x0420,
++ 0x0348, 0x02c0, 0x0258, 0x0210, 0x01a8, 0x01a8, 0x01a8, 0x01a8,
++ 0x0140, 0x00f8, 0x00d0, 0x00b0, 0x00a0, 0x2028, 0xa18c, 0x00ff,
++ 0x2130, 0xa094, 0xff00, 0x00c0, 0x2558, 0x81ff, 0x0040, 0x255c,
++ 0x1078, 0x5761, 0x0078, 0x2563, 0xa080, 0x29c0, 0x200c, 0xa18c,
++ 0xff00, 0x810f, 0xa006, 0x007c, 0xa080, 0x29c0, 0x200c, 0xa18c,
++ 0x00ff, 0x007c, 0x0c7e, 0x2061, 0xa600, 0x6030, 0x0040, 0x2573,
++ 0xc09d, 0x0078, 0x2574, 0xc09c, 0x6032, 0x0c7f, 0x007c, 0x007e,
++ 0x157e, 0x0f7e, 0x2079, 0x0100, 0x20a9, 0x000a, 0x7854, 0xd08c,
++ 0x00c0, 0x2584, 0x00f0, 0x257e, 0x0f7f, 0x157f, 0x007f, 0x007c,
++ 0x0c7e, 0x007e, 0x2061, 0x0100, 0x6030, 0x007e, 0x6048, 0x007e,
++ 0x60e4, 0x007e, 0x60e8, 0x007e, 0x6050, 0x007e, 0x60f0, 0x007e,
++ 0x60ec, 0x007e, 0x600c, 0x007e, 0x6004, 0x007e, 0x6028, 0x007e,
++ 0x60e0, 0x007e, 0x602f, 0x0100, 0x602f, 0x0000, 0x0005, 0x0005,
++ 0x0005, 0x0005, 0x602f, 0x0040, 0x602f, 0x0000, 0x007f, 0x60e2,
++ 0x007f, 0x602a, 0x007f, 0x6006, 0x007f, 0x600e, 0x007f, 0x60ee,
++ 0x007f, 0x60f2, 0x007f, 0x6052, 0x007f, 0x60ea, 0x007f, 0x60e6,
++ 0x007f, 0x604a, 0x007f, 0x6032, 0x007f, 0x0c7f, 0x007c, 0x25e7,
++ 0x25eb, 0x25ef, 0x25f5, 0x25fb, 0x2601, 0x2607, 0x260f, 0x2617,
++ 0x261d, 0x2623, 0x262b, 0x2633, 0x263b, 0x2643, 0x264d, 0x2657,
++ 0x2657, 0x2657, 0x2657, 0x2657, 0x2657, 0x2657, 0x2657, 0x2657,
++ 0x2657, 0x2657, 0x2657, 0x2657, 0x2657, 0x2657, 0x2657, 0x107e,
++ 0x007e, 0x0078, 0x2670, 0x107e, 0x007e, 0x0078, 0x2670, 0x107e,
++ 0x007e, 0x1078, 0x226c, 0x0078, 0x2670, 0x107e, 0x007e, 0x1078,
++ 0x226c, 0x0078, 0x2670, 0x107e, 0x007e, 0x1078, 0x2133, 0x0078,
++ 0x2670, 0x107e, 0x007e, 0x1078, 0x2133, 0x0078, 0x2670, 0x107e,
++ 0x007e, 0x1078, 0x226c, 0x1078, 0x2133, 0x0078, 0x2670, 0x107e,
++ 0x007e, 0x1078, 0x226c, 0x1078, 0x2133, 0x0078, 0x2670, 0x107e,
++ 0x007e, 0x1078, 0x2178, 0x0078, 0x2670, 0x107e, 0x007e, 0x1078,
++ 0x2178, 0x0078, 0x2670, 0x107e, 0x007e, 0x1078, 0x226c, 0x1078,
++ 0x2178, 0x0078, 0x2670, 0x107e, 0x007e, 0x1078, 0x226c, 0x1078,
++ 0x2178, 0x0078, 0x2670, 0x107e, 0x007e, 0x1078, 0x2133, 0x1078,
++ 0x2178, 0x0078, 0x2670, 0x107e, 0x007e, 0x1078, 0x2133, 0x1078,
++ 0x2178, 0x0078, 0x2670, 0x107e, 0x007e, 0x1078, 0x226c, 0x1078,
++ 0x2133, 0x1078, 0x2178, 0x0078, 0x2670, 0x107e, 0x007e, 0x1078,
++ 0x226c, 0x1078, 0x2133, 0x1078, 0x2178, 0x0078, 0x2670, 0x0005,
++ 0x0078, 0x2657, 0xb084, 0x003c, 0x8004, 0x8004, 0x0079, 0x2660,
++ 0x2670, 0x25ed, 0x25f1, 0x25f7, 0x25fd, 0x2603, 0x2609, 0x2611,
++ 0x2619, 0x261f, 0x2625, 0x262d, 0x2635, 0x263d, 0x2645, 0x264f,
++ 0x0008, 0x265a, 0x007f, 0x107f, 0x2091, 0x8001, 0x007c, 0x0c7e,
++ 0x027e, 0x047e, 0x2021, 0x0000, 0x1078, 0x4967, 0x00c0, 0x2772,
++ 0x70cc, 0xd09c, 0x0040, 0x268e, 0xd084, 0x00c0, 0x268e, 0xd0bc,
++ 0x00c0, 0x2772, 0x1078, 0x2776, 0x0078, 0x2772, 0xd0cc, 0x00c0,
++ 0x2772, 0xd094, 0x0040, 0x2698, 0x7097, 0xffff, 0x0078, 0x2772,
++ 0x2001, 0x010c, 0x203c, 0x7284, 0xd284, 0x0040, 0x2701, 0xd28c,
++ 0x00c0, 0x2701, 0x037e, 0x7394, 0xa38e, 0xffff, 0x0040, 0x26ab,
++ 0x83ff, 0x00c0, 0x26ad, 0x2019, 0x0001, 0x8314, 0xa2e0, 0xacc0,
++ 0x2c04, 0xa38c, 0x0001, 0x0040, 0x26ba, 0xa084, 0xff00, 0x8007,
++ 0x0078, 0x26bc, 0xa084, 0x00ff, 0xa70e, 0x0040, 0x26f6, 0xa08e,
++ 0x0000, 0x0040, 0x26f6, 0xa08e, 0x00ff, 0x00c0, 0x26d3, 0x7230,
++ 0xd284, 0x00c0, 0x26fc, 0x7284, 0xc28d, 0x7286, 0x7097, 0xffff,
++ 0x037f, 0x0078, 0x2701, 0x2009, 0x0000, 0x1078, 0x254d, 0x1078,
++ 0x455c, 0x00c0, 0x26f9, 0x6004, 0xa084, 0x00ff, 0xa086, 0x0006,
++ 0x00c0, 0x26f0, 0x7030, 0xd08c, 0x0040, 0x26ea, 0x6000, 0xd0bc,
++ 0x0040, 0x26f0, 0x1078, 0x278c, 0x0040, 0x26f9, 0x0078, 0x26f6,
++ 0x1078, 0x28c4, 0x1078, 0x27b9, 0x0040, 0x26f9, 0x8318, 0x0078,
++ 0x26ad, 0x7396, 0x0078, 0x26fe, 0x7097, 0xffff, 0x037f, 0x0078,
++ 0x2772, 0xa780, 0x29c0, 0x203c, 0xa7bc, 0xff00, 0x873f, 0x2041,
++ 0x007e, 0x7094, 0xa096, 0xffff, 0x00c0, 0x2713, 0x2009, 0x0000,
++ 0x28a8, 0x0078, 0x271f, 0xa812, 0x0048, 0x271b, 0x2008, 0xa802,
++ 0x20a8, 0x0078, 0x271f, 0x7097, 0xffff, 0x0078, 0x2772, 0x2700,
++ 0x157e, 0x017e, 0xa106, 0x0040, 0x2766, 0xc484, 0x1078, 0x45c4,
++ 0x0040, 0x2730, 0x1078, 0x455c, 0x00c0, 0x276f, 0x0078, 0x2731,
++ 0xc485, 0x6004, 0xa084, 0x00ff, 0xa086, 0x0006, 0x00c0, 0x2740,
++ 0x7030, 0xd08c, 0x0040, 0x275e, 0x6000, 0xd0bc, 0x00c0, 0x275e,
++ 0x7284, 0xd28c, 0x0040, 0x2756, 0x6004, 0xa084, 0x00ff, 0xa082,
++ 0x0006, 0x0048, 0x2766, 0xd484, 0x00c0, 0x2752, 0x1078, 0x457f,
++ 0x0078, 0x2754, 0x1078, 0x298e, 0x0078, 0x2766, 0x1078, 0x28c4,
++ 0x1078, 0x27b9, 0x0040, 0x276f, 0x0078, 0x2766, 0x1078, 0x2959,
++ 0x0040, 0x2766, 0x1078, 0x278c, 0x0040, 0x276f, 0x017f, 0x8108,
++ 0x157f, 0x00f0, 0x271f, 0x7097, 0xffff, 0x0078, 0x2772, 0x017f,
++ 0x157f, 0x7196, 0x047f, 0x027f, 0x0c7f, 0x007c, 0x0c7e, 0x017e,
++ 0x7097, 0x0001, 0x2009, 0x007e, 0x1078, 0x455c, 0x00c0, 0x2789,
++ 0x1078, 0x28c4, 0x1078, 0x27b9, 0x0040, 0x2789, 0x70cc, 0xc0bd,
++ 0x70ce, 0x017f, 0x0c7f, 0x007c, 0x017e, 0x077e, 0x0d7e, 0x0c7e,
++ 0x2c68, 0x2001, 0xa657, 0x2004, 0xa084, 0x00ff, 0x6842, 0x1078,
++ 0x76c7, 0x0040, 0x27b4, 0x2d00, 0x601a, 0x601f, 0x0001, 0x2001,
++ 0x0000, 0x1078, 0x44ee, 0x2001, 0x0000, 0x1078, 0x4502, 0x127e,
++ 0x2091, 0x8000, 0x7090, 0x8000, 0x7092, 0x127f, 0x2009, 0x0004,
++ 0x1078, 0x775c, 0xa085, 0x0001, 0x0c7f, 0x0d7f, 0x077f, 0x017f,
++ 0x007c, 0x017e, 0x077e, 0x0d7e, 0x0c7e, 0x2c68, 0x2001, 0xa657,
++ 0x2004, 0xa084, 0x00ff, 0x6842, 0x1078, 0x9187, 0x0040, 0x27f2,
++ 0x2d00, 0x601a, 0x6800, 0xc0c4, 0x6802, 0x68a0, 0xa086, 0x007e,
++ 0x0040, 0x27db, 0x6804, 0xa084, 0x00ff, 0xa086, 0x0006, 0x00c0,
++ 0x27db, 0x1078, 0x2880, 0x601f, 0x0001, 0x2001, 0x0000, 0x1078,
++ 0x44ee, 0x2001, 0x0002, 0x1078, 0x4502, 0x127e, 0x2091, 0x8000,
++ 0x7090, 0x8000, 0x7092, 0x127f, 0x2009, 0x0002, 0x1078, 0x775c,
++ 0xa085, 0x0001, 0x0c7f, 0x0d7f, 0x077f, 0x017f, 0x007c, 0x0c7e,
++ 0x027e, 0x2009, 0x0080, 0x1078, 0x455c, 0x00c0, 0x2805, 0x1078,
++ 0x2808, 0x0040, 0x2805, 0x70d3, 0xffff, 0x027f, 0x0c7f, 0x007c,
++ 0x017e, 0x077e, 0x0d7e, 0x0c7e, 0x2c68, 0x1078, 0x76c7, 0x0040,
++ 0x282a, 0x2d00, 0x601a, 0x601f, 0x0001, 0x2001, 0x0000, 0x1078,
++ 0x44ee, 0x2001, 0x0002, 0x1078, 0x4502, 0x127e, 0x2091, 0x8000,
++ 0x70d4, 0x8000, 0x70d6, 0x127f, 0x2009, 0x0002, 0x1078, 0x775c,
++ 0xa085, 0x0001, 0x0c7f, 0x0d7f, 0x077f, 0x017f, 0x007c, 0x0c7e,
++ 0x0d7e, 0x127e, 0x2091, 0x8000, 0x2009, 0x007f, 0x1078, 0x455c,
++ 0x00c0, 0x284b, 0x2c68, 0x1078, 0x76c7, 0x0040, 0x284b, 0x2d00,
++ 0x601a, 0x6312, 0x601f, 0x0001, 0x620a, 0x2009, 0x0022, 0x1078,
++ 0x775c, 0xa085, 0x0001, 0x127f, 0x0d7f, 0x0c7f, 0x007c, 0x0e7e,
++ 0x0c7e, 0x067e, 0x037e, 0x027e, 0x1078, 0x5f0e, 0x1078, 0x5eae,
++ 0x1078, 0x8068, 0x2130, 0x81ff, 0x0040, 0x2864, 0x20a9, 0x007e,
++ 0x2009, 0x0000, 0x0078, 0x2868, 0x20a9, 0x007f, 0x2009, 0x0000,
++ 0x017e, 0x1078, 0x45c4, 0x00c0, 0x2871, 0x1078, 0x47e9, 0x1078,
++ 0x42f8, 0x017f, 0x8108, 0x00f0, 0x2868, 0x86ff, 0x00c0, 0x287a,
++ 0x1078, 0x119b, 0x027f, 0x037f, 0x067f, 0x0c7f, 0x0e7f, 0x007c,
++ 0x0e7e, 0x0c7e, 0x037e, 0x027e, 0x017e, 0x6218, 0x2270, 0x72a0,
++ 0x027e, 0x2019, 0x0029, 0x1078, 0x5f01, 0x077e, 0x2039, 0x0000,
++ 0x1078, 0x5e0a, 0x2c08, 0x1078, 0x9f8b, 0x077f, 0x017f, 0x2e60,
++ 0x1078, 0x47e9, 0x6210, 0x6314, 0x1078, 0x42f8, 0x6212, 0x6316,
++ 0x017f, 0x027f, 0x037f, 0x0c7f, 0x0e7f, 0x007c, 0x0e7e, 0x007e,
++ 0x6018, 0xa080, 0x0028, 0x2004, 0xd0bc, 0x00c0, 0x28ba, 0x2071,
++ 0xa600, 0x7090, 0xa005, 0x0040, 0x28b7, 0x8001, 0x7092, 0x007f,
++ 0x0e7f, 0x007c, 0x2071, 0xa600, 0x70d4, 0xa005, 0x0040, 0x28b7,
++ 0x8001, 0x70d6, 0x0078, 0x28b7, 0x6000, 0xc08c, 0x6002, 0x007c,
++ 0x0f7e, 0x0e7e, 0x0c7e, 0x037e, 0x027e, 0x017e, 0x157e, 0x2178,
++ 0x81ff, 0x00c0, 0x28d7, 0x20a9, 0x0001, 0x0078, 0x28f2, 0x2001,
++ 0xa653, 0x2004, 0xd0c4, 0x0040, 0x28ee, 0xd0a4, 0x0040, 0x28ee,
++ 0x047e, 0x6018, 0xa080, 0x0028, 0x2024, 0xa4a4, 0x00ff, 0x8427,
++ 0xa006, 0x2009, 0x002d, 0x1078, 0xa21d, 0x047f, 0x20a9, 0x00ff,
++ 0x2011, 0x0000, 0x027e, 0xa28e, 0x007e, 0x0040, 0x2936, 0xa28e,
++ 0x007f, 0x0040, 0x2936, 0xa28e, 0x0080, 0x0040, 0x2936, 0xa288,
++ 0xa735, 0x210c, 0x81ff, 0x0040, 0x2936, 0x8fff, 0x1040, 0x2942,
++ 0x0c7e, 0x2160, 0x2001, 0x0001, 0x1078, 0x4972, 0x0c7f, 0x2019,
++ 0x0029, 0x1078, 0x5f01, 0x077e, 0x2039, 0x0000, 0x1078, 0x5e0a,
++ 0x0c7e, 0x027e, 0x2160, 0x6204, 0xa294, 0x00ff, 0xa286, 0x0006,
++ 0x00c0, 0x2926, 0x6007, 0x0404, 0x0078, 0x292b, 0x2001, 0x0004,
++ 0x8007, 0xa215, 0x6206, 0x027f, 0x0c7f, 0x017e, 0x2c08, 0x1078,
++ 0x9f8b, 0x017f, 0x077f, 0x2160, 0x1078, 0x47e9, 0x027f, 0x8210,
++ 0x00f0, 0x28f2, 0x157f, 0x017f, 0x027f, 0x037f, 0x0c7f, 0x0e7f,
++ 0x0f7f, 0x007c, 0x047e, 0x027e, 0x017e, 0x2001, 0xa653, 0x2004,
++ 0xd0c4, 0x0040, 0x2955, 0xd0a4, 0x0040, 0x2955, 0xa006, 0x2220,
++ 0x8427, 0x2009, 0x0029, 0x1078, 0xa21d, 0x017f, 0x027f, 0x047f,
++ 0x007c, 0x017e, 0x027e, 0x037e, 0x0c7e, 0x7284, 0x82ff, 0x0040,
++ 0x2987, 0xa290, 0xa653, 0x2214, 0xd2ac, 0x00c0, 0x2987, 0x2100,
++ 0x1078, 0x2564, 0x81ff, 0x0040, 0x2989, 0x2019, 0x0001, 0x8314,
++ 0xa2e0, 0xacc0, 0x2c04, 0xd384, 0x0040, 0x297b, 0xa084, 0xff00,
++ 0x8007, 0x0078, 0x297d, 0xa084, 0x00ff, 0xa116, 0x0040, 0x2989,
++ 0xa096, 0x00ff, 0x0040, 0x2987, 0x8318, 0x0078, 0x296f, 0xa085,
++ 0x0001, 0x0c7f, 0x037f, 0x027f, 0x017f, 0x007c, 0x017e, 0x0c7e,
++ 0x127e, 0x2091, 0x8000, 0x017e, 0x027e, 0x037e, 0x2110, 0x027e,
++ 0x2019, 0x0029, 0x1078, 0x73d0, 0x027f, 0x1078, 0xa4f1, 0x037f,
++ 0x027f, 0x017f, 0xa180, 0xa735, 0x2004, 0xa065, 0x0040, 0x29b7,
++ 0x017e, 0x0c7e, 0x1078, 0x9187, 0x017f, 0x1040, 0x1332, 0x611a,
++ 0x1078, 0x2880, 0x1078, 0x772d, 0x017f, 0x1078, 0x457f, 0x127f,
++ 0x0c7f, 0x017f, 0x007c, 0x2001, 0xa633, 0x2004, 0xd0cc, 0x007c,
++ 0x7eef, 0x7de8, 0x7ce4, 0x80e2, 0x7be1, 0x80e0, 0x80dc, 0x80da,
++ 0x7ad9, 0x80d6, 0x80d5, 0x80d4, 0x80d3, 0x80d2, 0x80d1, 0x79ce,
++ 0x78cd, 0x80cc, 0x80cb, 0x80ca, 0x80c9, 0x80c7, 0x80c6, 0x77c5,
++ 0x76c3, 0x80bc, 0x80ba, 0x75b9, 0x80b6, 0x74b5, 0x73b4, 0x72b3,
++ 0x80b2, 0x80b1, 0x80ae, 0x71ad, 0x80ac, 0x70ab, 0x6faa, 0x6ea9,
++ 0x80a7, 0x6da6, 0x6ca5, 0x6ba3, 0x6a9f, 0x699e, 0x689d, 0x809b,
++ 0x8098, 0x6797, 0x6690, 0x658f, 0x6488, 0x6384, 0x6282, 0x8081,
++ 0x8080, 0x617c, 0x607a, 0x8079, 0x5f76, 0x8075, 0x8074, 0x8073,
++ 0x8072, 0x8071, 0x806e, 0x5e6d, 0x806c, 0x5d6b, 0x5c6a, 0x5b69,
++ 0x8067, 0x5a66, 0x5965, 0x5863, 0x575c, 0x565a, 0x5559, 0x8056,
++ 0x8055, 0x5454, 0x5353, 0x5252, 0x5151, 0x504e, 0x4f4d, 0x804c,
++ 0x804b, 0x4e4a, 0x4d49, 0x8047, 0x4c46, 0x8045, 0x8043, 0x803c,
++ 0x803a, 0x8039, 0x8036, 0x4b35, 0x8034, 0x4a33, 0x4932, 0x4831,
++ 0x802e, 0x472d, 0x462c, 0x452b, 0x442a, 0x4329, 0x4227, 0x8026,
++ 0x8025, 0x4123, 0x401f, 0x3f1e, 0x3e1d, 0x3d1b, 0x3c18, 0x8017,
++ 0x8010, 0x3b0f, 0x3a08, 0x8004, 0x3902, 0x8001, 0x8000, 0x8000,
++ 0x3800, 0x3700, 0x3600, 0x8000, 0x3500, 0x8000, 0x8000, 0x8000,
++ 0x3400, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x3300,
++ 0x3200, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x3100,
++ 0x3000, 0x8000, 0x8000, 0x2f00, 0x8000, 0x2e00, 0x2d00, 0x2c00,
++ 0x8000, 0x8000, 0x8000, 0x2b00, 0x8000, 0x2a00, 0x2900, 0x2800,
++ 0x8000, 0x2700, 0x2600, 0x2500, 0x2400, 0x2300, 0x2200, 0x8000,
++ 0x8000, 0x2100, 0x2000, 0x1f00, 0x1e00, 0x1d00, 0x1c00, 0x8000,
++ 0x8000, 0x1b00, 0x1a00, 0x8000, 0x1900, 0x8000, 0x8000, 0x8000,
++ 0x8000, 0x8000, 0x8000, 0x1800, 0x8000, 0x1700, 0x1600, 0x1500,
++ 0x8000, 0x1400, 0x1300, 0x1200, 0x1100, 0x1000, 0x0f00, 0x8000,
++ 0x8000, 0x0e00, 0x0d00, 0x0c00, 0x0b00, 0x0a00, 0x0900, 0x8000,
++ 0x8000, 0x0800, 0x0700, 0x8000, 0x0600, 0x8000, 0x8000, 0x8000,
++ 0x0500, 0x0400, 0x0300, 0x8000, 0x0200, 0x8000, 0x8000, 0x8000,
++ 0x0100, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x0000,
++ 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000,
++ 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000,
++ 0x2071, 0xa682, 0x7003, 0x0002, 0xa006, 0x7012, 0x7016, 0x703a,
++ 0x703e, 0x7033, 0xa692, 0x7037, 0xa692, 0x7007, 0x0001, 0x2061,
++ 0xa6d2, 0x6003, 0x0002, 0x007c, 0x0090, 0x2ae7, 0x0068, 0x2ae7,
++ 0x2071, 0xa682, 0x2b78, 0x7818, 0xd084, 0x00c0, 0x2ae7, 0x2a60,
++ 0x7820, 0xa08e, 0x0069, 0x00c0, 0x2bd7, 0x0079, 0x2b6b, 0x007c,
++ 0x2071, 0xa682, 0x7004, 0x0079, 0x2aed, 0x2af1, 0x2af2, 0x2afc,
++ 0x2b0e, 0x007c, 0x0090, 0x2afb, 0x0068, 0x2afb, 0x2b78, 0x7818,
++ 0xd084, 0x0040, 0x2b1a, 0x007c, 0x2b78, 0x2061, 0xa6d2, 0x6008,
++ 0xa08e, 0x0100, 0x0040, 0x2b09, 0xa086, 0x0200, 0x0040, 0x2bcf,
++ 0x007c, 0x7014, 0x2068, 0x2a60, 0x7018, 0x007a, 0x7010, 0x2068,
++ 0x6834, 0xa086, 0x0103, 0x0040, 0x2b16, 0x007c, 0x2a60, 0x2b78,
++ 0x7018, 0x007a, 0x2a60, 0x7820, 0xa08a, 0x0040, 0x00c8, 0x2b23,
++ 0x61bc, 0x0079, 0x2b2b, 0x2100, 0xa08a, 0x003f, 0x00c8, 0x2bcb,
++ 0x61bc, 0x0079, 0x2b6b, 0x2bad, 0x2bdf, 0x2be7, 0x2beb, 0x2bf3,
++ 0x2bf9, 0x2bfd, 0x2c09, 0x2c0d, 0x2c17, 0x2c1b, 0x2bcb, 0x2bcb,
++ 0x2bcb, 0x2c1f, 0x2bcb, 0x2c2f, 0x2c46, 0x2c5d, 0x2cdd, 0x2ce2,
++ 0x2d0f, 0x2d69, 0x2d7a, 0x2d98, 0x2dd9, 0x2de3, 0x2df0, 0x2e03,
++ 0x2e22, 0x2e2b, 0x2e68, 0x2e6e, 0x2bcb, 0x2e8a, 0x2bcb, 0x2bcb,
++ 0x2bcb, 0x2bcb, 0x2bcb, 0x2e91, 0x2e9b, 0x2bcb, 0x2bcb, 0x2bcb,
++ 0x2bcb, 0x2bcb, 0x2bcb, 0x2bcb, 0x2bcb, 0x2ea3, 0x2bcb, 0x2bcb,
++ 0x2bcb, 0x2bcb, 0x2bcb, 0x2eb5, 0x2ece, 0x2bcb, 0x2bcb, 0x2bcb,
++ 0x2bcb, 0x2bcb, 0x2bcb, 0x2ee0, 0x2f37, 0x2f95, 0x2fa9, 0x2bcb,
++ 0x2bcb, 0x2bcb, 0x398e, 0x2bcb, 0x2bcb, 0x2bcb, 0x2bcb, 0x2bcb,
++ 0x2bcb, 0x2bcb, 0x2bcb, 0x2c17, 0x2c1b, 0x2fc0, 0x2bcb, 0x2fcd,
++ 0x3a26, 0x3a83, 0x2bcb, 0x2bcb, 0x2bcb, 0x2bcb, 0x2bcb, 0x2bcb,
++ 0x2bcb, 0x2bcb, 0x2bcb, 0x301a, 0x314f, 0x316b, 0x3177, 0x31da,
++ 0x3233, 0x323e, 0x327d, 0x328c, 0x329b, 0x329e, 0x2fd1, 0x32c2,
++ 0x331e, 0x332b, 0x343c, 0x356f, 0x3599, 0x36a6, 0x2bcb, 0x36b6,
++ 0x36f0, 0x37bf, 0x2bcb, 0x2bcb, 0x2bcb, 0x2bcb, 0x3827, 0x3843,
++ 0x38bd, 0x3977, 0x713c, 0x0078, 0x2bad, 0x2021, 0x4000, 0x1078,
++ 0x35f5, 0x127e, 0x2091, 0x8000, 0x0068, 0x2bba, 0x7818, 0xd084,
++ 0x0040, 0x2bbd, 0x127f, 0x0078, 0x2bb1, 0x7c22, 0x7926, 0x7a2a,
++ 0x7b2e, 0x781b, 0x0001, 0x2091, 0x4080, 0x7007, 0x0001, 0x2091,
++ 0x5000, 0x127f, 0x007c, 0x2021, 0x4001, 0x0078, 0x2baf, 0x2021,
++ 0x4002, 0x0078, 0x2baf, 0x2021, 0x4003, 0x0078, 0x2baf, 0x2021,
++ 0x4005, 0x0078, 0x2baf, 0x2021, 0x4006, 0x0078, 0x2baf, 0xa02e,
++ 0x2520, 0x7b28, 0x7a2c, 0x7824, 0x7930, 0x0078, 0x3604, 0x7823,
++ 0x0004, 0x7824, 0x007a, 0xa02e, 0x2520, 0x7b28, 0x7a2c, 0x7824,
++ 0x7930, 0x0078, 0x3608, 0x7924, 0x7828, 0x2114, 0x200a, 0x0078,
++ 0x2bad, 0x7924, 0x2114, 0x0078, 0x2bad, 0x2099, 0x0009, 0x20a1,
++ 0x0009, 0x20a9, 0x0007, 0x53a3, 0x7924, 0x7a28, 0x7b2c, 0x0078,
++ 0x2bad, 0x7824, 0x2060, 0x0078, 0x2c21, 0x2009, 0x0001, 0x2011,
++ 0x0013, 0x2019, 0x0018, 0x783b, 0x0017, 0x0078, 0x2bad, 0x7d38,
++ 0x7c3c, 0x0078, 0x2be1, 0x7d38, 0x7c3c, 0x0078, 0x2bed, 0x2061,
++ 0x1000, 0x610c, 0xa006, 0x2c14, 0xa200, 0x8c60, 0x8109, 0x00c0,
++ 0x2c23, 0x2010, 0xa005, 0x0040, 0x2bad, 0x0078, 0x2bd3, 0x2069,
++ 0xa652, 0x7824, 0x7930, 0xa11a, 0x00c8, 0x2bdb, 0x8019, 0x0040,
++ 0x2bdb, 0x684a, 0x6942, 0x782c, 0x6852, 0x7828, 0x6856, 0xa006,
++ 0x685a, 0x685e, 0x1078, 0x4eae, 0x0078, 0x2bad, 0x2069, 0xa652,
++ 0x7824, 0x7934, 0xa11a, 0x00c8, 0x2bdb, 0x8019, 0x0040, 0x2bdb,
++ 0x684e, 0x6946, 0x782c, 0x6862, 0x7828, 0x6866, 0xa006, 0x686a,
++ 0x686e, 0x1078, 0x4a3e, 0x0078, 0x2bad, 0xa02e, 0x2520, 0x81ff,
++ 0x00c0, 0x2bd7, 0x7924, 0x7b28, 0x7a2c, 0x20a9, 0x0005, 0x20a1,
++ 0xa689, 0x41a1, 0x1078, 0x35ba, 0x0040, 0x2bd7, 0x2009, 0x0020,
++ 0x1078, 0x3604, 0x701b, 0x2c75, 0x007c, 0x6834, 0x2008, 0xa084,
++ 0x00ff, 0xa096, 0x0011, 0x0040, 0x2c85, 0xa096, 0x0019, 0x0040,
++ 0x2c85, 0xa096, 0x0015, 0x00c0, 0x2bd7, 0x810f, 0xa18c, 0x00ff,
++ 0x0040, 0x2bd7, 0x710e, 0x700c, 0x8001, 0x0040, 0x2cb6, 0x700e,
++ 0x1078, 0x35ba, 0x0040, 0x2bd7, 0x2009, 0x0020, 0x2061, 0xa6d2,
++ 0x6224, 0x6328, 0x642c, 0x6530, 0xa290, 0x0040, 0xa399, 0x0000,
++ 0xa4a1, 0x0000, 0xa5a9, 0x0000, 0x1078, 0x3604, 0x701b, 0x2ca9,
++ 0x007c, 0x6834, 0xa084, 0x00ff, 0xa096, 0x0002, 0x0040, 0x2cb4,
++ 0xa096, 0x000a, 0x00c0, 0x2bd7, 0x0078, 0x2c8b, 0x7010, 0x2068,
++ 0x6838, 0xc0fd, 0x683a, 0x1078, 0x4431, 0x00c0, 0x2cc4, 0x7007,
++ 0x0003, 0x701b, 0x2cc6, 0x007c, 0x1078, 0x4b51, 0x127e, 0x2091,
++ 0x8000, 0x20a9, 0x0005, 0x2099, 0xa689, 0x530a, 0x2100, 0xa210,
++ 0xa399, 0x0000, 0xa4a1, 0x0000, 0xa5a9, 0x0000, 0xad80, 0x000d,
++ 0x2009, 0x0020, 0x127f, 0x0078, 0x3608, 0x61a4, 0x7824, 0x60a6,
++ 0x0078, 0x2bad, 0x2091, 0x8000, 0x7823, 0x4000, 0x7827, 0x4953,
++ 0x782b, 0x5020, 0x782f, 0x2020, 0x2009, 0x017f, 0x2104, 0x7832,
++ 0x3f00, 0x7836, 0x2061, 0x0100, 0x6200, 0x2061, 0x0200, 0x603c,
++ 0x8007, 0xa205, 0x783a, 0x2009, 0x04fd, 0x2104, 0x783e, 0x781b,
++ 0x0001, 0x2091, 0x5000, 0x2091, 0x4080, 0x2071, 0x0010, 0x20c1,
++ 0x00f0, 0xa08a, 0x0003, 0x00c8, 0x0427, 0x0078, 0x0423, 0x81ff,
++ 0x00c0, 0x2bd7, 0x7924, 0x810f, 0xa18c, 0x00ff, 0x1078, 0x45c4,
++ 0x00c0, 0x2bdb, 0x7e38, 0xa684, 0x3fff, 0xa082, 0x4000, 0x0048,
++ 0x2d23, 0x0078, 0x2bdb, 0x7c28, 0x7d2c, 0x1078, 0x47a4, 0xd28c,
++ 0x00c0, 0x2d2e, 0x1078, 0x4736, 0x0078, 0x2d30, 0x1078, 0x4772,
++ 0x00c0, 0x2d5a, 0x2061, 0xad00, 0x127e, 0x2091, 0x8000, 0x6000,
++ 0xa086, 0x0000, 0x0040, 0x2d48, 0x6010, 0xa06d, 0x0040, 0x2d48,
++ 0x683c, 0xa406, 0x00c0, 0x2d48, 0x6840, 0xa506, 0x0040, 0x2d53,
++ 0x127f, 0xace0, 0x0010, 0x2001, 0xa616, 0x2004, 0xac02, 0x00c8,
++ 0x2bd7, 0x0078, 0x2d34, 0x1078, 0x8a01, 0x127f, 0x0040, 0x2bd7,
++ 0x0078, 0x2bad, 0xa00e, 0x2001, 0x0005, 0x1078, 0x4b51, 0x127e,
++ 0x2091, 0x8000, 0x1078, 0x8f85, 0x1078, 0x4a73, 0x127f, 0x0078,
++ 0x2bad, 0x81ff, 0x00c0, 0x2bd7, 0x1078, 0x35d2, 0x0040, 0x2bdb,
++ 0x1078, 0x4673, 0x0040, 0x2bd7, 0x1078, 0x47b2, 0x0040, 0x2bd7,
++ 0x0078, 0x2bad, 0x81ff, 0x00c0, 0x2bd7, 0x1078, 0x35e4, 0x0040,
++ 0x2bdb, 0x1078, 0x482f, 0x0040, 0x2bd7, 0x2019, 0x0005, 0x1078,
++ 0x47d3, 0x0040, 0x2bd7, 0x7828, 0xa08a, 0x1000, 0x00c8, 0x2bdb,
++ 0x8003, 0x800b, 0x810b, 0xa108, 0x1078, 0x5a52, 0x0078, 0x2bad,
++ 0x127e, 0x2091, 0x8000, 0x81ff, 0x0040, 0x2da2, 0x2009, 0x0001,
++ 0x0078, 0x2dd3, 0x2029, 0x00ff, 0x6450, 0x2400, 0xa506, 0x0040,
++ 0x2dcd, 0x2508, 0x1078, 0x45c4, 0x00c0, 0x2dcd, 0x1078, 0x482f,
++ 0x00c0, 0x2db8, 0x2009, 0x0002, 0x62ac, 0x2518, 0x0078, 0x2dd3,
++ 0x2019, 0x0004, 0x1078, 0x47d3, 0x00c0, 0x2dc2, 0x2009, 0x0006,
++ 0x0078, 0x2dd3, 0x7824, 0xa08a, 0x1000, 0x00c8, 0x2dd6, 0x8003,
++ 0x800b, 0x810b, 0xa108, 0x1078, 0x5a52, 0x8529, 0x00c8, 0x2da5,
++ 0x127f, 0x0078, 0x2bad, 0x127f, 0x0078, 0x2bd7, 0x127f, 0x0078,
++ 0x2bdb, 0x1078, 0x35d2, 0x0040, 0x2bdb, 0x1078, 0x46e7, 0x1078,
++ 0x47a4, 0x0078, 0x2bad, 0x81ff, 0x00c0, 0x2bd7, 0x1078, 0x35d2,
++ 0x0040, 0x2bdb, 0x1078, 0x46d6, 0x1078, 0x47a4, 0x0078, 0x2bad,
++ 0x81ff, 0x00c0, 0x2bd7, 0x1078, 0x35d2, 0x0040, 0x2bdb, 0x1078,
++ 0x4775, 0x0040, 0x2bd7, 0x1078, 0x4484, 0x1078, 0x472f, 0x1078,
++ 0x47a4, 0x0078, 0x2bad, 0x1078, 0x35d2, 0x0040, 0x2bdb, 0x1078,
++ 0x4673, 0x0040, 0x2bd7, 0x62a0, 0x2019, 0x0005, 0x0c7e, 0x1078,
++ 0x47e9, 0x0c7f, 0x1078, 0x5f01, 0x077e, 0x2039, 0x0000, 0x1078,
++ 0x5e0a, 0x2009, 0x0000, 0x1078, 0x9f8b, 0x077f, 0x1078, 0x47a4,
++ 0x0078, 0x2bad, 0x1078, 0x35d2, 0x0040, 0x2bdb, 0x1078, 0x47a4,
++ 0x2208, 0x0078, 0x2bad, 0x157e, 0x0d7e, 0x0e7e, 0x2069, 0xa714,
++ 0x6810, 0x6914, 0xa10a, 0x00c8, 0x2e37, 0x2009, 0x0000, 0x6816,
++ 0x2011, 0x0000, 0x2019, 0x0000, 0x20a9, 0x00ff, 0x2069, 0xa735,
++ 0x2d04, 0xa075, 0x0040, 0x2e4c, 0x704c, 0x1078, 0x2e56, 0xa210,
++ 0x7080, 0x1078, 0x2e56, 0xa318, 0x8d68, 0x00f0, 0x2e40, 0x2300,
++ 0xa218, 0x0e7f, 0x0d7f, 0x157f, 0x0078, 0x2bad, 0x0f7e, 0x017e,
++ 0xa07d, 0x0040, 0x2e65, 0x2001, 0x0000, 0x8000, 0x2f0c, 0x81ff,
++ 0x0040, 0x2e65, 0x2178, 0x0078, 0x2e5d, 0x017f, 0x0f7f, 0x007c,
++ 0x2069, 0xa714, 0x6910, 0x62a8, 0x0078, 0x2bad, 0x81ff, 0x00c0,
++ 0x2bd7, 0x6150, 0xa190, 0x29c0, 0x2214, 0xa294, 0x00ff, 0x6070,
++ 0xa084, 0xff00, 0xa215, 0x636c, 0x67cc, 0xd79c, 0x0040, 0x2e84,
++ 0x2031, 0x0001, 0x0078, 0x2e86, 0x2031, 0x0000, 0x7e3a, 0x7f3e,
++ 0x0078, 0x2bad, 0x6140, 0x6244, 0x2019, 0xa8a2, 0x231c, 0x0078,
++ 0x2bad, 0x127e, 0x2091, 0x8000, 0x6134, 0x6338, 0xa006, 0x2010,
++ 0x127f, 0x0078, 0x2bad, 0x1078, 0x35e4, 0x0040, 0x2bdb, 0x6244,
++ 0x6338, 0x0078, 0x2bad, 0x6140, 0x6244, 0x7824, 0x6042, 0x7b28,
++ 0x6346, 0x2069, 0xa652, 0x831f, 0xa305, 0x6816, 0x782c, 0x2069,
++ 0xa8a2, 0x2d1c, 0x206a, 0x0078, 0x2bad, 0x017e, 0x127e, 0x2091,
++ 0x8000, 0x7824, 0x6036, 0xd094, 0x0040, 0x2ec8, 0x7828, 0xa085,
++ 0x0001, 0x2009, 0xa8ab, 0x200a, 0x2001, 0xffff, 0x1078, 0x5ae6,
++ 0x782c, 0x603a, 0x127f, 0x017f, 0x0078, 0x2bad, 0x1078, 0x35e4,
++ 0x0040, 0x2bdb, 0x7828, 0xa00d, 0x0040, 0x2bdb, 0x782c, 0xa005,
++ 0x0040, 0x2bdb, 0x6244, 0x6146, 0x6338, 0x603a, 0x0078, 0x2bad,
++ 0x2001, 0xa600, 0x2004, 0xa086, 0x0003, 0x00c0, 0x2bd7, 0x0c7e,
++ 0x2061, 0x0100, 0x7924, 0x810f, 0xa18c, 0x00ff, 0xa196, 0x00ff,
++ 0x00c0, 0x2ef7, 0x6030, 0xa085, 0xff00, 0x0078, 0x2f06, 0xa182,
++ 0x007f, 0x00c8, 0x2f30, 0xa188, 0x29c0, 0x210c, 0xa18c, 0x00ff,
++ 0x6030, 0xa116, 0x0040, 0x2f30, 0x810f, 0xa105, 0x127e, 0x2091,
++ 0x8000, 0x007e, 0x1078, 0x76c7, 0x007f, 0x0040, 0x2f2c, 0x601a,
++ 0x600b, 0xbc09, 0x601f, 0x0001, 0x1078, 0x35ba, 0x0040, 0x2f33,
++ 0x6837, 0x0000, 0x7007, 0x0003, 0x6833, 0x0000, 0x6838, 0xc0fd,
++ 0x683a, 0x701b, 0x2f8e, 0x2d00, 0x6012, 0x2009, 0x0032, 0x1078,
++ 0x775c, 0x127f, 0x0c7f, 0x007c, 0x127f, 0x0c7f, 0x0078, 0x2bd7,
++ 0x0c7f, 0x0078, 0x2bdb, 0x1078, 0x772d, 0x0078, 0x2f2c, 0x2001,
++ 0xa600, 0x2004, 0xa086, 0x0003, 0x00c0, 0x2bd7, 0x0c7e, 0x2061,
++ 0x0100, 0x7924, 0x810f, 0xa18c, 0x00ff, 0xa196, 0x00ff, 0x00c0,
++ 0x2f4e, 0x6030, 0xa085, 0xff00, 0x0078, 0x2f5d, 0xa182, 0x007f,
++ 0x00c8, 0x2f87, 0xa188, 0x29c0, 0x210c, 0xa18c, 0x00ff, 0x6030,
++ 0xa116, 0x0040, 0x2f87, 0x810f, 0xa105, 0x127e, 0x2091, 0x8000,
++ 0x007e, 0x1078, 0x76c7, 0x007f, 0x0040, 0x2f83, 0x601a, 0x600b,
++ 0xbc05, 0x601f, 0x0001, 0x1078, 0x35ba, 0x0040, 0x2f8a, 0x6837,
++ 0x0000, 0x7007, 0x0003, 0x6833, 0x0000, 0x6838, 0xc0fd, 0x683a,
++ 0x701b, 0x2f8e, 0x2d00, 0x6012, 0x2009, 0x0032, 0x1078, 0x775c,
++ 0x127f, 0x0c7f, 0x007c, 0x127f, 0x0c7f, 0x0078, 0x2bd7, 0x0c7f,
++ 0x0078, 0x2bdb, 0x1078, 0x772d, 0x0078, 0x2f83, 0x6830, 0xa086,
++ 0x0100, 0x0040, 0x2bd7, 0x0078, 0x2bad, 0x2061, 0xa933, 0x127e,
++ 0x2091, 0x8000, 0x6000, 0xd084, 0x0040, 0x2fa6, 0x6104, 0x6208,
++ 0x2019, 0xa612, 0x231c, 0x127f, 0x0078, 0x2bad, 0x127f, 0x0078,
++ 0x2bdb, 0x81ff, 0x00c0, 0x2bd7, 0x127e, 0x2091, 0x8000, 0x6248,
++ 0x6064, 0xa202, 0x0048, 0x2fbd, 0xa085, 0x0001, 0x1078, 0x256a,
++ 0x1078, 0x3c9e, 0x127f, 0x0078, 0x2bad, 0x127f, 0x0078, 0x2bdb,
++ 0x127e, 0x2091, 0x8000, 0x20a9, 0x0012, 0x2001, 0xa640, 0x20a0,
++ 0xa006, 0x40a4, 0x127f, 0x0078, 0x2bad, 0x7d38, 0x7c3c, 0x0078,
++ 0x2c5f, 0x7824, 0xa09c, 0x00ff, 0xa39a, 0x0003, 0x00c8, 0x2bd7,
++ 0x6250, 0xa084, 0xff00, 0x8007, 0xa206, 0x00c0, 0x2fe9, 0x2001,
++ 0xa640, 0x2009, 0x000c, 0x7a2c, 0x7b28, 0x7c3c, 0x7d38, 0x0078,
++ 0x3608, 0x81ff, 0x00c0, 0x2bd7, 0x1078, 0x35e4, 0x0040, 0x2bdb,
++ 0x6004, 0xa084, 0x00ff, 0xa086, 0x0006, 0x00c0, 0x2bd7, 0x0c7e,
++ 0x1078, 0x35ba, 0x0c7f, 0x0040, 0x2bd7, 0x6837, 0x0000, 0x6838,
++ 0xc0fd, 0x683a, 0x1078, 0x8e4a, 0x0040, 0x2bd7, 0x7007, 0x0003,
++ 0x701b, 0x300b, 0x007c, 0x6830, 0xa086, 0x0100, 0x0040, 0x2bd7,
++ 0xad80, 0x000e, 0x2009, 0x000c, 0x7a2c, 0x7b28, 0x7c3c, 0x7d38,
++ 0x0078, 0x3608, 0x1078, 0x35ba, 0x0040, 0x2bd7, 0x1078, 0x42dd,
++ 0x2009, 0x001c, 0x7a2c, 0x7b28, 0x7c3c, 0x7d38, 0x1078, 0x3604,
++ 0x701b, 0x302b, 0x007c, 0xade8, 0x000d, 0x6800, 0xa005, 0x0040,
++ 0x2bdb, 0x6804, 0xd0ac, 0x0040, 0x3038, 0xd0a4, 0x0040, 0x2bdb,
++ 0xd094, 0x0040, 0x3043, 0x0c7e, 0x2061, 0x0100, 0x6104, 0xa18c,
++ 0xffdf, 0x6106, 0x0c7f, 0xd08c, 0x0040, 0x304e, 0x0c7e, 0x2061,
++ 0x0100, 0x6104, 0xa18d, 0x0010, 0x6106, 0x0c7f, 0x2009, 0x0100,
++ 0x210c, 0xa18a, 0x0002, 0x0048, 0x3063, 0xd084, 0x0040, 0x3063,
++ 0x6a28, 0xa28a, 0x007f, 0x00c8, 0x2bdb, 0xa288, 0x29c0, 0x210c,
++ 0xa18c, 0x00ff, 0x6156, 0xd0dc, 0x0040, 0x306c, 0x6828, 0xa08a,
++ 0x007f, 0x00c8, 0x2bdb, 0x6052, 0x6808, 0xa08a, 0x0100, 0x0048,
++ 0x2bdb, 0xa08a, 0x0841, 0x00c8, 0x2bdb, 0xa084, 0x0007, 0x00c0,
++ 0x2bdb, 0x680c, 0xa005, 0x0040, 0x2bdb, 0x6810, 0xa005, 0x0040,
++ 0x2bdb, 0x6848, 0x6940, 0xa10a, 0x00c8, 0x2bdb, 0x8001, 0x0040,
++ 0x2bdb, 0x684c, 0x6944, 0xa10a, 0x00c8, 0x2bdb, 0x8001, 0x0040,
++ 0x2bdb, 0x6804, 0xd0fc, 0x0040, 0x30c2, 0x1078, 0x35ba, 0x0040,
++ 0x2bd7, 0x2009, 0x0014, 0x7a2c, 0x7b28, 0x7c3c, 0x7d38, 0xa290,
++ 0x0038, 0xa399, 0x0000, 0x1078, 0x3604, 0x701b, 0x30a8, 0x007c,
++ 0xade8, 0x000d, 0x20a9, 0x0014, 0x2d98, 0x2069, 0xa66e, 0x2da0,
++ 0x53a3, 0x7010, 0xa0e8, 0x000d, 0x2001, 0xa672, 0x200c, 0xd1e4,
++ 0x0040, 0x30c2, 0x0c7e, 0x2061, 0x0100, 0x6004, 0xa085, 0x0b00,
++ 0x6006, 0x0c7f, 0x20a9, 0x001c, 0x2d98, 0x2069, 0xa652, 0x2da0,
++ 0x53a3, 0x6814, 0xa08c, 0x00ff, 0x6142, 0x8007, 0xa084, 0x00ff,
++ 0x6046, 0x1078, 0x4eae, 0x1078, 0x49ce, 0x1078, 0x4a3e, 0x6000,
++ 0xa086, 0x0000, 0x00c0, 0x314d, 0x6808, 0x602a, 0x1078, 0x21f7,
++ 0x6818, 0x691c, 0x6a20, 0x6b24, 0x8007, 0x810f, 0x8217, 0x831f,
++ 0x6016, 0x611a, 0x621e, 0x6322, 0x6c04, 0xd4f4, 0x0040, 0x30fa,
++ 0x6830, 0x6934, 0x6a38, 0x6b3c, 0x8007, 0x810f, 0x8217, 0x831f,
++ 0x0078, 0x30fc, 0xa084, 0xf0ff, 0x6006, 0x610a, 0x620e, 0x6312,
++ 0x1078, 0x5b19, 0x6904, 0xd1fc, 0x0040, 0x312f, 0x0c7e, 0x2009,
++ 0x0000, 0x20a9, 0x0001, 0x6b70, 0xd384, 0x0040, 0x312c, 0x0078,
++ 0x3116, 0x839d, 0x00c8, 0x312c, 0x3508, 0x8109, 0x1078, 0x5480,
++ 0x6878, 0x6016, 0x6874, 0x2008, 0xa084, 0xff00, 0x8007, 0x600a,
++ 0xa184, 0x00ff, 0x6006, 0x8108, 0x00c0, 0x312a, 0x6003, 0x0003,
++ 0x0078, 0x312c, 0x6003, 0x0001, 0x00f0, 0x3111, 0x0c7f, 0x0c7e,
++ 0x2061, 0x0100, 0x602f, 0x0040, 0x602f, 0x0000, 0x0c7f, 0x1078,
++ 0x3819, 0x0040, 0x313d, 0x1078, 0x256a, 0x60c0, 0xa005, 0x0040,
++ 0x3149, 0x6003, 0x0001, 0x2091, 0x301d, 0x1078, 0x4224, 0x0078,
++ 0x314d, 0x6003, 0x0004, 0x2091, 0x301d, 0x0078, 0x2bad, 0x6000,
++ 0xa086, 0x0000, 0x0040, 0x2bd7, 0x2069, 0xa652, 0x7830, 0x6842,
++ 0x7834, 0x6846, 0x6804, 0xd0fc, 0x0040, 0x3162, 0x2009, 0x0030,
++ 0x0078, 0x3164, 0x2009, 0x001c, 0x2d00, 0x7a2c, 0x7b28, 0x7c3c,
++ 0x7d38, 0x0078, 0x3608, 0xa006, 0x1078, 0x256a, 0x81ff, 0x00c0,
++ 0x2bd7, 0x1078, 0x42dd, 0x1078, 0x4224, 0x0078, 0x2bad, 0x81ff,
++ 0x00c0, 0x2bd7, 0x6184, 0x81ff, 0x0040, 0x3191, 0x703f, 0x0000,
++ 0x2001, 0xacc0, 0x2009, 0x0040, 0x7a2c, 0x7b28, 0x7c3c, 0x7d38,
++ 0x127e, 0x2091, 0x8000, 0x1078, 0x3608, 0x701b, 0x2baa, 0x127f,
++ 0x007c, 0x703f, 0x0001, 0x0d7e, 0x2069, 0xacc0, 0x20a9, 0x0040,
++ 0x20a1, 0xacc0, 0x2019, 0xffff, 0x43a4, 0x6550, 0xa588, 0x29c0,
++ 0x210c, 0xa18c, 0x00ff, 0x216a, 0xa00e, 0x2011, 0x0002, 0x2100,
++ 0xa506, 0x0040, 0x31c3, 0x1078, 0x45c4, 0x00c0, 0x31c3, 0x6014,
++ 0x821c, 0x0048, 0x31bb, 0xa398, 0xacc0, 0xa085, 0xff00, 0x8007,
++ 0x201a, 0x0078, 0x31c2, 0xa398, 0xacc0, 0x2324, 0xa4a4, 0xff00,
++ 0xa405, 0x201a, 0x8210, 0x8108, 0xa182, 0x0080, 0x00c8, 0x31ca,
++ 0x0078, 0x31a7, 0x8201, 0x8007, 0x2d0c, 0xa105, 0x206a, 0x0d7f,
++ 0x20a9, 0x0040, 0x20a1, 0xacc0, 0x2099, 0xacc0, 0x1078, 0x4281,
++ 0x0078, 0x3180, 0x1078, 0x35e4, 0x0040, 0x2bdb, 0x0c7e, 0x1078,
++ 0x35ba, 0x0c7f, 0x00c0, 0x31e8, 0x2009, 0x0002, 0x0078, 0x2bd7,
++ 0x2001, 0xa653, 0x2004, 0xd0b4, 0x0040, 0x320f, 0x6000, 0xd08c,
++ 0x00c0, 0x320f, 0x6004, 0xa084, 0x00ff, 0xa086, 0x0006, 0x00c0,
++ 0x320f, 0x6837, 0x0000, 0x6838, 0xc0fd, 0x683a, 0x1078, 0x8e9e,
++ 0x00c0, 0x3206, 0x2009, 0x0003, 0x0078, 0x2bd7, 0x7007, 0x0003,
++ 0x701b, 0x320b, 0x007c, 0x1078, 0x35e4, 0x0040, 0x2bdb, 0x20a9,
++ 0x002b, 0x2c98, 0xade8, 0x0002, 0x2da0, 0x53a3, 0x20a9, 0x0004,
++ 0xac80, 0x0006, 0x2098, 0xad80, 0x0006, 0x20a0, 0x1078, 0x4281,
++ 0x20a9, 0x0004, 0xac80, 0x000a, 0x2098, 0xad80, 0x000a, 0x20a0,
++ 0x1078, 0x4281, 0x2d00, 0x2009, 0x002b, 0x7a2c, 0x7b28, 0x7c3c,
++ 0x7d38, 0x0078, 0x3608, 0x81ff, 0x00c0, 0x2bd7, 0x1078, 0x35d2,
++ 0x0040, 0x2bdb, 0x1078, 0x47bd, 0x0078, 0x2bad, 0x81ff, 0x00c0,
++ 0x2bd7, 0x7828, 0xa08a, 0x1000, 0x00c8, 0x2bdb, 0x1078, 0x35e4,
++ 0x0040, 0x2bdb, 0x1078, 0x482f, 0x0040, 0x2bd7, 0x2019, 0x0004,
++ 0x1078, 0x47d3, 0x7924, 0x810f, 0x7a28, 0x1078, 0x3259, 0x0078,
++ 0x2bad, 0xa186, 0x00ff, 0x0040, 0x3261, 0x1078, 0x3271, 0x0078,
++ 0x3270, 0x2029, 0x007e, 0x2061, 0xa600, 0x6450, 0x2400, 0xa506,
++ 0x0040, 0x326d, 0x2508, 0x1078, 0x3271, 0x8529, 0x00c8, 0x3266,
++ 0x007c, 0x1078, 0x45c4, 0x00c0, 0x327c, 0x2200, 0x8003, 0x800b,
++ 0x810b, 0xa108, 0x1078, 0x5a52, 0x007c, 0x81ff, 0x00c0, 0x2bd7,
++ 0x1078, 0x35d2, 0x0040, 0x2bdb, 0x1078, 0x4673, 0x0040, 0x2bd7,
++ 0x1078, 0x47c8, 0x0078, 0x2bad, 0x81ff, 0x00c0, 0x2bd7, 0x1078,
++ 0x35d2, 0x0040, 0x2bdb, 0x1078, 0x4673, 0x0040, 0x2bd7, 0x1078,
++ 0x47b2, 0x0078, 0x2bad, 0x6100, 0x0078, 0x2bad, 0x1078, 0x35e4,
++ 0x0040, 0x2bdb, 0x2001, 0xa600, 0x2004, 0xa086, 0x0003, 0x00c0,
++ 0x2bd7, 0x0d7e, 0xace8, 0x000a, 0x7924, 0xd184, 0x0040, 0x32b2,
++ 0xace8, 0x0006, 0x680c, 0x8007, 0x783e, 0x6808, 0x8007, 0x783a,
++ 0x6b04, 0x831f, 0x6a00, 0x8217, 0x0d7f, 0x6100, 0xa18c, 0x0200,
++ 0x0078, 0x2bad, 0xa006, 0x1078, 0x256a, 0x7824, 0xa084, 0x00ff,
++ 0xa086, 0x00ff, 0x0040, 0x32cf, 0x81ff, 0x00c0, 0x2bd7, 0x1078,
++ 0x42dd, 0x7828, 0xa08a, 0x1000, 0x00c8, 0x2bdb, 0x7924, 0xa18c,
++ 0xff00, 0x810f, 0xa186, 0x00ff, 0x0040, 0x32e5, 0xa182, 0x007f,
++ 0x00c8, 0x2bdb, 0x2100, 0x1078, 0x2564, 0x027e, 0x0c7e, 0x127e,
++ 0x2091, 0x8000, 0x2061, 0xa8c4, 0x601b, 0x0000, 0x601f, 0x0000,
++ 0x2011, 0x0003, 0x1078, 0x70e0, 0x2011, 0x0002, 0x1078, 0x70ea,
++ 0x1078, 0x6fc4, 0x037e, 0x2019, 0x0000, 0x1078, 0x7058, 0x037f,
++ 0x2061, 0x0100, 0x6030, 0xa084, 0x00ff, 0x810f, 0xa105, 0x604a,
++ 0x6043, 0x0090, 0x6043, 0x0010, 0x2009, 0x002d, 0x2011, 0x4259,
++ 0x1078, 0x5add, 0x7924, 0xa18c, 0xff00, 0x810f, 0x7a28, 0x1078,
++ 0x3259, 0x127f, 0x0c7f, 0x027f, 0x0078, 0x2bad, 0x7924, 0xa18c,
++ 0xff00, 0x810f, 0x0c7e, 0x1078, 0x455c, 0x2c08, 0x0c7f, 0x00c0,
++ 0x2bdb, 0x0078, 0x2bad, 0x81ff, 0x0040, 0x3332, 0x2009, 0x0001,
++ 0x0078, 0x2bd7, 0x60cc, 0xd09c, 0x00c0, 0x333a, 0x2009, 0x0005,
++ 0x0078, 0x2bd7, 0x1078, 0x35ba, 0x00c0, 0x3342, 0x2009, 0x0002,
++ 0x0078, 0x2bd7, 0x7924, 0x7a2c, 0x7b28, 0x7c3c, 0x7d38, 0x1078,
++ 0x3604, 0x701b, 0x334c, 0x007c, 0x2009, 0x0080, 0x1078, 0x45c4,
++ 0x00c0, 0x3359, 0x6004, 0xa084, 0x00ff, 0xa086, 0x0006, 0x0040,
++ 0x335d, 0x2021, 0x400a, 0x0078, 0x2baf, 0x0d7e, 0xade8, 0x000d,
++ 0x6900, 0x6a08, 0x6b0c, 0x6c10, 0x6d14, 0x6e18, 0x6820, 0xa0be,
++ 0x0100, 0x0040, 0x33d0, 0xa0be, 0x0112, 0x0040, 0x33d0, 0xa0be,
++ 0x0113, 0x0040, 0x33d0, 0xa0be, 0x0114, 0x0040, 0x33d0, 0xa0be,
++ 0x0117, 0x0040, 0x33d0, 0xa0be, 0x011a, 0x0040, 0x33d0, 0xa0be,
++ 0x0121, 0x0040, 0x33c6, 0xa0be, 0x0131, 0x0040, 0x33c6, 0xa0be,
++ 0x0171, 0x0040, 0x33d0, 0xa0be, 0x0173, 0x0040, 0x33d0, 0xa0be,
++ 0x01a1, 0x00c0, 0x3398, 0x6830, 0x8007, 0x6832, 0x0078, 0x33d6,
++ 0xa0be, 0x0212, 0x0040, 0x33cc, 0xa0be, 0x0213, 0x0040, 0x33cc,
++ 0xa0be, 0x0214, 0x0040, 0x33be, 0xa0be, 0x0217, 0x0040, 0x33b8,
++ 0xa0be, 0x021a, 0x00c0, 0x33b1, 0x6838, 0x8007, 0x683a, 0x0078,
++ 0x33d0, 0xa0be, 0x0300, 0x0040, 0x33d0, 0x0d7f, 0x0078, 0x2bdb,
++ 0xad80, 0x0010, 0x20a9, 0x0007, 0x1078, 0x3418, 0xad80, 0x000e,
++ 0x20a9, 0x0001, 0x1078, 0x3418, 0x0078, 0x33d0, 0xad80, 0x000c,
++ 0x1078, 0x3426, 0x0078, 0x33d6, 0xad80, 0x000e, 0x1078, 0x3426,
++ 0xad80, 0x000c, 0x20a9, 0x0001, 0x1078, 0x3418, 0x0c7e, 0x1078,
++ 0x35ba, 0x0040, 0x3409, 0x6838, 0xc0fd, 0x683a, 0x6837, 0x0119,
++ 0x6853, 0x0000, 0x684f, 0x0020, 0x685b, 0x0001, 0x810b, 0x697e,
++ 0x6883, 0x0000, 0x6a86, 0x6b8a, 0x6c8e, 0x6d92, 0x6996, 0x689b,
++ 0x0000, 0x0c7f, 0x0d7f, 0x6837, 0x0000, 0x6838, 0xc0fd, 0x683a,
++ 0x6823, 0x0000, 0x6804, 0x2068, 0x1078, 0x8e66, 0x00c0, 0x3404,
++ 0x2009, 0x0003, 0x0078, 0x2bd7, 0x7007, 0x0003, 0x701b, 0x340f,
++ 0x007c, 0x0c7f, 0x0d7f, 0x2009, 0x0002, 0x0078, 0x2bd7, 0x6820,
++ 0xa086, 0x8001, 0x00c0, 0x2bad, 0x2009, 0x0004, 0x0078, 0x2bd7,
++ 0x017e, 0x2008, 0x2044, 0x8000, 0x204c, 0x8000, 0x290a, 0x8108,
++ 0x280a, 0x8108, 0x00f0, 0x341a, 0x017f, 0x007c, 0x017e, 0x0a7e,
++ 0x0b7e, 0x2008, 0x2044, 0x8000, 0x204c, 0x8000, 0x2054, 0x8000,
++ 0x205c, 0x2b0a, 0x8108, 0x2a0a, 0x8108, 0x290a, 0x8108, 0x280a,
++ 0x0b7f, 0x0a7f, 0x017f, 0x007c, 0x81ff, 0x0040, 0x3443, 0x2009,
++ 0x0001, 0x0078, 0x2bd7, 0x60cc, 0xd09c, 0x00c0, 0x344b, 0x2009,
++ 0x0005, 0x0078, 0x2bd7, 0x7924, 0x2140, 0xa18c, 0xff00, 0x810f,
++ 0xa182, 0x0080, 0x0048, 0x2bdb, 0xa182, 0x00ff, 0x00c8, 0x2bdb,
++ 0x7a2c, 0x7b28, 0x606c, 0xa306, 0x00c0, 0x3466, 0x6070, 0xa24e,
++ 0x0040, 0x2bdb, 0xa9cc, 0xff00, 0x0040, 0x2bdb, 0x0c7e, 0x1078,
++ 0x350f, 0x2c68, 0x0c7f, 0x0040, 0x349e, 0xa0c6, 0x4000, 0x00c0,
++ 0x3484, 0x0c7e, 0x007e, 0x2d60, 0x2009, 0x0000, 0x1078, 0x489b,
++ 0x00c0, 0x347b, 0xc185, 0x6000, 0xd0bc, 0x0040, 0x3480, 0xc18d,
++ 0x007f, 0x0c7f, 0x0078, 0x349b, 0xa0c6, 0x4007, 0x00c0, 0x348b,
++ 0x2408, 0x0078, 0x349b, 0xa0c6, 0x4008, 0x00c0, 0x3493, 0x2708,
++ 0x2610, 0x0078, 0x349b, 0xa0c6, 0x4009, 0x00c0, 0x3499, 0x0078,
++ 0x349b, 0x2001, 0x4006, 0x2020, 0x0078, 0x2baf, 0x2d00, 0x7022,
++ 0x017e, 0x0b7e, 0x0c7e, 0x0e7e, 0x2c70, 0x1078, 0x76c7, 0x0040,
++ 0x34e4, 0x2d00, 0x601a, 0x2001, 0xa657, 0x2004, 0xa084, 0x00ff,
++ 0x6842, 0x2e58, 0x0e7f, 0x0e7e, 0x0c7e, 0x1078, 0x35ba, 0x0c7f,
++ 0x2b70, 0x00c0, 0x34c5, 0x1078, 0x772d, 0x0e7f, 0x0c7f, 0x0b7f,
++ 0x017f, 0x2009, 0x0002, 0x0078, 0x2bd7, 0x6837, 0x0000, 0x2d00,
++ 0x6012, 0x6833, 0x0000, 0x6838, 0xc0fd, 0x683a, 0x127e, 0x2091,
++ 0x8000, 0x1078, 0x2880, 0x127f, 0x601f, 0x0001, 0x2001, 0x0000,
++ 0x1078, 0x44ee, 0x2001, 0x0002, 0x1078, 0x4502, 0x2009, 0x0002,
++ 0x1078, 0x775c, 0xa085, 0x0001, 0x0e7f, 0x0c7f, 0x0b7f, 0x017f,
++ 0x00c0, 0x34ee, 0x2009, 0x0003, 0x0078, 0x2bd7, 0x7007, 0x0003,
++ 0x701b, 0x34f3, 0x007c, 0x6830, 0xa086, 0x0100, 0x7020, 0x2060,
++ 0x00c0, 0x3501, 0x2009, 0x0004, 0x6204, 0xa294, 0x00ff, 0x0078,
++ 0x2bd7, 0x2009, 0x0000, 0x1078, 0x489b, 0x00c0, 0x3508, 0xc185,
++ 0x6000, 0xd0bc, 0x0040, 0x350d, 0xc18d, 0x0078, 0x2bad, 0x0e7e,
++ 0x0d7e, 0x2029, 0x0000, 0x2021, 0x0080, 0x20a9, 0x007f, 0x2071,
++ 0xa7b5, 0x2e04, 0xa005, 0x00c0, 0x3524, 0x2100, 0xa406, 0x00c0,
++ 0x3555, 0x2428, 0x0078, 0x3555, 0x2068, 0x6f10, 0x2700, 0xa306,
++ 0x00c0, 0x3546, 0x6e14, 0x2600, 0xa206, 0x00c0, 0x3546, 0x2400,
++ 0xa106, 0x00c0, 0x3542, 0x2d60, 0xd884, 0x0040, 0x356a, 0x6004,
++ 0xa084, 0x00ff, 0xa086, 0x0006, 0x00c0, 0x356a, 0x2001, 0x4000,
++ 0x0078, 0x356b, 0x2001, 0x4007, 0x0078, 0x356b, 0x2400, 0xa106,
++ 0x00c0, 0x3555, 0x6e14, 0x87ff, 0x00c0, 0x3551, 0x86ff, 0x0040,
++ 0x3521, 0x2001, 0x4008, 0x0078, 0x356b, 0x8420, 0x8e70, 0x00f0,
++ 0x3519, 0x85ff, 0x00c0, 0x3564, 0x2001, 0x4009, 0x0078, 0x356b,
++ 0x2001, 0x0001, 0x0078, 0x356b, 0x1078, 0x455c, 0x00c0, 0x3560,
++ 0x6312, 0x6216, 0xa006, 0xa005, 0x0d7f, 0x0e7f, 0x007c, 0x81ff,
++ 0x00c0, 0x2bd7, 0x1078, 0x35ba, 0x0040, 0x2bd7, 0x6837, 0x0000,
++ 0x6838, 0xc0fd, 0x683a, 0x7824, 0xa005, 0x0040, 0x2bdb, 0xa096,
++ 0x00ff, 0x0040, 0x3587, 0xa092, 0x0004, 0x00c8, 0x2bdb, 0x2010,
++ 0x2d18, 0x1078, 0x282f, 0x0040, 0x2bd7, 0x7007, 0x0003, 0x701b,
++ 0x3592, 0x007c, 0x6830, 0xa086, 0x0100, 0x0040, 0x2bd7, 0x0078,
++ 0x2bad, 0x7924, 0xa18c, 0xff00, 0x810f, 0xa182, 0x0080, 0x0048,
++ 0x2bdb, 0xa182, 0x00ff, 0x00c8, 0x2bdb, 0x127e, 0x2091, 0x8000,
++ 0x1078, 0x8d4b, 0x00c0, 0x35b7, 0xa190, 0xa735, 0x2204, 0xa065,
++ 0x0040, 0x35b7, 0x1078, 0x42f8, 0x127f, 0x0078, 0x2bad, 0x127f,
++ 0x0078, 0x2bd7, 0x1078, 0x138b, 0x0040, 0x35d1, 0xa006, 0x6802,
++ 0x7010, 0xa005, 0x00c0, 0x35c9, 0x2d00, 0x7012, 0x7016, 0x0078,
++ 0x35cf, 0x7014, 0x6802, 0x2060, 0x2d00, 0x6006, 0x7016, 0xad80,
++ 0x000d, 0x007c, 0x7924, 0x810f, 0xa18c, 0x00ff, 0x1078, 0x45c4,
++ 0x00c0, 0x35e1, 0x7e28, 0xa684, 0x3fff, 0xa082, 0x4000, 0x0048,
++ 0x35e2, 0xa066, 0x8cff, 0x007c, 0x7e24, 0x860f, 0xa18c, 0x00ff,
++ 0x1078, 0x45c4, 0x00c0, 0x35f2, 0xa6b4, 0x00ff, 0xa682, 0x4000,
++ 0x0048, 0x35f3, 0xa066, 0x8cff, 0x007c, 0x017e, 0x7110, 0x81ff,
++ 0x0040, 0x3600, 0x2168, 0x6904, 0x1078, 0x13a4, 0x0078, 0x35f7,
++ 0x7112, 0x7116, 0x017f, 0x007c, 0x2031, 0x0001, 0x0078, 0x360a,
++ 0x2031, 0x0000, 0x2061, 0xa6d2, 0x6606, 0x6112, 0x600e, 0x6226,
++ 0x632a, 0x642e, 0x6532, 0x2c10, 0x1078, 0x13db, 0x7007, 0x0002,
++ 0x701b, 0x2bad, 0x007c, 0x0f7e, 0x127e, 0x2091, 0x8000, 0x2079,
++ 0x0000, 0x2001, 0xa690, 0x2004, 0xa005, 0x00c0, 0x3636, 0x0068,
++ 0x3636, 0x7818, 0xd084, 0x00c0, 0x3636, 0x7a22, 0x7b26, 0x7c2a,
++ 0x781b, 0x0001, 0x2091, 0x4080, 0x0078, 0x365b, 0x017e, 0x0c7e,
++ 0x0e7e, 0x2071, 0xa682, 0x7138, 0xa182, 0x0008, 0x0048, 0x3644,
++ 0x7030, 0x2060, 0x0078, 0x3655, 0x7030, 0xa0e0, 0x0008, 0xac82,
++ 0xa6d2, 0x0048, 0x364d, 0x2061, 0xa692, 0x2c00, 0x7032, 0x81ff,
++ 0x00c0, 0x3653, 0x7036, 0x8108, 0x713a, 0x2262, 0x6306, 0x640a,
++ 0x0e7f, 0x0c7f, 0x017f, 0x127f, 0x0f7f, 0x007c, 0x0e7e, 0x2071,
++ 0xa682, 0x7038, 0xa005, 0x0040, 0x3697, 0x127e, 0x2091, 0x8000,
++ 0x0068, 0x3696, 0x0f7e, 0x2079, 0x0000, 0x7818, 0xd084, 0x00c0,
++ 0x3695, 0x0c7e, 0x7034, 0x2060, 0x2c04, 0x7822, 0x6004, 0x7826,
++ 0x6008, 0x782a, 0x781b, 0x0001, 0x2091, 0x4080, 0x7038, 0x8001,
++ 0x703a, 0xa005, 0x00c0, 0x368b, 0x7033, 0xa692, 0x7037, 0xa692,
++ 0x0c7f, 0x0078, 0x3695, 0xac80, 0x0008, 0xa0fa, 0xa6d2, 0x0048,
++ 0x3693, 0x2001, 0xa692, 0x7036, 0x0c7f, 0x0f7f, 0x127f, 0x0e7f,
++ 0x007c, 0x027e, 0x2001, 0xa653, 0x2004, 0xd0c4, 0x0040, 0x36a4,
++ 0x2011, 0x8014, 0x1078, 0x361b, 0x027f, 0x007c, 0x81ff, 0x00c0,
++ 0x2bd7, 0x127e, 0x2091, 0x8000, 0x6030, 0xc08d, 0xc085, 0xc0ac,
++ 0x6032, 0x1078, 0x4224, 0x127f, 0x0078, 0x2bad, 0x81ff, 0x00c0,
++ 0x2bd7, 0x6000, 0xa086, 0x0003, 0x00c0, 0x2bd7, 0x2001, 0xa653,
++ 0x2004, 0xd0ac, 0x00c0, 0x2bd7, 0x1078, 0x35e4, 0x0040, 0x2bdb,
++ 0x6004, 0xa084, 0x00ff, 0xa086, 0x0006, 0x00c0, 0x36d3, 0x7828,
++ 0xa005, 0x0040, 0x2bad, 0x0c7e, 0x1078, 0x35ba, 0x0c7f, 0x0040,
++ 0x2bd7, 0x6837, 0x0000, 0x6833, 0x0000, 0x6838, 0xc0fd, 0x683a,
++ 0x1078, 0x8f12, 0x0040, 0x2bd7, 0x7007, 0x0003, 0x701b, 0x36e9,
++ 0x007c, 0x6830, 0xa086, 0x0100, 0x0040, 0x2bd7, 0x0078, 0x2bad,
++ 0x2001, 0xa600, 0x2004, 0xa086, 0x0003, 0x00c0, 0x2bd7, 0x7f24,
++ 0x7a2c, 0x7b28, 0x7c3c, 0x7d38, 0x1078, 0x35ba, 0x0040, 0x2bd7,
++ 0x2009, 0x0000, 0x2031, 0x0000, 0x7023, 0x0000, 0x702f, 0x0000,
++ 0xad80, 0x0005, 0x7026, 0x20a0, 0x1078, 0x45c4, 0x00c0, 0x376d,
++ 0x6004, 0xa0c4, 0x00ff, 0xa8c6, 0x0006, 0x0040, 0x371d, 0xa0c4,
++ 0xff00, 0xa8c6, 0x0600, 0x00c0, 0x376d, 0x2001, 0xa653, 0x2004,
++ 0xd0ac, 0x00c0, 0x372a, 0x1078, 0x489b, 0x00c0, 0x372a, 0xd79c,
++ 0x0040, 0x376d, 0xd794, 0x00c0, 0x3730, 0xd784, 0x0040, 0x373c,
++ 0xac80, 0x0006, 0x2098, 0x3400, 0x20a9, 0x0004, 0x53a3, 0x1078,
++ 0x3426, 0xd794, 0x0040, 0x3745, 0xac80, 0x000a, 0x2098, 0x3400,
++ 0x20a9, 0x0004, 0x53a3, 0x1078, 0x3426, 0x21a2, 0xd794, 0x0040,
++ 0x3765, 0xac80, 0x0000, 0x2098, 0x94a0, 0x20a9, 0x0002, 0x53a3,
++ 0xac80, 0x0003, 0x20a6, 0x94a0, 0xac80, 0x0004, 0x2098, 0x3400,
++ 0x20a9, 0x0002, 0x53a3, 0x1078, 0x3418, 0xac80, 0x0026, 0x2098,
++ 0x20a9, 0x0002, 0x53a3, 0x0078, 0x3766, 0x94a0, 0xd794, 0x0040,
++ 0x376b, 0xa6b0, 0x000b, 0xa6b0, 0x0005, 0x8108, 0xd78c, 0x0040,
++ 0x3777, 0xa186, 0x0100, 0x0040, 0x3788, 0x0078, 0x377b, 0xa186,
++ 0x007e, 0x0040, 0x3788, 0xd794, 0x0040, 0x3782, 0xa686, 0x0020,
++ 0x0078, 0x3784, 0xa686, 0x0028, 0x0040, 0x3791, 0x0078, 0x370c,
++ 0x86ff, 0x00c0, 0x378f, 0x7120, 0x810b, 0x0078, 0x2bad, 0x702f,
++ 0x0001, 0x711e, 0x7020, 0xa600, 0x7022, 0x772a, 0x2061, 0xa6d2,
++ 0x6007, 0x0000, 0x6612, 0x7024, 0x600e, 0x6226, 0x632a, 0x642e,
++ 0x6532, 0x2c10, 0x1078, 0x13db, 0x7007, 0x0002, 0x701b, 0x37a9,
++ 0x007c, 0x702c, 0xa005, 0x00c0, 0x37bb, 0x711c, 0x7024, 0x20a0,
++ 0x7728, 0x2031, 0x0000, 0x2061, 0xa6d2, 0x6224, 0x6328, 0x642c,
++ 0x6530, 0x0078, 0x370c, 0x7120, 0x810b, 0x0078, 0x2bad, 0x2029,
++ 0x007e, 0x7924, 0x7a28, 0x7b2c, 0x7c38, 0xa184, 0xff00, 0x8007,
++ 0xa0e2, 0x0020, 0x0048, 0x2bdb, 0xa502, 0x0048, 0x2bdb, 0xa184,
++ 0x00ff, 0xa0e2, 0x0020, 0x0048, 0x2bdb, 0xa502, 0x0048, 0x2bdb,
++ 0xa284, 0xff00, 0x8007, 0xa0e2, 0x0020, 0x0048, 0x2bdb, 0xa502,
++ 0x0048, 0x2bdb, 0xa284, 0x00ff, 0xa0e2, 0x0020, 0x0048, 0x2bdb,
++ 0xa502, 0x0048, 0x2bdb, 0xa384, 0xff00, 0x8007, 0xa0e2, 0x0020,
++ 0x0048, 0x2bdb, 0xa502, 0x0048, 0x2bdb, 0xa384, 0x00ff, 0xa0e2,
++ 0x0020, 0x0048, 0x2bdb, 0xa502, 0x0048, 0x2bdb, 0xa484, 0xff00,
++ 0x8007, 0xa0e2, 0x0020, 0x0048, 0x2bdb, 0xa502, 0x0048, 0x2bdb,
++ 0xa484, 0x00ff, 0xa0e2, 0x0020, 0x0048, 0x2bdb, 0xa502, 0x0048,
++ 0x2bdb, 0x2061, 0xa8a5, 0x6102, 0x6206, 0x630a, 0x640e, 0x0078,
++ 0x2bad, 0x007e, 0x2001, 0xa653, 0x2004, 0xd0cc, 0x007f, 0x007c,
++ 0x007e, 0x2001, 0xa672, 0x2004, 0xd0bc, 0x007f, 0x007c, 0x6164,
++ 0x7a24, 0x6300, 0x82ff, 0x00c0, 0x3830, 0x7926, 0x0078, 0x2bad,
++ 0x83ff, 0x00c0, 0x2bdb, 0x2001, 0xfff0, 0xa200, 0x00c8, 0x2bdb,
++ 0x2019, 0xffff, 0x6068, 0xa302, 0xa200, 0x0048, 0x2bdb, 0x7926,
++ 0x6266, 0x0078, 0x2bad, 0x2001, 0xa600, 0x2004, 0xa086, 0x0003,
++ 0x00c0, 0x2bd7, 0x7c28, 0x7d24, 0x7e38, 0x7f2c, 0x1078, 0x35ba,
++ 0x0040, 0x2bd7, 0x2009, 0x0000, 0x2019, 0x0000, 0x7023, 0x0000,
++ 0x702f, 0x0000, 0xad80, 0x0003, 0x7026, 0x20a0, 0xa1e0, 0xa735,
++ 0x2c64, 0x8cff, 0x0040, 0x387d, 0x6004, 0xa084, 0x00ff, 0xa086,
++ 0x0006, 0x0040, 0x3872, 0x6004, 0xa084, 0xff00, 0xa086, 0x0600,
++ 0x00c0, 0x387d, 0x6014, 0x20a2, 0x94a0, 0x6010, 0x8007, 0xa105,
++ 0x8007, 0x20a2, 0x94a0, 0xa398, 0x0002, 0x8108, 0xa182, 0x00ff,
++ 0x0040, 0x3888, 0xa386, 0x002a, 0x0040, 0x3891, 0x0078, 0x385e,
++ 0x83ff, 0x00c0, 0x388f, 0x7120, 0x810c, 0x0078, 0x2bad, 0x702f,
++ 0x0001, 0x711e, 0x7020, 0xa300, 0x7022, 0x2061, 0xa6d2, 0x6007,
++ 0x0000, 0x6312, 0x7024, 0x600e, 0x6426, 0x652a, 0x662e, 0x6732,
++ 0x2c10, 0x1078, 0x13db, 0x7007, 0x0002, 0x701b, 0x38a8, 0x007c,
++ 0x702c, 0xa005, 0x00c0, 0x38b9, 0x711c, 0x7024, 0x20a0, 0x2019,
++ 0x0000, 0x2061, 0xa6d2, 0x6424, 0x6528, 0x662c, 0x6730, 0x0078,
++ 0x385e, 0x7120, 0x810c, 0x0078, 0x2bad, 0x81ff, 0x00c0, 0x2bd7,
++ 0x60cc, 0xd09c, 0x0040, 0x2bd7, 0x1078, 0x35ba, 0x0040, 0x2bd7,
++ 0x7924, 0x7a2c, 0x7b28, 0x7c3c, 0x7d38, 0x1078, 0x3604, 0x701b,
++ 0x38d2, 0x007c, 0x0d7e, 0xade8, 0x000d, 0x6828, 0xa0be, 0x7000,
++ 0x0040, 0x38e5, 0xa0be, 0x7100, 0x0040, 0x38e5, 0xa0be, 0x7200,
++ 0x0040, 0x38e5, 0x0d7f, 0x0078, 0x2bdb, 0x6820, 0x6924, 0x1078,
++ 0x254d, 0x00c0, 0x3910, 0x1078, 0x455c, 0x00c0, 0x3910, 0x7122,
++ 0x6612, 0x6516, 0x6e18, 0x0c7e, 0x1078, 0x35ba, 0x0040, 0x3910,
++ 0x1078, 0x35ba, 0x0040, 0x3910, 0x0c7f, 0x0d7f, 0x6837, 0x0000,
++ 0x6838, 0xc0fd, 0x683a, 0x6823, 0x0000, 0x6804, 0x2068, 0x1078,
++ 0x8e82, 0x0040, 0x2bd7, 0x7007, 0x0003, 0x701b, 0x3913, 0x007c,
++ 0x0d7f, 0x0078, 0x2bd7, 0x7120, 0x1078, 0x298e, 0x6820, 0xa086,
++ 0x8001, 0x0040, 0x2bd7, 0x2d00, 0x701e, 0x6804, 0xa080, 0x0002,
++ 0x007e, 0x20a9, 0x002a, 0x2098, 0x20a0, 0x1078, 0x4281, 0x007f,
++ 0xade8, 0x000d, 0x6a08, 0x6b0c, 0x6c10, 0x6d14, 0x2061, 0xa6d2,
++ 0x6007, 0x0000, 0x6e00, 0x6f28, 0xa7c6, 0x7000, 0x00c0, 0x393a,
++ 0x0078, 0x393e, 0xa7c6, 0x7100, 0x00c0, 0x3946, 0xa6c2, 0x0004,
++ 0x0048, 0x2bdb, 0x2009, 0x0004, 0x0078, 0x3608, 0xa7c6, 0x7200,
++ 0x00c0, 0x2bdb, 0xa6c2, 0x0054, 0x0048, 0x2bdb, 0x600e, 0x6013,
++ 0x002a, 0x6226, 0x632a, 0x642e, 0x6532, 0x2c10, 0x1078, 0x13db,
++ 0x7007, 0x0002, 0x701b, 0x395d, 0x007c, 0x701c, 0x2068, 0x6804,
++ 0xa080, 0x0001, 0x2004, 0xa080, 0x0002, 0x007e, 0x20a9, 0x002a,
++ 0x2098, 0x20a0, 0x1078, 0x4281, 0x007f, 0x2009, 0x002a, 0x2061,
++ 0xa6d2, 0x6224, 0x6328, 0x642c, 0x6530, 0x0078, 0x3608, 0x81ff,
++ 0x00c0, 0x2bd7, 0x792c, 0x2001, 0xa89d, 0x2102, 0x1078, 0x35d2,
++ 0x0040, 0x2bdb, 0x1078, 0x4673, 0x0040, 0x2bd7, 0x127e, 0x2091,
++ 0x8000, 0x1078, 0x47de, 0x127f, 0x0078, 0x2bad, 0x7824, 0xd08c,
++ 0x00c0, 0x3995, 0xd084, 0x0040, 0x31da, 0x1078, 0x35e4, 0x0040,
++ 0x2bdb, 0x0c7e, 0x1078, 0x35ba, 0x0c7f, 0x00c0, 0x39a3, 0x2009,
++ 0x0002, 0x0078, 0x2bd7, 0x6004, 0xa084, 0x00ff, 0xa086, 0x0006,
++ 0x0040, 0x39b0, 0xa08e, 0x0004, 0x0040, 0x39b0, 0xa08e, 0x0005,
++ 0x00c0, 0x39dd, 0x7824, 0xd08c, 0x0040, 0x39bb, 0x6000, 0xc08c,
++ 0x6002, 0x0078, 0x39c5, 0x2001, 0xa653, 0x2004, 0xd0b4, 0x0040,
++ 0x320f, 0x6000, 0xd08c, 0x00c0, 0x320f, 0x6837, 0x0000, 0x6838,
++ 0xc0fd, 0x683a, 0x1078, 0x8e9e, 0x00c0, 0x39d2, 0x2009, 0x0003,
++ 0x0078, 0x2bd7, 0x7007, 0x0003, 0x701b, 0x39d7, 0x007c, 0x1078,
++ 0x35e4, 0x0040, 0x2bdb, 0x0078, 0x320f, 0x2009, 0xa62f, 0x210c,
++ 0x81ff, 0x0040, 0x39e7, 0x2009, 0x0001, 0x0078, 0x2bd7, 0x2001,
++ 0xa600, 0x2004, 0xa086, 0x0003, 0x0040, 0x39f2, 0x2009, 0x0007,
++ 0x0078, 0x2bd7, 0x2001, 0xa653, 0x2004, 0xd0ac, 0x0040, 0x39fc,
++ 0x2009, 0x0008, 0x0078, 0x2bd7, 0x609c, 0xd0a4, 0x00c0, 0x3a03,
++ 0xd0ac, 0x00c0, 0x320f, 0x6837, 0x0000, 0x6833, 0x0000, 0x6838,
++ 0xc0fd, 0x683a, 0x1078, 0x8f12, 0x00c0, 0x3a12, 0x2009, 0x0003,
++ 0x0078, 0x2bd7, 0x7007, 0x0003, 0x701b, 0x3a17, 0x007c, 0x6830,
++ 0xa086, 0x0100, 0x00c0, 0x3a20, 0x2009, 0x0004, 0x0078, 0x2bd7,
++ 0x1078, 0x35e4, 0x0040, 0x2bdb, 0x0078, 0x39b2, 0x81ff, 0x2009,
++ 0x0001, 0x00c0, 0x2bd7, 0x6000, 0xa086, 0x0003, 0x2009, 0x0007,
++ 0x00c0, 0x2bd7, 0x2001, 0xa653, 0x2004, 0xd0ac, 0x2009, 0x0008,
++ 0x00c0, 0x2bd7, 0x1078, 0x35e4, 0x0040, 0x2bdb, 0x6004, 0xa084,
++ 0x00ff, 0xa086, 0x0006, 0x2009, 0x0009, 0x00c0, 0x2bd7, 0x0c7e,
++ 0x1078, 0x35ba, 0x0c7f, 0x2009, 0x0002, 0x0040, 0x2bd7, 0x6837,
++ 0x0000, 0x6833, 0x0000, 0x6838, 0xc0fd, 0x683a, 0x7928, 0xa194,
++ 0xff00, 0xa18c, 0x00ff, 0xa006, 0x82ff, 0x00c0, 0x3a65, 0xc0ed,
++ 0x6952, 0x792c, 0x6956, 0x0078, 0x3a6e, 0xa28e, 0x0100, 0x00c0,
++ 0x2bdb, 0xc0e5, 0x6853, 0x0000, 0x6857, 0x0000, 0x683e, 0x1078,
++ 0x90bd, 0x2009, 0x0003, 0x0040, 0x2bd7, 0x7007, 0x0003, 0x701b,
++ 0x3a7a, 0x007c, 0x6830, 0xa086, 0x0100, 0x2009, 0x0004, 0x0040,
++ 0x2bd7, 0x0078, 0x2bad, 0x81ff, 0x2009, 0x0001, 0x00c0, 0x2bd7,
++ 0x6000, 0xa086, 0x0003, 0x2009, 0x0007, 0x00c0, 0x2bd7, 0x1078,
++ 0x35e4, 0x0040, 0x2bdb, 0x6004, 0xa084, 0x00ff, 0xa086, 0x0006,
++ 0x2009, 0x0009, 0x00c0, 0x2bd7, 0x0c7e, 0x1078, 0x35ba, 0x0c7f,
++ 0x2009, 0x0002, 0x0040, 0x2bd7, 0xad80, 0x000f, 0x2009, 0x0008,
++ 0x7a2c, 0x7b28, 0x7c3c, 0x7d38, 0x1078, 0x3604, 0x701b, 0x3ab1,
++ 0x007c, 0x0d7e, 0xade8, 0x000f, 0x6800, 0xa086, 0x0500, 0x00c0,
++ 0x3ac4, 0x6804, 0xa005, 0x00c0, 0x3ac4, 0x6808, 0xa084, 0xff00,
++ 0x00c0, 0x3ac4, 0x0078, 0x3ac7, 0x0d7f, 0x00c0, 0x2bdb, 0x0d7f,
++ 0x6837, 0x0000, 0x6833, 0x0000, 0x6838, 0xc0fd, 0x683a, 0x0c7e,
++ 0x1078, 0x35e4, 0x00c0, 0x3ad7, 0x0c7f, 0x0078, 0x2bdb, 0x1078,
++ 0x9119, 0x2009, 0x0003, 0x0c7f, 0x0040, 0x2bd7, 0x7007, 0x0003,
++ 0x701b, 0x3ae3, 0x007c, 0x6830, 0xa086, 0x0100, 0x2009, 0x0004,
++ 0x0040, 0x2bd7, 0x0078, 0x2bad, 0x127e, 0x0c7e, 0x0e7e, 0x2061,
++ 0x0100, 0x2071, 0xa600, 0x6044, 0xd0a4, 0x00c0, 0x3b15, 0xd084,
++ 0x0040, 0x3afe, 0x1078, 0x3c75, 0x0078, 0x3b11, 0xd08c, 0x0040,
++ 0x3b05, 0x1078, 0x3b8c, 0x0078, 0x3b11, 0xd094, 0x0040, 0x3b0c,
++ 0x1078, 0x3b60, 0x0078, 0x3b11, 0xd09c, 0x0040, 0x3b11, 0x1078,
++ 0x3b1f, 0x0e7f, 0x0c7f, 0x127f, 0x007c, 0x017e, 0x6128, 0xd19c,
++ 0x00c0, 0x3b1c, 0xc19d, 0x612a, 0x017f, 0x0078, 0x3b11, 0x624c,
++ 0xa286, 0xf0f0, 0x00c0, 0x3b30, 0x6048, 0xa086, 0xf0f0, 0x0040,
++ 0x3b30, 0x624a, 0x6043, 0x0090, 0x6043, 0x0010, 0x0078, 0x3b5f,
++ 0xa294, 0xff00, 0xa296, 0xf700, 0x0040, 0x3b45, 0x7134, 0xd1a4,
++ 0x00c0, 0x3b45, 0x6240, 0xa294, 0x0010, 0x0040, 0x3b45, 0x2009,
++ 0x00f7, 0x1078, 0x42a1, 0x0078, 0x3b5f, 0x6043, 0x0040, 0x6043,
++ 0x0000, 0x7077, 0x0000, 0x708f, 0x0001, 0x70b3, 0x0000, 0x70cf,
++ 0x0000, 0x2009, 0xacc0, 0x200b, 0x0000, 0x7087, 0x0000, 0x707b,
++ 0x000f, 0x2009, 0x000f, 0x2011, 0x41d5, 0x1078, 0x5add, 0x007c,
++ 0x157e, 0x7078, 0xa005, 0x00c0, 0x3b8a, 0x2011, 0x41d5, 0x1078,
++ 0x5a45, 0x6040, 0xa094, 0x0010, 0xa285, 0x0020, 0x6042, 0x20a9,
++ 0x00c8, 0x6044, 0xd08c, 0x00c0, 0x3b83, 0x00f0, 0x3b71, 0x6242,
++ 0x708b, 0x0000, 0x6040, 0xa094, 0x0010, 0xa285, 0x0080, 0x6042,
++ 0x6242, 0x0078, 0x3b8a, 0x6242, 0x708b, 0x0000, 0x707f, 0x0000,
++ 0x0078, 0x3b8a, 0x157f, 0x007c, 0x707c, 0xa08a, 0x0003, 0x00c8,
++ 0x3b95, 0x1079, 0x3b98, 0x0078, 0x3b97, 0x1078, 0x1332, 0x007c,
++ 0x3b9b, 0x3bea, 0x3c74, 0x0f7e, 0x707f, 0x0001, 0x20e1, 0xa000,
++ 0x20e1, 0x8700, 0x1078, 0x21f7, 0x20e1, 0x9080, 0x20e1, 0x4000,
++ 0x2079, 0xab00, 0x207b, 0x2200, 0x7807, 0x00ef, 0x780b, 0x0000,
++ 0x780f, 0x00ef, 0x7813, 0x0138, 0x7817, 0x0000, 0x781b, 0x0000,
++ 0x781f, 0x0000, 0x7823, 0xffff, 0x7827, 0xffff, 0x782b, 0x0000,
++ 0x782f, 0x0000, 0x2079, 0xab0c, 0x207b, 0x1101, 0x7807, 0x0000,
++ 0x2099, 0xa605, 0x20a1, 0xab0e, 0x20a9, 0x0004, 0x53a3, 0x2079,
++ 0xab12, 0x207b, 0x0000, 0x7807, 0x0000, 0x2099, 0xab00, 0x20a1,
++ 0x020b, 0x20a9, 0x0014, 0x53a6, 0x60c3, 0x000c, 0x600f, 0x0000,
++ 0x1078, 0x420b, 0x0f7f, 0x7083, 0x0000, 0x6043, 0x0008, 0x6043,
++ 0x0000, 0x007c, 0x0d7e, 0x7080, 0x7083, 0x0000, 0xa025, 0x0040,
++ 0x3c5e, 0x6020, 0xd0b4, 0x00c0, 0x3c5c, 0x718c, 0x81ff, 0x0040,
++ 0x3c4b, 0xa486, 0x000c, 0x00c0, 0x3c56, 0xa480, 0x0018, 0x8004,
++ 0x20a8, 0x2011, 0xab80, 0x2019, 0xab00, 0x220c, 0x2304, 0xa106,
++ 0x00c0, 0x3c22, 0x8210, 0x8318, 0x00f0, 0x3c05, 0x6043, 0x0004,
++ 0x608b, 0xbc94, 0x608f, 0xf0f0, 0x6043, 0x0006, 0x707f, 0x0002,
++ 0x708b, 0x0002, 0x2009, 0x07d0, 0x2011, 0x41dc, 0x1078, 0x5add,
++ 0x0078, 0x3c5c, 0x2069, 0xab80, 0x6930, 0xa18e, 0x1101, 0x00c0,
++ 0x3c56, 0x6834, 0xa005, 0x00c0, 0x3c56, 0x6900, 0xa18c, 0x00ff,
++ 0x00c0, 0x3c36, 0x6804, 0xa005, 0x0040, 0x3c4b, 0x2011, 0xab8e,
++ 0x2019, 0xa605, 0x20a9, 0x0004, 0x220c, 0x2304, 0xa102, 0x0048,
++ 0x3c49, 0x00c0, 0x3c56, 0x8210, 0x8318, 0x00f0, 0x3c3c, 0x0078,
++ 0x3c56, 0x708f, 0x0000, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x2099,
++ 0xab80, 0x20a1, 0x020b, 0x20a9, 0x0014, 0x53a6, 0x6043, 0x0008,
++ 0x6043, 0x0000, 0x0078, 0x3c5e, 0x0d7f, 0x007c, 0x6020, 0xd0b4,
++ 0x00c0, 0x3c5c, 0x60c3, 0x000c, 0x2011, 0xa8bb, 0x2013, 0x0000,
++ 0x7083, 0x0000, 0x20e1, 0x9080, 0x60a3, 0x0056, 0x60a7, 0x9575,
++ 0x1078, 0x6e06, 0x0078, 0x3c5c, 0x007c, 0x7088, 0xa08a, 0x001d,
++ 0x00c8, 0x3c7e, 0x1079, 0x3c81, 0x0078, 0x3c80, 0x1078, 0x1332,
++ 0x007c, 0x3cab, 0x3cba, 0x3ce9, 0x3d02, 0x3d2e, 0x3d5a, 0x3d86,
++ 0x3dbc, 0x3de8, 0x3e10, 0x3e53, 0x3e7d, 0x3e9f, 0x3eb5, 0x3edb,
++ 0x3eee, 0x3ef7, 0x3f2b, 0x3f57, 0x3f83, 0x3faf, 0x3fe5, 0x4030,
++ 0x405f, 0x4081, 0x40c3, 0x40e9, 0x4102, 0x4103, 0x0c7e, 0x2061,
++ 0xa600, 0x6003, 0x0007, 0x2061, 0x0100, 0x6004, 0xa084, 0xfff9,
++ 0x6006, 0x0c7f, 0x007c, 0x608b, 0xbc94, 0x608f, 0xf0f0, 0x6043,
++ 0x0002, 0x708b, 0x0001, 0x2009, 0x07d0, 0x2011, 0x41dc, 0x1078,
++ 0x5add, 0x007c, 0x0f7e, 0x7080, 0xa086, 0x0014, 0x00c0, 0x3ce7,
++ 0x6043, 0x0000, 0x6020, 0xd0b4, 0x00c0, 0x3ce7, 0x2079, 0xab80,
++ 0x7a30, 0xa296, 0x1102, 0x00c0, 0x3ce5, 0x7834, 0xa005, 0x00c0,
++ 0x3ce5, 0x7a38, 0xd2fc, 0x0040, 0x3cdb, 0x70b0, 0xa005, 0x00c0,
++ 0x3cdb, 0x70b3, 0x0001, 0x2011, 0x41dc, 0x1078, 0x5a45, 0x708b,
++ 0x0010, 0x1078, 0x3ef7, 0x0078, 0x3ce7, 0x1078, 0x4224, 0x0f7f,
++ 0x007c, 0x708b, 0x0003, 0x6043, 0x0004, 0x2011, 0x41dc, 0x1078,
++ 0x5a45, 0x1078, 0x4289, 0x20a3, 0x1102, 0x20a3, 0x0000, 0x20a9,
++ 0x000a, 0x20a3, 0x0000, 0x00f0, 0x3cf9, 0x60c3, 0x0014, 0x1078,
++ 0x420b, 0x007c, 0x0f7e, 0x7080, 0xa005, 0x0040, 0x3d2c, 0x2011,
++ 0x41dc, 0x1078, 0x5a45, 0xa086, 0x0014, 0x00c0, 0x3d2a, 0x2079,
++ 0xab80, 0x7a30, 0xa296, 0x1102, 0x00c0, 0x3d2a, 0x7834, 0xa005,
++ 0x00c0, 0x3d2a, 0x7a38, 0xd2fc, 0x0040, 0x3d24, 0x70b0, 0xa005,
++ 0x00c0, 0x3d24, 0x70b3, 0x0001, 0x708b, 0x0004, 0x1078, 0x3d2e,
++ 0x0078, 0x3d2c, 0x1078, 0x4224, 0x0f7f, 0x007c, 0x708b, 0x0005,
++ 0x1078, 0x4289, 0x20a3, 0x1103, 0x20a3, 0x0000, 0x3430, 0x2011,
++ 0xab8e, 0x1078, 0x42d4, 0x00c0, 0x3d4c, 0x7074, 0xa005, 0x00c0,
++ 0x3d4c, 0x7150, 0xa186, 0xffff, 0x0040, 0x3d4c, 0x1078, 0x419d,
++ 0x0040, 0x3d4c, 0x1078, 0x42b8, 0x20a9, 0x0008, 0x2298, 0x26a0,
++ 0x53a6, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x0014, 0x1078,
++ 0x420b, 0x007c, 0x0f7e, 0x7080, 0xa005, 0x0040, 0x3d84, 0x2011,
++ 0x41dc, 0x1078, 0x5a45, 0xa086, 0x0014, 0x00c0, 0x3d82, 0x2079,
++ 0xab80, 0x7a30, 0xa296, 0x1103, 0x00c0, 0x3d82, 0x7834, 0xa005,
++ 0x00c0, 0x3d82, 0x7a38, 0xd2fc, 0x0040, 0x3d7c, 0x70b0, 0xa005,
++ 0x00c0, 0x3d7c, 0x70b3, 0x0001, 0x708b, 0x0006, 0x1078, 0x3d86,
++ 0x0078, 0x3d84, 0x1078, 0x4224, 0x0f7f, 0x007c, 0x708b, 0x0007,
++ 0x1078, 0x4289, 0x20a3, 0x1104, 0x20a3, 0x0000, 0x3430, 0x2011,
++ 0xab8e, 0x1078, 0x42d4, 0x00c0, 0x3dae, 0x7074, 0xa005, 0x00c0,
++ 0x3dae, 0x7154, 0xa186, 0xffff, 0x0040, 0x3dae, 0xa180, 0x29c0,
++ 0x200c, 0xa18c, 0xff00, 0x810f, 0x1078, 0x419d, 0x0040, 0x3dae,
++ 0x1078, 0x3820, 0x0040, 0x3dae, 0x1078, 0x256a, 0x20a9, 0x0008,
++ 0x2298, 0x26a0, 0x53a6, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3,
++ 0x0014, 0x1078, 0x420b, 0x007c, 0x0f7e, 0x7080, 0xa005, 0x0040,
++ 0x3de6, 0x2011, 0x41dc, 0x1078, 0x5a45, 0xa086, 0x0014, 0x00c0,
++ 0x3de4, 0x2079, 0xab80, 0x7a30, 0xa296, 0x1104, 0x00c0, 0x3de4,
++ 0x7834, 0xa005, 0x00c0, 0x3de4, 0x7a38, 0xd2fc, 0x0040, 0x3dde,
++ 0x70b0, 0xa005, 0x00c0, 0x3dde, 0x70b3, 0x0001, 0x708b, 0x0008,
++ 0x1078, 0x3de8, 0x0078, 0x3de6, 0x1078, 0x4224, 0x0f7f, 0x007c,
++ 0x708b, 0x0009, 0x1078, 0x4289, 0x20a3, 0x1105, 0x20a3, 0x0100,
++ 0x3430, 0x1078, 0x42d4, 0x00c0, 0x3e01, 0x7074, 0xa005, 0x00c0,
++ 0x3e01, 0x1078, 0x4104, 0x00c0, 0x3e0b, 0xa085, 0x0001, 0x1078,
++ 0x256a, 0x20a9, 0x0008, 0x2099, 0xab8e, 0x26a0, 0x53a6, 0x20a3,
++ 0x0000, 0x20a3, 0x0000, 0x60c3, 0x0014, 0x1078, 0x420b, 0x007c,
++ 0x0f7e, 0x7080, 0xa005, 0x0040, 0x3e51, 0x2011, 0x41dc, 0x1078,
++ 0x5a45, 0xa086, 0x0014, 0x00c0, 0x3e4f, 0x2079, 0xab80, 0x7a30,
++ 0xa296, 0x1105, 0x00c0, 0x3e4f, 0x7834, 0x2011, 0x0100, 0xa21e,
++ 0x00c0, 0x3e3a, 0x7a38, 0xd2fc, 0x0040, 0x3e34, 0x70b0, 0xa005,
++ 0x00c0, 0x3e34, 0x70b3, 0x0001, 0x708b, 0x000a, 0x1078, 0x3e53,
++ 0x0078, 0x3e51, 0xa005, 0x00c0, 0x3e4f, 0x7a38, 0xd2fc, 0x0040,
++ 0x3e47, 0x70b0, 0xa005, 0x00c0, 0x3e47, 0x70b3, 0x0001, 0x7087,
++ 0x0000, 0x708b, 0x000e, 0x1078, 0x3edb, 0x0078, 0x3e51, 0x1078,
++ 0x4224, 0x0f7f, 0x007c, 0x708b, 0x000b, 0x2011, 0xab0e, 0x22a0,
++ 0x20a9, 0x0040, 0x2019, 0xffff, 0x43a4, 0x20a9, 0x0002, 0x2009,
++ 0x0000, 0x41a4, 0x1078, 0x4289, 0x20a3, 0x1106, 0x20a3, 0x0000,
++ 0x1078, 0x42d4, 0x0040, 0x3e70, 0x2013, 0x0000, 0x0078, 0x3e74,
++ 0x6030, 0xa085, 0x0100, 0x2012, 0x2298, 0x20a9, 0x0042, 0x53a6,
++ 0x60c3, 0x0084, 0x1078, 0x420b, 0x007c, 0x0f7e, 0x7080, 0xa005,
++ 0x0040, 0x3e9d, 0x2011, 0x41dc, 0x1078, 0x5a45, 0xa086, 0x0084,
++ 0x00c0, 0x3e9b, 0x2079, 0xab80, 0x7a30, 0xa296, 0x1106, 0x00c0,
++ 0x3e9b, 0x7834, 0xa005, 0x00c0, 0x3e9b, 0x708b, 0x000c, 0x1078,
++ 0x3e9f, 0x0078, 0x3e9d, 0x1078, 0x4224, 0x0f7f, 0x007c, 0x708b,
++ 0x000d, 0x1078, 0x4289, 0x20a3, 0x1107, 0x20a3, 0x0000, 0x2099,
++ 0xab8e, 0x20a9, 0x0040, 0x53a6, 0x20a3, 0x0000, 0x20a3, 0x0000,
++ 0x60c3, 0x0084, 0x1078, 0x420b, 0x007c, 0x0f7e, 0x7080, 0xa005,
++ 0x0040, 0x3ed9, 0x2011, 0x41dc, 0x1078, 0x5a45, 0xa086, 0x0084,
++ 0x00c0, 0x3ed7, 0x2079, 0xab80, 0x7a30, 0xa296, 0x1107, 0x00c0,
++ 0x3ed7, 0x7834, 0xa005, 0x00c0, 0x3ed7, 0x7087, 0x0001, 0x1078,
++ 0x427b, 0x708b, 0x000e, 0x1078, 0x3edb, 0x0078, 0x3ed9, 0x1078,
++ 0x4224, 0x0f7f, 0x007c, 0x708b, 0x000f, 0x7083, 0x0000, 0x608b,
++ 0xbc85, 0x608f, 0xb5b5, 0x6043, 0x0005, 0x6043, 0x0004, 0x2009,
++ 0x07d0, 0x2011, 0x41dc, 0x1078, 0x5a38, 0x007c, 0x7080, 0xa005,
++ 0x0040, 0x3ef6, 0x2011, 0x41dc, 0x1078, 0x5a45, 0x007c, 0x708b,
++ 0x0011, 0x1078, 0x42d4, 0x00c0, 0x3f14, 0x716c, 0x81ff, 0x0040,
++ 0x3f14, 0x2009, 0x0000, 0x7070, 0xa084, 0x00ff, 0x1078, 0x254d,
++ 0xa186, 0x007e, 0x0040, 0x3f14, 0xa186, 0x0080, 0x0040, 0x3f14,
++ 0x2011, 0xab8e, 0x1078, 0x419d, 0x20e1, 0x9080, 0x20e1, 0x4000,
++ 0x2099, 0xab80, 0x20a1, 0x020b, 0x7480, 0xa480, 0x0018, 0xa080,
++ 0x0007, 0xa084, 0x03f8, 0x8004, 0x20a8, 0x53a6, 0x60c3, 0x0014,
++ 0x1078, 0x420b, 0x007c, 0x0f7e, 0x7080, 0xa005, 0x0040, 0x3f55,
++ 0x2011, 0x41dc, 0x1078, 0x5a45, 0xa086, 0x0014, 0x00c0, 0x3f53,
++ 0x2079, 0xab80, 0x7a30, 0xa296, 0x1103, 0x00c0, 0x3f53, 0x7834,
++ 0xa005, 0x00c0, 0x3f53, 0x7a38, 0xd2fc, 0x0040, 0x3f4d, 0x70b0,
++ 0xa005, 0x00c0, 0x3f4d, 0x70b3, 0x0001, 0x708b, 0x0012, 0x1078,
++ 0x3f57, 0x0078, 0x3f55, 0x1078, 0x4224, 0x0f7f, 0x007c, 0x708b,
++ 0x0013, 0x1078, 0x4295, 0x20a3, 0x1103, 0x20a3, 0x0000, 0x3430,
++ 0x2011, 0xab8e, 0x1078, 0x42d4, 0x00c0, 0x3f75, 0x7074, 0xa005,
++ 0x00c0, 0x3f75, 0x7150, 0xa186, 0xffff, 0x0040, 0x3f75, 0x1078,
++ 0x419d, 0x0040, 0x3f75, 0x1078, 0x42b8, 0x20a9, 0x0008, 0x2298,
++ 0x26a0, 0x53a6, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x0014,
++ 0x1078, 0x420b, 0x007c, 0x0f7e, 0x7080, 0xa005, 0x0040, 0x3fad,
++ 0x2011, 0x41dc, 0x1078, 0x5a45, 0xa086, 0x0014, 0x00c0, 0x3fab,
++ 0x2079, 0xab80, 0x7a30, 0xa296, 0x1104, 0x00c0, 0x3fab, 0x7834,
++ 0xa005, 0x00c0, 0x3fab, 0x7a38, 0xd2fc, 0x0040, 0x3fa5, 0x70b0,
++ 0xa005, 0x00c0, 0x3fa5, 0x70b3, 0x0001, 0x708b, 0x0014, 0x1078,
++ 0x3faf, 0x0078, 0x3fad, 0x1078, 0x4224, 0x0f7f, 0x007c, 0x708b,
++ 0x0015, 0x1078, 0x4295, 0x20a3, 0x1104, 0x20a3, 0x0000, 0x3430,
++ 0x2011, 0xab8e, 0x1078, 0x42d4, 0x00c0, 0x3fd7, 0x7074, 0xa005,
++ 0x00c0, 0x3fd7, 0x7154, 0xa186, 0xffff, 0x0040, 0x3fd7, 0xa180,
++ 0x29c0, 0x200c, 0xa18c, 0xff00, 0x810f, 0x1078, 0x419d, 0x0040,
++ 0x3fd7, 0x1078, 0x3820, 0x0040, 0x3fd7, 0x1078, 0x256a, 0x20a9,
++ 0x0008, 0x2298, 0x26a0, 0x53a6, 0x20a3, 0x0000, 0x20a3, 0x0000,
++ 0x60c3, 0x0014, 0x1078, 0x420b, 0x007c, 0x0f7e, 0x7080, 0xa005,
++ 0x0040, 0x402e, 0x2011, 0x41dc, 0x1078, 0x5a45, 0xa086, 0x0014,
++ 0x00c0, 0x402c, 0x2079, 0xab80, 0x7a30, 0xa296, 0x1105, 0x00c0,
++ 0x402c, 0x7834, 0x2011, 0x0100, 0xa21e, 0x00c0, 0x400b, 0x7a38,
++ 0xd2fc, 0x0040, 0x4009, 0x70b0, 0xa005, 0x00c0, 0x4009, 0x70b3,
++ 0x0001, 0x0078, 0x401a, 0xa005, 0x00c0, 0x402c, 0x7a38, 0xd2fc,
++ 0x0040, 0x4018, 0x70b0, 0xa005, 0x00c0, 0x4018, 0x70b3, 0x0001,
++ 0x7087, 0x0000, 0x7a38, 0xd2f4, 0x0040, 0x4026, 0x2001, 0xa674,
++ 0x2004, 0xd0a4, 0x00c0, 0x4026, 0x70cf, 0x0008, 0x708b, 0x0016,
++ 0x1078, 0x4030, 0x0078, 0x402e, 0x1078, 0x4224, 0x0f7f, 0x007c,
++ 0x20e1, 0x9080, 0x20e1, 0x4000, 0x2099, 0xab80, 0x20a1, 0x020b,
++ 0x20a9, 0x000e, 0x53a6, 0x3430, 0x2011, 0xab8e, 0x708b, 0x0017,
++ 0x1078, 0x42d4, 0x00c0, 0x4050, 0x7074, 0xa005, 0x00c0, 0x4050,
++ 0x1078, 0x4104, 0x00c0, 0x405a, 0xa085, 0x0001, 0x1078, 0x256a,
++ 0x20a9, 0x0008, 0x2099, 0xab8e, 0x26a0, 0x53a6, 0x20a3, 0x0000,
++ 0x20a3, 0x0000, 0x60c3, 0x0014, 0x1078, 0x420b, 0x007c, 0x0f7e,
++ 0x7080, 0xa005, 0x0040, 0x407f, 0x2011, 0x41dc, 0x1078, 0x5a45,
++ 0xa086, 0x0084, 0x00c0, 0x407d, 0x2079, 0xab80, 0x7a30, 0xa296,
++ 0x1106, 0x00c0, 0x407d, 0x7834, 0xa005, 0x00c0, 0x407d, 0x708b,
++ 0x0018, 0x1078, 0x4081, 0x0078, 0x407f, 0x1078, 0x4224, 0x0f7f,
++ 0x007c, 0x708b, 0x0019, 0x1078, 0x4295, 0x20a3, 0x1106, 0x20a3,
++ 0x0000, 0x3430, 0x2099, 0xab8e, 0x2039, 0xab0e, 0x27a0, 0x20a9,
++ 0x0040, 0x53a3, 0x1078, 0x42d4, 0x00c0, 0x40b5, 0x2728, 0x2514,
++ 0x8207, 0xa084, 0x00ff, 0x8000, 0x2018, 0xa294, 0x00ff, 0x8007,
++ 0xa205, 0x202a, 0x6030, 0x2310, 0x8214, 0xa2a0, 0xab0e, 0x2414,
++ 0xa38c, 0x0001, 0x0040, 0x40b0, 0xa294, 0xff00, 0x0078, 0x40b3,
++ 0xa294, 0x00ff, 0x8007, 0xa215, 0x2222, 0x2798, 0x26a0, 0x20a9,
++ 0x0040, 0x53a6, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x0084,
++ 0x1078, 0x420b, 0x007c, 0x0f7e, 0x7080, 0xa005, 0x0040, 0x40e7,
++ 0x2011, 0x41dc, 0x1078, 0x5a45, 0xa086, 0x0084, 0x00c0, 0x40e5,
++ 0x2079, 0xab80, 0x7a30, 0xa296, 0x1107, 0x00c0, 0x40e5, 0x7834,
++ 0xa005, 0x00c0, 0x40e5, 0x7087, 0x0001, 0x1078, 0x427b, 0x708b,
++ 0x001a, 0x1078, 0x40e9, 0x0078, 0x40e7, 0x1078, 0x4224, 0x0f7f,
++ 0x007c, 0x708b, 0x001b, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x2099,
++ 0xab80, 0x20a1, 0x020b, 0x7480, 0xa480, 0x0018, 0xa080, 0x0007,
++ 0xa084, 0x03f8, 0x8004, 0x20a8, 0x53a6, 0x60c3, 0x0084, 0x1078,
++ 0x420b, 0x007c, 0x007c, 0x007c, 0x087e, 0x097e, 0x2029, 0xa653,
++ 0x252c, 0x20a9, 0x0008, 0x2041, 0xab0e, 0x28a0, 0x2099, 0xab8e,
++ 0x53a3, 0x20a9, 0x0008, 0x2011, 0x0007, 0xd5d4, 0x0040, 0x411a,
++ 0x2011, 0x0000, 0x2800, 0xa200, 0x200c, 0xa1a6, 0xffff, 0x00c0,
++ 0x412c, 0xd5d4, 0x0040, 0x4127, 0x8210, 0x0078, 0x4128, 0x8211,
++ 0x00f0, 0x411a, 0x0078, 0x4194, 0x82ff, 0x00c0, 0x413e, 0xd5d4,
++ 0x0040, 0x4138, 0xa1a6, 0x3fff, 0x0040, 0x4124, 0x0078, 0x413c,
++ 0xa1a6, 0x3fff, 0x0040, 0x4194, 0xa18d, 0xc000, 0x20a9, 0x0010,
++ 0x2019, 0x0001, 0xd5d4, 0x0040, 0x4147, 0x2019, 0x0010, 0x2120,
++ 0xd5d4, 0x0040, 0x414e, 0x8423, 0x0078, 0x414f, 0x8424, 0x00c8,
++ 0x415c, 0xd5d4, 0x0040, 0x4157, 0x8319, 0x0078, 0x4158, 0x8318,
++ 0x00f0, 0x4148, 0x0078, 0x4194, 0x23a8, 0x2021, 0x0001, 0x8426,
++ 0x8425, 0x00f0, 0x4160, 0x2328, 0x8529, 0xa2be, 0x0007, 0x0040,
++ 0x4174, 0x007e, 0x2039, 0x0007, 0x2200, 0xa73a, 0x007f, 0x27a8,
++ 0xa5a8, 0x0010, 0x00f0, 0x4170, 0x7552, 0xa5c8, 0x29c0, 0x292c,
++ 0xa5ac, 0x00ff, 0x6532, 0x60e7, 0x0000, 0x65ea, 0x706f, 0x0000,
++ 0x7572, 0x2018, 0x2304, 0xa405, 0x201a, 0x7077, 0x0001, 0x26a0,
++ 0x2898, 0x20a9, 0x0008, 0x53a6, 0x20a3, 0x0000, 0x20a3, 0x0000,
++ 0xa085, 0x0001, 0x0078, 0x419a, 0xa006, 0x0078, 0x419a, 0xa006,
++ 0x1078, 0x1332, 0x097f, 0x087f, 0x007c, 0x2118, 0x2021, 0x0000,
++ 0x2001, 0x0007, 0xa39a, 0x0010, 0x0048, 0x41aa, 0x8420, 0x8001,
++ 0x0078, 0x41a2, 0x2118, 0x84ff, 0x0040, 0x41b3, 0xa39a, 0x0010,
++ 0x8421, 0x00c0, 0x41ae, 0x2021, 0x0001, 0x83ff, 0x0040, 0x41bc,
++ 0x8423, 0x8319, 0x00c0, 0x41b8, 0xa238, 0x2704, 0xa42c, 0x00c0,
++ 0x41d4, 0xa405, 0x203a, 0x7152, 0xa1a0, 0x29c0, 0x242c, 0xa5ac,
++ 0x00ff, 0x6532, 0x60e7, 0x0000, 0x65ea, 0x706f, 0x0000, 0x7572,
++ 0x7077, 0x0001, 0xa084, 0x0000, 0x007c, 0x0e7e, 0x2071, 0xa600,
++ 0x707b, 0x0000, 0x0e7f, 0x007c, 0x0e7e, 0x0f7e, 0x2001, 0x0002,
++ 0x1078, 0x5ae6, 0x2079, 0x0100, 0x2071, 0x0140, 0x1078, 0x6e0f,
++ 0x7004, 0xa084, 0x4000, 0x0040, 0x41f1, 0x7003, 0x1000, 0x7003,
++ 0x0000, 0x127e, 0x2091, 0x8000, 0x2071, 0xa622, 0x2073, 0x0000,
++ 0x7840, 0x027e, 0x017e, 0x2009, 0x00f7, 0x1078, 0x42a1, 0x017f,
++ 0xa094, 0x0010, 0xa285, 0x0080, 0x7842, 0x7a42, 0x027f, 0x127f,
++ 0x0f7f, 0x0e7f, 0x007c, 0x127e, 0x2091, 0x8000, 0x2011, 0xa8bb,
++ 0x2013, 0x0000, 0x7083, 0x0000, 0x127f, 0x20e1, 0x9080, 0x60a3,
++ 0x0056, 0x60a7, 0x9575, 0x1078, 0x6e06, 0x2009, 0x07d0, 0x2011,
++ 0x41dc, 0x1078, 0x5add, 0x007c, 0x017e, 0x027e, 0x0c7e, 0x127e,
++ 0x2091, 0x8000, 0x2011, 0x0003, 0x1078, 0x70e0, 0x2011, 0x0002,
++ 0x1078, 0x70ea, 0x1078, 0x6fc4, 0x037e, 0x2019, 0x0000, 0x1078,
++ 0x7058, 0x037f, 0x2009, 0x00f7, 0x1078, 0x42a1, 0x2061, 0xa8c4,
++ 0x601b, 0x0000, 0x601f, 0x0000, 0x2061, 0xa600, 0x6003, 0x0001,
++ 0x2061, 0x0100, 0x6043, 0x0090, 0x6043, 0x0010, 0x2009, 0x002d,
++ 0x2011, 0x4259, 0x1078, 0x5a38, 0x127f, 0x0c7f, 0x027f, 0x017f,
++ 0x007c, 0x0e7e, 0x007e, 0x127e, 0x2091, 0x8000, 0x2001, 0x0001,
++ 0x1078, 0x5ae6, 0x2071, 0x0100, 0x1078, 0x6e0f, 0x2071, 0x0140,
++ 0x7004, 0xa084, 0x4000, 0x0040, 0x4271, 0x7003, 0x1000, 0x7003,
++ 0x0000, 0x2001, 0x0001, 0x1078, 0x24e8, 0x1078, 0x4224, 0x127f,
++ 0x007f, 0x0e7f, 0x007c, 0x20a9, 0x0040, 0x20a1, 0xacc0, 0x2099,
++ 0xab8e, 0x3304, 0x8007, 0x20a2, 0x9398, 0x94a0, 0x00f0, 0x4281,
++ 0x007c, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x2099, 0xab00, 0x20a1,
++ 0x020b, 0x20a9, 0x000c, 0x53a6, 0x007c, 0x20e1, 0x9080, 0x20e1,
++ 0x4000, 0x2099, 0xab80, 0x20a1, 0x020b, 0x20a9, 0x000c, 0x53a6,
++ 0x007c, 0x0c7e, 0x007e, 0x2061, 0x0100, 0x810f, 0x2001, 0xa62f,
++ 0x2004, 0xa005, 0x00c0, 0x42b2, 0x6030, 0xa084, 0x00ff, 0xa105,
++ 0x0078, 0x42b4, 0xa185, 0x00f7, 0x604a, 0x007f, 0x0c7f, 0x007c,
++ 0x017e, 0x047e, 0x2001, 0xa653, 0x2004, 0xd0a4, 0x0040, 0x42cb,
++ 0xa006, 0x2020, 0x2009, 0x002a, 0x1078, 0xa21d, 0x2001, 0xa60c,
++ 0x200c, 0xc195, 0x2102, 0x2019, 0x002a, 0x2009, 0x0000, 0x1078,
++ 0x284f, 0x047f, 0x017f, 0x007c, 0x007e, 0x2001, 0xa60c, 0x2004,
++ 0xd09c, 0x0040, 0x42db, 0x007f, 0x007c, 0x007e, 0x017e, 0x127e,
++ 0x2091, 0x8000, 0x2001, 0x0101, 0x200c, 0xa18d, 0x0006, 0x2102,
++ 0x127f, 0x017f, 0x007f, 0x007c, 0x157e, 0x20a9, 0x00ff, 0x2009,
++ 0xa735, 0xa006, 0x200a, 0x8108, 0x00f0, 0x42f2, 0x157f, 0x007c,
++ 0x0d7e, 0x037e, 0x157e, 0x137e, 0x147e, 0x2069, 0xa652, 0xa006,
++ 0x6002, 0x6007, 0x0707, 0x600a, 0x600e, 0x6012, 0xa198, 0x29c0,
++ 0x231c, 0xa39c, 0x00ff, 0x6316, 0x20a9, 0x0004, 0xac98, 0x0006,
++ 0x23a0, 0x40a4, 0x20a9, 0x0004, 0xac98, 0x000a, 0x23a0, 0x40a4,
++ 0x603e, 0x6042, 0x604e, 0x6052, 0x6056, 0x605a, 0x605e, 0x6062,
++ 0x6066, 0x606a, 0x606e, 0x6072, 0x6076, 0x607a, 0x607e, 0x6082,
++ 0x6086, 0x608a, 0x608e, 0x6092, 0x6096, 0x609a, 0x609e, 0x60ae,
++ 0x61a2, 0x0d7e, 0x60a4, 0xa06d, 0x0040, 0x4338, 0x1078, 0x13a4,
++ 0x60a7, 0x0000, 0x60a8, 0xa06d, 0x0040, 0x4340, 0x1078, 0x13a4,
++ 0x60ab, 0x0000, 0x0d7f, 0xa006, 0x604a, 0x6810, 0x603a, 0x680c,
++ 0x6046, 0x6814, 0xa084, 0x00ff, 0x6042, 0x147f, 0x137f, 0x157f,
++ 0x037f, 0x0d7f, 0x007c, 0x127e, 0x2091, 0x8000, 0x6944, 0x6e48,
++ 0xa684, 0x3fff, 0xa082, 0x4000, 0x00c8, 0x4424, 0xa18c, 0xff00,
++ 0x810f, 0xa182, 0x00ff, 0x00c8, 0x442a, 0x2001, 0xa60c, 0x2004,
++ 0xa084, 0x0003, 0x0040, 0x4385, 0x2001, 0xa60c, 0x2004, 0xd084,
++ 0x00c0, 0x4405, 0xa188, 0xa735, 0x2104, 0xa065, 0x0040, 0x4405,
++ 0x6004, 0xa084, 0x00ff, 0xa08e, 0x0006, 0x00c0, 0x4405, 0x6000,
++ 0xd0c4, 0x0040, 0x4405, 0x0078, 0x4392, 0xa188, 0xa735, 0x2104,
++ 0xa065, 0x0040, 0x43e9, 0x6004, 0xa084, 0x00ff, 0xa08e, 0x0006,
++ 0x00c0, 0x43ef, 0x60a4, 0xa00d, 0x0040, 0x439a, 0x1078, 0x4817,
++ 0x0040, 0x43e3, 0x60a8, 0xa00d, 0x0040, 0x43b4, 0x1078, 0x486a,
++ 0x00c0, 0x43b4, 0x694c, 0xd1fc, 0x00c0, 0x43aa, 0x1078, 0x44df,
++ 0x0078, 0x43de, 0x1078, 0x4484, 0x694c, 0xd1ec, 0x00c0, 0x43de,
++ 0x1078, 0x46d6, 0x0078, 0x43de, 0x694c, 0xa184, 0xa000, 0x0040,
++ 0x43ce, 0xd1ec, 0x0040, 0x43c7, 0xd1fc, 0x0040, 0x43c3, 0x1078,
++ 0x46e7, 0x0078, 0x43ca, 0x1078, 0x46e7, 0x0078, 0x43ce, 0xd1fc,
++ 0x0040, 0x43ce, 0x1078, 0x4484, 0x0078, 0x43de, 0x6050, 0xa00d,
++ 0x0040, 0x43d9, 0x2d00, 0x200a, 0x6803, 0x0000, 0x6052, 0x0078,
++ 0x43de, 0x2d00, 0x6052, 0x604e, 0x6803, 0x0000, 0x1078, 0x5da9,
++ 0xa006, 0x127f, 0x007c, 0x2001, 0x0005, 0x2009, 0x0000, 0x0078,
++ 0x442e, 0x2001, 0x0028, 0x2009, 0x0000, 0x0078, 0x442e, 0xa082,
++ 0x0006, 0x00c8, 0x4405, 0x60a0, 0xd0bc, 0x00c0, 0x4401, 0x6100,
++ 0xd1fc, 0x0040, 0x4392, 0x2001, 0x0029, 0x2009, 0x1000, 0x0078,
++ 0x442e, 0x2001, 0x0028, 0x0078, 0x4420, 0x2009, 0xa60c, 0x210c,
++ 0xd18c, 0x0040, 0x440f, 0x2001, 0x0004, 0x0078, 0x4420, 0xd184,
++ 0x0040, 0x4416, 0x2001, 0x0004, 0x0078, 0x4420, 0x2001, 0x0029,
++ 0x6100, 0xd1fc, 0x0040, 0x4420, 0x2009, 0x1000, 0x0078, 0x442e,
++ 0x2009, 0x0000, 0x0078, 0x442e, 0x2001, 0x0029, 0x2009, 0x0000,
++ 0x0078, 0x442e, 0x2001, 0x0029, 0x2009, 0x0000, 0xa005, 0x127f,
++ 0x007c, 0x6944, 0x6e48, 0xa684, 0x3fff, 0xa082, 0x4000, 0x00c8,
++ 0x447e, 0xa18c, 0xff00, 0x810f, 0xa182, 0x00ff, 0x00c8, 0x4464,
++ 0xa188, 0xa735, 0x2104, 0xa065, 0x0040, 0x4464, 0x6004, 0xa084,
++ 0x00ff, 0xa08e, 0x0006, 0x00c0, 0x446a, 0x684c, 0xd0ec, 0x0040,
++ 0x4457, 0x1078, 0x46e7, 0x1078, 0x4484, 0x0078, 0x445f, 0x1078,
++ 0x4484, 0x684c, 0xd0fc, 0x0040, 0x445f, 0x1078, 0x46d6, 0x1078,
++ 0x472f, 0xa006, 0x0078, 0x4482, 0x2001, 0x0028, 0x2009, 0x0000,
++ 0x0078, 0x4482, 0xa082, 0x0006, 0x00c8, 0x4478, 0x6100, 0xd1fc,
++ 0x0040, 0x444d, 0x2001, 0x0029, 0x2009, 0x1000, 0x0078, 0x4482,
++ 0x2001, 0x0029, 0x2009, 0x0000, 0x0078, 0x4482, 0x2001, 0x0029,
++ 0x2009, 0x0000, 0xa005, 0x007c, 0x127e, 0x2091, 0x8000, 0x6050,
++ 0xa00d, 0x0040, 0x4492, 0x2d00, 0x200a, 0x6803, 0x0000, 0x6052,
++ 0x127f, 0x007c, 0x2d00, 0x6052, 0x604e, 0x6803, 0x0000, 0x0078,
++ 0x4490, 0x127e, 0x2091, 0x8000, 0x604c, 0xa005, 0x0040, 0x44af,
++ 0x0e7e, 0x2071, 0xa8b1, 0x7004, 0xa086, 0x0002, 0x0040, 0x44b6,
++ 0x0e7f, 0x604c, 0x6802, 0x2d00, 0x604e, 0x127f, 0x007c, 0x2d00,
++ 0x6052, 0x604e, 0x6803, 0x0000, 0x0078, 0x44ad, 0x701c, 0xac06,
++ 0x00c0, 0x44a8, 0x604c, 0x2070, 0x7000, 0x6802, 0x2d00, 0x7002,
++ 0x0e7f, 0x127f, 0x007c, 0x127e, 0x2091, 0x8000, 0x604c, 0xa06d,
++ 0x0040, 0x44d1, 0x6800, 0xa005, 0x00c0, 0x44cf, 0x6052, 0x604e,
++ 0xad05, 0x127f, 0x007c, 0x604c, 0xa06d, 0x0040, 0x44de, 0x6800,
++ 0xa005, 0x00c0, 0x44dc, 0x6052, 0x604e, 0xad05, 0x007c, 0x6803,
++ 0x0000, 0x6084, 0xa00d, 0x0040, 0x44e9, 0x2d00, 0x200a, 0x6086,
++ 0x007c, 0x2d00, 0x6086, 0x6082, 0x0078, 0x44e8, 0x127e, 0x0c7e,
++ 0x027e, 0x2091, 0x8000, 0x6218, 0x2260, 0x6200, 0xa005, 0x0040,
++ 0x44fc, 0xc285, 0x0078, 0x44fd, 0xc284, 0x6202, 0x027f, 0x0c7f,
++ 0x127f, 0x007c, 0x127e, 0x0c7e, 0x2091, 0x8000, 0x6218, 0x2260,
++ 0x6204, 0x007e, 0xa086, 0x0006, 0x00c0, 0x4521, 0x609c, 0xd0ac,
++ 0x0040, 0x4521, 0x2001, 0xa653, 0x2004, 0xd0a4, 0x0040, 0x4521,
++ 0xa284, 0xff00, 0x8007, 0xa086, 0x0007, 0x00c0, 0x4521, 0x2011,
++ 0x0600, 0x007f, 0xa294, 0xff00, 0xa215, 0x6206, 0x007e, 0xa086,
++ 0x0006, 0x00c0, 0x4531, 0x6290, 0x82ff, 0x00c0, 0x4531, 0x1078,
++ 0x1332, 0x007f, 0x0c7f, 0x127f, 0x007c, 0x127e, 0x0c7e, 0x2091,
++ 0x8000, 0x6218, 0x2260, 0x6204, 0x007e, 0xa086, 0x0006, 0x00c0,
++ 0x4553, 0x609c, 0xd0a4, 0x0040, 0x4553, 0x2001, 0xa653, 0x2004,
++ 0xd0ac, 0x00c0, 0x4553, 0xa284, 0x00ff, 0xa086, 0x0007, 0x00c0,
++ 0x4553, 0x2011, 0x0006, 0x007f, 0xa294, 0x00ff, 0x8007, 0xa215,
++ 0x6206, 0x0c7f, 0x127f, 0x007c, 0x027e, 0xa182, 0x00ff, 0x0048,
++ 0x4565, 0xa085, 0x0001, 0x0078, 0x457d, 0xa190, 0xa735, 0x2204,
++ 0xa065, 0x00c0, 0x457c, 0x017e, 0x0d7e, 0x1078, 0x1370, 0x2d60,
++ 0x0d7f, 0x017f, 0x0040, 0x4561, 0x2c00, 0x2012, 0x60a7, 0x0000,
++ 0x60ab, 0x0000, 0x1078, 0x42f8, 0xa006, 0x027f, 0x007c, 0x127e,
++ 0x2091, 0x8000, 0x027e, 0xa182, 0x00ff, 0x0048, 0x458b, 0xa085,
++ 0x0001, 0x0078, 0x45c1, 0x0d7e, 0xa190, 0xa735, 0x2204, 0xa06d,
++ 0x0040, 0x45bf, 0x2013, 0x0000, 0x0d7e, 0x0c7e, 0x2d60, 0x60a4,
++ 0xa06d, 0x0040, 0x459d, 0x1078, 0x13a4, 0x60a8, 0xa06d, 0x0040,
++ 0x45a3, 0x1078, 0x13a4, 0x0c7f, 0x0d7f, 0x0d7e, 0x0c7e, 0x68ac,
++ 0x2060, 0x8cff, 0x0040, 0x45bb, 0x600c, 0x007e, 0x6010, 0x2068,
++ 0x1078, 0x8d06, 0x0040, 0x45b6, 0x1078, 0x13b4, 0x1078, 0x772d,
++ 0x0c7f, 0x0078, 0x45a9, 0x0c7f, 0x0d7f, 0x1078, 0x13a4, 0x0d7f,
++ 0xa006, 0x027f, 0x127f, 0x007c, 0x017e, 0xa182, 0x00ff, 0x0048,
++ 0x45cd, 0xa085, 0x0001, 0x0078, 0x45d4, 0xa188, 0xa735, 0x2104,
++ 0xa065, 0x0040, 0x45c9, 0xa006, 0x017f, 0x007c, 0x0d7e, 0x157e,
++ 0x137e, 0x147e, 0x600b, 0x0000, 0x600f, 0x0000, 0x6000, 0xc08c,
++ 0x6002, 0x2069, 0xab8e, 0x6808, 0x605e, 0x6810, 0x6062, 0x6138,
++ 0xa10a, 0x0048, 0x45ec, 0x603a, 0x6814, 0x6066, 0x2099, 0xab96,
++ 0xac88, 0x000a, 0x21a0, 0x20a9, 0x0004, 0x53a3, 0x2099, 0xab9a,
++ 0xac88, 0x0006, 0x21a0, 0x20a9, 0x0004, 0x53a3, 0x2069, 0xabae,
++ 0x6808, 0x606a, 0x690c, 0x616e, 0x6810, 0x6072, 0x6818, 0x6076,
++ 0x60a0, 0xa086, 0x007e, 0x00c0, 0x4611, 0x2069, 0xab8e, 0x690c,
++ 0x616e, 0xa182, 0x0211, 0x00c8, 0x4619, 0x2009, 0x0008, 0x0078,
++ 0x4643, 0xa182, 0x0259, 0x00c8, 0x4621, 0x2009, 0x0007, 0x0078,
++ 0x4643, 0xa182, 0x02c1, 0x00c8, 0x4629, 0x2009, 0x0006, 0x0078,
++ 0x4643, 0xa182, 0x0349, 0x00c8, 0x4631, 0x2009, 0x0005, 0x0078,
++ 0x4643, 0xa182, 0x0421, 0x00c8, 0x4639, 0x2009, 0x0004, 0x0078,
++ 0x4643, 0xa182, 0x0581, 0x00c8, 0x4641, 0x2009, 0x0003, 0x0078,
++ 0x4643, 0x2009, 0x0002, 0x6192, 0x147f, 0x137f, 0x157f, 0x0d7f,
++ 0x007c, 0x017e, 0x027e, 0x0e7e, 0x2071, 0xab8d, 0x2e04, 0x6896,
++ 0x2071, 0xab8e, 0x7004, 0x689a, 0x701c, 0x689e, 0x6a00, 0x2009,
++ 0xa672, 0x210c, 0xd0bc, 0x0040, 0x4663, 0xd1ec, 0x0040, 0x4663,
++ 0xc2ad, 0x0078, 0x4664, 0xc2ac, 0xd0c4, 0x0040, 0x466d, 0xd1e4,
++ 0x0040, 0x466d, 0xc2bd, 0x0078, 0x466e, 0xc2bc, 0x6a02, 0x0e7f,
++ 0x027f, 0x017f, 0x007c, 0x0d7e, 0x127e, 0x2091, 0x8000, 0x60a4,
++ 0xa06d, 0x0040, 0x4697, 0x6900, 0x81ff, 0x00c0, 0x46ab, 0x6a04,
++ 0xa282, 0x0010, 0x00c8, 0x46b0, 0xad88, 0x0004, 0x20a9, 0x0010,
++ 0x2104, 0xa086, 0xffff, 0x0040, 0x4692, 0x8108, 0x00f0, 0x4688,
++ 0x1078, 0x1332, 0x260a, 0x8210, 0x6a06, 0x0078, 0x46ab, 0x1078,
++ 0x138b, 0x0040, 0x46b0, 0x2d00, 0x60a6, 0x6803, 0x0000, 0xad88,
++ 0x0004, 0x20a9, 0x0010, 0x200b, 0xffff, 0x8108, 0x00f0, 0x46a3,
++ 0x6807, 0x0001, 0x6e12, 0xa085, 0x0001, 0x127f, 0x0d7f, 0x007c,
++ 0xa006, 0x0078, 0x46ad, 0x127e, 0x2091, 0x8000, 0x0d7e, 0x60a4,
++ 0xa00d, 0x0040, 0x46d3, 0x2168, 0x6800, 0xa005, 0x00c0, 0x46cf,
++ 0x1078, 0x4817, 0x00c0, 0x46d3, 0x200b, 0xffff, 0x6804, 0xa08a,
++ 0x0002, 0x0048, 0x46cf, 0x8001, 0x6806, 0x0078, 0x46d3, 0x1078,
++ 0x13a4, 0x60a7, 0x0000, 0x0d7f, 0x127f, 0x007c, 0x127e, 0x2091,
++ 0x8000, 0x1078, 0x487f, 0x0078, 0x46df, 0x1078, 0x4484, 0x1078,
++ 0x4775, 0x00c0, 0x46dd, 0x1078, 0x472f, 0x127f, 0x007c, 0x0d7e,
++ 0x127e, 0x2091, 0x8000, 0x60a8, 0xa06d, 0x0040, 0x470b, 0x6950,
++ 0x81ff, 0x00c0, 0x471f, 0x6a54, 0xa282, 0x0010, 0x00c8, 0x472c,
++ 0xad88, 0x0018, 0x20a9, 0x0010, 0x2104, 0xa086, 0xffff, 0x0040,
++ 0x4706, 0x8108, 0x00f0, 0x46fc, 0x1078, 0x1332, 0x260a, 0x8210,
++ 0x6a56, 0x0078, 0x471f, 0x1078, 0x138b, 0x0040, 0x472c, 0x2d00,
++ 0x60aa, 0x6853, 0x0000, 0xad88, 0x0018, 0x20a9, 0x0010, 0x200b,
++ 0xffff, 0x8108, 0x00f0, 0x4717, 0x6857, 0x0001, 0x6e62, 0x0078,
++ 0x4723, 0x1078, 0x44df, 0x1078, 0x4739, 0x00c0, 0x4721, 0xa085,
++ 0x0001, 0x127f, 0x0d7f, 0x007c, 0xa006, 0x0078, 0x4729, 0x127e,
++ 0x2091, 0x8000, 0x1078, 0x5da9, 0x127f, 0x007c, 0xa01e, 0x0078,
++ 0x473b, 0x2019, 0x0001, 0xa00e, 0x127e, 0x2091, 0x8000, 0x604c,
++ 0x2068, 0x6000, 0xd0dc, 0x00c0, 0x4759, 0x8dff, 0x0040, 0x4770,
++ 0x83ff, 0x0040, 0x4751, 0x6848, 0xa606, 0x0040, 0x475e, 0x0078,
++ 0x4759, 0x683c, 0xa406, 0x00c0, 0x4759, 0x6840, 0xa506, 0x0040,
++ 0x475e, 0x2d08, 0x6800, 0x2068, 0x0078, 0x4745, 0x1078, 0x7233,
++ 0x6a00, 0x604c, 0xad06, 0x00c0, 0x4768, 0x624e, 0x0078, 0x476b,
++ 0xa180, 0x0000, 0x2202, 0x82ff, 0x00c0, 0x4770, 0x6152, 0x8dff,
++ 0x127f, 0x007c, 0xa01e, 0x0078, 0x4777, 0x2019, 0x0001, 0xa00e,
++ 0x6080, 0x2068, 0x8dff, 0x0040, 0x47a3, 0x83ff, 0x0040, 0x4786,
++ 0x6848, 0xa606, 0x0040, 0x4793, 0x0078, 0x478e, 0x683c, 0xa406,
++ 0x00c0, 0x478e, 0x6840, 0xa506, 0x0040, 0x4793, 0x2d08, 0x6800,
++ 0x2068, 0x0078, 0x477a, 0x6a00, 0x6080, 0xad06, 0x00c0, 0x479b,
++ 0x6282, 0x0078, 0x479e, 0xa180, 0x0000, 0x2202, 0x82ff, 0x00c0,
++ 0x47a3, 0x6186, 0x8dff, 0x007c, 0xa016, 0x1078, 0x4810, 0x00c0,
++ 0x47ab, 0x2011, 0x0001, 0x1078, 0x4863, 0x00c0, 0x47b1, 0xa295,
++ 0x0002, 0x007c, 0x1078, 0x489b, 0x0040, 0x47ba, 0x1078, 0x8dca,
++ 0x0078, 0x47bc, 0xa085, 0x0001, 0x007c, 0x1078, 0x489b, 0x0040,
++ 0x47c5, 0x1078, 0x8d62, 0x0078, 0x47c7, 0xa085, 0x0001, 0x007c,
++ 0x1078, 0x489b, 0x0040, 0x47d0, 0x1078, 0x8dac, 0x0078, 0x47d2,
++ 0xa085, 0x0001, 0x007c, 0x1078, 0x489b, 0x0040, 0x47db, 0x1078,
++ 0x8d7e, 0x0078, 0x47dd, 0xa085, 0x0001, 0x007c, 0x1078, 0x489b,
++ 0x0040, 0x47e6, 0x1078, 0x8de8, 0x0078, 0x47e8, 0xa085, 0x0001,
++ 0x007c, 0x127e, 0x007e, 0x0d7e, 0x2091, 0x8000, 0x6080, 0xa06d,
++ 0x0040, 0x4808, 0x6800, 0x007e, 0x6837, 0x0103, 0x6b4a, 0x6847,
++ 0x0000, 0x1078, 0x8f7d, 0x007e, 0x6000, 0xd0fc, 0x0040, 0x4802,
++ 0x1078, 0xa4ed, 0x007f, 0x1078, 0x4a73, 0x007f, 0x0078, 0x47ef,
++ 0x6083, 0x0000, 0x6087, 0x0000, 0x0d7f, 0x007f, 0x127f, 0x007c,
++ 0x60a4, 0xa00d, 0x00c0, 0x4817, 0xa085, 0x0001, 0x007c, 0x0e7e,
++ 0x2170, 0x7000, 0xa005, 0x00c0, 0x482c, 0x20a9, 0x0010, 0xae88,
++ 0x0004, 0x2104, 0xa606, 0x0040, 0x482c, 0x8108, 0x00f0, 0x4821,
++ 0xa085, 0x0001, 0x0078, 0x482d, 0xa006, 0x0e7f, 0x007c, 0x0d7e,
++ 0x127e, 0x2091, 0x8000, 0x60a4, 0xa06d, 0x00c0, 0x483d, 0x1078,
++ 0x138b, 0x0040, 0x484f, 0x2d00, 0x60a6, 0x6803, 0x0001, 0x6807,
++ 0x0000, 0xad88, 0x0004, 0x20a9, 0x0010, 0x200b, 0xffff, 0x8108,
++ 0x00f0, 0x4845, 0xa085, 0x0001, 0x127f, 0x0d7f, 0x007c, 0xa006,
++ 0x0078, 0x484c, 0x0d7e, 0x127e, 0x2091, 0x8000, 0x60a4, 0xa06d,
++ 0x0040, 0x4860, 0x60a7, 0x0000, 0x1078, 0x13a4, 0xa085, 0x0001,
++ 0x127f, 0x0d7f, 0x007c, 0x60a8, 0xa00d, 0x00c0, 0x486a, 0xa085,
++ 0x0001, 0x007c, 0x0e7e, 0x2170, 0x7050, 0xa005, 0x00c0, 0x487d,
++ 0x20a9, 0x0010, 0xae88, 0x0018, 0x2104, 0xa606, 0x0040, 0x487d,
++ 0x8108, 0x00f0, 0x4874, 0xa085, 0x0001, 0x0e7f, 0x007c, 0x127e,
++ 0x2091, 0x8000, 0x1078, 0x4863, 0x00c0, 0x4899, 0x200b, 0xffff,
++ 0x0d7e, 0x60a8, 0x2068, 0x6854, 0xa08a, 0x0002, 0x0048, 0x4894,
++ 0x8001, 0x6856, 0x0078, 0x4898, 0x1078, 0x13a4, 0x60ab, 0x0000,
++ 0x0d7f, 0x127f, 0x007c, 0x609c, 0xd0a4, 0x007c, 0x0f7e, 0x71b0,
++ 0x81ff, 0x00c0, 0x48b9, 0x71cc, 0xd19c, 0x0040, 0x48b9, 0x2001,
++ 0x007e, 0xa080, 0xa735, 0x2004, 0xa07d, 0x0040, 0x48b9, 0x7804,
++ 0xa084, 0x00ff, 0xa086, 0x0006, 0x00c0, 0x48b9, 0x7800, 0xc0ed,
++ 0x7802, 0x2079, 0xa652, 0x7804, 0xd0a4, 0x0040, 0x48df, 0x157e,
++ 0x0c7e, 0x20a9, 0x007f, 0x2009, 0x0000, 0x017e, 0x1078, 0x45c4,
++ 0x00c0, 0x48d9, 0x6004, 0xa084, 0xff00, 0x8007, 0xa096, 0x0004,
++ 0x0040, 0x48d6, 0xa086, 0x0006, 0x00c0, 0x48d9, 0x6000, 0xc0ed,
++ 0x6002, 0x017f, 0x8108, 0x00f0, 0x48c5, 0x0c7f, 0x157f, 0x1078,
++ 0x4967, 0x0040, 0x48e8, 0x2001, 0xa8a1, 0x200c, 0x0078, 0x48f0,
++ 0x2079, 0xa652, 0x7804, 0xd0a4, 0x0040, 0x48f4, 0x2009, 0x07d0,
++ 0x2011, 0x48f6, 0x1078, 0x5add, 0x0f7f, 0x007c, 0x2011, 0x48f6,
++ 0x1078, 0x5a45, 0x1078, 0x4967, 0x0040, 0x491e, 0x2001, 0xa7b3,
++ 0x2004, 0xa080, 0x0000, 0x200c, 0xc1ec, 0x2102, 0x2001, 0xa653,
++ 0x2004, 0xd0a4, 0x0040, 0x4912, 0x2009, 0x07d0, 0x2011, 0x48f6,
++ 0x1078, 0x5add, 0x0e7e, 0x2071, 0xa600, 0x706f, 0x0000, 0x7073,
++ 0x0000, 0x1078, 0x2677, 0x0e7f, 0x0078, 0x4956, 0x157e, 0x0c7e,
++ 0x20a9, 0x007f, 0x2009, 0x0000, 0x017e, 0x1078, 0x45c4, 0x00c0,
++ 0x4950, 0x6000, 0xd0ec, 0x0040, 0x4950, 0x047e, 0x62a0, 0xa294,
++ 0x00ff, 0x8227, 0xa006, 0x2009, 0x0029, 0x1078, 0xa21d, 0x6000,
++ 0xc0e5, 0xc0ec, 0x6002, 0x6004, 0xa084, 0x00ff, 0xa085, 0x0700,
++ 0x6006, 0x2019, 0x0029, 0x1078, 0x5f01, 0x077e, 0x2039, 0x0000,
++ 0x1078, 0x5e0a, 0x2009, 0x0000, 0x1078, 0x9f8b, 0x077f, 0x047f,
++ 0x017f, 0x8108, 0x00f0, 0x4924, 0x0c7f, 0x157f, 0x007c, 0x0c7e,
++ 0x6018, 0x2060, 0x6000, 0xc0ec, 0x6002, 0x0c7f, 0x007c, 0x7818,
++ 0x2004, 0xd0ac, 0x007c, 0x7818, 0x2004, 0xd0bc, 0x007c, 0x0f7e,
++ 0x2001, 0xa7b3, 0x2004, 0xa07d, 0x0040, 0x4970, 0x7800, 0xd0ec,
++ 0x0f7f, 0x007c, 0x127e, 0x027e, 0x2091, 0x8000, 0x007e, 0x62a0,
++ 0xa290, 0xa735, 0x2204, 0xac06, 0x10c0, 0x1332, 0x007f, 0x6200,
++ 0xa005, 0x0040, 0x4986, 0xc2fd, 0x0078, 0x4987, 0xc2fc, 0x6202,
++ 0x027f, 0x127f, 0x007c, 0x2011, 0xa633, 0x2204, 0xd0cc, 0x0040,
++ 0x4998, 0x2001, 0xa89f, 0x200c, 0x2011, 0x4999, 0x1078, 0x5add,
++ 0x007c, 0x2011, 0x4999, 0x1078, 0x5a45, 0x2011, 0xa633, 0x2204,
++ 0xc0cc, 0x2012, 0x007c, 0x2071, 0xa714, 0x7003, 0x0001, 0x7007,
++ 0x0000, 0x7013, 0x0000, 0x7017, 0x0000, 0x701b, 0x0000, 0x701f,
++ 0x0000, 0x700b, 0x0000, 0x704b, 0x0001, 0x704f, 0x0000, 0x705b,
++ 0x0020, 0x705f, 0x0040, 0x707f, 0x0000, 0x2071, 0xa87d, 0x7003,
++ 0xa714, 0x7007, 0x0000, 0x700b, 0x0000, 0x700f, 0xa85d, 0x7013,
++ 0x0020, 0x7017, 0x0040, 0x7037, 0x0000, 0x007c, 0x017e, 0x0e7e,
++ 0x2071, 0xa835, 0xa00e, 0x7186, 0x718a, 0x7097, 0x0001, 0x2001,
++ 0xa653, 0x2004, 0xd0fc, 0x00c0, 0x49e8, 0x2001, 0xa653, 0x2004,
++ 0xa00e, 0xd09c, 0x0040, 0x49e5, 0x8108, 0x7102, 0x0078, 0x4a3b,
++ 0x2001, 0xa672, 0x200c, 0xa184, 0x000f, 0x2009, 0xa673, 0x210c,
++ 0x0079, 0x49f2, 0x49dd, 0x4a13, 0x4a1b, 0x4a26, 0x4a2c, 0x49dd,
++ 0x49dd, 0x49dd, 0x4a02, 0x49dd, 0x49dd, 0x49dd, 0x49dd, 0x49dd,
++ 0x49dd, 0x49dd, 0x7003, 0x0004, 0x137e, 0x147e, 0x157e, 0x2099,
++ 0xa676, 0x20a1, 0xa886, 0x20a9, 0x0004, 0x53a3, 0x157f, 0x147f,
++ 0x137f, 0x0078, 0x4a3b, 0x708f, 0x0005, 0x7007, 0x0122, 0x2001,
++ 0x0002, 0x0078, 0x4a21, 0x708f, 0x0002, 0x7007, 0x0121, 0x2001,
++ 0x0003, 0x7002, 0x7097, 0x0001, 0x0078, 0x4a38, 0x7007, 0x0122,
++ 0x2001, 0x0002, 0x0078, 0x4a30, 0x7007, 0x0121, 0x2001, 0x0003,
++ 0x7002, 0xa006, 0x7096, 0x708e, 0xa184, 0xff00, 0x8007, 0x709a,
++ 0xa184, 0x00ff, 0x7092, 0x0e7f, 0x017f, 0x007c, 0x0e7e, 0x2071,
++ 0xa714, 0x684c, 0xa005, 0x00c0, 0x4a4c, 0x7028, 0xc085, 0x702a,
++ 0xa085, 0x0001, 0x0078, 0x4a71, 0x6a60, 0x7236, 0x6b64, 0x733a,
++ 0x6868, 0x703e, 0x7076, 0x686c, 0x7042, 0x707a, 0x684c, 0x702e,
++ 0x6844, 0x7032, 0x2009, 0x000d, 0x200a, 0x700b, 0x0000, 0x8007,
++ 0x8006, 0x8006, 0xa08c, 0x003f, 0xa084, 0xffc0, 0xa210, 0x2100,
++ 0xa319, 0x726e, 0x7372, 0x7028, 0xc084, 0x702a, 0x7007, 0x0001,
++ 0xa006, 0x0e7f, 0x007c, 0x0e7e, 0x027e, 0x6838, 0xd0fc, 0x00c0,
++ 0x4ac9, 0x6804, 0xa00d, 0x0040, 0x4a8f, 0x0d7e, 0x2071, 0xa600,
++ 0xa016, 0x702c, 0x2168, 0x6904, 0x206a, 0x8210, 0x2d00, 0x81ff,
++ 0x00c0, 0x4a82, 0x702e, 0x70ac, 0xa200, 0x70ae, 0x0d7f, 0x2071,
++ 0xa714, 0x701c, 0xa005, 0x00c0, 0x4adb, 0x0068, 0x4ad9, 0x2071,
++ 0xa835, 0x7200, 0x82ff, 0x0040, 0x4ad9, 0x6934, 0xa186, 0x0103,
++ 0x00c0, 0x4aec, 0x6948, 0x6844, 0xa105, 0x00c0, 0x4acc, 0x2009,
++ 0x8020, 0x2200, 0x0079, 0x4aac, 0x4ad9, 0x4ab1, 0x4b09, 0x4b17,
++ 0x4ad9, 0x2071, 0x0000, 0x7018, 0xd084, 0x00c0, 0x4ad9, 0x7122,
++ 0x683c, 0x7026, 0x6840, 0x702a, 0x701b, 0x0001, 0x2091, 0x4080,
++ 0x2071, 0xa600, 0x702c, 0x206a, 0x2d00, 0x702e, 0x70ac, 0x8000,
++ 0x70ae, 0x027f, 0x0e7f, 0x007c, 0x6844, 0xa086, 0x0100, 0x00c0,
++ 0x4ad9, 0x6868, 0xa005, 0x00c0, 0x4ad9, 0x2009, 0x8020, 0x0078,
++ 0x4aa9, 0x2071, 0xa714, 0x2d08, 0x206b, 0x0000, 0x7010, 0x8000,
++ 0x7012, 0x7018, 0xa06d, 0x711a, 0x0040, 0x4ae9, 0x6902, 0x0078,
++ 0x4aea, 0x711e, 0x0078, 0x4ac9, 0xa18c, 0x00ff, 0xa186, 0x0017,
++ 0x0040, 0x4afa, 0xa186, 0x001e, 0x0040, 0x4afa, 0xa18e, 0x001f,
++ 0x00c0, 0x4ad9, 0x684c, 0xd0cc, 0x0040, 0x4ad9, 0x6850, 0xa084,
++ 0x00ff, 0xa086, 0x0001, 0x00c0, 0x4ad9, 0x2009, 0x8021, 0x0078,
++ 0x4aa9, 0x7084, 0x8008, 0xa092, 0x001e, 0x00c8, 0x4ad9, 0x7186,
++ 0xae90, 0x0003, 0xa210, 0x683c, 0x2012, 0x0078, 0x4b27, 0x7084,
++ 0x8008, 0xa092, 0x000f, 0x00c8, 0x4ad9, 0x7186, 0xae90, 0x0003,
++ 0x8003, 0xa210, 0x683c, 0x2012, 0x8210, 0x6840, 0x2012, 0x7088,
++ 0xa10a, 0x0048, 0x4ac0, 0x718c, 0x7084, 0xa10a, 0x0048, 0x4ac0,
++ 0x2071, 0x0000, 0x7018, 0xd084, 0x00c0, 0x4ac0, 0x2071, 0xa835,
++ 0x7000, 0xa086, 0x0002, 0x00c0, 0x4b47, 0x1078, 0x4dc3, 0x2071,
++ 0x0000, 0x701b, 0x0001, 0x2091, 0x4080, 0x0078, 0x4ac0, 0x1078,
++ 0x4dee, 0x2071, 0x0000, 0x701b, 0x0001, 0x2091, 0x4080, 0x0078,
++ 0x4ac0, 0x007e, 0x684c, 0x007e, 0x6837, 0x0103, 0x20a9, 0x001c,
++ 0xad80, 0x0011, 0x20a0, 0x2001, 0x0000, 0x40a4, 0x007f, 0xa084,
++ 0x00ff, 0x684e, 0x007f, 0x684a, 0x6952, 0x007c, 0x2071, 0xa714,
++ 0x7004, 0x0079, 0x4b6b, 0x4b75, 0x4b86, 0x4d94, 0x4d95, 0x4dbc,
++ 0x4dc2, 0x4b76, 0x4d82, 0x4d23, 0x4da5, 0x007c, 0x127e, 0x2091,
++ 0x8000, 0x0068, 0x4b85, 0x2009, 0x000d, 0x7030, 0x200a, 0x2091,
++ 0x4080, 0x7007, 0x0001, 0x700b, 0x0000, 0x127f, 0x2069, 0xa8c4,
++ 0x6844, 0xa005, 0x0050, 0x4bae, 0x00c0, 0x4bae, 0x127e, 0x2091,
++ 0x8000, 0x2069, 0x0000, 0x6934, 0x2001, 0xa720, 0x2004, 0xa10a,
++ 0x0040, 0x4ba9, 0x0068, 0x4bad, 0x2069, 0x0000, 0x6818, 0xd084,
++ 0x00c0, 0x4bad, 0x2009, 0x8040, 0x6922, 0x681b, 0x0001, 0x2091,
++ 0x4080, 0x2069, 0xa8c4, 0x6847, 0xffff, 0x127f, 0x2069, 0xa600,
++ 0x6848, 0x6964, 0xa102, 0x2069, 0xa835, 0x688a, 0x6984, 0x701c,
++ 0xa06d, 0x0040, 0x4bc0, 0x81ff, 0x0040, 0x4c08, 0x0078, 0x4bd6,
++ 0x81ff, 0x0040, 0x4cda, 0x2071, 0xa835, 0x7184, 0x7088, 0xa10a,
++ 0x00c8, 0x4bd6, 0x7190, 0x2071, 0xa8c4, 0x7040, 0xa005, 0x0040,
++ 0x4bd6, 0x00d0, 0x4cda, 0x7142, 0x0078, 0x4cda, 0x2071, 0xa835,
++ 0x718c, 0x127e, 0x2091, 0x8000, 0x7084, 0xa10a, 0x0048, 0x4cf7,
++ 0x0068, 0x4c8c, 0x2071, 0x0000, 0x7018, 0xd084, 0x00c0, 0x4c8c,
++ 0x2001, 0xffff, 0x2071, 0xa8c4, 0x7042, 0x2071, 0xa835, 0x7000,
++ 0xa086, 0x0002, 0x00c0, 0x4bfe, 0x1078, 0x4dc3, 0x2071, 0x0000,
++ 0x701b, 0x0001, 0x2091, 0x4080, 0x0078, 0x4c8c, 0x1078, 0x4dee,
++ 0x2071, 0x0000, 0x701b, 0x0001, 0x2091, 0x4080, 0x0078, 0x4c8c,
++ 0x2071, 0xa835, 0x7000, 0xa005, 0x0040, 0x4cb9, 0x6934, 0xa186,
++ 0x0103, 0x00c0, 0x4c8f, 0x684c, 0xd0bc, 0x00c0, 0x4cb9, 0x6948,
++ 0x6844, 0xa105, 0x00c0, 0x4cac, 0x2009, 0x8020, 0x2071, 0xa835,
++ 0x7000, 0x0079, 0x4c23, 0x4cb9, 0x4c71, 0x4c49, 0x4c5b, 0x4c28,
++ 0x137e, 0x147e, 0x157e, 0x2099, 0xa676, 0x20a1, 0xa886, 0x20a9,
++ 0x0004, 0x53a3, 0x157f, 0x147f, 0x137f, 0x2071, 0xa87d, 0xad80,
++ 0x000f, 0x700e, 0x7013, 0x0002, 0x7007, 0x0002, 0x700b, 0x0000,
++ 0x2e10, 0x1078, 0x13db, 0x2071, 0xa714, 0x7007, 0x0009, 0x0078,
++ 0x4cda, 0x7084, 0x8008, 0xa092, 0x001e, 0x00c8, 0x4cda, 0xae90,
++ 0x0003, 0xa210, 0x683c, 0x2012, 0x7186, 0x2071, 0xa714, 0x1078,
++ 0x4e4c, 0x0078, 0x4cda, 0x7084, 0x8008, 0xa092, 0x000f, 0x00c8,
++ 0x4cda, 0xae90, 0x0003, 0x8003, 0xa210, 0x683c, 0x2012, 0x8210,
++ 0x6840, 0x2012, 0x7186, 0x2071, 0xa714, 0x1078, 0x4e4c, 0x0078,
++ 0x4cda, 0x127e, 0x2091, 0x8000, 0x0068, 0x4c8c, 0x2071, 0x0000,
++ 0x7018, 0xd084, 0x00c0, 0x4c8c, 0x7122, 0x683c, 0x7026, 0x6840,
++ 0x702a, 0x701b, 0x0001, 0x2091, 0x4080, 0x127f, 0x2071, 0xa714,
++ 0x1078, 0x4e4c, 0x0078, 0x4cda, 0x127f, 0x0078, 0x4cda, 0xa18c,
++ 0x00ff, 0xa186, 0x0017, 0x0040, 0x4c9d, 0xa186, 0x001e, 0x0040,
++ 0x4c9d, 0xa18e, 0x001f, 0x00c0, 0x4cb9, 0x684c, 0xd0cc, 0x0040,
++ 0x4cb9, 0x6850, 0xa084, 0x00ff, 0xa086, 0x0001, 0x00c0, 0x4cb9,
++ 0x2009, 0x8021, 0x0078, 0x4c1e, 0x6844, 0xa086, 0x0100, 0x00c0,
++ 0x4cb9, 0x6868, 0xa005, 0x00c0, 0x4cb9, 0x2009, 0x8020, 0x0078,
++ 0x4c1e, 0x2071, 0xa714, 0x1078, 0x4e60, 0x0040, 0x4cda, 0x2071,
++ 0xa714, 0x700f, 0x0001, 0x6934, 0xa184, 0x00ff, 0xa086, 0x0003,
++ 0x00c0, 0x4cd1, 0x810f, 0xa18c, 0x00ff, 0x8101, 0x0040, 0x4cd1,
++ 0x710e, 0x7007, 0x0003, 0x1078, 0x4e80, 0x7050, 0xa086, 0x0100,
++ 0x0040, 0x4d95, 0x127e, 0x2091, 0x8000, 0x2071, 0xa714, 0x7008,
++ 0xa086, 0x0001, 0x00c0, 0x4cf5, 0x0068, 0x4cf5, 0x2009, 0x000d,
++ 0x7030, 0x200a, 0x2091, 0x4080, 0x700b, 0x0000, 0x7004, 0xa086,
++ 0x0006, 0x00c0, 0x4cf5, 0x7007, 0x0001, 0x127f, 0x007c, 0x2071,
++ 0xa714, 0x1078, 0x4e60, 0x0040, 0x4d20, 0x2071, 0xa835, 0x7084,
++ 0x700a, 0x20a9, 0x0020, 0x2099, 0xa836, 0x20a1, 0xa85d, 0x53a3,
++ 0x7087, 0x0000, 0x2071, 0xa714, 0x2069, 0xa87d, 0x706c, 0x6826,
++ 0x7070, 0x682a, 0x7074, 0x682e, 0x7078, 0x6832, 0x2d10, 0x1078,
++ 0x13db, 0x7007, 0x0008, 0x2001, 0xffff, 0x2071, 0xa8c4, 0x7042,
++ 0x127f, 0x0078, 0x4cda, 0x2069, 0xa87d, 0x6808, 0xa08e, 0x0000,
++ 0x0040, 0x4d81, 0xa08e, 0x0200, 0x0040, 0x4d7f, 0xa08e, 0x0100,
++ 0x00c0, 0x4d81, 0x127e, 0x2091, 0x8000, 0x0068, 0x4d7c, 0x2069,
++ 0x0000, 0x6818, 0xd084, 0x00c0, 0x4d7c, 0x702c, 0x7130, 0x8108,
++ 0xa102, 0x0048, 0x4d4a, 0xa00e, 0x7034, 0x706e, 0x7038, 0x7072,
++ 0x0078, 0x4d54, 0x706c, 0xa080, 0x0040, 0x706e, 0x00c8, 0x4d54,
++ 0x7070, 0xa081, 0x0000, 0x7072, 0x7132, 0x6936, 0x700b, 0x0000,
++ 0x2001, 0xa85a, 0x2004, 0xa005, 0x00c0, 0x4d73, 0x6934, 0x2069,
++ 0xa835, 0x689c, 0x699e, 0x2069, 0xa8c4, 0xa102, 0x00c0, 0x4d6c,
++ 0x6844, 0xa005, 0x00d0, 0x4d7a, 0x2001, 0xa85b, 0x200c, 0x810d,
++ 0x6946, 0x0078, 0x4d7a, 0x2009, 0x8040, 0x6922, 0x681b, 0x0001,
++ 0x2091, 0x4080, 0x7007, 0x0001, 0x127f, 0x0078, 0x4d81, 0x7007,
++ 0x0005, 0x007c, 0x701c, 0xa06d, 0x0040, 0x4d93, 0x1078, 0x4e60,
++ 0x0040, 0x4d93, 0x7007, 0x0003, 0x1078, 0x4e80, 0x7050, 0xa086,
++ 0x0100, 0x0040, 0x4d95, 0x007c, 0x007c, 0x7050, 0xa09e, 0x0100,
++ 0x00c0, 0x4d9e, 0x7007, 0x0004, 0x0078, 0x4dbc, 0xa086, 0x0200,
++ 0x00c0, 0x4da4, 0x7007, 0x0005, 0x007c, 0x2001, 0xa87f, 0x2004,
++ 0xa08e, 0x0100, 0x00c0, 0x4db1, 0x7007, 0x0001, 0x1078, 0x4e4c,
++ 0x007c, 0xa08e, 0x0000, 0x0040, 0x4db0, 0xa08e, 0x0200, 0x00c0,
++ 0x4db0, 0x7007, 0x0005, 0x007c, 0x1078, 0x4e16, 0x7006, 0x1078,
++ 0x4e4c, 0x007c, 0x007c, 0x0e7e, 0x157e, 0x2071, 0xa835, 0x7184,
++ 0x81ff, 0x0040, 0x4deb, 0xa006, 0x7086, 0xae80, 0x0003, 0x2071,
++ 0x0000, 0x21a8, 0x2014, 0x7226, 0x8000, 0x0070, 0x4de8, 0x2014,
++ 0x722a, 0x8000, 0x0070, 0x4de8, 0x2014, 0x722e, 0x8000, 0x0070,
++ 0x4de8, 0x2014, 0x723a, 0x8000, 0x0070, 0x4de8, 0x2014, 0x723e,
++ 0xa180, 0x8030, 0x7022, 0x157f, 0x0e7f, 0x007c, 0x0e7e, 0x157e,
++ 0x2071, 0xa835, 0x7184, 0x81ff, 0x0040, 0x4e13, 0xa006, 0x7086,
++ 0xae80, 0x0003, 0x2071, 0x0000, 0x21a8, 0x2014, 0x7226, 0x8000,
++ 0x2014, 0x722a, 0x8000, 0x0070, 0x4e0c, 0x2014, 0x723a, 0x8000,
++ 0x2014, 0x723e, 0x0078, 0x4e10, 0x2001, 0x8020, 0x0078, 0x4e12,
++ 0x2001, 0x8042, 0x7022, 0x157f, 0x0e7f, 0x007c, 0x702c, 0x7130,
++ 0x8108, 0xa102, 0x0048, 0x4e23, 0xa00e, 0x7034, 0x706e, 0x7038,
++ 0x7072, 0x0078, 0x4e2d, 0x706c, 0xa080, 0x0040, 0x706e, 0x00c8,
++ 0x4e2d, 0x7070, 0xa081, 0x0000, 0x7072, 0x7132, 0x700c, 0x8001,
++ 0x700e, 0x00c0, 0x4e43, 0x127e, 0x2091, 0x8000, 0x0068, 0x4e46,
++ 0x2001, 0x000d, 0x2102, 0x2091, 0x4080, 0x2001, 0x0001, 0x700b,
++ 0x0000, 0x127f, 0x007c, 0x2001, 0x0007, 0x007c, 0x2001, 0x0006,
++ 0x700b, 0x0001, 0x127f, 0x007c, 0x701c, 0xa06d, 0x0040, 0x4e5f,
++ 0x127e, 0x2091, 0x8000, 0x7010, 0x8001, 0x7012, 0x2d04, 0x701e,
++ 0xa005, 0x00c0, 0x4e5c, 0x701a, 0x127f, 0x1078, 0x13a4, 0x007c,
++ 0x2019, 0x000d, 0x2304, 0x230c, 0xa10e, 0x0040, 0x4e6f, 0x2304,
++ 0x230c, 0xa10e, 0x0040, 0x4e6f, 0xa006, 0x0078, 0x4e7f, 0x732c,
++ 0x8319, 0x7130, 0xa102, 0x00c0, 0x4e79, 0x2300, 0xa005, 0x0078,
++ 0x4e7f, 0x0048, 0x4e7e, 0xa302, 0x0078, 0x4e7f, 0x8002, 0x007c,
++ 0x2d00, 0x7026, 0xa080, 0x000d, 0x7056, 0x7053, 0x0000, 0x127e,
++ 0x2091, 0x8000, 0x2009, 0xa8d6, 0x2104, 0xc08d, 0x200a, 0x127f,
++ 0x1078, 0x13f9, 0x007c, 0x2071, 0xa6e2, 0x7003, 0x0000, 0x7007,
++ 0x0000, 0x700f, 0x0000, 0x702b, 0x0001, 0x704f, 0x0000, 0x7053,
++ 0x0001, 0x705f, 0x0020, 0x7063, 0x0040, 0x7083, 0x0000, 0x708b,
++ 0x0000, 0x708f, 0x0001, 0x70bf, 0x0000, 0x007c, 0x0e7e, 0x2071,
++ 0xa6e2, 0x6848, 0xa005, 0x00c0, 0x4ebc, 0x7028, 0xc085, 0x702a,
++ 0xa085, 0x0001, 0x0078, 0x4ee1, 0x6a50, 0x7236, 0x6b54, 0x733a,
++ 0x6858, 0x703e, 0x707a, 0x685c, 0x7042, 0x707e, 0x6848, 0x702e,
++ 0x6840, 0x7032, 0x2009, 0x000c, 0x200a, 0x8007, 0x8006, 0x8006,
++ 0xa08c, 0x003f, 0xa084, 0xffc0, 0xa210, 0x2100, 0xa319, 0x7272,
++ 0x7376, 0x7028, 0xc084, 0x702a, 0x7007, 0x0001, 0x700f, 0x0000,
++ 0xa006, 0x0e7f, 0x007c, 0x2b78, 0x2071, 0xa6e2, 0x7004, 0x1079,
++ 0x4f41, 0x700c, 0x0079, 0x4eec, 0x4ef1, 0x4ee6, 0x4ee6, 0x4ee6,
++ 0x4ee6, 0x007c, 0x700c, 0x0079, 0x4ef5, 0x4efa, 0x4f3f, 0x4f3f,
++ 0x4f40, 0x4f40, 0x7830, 0x7930, 0xa106, 0x0040, 0x4f04, 0x7830,
++ 0x7930, 0xa106, 0x00c0, 0x4f2a, 0x7030, 0xa10a, 0x0040, 0x4f2a,
++ 0x00c8, 0x4f0c, 0x712c, 0xa10a, 0xa18a, 0x0002, 0x00c8, 0x4f2b,
++ 0x1078, 0x1370, 0x0040, 0x4f2a, 0x2d00, 0x705a, 0x7063, 0x0040,
++ 0x2001, 0x0003, 0x7057, 0x0000, 0x127e, 0x007e, 0x2091, 0x8000,
++ 0x2009, 0xa8d6, 0x2104, 0xc085, 0x200a, 0x007f, 0x700e, 0x127f,
++ 0x1078, 0x13f9, 0x007c, 0x1078, 0x1370, 0x0040, 0x4f2a, 0x2d00,
++ 0x705a, 0x1078, 0x1370, 0x00c0, 0x4f37, 0x0078, 0x4f16, 0x2d00,
++ 0x7086, 0x7063, 0x0080, 0x2001, 0x0004, 0x0078, 0x4f1a, 0x007c,
++ 0x007c, 0x4f52, 0x4f53, 0x4f8a, 0x4f8b, 0x4f3f, 0x4fc1, 0x4fc6,
++ 0x4ffd, 0x4ffe, 0x5019, 0x501a, 0x501b, 0x501c, 0x501d, 0x501e,
++ 0x509e, 0x50c8, 0x007c, 0x700c, 0x0079, 0x4f56, 0x4f5b, 0x4f5e,
++ 0x4f6e, 0x4f89, 0x4f89, 0x1078, 0x4ef2, 0x007c, 0x127e, 0x8001,
++ 0x700e, 0x7058, 0x007e, 0x1078, 0x5464, 0x0040, 0x4f6b, 0x2091,
++ 0x8000, 0x1078, 0x4ef2, 0x0d7f, 0x0078, 0x4f77, 0x127e, 0x8001,
++ 0x700e, 0x1078, 0x5464, 0x7058, 0x2068, 0x7084, 0x705a, 0x6803,
++ 0x0000, 0x6807, 0x0000, 0x6834, 0xa084, 0x00ff, 0xa08a, 0x0020,
++ 0x00c8, 0x4f86, 0x1079, 0x4fa1, 0x127f, 0x007c, 0x127f, 0x1078,
++ 0x501f, 0x007c, 0x007c, 0x007c, 0x0e7e, 0x2071, 0xa6e2, 0x700c,
++ 0x0079, 0x4f92, 0x4f97, 0x4f97, 0x4f97, 0x4f99, 0x4f9d, 0x0e7f,
++ 0x007c, 0x700f, 0x0001, 0x0078, 0x4f9f, 0x700f, 0x0002, 0x0e7f,
++ 0x007c, 0x501f, 0x501f, 0x503b, 0x501f, 0x5171, 0x501f, 0x501f,
++ 0x501f, 0x501f, 0x501f, 0x503b, 0x51bb, 0x5208, 0x5261, 0x5277,
++ 0x501f, 0x501f, 0x5057, 0x503b, 0x501f, 0x501f, 0x5078, 0x5338,
++ 0x5356, 0x501f, 0x5057, 0x501f, 0x501f, 0x501f, 0x501f, 0x506d,
++ 0x5356, 0x7020, 0x2068, 0x1078, 0x13a4, 0x007c, 0x700c, 0x0079,
++ 0x4fc9, 0x4fce, 0x4fd1, 0x4fe1, 0x4ffc, 0x4ffc, 0x1078, 0x4ef2,
++ 0x007c, 0x127e, 0x8001, 0x700e, 0x7058, 0x007e, 0x1078, 0x5464,
++ 0x0040, 0x4fde, 0x2091, 0x8000, 0x1078, 0x4ef2, 0x0d7f, 0x0078,
++ 0x4fea, 0x127e, 0x8001, 0x700e, 0x1078, 0x5464, 0x7058, 0x2068,
++ 0x7084, 0x705a, 0x6803, 0x0000, 0x6807, 0x0000, 0x6834, 0xa084,
++ 0x00ff, 0xa08a, 0x001a, 0x00c8, 0x4ff9, 0x1079, 0x4fff, 0x127f,
++ 0x007c, 0x127f, 0x1078, 0x501f, 0x007c, 0x007c, 0x007c, 0x501f,
++ 0x503b, 0x515b, 0x501f, 0x503b, 0x501f, 0x503b, 0x503b, 0x501f,
++ 0x503b, 0x515b, 0x503b, 0x503b, 0x503b, 0x503b, 0x503b, 0x501f,
++ 0x503b, 0x515b, 0x501f, 0x501f, 0x503b, 0x501f, 0x501f, 0x501f,
++ 0x503b, 0x007c, 0x007c, 0x007c, 0x007c, 0x007c, 0x007c, 0x7007,
++ 0x0001, 0x6838, 0xa084, 0x00ff, 0xc0d5, 0x683a, 0x127e, 0x2091,
++ 0x8000, 0x1078, 0x4a73, 0x127f, 0x007c, 0x7007, 0x0001, 0x6838,
++ 0xa084, 0x00ff, 0xc0e5, 0x683a, 0x127e, 0x2091, 0x8000, 0x1078,
++ 0x4a73, 0x127f, 0x007c, 0x7007, 0x0001, 0x6838, 0xa084, 0x00ff,
++ 0xc0ed, 0x683a, 0x127e, 0x2091, 0x8000, 0x1078, 0x4a73, 0x127f,
++ 0x007c, 0x7007, 0x0001, 0x6838, 0xa084, 0x00ff, 0xc0dd, 0x683a,
++ 0x127e, 0x2091, 0x8000, 0x1078, 0x4a73, 0x127f, 0x007c, 0x6834,
++ 0x8007, 0xa084, 0x00ff, 0x0040, 0x502d, 0x8001, 0x00c0, 0x5064,
++ 0x7007, 0x0001, 0x0078, 0x513a, 0x7007, 0x0006, 0x7012, 0x2d00,
++ 0x7016, 0x701a, 0x704b, 0x513a, 0x007c, 0x684c, 0xa084, 0x00c0,
++ 0xa086, 0x00c0, 0x00c0, 0x5078, 0x7007, 0x0001, 0x0078, 0x5373,
++ 0x2d00, 0x7016, 0x701a, 0x20a9, 0x0004, 0xa080, 0x0024, 0x2098,
++ 0x20a1, 0xa70d, 0x53a3, 0x6858, 0x7012, 0xa082, 0x0401, 0x00c8,
++ 0x5049, 0x6884, 0xa08a, 0x0002, 0x00c8, 0x5049, 0x82ff, 0x00c0,
++ 0x509a, 0x6888, 0x698c, 0xa105, 0x0040, 0x509a, 0x2001, 0x510a,
++ 0x0078, 0x509d, 0xa280, 0x5100, 0x2004, 0x70c6, 0x7010, 0xa015,
++ 0x0040, 0x50e8, 0x1078, 0x1370, 0x00c0, 0x50a9, 0x7007, 0x000f,
++ 0x007c, 0x2d00, 0x7022, 0x70c4, 0x2060, 0x6000, 0x6836, 0x6004,
++ 0xad00, 0x7096, 0x6008, 0xa20a, 0x00c8, 0x50b8, 0xa00e, 0x2200,
++ 0x7112, 0x620c, 0x8003, 0x800b, 0xa296, 0x0004, 0x0040, 0x50c1,
++ 0xa108, 0x719a, 0x810b, 0x719e, 0xae90, 0x0022, 0x1078, 0x13db,
++ 0x7090, 0xa08e, 0x0100, 0x0040, 0x50dc, 0xa086, 0x0200, 0x0040,
++ 0x50d4, 0x7007, 0x0010, 0x007c, 0x7020, 0x2068, 0x1078, 0x13a4,
++ 0x7014, 0x2068, 0x0078, 0x5049, 0x7020, 0x2068, 0x7018, 0x6802,
++ 0x6807, 0x0000, 0x2d08, 0x2068, 0x6906, 0x711a, 0x0078, 0x509e,
++ 0x7014, 0x2068, 0x7007, 0x0001, 0x6884, 0xa005, 0x00c0, 0x50f7,
++ 0x6888, 0x698c, 0xa105, 0x0040, 0x50f7, 0x1078, 0x510e, 0x6834,
++ 0xa084, 0x00ff, 0xa086, 0x001e, 0x0040, 0x5373, 0x0078, 0x513a,
++ 0x5102, 0x5106, 0x0002, 0x0011, 0x0007, 0x0004, 0x000a, 0x000f,
++ 0x0005, 0x0006, 0x000a, 0x0011, 0x0005, 0x0004, 0x0f7e, 0x0e7e,
++ 0x0c7e, 0x077e, 0x067e, 0x6f88, 0x6e8c, 0x6804, 0x2060, 0xacf0,
++ 0x0021, 0xacf8, 0x0027, 0x2009, 0x0005, 0x700c, 0x7816, 0x7008,
++ 0x7812, 0x7004, 0x7806, 0x7000, 0x7802, 0x7e0e, 0x7f0a, 0x8109,
++ 0x0040, 0x5130, 0xaef2, 0x0004, 0xaffa, 0x0006, 0x0078, 0x511d,
++ 0x6004, 0xa065, 0x00c0, 0x5117, 0x067f, 0x077f, 0x0c7f, 0x0e7f,
++ 0x0f7f, 0x007c, 0x2009, 0xa62f, 0x210c, 0x81ff, 0x00c0, 0x5155,
++ 0x6838, 0xa084, 0x00ff, 0x683a, 0x1078, 0x4353, 0x00c0, 0x5149,
++ 0x007c, 0x1078, 0x4b51, 0x127e, 0x2091, 0x8000, 0x1078, 0x8f7d,
++ 0x1078, 0x4a73, 0x127f, 0x0078, 0x5148, 0x2001, 0x0028, 0x2009,
++ 0x0000, 0x0078, 0x5149, 0x7018, 0x6802, 0x2d08, 0x2068, 0x6906,
++ 0x711a, 0x7010, 0x8001, 0x7012, 0x0040, 0x516a, 0x7007, 0x0006,
++ 0x0078, 0x5170, 0x7014, 0x2068, 0x7007, 0x0001, 0x7048, 0x107a,
++ 0x007c, 0x7007, 0x0001, 0x6944, 0x810f, 0xa18c, 0x00ff, 0x6848,
++ 0xa084, 0x00ff, 0x20a9, 0x0001, 0xa096, 0x0001, 0x0040, 0x519a,
++ 0x2009, 0x0000, 0x20a9, 0x00ff, 0xa096, 0x0002, 0x0040, 0x519a,
++ 0xa005, 0x00c0, 0x51ad, 0x6944, 0x810f, 0xa18c, 0x00ff, 0x1078,
++ 0x45c4, 0x00c0, 0x51ad, 0x067e, 0x6e50, 0x1078, 0x46b3, 0x067f,
++ 0x0078, 0x51ad, 0x047e, 0x2011, 0xa60c, 0x2224, 0xc484, 0xc48c,
++ 0x2412, 0x047f, 0x0c7e, 0x1078, 0x45c4, 0x00c0, 0x51a9, 0x1078,
++ 0x4852, 0x8108, 0x00f0, 0x51a3, 0x0c7f, 0x684c, 0xd084, 0x00c0,
++ 0x51b4, 0x1078, 0x13a4, 0x007c, 0x127e, 0x2091, 0x8000, 0x1078,
++ 0x4a73, 0x127f, 0x007c, 0x127e, 0x2091, 0x8000, 0x7007, 0x0001,
++ 0x2001, 0xa653, 0x2004, 0xd0a4, 0x0040, 0x51ff, 0x2061, 0xa933,
++ 0x6100, 0xd184, 0x0040, 0x51df, 0x6858, 0xa084, 0x00ff, 0x00c0,
++ 0x5202, 0x6000, 0xd084, 0x0040, 0x51ff, 0x6004, 0xa005, 0x00c0,
++ 0x5205, 0x6003, 0x0000, 0x600b, 0x0000, 0x0078, 0x51fc, 0x2011,
++ 0x0001, 0x6860, 0xa005, 0x00c0, 0x51e7, 0x2001, 0x001e, 0x8000,
++ 0x6016, 0x6858, 0xa084, 0x00ff, 0x0040, 0x51ff, 0x6006, 0x6858,
++ 0x8007, 0xa084, 0x00ff, 0x0040, 0x51ff, 0x600a, 0x6858, 0x8000,
++ 0x00c0, 0x51fb, 0xc28d, 0x6202, 0x127f, 0x0078, 0x5453, 0x127f,
++ 0x0078, 0x544b, 0x127f, 0x0078, 0x5443, 0x127f, 0x0078, 0x5447,
++ 0x127e, 0x2091, 0x8000, 0x7007, 0x0001, 0x2001, 0xa653, 0x2004,
++ 0xd0a4, 0x0040, 0x525e, 0x2061, 0xa933, 0x6000, 0xd084, 0x0040,
++ 0x525e, 0x6204, 0x6308, 0xd08c, 0x00c0, 0x5250, 0x6c48, 0xa484,
++ 0x0003, 0x0040, 0x5236, 0x6958, 0xa18c, 0x00ff, 0x8001, 0x00c0,
++ 0x522f, 0x2100, 0xa210, 0x0048, 0x525b, 0x0078, 0x5236, 0x8001,
++ 0x00c0, 0x525b, 0x2100, 0xa212, 0x0048, 0x525b, 0xa484, 0x000c,
++ 0x0040, 0x5250, 0x6958, 0x810f, 0xa18c, 0x00ff, 0xa082, 0x0004,
++ 0x00c0, 0x5248, 0x2100, 0xa318, 0x0048, 0x525b, 0x0078, 0x5250,
++ 0xa082, 0x0004, 0x00c0, 0x525b, 0x2100, 0xa31a, 0x0048, 0x525b,
++ 0x6860, 0xa005, 0x0040, 0x5256, 0x8000, 0x6016, 0x6206, 0x630a,
++ 0x127f, 0x0078, 0x5453, 0x127f, 0x0078, 0x544f, 0x127f, 0x0078,
++ 0x544b, 0x127e, 0x2091, 0x8000, 0x7007, 0x0001, 0x2061, 0xa933,
++ 0x6300, 0xd38c, 0x00c0, 0x5271, 0x6308, 0x8318, 0x0048, 0x5274,
++ 0x630a, 0x127f, 0x0078, 0x5461, 0x127f, 0x0078, 0x544f, 0x127e,
++ 0x0c7e, 0x2091, 0x8000, 0x7007, 0x0001, 0x684c, 0xd0ac, 0x0040,
++ 0x528b, 0x0c7e, 0x2061, 0xa933, 0x6000, 0xa084, 0xfcff, 0x6002,
++ 0x0c7f, 0x0078, 0x52ba, 0x6858, 0xa005, 0x0040, 0x52d1, 0x685c,
++ 0xa065, 0x0040, 0x52cd, 0x2001, 0xa62f, 0x2004, 0xa005, 0x0040,
++ 0x529d, 0x1078, 0x8ec6, 0x0078, 0x52ab, 0x6013, 0x0400, 0x6037,
++ 0x0000, 0x694c, 0xd1a4, 0x0040, 0x52a7, 0x6950, 0x6136, 0x2009,
++ 0x0041, 0x1078, 0x775c, 0x6958, 0xa18c, 0xff00, 0xa186, 0x2000,
++ 0x00c0, 0x52ba, 0x027e, 0x2009, 0x0000, 0x2011, 0xfdff, 0x1078,
++ 0x5bf1, 0x027f, 0x684c, 0xd0c4, 0x0040, 0x52c9, 0x2061, 0xa933,
++ 0x6000, 0xd08c, 0x00c0, 0x52c9, 0x6008, 0x8000, 0x0048, 0x52cd,
++ 0x600a, 0x0c7f, 0x127f, 0x0078, 0x5453, 0x0c7f, 0x127f, 0x0078,
++ 0x544b, 0x6954, 0xa186, 0x0045, 0x0040, 0x5306, 0xa186, 0x002a,
++ 0x00c0, 0x52e1, 0x2001, 0xa60c, 0x200c, 0xc194, 0x2102, 0x0078,
++ 0x52ba, 0xa186, 0x0020, 0x0040, 0x52fa, 0xa186, 0x0029, 0x0040,
++ 0x52ed, 0xa186, 0x002d, 0x00c0, 0x52cd, 0x6944, 0xa18c, 0xff00,
++ 0x810f, 0x1078, 0x45c4, 0x00c0, 0x52ba, 0x6000, 0xc0e4, 0x6002,
++ 0x0078, 0x52ba, 0x685c, 0xa065, 0x0040, 0x52cd, 0x6007, 0x0024,
++ 0x2001, 0xa8a3, 0x2004, 0x6016, 0x0078, 0x52ba, 0x685c, 0xa065,
++ 0x0040, 0x52cd, 0x0e7e, 0x6860, 0xa075, 0x2001, 0xa62f, 0x2004,
++ 0xa005, 0x0040, 0x531e, 0x1078, 0x8ec6, 0x8eff, 0x0040, 0x531b,
++ 0x2e60, 0x1078, 0x8ec6, 0x0e7f, 0x0078, 0x52ba, 0x6024, 0xc0dc,
++ 0xc0d5, 0x6026, 0x2e60, 0x6007, 0x003a, 0x6870, 0xa005, 0x0040,
++ 0x532f, 0x6007, 0x003b, 0x6874, 0x602a, 0x6878, 0x6012, 0x6003,
++ 0x0001, 0x1078, 0x5d8a, 0x1078, 0x62d1, 0x0e7f, 0x0078, 0x52ba,
++ 0x2061, 0xa933, 0x6000, 0xd084, 0x0040, 0x5352, 0xd08c, 0x00c0,
++ 0x5461, 0x2091, 0x8000, 0x6204, 0x8210, 0x0048, 0x534c, 0x6206,
++ 0x2091, 0x8001, 0x0078, 0x5461, 0x2091, 0x8001, 0x6853, 0x0016,
++ 0x0078, 0x545a, 0x6853, 0x0007, 0x0078, 0x545a, 0x6834, 0x8007,
++ 0xa084, 0x00ff, 0x00c0, 0x5360, 0x1078, 0x502d, 0x0078, 0x5372,
++ 0x2030, 0x8001, 0x00c0, 0x536a, 0x7007, 0x0001, 0x1078, 0x5373,
++ 0x0078, 0x5372, 0x7007, 0x0006, 0x7012, 0x2d00, 0x7016, 0x701a,
++ 0x704b, 0x5373, 0x007c, 0x0e7e, 0x127e, 0x2091, 0x8000, 0xa03e,
++ 0x2009, 0xa62f, 0x210c, 0x81ff, 0x00c0, 0x53ff, 0x2009, 0xa60c,
++ 0x210c, 0xd194, 0x00c0, 0x5431, 0x6848, 0x2070, 0xae82, 0xad00,
++ 0x0048, 0x53ef, 0x2001, 0xa616, 0x2004, 0xae02, 0x00c8, 0x53ef,
++ 0x2061, 0xa933, 0x6100, 0xa184, 0x0301, 0xa086, 0x0001, 0x00c0,
++ 0x53d2, 0x711c, 0xa186, 0x0006, 0x00c0, 0x53da, 0x7018, 0xa005,
++ 0x0040, 0x53ff, 0x2004, 0xd0e4, 0x00c0, 0x542b, 0x7024, 0xd0dc,
++ 0x00c0, 0x5435, 0x6853, 0x0000, 0x6803, 0x0000, 0x2d08, 0x7010,
++ 0xa005, 0x00c0, 0x53be, 0x7112, 0x684c, 0xd0f4, 0x00c0, 0x5439,
++ 0x2e60, 0x1078, 0x5b27, 0x127f, 0x0e7f, 0x007c, 0x2068, 0x6800,
++ 0xa005, 0x00c0, 0x53be, 0x6902, 0x2168, 0x684c, 0xd0f4, 0x00c0,
++ 0x5439, 0x127f, 0x0e7f, 0x007c, 0x127f, 0x0e7f, 0x6853, 0x0006,
++ 0x0078, 0x545a, 0xd184, 0x0040, 0x53cc, 0xd1c4, 0x00c0, 0x53f3,
++ 0x0078, 0x53f7, 0x6944, 0xa18c, 0xff00, 0x810f, 0x1078, 0x45c4,
++ 0x00c0, 0x542b, 0x6000, 0xd0e4, 0x00c0, 0x542b, 0x711c, 0xa186,
++ 0x0007, 0x00c0, 0x53ef, 0x6853, 0x0002, 0x0078, 0x542d, 0x6853,
++ 0x0008, 0x0078, 0x542d, 0x6853, 0x000e, 0x0078, 0x542d, 0x6853,
++ 0x0017, 0x0078, 0x542d, 0x6853, 0x0035, 0x0078, 0x542d, 0x2001,
++ 0xa672, 0x2004, 0xd0fc, 0x0040, 0x5427, 0x6848, 0x2070, 0xae82,
++ 0xad00, 0x0048, 0x5427, 0x6058, 0xae02, 0x00c8, 0x5427, 0x711c,
++ 0xa186, 0x0006, 0x00c0, 0x5427, 0x7018, 0xa005, 0x0040, 0x5427,
++ 0x2004, 0xd0bc, 0x0040, 0x5427, 0x2039, 0x0001, 0x7000, 0xa086,
++ 0x0007, 0x00c0, 0x537e, 0x7003, 0x0002, 0x0078, 0x537e, 0x6853,
++ 0x0028, 0x0078, 0x542d, 0x6853, 0x0029, 0x127f, 0x0e7f, 0x0078,
++ 0x545a, 0x6853, 0x002a, 0x0078, 0x542d, 0x6853, 0x0045, 0x0078,
++ 0x542d, 0x2e60, 0x2019, 0x0002, 0x6017, 0x0014, 0x1078, 0x9dc7,
++ 0x127f, 0x0e7f, 0x007c, 0x2009, 0x003e, 0x0078, 0x5455, 0x2009,
++ 0x0004, 0x0078, 0x5455, 0x2009, 0x0006, 0x0078, 0x5455, 0x2009,
++ 0x0016, 0x0078, 0x5455, 0x2009, 0x0001, 0x6854, 0xa084, 0xff00,
++ 0xa105, 0x6856, 0x2091, 0x8000, 0x1078, 0x4a73, 0x2091, 0x8001,
++ 0x007c, 0x1078, 0x13a4, 0x007c, 0x702c, 0x7130, 0x8108, 0xa102,
++ 0x0048, 0x5471, 0xa00e, 0x7034, 0x7072, 0x7038, 0x7076, 0x0078,
++ 0x547d, 0x7070, 0xa080, 0x0040, 0x7072, 0x00c8, 0x547d, 0x7074,
++ 0xa081, 0x0000, 0x7076, 0xa085, 0x0001, 0x7932, 0x7132, 0x007c,
++ 0x0d7e, 0x1078, 0x5b1e, 0x0d7f, 0x007c, 0x0d7e, 0x2011, 0x0004,
++ 0x2204, 0xa085, 0x8002, 0x2012, 0x0d7f, 0x007c, 0x20e1, 0x0002,
++ 0x3d08, 0x20e1, 0x2000, 0x3d00, 0xa084, 0x7000, 0x0040, 0x549c,
++ 0xa086, 0x1000, 0x00c0, 0x54d3, 0x20e1, 0x0000, 0x3d00, 0xa094,
++ 0xff00, 0x8217, 0xa084, 0xf000, 0xa086, 0x3000, 0x00c0, 0x54b7,
++ 0xa184, 0xff00, 0x8007, 0xa086, 0x0008, 0x00c0, 0x54d3, 0x1078,
++ 0x29bb, 0x00c0, 0x54d3, 0x1078, 0x56b2, 0x0078, 0x54ce, 0x20e1,
++ 0x0004, 0x3d60, 0xd1bc, 0x00c0, 0x54be, 0x3e60, 0xac84, 0x000f,
++ 0x00c0, 0x54d3, 0xac82, 0xad00, 0x0048, 0x54d3, 0x6858, 0xac02,
++ 0x00c8, 0x54d3, 0x2009, 0x0047, 0x1078, 0x775c, 0x7a1c, 0xd284,
++ 0x00c0, 0x548e, 0x007c, 0xa016, 0x1078, 0x15fa, 0x0078, 0x54ce,
++ 0x0078, 0x54d3, 0x781c, 0xd08c, 0x0040, 0x5502, 0x157e, 0x137e,
++ 0x147e, 0x20e1, 0x3000, 0x3d20, 0x3e28, 0xa584, 0x0076, 0x00c0,
++ 0x5518, 0xa484, 0x7000, 0xa086, 0x1000, 0x00c0, 0x5507, 0x1078,
++ 0x554e, 0x0040, 0x5518, 0x20e1, 0x3000, 0x7828, 0x7828, 0x1078,
++ 0x556c, 0x147f, 0x137f, 0x157f, 0x2009, 0xa8b9, 0x2104, 0xa005,
++ 0x00c0, 0x5503, 0x007c, 0x1078, 0x62d1, 0x0078, 0x5502, 0xa484,
++ 0x7000, 0x00c0, 0x5518, 0x1078, 0x554e, 0x0040, 0x552c, 0x7000,
++ 0xa084, 0xff00, 0xa086, 0x8100, 0x0040, 0x54f3, 0x0078, 0x552c,
++ 0x1078, 0xa54f, 0xd5a4, 0x0040, 0x5528, 0x047e, 0x1078, 0x1b22,
++ 0x047f, 0x20e1, 0x9010, 0x2001, 0x0138, 0x2202, 0x0078, 0x5530,
++ 0x1078, 0x554e, 0x6883, 0x0000, 0x20e1, 0x3000, 0x7828, 0x7828,
++ 0x1078, 0x5537, 0x147f, 0x137f, 0x157f, 0x0078, 0x5502, 0x2001,
++ 0xa60e, 0x2004, 0xd08c, 0x0040, 0x554d, 0x2001, 0xa600, 0x2004,
++ 0xa086, 0x0003, 0x00c0, 0x554d, 0x027e, 0x037e, 0x2011, 0x8048,
++ 0x2518, 0x1078, 0x361b, 0x037f, 0x027f, 0x007c, 0xa484, 0x01ff,
++ 0x6882, 0xa005, 0x0040, 0x5560, 0xa080, 0x001f, 0xa084, 0x03f8,
++ 0x80ac, 0x20e1, 0x1000, 0x2ea0, 0x2099, 0x020a, 0x53a5, 0x007c,
++ 0x20a9, 0x000c, 0x20e1, 0x1000, 0x2ea0, 0x2099, 0x020a, 0x53a5,
++ 0xa085, 0x0001, 0x0078, 0x555f, 0x7000, 0xa084, 0xff00, 0xa08c,
++ 0xf000, 0x8007, 0xa196, 0x0000, 0x00c0, 0x5579, 0x0078, 0x57ba,
++ 0x007c, 0xa196, 0x2000, 0x00c0, 0x558a, 0x6900, 0xa18e, 0x0001,
++ 0x00c0, 0x5586, 0x1078, 0x3aec, 0x0078, 0x5578, 0x1078, 0x5592,
++ 0x0078, 0x5578, 0xa196, 0x8000, 0x00c0, 0x5578, 0x1078, 0x5871,
++ 0x0078, 0x5578, 0x0c7e, 0x7110, 0xa18c, 0xff00, 0x810f, 0xa196,
++ 0x0001, 0x0040, 0x559f, 0xa196, 0x0023, 0x00c0, 0x56aa, 0xa08e,
++ 0x0023, 0x00c0, 0x55d4, 0x1078, 0x591d, 0x0040, 0x56aa, 0x7124,
++ 0x610a, 0x7030, 0xa08e, 0x0200, 0x00c0, 0x55b8, 0x7034, 0xa005,
++ 0x00c0, 0x56aa, 0x2009, 0x0015, 0x1078, 0x775c, 0x0078, 0x56aa,
++ 0xa08e, 0x0214, 0x0040, 0x55c0, 0xa08e, 0x0210, 0x00c0, 0x55c6,
++ 0x2009, 0x0015, 0x1078, 0x775c, 0x0078, 0x56aa, 0xa08e, 0x0100,
++ 0x00c0, 0x56aa, 0x7034, 0xa005, 0x00c0, 0x56aa, 0x2009, 0x0016,
++ 0x1078, 0x775c, 0x0078, 0x56aa, 0xa08e, 0x0022, 0x00c0, 0x56aa,
++ 0x7030, 0xa08e, 0x0300, 0x00c0, 0x55e5, 0x7034, 0xa005, 0x00c0,
++ 0x56aa, 0x2009, 0x0017, 0x0078, 0x5676, 0xa08e, 0x0500, 0x00c0,
++ 0x55f1, 0x7034, 0xa005, 0x00c0, 0x56aa, 0x2009, 0x0018, 0x0078,
++ 0x5676, 0xa08e, 0x2010, 0x00c0, 0x55f9, 0x2009, 0x0019, 0x0078,
++ 0x5676, 0xa08e, 0x2110, 0x00c0, 0x5601, 0x2009, 0x001a, 0x0078,
++ 0x5676, 0xa08e, 0x5200, 0x00c0, 0x560d, 0x7034, 0xa005, 0x00c0,
++ 0x56aa, 0x2009, 0x001b, 0x0078, 0x5676, 0xa08e, 0x5000, 0x00c0,
++ 0x5619, 0x7034, 0xa005, 0x00c0, 0x56aa, 0x2009, 0x001c, 0x0078,
++ 0x5676, 0xa08e, 0x1300, 0x00c0, 0x5621, 0x2009, 0x0034, 0x0078,
++ 0x5676, 0xa08e, 0x1200, 0x00c0, 0x562d, 0x7034, 0xa005, 0x00c0,
++ 0x56aa, 0x2009, 0x0024, 0x0078, 0x5676, 0xa08c, 0xff00, 0xa18e,
++ 0x2400, 0x00c0, 0x5637, 0x2009, 0x002d, 0x0078, 0x5676, 0xa08c,
++ 0xff00, 0xa18e, 0x5300, 0x00c0, 0x5641, 0x2009, 0x002a, 0x0078,
++ 0x5676, 0xa08e, 0x0f00, 0x00c0, 0x5649, 0x2009, 0x0020, 0x0078,
++ 0x5676, 0xa08e, 0x5300, 0x00c0, 0x564f, 0x0078, 0x566c, 0xa08e,
++ 0x6104, 0x00c0, 0x566c, 0x2011, 0xab8d, 0x8208, 0x2204, 0xa082,
++ 0x0004, 0x20a8, 0x95ac, 0x95ac, 0x2011, 0x8015, 0x211c, 0x8108,
++ 0x047e, 0x2124, 0x1078, 0x361b, 0x047f, 0x8108, 0x00f0, 0x565c,
++ 0x2009, 0x0023, 0x0078, 0x5676, 0xa08e, 0x6000, 0x00c0, 0x5674,
++ 0x2009, 0x003f, 0x0078, 0x5676, 0x2009, 0x001d, 0x017e, 0x2011,
++ 0xab83, 0x2204, 0x8211, 0x220c, 0x1078, 0x254d, 0x00c0, 0x56ac,
++ 0x1078, 0x455c, 0x00c0, 0x56ac, 0x6612, 0x6516, 0x86ff, 0x0040,
++ 0x569c, 0x017f, 0x017e, 0xa186, 0x0017, 0x00c0, 0x569c, 0x686c,
++ 0xa606, 0x00c0, 0x569c, 0x6870, 0xa506, 0xa084, 0xff00, 0x00c0,
++ 0x569c, 0x6000, 0xc0f5, 0x6002, 0x0c7e, 0x1078, 0x76c7, 0x0040,
++ 0x56af, 0x017f, 0x611a, 0x601f, 0x0004, 0x7120, 0x610a, 0x017f,
++ 0x1078, 0x775c, 0x0c7f, 0x007c, 0x017f, 0x0078, 0x56aa, 0x0c7f,
++ 0x0078, 0x56ac, 0x0c7e, 0x1078, 0x570f, 0x00c0, 0x570d, 0xa28e,
++ 0x0033, 0x00c0, 0x56de, 0x1078, 0x591d, 0x0040, 0x570d, 0x7124,
++ 0x610a, 0x7030, 0xa08e, 0x0200, 0x00c0, 0x56d0, 0x7034, 0xa005,
++ 0x00c0, 0x570d, 0x2009, 0x0015, 0x1078, 0x775c, 0x0078, 0x570d,
++ 0xa08e, 0x0100, 0x00c0, 0x570d, 0x7034, 0xa005, 0x00c0, 0x570d,
++ 0x2009, 0x0016, 0x1078, 0x775c, 0x0078, 0x570d, 0xa28e, 0x0032,
++ 0x00c0, 0x570d, 0x7030, 0xa08e, 0x1400, 0x00c0, 0x570d, 0x2009,
++ 0x0038, 0x017e, 0x2011, 0xab83, 0x2204, 0x8211, 0x220c, 0x1078,
++ 0x254d, 0x00c0, 0x570c, 0x1078, 0x455c, 0x00c0, 0x570c, 0x6612,
++ 0x6516, 0x0c7e, 0x1078, 0x76c7, 0x0040, 0x570b, 0x017f, 0x611a,
++ 0x601f, 0x0004, 0x7120, 0x610a, 0x017f, 0x1078, 0x775c, 0x1078,
++ 0x62d1, 0x0078, 0x570d, 0x0c7f, 0x017f, 0x0c7f, 0x007c, 0x0f7e,
++ 0x0d7e, 0x027e, 0x017e, 0x137e, 0x147e, 0x157e, 0x3c00, 0x007e,
++ 0x2079, 0x0030, 0x2069, 0x0200, 0x1078, 0x1c6a, 0x00c0, 0x5750,
++ 0x1078, 0x1b40, 0x0040, 0x575d, 0x7908, 0xa18c, 0x1fff, 0xa182,
++ 0x0011, 0x00c8, 0x575a, 0x20a9, 0x000c, 0x20e1, 0x0000, 0x2ea0,
++ 0x2099, 0x020a, 0x53a5, 0x20e1, 0x2000, 0x2001, 0x020a, 0x2004,
++ 0x7a0c, 0x7808, 0xa080, 0x0007, 0xa084, 0x1ff8, 0xa08a, 0x0140,
++ 0x10c8, 0x1332, 0x80ac, 0x20e1, 0x6000, 0x2099, 0x020a, 0x53a5,
++ 0x20e1, 0x7000, 0x6828, 0x6828, 0x7803, 0x0004, 0xa294, 0x0070,
++ 0x007f, 0x20e0, 0x157f, 0x147f, 0x137f, 0x017f, 0x027f, 0x0d7f,
++ 0x0f7f, 0x007c, 0xa016, 0x1078, 0x15fa, 0xa085, 0x0001, 0x0078,
++ 0x5750, 0x047e, 0x0e7e, 0x0d7e, 0x2028, 0x2130, 0xa696, 0x00ff,
++ 0x00c0, 0x5782, 0xa596, 0xfffd, 0x00c0, 0x5772, 0x2009, 0x007f,
++ 0x0078, 0x57b5, 0xa596, 0xfffe, 0x00c0, 0x577a, 0x2009, 0x007e,
++ 0x0078, 0x57b5, 0xa596, 0xfffc, 0x00c0, 0x5782, 0x2009, 0x0080,
++ 0x0078, 0x57b5, 0x2011, 0x0000, 0x2021, 0x0081, 0x20a9, 0x007e,
++ 0x2071, 0xa7b6, 0x2e1c, 0x83ff, 0x00c0, 0x5794, 0x82ff, 0x00c0,
++ 0x57a9, 0x2410, 0x0078, 0x57a9, 0x2368, 0x6f10, 0x007e, 0x2100,
++ 0xa706, 0x007f, 0x6b14, 0x00c0, 0x57a3, 0xa346, 0x00c0, 0x57a3,
++ 0x2408, 0x0078, 0x57b5, 0x87ff, 0x00c0, 0x57a9, 0x83ff, 0x0040,
++ 0x578e, 0x8420, 0x8e70, 0x00f0, 0x578a, 0x82ff, 0x00c0, 0x57b4,
++ 0xa085, 0x0001, 0x0078, 0x57b6, 0x2208, 0xa006, 0x0d7f, 0x0e7f,
++ 0x047f, 0x007c, 0xa084, 0x0007, 0x0079, 0x57bf, 0x007c, 0x57c7,
++ 0x57c7, 0x57c7, 0x5933, 0x57c7, 0x57c8, 0x57e1, 0x5858, 0x007c,
++ 0x7110, 0xd1bc, 0x0040, 0x57e0, 0x7120, 0x2160, 0xac8c, 0x000f,
++ 0x00c0, 0x57e0, 0xac8a, 0xad00, 0x0048, 0x57e0, 0x6858, 0xac02,
++ 0x00c8, 0x57e0, 0x7124, 0x610a, 0x2009, 0x0046, 0x1078, 0x775c,
++ 0x007c, 0x0c7e, 0xa484, 0x01ff, 0x0040, 0x5833, 0x7110, 0xd1bc,
++ 0x00c0, 0x5833, 0x2011, 0xab83, 0x2204, 0x8211, 0x220c, 0x1078,
++ 0x254d, 0x00c0, 0x5833, 0x1078, 0x455c, 0x00c0, 0x5833, 0x6612,
++ 0x6516, 0x6000, 0xd0ec, 0x00c0, 0x5833, 0x6204, 0xa294, 0xff00,
++ 0x8217, 0xa286, 0x0006, 0x00c0, 0x5818, 0x0c7e, 0x1078, 0x76c7,
++ 0x017f, 0x0040, 0x5835, 0x611a, 0x601f, 0x0006, 0x7120, 0x610a,
++ 0x7130, 0x6122, 0x2009, 0x0044, 0x1078, 0x775c, 0x0078, 0x5833,
++ 0x0c7e, 0x1078, 0x76c7, 0x017f, 0x0040, 0x5833, 0x611a, 0x601f,
++ 0x0004, 0x7120, 0x610a, 0xa286, 0x0004, 0x00c0, 0x582b, 0x6007,
++ 0x0005, 0x0078, 0x582d, 0x6007, 0x0001, 0x6003, 0x0001, 0x1078,
++ 0x5dd7, 0x1078, 0x62d1, 0x0c7f, 0x007c, 0x2001, 0xa60d, 0x2004,
++ 0xd0ec, 0x0040, 0x583f, 0x2011, 0x8049, 0x1078, 0x361b, 0x0c7e,
++ 0x1078, 0x9187, 0x017f, 0x0040, 0x5833, 0x611a, 0x601f, 0x0006,
++ 0x7120, 0x610a, 0x7130, 0x6122, 0x6013, 0x0300, 0x6003, 0x0001,
++ 0x6007, 0x0041, 0x1078, 0x5d8a, 0x1078, 0x62d1, 0x0078, 0x5833,
++ 0x7110, 0xd1bc, 0x0040, 0x5870, 0x7020, 0x2060, 0xac84, 0x000f,
++ 0x00c0, 0x5870, 0xac82, 0xad00, 0x0048, 0x5870, 0x6858, 0xac02,
++ 0x00c8, 0x5870, 0x7124, 0x610a, 0x2009, 0x0045, 0x1078, 0x775c,
++ 0x007c, 0x007e, 0x1078, 0x29bb, 0x007f, 0x00c0, 0x5887, 0x7110,
++ 0xa18c, 0xff00, 0x810f, 0xa18e, 0x0000, 0x00c0, 0x5887, 0xa084,
++ 0x000f, 0xa08a, 0x0006, 0x00c8, 0x5887, 0x1079, 0x5888, 0x007c,
++ 0x588e, 0x588f, 0x588e, 0x588e, 0x58ff, 0x590e, 0x007c, 0x7110,
++ 0xd1bc, 0x0040, 0x5897, 0x702c, 0xd084, 0x0040, 0x58fe, 0x700c,
++ 0x7108, 0x1078, 0x254d, 0x00c0, 0x58fe, 0x1078, 0x455c, 0x00c0,
++ 0x58fe, 0x6612, 0x6516, 0x6204, 0x7110, 0xd1bc, 0x0040, 0x58c9,
++ 0xa28c, 0x00ff, 0xa186, 0x0004, 0x0040, 0x58b2, 0xa186, 0x0006,
++ 0x00c0, 0x58ef, 0x0c7e, 0x1078, 0x591d, 0x0c7f, 0x0040, 0x58fe,
++ 0x0c7e, 0x1078, 0x76c7, 0x017f, 0x0040, 0x58fe, 0x611a, 0x601f,
++ 0x0002, 0x7120, 0x610a, 0x2009, 0x0088, 0x1078, 0x775c, 0x0078,
++ 0x58fe, 0xa28c, 0x00ff, 0xa186, 0x0006, 0x0040, 0x58de, 0xa186,
++ 0x0004, 0x0040, 0x58de, 0xa294, 0xff00, 0x8217, 0xa286, 0x0004,
++ 0x0040, 0x58de, 0xa286, 0x0006, 0x00c0, 0x58ef, 0x0c7e, 0x1078,
++ 0x76c7, 0x017f, 0x0040, 0x58fe, 0x611a, 0x601f, 0x0005, 0x7120,
++ 0x610a, 0x2009, 0x0088, 0x1078, 0x775c, 0x0078, 0x58fe, 0x0c7e,
++ 0x1078, 0x76c7, 0x017f, 0x0040, 0x58fe, 0x611a, 0x601f, 0x0004,
++ 0x7120, 0x610a, 0x2009, 0x0001, 0x1078, 0x775c, 0x007c, 0x7110,
++ 0xd1bc, 0x0040, 0x590d, 0x1078, 0x591d, 0x0040, 0x590d, 0x7124,
++ 0x610a, 0x2009, 0x0089, 0x1078, 0x775c, 0x007c, 0x7110, 0xd1bc,
++ 0x0040, 0x591c, 0x1078, 0x591d, 0x0040, 0x591c, 0x7124, 0x610a,
++ 0x2009, 0x008a, 0x1078, 0x775c, 0x007c, 0x7020, 0x2060, 0xac84,
++ 0x000f, 0x00c0, 0x5930, 0xac82, 0xad00, 0x0048, 0x5930, 0x2001,
++ 0xa616, 0x2004, 0xac02, 0x00c8, 0x5930, 0xa085, 0x0001, 0x007c,
++ 0xa006, 0x0078, 0x592f, 0x7110, 0xd1bc, 0x00c0, 0x5949, 0x7024,
++ 0x2060, 0xac84, 0x000f, 0x00c0, 0x5949, 0xac82, 0xad00, 0x0048,
++ 0x5949, 0x6858, 0xac02, 0x00c8, 0x5949, 0x2009, 0x0051, 0x1078,
++ 0x775c, 0x007c, 0x2071, 0xa8c4, 0x7003, 0x0003, 0x700f, 0x0361,
++ 0xa006, 0x701a, 0x7012, 0x7017, 0xad00, 0x7007, 0x0000, 0x7026,
++ 0x702b, 0x6e1c, 0x7032, 0x7037, 0x6e70, 0x703b, 0x0002, 0x703f,
++ 0x0000, 0x7043, 0xffff, 0x7047, 0xffff, 0x007c, 0x2071, 0xa8c4,
++ 0x00e0, 0x5a32, 0x2091, 0x6000, 0x700c, 0x8001, 0x700e, 0x00c0,
++ 0x59de, 0x700f, 0x0361, 0x7007, 0x0001, 0x127e, 0x2091, 0x8000,
++ 0x7138, 0x8109, 0x713a, 0x00c0, 0x59dc, 0x703b, 0x0002, 0x2009,
++ 0x0100, 0x2104, 0xa082, 0x0003, 0x00c8, 0x59dc, 0x703c, 0xa086,
++ 0x0001, 0x00c0, 0x59b9, 0x0d7e, 0x2069, 0x0140, 0x6804, 0xa084,
++ 0x4000, 0x0040, 0x5997, 0x6803, 0x1000, 0x0078, 0x599e, 0x6804,
++ 0xa084, 0x1000, 0x0040, 0x599e, 0x6803, 0x0100, 0x6803, 0x0000,
++ 0x703f, 0x0000, 0x2069, 0xa8b1, 0x6804, 0xa082, 0x0006, 0x00c0,
++ 0x59ab, 0x6807, 0x0000, 0x6830, 0xa082, 0x0003, 0x00c0, 0x59b2,
++ 0x6833, 0x0000, 0x1078, 0x62d1, 0x1078, 0x639b, 0x0d7f, 0x0078,
++ 0x59dc, 0x0d7e, 0x2069, 0xa600, 0x6948, 0x6864, 0xa102, 0x00c8,
++ 0x59db, 0x2069, 0xa8b1, 0x6804, 0xa086, 0x0000, 0x00c0, 0x59db,
++ 0x6830, 0xa086, 0x0000, 0x00c0, 0x59db, 0x703f, 0x0001, 0x6807,
++ 0x0006, 0x6833, 0x0003, 0x2069, 0x0100, 0x6830, 0x689e, 0x2069,
++ 0x0140, 0x6803, 0x0600, 0x0d7f, 0x0078, 0x59e1, 0x127e, 0x2091,
++ 0x8000, 0x7024, 0xa00d, 0x0040, 0x59f9, 0x7020, 0x8001, 0x7022,
++ 0x00c0, 0x59f9, 0x7023, 0x0009, 0x8109, 0x7126, 0xa186, 0x03e8,
++ 0x00c0, 0x59f4, 0x7028, 0x107a, 0x81ff, 0x00c0, 0x59f9, 0x7028,
++ 0x107a, 0x7030, 0xa00d, 0x0040, 0x5a10, 0x702c, 0x8001, 0x702e,
++ 0x00c0, 0x5a10, 0x702f, 0x0009, 0x8109, 0x7132, 0x0040, 0x5a0e,
++ 0xa184, 0x007f, 0x1040, 0x6ea2, 0x0078, 0x5a10, 0x7034, 0x107a,
++ 0x7040, 0xa005, 0x0040, 0x5a18, 0x0050, 0x5a18, 0x8001, 0x7042,
++ 0x7044, 0xa005, 0x0040, 0x5a20, 0x0050, 0x5a20, 0x8001, 0x7046,
++ 0x7018, 0xa00d, 0x0040, 0x5a31, 0x7008, 0x8001, 0x700a, 0x00c0,
++ 0x5a31, 0x700b, 0x0009, 0x8109, 0x711a, 0x00c0, 0x5a31, 0x701c,
++ 0x107a, 0x127f, 0x7004, 0x0079, 0x5a35, 0x5a5c, 0x5a5d, 0x5a79,
++ 0x0e7e, 0x2071, 0xa8c4, 0x7018, 0xa005, 0x00c0, 0x5a43, 0x711a,
++ 0x721e, 0x700b, 0x0009, 0x0e7f, 0x007c, 0x0e7e, 0x007e, 0x2071,
++ 0xa8c4, 0x701c, 0xa206, 0x00c0, 0x5a4f, 0x701a, 0x701e, 0x007f,
++ 0x0e7f, 0x007c, 0x0e7e, 0x2071, 0xa8c4, 0x6088, 0xa102, 0x0048,
++ 0x5a5a, 0x618a, 0x0e7f, 0x007c, 0x007c, 0x7110, 0x1078, 0x45c4,
++ 0x00c0, 0x5a6f, 0x6088, 0x8001, 0x0048, 0x5a6f, 0x608a, 0x00c0,
++ 0x5a6f, 0x127e, 0x2091, 0x8000, 0x1078, 0x62d1, 0x127f, 0x8108,
++ 0xa182, 0x00ff, 0x0048, 0x5a77, 0xa00e, 0x7007, 0x0002, 0x7112,
++ 0x007c, 0x7014, 0x2060, 0x127e, 0x2091, 0x8000, 0x603c, 0xa005,
++ 0x0040, 0x5a88, 0x8001, 0x603e, 0x00c0, 0x5a88, 0x1078, 0x8f9c,
++ 0x6014, 0xa005, 0x0040, 0x5ab2, 0x8001, 0x6016, 0x00c0, 0x5ab2,
++ 0x611c, 0xa186, 0x0003, 0x0040, 0x5a99, 0xa186, 0x0006, 0x00c0,
++ 0x5ab0, 0x6010, 0x2068, 0x6854, 0xa08a, 0x199a, 0x0048, 0x5ab0,
++ 0xa082, 0x1999, 0x6856, 0xa08a, 0x199a, 0x0048, 0x5aa9, 0x2001,
++ 0x1999, 0x8003, 0x800b, 0x810b, 0xa108, 0x6116, 0x0078, 0x5ab2,
++ 0x1078, 0x8abe, 0x127f, 0xac88, 0x0010, 0x7116, 0x2001, 0xcd00,
++ 0xa102, 0x0048, 0x5abf, 0x7017, 0xad00, 0x7007, 0x0000, 0x007c,
++ 0x0e7e, 0x2071, 0xa8c4, 0x7027, 0x07d0, 0x7023, 0x0009, 0x703b,
++ 0x0002, 0x0e7f, 0x007c, 0x2001, 0xa8cd, 0x2003, 0x0000, 0x007c,
++ 0x0e7e, 0x2071, 0xa8c4, 0x7132, 0x702f, 0x0009, 0x0e7f, 0x007c,
++ 0x2011, 0xa8d0, 0x2013, 0x0000, 0x007c, 0x0e7e, 0x2071, 0xa8c4,
++ 0x711a, 0x721e, 0x700b, 0x0009, 0x0e7f, 0x007c, 0x027e, 0x0e7e,
++ 0x0f7e, 0x2079, 0xa600, 0x7a34, 0xd294, 0x0040, 0x5b15, 0x2071,
++ 0xa8ac, 0x2e14, 0xa0fe, 0x0000, 0x0040, 0x5b02, 0xa0fe, 0x0001,
++ 0x0040, 0x5b06, 0xa0fe, 0x0002, 0x00c0, 0x5b11, 0xa292, 0x0085,
++ 0x0078, 0x5b08, 0xa292, 0x0005, 0x0078, 0x5b08, 0xa292, 0x0002,
++ 0x2272, 0x0040, 0x5b0d, 0x00c8, 0x5b15, 0x2011, 0x8037, 0x1078,
++ 0x361b, 0x2011, 0xa8ab, 0x2204, 0x2072, 0x0f7f, 0x0e7f, 0x027f,
++ 0x007c, 0x0c7e, 0x2061, 0xa933, 0x0c7f, 0x007c, 0xa184, 0x000f,
++ 0x8003, 0x8003, 0x8003, 0xa080, 0xa933, 0x2060, 0x007c, 0x6854,
++ 0xa08a, 0x199a, 0x0048, 0x5b2e, 0x2001, 0x1999, 0xa005, 0x00c0,
++ 0x5b3d, 0x0c7e, 0x2061, 0xa933, 0x6014, 0x0c7f, 0xa005, 0x00c0,
++ 0x5b42, 0x2001, 0x001e, 0x0078, 0x5b42, 0xa08e, 0xffff, 0x00c0,
++ 0x5b42, 0xa006, 0x8003, 0x800b, 0x810b, 0xa108, 0x6116, 0x684c,
++ 0xa08c, 0x00c0, 0xa18e, 0x00c0, 0x0040, 0x5b9e, 0xd0b4, 0x00c0,
++ 0x5b59, 0xd0bc, 0x00c0, 0x5b8b, 0x2009, 0x0006, 0x1078, 0x5bc3,
++ 0x007c, 0xd0fc, 0x0040, 0x5b64, 0xa084, 0x0003, 0x0040, 0x5b64,
++ 0xa086, 0x0003, 0x00c0, 0x5bbc, 0x6024, 0xd0d4, 0x0040, 0x5b6e,
++ 0xc0d4, 0x6026, 0x6860, 0x602a, 0x685c, 0x602e, 0x2009, 0xa674,
++ 0x2104, 0xd084, 0x0040, 0x5b83, 0x6118, 0xa188, 0x0027, 0x2104,
++ 0xd08c, 0x00c0, 0x5b83, 0x87ff, 0x00c0, 0x5b82, 0x2009, 0x0042,
++ 0x1078, 0x775c, 0x007c, 0x87ff, 0x00c0, 0x5b8a, 0x2009, 0x0043,
++ 0x1078, 0x775c, 0x007c, 0xd0fc, 0x0040, 0x5b96, 0xa084, 0x0003,
++ 0x0040, 0x5b96, 0xa086, 0x0003, 0x00c0, 0x5bbc, 0x87ff, 0x00c0,
++ 0x5b9d, 0x2009, 0x0042, 0x1078, 0x775c, 0x007c, 0xd0fc, 0x0040,
++ 0x5baf, 0xa084, 0x0003, 0xa08e, 0x0002, 0x0040, 0x5bb3, 0x87ff,
++ 0x00c0, 0x5bae, 0x2009, 0x0041, 0x1078, 0x775c, 0x007c, 0x1078,
++ 0x5bc1, 0x0078, 0x5bae, 0x87ff, 0x00c0, 0x5bae, 0x2009, 0x0043,
++ 0x1078, 0x775c, 0x0078, 0x5bae, 0x2009, 0x0004, 0x1078, 0x5bc3,
++ 0x007c, 0x2009, 0x0001, 0x0d7e, 0x6010, 0xa0ec, 0xf000, 0x0040,
++ 0x5bef, 0x2068, 0x6952, 0x6800, 0x6012, 0xa186, 0x0001, 0x00c0,
++ 0x5be5, 0x694c, 0xa18c, 0x8100, 0xa18e, 0x8100, 0x00c0, 0x5be5,
++ 0x0c7e, 0x2061, 0xa933, 0x6200, 0xd28c, 0x00c0, 0x5be4, 0x6204,
++ 0x8210, 0x0048, 0x5be4, 0x6206, 0x0c7f, 0x1078, 0x4a73, 0x6010,
++ 0xa06d, 0x077e, 0x2039, 0x0000, 0x10c0, 0x5b27, 0x077f, 0x0d7f,
++ 0x007c, 0x157e, 0x0c7e, 0x2061, 0xa933, 0x6000, 0x81ff, 0x0040,
++ 0x5bfc, 0xa205, 0x0078, 0x5bfd, 0xa204, 0x6002, 0x0c7f, 0x157f,
++ 0x007c, 0x6800, 0xd08c, 0x00c0, 0x5c0d, 0x6808, 0xa005, 0x0040,
++ 0x5c0d, 0x8001, 0x680a, 0xa085, 0x0001, 0x007c, 0x20a9, 0x0010,
++ 0xa006, 0x8004, 0x8086, 0x818e, 0x00c8, 0x5c17, 0xa200, 0x00f0,
++ 0x5c12, 0x8086, 0x818e, 0x007c, 0x157e, 0x20a9, 0x0010, 0xa005,
++ 0x0040, 0x5c3d, 0xa11a, 0x00c8, 0x5c3d, 0x8213, 0x818d, 0x0048,
++ 0x5c30, 0xa11a, 0x00c8, 0x5c31, 0x00f0, 0x5c25, 0x0078, 0x5c35,
++ 0xa11a, 0x2308, 0x8210, 0x00f0, 0x5c25, 0x007e, 0x3200, 0xa084,
++ 0xf7ff, 0x2080, 0x007f, 0x157f, 0x007c, 0x007e, 0x3200, 0xa085,
++ 0x0800, 0x0078, 0x5c39, 0x127e, 0x2091, 0x2200, 0x2079, 0xa8b1,
++ 0x127f, 0x0d7e, 0x2069, 0xa8b1, 0x6803, 0x0005, 0x2069, 0x0004,
++ 0x2d04, 0xa085, 0x8001, 0x206a, 0x0d7f, 0x007c, 0x0c7e, 0x6027,
++ 0x0001, 0x7804, 0xa084, 0x0007, 0x0079, 0x5c5e, 0x5c68, 0x5c8d,
++ 0x5ce8, 0x5c6e, 0x5c8d, 0x5c68, 0x5c66, 0x5c66, 0x1078, 0x1332,
++ 0x1078, 0x5acb, 0x1078, 0x62d1, 0x0c7f, 0x007c, 0x62c0, 0x82ff,
++ 0x00c0, 0x5c74, 0x0c7f, 0x007c, 0x2011, 0x41dc, 0x1078, 0x5a45,
++ 0x7828, 0xa092, 0x00c8, 0x00c8, 0x5c83, 0x8000, 0x782a, 0x1078,
++ 0x421b, 0x0078, 0x5c72, 0x1078, 0x41dc, 0x7807, 0x0003, 0x7827,
++ 0x0000, 0x782b, 0x0000, 0x0078, 0x5c72, 0x1078, 0x5acb, 0x3c00,
++ 0x007e, 0x2011, 0x0209, 0x20e1, 0x4000, 0x2214, 0x007f, 0x20e0,
++ 0x82ff, 0x0040, 0x5cab, 0x62c0, 0x82ff, 0x00c0, 0x5cab, 0x782b,
++ 0x0000, 0x7824, 0xa065, 0x1040, 0x1332, 0x2009, 0x0013, 0x1078,
++ 0x775c, 0x0c7f, 0x007c, 0x3900, 0xa082, 0xa9e3, 0x00c8, 0x5cb2,
++ 0x1078, 0x747a, 0x0c7e, 0x7824, 0xa065, 0x1040, 0x1332, 0x7804,
++ 0xa086, 0x0004, 0x0040, 0x5d2d, 0x7828, 0xa092, 0x2710, 0x00c8,
++ 0x5cc8, 0x8000, 0x782a, 0x0c7f, 0x1078, 0x6e01, 0x0078, 0x5ca9,
++ 0x6104, 0xa186, 0x0003, 0x00c0, 0x5cdf, 0x0e7e, 0x2071, 0xa600,
++ 0x70d8, 0x0e7f, 0xd08c, 0x0040, 0x5cdf, 0x0c7e, 0x0e7e, 0x2061,
++ 0x0100, 0x2071, 0xa600, 0x1078, 0x4224, 0x0e7f, 0x0c7f, 0x1078,
++ 0xa5c4, 0x2009, 0x0014, 0x1078, 0x775c, 0x0c7f, 0x0078, 0x5ca9,
++ 0x2001, 0xa8cd, 0x2003, 0x0000, 0x62c0, 0x82ff, 0x00c0, 0x5cfc,
++ 0x782b, 0x0000, 0x7824, 0xa065, 0x1040, 0x1332, 0x2009, 0x0013,
++ 0x1078, 0x77b3, 0x0c7f, 0x007c, 0x0c7e, 0x0d7e, 0x3900, 0xa082,
++ 0xa9e3, 0x00c8, 0x5d05, 0x1078, 0x747a, 0x7824, 0xa005, 0x1040,
++ 0x1332, 0x781c, 0xa06d, 0x1040, 0x1332, 0x6800, 0xc0dc, 0x6802,
++ 0x7924, 0x2160, 0x1078, 0x772d, 0x693c, 0x81ff, 0x1040, 0x1332,
++ 0x8109, 0x693e, 0x6854, 0xa015, 0x0040, 0x5d21, 0x7a1e, 0x0078,
++ 0x5d23, 0x7918, 0x791e, 0x7807, 0x0000, 0x7827, 0x0000, 0x0d7f,
++ 0x0c7f, 0x1078, 0x62d1, 0x0078, 0x5cfa, 0x6104, 0xa186, 0x0002,
++ 0x0040, 0x5d38, 0xa186, 0x0004, 0x0040, 0x5d38, 0x0078, 0x5cbc,
++ 0x7808, 0xac06, 0x0040, 0x5cbc, 0x1078, 0x61cd, 0x1078, 0x5dd7,
++ 0x0c7f, 0x1078, 0x62d1, 0x0078, 0x5ca9, 0x0c7e, 0x6027, 0x0002,
++ 0x62c8, 0x82ff, 0x00c0, 0x5d61, 0x62c4, 0x82ff, 0x00c0, 0x5d61,
++ 0x793c, 0xa1e5, 0x0000, 0x0040, 0x5d5b, 0x2009, 0x0049, 0x1078,
++ 0x775c, 0x0c7f, 0x007c, 0x2011, 0xa8d0, 0x2013, 0x0000, 0x0078,
++ 0x5d59, 0x3908, 0xa192, 0xa9e3, 0x00c8, 0x5d68, 0x1078, 0x747a,
++ 0x6017, 0x0010, 0x793c, 0x81ff, 0x0040, 0x5d5b, 0x7944, 0xa192,
++ 0x7530, 0x00c8, 0x5d85, 0x8108, 0x7946, 0x793c, 0xa188, 0x0007,
++ 0x210c, 0xa18e, 0x0006, 0x00c0, 0x5d81, 0x6017, 0x0012, 0x0078,
++ 0x5d59, 0x6017, 0x0016, 0x0078, 0x5d59, 0x7848, 0xc085, 0x784a,
++ 0x0078, 0x5d59, 0x007e, 0x017e, 0x0c7e, 0x127e, 0x2091, 0x8000,
++ 0x600f, 0x0000, 0x2c08, 0x2061, 0xa8b1, 0x6020, 0x8000, 0x6022,
++ 0x6010, 0xa005, 0x0040, 0x5da5, 0xa080, 0x0003, 0x2102, 0x6112,
++ 0x127f, 0x0c7f, 0x017f, 0x007f, 0x007c, 0x6116, 0x6112, 0x0078,
++ 0x5da0, 0x0d7e, 0x2069, 0xa8b1, 0x6000, 0xd0d4, 0x0040, 0x5dbe,
++ 0x6820, 0x8000, 0x6822, 0xa086, 0x0001, 0x00c0, 0x5db9, 0x2c00,
++ 0x681e, 0x6804, 0xa084, 0x0007, 0x0079, 0x62d9, 0xc0d5, 0x6002,
++ 0x6818, 0xa005, 0x0040, 0x5dd0, 0x6056, 0x605b, 0x0000, 0x007e,
++ 0x2c00, 0x681a, 0x0d7f, 0x685a, 0x2069, 0xa8b1, 0x0078, 0x5db0,
++ 0x6056, 0x605a, 0x2c00, 0x681a, 0x681e, 0x0078, 0x5db0, 0x007e,
++ 0x017e, 0x0c7e, 0x127e, 0x2091, 0x8000, 0x600f, 0x0000, 0x2c08,
++ 0x2061, 0xa8b1, 0x6020, 0x8000, 0x6022, 0x6008, 0xa005, 0x0040,
++ 0x5df2, 0xa080, 0x0003, 0x2102, 0x610a, 0x127f, 0x0c7f, 0x017f,
++ 0x007f, 0x007c, 0x610e, 0x610a, 0x0078, 0x5ded, 0x0c7e, 0x600f,
++ 0x0000, 0x2c08, 0x2061, 0xa8b1, 0x6034, 0xa005, 0x0040, 0x5e06,
++ 0xa080, 0x0003, 0x2102, 0x6136, 0x0c7f, 0x007c, 0x613a, 0x6136,
++ 0x0078, 0x5e04, 0x0f7e, 0x0e7e, 0x0d7e, 0x0c7e, 0x067e, 0x057e,
++ 0x037e, 0x027e, 0x017e, 0x007e, 0x127e, 0xa02e, 0x2071, 0xa8b1,
++ 0x7638, 0x2660, 0x2678, 0x2091, 0x8000, 0x8cff, 0x0040, 0x5e8c,
++ 0x6018, 0xa080, 0x0028, 0x2004, 0xa206, 0x00c0, 0x5e87, 0x87ff,
++ 0x0040, 0x5e2e, 0x6020, 0xa106, 0x00c0, 0x5e87, 0x703c, 0xac06,
++ 0x00c0, 0x5e44, 0x037e, 0x2019, 0x0001, 0x1078, 0x7058, 0x7033,
++ 0x0000, 0x703f, 0x0000, 0x7043, 0x0000, 0x7047, 0x0000, 0x704b,
++ 0x0000, 0x037f, 0x2029, 0x0001, 0x7038, 0xac36, 0x00c0, 0x5e4a,
++ 0x660c, 0x763a, 0x7034, 0xac36, 0x00c0, 0x5e58, 0x2c00, 0xaf36,
++ 0x0040, 0x5e56, 0x2f00, 0x7036, 0x0078, 0x5e58, 0x7037, 0x0000,
++ 0x660c, 0x067e, 0x2c00, 0xaf06, 0x0040, 0x5e61, 0x7e0e, 0x0078,
++ 0x5e62, 0x2678, 0x600f, 0x0000, 0x1078, 0x8d06, 0x0040, 0x5e82,
++ 0x6010, 0x2068, 0x601c, 0xa086, 0x0003, 0x00c0, 0x5e9d, 0x6837,
++ 0x0103, 0x6b4a, 0x6847, 0x0000, 0x017e, 0x037e, 0x077e, 0x1078,
++ 0x8f7d, 0x1078, 0xa4e2, 0x1078, 0x4a73, 0x077f, 0x037f, 0x017f,
++ 0x1078, 0x8eb9, 0x1078, 0x8ec6, 0x0c7f, 0x0078, 0x5e1d, 0x2c78,
++ 0x600c, 0x2060, 0x0078, 0x5e1d, 0x85ff, 0x0040, 0x5e91, 0x1078,
++ 0x639b, 0x127f, 0x007f, 0x017f, 0x027f, 0x037f, 0x057f, 0x067f,
++ 0x0c7f, 0x0d7f, 0x0e7f, 0x0f7f, 0x007c, 0x601c, 0xa086, 0x0006,
++ 0x00c0, 0x5e6f, 0x017e, 0x037e, 0x077e, 0x1078, 0xa4e2, 0x1078,
++ 0xa1ca, 0x077f, 0x037f, 0x017f, 0x0078, 0x5e82, 0x007e, 0x067e,
++ 0x0c7e, 0x0d7e, 0x0f7e, 0x2031, 0x0000, 0x127e, 0x2091, 0x8000,
++ 0x2079, 0xa8b1, 0x7838, 0xa065, 0x0040, 0x5eef, 0x600c, 0x007e,
++ 0x600f, 0x0000, 0x783c, 0xac06, 0x00c0, 0x5ed6, 0x037e, 0x2019,
++ 0x0001, 0x1078, 0x7058, 0x7833, 0x0000, 0x783f, 0x0000, 0x7843,
++ 0x0000, 0x7847, 0x0000, 0x784b, 0x0000, 0x037f, 0x1078, 0x8d06,
++ 0x0040, 0x5eea, 0x6010, 0x2068, 0x601c, 0xa086, 0x0003, 0x00c0,
++ 0x5ef8, 0x6837, 0x0103, 0x6b4a, 0x6847, 0x0000, 0x1078, 0x4a73,
++ 0x1078, 0x8eb9, 0x1078, 0x8ec6, 0x007f, 0x0078, 0x5ebb, 0x7e3a,
++ 0x7e36, 0x127f, 0x0f7f, 0x0d7f, 0x0c7f, 0x067f, 0x007f, 0x007c,
++ 0x601c, 0xa086, 0x0006, 0x00c0, 0x5ee1, 0x1078, 0xa1ca, 0x0078,
++ 0x5eea, 0x017e, 0x027e, 0x087e, 0x2041, 0x0000, 0x1078, 0x5f1b,
++ 0x1078, 0x5fdb, 0x087f, 0x027f, 0x017f, 0x007c, 0x0f7e, 0x127e,
++ 0x2079, 0xa8b1, 0x2091, 0x8000, 0x1078, 0x6076, 0x1078, 0x60ec,
++ 0x127f, 0x0f7f, 0x007c, 0x0f7e, 0x0e7e, 0x0d7e, 0x0c7e, 0x067e,
++ 0x017e, 0x007e, 0x127e, 0x2091, 0x8000, 0x2071, 0xa8b1, 0x7614,
++ 0x2660, 0x2678, 0x8cff, 0x0040, 0x5fb5, 0x6018, 0xa080, 0x0028,
++ 0x2004, 0xa206, 0x00c0, 0x5fb0, 0x88ff, 0x0040, 0x5f3b, 0x6020,
++ 0xa106, 0x00c0, 0x5fb0, 0x7024, 0xac06, 0x00c0, 0x5f6b, 0x2069,
++ 0x0100, 0x68c0, 0xa005, 0x0040, 0x5f66, 0x1078, 0x5acb, 0x1078,
++ 0x6e0f, 0x68c3, 0x0000, 0x1078, 0x7378, 0x7027, 0x0000, 0x037e,
++ 0x2069, 0x0140, 0x6b04, 0xa384, 0x1000, 0x0040, 0x5f5b, 0x6803,
++ 0x0100, 0x6803, 0x0000, 0x2069, 0x0100, 0x6824, 0xd084, 0x0040,
++ 0x5f63, 0x6827, 0x0001, 0x037f, 0x0078, 0x5f6b, 0x6003, 0x0009,
++ 0x630a, 0x0078, 0x5fb0, 0x7014, 0xac36, 0x00c0, 0x5f71, 0x660c,
++ 0x7616, 0x7010, 0xac36, 0x00c0, 0x5f7f, 0x2c00, 0xaf36, 0x0040,
++ 0x5f7d, 0x2f00, 0x7012, 0x0078, 0x5f7f, 0x7013, 0x0000, 0x660c,
++ 0x067e, 0x2c00, 0xaf06, 0x0040, 0x5f88, 0x7e0e, 0x0078, 0x5f89,
++ 0x2678, 0x600f, 0x0000, 0x6010, 0x2068, 0x1078, 0x8d06, 0x0040,
++ 0x5fa9, 0x601c, 0xa086, 0x0003, 0x00c0, 0x5fbe, 0x6837, 0x0103,
++ 0x6b4a, 0x6847, 0x0000, 0x017e, 0x037e, 0x087e, 0x1078, 0x8f7d,
++ 0x1078, 0xa4e2, 0x1078, 0x4a73, 0x087f, 0x037f, 0x017f, 0x1078,
++ 0x8eb9, 0x1078, 0x8ec6, 0x1078, 0x7233, 0x0c7f, 0x0078, 0x5f2a,
++ 0x2c78, 0x600c, 0x2060, 0x0078, 0x5f2a, 0x127f, 0x007f, 0x017f,
++ 0x067f, 0x0c7f, 0x0d7f, 0x0e7f, 0x0f7f, 0x007c, 0x601c, 0xa086,
++ 0x0006, 0x00c0, 0x5fcf, 0x017e, 0x037e, 0x087e, 0x1078, 0xa4e2,
++ 0x1078, 0xa1ca, 0x087f, 0x037f, 0x017f, 0x0078, 0x5fa9, 0x601c,
++ 0xa086, 0x0002, 0x00c0, 0x5fa9, 0x6004, 0xa086, 0x0085, 0x0040,
++ 0x5f96, 0x0078, 0x5fa9, 0x0c7e, 0x007e, 0x127e, 0x2091, 0x8000,
++ 0xa280, 0xa735, 0x2004, 0xa065, 0x0040, 0x6072, 0x0f7e, 0x0e7e,
++ 0x0d7e, 0x067e, 0x2071, 0xa8b1, 0x6654, 0x7018, 0xac06, 0x00c0,
++ 0x5ff2, 0x761a, 0x701c, 0xac06, 0x00c0, 0x5ffe, 0x86ff, 0x00c0,
++ 0x5ffd, 0x7018, 0x701e, 0x0078, 0x5ffe, 0x761e, 0x6058, 0xa07d,
++ 0x0040, 0x6003, 0x7e56, 0xa6ed, 0x0000, 0x0040, 0x6009, 0x2f00,
++ 0x685a, 0x6057, 0x0000, 0x605b, 0x0000, 0x6000, 0xc0d4, 0xc0dc,
++ 0x6002, 0x1078, 0x44d3, 0x0040, 0x606e, 0x7624, 0x86ff, 0x0040,
++ 0x605c, 0xa680, 0x0004, 0x2004, 0xad06, 0x00c0, 0x605c, 0x0d7e,
++ 0x2069, 0x0100, 0x68c0, 0xa005, 0x0040, 0x6053, 0x1078, 0x5acb,
++ 0x1078, 0x6e0f, 0x68c3, 0x0000, 0x1078, 0x7378, 0x7027, 0x0000,
++ 0x037e, 0x2069, 0x0140, 0x6b04, 0xa384, 0x1000, 0x0040, 0x603c,
++ 0x6803, 0x0100, 0x6803, 0x0000, 0x2069, 0x0100, 0x6824, 0xd084,
++ 0x0040, 0x6044, 0x6827, 0x0001, 0x037f, 0x0d7f, 0x0c7e, 0x603c,
++ 0xa005, 0x0040, 0x604d, 0x8001, 0x603e, 0x2660, 0x1078, 0x8ec6,
++ 0x0c7f, 0x0078, 0x605c, 0x0d7f, 0x0c7e, 0x2660, 0x6003, 0x0009,
++ 0x630a, 0x0c7f, 0x0078, 0x6011, 0x8dff, 0x0040, 0x606a, 0x6837,
++ 0x0103, 0x6b4a, 0x6847, 0x0000, 0x1078, 0x8f7d, 0x1078, 0xa4e2,
++ 0x1078, 0x4a73, 0x1078, 0x7233, 0x0078, 0x6011, 0x067f, 0x0d7f,
++ 0x0e7f, 0x0f7f, 0x127f, 0x007f, 0x0c7f, 0x007c, 0x007e, 0x067e,
++ 0x0c7e, 0x0d7e, 0x2031, 0x0000, 0x7814, 0xa065, 0x0040, 0x60d0,
++ 0x600c, 0x007e, 0x600f, 0x0000, 0x7824, 0xac06, 0x00c0, 0x60b5,
++ 0x2069, 0x0100, 0x68c0, 0xa005, 0x0040, 0x60af, 0x1078, 0x5acb,
++ 0x1078, 0x6e0f, 0x68c3, 0x0000, 0x1078, 0x7378, 0x7827, 0x0000,
++ 0x037e, 0x2069, 0x0140, 0x6b04, 0xa384, 0x1000, 0x0040, 0x60a4,
++ 0x6803, 0x0100, 0x6803, 0x0000, 0x2069, 0x0100, 0x6824, 0xd084,
++ 0x0040, 0x60ac, 0x6827, 0x0001, 0x037f, 0x0078, 0x60b5, 0x6003,
++ 0x0009, 0x630a, 0x2c30, 0x0078, 0x60cd, 0x6010, 0x2068, 0x1078,
++ 0x8d06, 0x0040, 0x60c9, 0x601c, 0xa086, 0x0003, 0x00c0, 0x60d7,
++ 0x6837, 0x0103, 0x6b4a, 0x6847, 0x0000, 0x1078, 0x4a73, 0x1078,
++ 0x8eb9, 0x1078, 0x8ec6, 0x1078, 0x7233, 0x007f, 0x0078, 0x607d,
++ 0x7e16, 0x7e12, 0x0d7f, 0x0c7f, 0x067f, 0x007f, 0x007c, 0x601c,
++ 0xa086, 0x0006, 0x00c0, 0x60e0, 0x1078, 0xa1ca, 0x0078, 0x60c9,
++ 0x601c, 0xa086, 0x0002, 0x00c0, 0x60c9, 0x6004, 0xa086, 0x0085,
++ 0x0040, 0x60c0, 0x0078, 0x60c9, 0x007e, 0x067e, 0x0c7e, 0x0d7e,
++ 0x7818, 0xa065, 0x0040, 0x615a, 0x6054, 0x007e, 0x6057, 0x0000,
++ 0x605b, 0x0000, 0x6000, 0xc0d4, 0xc0dc, 0x6002, 0x1078, 0x44d3,
++ 0x0040, 0x6157, 0x7e24, 0x86ff, 0x0040, 0x6149, 0xa680, 0x0004,
++ 0x2004, 0xad06, 0x00c0, 0x6149, 0x0d7e, 0x2069, 0x0100, 0x68c0,
++ 0xa005, 0x0040, 0x6140, 0x1078, 0x5acb, 0x1078, 0x6e0f, 0x68c3,
++ 0x0000, 0x1078, 0x7378, 0x7827, 0x0000, 0x037e, 0x2069, 0x0140,
++ 0x6b04, 0xa384, 0x1000, 0x0040, 0x6129, 0x6803, 0x0100, 0x6803,
++ 0x0000, 0x2069, 0x0100, 0x6824, 0xd084, 0x0040, 0x6131, 0x6827,
++ 0x0001, 0x037f, 0x0d7f, 0x0c7e, 0x603c, 0xa005, 0x0040, 0x613a,
++ 0x8001, 0x603e, 0x2660, 0x1078, 0x8ec6, 0x0c7f, 0x0078, 0x6149,
++ 0x0d7f, 0x0c7e, 0x2660, 0x6003, 0x0009, 0x630a, 0x0c7f, 0x0078,
++ 0x60fe, 0x8dff, 0x0040, 0x6153, 0x6837, 0x0103, 0x6b4a, 0x6847,
++ 0x0000, 0x1078, 0x4a73, 0x1078, 0x7233, 0x0078, 0x60fe, 0x007f,
++ 0x0078, 0x60f1, 0x781e, 0x781a, 0x0d7f, 0x0c7f, 0x067f, 0x007f,
++ 0x007c, 0x0e7e, 0x0d7e, 0x067e, 0x6000, 0xd0dc, 0x0040, 0x6181,
++ 0x604c, 0xa06d, 0x0040, 0x6181, 0x6848, 0xa606, 0x00c0, 0x6181,
++ 0x2071, 0xa8b1, 0x7024, 0xa035, 0x0040, 0x6181, 0xa080, 0x0004,
++ 0x2004, 0xad06, 0x00c0, 0x6181, 0x6000, 0xc0dc, 0x6002, 0x1078,
++ 0x6185, 0x067f, 0x0d7f, 0x0e7f, 0x007c, 0x0f7e, 0x2079, 0x0100,
++ 0x78c0, 0xa005, 0x00c0, 0x6194, 0x0c7e, 0x2660, 0x6003, 0x0009,
++ 0x630a, 0x0c7f, 0x0078, 0x61cb, 0x1078, 0x6e0f, 0x78c3, 0x0000,
++ 0x1078, 0x7378, 0x7027, 0x0000, 0x037e, 0x2079, 0x0140, 0x7b04,
++ 0xa384, 0x1000, 0x0040, 0x61a8, 0x7803, 0x0100, 0x7803, 0x0000,
++ 0x2079, 0x0100, 0x7824, 0xd084, 0x0040, 0x61b0, 0x7827, 0x0001,
++ 0x1078, 0x7378, 0x037f, 0x1078, 0x44d3, 0x0c7e, 0x603c, 0xa005,
++ 0x0040, 0x61bc, 0x8001, 0x603e, 0x2660, 0x1078, 0x772d, 0x0c7f,
++ 0x6837, 0x0103, 0x6b4a, 0x6847, 0x0000, 0x1078, 0x8f7d, 0x1078,
++ 0x4a73, 0x1078, 0x7233, 0x0f7f, 0x007c, 0x0e7e, 0x0c7e, 0x2071,
++ 0xa8b1, 0x7004, 0xa084, 0x0007, 0x0079, 0x61d6, 0x61e0, 0x61e3,
++ 0x61fc, 0x6218, 0x6262, 0x61e0, 0x61e0, 0x61de, 0x1078, 0x1332,
++ 0x0c7f, 0x0e7f, 0x007c, 0x7024, 0xa065, 0x0040, 0x61f1, 0x7020,
++ 0x8001, 0x7022, 0x600c, 0xa015, 0x0040, 0x61f8, 0x7216, 0x600f,
++ 0x0000, 0x7007, 0x0000, 0x7027, 0x0000, 0x0c7f, 0x0e7f, 0x007c,
++ 0x7216, 0x7212, 0x0078, 0x61f1, 0x6018, 0x2060, 0x1078, 0x44d3,
++ 0x6000, 0xc0dc, 0x6002, 0x7020, 0x8001, 0x7022, 0x0040, 0x620d,
++ 0x6054, 0xa015, 0x0040, 0x6214, 0x721e, 0x7007, 0x0000, 0x7027,
++ 0x0000, 0x0c7f, 0x0e7f, 0x007c, 0x7218, 0x721e, 0x0078, 0x620d,
++ 0x7024, 0xa065, 0x0040, 0x625f, 0x700c, 0xac06, 0x00c0, 0x622f,
++ 0x1078, 0x7233, 0x600c, 0xa015, 0x0040, 0x622b, 0x720e, 0x600f,
++ 0x0000, 0x0078, 0x625d, 0x720e, 0x720a, 0x0078, 0x625d, 0x7014,
++ 0xac06, 0x00c0, 0x6242, 0x1078, 0x7233, 0x600c, 0xa015, 0x0040,
++ 0x623e, 0x7216, 0x600f, 0x0000, 0x0078, 0x625d, 0x7216, 0x7212,
++ 0x0078, 0x625d, 0x601c, 0xa086, 0x0003, 0x00c0, 0x625d, 0x6018,
++ 0x2060, 0x1078, 0x44d3, 0x6000, 0xc0dc, 0x6002, 0x1078, 0x7233,
++ 0x701c, 0xa065, 0x0040, 0x625d, 0x6054, 0xa015, 0x0040, 0x625b,
++ 0x721e, 0x0078, 0x625d, 0x7218, 0x721e, 0x7027, 0x0000, 0x0c7f,
++ 0x0e7f, 0x007c, 0x7024, 0xa065, 0x0040, 0x626f, 0x1078, 0x7233,
++ 0x600c, 0xa015, 0x0040, 0x6276, 0x720e, 0x600f, 0x0000, 0x1078,
++ 0x7378, 0x7027, 0x0000, 0x0c7f, 0x0e7f, 0x007c, 0x720e, 0x720a,
++ 0x0078, 0x626f, 0x0d7e, 0x2069, 0xa8b1, 0x6830, 0xa084, 0x0003,
++ 0x0079, 0x6282, 0x6288, 0x628a, 0x62b4, 0x6288, 0x1078, 0x1332,
++ 0x0d7f, 0x007c, 0x0c7e, 0x6840, 0xa086, 0x0001, 0x0040, 0x62aa,
++ 0x683c, 0xa065, 0x0040, 0x629b, 0x600c, 0xa015, 0x0040, 0x62a6,
++ 0x6a3a, 0x600f, 0x0000, 0x6833, 0x0000, 0x683f, 0x0000, 0x2011,
++ 0xa8d0, 0x2013, 0x0000, 0x0c7f, 0x0d7f, 0x007c, 0x683a, 0x6836,
++ 0x0078, 0x629b, 0x6843, 0x0000, 0x6838, 0xa065, 0x0040, 0x629b,
++ 0x6003, 0x0003, 0x0078, 0x629b, 0x0c7e, 0x6843, 0x0000, 0x6847,
++ 0x0000, 0x684b, 0x0000, 0x683c, 0xa065, 0x0040, 0x62ce, 0x600c,
++ 0xa015, 0x0040, 0x62ca, 0x6a3a, 0x600f, 0x0000, 0x683f, 0x0000,
++ 0x0078, 0x62ce, 0x683f, 0x0000, 0x683a, 0x6836, 0x0c7f, 0x0d7f,
++ 0x007c, 0x0d7e, 0x2069, 0xa8b1, 0x6804, 0xa084, 0x0007, 0x0079,
++ 0x62d9, 0x62e3, 0x638a, 0x638a, 0x638a, 0x638a, 0x638c, 0x638a,
++ 0x62e1, 0x1078, 0x1332, 0x6820, 0xa005, 0x00c0, 0x62e9, 0x0d7f,
++ 0x007c, 0x0c7e, 0x680c, 0xa065, 0x0040, 0x62f8, 0x6807, 0x0004,
++ 0x6826, 0x682b, 0x0000, 0x1078, 0x63d4, 0x0c7f, 0x0d7f, 0x007c,
++ 0x6814, 0xa065, 0x0040, 0x6306, 0x6807, 0x0001, 0x6826, 0x682b,
++ 0x0000, 0x1078, 0x63d4, 0x0c7f, 0x0d7f, 0x007c, 0x0e7e, 0x037e,
++ 0x6a1c, 0xa2f5, 0x0000, 0x0040, 0x6385, 0x704c, 0xa00d, 0x0040,
++ 0x6315, 0x7088, 0xa005, 0x0040, 0x632d, 0x7054, 0xa075, 0x0040,
++ 0x631e, 0xa20e, 0x0040, 0x6385, 0x0078, 0x6323, 0x6818, 0xa20e,
++ 0x0040, 0x6385, 0x2070, 0x704c, 0xa00d, 0x0040, 0x6315, 0x7088,
++ 0xa005, 0x00c0, 0x6315, 0x2e00, 0x681e, 0x733c, 0x7038, 0xa302,
++ 0x00c8, 0x6315, 0x1078, 0x76fc, 0x0040, 0x6385, 0x8318, 0x733e,
++ 0x6112, 0x2e10, 0x621a, 0xa180, 0x0014, 0x2004, 0xa084, 0x00ff,
++ 0x6032, 0xa180, 0x0014, 0x2003, 0x0000, 0xa180, 0x0015, 0x2004,
++ 0xa08a, 0x199a, 0x0048, 0x634e, 0x2001, 0x1999, 0x8003, 0x801b,
++ 0x831b, 0xa318, 0x6316, 0x037f, 0x0f7e, 0x2c78, 0x71a0, 0xd1bc,
++ 0x0040, 0x6367, 0x7100, 0xd1f4, 0x0040, 0x6363, 0x7114, 0xa18c,
++ 0x00ff, 0x0078, 0x636c, 0x2009, 0x0000, 0x0078, 0x636c, 0xa1e0,
++ 0x29c0, 0x2c0c, 0xa18c, 0x00ff, 0x2061, 0x0100, 0x619a, 0x1078,
++ 0x6965, 0x7300, 0xc3dd, 0x7302, 0x6807, 0x0002, 0x2f18, 0x6b26,
++ 0x682b, 0x0000, 0x781f, 0x0003, 0x7803, 0x0001, 0x7807, 0x0040,
++ 0x0f7f, 0x0e7f, 0x0c7f, 0x0d7f, 0x007c, 0x037f, 0x0e7f, 0x0c7f,
++ 0x0078, 0x6383, 0x0d7f, 0x007c, 0x0c7e, 0x680c, 0xa065, 0x0040,
++ 0x6398, 0x6807, 0x0004, 0x6826, 0x682b, 0x0000, 0x1078, 0x63d4,
++ 0x0c7f, 0x0d7f, 0x007c, 0x0f7e, 0x0d7e, 0x2069, 0xa8b1, 0x6830,
++ 0xa086, 0x0000, 0x00c0, 0x63bb, 0x6838, 0xa07d, 0x0040, 0x63bb,
++ 0x6833, 0x0001, 0x683e, 0x6847, 0x0000, 0x684b, 0x0000, 0x127e,
++ 0x0f7e, 0x2091, 0x2200, 0x027f, 0x1078, 0x1d6d, 0x00c0, 0x63be,
++ 0x127f, 0x1078, 0x6cb3, 0x0d7f, 0x0f7f, 0x007c, 0x127f, 0x6843,
++ 0x0000, 0x7803, 0x0002, 0x780c, 0xa015, 0x0040, 0x63d0, 0x6a3a,
++ 0x780f, 0x0000, 0x6833, 0x0000, 0x683f, 0x0000, 0x0078, 0x63bb,
++ 0x683a, 0x6836, 0x0078, 0x63ca, 0x601c, 0xa084, 0x000f, 0x1079,
++ 0x63da, 0x007c, 0x63e3, 0x63e8, 0x6809, 0x6922, 0x63e8, 0x6809,
++ 0x6922, 0x63e3, 0x63e8, 0x1078, 0x61cd, 0x1078, 0x62d1, 0x007c,
++ 0x157e, 0x137e, 0x147e, 0x0c7e, 0x0f7e, 0x6004, 0xa08a, 0x0044,
++ 0x10c8, 0x1332, 0x6118, 0x2178, 0x79a0, 0xd1bc, 0x0040, 0x6405,
++ 0x7900, 0xd1f4, 0x0040, 0x6401, 0x7914, 0xa18c, 0x00ff, 0x0078,
++ 0x640a, 0x2009, 0x0000, 0x0078, 0x640a, 0xa1f8, 0x29c0, 0x2f0c,
++ 0xa18c, 0x00ff, 0x2c78, 0x2061, 0x0100, 0x619a, 0xa08a, 0x0040,
++ 0x00c8, 0x645c, 0x1079, 0x641a, 0x0f7f, 0x0c7f, 0x147f, 0x137f,
++ 0x157f, 0x007c, 0x64c2, 0x650a, 0x6532, 0x65cd, 0x65fd, 0x6605,
++ 0x662c, 0x663d, 0x664e, 0x6656, 0x666e, 0x6656, 0x66d9, 0x663d,
++ 0x66fa, 0x6702, 0x664e, 0x6702, 0x6713, 0x645a, 0x645a, 0x645a,
++ 0x645a, 0x645a, 0x645a, 0x645a, 0x645a, 0x645a, 0x645a, 0x645a,
++ 0x6eef, 0x6f14, 0x6f29, 0x6f4c, 0x6f6d, 0x662c, 0x645a, 0x662c,
++ 0x6656, 0x645a, 0x6532, 0x65cd, 0x645a, 0x749c, 0x6656, 0x645a,
++ 0x74bc, 0x6656, 0x645a, 0x645a, 0x64bd, 0x646b, 0x645a, 0x74e1,
++ 0x7558, 0x7640, 0x645a, 0x7651, 0x6626, 0x766d, 0x645a, 0x6f82,
++ 0x645a, 0x645a, 0x1078, 0x1332, 0x2100, 0x1079, 0x6465, 0x0f7f,
++ 0x0c7f, 0x147f, 0x137f, 0x157f, 0x007c, 0x6469, 0x6469, 0x6469,
++ 0x649f, 0x1078, 0x1332, 0x0d7e, 0x20a1, 0x020b, 0x1078, 0x6731,
++ 0x7810, 0x2068, 0x20a3, 0x2414, 0x20a3, 0x0018, 0x20a3, 0x0800,
++ 0x683c, 0x20a2, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000,
++ 0x20a3, 0x0000, 0x6850, 0x20a2, 0x6854, 0x20a2, 0x20a3, 0x0000,
++ 0x20a3, 0x0000, 0x60c3, 0x0018, 0x1078, 0x6dfb, 0x0d7f, 0x007c,
++ 0x0d7e, 0x7818, 0x2068, 0x68a0, 0xa082, 0x007e, 0x0048, 0x649c,
++ 0xa085, 0x0001, 0x0d7f, 0x007c, 0xa006, 0x0078, 0x649a, 0x0d7e,
++ 0x20a1, 0x020b, 0x1078, 0x6731, 0x20a3, 0x0500, 0x20a3, 0x0000,
++ 0x7810, 0xa0e8, 0x000f, 0x6808, 0x20a2, 0x680c, 0x20a2, 0x6810,
++ 0x20a2, 0x6814, 0x20a2, 0x6818, 0x20a2, 0x681c, 0x20a2, 0x60c3,
++ 0x0010, 0x1078, 0x6dfb, 0x0d7f, 0x007c, 0x6030, 0x609a, 0x1078,
++ 0x6dfb, 0x007c, 0x20a1, 0x020b, 0x1078, 0x6731, 0x20a3, 0x5200,
++ 0x20a3, 0x0000, 0x0d7e, 0x2069, 0xa652, 0x6804, 0xd084, 0x0040,
++ 0x64dc, 0x6828, 0x20a3, 0x0000, 0x017e, 0x1078, 0x2564, 0x21a2,
++ 0x017f, 0x0d7f, 0x0078, 0x64e1, 0x0d7f, 0x20a3, 0x0000, 0x20a3,
++ 0x0000, 0x20a9, 0x0004, 0x2099, 0xa605, 0x53a6, 0x20a9, 0x0004,
++ 0x2099, 0xa601, 0x53a6, 0x7818, 0xa080, 0x0028, 0x2004, 0xa082,
++ 0x007f, 0x0048, 0x64fb, 0x2001, 0xa61b, 0x20a6, 0x2001, 0xa61c,
++ 0x20a6, 0x0078, 0x6501, 0x20a3, 0x0000, 0x6030, 0xa084, 0x00ff,
++ 0x20a2, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x001c, 0x1078,
++ 0x6dfb, 0x007c, 0x20a1, 0x020b, 0x1078, 0x6731, 0x20a3, 0x0500,
++ 0x20a3, 0x0000, 0x7818, 0xa080, 0x0028, 0x2004, 0xa082, 0x007f,
++ 0x0048, 0x6522, 0x2001, 0xa61b, 0x20a6, 0x2001, 0xa61c, 0x20a6,
++ 0x0078, 0x6528, 0x20a3, 0x0000, 0x6030, 0xa084, 0x00ff, 0x20a2,
++ 0x20a9, 0x0004, 0x2099, 0xa605, 0x53a6, 0x60c3, 0x0010, 0x1078,
++ 0x6dfb, 0x007c, 0x20a1, 0x020b, 0x1078, 0x6731, 0x0c7e, 0x7818,
++ 0x2060, 0x2001, 0x0000, 0x1078, 0x4972, 0x0c7f, 0x7818, 0xa080,
++ 0x0028, 0x2004, 0xa086, 0x007e, 0x00c0, 0x654d, 0x20a3, 0x0400,
++ 0x620c, 0xc2b4, 0x620e, 0x0078, 0x654f, 0x20a3, 0x0300, 0x20a3,
++ 0x0000, 0x7818, 0xa080, 0x0028, 0x2004, 0xa086, 0x007e, 0x00c0,
++ 0x659c, 0x2099, 0xa88d, 0x33a6, 0x9398, 0x33a6, 0x9398, 0x3304,
++ 0xa084, 0x3fff, 0x20a2, 0x9398, 0x33a6, 0x20a3, 0x0000, 0x20a3,
++ 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a9, 0x0004, 0x2099,
++ 0xa605, 0x53a6, 0x20a9, 0x0004, 0x2099, 0xa601, 0x53a6, 0x20a9,
++ 0x0010, 0x20a3, 0x0000, 0x00f0, 0x6579, 0x2099, 0xa895, 0x3304,
++ 0xc0dd, 0x20a2, 0x2001, 0xa672, 0x2004, 0xd0e4, 0x0040, 0x6594,
++ 0x20a3, 0x0000, 0x20a3, 0x0000, 0x9398, 0x9398, 0x9398, 0x33a6,
++ 0x20a9, 0x0004, 0x0078, 0x6596, 0x20a9, 0x0007, 0x20a3, 0x0000,
++ 0x00f0, 0x6596, 0x0078, 0x65bc, 0x2099, 0xa88d, 0x20a9, 0x0008,
++ 0x53a6, 0x20a9, 0x0004, 0x2099, 0xa605, 0x53a6, 0x20a9, 0x0004,
++ 0x2099, 0xa601, 0x53a6, 0x20a9, 0x0008, 0x20a3, 0x0000, 0x00f0,
++ 0x65ad, 0x20a9, 0x0008, 0x20a3, 0x0000, 0x00f0, 0x65b3, 0x2099,
++ 0xa895, 0x20a9, 0x0008, 0x53a6, 0x20a9, 0x0008, 0x20a3, 0x0000,
++ 0x00f0, 0x65be, 0x20a9, 0x000a, 0x20a3, 0x0000, 0x00f0, 0x65c4,
++ 0x60c3, 0x0074, 0x1078, 0x6dfb, 0x007c, 0x20a1, 0x020b, 0x1078,
++ 0x6731, 0x20a3, 0x2010, 0x20a3, 0x0014, 0x20a3, 0x0800, 0x20a3,
++ 0x2000, 0xa006, 0x20a2, 0x20a2, 0x20a2, 0x20a2, 0x20a2, 0x0f7e,
++ 0x2079, 0xa652, 0x7904, 0x0f7f, 0xd1ac, 0x00c0, 0x65e9, 0xa085,
++ 0x0020, 0xd1a4, 0x0040, 0x65ee, 0xa085, 0x0010, 0xa085, 0x0002,
++ 0x0d7e, 0x0078, 0x66b7, 0x20a2, 0x20a3, 0x0000, 0x20a3, 0x0000,
++ 0x60c3, 0x0014, 0x1078, 0x6dfb, 0x007c, 0x20a1, 0x020b, 0x1078,
++ 0x6731, 0x20a3, 0x5000, 0x0078, 0x654f, 0x20a1, 0x020b, 0x1078,
++ 0x6731, 0x20a3, 0x2110, 0x20a3, 0x0014, 0x20a3, 0x0000, 0x20a3,
++ 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3,
++ 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3,
++ 0x0000, 0x60c3, 0x0014, 0x1078, 0x6dfb, 0x007c, 0x20a1, 0x020b,
++ 0x1078, 0x67b9, 0x0078, 0x6630, 0x20a1, 0x020b, 0x1078, 0x67c2,
++ 0x20a3, 0x0200, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000,
++ 0x60c3, 0x0004, 0x1078, 0x6dfb, 0x007c, 0x20a1, 0x020b, 0x1078,
++ 0x67c2, 0x20a3, 0x0100, 0x20a3, 0x0000, 0x20a3, 0x0003, 0x20a3,
++ 0x2a00, 0x60c3, 0x0008, 0x1078, 0x6dfb, 0x007c, 0x20a1, 0x020b,
++ 0x1078, 0x67c2, 0x20a3, 0x0200, 0x0078, 0x654f, 0x20a1, 0x020b,
++ 0x1078, 0x67c2, 0x20a3, 0x0100, 0x20a3, 0x0000, 0x7828, 0xa005,
++ 0x0040, 0x6665, 0x20a2, 0x0078, 0x6667, 0x20a3, 0x0003, 0x7810,
++ 0x20a2, 0x60c3, 0x0008, 0x1078, 0x6dfb, 0x007c, 0x0d7e, 0x20a1,
++ 0x020b, 0x1078, 0x67c2, 0x20a3, 0x0210, 0x20a3, 0x0014, 0x20a3,
++ 0x0800, 0x7818, 0x2068, 0x6894, 0xa086, 0x0014, 0x00c0, 0x6694,
++ 0x6998, 0xa184, 0xc000, 0x00c0, 0x6690, 0xd1ec, 0x0040, 0x668c,
++ 0x20a3, 0x2100, 0x0078, 0x6696, 0x20a3, 0x0100, 0x0078, 0x6696,
++ 0x20a3, 0x0400, 0x0078, 0x6696, 0x20a3, 0x0700, 0xa006, 0x20a2,
++ 0x20a2, 0x20a2, 0x20a2, 0x20a2, 0x0f7e, 0x2079, 0xa652, 0x7904,
++ 0x0f7f, 0xd1ac, 0x00c0, 0x66a6, 0xa085, 0x0020, 0xd1a4, 0x0040,
++ 0x66ab, 0xa085, 0x0010, 0x2009, 0xa674, 0x210c, 0xd184, 0x0040,
++ 0x66b5, 0x699c, 0xd18c, 0x0040, 0x66b7, 0xa085, 0x0002, 0x027e,
++ 0x2009, 0xa672, 0x210c, 0xd1e4, 0x0040, 0x66c5, 0xc0c5, 0xa094,
++ 0x0030, 0xa296, 0x0010, 0x0040, 0x66cf, 0xd1ec, 0x0040, 0x66cf,
++ 0xa094, 0x0030, 0xa296, 0x0010, 0x0040, 0x66cf, 0xc0bd, 0x027f,
++ 0x20a2, 0x20a2, 0x20a2, 0x60c3, 0x0014, 0x1078, 0x6dfb, 0x0d7f,
++ 0x007c, 0x20a1, 0x020b, 0x1078, 0x67c2, 0x20a3, 0x0210, 0x20a3,
++ 0x0014, 0x20a3, 0x0000, 0x20a3, 0x0100, 0x20a3, 0x0000, 0x20a3,
++ 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3,
++ 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x0014, 0x1078,
++ 0x6dfb, 0x007c, 0x20a1, 0x020b, 0x1078, 0x67c2, 0x20a3, 0x0200,
++ 0x0078, 0x64c8, 0x20a1, 0x020b, 0x1078, 0x67c2, 0x20a3, 0x0100,
++ 0x20a3, 0x0000, 0x20a3, 0x0003, 0x20a3, 0x2a00, 0x60c3, 0x0008,
++ 0x1078, 0x6dfb, 0x007c, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x20a1,
++ 0x020b, 0x1078, 0x67c2, 0x20a3, 0x0100, 0x20a3, 0x0000, 0x20a3,
++ 0x000b, 0x20a3, 0x0000, 0x60c3, 0x0008, 0x1078, 0x6dfb, 0x007c,
++ 0x027e, 0x037e, 0x047e, 0x2019, 0x3200, 0x2021, 0x0800, 0x0078,
++ 0x6738, 0x027e, 0x037e, 0x047e, 0x2019, 0x2200, 0x2021, 0x0100,
++ 0x20e1, 0x9080, 0x20e1, 0x4000, 0x7818, 0xa080, 0x0028, 0x2014,
++ 0xa286, 0x007e, 0x00c0, 0x674b, 0xa385, 0x00ff, 0x20a2, 0x20a3,
++ 0xfffe, 0x0078, 0x6780, 0xa286, 0x007f, 0x00c0, 0x6757, 0x0d7e,
++ 0xa385, 0x00ff, 0x20a2, 0x20a3, 0xfffd, 0x0078, 0x676e, 0xd2bc,
++ 0x0040, 0x6776, 0xa286, 0x0080, 0x0d7e, 0x00c0, 0x6766, 0xa385,
++ 0x00ff, 0x20a2, 0x20a3, 0xfffc, 0x0078, 0x676e, 0xa2e8, 0xa735,
++ 0x2d6c, 0x6810, 0xa305, 0x20a2, 0x6814, 0x20a2, 0x2069, 0xa61b,
++ 0x2da6, 0x8d68, 0x2da6, 0x0d7f, 0x0078, 0x6784, 0x0d7e, 0xa2e8,
++ 0xa735, 0x2d6c, 0x6810, 0xa305, 0x20a2, 0x6814, 0x20a2, 0x0d7f,
++ 0x20a3, 0x0000, 0x6230, 0x22a2, 0xa485, 0x0029, 0x20a2, 0x047f,
++ 0x037f, 0x20a3, 0x0000, 0x1078, 0x6dea, 0x22a2, 0x20a3, 0x0000,
++ 0x2fa2, 0x20a3, 0xffff, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x027f,
++ 0x007c, 0x027e, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x20a3, 0x02ff,
++ 0x2011, 0xfffc, 0x22a2, 0x0d7e, 0x2069, 0xa61b, 0x2da6, 0x8d68,
++ 0x2da6, 0x0d7f, 0x20a3, 0x2029, 0x20a3, 0x0000, 0x0078, 0x678b,
++ 0x20a3, 0x0100, 0x20a3, 0x0000, 0x20a3, 0xfc02, 0x20a3, 0x0000,
++ 0x007c, 0x027e, 0x037e, 0x047e, 0x2019, 0x3300, 0x2021, 0x0800,
++ 0x0078, 0x67c9, 0x027e, 0x037e, 0x047e, 0x2019, 0x2300, 0x2021,
++ 0x0100, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x7818, 0xa080, 0x0028,
++ 0x2004, 0xa092, 0x007e, 0x0048, 0x67e6, 0x0d7e, 0xa0e8, 0xa735,
++ 0x2d6c, 0x6810, 0xa305, 0x20a2, 0x6814, 0x20a2, 0x2069, 0xa61b,
++ 0x2da6, 0x8d68, 0x2da6, 0x0d7f, 0x0078, 0x67f4, 0x0d7e, 0xa0e8,
++ 0xa735, 0x2d6c, 0x6810, 0xa305, 0x20a2, 0x6814, 0x20a2, 0x0d7f,
++ 0x20a3, 0x0000, 0x6230, 0x22a2, 0xa485, 0x0098, 0x20a2, 0x20a3,
++ 0x0000, 0x047f, 0x037f, 0x1078, 0x6dea, 0x22a2, 0x20a3, 0x0000,
++ 0x7a08, 0x22a2, 0x2fa2, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x027f,
++ 0x007c, 0x0c7e, 0x0f7e, 0x6004, 0xa08a, 0x0085, 0x1048, 0x1332,
++ 0xa08a, 0x008c, 0x10c8, 0x1332, 0x6118, 0x2178, 0x79a0, 0xd1bc,
++ 0x0040, 0x6827, 0x7900, 0xd1f4, 0x0040, 0x6823, 0x7914, 0xa18c,
++ 0x00ff, 0x0078, 0x682c, 0x2009, 0x0000, 0x0078, 0x682c, 0xa1f8,
++ 0x29c0, 0x2f0c, 0xa18c, 0x00ff, 0x2c78, 0x2061, 0x0100, 0x619a,
++ 0xa082, 0x0085, 0x1079, 0x6837, 0x0f7f, 0x0c7f, 0x007c, 0x6840,
++ 0x684b, 0x6866, 0x683e, 0x683e, 0x683e, 0x6840, 0x1078, 0x1332,
++ 0x147e, 0x20a1, 0x020b, 0x1078, 0x6879, 0x60c3, 0x0000, 0x1078,
++ 0x6dfb, 0x147f, 0x007c, 0x147e, 0x20a1, 0x020b, 0x1078, 0x68ad,
++ 0x20a3, 0x0000, 0x20a3, 0x0000, 0x7808, 0x20a2, 0x7810, 0x20a2,
++ 0x20a3, 0x0000, 0x20a3, 0xffff, 0x20a3, 0x0000, 0x20a3, 0x0000,
++ 0x60c3, 0x000c, 0x1078, 0x6dfb, 0x147f, 0x007c, 0x147e, 0x20a1,
++ 0x020b, 0x1078, 0x68ee, 0x20a3, 0x0003, 0x20a3, 0x0300, 0x20a3,
++ 0x0000, 0x20a3, 0x0000, 0x60c3, 0x0004, 0x1078, 0x6dfb, 0x147f,
++ 0x007c, 0x027e, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x7818, 0xa080,
++ 0x0028, 0x2004, 0xa092, 0x007e, 0x0048, 0x6898, 0x0d7e, 0xa0e8,
++ 0xa735, 0x2d6c, 0x6810, 0xa085, 0x8100, 0x20a2, 0x6814, 0x20a2,
++ 0x2069, 0xa61b, 0x2da6, 0x8d68, 0x2da6, 0x0d7f, 0x0078, 0x68a7,
++ 0x0d7e, 0xa0e8, 0xa735, 0x2d6c, 0x6810, 0xa085, 0x8100, 0x20a2,
++ 0x6814, 0x20a2, 0x0d7f, 0x20a3, 0x0000, 0x6230, 0x22a2, 0x20a3,
++ 0x0009, 0x20a3, 0x0000, 0x0078, 0x678b, 0x027e, 0x20e1, 0x9080,
++ 0x20e1, 0x4000, 0x7818, 0xa080, 0x0028, 0x2004, 0xa092, 0x007e,
++ 0x0048, 0x68cc, 0x0d7e, 0xa0e8, 0xa735, 0x2d6c, 0x6810, 0xa085,
++ 0x8400, 0x20a2, 0x6814, 0x20a2, 0x2069, 0xa61b, 0x2da6, 0x8d68,
++ 0x2da6, 0x0d7f, 0x0078, 0x68db, 0x0d7e, 0xa0e8, 0xa735, 0x2d6c,
++ 0x6810, 0xa085, 0x8400, 0x20a2, 0x6814, 0x20a2, 0x0d7f, 0x20a3,
++ 0x0000, 0x6230, 0x22a2, 0x20a3, 0x0099, 0x20a3, 0x0000, 0x1078,
++ 0x6dea, 0x22a2, 0x20a3, 0x0000, 0x7a08, 0x22a2, 0x7a10, 0x22a2,
++ 0x20a3, 0x0000, 0x20a3, 0x0000, 0x027f, 0x007c, 0x027e, 0x20e1,
++ 0x9080, 0x20e1, 0x4000, 0x7818, 0xa080, 0x0028, 0x2004, 0xa092,
++ 0x007e, 0x0048, 0x690d, 0x0d7e, 0xa0e8, 0xa735, 0x2d6c, 0x6810,
++ 0xa085, 0x8500, 0x20a2, 0x6814, 0x20a2, 0x2069, 0xa61b, 0x2da6,
++ 0x8d68, 0x2da6, 0x0d7f, 0x0078, 0x691c, 0x0d7e, 0xa0e8, 0xa735,
++ 0x2d6c, 0x6810, 0xa085, 0x8500, 0x20a2, 0x6814, 0x20a2, 0x0d7f,
++ 0x20a3, 0x0000, 0x6230, 0x22a2, 0x20a3, 0x0099, 0x20a3, 0x0000,
++ 0x0078, 0x68df, 0x0c7e, 0x0f7e, 0x2c78, 0x7804, 0xa08a, 0x0040,
++ 0x1048, 0x1332, 0xa08a, 0x0053, 0x10c8, 0x1332, 0x7918, 0x2160,
++ 0x61a0, 0xd1bc, 0x0040, 0x6941, 0x6100, 0xd1f4, 0x0040, 0x693d,
++ 0x6114, 0xa18c, 0x00ff, 0x0078, 0x6946, 0x2009, 0x0000, 0x0078,
++ 0x6946, 0xa1e0, 0x29c0, 0x2c0c, 0xa18c, 0x00ff, 0x2061, 0x0100,
++ 0x619a, 0xa082, 0x0040, 0x1079, 0x6950, 0x0f7f, 0x0c7f, 0x007c,
++ 0x6965, 0x6a73, 0x6a14, 0x6c27, 0x6963, 0x6963, 0x6963, 0x6963,
++ 0x6963, 0x6963, 0x6963, 0x714c, 0x715d, 0x716e, 0x717f, 0x6963,
++ 0x767e, 0x6963, 0x713b, 0x1078, 0x1332, 0x0d7e, 0x157e, 0x147e,
++ 0x780b, 0xffff, 0x20a1, 0x020b, 0x1078, 0x69d0, 0x7910, 0x2168,
++ 0x6948, 0x7922, 0x21a2, 0xa016, 0x22a2, 0x22a2, 0x22a2, 0x694c,
++ 0xa184, 0x000f, 0x00c0, 0x6980, 0x2001, 0x0005, 0x0078, 0x698a,
++ 0xd184, 0x0040, 0x6987, 0x2001, 0x0004, 0x0078, 0x698a, 0xa084,
++ 0x0006, 0x8004, 0x017e, 0x2008, 0x7830, 0xa084, 0x00ff, 0x8007,
++ 0xa105, 0x017f, 0x20a2, 0xd1ac, 0x0040, 0x699a, 0x20a3, 0x0002,
++ 0x0078, 0x69a6, 0xd1b4, 0x0040, 0x69a1, 0x20a3, 0x0001, 0x0078,
++ 0x69a6, 0x20a3, 0x0000, 0x2230, 0x0078, 0x69a8, 0x6a80, 0x6e7c,
++ 0x20a9, 0x0008, 0xad80, 0x0017, 0x200c, 0x810f, 0x21a2, 0x8000,
++ 0x00f0, 0x69ac, 0x22a2, 0x26a2, 0x60c3, 0x0020, 0x20e1, 0x9080,
++ 0x6014, 0xa084, 0x0004, 0xa085, 0x0009, 0x6016, 0x2001, 0xa8cd,
++ 0x2003, 0x07d0, 0x2001, 0xa8cc, 0x2003, 0x0009, 0x2001, 0xa8d2,
++ 0x2003, 0x0002, 0x1078, 0x158c, 0x147f, 0x157f, 0x0d7f, 0x007c,
++ 0x20e1, 0x9080, 0x20e1, 0x4000, 0x7a18, 0xa280, 0x0023, 0x2014,
++ 0x8210, 0xa294, 0x00ff, 0x2202, 0x8217, 0x7818, 0xa080, 0x0028,
++ 0x2004, 0xd0bc, 0x0040, 0x69f6, 0x0d7e, 0xa0e8, 0xa735, 0x2d6c,
++ 0x6810, 0xa085, 0x0600, 0x20a2, 0x6814, 0x20a2, 0x2069, 0xa61b,
++ 0x2da6, 0x8d68, 0x2da6, 0x0d7f, 0x0078, 0x6a05, 0x0d7e, 0xa0e8,
++ 0xa735, 0x2d6c, 0x6810, 0xa085, 0x0600, 0x20a2, 0x6814, 0x20a2,
++ 0x0d7f, 0x20a3, 0x0000, 0x6130, 0x21a2, 0x20a3, 0x0829, 0x20a3,
++ 0x0000, 0x22a2, 0x20a3, 0x0000, 0x2fa2, 0x20a3, 0xffff, 0x20a3,
++ 0x0000, 0x20a3, 0x0000, 0x007c, 0x0d7e, 0x157e, 0x137e, 0x147e,
++ 0x20a1, 0x020b, 0x1078, 0x6a34, 0x7810, 0x2068, 0x6860, 0x20a2,
++ 0x685c, 0x20a2, 0x6880, 0x20a2, 0x687c, 0x20a2, 0xa006, 0x20a2,
++ 0x20a2, 0x20a2, 0x20a2, 0x60c3, 0x000c, 0x1078, 0x6dfb, 0x147f,
++ 0x137f, 0x157f, 0x0d7f, 0x007c, 0x027e, 0x20e1, 0x9080, 0x20e1,
++ 0x4000, 0x7818, 0xa080, 0x0028, 0x2004, 0xd0bc, 0x0040, 0x6a52,
++ 0x0d7e, 0xa0e8, 0xa735, 0x2d6c, 0x6810, 0xa085, 0x0500, 0x20a2,
++ 0x6814, 0x20a2, 0x2069, 0xa61b, 0x2da6, 0x8d68, 0x2da6, 0x0d7f,
++ 0x0078, 0x6a61, 0x0d7e, 0xa0e8, 0xa735, 0x2d6c, 0x6810, 0xa085,
++ 0x0500, 0x20a2, 0x6814, 0x20a2, 0x0d7f, 0x20a3, 0x0000, 0x6230,
++ 0x22a2, 0x20a3, 0x0889, 0x20a3, 0x0000, 0x1078, 0x6dea, 0x22a2,
++ 0x20a3, 0x0000, 0x7a08, 0x22a2, 0x2fa2, 0x20a3, 0x0000, 0x20a3,
++ 0x0000, 0x027f, 0x007c, 0x0d7e, 0x157e, 0x137e, 0x147e, 0x7810,
++ 0xa0ec, 0xf000, 0x0040, 0x6a8b, 0xa06d, 0x1078, 0x495f, 0x0040,
++ 0x6a8b, 0x684c, 0xa084, 0x2020, 0xa086, 0x2020, 0x00c0, 0x6a8b,
++ 0x7824, 0xc0cd, 0x7826, 0x20a1, 0x020b, 0x1078, 0x6be0, 0xa016,
++ 0x22a2, 0x22a2, 0x22a2, 0x22a2, 0x22a2, 0x7810, 0xa084, 0xf000,
++ 0x00c0, 0x6aa2, 0x7810, 0xa084, 0x0700, 0x8007, 0x1079, 0x6aaa,
++ 0x0078, 0x6aa5, 0xa006, 0x1079, 0x6aaa, 0x147f, 0x137f, 0x157f,
++ 0x0d7f, 0x007c, 0x6ab4, 0x6b4c, 0x6b57, 0x6b81, 0x6b95, 0x6bb1,
++ 0x6bbc, 0x6ab2, 0x1078, 0x1332, 0x017e, 0x037e, 0x694c, 0xa18c,
++ 0x0003, 0x0040, 0x6abf, 0xa186, 0x0003, 0x00c0, 0x6ace, 0x6b78,
++ 0x7824, 0xd0cc, 0x0040, 0x6ac5, 0xc3e5, 0x23a2, 0x6868, 0x20a2,
++ 0x6864, 0x20a2, 0x037f, 0x017f, 0x0078, 0x6b8c, 0xa186, 0x0001,
++ 0x10c0, 0x1332, 0x6b78, 0x7824, 0xd0cc, 0x0040, 0x6ad8, 0xc3e5,
++ 0x23a2, 0x6868, 0x20a2, 0x6864, 0x20a2, 0x22a2, 0x6874, 0x20a2,
++ 0x22a2, 0x687c, 0x20a2, 0x2009, 0x0018, 0xa384, 0x0300, 0x0040,
++ 0x6b46, 0xd3c4, 0x0040, 0x6aee, 0x687c, 0xa108, 0xd3cc, 0x0040,
++ 0x6af3, 0x6874, 0xa108, 0x157e, 0x20a9, 0x000d, 0xad80, 0x0020,
++ 0x201c, 0x831f, 0x23a2, 0x8000, 0x00f0, 0x6af8, 0x157f, 0x22a2,
++ 0x22a2, 0x22a2, 0xa184, 0x0003, 0x0040, 0x6b46, 0x20a1, 0x020b,
++ 0x20e1, 0x9080, 0x20e1, 0x4000, 0x007e, 0x7818, 0xa080, 0x0028,
++ 0x2004, 0xd0bc, 0x0040, 0x6b26, 0x0d7e, 0xa0e8, 0xa735, 0x2d6c,
++ 0x6810, 0xa085, 0x0700, 0x20a2, 0x6814, 0x20a2, 0x2069, 0xa61b,
++ 0x2da6, 0x8d68, 0x2da6, 0x0d7f, 0x0078, 0x6b35, 0x0d7e, 0xa0e8,
++ 0xa735, 0x2d6c, 0x6810, 0xa085, 0x0700, 0x20a2, 0x6814, 0x20a2,
++ 0x0d7f, 0x20a3, 0x0000, 0x6230, 0x22a2, 0x007f, 0x7b24, 0xd3cc,
++ 0x0040, 0x6b3e, 0x20a3, 0x0889, 0x0078, 0x6b40, 0x20a3, 0x0898,
++ 0x20a2, 0x1078, 0x6dea, 0x22a2, 0x20a3, 0x0000, 0x61c2, 0x037f,
++ 0x017f, 0x1078, 0x6dfb, 0x007c, 0x2011, 0x0008, 0x7824, 0xd0cc,
++ 0x0040, 0x6b53, 0xc2e5, 0x22a2, 0xa016, 0x0078, 0x6b8a, 0x2011,
++ 0x0302, 0x7824, 0xd0cc, 0x0040, 0x6b5e, 0xc2e5, 0x22a2, 0xa016,
++ 0x22a2, 0x22a2, 0x22a2, 0x20a3, 0x0012, 0x22a2, 0x20a3, 0x0008,
++ 0x22a2, 0x22a2, 0x22a2, 0x22a2, 0x20a3, 0x7000, 0x20a3, 0x0500,
++ 0x22a2, 0x20a3, 0x000a, 0x22a2, 0x22a2, 0x20a3, 0x2500, 0x22a2,
++ 0x22a2, 0x22a2, 0x22a2, 0x22a2, 0x60c3, 0x0032, 0x1078, 0x6dfb,
++ 0x007c, 0x2011, 0x0028, 0x7824, 0xd0cc, 0x0040, 0x6b88, 0xc2e5,
++ 0x22a2, 0xa016, 0x22a2, 0x22a2, 0x22a2, 0x22a2, 0x22a2, 0x22a2,
++ 0x60c3, 0x0018, 0x1078, 0x6dfb, 0x007c, 0x2011, 0x0100, 0x7824,
++ 0xd0cc, 0x0040, 0x6b9c, 0xc2e5, 0x22a2, 0xa016, 0x22a2, 0x22a2,
++ 0x22a2, 0x22a2, 0x22a2, 0x20a3, 0x0008, 0x22a2, 0x7834, 0xa084,
++ 0x00ff, 0x20a2, 0x22a2, 0x22a2, 0x60c3, 0x0020, 0x1078, 0x6dfb,
++ 0x007c, 0x2011, 0x0008, 0x7824, 0xd0cc, 0x0040, 0x6bb8, 0xc2e5,
++ 0x22a2, 0xa016, 0x0078, 0x6b8a, 0x037e, 0x7b10, 0xa384, 0xff00,
++ 0x7812, 0xa384, 0x00ff, 0x8001, 0x00c0, 0x6bcf, 0x7824, 0xd0cc,
++ 0x0040, 0x6bcb, 0xc2e5, 0x22a2, 0x037f, 0x0078, 0x6b8a, 0x047e,
++ 0x2021, 0x0800, 0x007e, 0x7824, 0xd0cc, 0x007f, 0x0040, 0x6bd9,
++ 0xc4e5, 0x24a2, 0x047f, 0x22a2, 0x20a2, 0x037f, 0x0078, 0x6b8c,
++ 0x027e, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x7818, 0xa080, 0x0028,
++ 0x2004, 0xd0bc, 0x0040, 0x6bfe, 0x0d7e, 0xa0e8, 0xa735, 0x2d6c,
++ 0x6810, 0xa085, 0x0700, 0x20a2, 0x6814, 0x20a2, 0x2069, 0xa61b,
++ 0x2da6, 0x8d68, 0x2da6, 0x0d7f, 0x0078, 0x6c0d, 0x0d7e, 0xa0e8,
++ 0xa735, 0x2d6c, 0x6810, 0xa085, 0x0700, 0x20a2, 0x6814, 0x20a2,
++ 0x0d7f, 0x20a3, 0x0000, 0x6230, 0x22a2, 0x7824, 0xd0cc, 0x0040,
++ 0x6c15, 0x20a3, 0x0889, 0x0078, 0x6c17, 0x20a3, 0x0898, 0x20a3,
++ 0x0000, 0x1078, 0x6dea, 0x22a2, 0x20a3, 0x0000, 0x7a08, 0x22a2,
++ 0x2fa2, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x027f, 0x007c, 0x0d7e,
++ 0x157e, 0x137e, 0x147e, 0x017e, 0x037e, 0x7810, 0xa084, 0x0700,
++ 0x8007, 0x1079, 0x6c3a, 0x037f, 0x017f, 0x147f, 0x137f, 0x157f,
++ 0x0d7f, 0x007c, 0x6c42, 0x6c42, 0x6c44, 0x6c42, 0x6c42, 0x6c42,
++ 0x6c69, 0x6c42, 0x1078, 0x1332, 0x7910, 0xa18c, 0xf8ff, 0xa18d,
++ 0x0600, 0x7912, 0x20a1, 0x020b, 0x2009, 0x0003, 0x1078, 0x6c73,
++ 0x0d7e, 0x2069, 0xa652, 0x6804, 0xd0bc, 0x0040, 0x6c5e, 0x682c,
++ 0xa084, 0x00ff, 0x8007, 0x20a2, 0x0078, 0x6c60, 0x20a3, 0x3f00,
++ 0x0d7f, 0x22a2, 0x22a2, 0x22a2, 0x60c3, 0x0001, 0x1078, 0x6dfb,
++ 0x007c, 0x20a1, 0x020b, 0x2009, 0x0003, 0x1078, 0x6c73, 0x20a3,
++ 0x7f00, 0x0078, 0x6c61, 0x027e, 0x20e1, 0x9080, 0x20e1, 0x4000,
++ 0x7818, 0xa080, 0x0028, 0x2004, 0xd0bc, 0x0040, 0x6c91, 0x0d7e,
++ 0xa0e8, 0xa735, 0x2d6c, 0x6810, 0xa085, 0x0100, 0x20a2, 0x6814,
++ 0x20a2, 0x2069, 0xa61b, 0x2da6, 0x8d68, 0x2da6, 0x0d7f, 0x0078,
++ 0x6ca0, 0x0d7e, 0xa0e8, 0xa735, 0x2d6c, 0x6810, 0xa085, 0x0100,
++ 0x20a2, 0x6814, 0x20a2, 0x0d7f, 0x20a3, 0x0000, 0x6230, 0x22a2,
++ 0x20a3, 0x0888, 0xa18d, 0x0008, 0x21a2, 0x1078, 0x6dea, 0x22a2,
++ 0x20a3, 0x0000, 0x7a08, 0x22a2, 0x2fa2, 0x20a3, 0x0000, 0x20a3,
++ 0x0000, 0x027f, 0x007c, 0x0e7e, 0x0d7e, 0x0c7e, 0x057e, 0x047e,
++ 0x037e, 0x2061, 0x0100, 0x2071, 0xa600, 0x6130, 0x7818, 0x2068,
++ 0x68a0, 0x2028, 0xd0bc, 0x00c0, 0x6cca, 0x6910, 0x6a14, 0x6430,
++ 0x0078, 0x6cce, 0x6910, 0x6a14, 0x736c, 0x7470, 0x781c, 0xa086,
++ 0x0006, 0x0040, 0x6d2d, 0xd5bc, 0x0040, 0x6cde, 0xa185, 0x0100,
++ 0x6062, 0x6266, 0x636a, 0x646e, 0x0078, 0x6ce5, 0xa185, 0x0100,
++ 0x6062, 0x6266, 0x606b, 0x0000, 0x646e, 0x6073, 0x0809, 0x6077,
++ 0x0008, 0x688c, 0x8000, 0xa084, 0x00ff, 0x688e, 0x8007, 0x607a,
++ 0x607f, 0x0000, 0x2f00, 0x6082, 0x7808, 0x6086, 0x7810, 0x2070,
++ 0x7014, 0x608a, 0x7010, 0x608e, 0x700c, 0x60c6, 0x7008, 0x60ca,
++ 0x686c, 0x60ce, 0x60ab, 0x0036, 0x60af, 0x95d5, 0x60d7, 0x0000,
++ 0xa582, 0x0080, 0x0048, 0x6d17, 0x6a00, 0xd2f4, 0x0040, 0x6d15,
++ 0x6a14, 0xa294, 0x00ff, 0x0078, 0x6d17, 0x2011, 0x0000, 0x629e,
++ 0x6017, 0x0016, 0x2009, 0x07d0, 0x60c4, 0xa084, 0xfff0, 0xa005,
++ 0x0040, 0x6d24, 0x2009, 0x1b58, 0x1078, 0x5ad0, 0x037f, 0x047f,
++ 0x057f, 0x0c7f, 0x0d7f, 0x0e7f, 0x007c, 0x7810, 0x2070, 0x704c,
++ 0xa084, 0x0003, 0xa086, 0x0002, 0x0040, 0x6d85, 0xd5bc, 0x0040,
++ 0x6d41, 0xa185, 0x0100, 0x6062, 0x6266, 0x636a, 0x646e, 0x0078,
++ 0x6d48, 0xa185, 0x0100, 0x6062, 0x6266, 0x606b, 0x0000, 0x646e,
++ 0x6073, 0x0880, 0x6077, 0x0008, 0x688c, 0x8000, 0xa084, 0x00ff,
++ 0x688e, 0x8007, 0x607a, 0x607f, 0x0000, 0x2f00, 0x6086, 0x7808,
++ 0x6082, 0x7060, 0x608a, 0x705c, 0x608e, 0x7080, 0x60c6, 0x707c,
++ 0x60ca, 0x707c, 0x792c, 0xa108, 0x792e, 0x7080, 0x7928, 0xa109,
++ 0x792a, 0x686c, 0x60ce, 0x60ab, 0x0036, 0x60af, 0x95d5, 0x60d7,
++ 0x0000, 0xa582, 0x0080, 0x0048, 0x6d80, 0x6a00, 0xd2f4, 0x0040,
++ 0x6d7e, 0x6a14, 0xa294, 0x00ff, 0x0078, 0x6d80, 0x2011, 0x0000,
++ 0x629e, 0x6017, 0x0012, 0x0078, 0x6d1a, 0xd5bc, 0x0040, 0x6d90,
++ 0xa185, 0x0700, 0x6062, 0x6266, 0x636a, 0x646e, 0x0078, 0x6d97,
++ 0xa185, 0x0700, 0x6062, 0x6266, 0x606b, 0x0000, 0x646e, 0x1078,
++ 0x495f, 0x0040, 0x6dad, 0x0d7e, 0x7810, 0xa06d, 0x684c, 0x0d7f,
++ 0xa084, 0x2020, 0xa086, 0x2020, 0x00c0, 0x6dad, 0x7824, 0xc0cd,
++ 0x7826, 0x6073, 0x0889, 0x0078, 0x6daf, 0x6073, 0x0898, 0x6077,
++ 0x0000, 0x688c, 0x8000, 0xa084, 0x00ff, 0x688e, 0x8007, 0x607a,
++ 0x607f, 0x0000, 0x2f00, 0x6086, 0x7808, 0x6082, 0x7014, 0x608a,
++ 0x7010, 0x608e, 0x700c, 0x60c6, 0x7008, 0x60ca, 0x686c, 0x60ce,
++ 0x60ab, 0x0036, 0x60af, 0x95d5, 0x60d7, 0x0000, 0xa582, 0x0080,
++ 0x0048, 0x6ddd, 0x6a00, 0xd2f4, 0x0040, 0x6ddb, 0x6a14, 0xa294,
++ 0x00ff, 0x0078, 0x6ddd, 0x2011, 0x0000, 0x629e, 0x7824, 0xd0cc,
++ 0x0040, 0x6de6, 0x6017, 0x0016, 0x0078, 0x6d1a, 0x6017, 0x0012,
++ 0x0078, 0x6d1a, 0x7a18, 0xa280, 0x0023, 0x2014, 0x8210, 0xa294,
++ 0x00ff, 0x2202, 0x8217, 0x007c, 0x0d7e, 0x2069, 0xa8b1, 0x6843,
++ 0x0001, 0x0d7f, 0x007c, 0x20e1, 0x9080, 0x60a3, 0x0056, 0x60a7,
++ 0x9575, 0x1078, 0x6e06, 0x1078, 0x5ac0, 0x007c, 0x007e, 0x6014,
++ 0xa084, 0x0004, 0xa085, 0x0009, 0x6016, 0x007f, 0x007c, 0x007e,
++ 0x0c7e, 0x2061, 0x0100, 0x6014, 0xa084, 0x0004, 0xa085, 0x0008,
++ 0x6016, 0x0c7f, 0x007f, 0x007c, 0x0c7e, 0x0d7e, 0x017e, 0x027e,
++ 0x2061, 0x0100, 0x2069, 0x0140, 0x6904, 0xa194, 0x4000, 0x0040,
++ 0x6e59, 0x1078, 0x6e0f, 0x6803, 0x1000, 0x6803, 0x0000, 0x0c7e,
++ 0x2061, 0xa8b1, 0x6128, 0xa192, 0x00c8, 0x00c8, 0x6e44, 0x8108,
++ 0x612a, 0x6124, 0x0c7f, 0x81ff, 0x0040, 0x6e54, 0x1078, 0x5ac0,
++ 0x1078, 0x6e06, 0x0078, 0x6e54, 0x6124, 0xa1e5, 0x0000, 0x0040,
++ 0x6e51, 0x1078, 0xa5c4, 0x1078, 0x5acb, 0x2009, 0x0014, 0x1078,
++ 0x775c, 0x0c7f, 0x0078, 0x6e54, 0x027f, 0x017f, 0x0d7f, 0x0c7f,
++ 0x007c, 0x2001, 0xa8cd, 0x2004, 0xa005, 0x00c0, 0x6e54, 0x0c7e,
++ 0x2061, 0xa8b1, 0x6128, 0xa192, 0x0003, 0x00c8, 0x6e44, 0x8108,
++ 0x612a, 0x0c7f, 0x1078, 0x5ac0, 0x1078, 0x4224, 0x0078, 0x6e54,
++ 0x0c7e, 0x0d7e, 0x0e7e, 0x017e, 0x027e, 0x1078, 0x5ad8, 0x2071,
++ 0xa8b1, 0x713c, 0x81ff, 0x0040, 0x6e9a, 0x2061, 0x0100, 0x2069,
++ 0x0140, 0x6904, 0xa194, 0x4000, 0x0040, 0x6ea0, 0x6803, 0x1000,
++ 0x6803, 0x0000, 0x037e, 0x2019, 0x0001, 0x1078, 0x7058, 0x037f,
++ 0x713c, 0x2160, 0x1078, 0xa5c4, 0x2009, 0x004a, 0x1078, 0x775c,
++ 0x0078, 0x6e9a, 0x027f, 0x017f, 0x0e7f, 0x0d7f, 0x0c7f, 0x007c,
++ 0x0078, 0x6e8a, 0x0e7e, 0x2071, 0xa8b1, 0x7048, 0xd084, 0x0040,
++ 0x6ebc, 0x713c, 0x81ff, 0x0040, 0x6ebc, 0x2071, 0x0100, 0xa188,
++ 0x0007, 0x210c, 0xa18e, 0x0006, 0x00c0, 0x6eba, 0x7017, 0x0012,
++ 0x0078, 0x6ebc, 0x7017, 0x0016, 0x0e7f, 0x007c, 0x0e7e, 0x0d7e,
++ 0x0c7e, 0x067e, 0x057e, 0x047e, 0x007e, 0x127e, 0x2091, 0x8000,
++ 0x6018, 0x2068, 0x6ca0, 0x2071, 0xa8b1, 0x7018, 0x2068, 0x8dff,
++ 0x0040, 0x6ee6, 0x68a0, 0xa406, 0x0040, 0x6eda, 0x6854, 0x2068,
++ 0x0078, 0x6ecf, 0x6010, 0x2060, 0x643c, 0x6540, 0x6648, 0x2d60,
++ 0x1078, 0x4736, 0x0040, 0x6ee6, 0xa085, 0x0001, 0x127f, 0x007f,
++ 0x047f, 0x057f, 0x067f, 0x0c7f, 0x0d7f, 0x0e7f, 0x007c, 0x20a1,
++ 0x020b, 0x1078, 0x6731, 0x20a3, 0x1200, 0x20a3, 0x0000, 0x20a3,
++ 0x0000, 0x781c, 0xa086, 0x0004, 0x00c0, 0x6f01, 0x6098, 0x0078,
++ 0x6f02, 0x6030, 0x20a2, 0x7834, 0x20a2, 0x7838, 0x20a2, 0x20a9,
++ 0x0010, 0xa006, 0x20a2, 0x00f0, 0x6f0a, 0x20a2, 0x20a2, 0x60c3,
++ 0x002c, 0x1078, 0x6dfb, 0x007c, 0x157e, 0x147e, 0x20a1, 0x020b,
++ 0x1078, 0x6731, 0x20a3, 0x0f00, 0x20a3, 0x0000, 0x20a3, 0x0000,
++ 0x7808, 0x20a2, 0x60c3, 0x0008, 0x1078, 0x6dfb, 0x147f, 0x157f,
++ 0x007c, 0x157e, 0x147e, 0x20a1, 0x020b, 0x1078, 0x67c2, 0x20a3,
++ 0x0200, 0x20a3, 0x0000, 0x20a9, 0x0006, 0x2011, 0xa640, 0x2019,
++ 0xa641, 0x23a6, 0x22a6, 0xa398, 0x0002, 0xa290, 0x0002, 0x00f0,
++ 0x6f39, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x001c, 0x1078,
++ 0x6dfb, 0x147f, 0x157f, 0x007c, 0x157e, 0x147e, 0x017e, 0x027e,
++ 0x20a1, 0x020b, 0x1078, 0x6799, 0x1078, 0x67b0, 0x7810, 0xa080,
++ 0x0000, 0x2004, 0xa080, 0x0015, 0x2098, 0x7808, 0xa088, 0x0002,
++ 0x21a8, 0x53a6, 0xa080, 0x0004, 0x8003, 0x60c2, 0x1078, 0x6dfb,
++ 0x027f, 0x017f, 0x147f, 0x157f, 0x007c, 0x157e, 0x147e, 0x20a1,
++ 0x020b, 0x1078, 0x6731, 0x20a3, 0x6200, 0x20a3, 0x0000, 0x20a3,
++ 0x0000, 0x7808, 0x20a2, 0x60c3, 0x0008, 0x1078, 0x6dfb, 0x147f,
++ 0x157f, 0x007c, 0x157e, 0x147e, 0x017e, 0x027e, 0x20a1, 0x020b,
++ 0x1078, 0x6731, 0x7810, 0xa080, 0x0000, 0x2004, 0xa080, 0x0017,
++ 0x2098, 0x7808, 0xa088, 0x0002, 0x21a8, 0x53a6, 0x8003, 0x60c2,
++ 0x1078, 0x6dfb, 0x027f, 0x017f, 0x147f, 0x157f, 0x007c, 0x0e7e,
++ 0x0c7e, 0x007e, 0x127e, 0x2091, 0x8000, 0x2071, 0xa8b1, 0x700c,
++ 0x2060, 0x8cff, 0x0040, 0x6fbb, 0x1078, 0x8f00, 0x00c0, 0x6fb2,
++ 0x1078, 0x7c83, 0x600c, 0x007e, 0x1078, 0x772d, 0x1078, 0x7233,
++ 0x0c7f, 0x0078, 0x6fa9, 0x700f, 0x0000, 0x700b, 0x0000, 0x127f,
++ 0x007f, 0x0c7f, 0x0e7f, 0x007c, 0x127e, 0x157e, 0x0f7e, 0x0e7e,
++ 0x0d7e, 0x0c7e, 0x027e, 0x017e, 0x007e, 0x2091, 0x8000, 0x2069,
++ 0x0100, 0x2079, 0x0140, 0x2071, 0xa8b1, 0x7024, 0x2060, 0x8cff,
++ 0x0040, 0x7014, 0x1078, 0x6e0f, 0x68c3, 0x0000, 0x1078, 0x5acb,
++ 0x2009, 0x0013, 0x1078, 0x775c, 0x20a9, 0x01f4, 0x6824, 0xd094,
++ 0x0040, 0x6ff7, 0x6827, 0x0004, 0x7804, 0xa084, 0x4000, 0x0040,
++ 0x7009, 0x7803, 0x1000, 0x7803, 0x0000, 0x0078, 0x7009, 0xd084,
++ 0x0040, 0x6ffe, 0x6827, 0x0001, 0x0078, 0x7000, 0x00f0, 0x6fe6,
++ 0x7804, 0xa084, 0x1000, 0x0040, 0x7009, 0x7803, 0x0100, 0x7803,
++ 0x0000, 0x6824, 0x007f, 0x017f, 0x027f, 0x0c7f, 0x0d7f, 0x0e7f,
++ 0x0f7f, 0x157f, 0x127f, 0x007c, 0x2001, 0xa600, 0x2004, 0xa096,
++ 0x0001, 0x0040, 0x704e, 0xa096, 0x0004, 0x0040, 0x704e, 0x1078,
++ 0x5acb, 0x6817, 0x0008, 0x68c3, 0x0000, 0x2011, 0x41dc, 0x1078,
++ 0x5a45, 0x20a9, 0x01f4, 0x6824, 0xd094, 0x0040, 0x703c, 0x6827,
++ 0x0004, 0x7804, 0xa084, 0x4000, 0x0040, 0x704e, 0x7803, 0x1000,
++ 0x7803, 0x0000, 0x0078, 0x704e, 0xd084, 0x0040, 0x7043, 0x6827,
++ 0x0001, 0x0078, 0x7045, 0x00f0, 0x702b, 0x7804, 0xa084, 0x1000,
++ 0x0040, 0x704e, 0x7803, 0x0100, 0x7803, 0x0000, 0x007f, 0x017f,
++ 0x027f, 0x0c7f, 0x0d7f, 0x0e7f, 0x0f7f, 0x157f, 0x127f, 0x007c,
++ 0x127e, 0x157e, 0x0f7e, 0x0e7e, 0x0d7e, 0x0c7e, 0x027e, 0x017e,
++ 0x007e, 0x2091, 0x8000, 0x2069, 0x0100, 0x2079, 0x0140, 0x2071,
++ 0xa8b1, 0x703c, 0x2060, 0x8cff, 0x0040, 0x70d6, 0x68af, 0x95f5,
++ 0x6817, 0x0010, 0x2009, 0x00fa, 0x8109, 0x00c0, 0x7074, 0x68c7,
++ 0x0000, 0x68cb, 0x0008, 0x1078, 0x5ad8, 0x1078, 0x1f7e, 0x047e,
++ 0x057e, 0x2009, 0x017f, 0x212c, 0x200b, 0x00a5, 0x2021, 0x0169,
++ 0x2404, 0xa084, 0x000f, 0xa086, 0x0004, 0x00c0, 0x70a5, 0x68c7,
++ 0x0000, 0x68cb, 0x0008, 0x0e7e, 0x0f7e, 0x2079, 0x0020, 0x2071,
++ 0xa908, 0x6814, 0xa084, 0x0004, 0xa085, 0x0012, 0x6816, 0x7803,
++ 0x0008, 0x7003, 0x0000, 0x0f7f, 0x0e7f, 0x250a, 0x057f, 0x047f,
++ 0xa39d, 0x0000, 0x00c0, 0x70b0, 0x2009, 0x0049, 0x1078, 0x775c,
++ 0x20a9, 0x03e8, 0x6824, 0xd094, 0x0040, 0x70c3, 0x6827, 0x0004,
++ 0x7804, 0xa084, 0x4000, 0x0040, 0x70d5, 0x7803, 0x1000, 0x7803,
++ 0x0000, 0x0078, 0x70d5, 0xd08c, 0x0040, 0x70ca, 0x6827, 0x0002,
++ 0x0078, 0x70cc, 0x00f0, 0x70b2, 0x7804, 0xa084, 0x1000, 0x0040,
++ 0x70d5, 0x7803, 0x0100, 0x7803, 0x0000, 0x6824, 0x007f, 0x017f,
++ 0x027f, 0x0c7f, 0x0d7f, 0x0e7f, 0x0f7f, 0x157f, 0x127f, 0x007c,
++ 0x0d7e, 0x127e, 0x2091, 0x8000, 0x2069, 0xa8b1, 0x6a06, 0x127f,
++ 0x0d7f, 0x007c, 0x0d7e, 0x127e, 0x2091, 0x8000, 0x2069, 0xa8b1,
++ 0x6a32, 0x127f, 0x0d7f, 0x007c, 0x0f7e, 0x0e7e, 0x0c7e, 0x067e,
++ 0x007e, 0x127e, 0x2071, 0xa8b1, 0x7614, 0x2660, 0x2678, 0x2091,
++ 0x8000, 0x8cff, 0x0040, 0x7134, 0x601c, 0xa206, 0x00c0, 0x712f,
++ 0x7014, 0xac36, 0x00c0, 0x710e, 0x660c, 0x7616, 0x7010, 0xac36,
++ 0x00c0, 0x711c, 0x2c00, 0xaf36, 0x0040, 0x711a, 0x2f00, 0x7012,
++ 0x0078, 0x711c, 0x7013, 0x0000, 0x660c, 0x067e, 0x2c00, 0xaf06,
++ 0x0040, 0x7125, 0x7e0e, 0x0078, 0x7126, 0x2678, 0x600f, 0x0000,
++ 0x1078, 0x8ec6, 0x1078, 0x7233, 0x0c7f, 0x0078, 0x7101, 0x2c78,
++ 0x600c, 0x2060, 0x0078, 0x7101, 0x127f, 0x007f, 0x067f, 0x0c7f,
++ 0x0e7f, 0x0f7f, 0x007c, 0x157e, 0x147e, 0x20a1, 0x020b, 0x1078,
++ 0x69d0, 0x7810, 0x20a2, 0xa006, 0x20a2, 0x20a2, 0x20a2, 0x20a2,
++ 0x20a3, 0x1000, 0x0078, 0x718e, 0x157e, 0x147e, 0x20a1, 0x020b,
++ 0x1078, 0x69d0, 0x7810, 0x20a2, 0xa006, 0x20a2, 0x20a2, 0x20a2,
++ 0x20a2, 0x20a3, 0x4000, 0x0078, 0x718e, 0x157e, 0x147e, 0x20a1,
++ 0x020b, 0x1078, 0x69d0, 0x7810, 0x20a2, 0xa006, 0x20a2, 0x20a2,
++ 0x20a2, 0x20a2, 0x20a3, 0x2000, 0x0078, 0x718e, 0x157e, 0x147e,
++ 0x20a1, 0x020b, 0x1078, 0x69d0, 0x7810, 0x20a2, 0xa006, 0x20a2,
++ 0x20a2, 0x20a2, 0x20a2, 0x20a3, 0x0400, 0x0078, 0x718e, 0x157e,
++ 0x147e, 0x20a1, 0x020b, 0x1078, 0x69d0, 0x7810, 0x20a2, 0xa006,
++ 0x20a2, 0x20a2, 0x20a2, 0x20a2, 0x20a3, 0x0200, 0x1078, 0x723e,
++ 0x60c3, 0x0020, 0x1078, 0x6dfb, 0x147f, 0x157f, 0x007c, 0x127e,
++ 0x0c7e, 0x2091, 0x8000, 0x2061, 0x0100, 0x6120, 0xd1b4, 0x00c0,
++ 0x71a6, 0xd1bc, 0x00c0, 0x71f0, 0x0078, 0x7230, 0x2009, 0x017f,
++ 0x200b, 0x00a1, 0x157e, 0x007e, 0x0d7e, 0x2069, 0x0140, 0x20a9,
++ 0x001e, 0x2009, 0x0169, 0x6804, 0xa084, 0x4000, 0x0040, 0x71e7,
++ 0x6020, 0xd0b4, 0x0040, 0x71e7, 0x6024, 0xd094, 0x00c0, 0x71e7,
++ 0x2104, 0xa084, 0x000f, 0xa086, 0x0004, 0x00c0, 0x71e7, 0x00f0,
++ 0x71b3, 0x027e, 0x6198, 0xa18c, 0x00ff, 0x8107, 0x6130, 0xa18c,
++ 0x00ff, 0xa10d, 0x6088, 0x628c, 0x618e, 0x608b, 0xbc91, 0x6043,
++ 0x0001, 0x6043, 0x0000, 0x608a, 0x628e, 0x6024, 0xd094, 0x00c0,
++ 0x71e6, 0x6a04, 0xa294, 0x4000, 0x00c0, 0x71dd, 0x027f, 0x0d7f,
++ 0x007f, 0x157f, 0x2009, 0x017f, 0x200b, 0x0000, 0x0078, 0x7230,
++ 0x2009, 0x017f, 0x200b, 0x00a1, 0x157e, 0x007e, 0x0d7e, 0x2069,
++ 0x0140, 0x20a9, 0x001e, 0x2009, 0x0169, 0x6804, 0xa084, 0x4000,
++ 0x0040, 0x7229, 0x6020, 0xd0bc, 0x0040, 0x7229, 0x2104, 0xa084,
++ 0x000f, 0xa086, 0x0004, 0x00c0, 0x7229, 0x00f0, 0x71fd, 0x027e,
++ 0x6164, 0xa18c, 0x00ff, 0x8107, 0x6130, 0xa18c, 0x00ff, 0xa10d,
++ 0x6088, 0x628c, 0x608b, 0xbc91, 0x618e, 0x6043, 0x0001, 0x6043,
++ 0x0000, 0x608a, 0x628e, 0x6a04, 0xa294, 0x4000, 0x00c0, 0x7223,
++ 0x027f, 0x0d7f, 0x007f, 0x157f, 0x2009, 0x017f, 0x200b, 0x0000,
++ 0x0c7f, 0x127f, 0x007c, 0x0e7e, 0x2071, 0xa8b1, 0x7020, 0xa005,
++ 0x0040, 0x723c, 0x8001, 0x7022, 0x0e7f, 0x007c, 0x20a9, 0x0008,
++ 0x20a2, 0x00f0, 0x7240, 0x20a2, 0x20a2, 0x007c, 0x0f7e, 0x0e7e,
++ 0x0d7e, 0x0c7e, 0x077e, 0x067e, 0x007e, 0x127e, 0x2091, 0x8000,
++ 0x2071, 0xa8b1, 0x7614, 0x2660, 0x2678, 0x2039, 0x0001, 0x87ff,
++ 0x0040, 0x72e2, 0x8cff, 0x0040, 0x72e2, 0x601c, 0xa086, 0x0006,
++ 0x00c0, 0x72dd, 0x88ff, 0x0040, 0x726d, 0x2800, 0xac06, 0x00c0,
++ 0x72dd, 0x2039, 0x0000, 0x0078, 0x7278, 0x6018, 0xa206, 0x00c0,
++ 0x72dd, 0x85ff, 0x0040, 0x7278, 0x6020, 0xa106, 0x00c0, 0x72dd,
++ 0x7024, 0xac06, 0x00c0, 0x72a8, 0x2069, 0x0100, 0x68c0, 0xa005,
++ 0x0040, 0x72a3, 0x1078, 0x5acb, 0x6817, 0x0008, 0x68c3, 0x0000,
++ 0x1078, 0x7378, 0x7027, 0x0000, 0x037e, 0x2069, 0x0140, 0x6b04,
++ 0xa384, 0x1000, 0x0040, 0x7298, 0x6803, 0x0100, 0x6803, 0x0000,
++ 0x2069, 0x0100, 0x6824, 0xd084, 0x0040, 0x72a0, 0x6827, 0x0001,
++ 0x037f, 0x0078, 0x72a8, 0x6003, 0x0009, 0x630a, 0x0078, 0x72dd,
++ 0x7014, 0xac36, 0x00c0, 0x72ae, 0x660c, 0x7616, 0x7010, 0xac36,
++ 0x00c0, 0x72bc, 0x2c00, 0xaf36, 0x0040, 0x72ba, 0x2f00, 0x7012,
++ 0x0078, 0x72bc, 0x7013, 0x0000, 0x660c, 0x067e, 0x2c00, 0xaf06,
++ 0x0040, 0x72c5, 0x7e0e, 0x0078, 0x72c6, 0x2678, 0x89ff, 0x00c0,
++ 0x72d5, 0x600f, 0x0000, 0x6010, 0x2068, 0x1078, 0x8d06, 0x0040,
++ 0x72d3, 0x1078, 0xa1ca, 0x1078, 0x8ec6, 0x1078, 0x7233, 0x88ff,
++ 0x00c0, 0x72ec, 0x0c7f, 0x0078, 0x7257, 0x2c78, 0x600c, 0x2060,
++ 0x0078, 0x7257, 0xa006, 0x127f, 0x007f, 0x067f, 0x077f, 0x0c7f,
++ 0x0d7f, 0x0e7f, 0x0f7f, 0x007c, 0x6017, 0x0000, 0x0c7f, 0xa8c5,
++ 0x0001, 0x0078, 0x72e3, 0x0f7e, 0x0e7e, 0x0d7e, 0x0c7e, 0x067e,
++ 0x027e, 0x007e, 0x127e, 0x2091, 0x8000, 0x2071, 0xa8b1, 0x7638,
++ 0x2660, 0x2678, 0x8cff, 0x0040, 0x7367, 0x601c, 0xa086, 0x0006,
++ 0x00c0, 0x7362, 0x87ff, 0x0040, 0x7313, 0x2700, 0xac06, 0x00c0,
++ 0x7362, 0x0078, 0x731e, 0x6018, 0xa206, 0x00c0, 0x7362, 0x85ff,
++ 0x0040, 0x731e, 0x6020, 0xa106, 0x00c0, 0x7362, 0x703c, 0xac06,
++ 0x00c0, 0x7332, 0x037e, 0x2019, 0x0001, 0x1078, 0x7058, 0x7033,
++ 0x0000, 0x703f, 0x0000, 0x7043, 0x0000, 0x7047, 0x0000, 0x704b,
++ 0x0000, 0x037f, 0x7038, 0xac36, 0x00c0, 0x7338, 0x660c, 0x763a,
++ 0x7034, 0xac36, 0x00c0, 0x7346, 0x2c00, 0xaf36, 0x0040, 0x7344,
++ 0x2f00, 0x7036, 0x0078, 0x7346, 0x7037, 0x0000, 0x660c, 0x067e,
++ 0x2c00, 0xaf06, 0x0040, 0x734f, 0x7e0e, 0x0078, 0x7350, 0x2678,
++ 0x600f, 0x0000, 0x6010, 0x2068, 0x1078, 0x8d06, 0x0040, 0x735a,
++ 0x1078, 0xa1ca, 0x1078, 0x8ec6, 0x87ff, 0x00c0, 0x7371, 0x0c7f,
++ 0x0078, 0x7302, 0x2c78, 0x600c, 0x2060, 0x0078, 0x7302, 0xa006,
++ 0x127f, 0x007f, 0x027f, 0x067f, 0x0c7f, 0x0d7f, 0x0e7f, 0x0f7f,
++ 0x007c, 0x6017, 0x0000, 0x0c7f, 0xa7bd, 0x0001, 0x0078, 0x7368,
++ 0x0e7e, 0x2071, 0xa8b1, 0x2001, 0xa600, 0x2004, 0xa086, 0x0002,
++ 0x00c0, 0x7386, 0x7007, 0x0005, 0x0078, 0x7388, 0x7007, 0x0000,
++ 0x0e7f, 0x007c, 0x0f7e, 0x0e7e, 0x0c7e, 0x067e, 0x027e, 0x007e,
++ 0x127e, 0x2091, 0x8000, 0x2071, 0xa8b1, 0x2c10, 0x7638, 0x2660,
++ 0x2678, 0x8cff, 0x0040, 0x73c8, 0x2200, 0xac06, 0x00c0, 0x73c3,
++ 0x7038, 0xac36, 0x00c0, 0x73a6, 0x660c, 0x763a, 0x7034, 0xac36,
++ 0x00c0, 0x73b4, 0x2c00, 0xaf36, 0x0040, 0x73b2, 0x2f00, 0x7036,
++ 0x0078, 0x73b4, 0x7037, 0x0000, 0x660c, 0x2c00, 0xaf06, 0x0040,
++ 0x73bc, 0x7e0e, 0x0078, 0x73bd, 0x2678, 0x600f, 0x0000, 0xa085,
++ 0x0001, 0x0078, 0x73c8, 0x2c78, 0x600c, 0x2060, 0x0078, 0x7399,
++ 0x127f, 0x007f, 0x027f, 0x067f, 0x0c7f, 0x0e7f, 0x0f7f, 0x007c,
++ 0x0f7e, 0x0e7e, 0x0d7e, 0x0c7e, 0x067e, 0x007e, 0x127e, 0x2091,
++ 0x8000, 0x2071, 0xa8b1, 0x760c, 0x2660, 0x2678, 0x8cff, 0x0040,
++ 0x7469, 0x6018, 0xa080, 0x0028, 0x2004, 0xa206, 0x00c0, 0x7464,
++ 0x7024, 0xac06, 0x00c0, 0x740f, 0x2069, 0x0100, 0x68c0, 0xa005,
++ 0x0040, 0x743d, 0x1078, 0x6e0f, 0x68c3, 0x0000, 0x1078, 0x7378,
++ 0x7027, 0x0000, 0x037e, 0x2069, 0x0140, 0x6b04, 0xa384, 0x1000,
++ 0x0040, 0x7406, 0x6803, 0x0100, 0x6803, 0x0000, 0x2069, 0x0100,
++ 0x6824, 0xd084, 0x0040, 0x740e, 0x6827, 0x0001, 0x037f, 0x700c,
++ 0xac36, 0x00c0, 0x7415, 0x660c, 0x760e, 0x7008, 0xac36, 0x00c0,
++ 0x7423, 0x2c00, 0xaf36, 0x0040, 0x7421, 0x2f00, 0x700a, 0x0078,
++ 0x7423, 0x700b, 0x0000, 0x660c, 0x067e, 0x2c00, 0xaf06, 0x0040,
++ 0x742c, 0x7e0e, 0x0078, 0x742d, 0x2678, 0x600f, 0x0000, 0x1078,
++ 0x8eec, 0x00c0, 0x7441, 0x1078, 0x28a6, 0x1078, 0x8f00, 0x00c0,
++ 0x745d, 0x1078, 0x7c83, 0x0078, 0x745d, 0x1078, 0x7378, 0x0078,
++ 0x740f, 0x1078, 0x8f00, 0x00c0, 0x7449, 0x1078, 0x7c83, 0x0078,
++ 0x745d, 0x6010, 0x2068, 0x1078, 0x8d06, 0x0040, 0x745d, 0x601c,
++ 0xa086, 0x0003, 0x00c0, 0x7471, 0x6837, 0x0103, 0x6b4a, 0x6847,
++ 0x0000, 0x1078, 0x4a73, 0x1078, 0x8eb9, 0x1078, 0x8ec6, 0x1078,
++ 0x7233, 0x0c7f, 0x0078, 0x73de, 0x2c78, 0x600c, 0x2060, 0x0078,
++ 0x73de, 0x127f, 0x007f, 0x067f, 0x0c7f, 0x0d7f, 0x0e7f, 0x0f7f,
++ 0x007c, 0x601c, 0xa086, 0x0006, 0x00c0, 0x745d, 0x1078, 0xa1ca,
++ 0x0078, 0x745d, 0x037e, 0x157e, 0x137e, 0x147e, 0x3908, 0xa006,
++ 0xa190, 0x0020, 0x221c, 0xa39e, 0x2676, 0x00c0, 0x748b, 0x8210,
++ 0x8000, 0x0078, 0x7482, 0xa005, 0x0040, 0x7497, 0x20a9, 0x0020,
++ 0x2198, 0x8211, 0xa282, 0x0020, 0x20c8, 0x20a0, 0x53a3, 0x147f,
++ 0x137f, 0x157f, 0x037f, 0x007c, 0x0d7e, 0x20a1, 0x020b, 0x1078,
++ 0x67c2, 0x20a3, 0x0200, 0x20a3, 0x0014, 0x60c3, 0x0014, 0x20a3,
++ 0x0000, 0x20a3, 0x0000, 0x2099, 0xa8a5, 0x20a9, 0x0004, 0x53a6,
++ 0x20a3, 0x0004, 0x20a3, 0x7878, 0x20a3, 0x0000, 0x20a3, 0x0000,
++ 0x1078, 0x6dfb, 0x0d7f, 0x007c, 0x20a1, 0x020b, 0x1078, 0x67c2,
++ 0x20a3, 0x0214, 0x20a3, 0x0018, 0x20a3, 0x0800, 0x7810, 0xa084,
++ 0xff00, 0x20a2, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000,
++ 0x20a3, 0x0000, 0x7810, 0xa084, 0x00ff, 0x20a2, 0x7828, 0x20a2,
++ 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x0018, 0x1078, 0x6dfb,
++ 0x007c, 0x0d7e, 0x017e, 0x2f68, 0x2009, 0x0035, 0x1078, 0x91bc,
++ 0x00c0, 0x7551, 0x20a1, 0x020b, 0x1078, 0x6731, 0x20a3, 0x1300,
++ 0x20a3, 0x0000, 0x7828, 0x2068, 0x681c, 0xa086, 0x0003, 0x0040,
++ 0x752d, 0x7818, 0xa080, 0x0028, 0x2014, 0xa286, 0x007e, 0x00c0,
++ 0x7507, 0x20a3, 0x00ff, 0x20a3, 0xfffe, 0x0078, 0x7542, 0xa286,
++ 0x007f, 0x00c0, 0x7511, 0x20a3, 0x00ff, 0x20a3, 0xfffd, 0x0078,
++ 0x7542, 0xd2bc, 0x0040, 0x7527, 0xa286, 0x0080, 0x00c0, 0x751e,
++ 0x20a3, 0x00ff, 0x20a3, 0xfffc, 0x0078, 0x7542, 0xa2e8, 0xa735,
++ 0x2d6c, 0x6810, 0x20a2, 0x6814, 0x20a2, 0x0078, 0x7542, 0x20a3,
++ 0x0000, 0x6098, 0x20a2, 0x0078, 0x7542, 0x7818, 0xa080, 0x0028,
++ 0x2004, 0xa082, 0x007e, 0x0048, 0x753e, 0x0d7e, 0x2069, 0xa61b,
++ 0x2da6, 0x8d68, 0x2da6, 0x0d7f, 0x0078, 0x7542, 0x20a3, 0x0000,
++ 0x6030, 0x20a2, 0x7834, 0x20a2, 0x7838, 0x20a2, 0x20a3, 0x0000,
++ 0x20a3, 0x0000, 0x60c3, 0x000c, 0x1078, 0x6dfb, 0x017f, 0x0d7f,
++ 0x007c, 0x7817, 0x0001, 0x7803, 0x0006, 0x017f, 0x0d7f, 0x007c,
++ 0x0d7e, 0x027e, 0x7928, 0x2168, 0x691c, 0xa186, 0x0006, 0x0040,
++ 0x757a, 0xa186, 0x0003, 0x0040, 0x75d5, 0xa186, 0x0005, 0x0040,
++ 0x75b8, 0xa186, 0x0004, 0x0040, 0x75a8, 0xa186, 0x0008, 0x0040,
++ 0x75c2, 0x7807, 0x0037, 0x7813, 0x1700, 0x1078, 0x7640, 0x027f,
++ 0x0d7f, 0x007c, 0x1078, 0x75fd, 0x2009, 0x4000, 0x6800, 0x0079,
++ 0x7581, 0x7594, 0x75a2, 0x7596, 0x75a2, 0x759d, 0x7594, 0x7594,
++ 0x75a2, 0x75a2, 0x75a2, 0x75a2, 0x7594, 0x7594, 0x7594, 0x7594,
++ 0x7594, 0x75a2, 0x7594, 0x75a2, 0x1078, 0x1332, 0x6824, 0xd0e4,
++ 0x0040, 0x759d, 0xd0cc, 0x0040, 0x75a0, 0xa00e, 0x0078, 0x75a2,
++ 0x2009, 0x2000, 0x6828, 0x20a2, 0x682c, 0x20a2, 0x0078, 0x75f3,
++ 0x1078, 0x75fd, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x2009, 0x4000,
++ 0x6a00, 0xa286, 0x0002, 0x00c0, 0x75b6, 0xa00e, 0x0078, 0x75f3,
++ 0x1078, 0x75fd, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x2009, 0x4000,
++ 0x0078, 0x75f3, 0x1078, 0x75fd, 0x20a3, 0x0000, 0x20a3, 0x0000,
++ 0x2009, 0x4000, 0xa286, 0x0005, 0x0040, 0x75d2, 0xa286, 0x0002,
++ 0x00c0, 0x75d3, 0xa00e, 0x0078, 0x75f3, 0x1078, 0x75fd, 0x6810,
++ 0x2068, 0x697c, 0x6810, 0xa112, 0x6980, 0x6814, 0xa103, 0x20a2,
++ 0x22a2, 0x7928, 0xa180, 0x0000, 0x2004, 0xa08e, 0x0002, 0x0040,
++ 0x75f1, 0xa08e, 0x0004, 0x0040, 0x75f1, 0x2009, 0x4000, 0x0078,
++ 0x75f3, 0x2009, 0x0000, 0x21a2, 0x20a3, 0x0000, 0x60c3, 0x0018,
++ 0x1078, 0x6dfb, 0x027f, 0x0d7f, 0x007c, 0x037e, 0x047e, 0x057e,
++ 0x067e, 0x20a1, 0x020b, 0x1078, 0x67c2, 0xa006, 0x20a3, 0x0200,
++ 0x20a2, 0x7934, 0x21a2, 0x7938, 0x21a2, 0x7818, 0xa080, 0x0028,
++ 0x2004, 0xa092, 0x007e, 0x0048, 0x7623, 0x0d7e, 0x2069, 0xa61b,
++ 0x2d2c, 0x8d68, 0x2d34, 0xa0e8, 0xa735, 0x2d6c, 0x6b10, 0x6c14,
++ 0x0d7f, 0x0078, 0x7629, 0x2019, 0x0000, 0x6498, 0x2029, 0x0000,
++ 0x6630, 0x7828, 0xa080, 0x0007, 0x2004, 0xa086, 0x0003, 0x00c0,
++ 0x7637, 0x25a2, 0x26a2, 0x23a2, 0x24a2, 0x0078, 0x763b, 0x23a2,
++ 0x24a2, 0x25a2, 0x26a2, 0x067f, 0x057f, 0x047f, 0x037f, 0x007c,
++ 0x20a1, 0x020b, 0x1078, 0x67c2, 0x20a3, 0x0100, 0x20a3, 0x0000,
++ 0x20a3, 0x0009, 0x7810, 0x20a2, 0x60c3, 0x0008, 0x1078, 0x6dfb,
++ 0x007c, 0x20a1, 0x020b, 0x1078, 0x6728, 0x20a3, 0x1400, 0x20a3,
++ 0x0000, 0x7834, 0x20a2, 0x7838, 0x20a2, 0x7828, 0x20a2, 0x782c,
++ 0x20a2, 0x7830, 0xa084, 0x00ff, 0x8007, 0x20a2, 0x20a3, 0x0000,
++ 0x60c3, 0x0010, 0x1078, 0x6dfb, 0x007c, 0x20a1, 0x020b, 0x1078,
++ 0x67b9, 0x20a3, 0x0100, 0x20a3, 0x0000, 0x7828, 0x20a2, 0x7810,
++ 0x20a2, 0x60c3, 0x0008, 0x1078, 0x6dfb, 0x007c, 0x147e, 0x20a1,
++ 0x020b, 0x1078, 0x7689, 0x60c3, 0x0000, 0x1078, 0x6dfb, 0x147f,
++ 0x007c, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x7818, 0xa080, 0x0028,
++ 0x2004, 0xd0bc, 0x0040, 0x76a6, 0x0d7e, 0xa0e8, 0xa735, 0x2d6c,
++ 0x6810, 0xa085, 0x0300, 0x20a2, 0x6814, 0x20a2, 0x2069, 0xa61b,
++ 0x2da6, 0x8d68, 0x2da6, 0x0d7f, 0x0078, 0x76ae, 0x20a3, 0x0300,
++ 0x6298, 0x22a2, 0x20a3, 0x0000, 0x6230, 0x22a2, 0x20a3, 0x0819,
++ 0x20a3, 0x0000, 0x1078, 0x6dea, 0x22a2, 0x20a3, 0x0000, 0x2fa2,
++ 0x7a08, 0x22a2, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x007c, 0x2061,
++ 0xad00, 0x2a70, 0x7064, 0x704a, 0x704f, 0xad00, 0x007c, 0x0e7e,
++ 0x127e, 0x2071, 0xa600, 0x2091, 0x8000, 0x7548, 0xa582, 0x0010,
++ 0x0048, 0x76f9, 0x704c, 0x2060, 0x6000, 0xa086, 0x0000, 0x0040,
++ 0x76e5, 0xace0, 0x0010, 0x7058, 0xac02, 0x00c8, 0x76e1, 0x0078,
++ 0x76d4, 0x2061, 0xad00, 0x0078, 0x76d4, 0x6003, 0x0008, 0x8529,
++ 0x754a, 0xaca8, 0x0010, 0x7058, 0xa502, 0x00c8, 0x76f5, 0x754e,
++ 0xa085, 0x0001, 0x127f, 0x0e7f, 0x007c, 0x704f, 0xad00, 0x0078,
++ 0x76f0, 0xa006, 0x0078, 0x76f2, 0x0e7e, 0x2071, 0xa600, 0x7548,
++ 0xa582, 0x0010, 0x0048, 0x772a, 0x704c, 0x2060, 0x6000, 0xa086,
++ 0x0000, 0x0040, 0x7717, 0xace0, 0x0010, 0x7058, 0xac02, 0x00c8,
++ 0x7713, 0x0078, 0x7706, 0x2061, 0xad00, 0x0078, 0x7706, 0x6003,
++ 0x0008, 0x8529, 0x754a, 0xaca8, 0x0010, 0x7058, 0xa502, 0x00c8,
++ 0x7726, 0x754e, 0xa085, 0x0001, 0x0e7f, 0x007c, 0x704f, 0xad00,
++ 0x0078, 0x7722, 0xa006, 0x0078, 0x7724, 0xac82, 0xad00, 0x1048,
++ 0x1332, 0x2001, 0xa616, 0x2004, 0xac02, 0x10c8, 0x1332, 0xa006,
++ 0x6006, 0x600a, 0x600e, 0x6012, 0x6016, 0x601a, 0x601f, 0x0000,
++ 0x6003, 0x0000, 0x6022, 0x6026, 0x602a, 0x602e, 0x6032, 0x6036,
++ 0x603a, 0x603e, 0x2061, 0xa600, 0x6048, 0x8000, 0x604a, 0xa086,
++ 0x0001, 0x0040, 0x7754, 0x007c, 0x127e, 0x2091, 0x8000, 0x1078,
++ 0x62d1, 0x127f, 0x0078, 0x7753, 0x601c, 0xa084, 0x000f, 0x0079,
++ 0x7761, 0x776a, 0x777b, 0x7797, 0x77b3, 0x920e, 0x922a, 0x9246,
++ 0x776a, 0x777b, 0xa186, 0x0013, 0x00c0, 0x7773, 0x1078, 0x61cd,
++ 0x1078, 0x62d1, 0x007c, 0xa18e, 0x0047, 0x00c0, 0x777a, 0xa016,
++ 0x1078, 0x15fa, 0x007c, 0x067e, 0x6000, 0xa0b2, 0x0010, 0x10c8,
++ 0x1332, 0x1079, 0x7785, 0x067f, 0x007c, 0x7795, 0x7b00, 0x7cb2,
++ 0x7795, 0x7d36, 0x77cf, 0x7795, 0x7795, 0x7a92, 0x80f6, 0x7795,
++ 0x7795, 0x7795, 0x7795, 0x7795, 0x7795, 0x1078, 0x1332, 0x067e,
++ 0x6000, 0xa0b2, 0x0010, 0x10c8, 0x1332, 0x1079, 0x77a1, 0x067f,
++ 0x007c, 0x77b1, 0x87c3, 0x77b1, 0x77b1, 0x77b1, 0x77b1, 0x77b1,
++ 0x77b1, 0x8766, 0x8951, 0x77b1, 0x87f3, 0x8879, 0x87f3, 0x8879,
++ 0x77b1, 0x1078, 0x1332, 0x067e, 0x6000, 0xa0b2, 0x0010, 0x10c8,
++ 0x1332, 0x1079, 0x77bd, 0x067f, 0x007c, 0x77cd, 0x813d, 0x820e,
++ 0x8368, 0x84e4, 0x77cd, 0x77cd, 0x77cd, 0x8116, 0x870e, 0x8712,
++ 0x77cd, 0x77cd, 0x77cd, 0x77cd, 0x8742, 0x1078, 0x1332, 0xa1b6,
++ 0x0015, 0x00c0, 0x77d7, 0x1078, 0x772d, 0x0078, 0x77dd, 0xa1b6,
++ 0x0016, 0x10c0, 0x1332, 0x1078, 0x772d, 0x007c, 0x20a9, 0x000e,
++ 0x2e98, 0x6010, 0x20a0, 0x53a3, 0x20a9, 0x0006, 0x3310, 0x3420,
++ 0x9398, 0x94a0, 0x3318, 0x3428, 0x222e, 0x2326, 0xa290, 0x0002,
++ 0xa5a8, 0x0002, 0xa398, 0x0002, 0xa4a0, 0x0002, 0x00f0, 0x77ec,
++ 0x0e7e, 0x1078, 0x8d06, 0x0040, 0x7803, 0x6010, 0x2070, 0x7007,
++ 0x0000, 0x7037, 0x0103, 0x0e7f, 0x1078, 0x772d, 0x007c, 0x0d7e,
++ 0x037e, 0x7330, 0xa386, 0x0200, 0x00c0, 0x7814, 0x6018, 0x2068,
++ 0x6813, 0x00ff, 0x6817, 0xfffd, 0x6010, 0xa005, 0x0040, 0x781e,
++ 0x2068, 0x6807, 0x0000, 0x6837, 0x0103, 0x6b32, 0x1078, 0x772d,
++ 0x037f, 0x0d7f, 0x007c, 0x017e, 0x20a9, 0x002a, 0xae80, 0x000c,
++ 0x2098, 0x6010, 0xa080, 0x0002, 0x20a0, 0x53a3, 0x20a9, 0x002a,
++ 0x6010, 0xa080, 0x0001, 0x2004, 0xa080, 0x0002, 0x20a0, 0x53a3,
++ 0x0e7e, 0x6010, 0x2004, 0x2070, 0x7037, 0x0103, 0x0e7f, 0x1078,
++ 0x772d, 0x017f, 0x007c, 0x0e7e, 0x0d7e, 0x603f, 0x0000, 0x2c68,
++ 0x017e, 0x2009, 0x0035, 0x1078, 0x91bc, 0x017f, 0x00c0, 0x785f,
++ 0x027e, 0x6228, 0x2268, 0x027f, 0x2071, 0xab8c, 0x6b1c, 0xa386,
++ 0x0003, 0x0040, 0x7863, 0xa386, 0x0006, 0x0040, 0x7867, 0x1078,
++ 0x772d, 0x0078, 0x7869, 0x1078, 0x786c, 0x0078, 0x7869, 0x1078,
++ 0x7938, 0x0d7f, 0x0e7f, 0x007c, 0x0f7e, 0x6810, 0x2078, 0xa186,
++ 0x0015, 0x0040, 0x791d, 0xa18e, 0x0016, 0x00c0, 0x7936, 0x700c,
++ 0xa08c, 0xff00, 0xa186, 0x1700, 0x0040, 0x7882, 0xa186, 0x0300,
++ 0x00c0, 0x78f8, 0x8fff, 0x00c0, 0x788c, 0x6800, 0xa086, 0x000f,
++ 0x0040, 0x78db, 0x0078, 0x7934, 0x6808, 0xa086, 0xffff, 0x00c0,
++ 0x7921, 0x784c, 0xa084, 0x0060, 0xa086, 0x0020, 0x00c0, 0x78a2,
++ 0x797c, 0x7810, 0xa106, 0x00c0, 0x7921, 0x7980, 0x7814, 0xa106,
++ 0x00c0, 0x7921, 0x1078, 0x8eb9, 0x6830, 0x7852, 0x784c, 0xc0dc,
++ 0xc0f4, 0xc0d4, 0x784e, 0x027e, 0xa00e, 0x6a14, 0x2001, 0x000a,
++ 0x1078, 0x5c1c, 0x7854, 0xa20a, 0x0048, 0x78b7, 0x8011, 0x7a56,
++ 0x82ff, 0x027f, 0x00c0, 0x78c3, 0x0c7e, 0x2d60, 0x1078, 0x8ae0,
++ 0x0c7f, 0x0078, 0x7934, 0x0c7e, 0x0d7e, 0x2f68, 0x6838, 0xd0fc,
++ 0x00c0, 0x78ce, 0x1078, 0x4353, 0x0078, 0x78d0, 0x1078, 0x4431,
++ 0x0d7f, 0x0c7f, 0x00c0, 0x7921, 0x0c7e, 0x2d60, 0x1078, 0x772d,
++ 0x0c7f, 0x0078, 0x7934, 0x0c7e, 0x1078, 0x9187, 0x0040, 0x78f1,
++ 0x6013, 0x0000, 0x6818, 0x601a, 0x601f, 0x0003, 0x6904, 0x0c7e,
++ 0x2d60, 0x1078, 0x772d, 0x0c7f, 0x1078, 0x775c, 0x0c7f, 0x0078,
++ 0x7934, 0x2001, 0xa8a4, 0x2004, 0x683e, 0x0c7f, 0x0078, 0x7934,
++ 0x7008, 0xa086, 0x000b, 0x00c0, 0x7912, 0x6018, 0x200c, 0xc1bc,
++ 0x2102, 0x0c7e, 0x2d60, 0x7853, 0x0003, 0x6007, 0x0085, 0x6003,
++ 0x000b, 0x601f, 0x0002, 0x1078, 0x5d8a, 0x1078, 0x62d1, 0x0c7f,
++ 0x0078, 0x7934, 0x700c, 0xa086, 0x2a00, 0x00c0, 0x7921, 0x2001,
++ 0xa8a4, 0x2004, 0x683e, 0x0078, 0x7934, 0x1078, 0x7953, 0x0078,
++ 0x7936, 0x8fff, 0x1040, 0x1332, 0x0c7e, 0x0d7e, 0x2d60, 0x2f68,
++ 0x6837, 0x0103, 0x684b, 0x0003, 0x1078, 0x89cf, 0x1078, 0x8eb9,
++ 0x1078, 0x8ec6, 0x0d7f, 0x0c7f, 0x1078, 0x772d, 0x0f7f, 0x007c,
++ 0xa186, 0x0015, 0x00c0, 0x7942, 0x2001, 0xa8a4, 0x2004, 0x683e,
++ 0x0078, 0x7950, 0xa18e, 0x0016, 0x00c0, 0x7952, 0x0c7e, 0x2d00,
++ 0x2060, 0x1078, 0xa495, 0x1078, 0x5bc1, 0x1078, 0x772d, 0x0c7f,
++ 0x1078, 0x772d, 0x007c, 0x027e, 0x037e, 0x047e, 0x7228, 0x7c80,
++ 0x7b7c, 0xd2f4, 0x0040, 0x7962, 0x2001, 0xa8a4, 0x2004, 0x683e,
++ 0x0078, 0x79c6, 0x0c7e, 0x2d60, 0x1078, 0x89f3, 0x0c7f, 0x6804,
++ 0xa086, 0x0050, 0x00c0, 0x797a, 0x0c7e, 0x2d00, 0x2060, 0x6003,
++ 0x0001, 0x6007, 0x0050, 0x1078, 0x5d8a, 0x1078, 0x62d1, 0x0c7f,
++ 0x0078, 0x79c6, 0x6800, 0xa086, 0x000f, 0x0040, 0x799c, 0x8fff,
++ 0x1040, 0x1332, 0x6824, 0xd0dc, 0x00c0, 0x799c, 0x6800, 0xa086,
++ 0x0004, 0x00c0, 0x79a1, 0x784c, 0xd0ac, 0x0040, 0x79a1, 0x784c,
++ 0xc0dc, 0xc0f4, 0x784e, 0x7850, 0xc0f4, 0xc0fc, 0x7852, 0x2001,
++ 0x0001, 0x682e, 0x0078, 0x79c0, 0x2001, 0x0007, 0x682e, 0x0078,
++ 0x79c0, 0x784c, 0xd0b4, 0x00c0, 0x79ae, 0xd0ac, 0x0040, 0x799c,
++ 0x784c, 0xd0f4, 0x00c0, 0x799c, 0x0078, 0x798f, 0xd2ec, 0x00c0,
++ 0x799c, 0x7024, 0xa306, 0x00c0, 0x79b9, 0x7020, 0xa406, 0x0040,
++ 0x799c, 0x7020, 0x6836, 0x7024, 0x683a, 0x2001, 0x0005, 0x682e,
++ 0x1078, 0x8ff0, 0x1078, 0x62d1, 0x0078, 0x79c8, 0x1078, 0x772d,
++ 0x047f, 0x037f, 0x027f, 0x007c, 0x0e7e, 0x0d7e, 0x027e, 0x6034,
++ 0x2068, 0x6a1c, 0xa286, 0x0007, 0x0040, 0x7a35, 0xa286, 0x0002,
++ 0x0040, 0x7a35, 0xa286, 0x0000, 0x0040, 0x7a35, 0x6808, 0x6338,
++ 0xa306, 0x00c0, 0x7a35, 0x2071, 0xab8c, 0xa186, 0x0015, 0x0040,
++ 0x7a2f, 0xa18e, 0x0016, 0x00c0, 0x7a02, 0x6030, 0xa084, 0x00ff,
++ 0xa086, 0x0001, 0x00c0, 0x7a02, 0x700c, 0xa086, 0x2a00, 0x00c0,
++ 0x7a02, 0x6034, 0xa080, 0x0009, 0x200c, 0xc1dd, 0xc1f5, 0x2102,
++ 0x0078, 0x7a2f, 0x0c7e, 0x6034, 0x2060, 0x6104, 0xa186, 0x004b,
++ 0x0040, 0x7a22, 0xa186, 0x004c, 0x0040, 0x7a22, 0xa186, 0x004d,
++ 0x0040, 0x7a22, 0xa186, 0x004e, 0x0040, 0x7a22, 0xa186, 0x0052,
++ 0x0040, 0x7a22, 0x6010, 0x2068, 0x1078, 0x8d06, 0x1040, 0x1332,
++ 0x6853, 0x0003, 0x6007, 0x0085, 0x6003, 0x000b, 0x601f, 0x0002,
++ 0x1078, 0x5d8a, 0x1078, 0x62d1, 0x0c7f, 0x0078, 0x7a35, 0x6034,
++ 0x2068, 0x2001, 0xa8a4, 0x2004, 0x683e, 0x1078, 0x772d, 0x027f,
++ 0x0d7f, 0x0e7f, 0x007c, 0x0d7e, 0x20a9, 0x000e, 0x2e98, 0x6010,
++ 0x20a0, 0x53a3, 0xa1b6, 0x0015, 0x00c0, 0x7a73, 0x6018, 0x2068,
++ 0x157e, 0x037e, 0x027e, 0xae90, 0x000c, 0xa290, 0x0004, 0x20a9,
++ 0x0004, 0xad98, 0x000a, 0x1078, 0x80de, 0x027f, 0x037f, 0x157f,
++ 0x00c0, 0x7a76, 0x157e, 0x037e, 0x027e, 0xae90, 0x000c, 0xa290,
++ 0x0008, 0x20a9, 0x0004, 0xad98, 0x0006, 0x1078, 0x80de, 0x027f,
++ 0x037f, 0x157f, 0x00c0, 0x7a76, 0x7038, 0x680a, 0x703c, 0x680e,
++ 0x6800, 0xc08d, 0x6802, 0x0d7f, 0x0078, 0x77f8, 0x1078, 0x2880,
++ 0x0c7e, 0x1078, 0x76c7, 0x2f00, 0x601a, 0x6013, 0x0000, 0x601f,
++ 0x0001, 0x6007, 0x0001, 0x6003, 0x0001, 0x2001, 0x0007, 0x1078,
++ 0x4502, 0x1078, 0x4535, 0x1078, 0x5dd7, 0x1078, 0x62d1, 0x0c7f,
++ 0x0078, 0x7a73, 0x2100, 0xa1b2, 0x0044, 0x10c8, 0x1332, 0xa1b2,
++ 0x0040, 0x00c8, 0x7af7, 0x0079, 0x7a9d, 0x7aeb, 0x7adf, 0x7aeb,
++ 0x7aeb, 0x7aeb, 0x7aeb, 0x7add, 0x7add, 0x7add, 0x7add, 0x7add,
++ 0x7add, 0x7add, 0x7add, 0x7add, 0x7add, 0x7add, 0x7add, 0x7add,
++ 0x7add, 0x7add, 0x7add, 0x7add, 0x7add, 0x7add, 0x7add, 0x7add,
++ 0x7add, 0x7add, 0x7add, 0x7add, 0x7aeb, 0x7add, 0x7aeb, 0x7aeb,
++ 0x7add, 0x7add, 0x7add, 0x7add, 0x7add, 0x7aeb, 0x7add, 0x7add,
++ 0x7add, 0x7add, 0x7add, 0x7add, 0x7add, 0x7add, 0x7add, 0x7aeb,
++ 0x7aeb, 0x7add, 0x7add, 0x7add, 0x7add, 0x7add, 0x7add, 0x7add,
++ 0x7add, 0x7add, 0x7aeb, 0x7add, 0x7add, 0x1078, 0x1332, 0x6003,
++ 0x0001, 0x6106, 0x1078, 0x5dd7, 0x127e, 0x2091, 0x8000, 0x1078,
++ 0x62d1, 0x127f, 0x007c, 0x6003, 0x0001, 0x6106, 0x1078, 0x5dd7,
++ 0x127e, 0x2091, 0x8000, 0x1078, 0x62d1, 0x127f, 0x007c, 0x2600,
++ 0x0079, 0x7afa, 0x7afe, 0x7afe, 0x7afe, 0x7aeb, 0x1078, 0x1332,
++ 0x6004, 0xa0b2, 0x0044, 0x10c8, 0x1332, 0xa1b6, 0x0013, 0x00c0,
++ 0x7b10, 0xa0b2, 0x0040, 0x00c8, 0x7c79, 0x2008, 0x0079, 0x7bbf,
++ 0xa1b6, 0x0027, 0x00c0, 0x7b7c, 0x1078, 0x61cd, 0x6004, 0x1078,
++ 0x8eec, 0x0040, 0x7b2d, 0x1078, 0x8f00, 0x0040, 0x7b74, 0xa08e,
++ 0x0021, 0x0040, 0x7b78, 0xa08e, 0x0022, 0x0040, 0x7b74, 0xa08e,
++ 0x003d, 0x0040, 0x7b78, 0x0078, 0x7b6f, 0x1078, 0x28a6, 0x2001,
++ 0x0007, 0x1078, 0x4502, 0x6018, 0xa080, 0x0028, 0x200c, 0x1078,
++ 0x7c83, 0xa186, 0x007e, 0x00c0, 0x7b42, 0x2001, 0xa633, 0x2014,
++ 0xc285, 0x2202, 0x017e, 0x027e, 0x037e, 0x2110, 0x027e, 0x2019,
++ 0x0028, 0x1078, 0x73d0, 0x027f, 0x1078, 0xa4f1, 0x037f, 0x027f,
++ 0x017f, 0x017e, 0x027e, 0x037e, 0x2110, 0x2019, 0x0028, 0x1078,
++ 0x5f01, 0x077e, 0x2039, 0x0000, 0x1078, 0x5e0a, 0x0c7e, 0x6018,
++ 0xa065, 0x0040, 0x7b65, 0x1078, 0x47e9, 0x0c7f, 0x2c08, 0x1078,
++ 0x9f8b, 0x077f, 0x037f, 0x027f, 0x017f, 0x1078, 0x457f, 0x1078,
++ 0x772d, 0x1078, 0x62d1, 0x007c, 0x1078, 0x7c83, 0x0078, 0x7b6f,
++ 0x1078, 0x7ca6, 0x0078, 0x7b6f, 0xa186, 0x0014, 0x00c0, 0x7b73,
++ 0x1078, 0x61cd, 0x1078, 0x2880, 0x1078, 0x8eec, 0x00c0, 0x7b9b,
++ 0x1078, 0x28a6, 0x6018, 0xa080, 0x0028, 0x200c, 0x1078, 0x7c83,
++ 0xa186, 0x007e, 0x00c0, 0x7b99, 0x2001, 0xa633, 0x200c, 0xc185,
++ 0x2102, 0x0078, 0x7b6f, 0x1078, 0x8f00, 0x00c0, 0x7ba3, 0x1078,
++ 0x7c83, 0x0078, 0x7b6f, 0x6004, 0xa08e, 0x0032, 0x00c0, 0x7bb4,
++ 0x0e7e, 0x0f7e, 0x2071, 0xa682, 0x2079, 0x0000, 0x1078, 0x2bd7,
++ 0x0f7f, 0x0e7f, 0x0078, 0x7b6f, 0x6004, 0xa08e, 0x0021, 0x0040,
++ 0x7b9f, 0xa08e, 0x0022, 0x1040, 0x7c83, 0x0078, 0x7b6f, 0x7c01,
++ 0x7c03, 0x7c07, 0x7c0b, 0x7c0f, 0x7c13, 0x7bff, 0x7bff, 0x7bff,
++ 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff,
++ 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff,
++ 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7c17, 0x7c29, 0x7bff,
++ 0x7c2b, 0x7c29, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7c29,
++ 0x7c29, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff,
++ 0x7bff, 0x7c5c, 0x7c29, 0x7bff, 0x7c23, 0x7bff, 0x7bff, 0x7bff,
++ 0x7c25, 0x7bff, 0x7bff, 0x7bff, 0x7c29, 0x7bff, 0x7bff, 0x1078,
++ 0x1332, 0x0078, 0x7c29, 0x2001, 0x000b, 0x0078, 0x7c36, 0x2001,
++ 0x0003, 0x0078, 0x7c36, 0x2001, 0x0005, 0x0078, 0x7c36, 0x2001,
++ 0x0001, 0x0078, 0x7c36, 0x2001, 0x0009, 0x0078, 0x7c36, 0x1078,
++ 0x61cd, 0x6003, 0x0005, 0x2001, 0xa8a4, 0x2004, 0x603e, 0x1078,
++ 0x62d1, 0x0078, 0x7c35, 0x0078, 0x7c29, 0x0078, 0x7c29, 0x1078,
++ 0x4502, 0x0078, 0x7c6e, 0x1078, 0x61cd, 0x6003, 0x0004, 0x2001,
++ 0xa8a2, 0x2004, 0x6016, 0x1078, 0x62d1, 0x007c, 0x1078, 0x4502,
++ 0x1078, 0x61cd, 0x2001, 0xa8a4, 0x2004, 0x603e, 0x6003, 0x0002,
++ 0x037e, 0x2019, 0xa65d, 0x2304, 0xa084, 0xff00, 0x00c0, 0x7c4d,
++ 0x2019, 0xa8a2, 0x231c, 0x0078, 0x7c56, 0x8007, 0xa09a, 0x0004,
++ 0x0048, 0x7c48, 0x8003, 0x801b, 0x831b, 0xa318, 0x6316, 0x037f,
++ 0x1078, 0x62d1, 0x0078, 0x7c35, 0x0e7e, 0x0f7e, 0x2071, 0xa682,
++ 0x2079, 0x0000, 0x1078, 0x2bd7, 0x0f7f, 0x0e7f, 0x1078, 0x61cd,
++ 0x1078, 0x772d, 0x1078, 0x62d1, 0x0078, 0x7c35, 0x1078, 0x61cd,
++ 0x6003, 0x0002, 0x2001, 0xa8a2, 0x2004, 0x6016, 0x1078, 0x62d1,
++ 0x007c, 0x2600, 0x2008, 0x0079, 0x7c7d, 0x7c81, 0x7c81, 0x7c81,
++ 0x7c6e, 0x1078, 0x1332, 0x0e7e, 0x1078, 0x8d06, 0x0040, 0x7c9f,
++ 0x6010, 0x2070, 0x7038, 0xd0fc, 0x0040, 0x7c9f, 0x7007, 0x0000,
++ 0x017e, 0x6004, 0xa08e, 0x0021, 0x0040, 0x7ca1, 0xa08e, 0x003d,
++ 0x0040, 0x7ca1, 0x017f, 0x7037, 0x0103, 0x7033, 0x0100, 0x0e7f,
++ 0x007c, 0x017f, 0x1078, 0x7ca6, 0x0078, 0x7c9f, 0x0e7e, 0xacf0,
++ 0x0004, 0x2e74, 0x7000, 0x2070, 0x7037, 0x0103, 0x7023, 0x8001,
++ 0x0e7f, 0x007c, 0x0d7e, 0x6618, 0x2668, 0x6804, 0xa084, 0x00ff,
++ 0x0d7f, 0xa0b2, 0x000c, 0x10c8, 0x1332, 0x6604, 0xa6b6, 0x0043,
++ 0x00c0, 0x7cc6, 0x1078, 0x9134, 0x0078, 0x7d25, 0x6604, 0xa6b6,
++ 0x0033, 0x00c0, 0x7ccf, 0x1078, 0x90d8, 0x0078, 0x7d25, 0x6604,
++ 0xa6b6, 0x0028, 0x00c0, 0x7cd8, 0x1078, 0x8f2f, 0x0078, 0x7d25,
++ 0x6604, 0xa6b6, 0x0029, 0x00c0, 0x7ce1, 0x1078, 0x8f49, 0x0078,
++ 0x7d25, 0x6604, 0xa6b6, 0x001f, 0x00c0, 0x7cea, 0x1078, 0x77de,
++ 0x0078, 0x7d25, 0x6604, 0xa6b6, 0x0000, 0x00c0, 0x7cf3, 0x1078,
++ 0x7a3b, 0x0078, 0x7d25, 0x6604, 0xa6b6, 0x0022, 0x00c0, 0x7cfc,
++ 0x1078, 0x7807, 0x0078, 0x7d25, 0x6604, 0xa6b6, 0x0035, 0x00c0,
++ 0x7d05, 0x1078, 0x7843, 0x0078, 0x7d25, 0x6604, 0xa6b6, 0x0039,
++ 0x00c0, 0x7d0e, 0x1078, 0x79cc, 0x0078, 0x7d25, 0x6604, 0xa6b6,
++ 0x003d, 0x00c0, 0x7d17, 0x1078, 0x7823, 0x0078, 0x7d25, 0xa1b6,
++ 0x0015, 0x00c0, 0x7d1f, 0x1079, 0x7d2a, 0x0078, 0x7d25, 0xa1b6,
++ 0x0016, 0x00c0, 0x7d26, 0x1079, 0x7e7f, 0x007c, 0x1078, 0x7773,
++ 0x0078, 0x7d25, 0x7d4e, 0x7d51, 0x7d4e, 0x7d9c, 0x7d4e, 0x7e13,
++ 0x7e8b, 0x7d4e, 0x7d4e, 0x7e57, 0x7d4e, 0x7e6d, 0xa1b6, 0x0048,
++ 0x0040, 0x7d42, 0x20e1, 0x0005, 0x3d18, 0x3e20, 0x2c10, 0x1078,
++ 0x15fa, 0x007c, 0x0e7e, 0xacf0, 0x0004, 0x2e74, 0x7000, 0x2070,
++ 0x7037, 0x0103, 0x0e7f, 0x1078, 0x772d, 0x007c, 0x0005, 0x0005,
++ 0x007c, 0x0e7e, 0x2071, 0xa600, 0x7080, 0xa086, 0x0074, 0x00c0,
++ 0x7d85, 0x1078, 0x9f5f, 0x00c0, 0x7d77, 0x0d7e, 0x6018, 0x2068,
++ 0x7030, 0xd08c, 0x0040, 0x7d6a, 0x6800, 0xd0bc, 0x0040, 0x7d6a,
++ 0xc0c5, 0x6802, 0x1078, 0x7d89, 0x0d7f, 0x2001, 0x0006, 0x1078,
++ 0x4502, 0x1078, 0x28a6, 0x1078, 0x772d, 0x0078, 0x7d87, 0x2001,
++ 0x000a, 0x1078, 0x4502, 0x1078, 0x28a6, 0x6003, 0x0001, 0x6007,
++ 0x0001, 0x1078, 0x5dd7, 0x0078, 0x7d87, 0x1078, 0x7dff, 0x0e7f,
++ 0x007c, 0x6800, 0xd084, 0x0040, 0x7d9b, 0x2001, 0x0000, 0x1078,
++ 0x44ee, 0x2069, 0xa652, 0x6804, 0xd0a4, 0x0040, 0x7d9b, 0x2001,
++ 0x0006, 0x1078, 0x4535, 0x007c, 0x0d7e, 0x2011, 0xa620, 0x2204,
++ 0xa086, 0x0074, 0x00c0, 0x7dfb, 0x6018, 0x2068, 0x6aa0, 0xa286,
++ 0x007e, 0x00c0, 0x7daf, 0x1078, 0x7f9b, 0x0078, 0x7dfd, 0x1078,
++ 0x7f91, 0x6018, 0x2068, 0xa080, 0x0028, 0x2014, 0xa286, 0x0080,
++ 0x00c0, 0x7dd3, 0x6813, 0x00ff, 0x6817, 0xfffc, 0x6010, 0xa005,
++ 0x0040, 0x7dc9, 0x2068, 0x6807, 0x0000, 0x6837, 0x0103, 0x6833,
++ 0x0200, 0x2001, 0x0006, 0x1078, 0x4502, 0x1078, 0x28a6, 0x1078,
++ 0x772d, 0x0078, 0x7dfd, 0x0e7e, 0x2071, 0xa633, 0x2e04, 0xd09c,
++ 0x0040, 0x7dee, 0x2071, 0xab80, 0x7108, 0x720c, 0xa18c, 0x00ff,
++ 0x00c0, 0x7de6, 0xa284, 0xff00, 0x0040, 0x7dee, 0x6018, 0x2070,
++ 0x70a0, 0xd0bc, 0x00c0, 0x7dee, 0x7112, 0x7216, 0x0e7f, 0x2001,
++ 0x0004, 0x1078, 0x4502, 0x6003, 0x0001, 0x6007, 0x0003, 0x1078,
++ 0x5dd7, 0x0078, 0x7dfd, 0x1078, 0x7dff, 0x0d7f, 0x007c, 0x2001,
++ 0x0007, 0x1078, 0x4502, 0x2001, 0xa600, 0x2004, 0xa086, 0x0003,
++ 0x00c0, 0x7e0e, 0x2001, 0x0007, 0x1078, 0x4535, 0x1078, 0x28a6,
++ 0x1078, 0x772d, 0x007c, 0x0e7e, 0x2071, 0xa600, 0x7080, 0xa086,
++ 0x0014, 0x00c0, 0x7e51, 0x7000, 0xa086, 0x0003, 0x00c0, 0x7e26,
++ 0x6010, 0xa005, 0x00c0, 0x7e26, 0x1078, 0x3699, 0x0d7e, 0x6018,
++ 0x2068, 0x1078, 0x4649, 0x1078, 0x7d89, 0x0d7f, 0x1078, 0x8043,
++ 0x00c0, 0x7e51, 0x0d7e, 0x6018, 0x2068, 0x6890, 0x0d7f, 0xa005,
++ 0x0040, 0x7e51, 0x2001, 0x0006, 0x1078, 0x4502, 0x0e7e, 0x6010,
++ 0xa005, 0x0040, 0x7e4a, 0x2070, 0x7007, 0x0000, 0x7037, 0x0103,
++ 0x7033, 0x0200, 0x0e7f, 0x1078, 0x28a6, 0x1078, 0x772d, 0x0078,
++ 0x7e55, 0x1078, 0x7c83, 0x1078, 0x7dff, 0x0e7f, 0x007c, 0x2011,
++ 0xa620, 0x2204, 0xa086, 0x0014, 0x00c0, 0x7e6a, 0x2001, 0x0002,
++ 0x1078, 0x4502, 0x6003, 0x0001, 0x6007, 0x0001, 0x1078, 0x5dd7,
++ 0x0078, 0x7e6c, 0x1078, 0x7dff, 0x007c, 0x2011, 0xa620, 0x2204,
++ 0xa086, 0x0004, 0x00c0, 0x7e7c, 0x2001, 0x0007, 0x1078, 0x4502,
++ 0x1078, 0x772d, 0x0078, 0x7e7e, 0x1078, 0x7dff, 0x007c, 0x7d4e,
++ 0x7e97, 0x7d4e, 0x7ed2, 0x7d4e, 0x7f44, 0x7e8b, 0x7d4e, 0x7d4e,
++ 0x7f59, 0x7d4e, 0x7f6c, 0x6604, 0xa686, 0x0003, 0x0040, 0x7e13,
++ 0xa6b6, 0x001e, 0x00c0, 0x7e96, 0x1078, 0x772d, 0x007c, 0x0d7e,
++ 0x0c7e, 0x1078, 0x7f7f, 0x00c0, 0x7ead, 0x2001, 0x0000, 0x1078,
++ 0x44ee, 0x2001, 0x0002, 0x1078, 0x4502, 0x6003, 0x0001, 0x6007,
++ 0x0002, 0x1078, 0x5dd7, 0x0078, 0x7ecf, 0x2009, 0xab8e, 0x2104,
++ 0xa086, 0x0009, 0x00c0, 0x7ec2, 0x6018, 0x2068, 0x6840, 0xa084,
++ 0x00ff, 0xa005, 0x0040, 0x7ecd, 0x8001, 0x6842, 0x6017, 0x000a,
++ 0x0078, 0x7ecf, 0x2009, 0xab8f, 0x2104, 0xa084, 0xff00, 0xa086,
++ 0x1900, 0x00c0, 0x7ecd, 0x0078, 0x7ea1, 0x1078, 0x7dff, 0x0c7f,
++ 0x0d7f, 0x007c, 0x1078, 0x7f8e, 0x00c0, 0x7ee6, 0x2001, 0x0000,
++ 0x1078, 0x44ee, 0x2001, 0x0002, 0x1078, 0x4502, 0x6003, 0x0001,
++ 0x6007, 0x0002, 0x1078, 0x5dd7, 0x0078, 0x7f12, 0x1078, 0x7c83,
++ 0x2009, 0xab8e, 0x2134, 0xa6b4, 0x00ff, 0xa686, 0x0005, 0x0040,
++ 0x7f13, 0xa686, 0x000b, 0x0040, 0x7f10, 0x2009, 0xab8f, 0x2104,
++ 0xa084, 0xff00, 0x00c0, 0x7f00, 0xa686, 0x0009, 0x0040, 0x7f13,
++ 0xa086, 0x1900, 0x00c0, 0x7f10, 0xa686, 0x0009, 0x0040, 0x7f13,
++ 0x2001, 0x0004, 0x1078, 0x4502, 0x1078, 0x772d, 0x0078, 0x7f12,
++ 0x1078, 0x7dff, 0x007c, 0x0d7e, 0x6010, 0x2068, 0x1078, 0x8d06,
++ 0x0040, 0x7f21, 0x6838, 0xd0fc, 0x0040, 0x7f21, 0x0d7f, 0x0078,
++ 0x7f10, 0x6018, 0x2068, 0x6840, 0xa084, 0x00ff, 0xa005, 0x0040,
++ 0x7f32, 0x8001, 0x6842, 0x6017, 0x000a, 0x6007, 0x0016, 0x0d7f,
++ 0x0078, 0x7f12, 0x68a0, 0xa086, 0x007e, 0x00c0, 0x7f3f, 0x0e7e,
++ 0x2071, 0xa600, 0x1078, 0x42b8, 0x0e7f, 0x0078, 0x7f41, 0x1078,
++ 0x2880, 0x0d7f, 0x0078, 0x7f10, 0x1078, 0x7f8e, 0x00c0, 0x7f54,
++ 0x2001, 0x0004, 0x1078, 0x4502, 0x6003, 0x0001, 0x6007, 0x0003,
++ 0x1078, 0x5dd7, 0x0078, 0x7f58, 0x1078, 0x7c83, 0x1078, 0x7dff,
++ 0x007c, 0x1078, 0x7f8e, 0x00c0, 0x7f69, 0x2001, 0x0008, 0x1078,
++ 0x4502, 0x6003, 0x0001, 0x6007, 0x0005, 0x1078, 0x5dd7, 0x0078,
++ 0x7f6b, 0x1078, 0x7dff, 0x007c, 0x1078, 0x7f8e, 0x00c0, 0x7f7c,
++ 0x2001, 0x000a, 0x1078, 0x4502, 0x6003, 0x0001, 0x6007, 0x0001,
++ 0x1078, 0x5dd7, 0x0078, 0x7f7e, 0x1078, 0x7dff, 0x007c, 0x2009,
++ 0xab8e, 0x2104, 0xa086, 0x0003, 0x00c0, 0x7f8d, 0x2009, 0xab8f,
++ 0x2104, 0xa084, 0xff00, 0xa086, 0x2a00, 0x007c, 0xa085, 0x0001,
++ 0x007c, 0x0c7e, 0x017e, 0xac88, 0x0006, 0x2164, 0x1078, 0x45d6,
++ 0x017f, 0x0c7f, 0x007c, 0x0f7e, 0x0e7e, 0x0d7e, 0x037e, 0x017e,
++ 0x6018, 0x2068, 0x2071, 0xa633, 0x2e04, 0xa085, 0x0003, 0x2072,
++ 0x1078, 0x8014, 0x0040, 0x7fd9, 0x2009, 0xa633, 0x2104, 0xc0cd,
++ 0x200a, 0x2001, 0xa653, 0x2004, 0xd0a4, 0x0040, 0x7fc2, 0xa006,
++ 0x2020, 0x2009, 0x002a, 0x1078, 0xa21d, 0x2001, 0xa60c, 0x200c,
++ 0xc195, 0x2102, 0x2019, 0x002a, 0x2009, 0x0001, 0x1078, 0x284f,
++ 0x2071, 0xa600, 0x1078, 0x2677, 0x0c7e, 0x157e, 0x20a9, 0x0081,
++ 0x2009, 0x007f, 0x1078, 0x298e, 0x8108, 0x00f0, 0x7fd2, 0x157f,
++ 0x0c7f, 0x1078, 0x7f91, 0x6813, 0x00ff, 0x6817, 0xfffe, 0x2071,
++ 0xab80, 0x2079, 0x0100, 0x2e04, 0xa084, 0x00ff, 0x2069, 0xa61b,
++ 0x206a, 0x78e6, 0x007e, 0x8e70, 0x2e04, 0x2069, 0xa61c, 0x206a,
++ 0x78ea, 0xa084, 0xff00, 0x017f, 0xa105, 0x2009, 0xa626, 0x200a,
++ 0x2069, 0xab8e, 0x2071, 0xa89e, 0x6810, 0x2072, 0x6814, 0x7006,
++ 0x6818, 0x700a, 0x681c, 0x700e, 0x1078, 0x906e, 0x2001, 0x0006,
++ 0x1078, 0x4502, 0x1078, 0x28a6, 0x1078, 0x772d, 0x017f, 0x037f,
++ 0x0d7f, 0x0e7f, 0x0f7f, 0x007c, 0x027e, 0x037e, 0x0e7e, 0x157e,
++ 0x2019, 0xa626, 0x231c, 0x83ff, 0x0040, 0x803e, 0x2071, 0xab80,
++ 0x2e14, 0xa294, 0x00ff, 0x7004, 0xa084, 0xff00, 0xa205, 0xa306,
++ 0x00c0, 0x803e, 0x2011, 0xab96, 0xad98, 0x000a, 0x20a9, 0x0004,
++ 0x1078, 0x80de, 0x00c0, 0x803e, 0x2011, 0xab9a, 0xad98, 0x0006,
++ 0x20a9, 0x0004, 0x1078, 0x80de, 0x00c0, 0x803e, 0x157f, 0x0e7f,
++ 0x037f, 0x027f, 0x007c, 0x0e7e, 0x2071, 0xab8c, 0x7004, 0xa086,
++ 0x0014, 0x00c0, 0x8066, 0x7008, 0xa086, 0x0800, 0x00c0, 0x8066,
++ 0x700c, 0xd0ec, 0x0040, 0x8064, 0xa084, 0x0f00, 0xa086, 0x0100,
++ 0x00c0, 0x8064, 0x7024, 0xd0a4, 0x00c0, 0x8061, 0xd0ac, 0x0040,
++ 0x8064, 0xa006, 0x0078, 0x8066, 0xa085, 0x0001, 0x0e7f, 0x007c,
++ 0x0e7e, 0x0d7e, 0x0c7e, 0x077e, 0x057e, 0x047e, 0x027e, 0x007e,
++ 0x127e, 0x2091, 0x8000, 0x2029, 0xa8ba, 0x252c, 0x2021, 0xa8c0,
++ 0x2424, 0x2061, 0xad00, 0x2071, 0xa600, 0x7248, 0x7064, 0xa202,
++ 0x00c8, 0x80cc, 0x1078, 0xa242, 0x0040, 0x80c4, 0x671c, 0xa786,
++ 0x0001, 0x0040, 0x80c4, 0xa786, 0x0007, 0x0040, 0x80c4, 0x2500,
++ 0xac06, 0x0040, 0x80c4, 0x2400, 0xac06, 0x0040, 0x80c4, 0x0c7e,
++ 0x6000, 0xa086, 0x0004, 0x00c0, 0x809f, 0x1078, 0x1757, 0xa786,
++ 0x0008, 0x00c0, 0x80ae, 0x1078, 0x8f00, 0x00c0, 0x80ae, 0x0c7f,
++ 0x1078, 0x7c83, 0x1078, 0x8ec6, 0x0078, 0x80c4, 0x6010, 0x2068,
++ 0x1078, 0x8d06, 0x0040, 0x80c1, 0xa786, 0x0003, 0x00c0, 0x80d6,
++ 0x6837, 0x0103, 0x6b4a, 0x6847, 0x0000, 0x1078, 0x4a73, 0x1078,
++ 0x8eb9, 0x1078, 0x8ec6, 0x0c7f, 0xace0, 0x0010, 0x7058, 0xac02,
++ 0x00c8, 0x80cc, 0x0078, 0x807d, 0x127f, 0x007f, 0x027f, 0x047f,
++ 0x057f, 0x077f, 0x0c7f, 0x0d7f, 0x0e7f, 0x007c, 0xa786, 0x0006,
++ 0x00c0, 0x80b8, 0x1078, 0xa1ca, 0x0078, 0x80c1, 0x220c, 0x2304,
++ 0xa106, 0x00c0, 0x80e9, 0x8210, 0x8318, 0x00f0, 0x80de, 0xa006,
++ 0x007c, 0x2304, 0xa102, 0x0048, 0x80f1, 0x2001, 0x0001, 0x0078,
++ 0x80f3, 0x2001, 0x0000, 0xa18d, 0x0001, 0x007c, 0x6004, 0xa08a,
++ 0x0044, 0x10c8, 0x1332, 0x1078, 0x8eec, 0x0040, 0x8105, 0x1078,
++ 0x8f00, 0x0040, 0x8112, 0x0078, 0x810b, 0x1078, 0x28a6, 0x1078,
++ 0x8f00, 0x0040, 0x8112, 0x1078, 0x61cd, 0x1078, 0x772d, 0x1078,
++ 0x62d1, 0x007c, 0x1078, 0x7c83, 0x0078, 0x810b, 0xa182, 0x0040,
++ 0x0079, 0x811a, 0x812d, 0x812d, 0x812d, 0x812d, 0x812d, 0x812d,
++ 0x812d, 0x812d, 0x812d, 0x812d, 0x812d, 0x812f, 0x812f, 0x812f,
++ 0x812f, 0x812d, 0x812d, 0x812d, 0x812f, 0x1078, 0x1332, 0x600b,
++ 0xffff, 0x6003, 0x0001, 0x6106, 0x1078, 0x5d8a, 0x127e, 0x2091,
++ 0x8000, 0x1078, 0x62d1, 0x127f, 0x007c, 0xa186, 0x0013, 0x00c0,
++ 0x8146, 0x6004, 0xa082, 0x0040, 0x0079, 0x81d1, 0xa186, 0x0027,
++ 0x00c0, 0x8168, 0x1078, 0x61cd, 0x1078, 0x2880, 0x0d7e, 0x6110,
++ 0x2168, 0x1078, 0x8d06, 0x0040, 0x8162, 0x6837, 0x0103, 0x684b,
++ 0x0029, 0x6847, 0x0000, 0x694c, 0xc1c5, 0x694e, 0x1078, 0x4a73,
++ 0x1078, 0x8eb9, 0x0d7f, 0x1078, 0x772d, 0x1078, 0x62d1, 0x007c,
++ 0xa186, 0x0014, 0x00c0, 0x8171, 0x6004, 0xa082, 0x0040, 0x0079,
++ 0x8199, 0xa186, 0x0046, 0x0040, 0x817d, 0xa186, 0x0045, 0x0040,
++ 0x817d, 0xa186, 0x0047, 0x10c0, 0x1332, 0x2001, 0x0109, 0x2004,
++ 0xd084, 0x0040, 0x8196, 0x127e, 0x2091, 0x2200, 0x007e, 0x017e,
++ 0x027e, 0x1078, 0x5c56, 0x027f, 0x017f, 0x007f, 0x127f, 0x6000,
++ 0xa086, 0x0002, 0x00c0, 0x8196, 0x0078, 0x820e, 0x1078, 0x7773,
++ 0x007c, 0x81ae, 0x81ac, 0x81ac, 0x81ac, 0x81ac, 0x81ac, 0x81ac,
++ 0x81ac, 0x81ac, 0x81ac, 0x81ac, 0x81ca, 0x81ca, 0x81ca, 0x81ca,
++ 0x81ac, 0x81ca, 0x81ac, 0x81ca, 0x1078, 0x1332, 0x1078, 0x61cd,
++ 0x0d7e, 0x6110, 0x2168, 0x1078, 0x8d06, 0x0040, 0x81c4, 0x6837,
++ 0x0103, 0x684b, 0x0006, 0x6847, 0x0000, 0x6850, 0xc0ec, 0x6852,
++ 0x1078, 0x4a73, 0x1078, 0x8eb9, 0x0d7f, 0x1078, 0x772d, 0x1078,
++ 0x62d1, 0x007c, 0x1078, 0x61cd, 0x1078, 0x772d, 0x1078, 0x62d1,
++ 0x007c, 0x81e6, 0x81e4, 0x81e4, 0x81e4, 0x81e4, 0x81e4, 0x81e4,
++ 0x81e4, 0x81e4, 0x81e4, 0x81e4, 0x81f8, 0x81f8, 0x81f8, 0x81f8,
++ 0x81e4, 0x8207, 0x81e4, 0x81f8, 0x1078, 0x1332, 0x1078, 0x61cd,
++ 0x2001, 0xa8a4, 0x2004, 0x603e, 0x6003, 0x0002, 0x1078, 0x62d1,
++ 0x6010, 0xa088, 0x0013, 0x2104, 0xa085, 0x0400, 0x200a, 0x007c,
++ 0x1078, 0x61cd, 0x2001, 0xa8a2, 0x2004, 0x6016, 0x2001, 0xa8a4,
++ 0x2004, 0x603e, 0x6003, 0x000f, 0x1078, 0x62d1, 0x007c, 0x1078,
++ 0x61cd, 0x1078, 0x772d, 0x1078, 0x62d1, 0x007c, 0xa182, 0x0040,
++ 0x0079, 0x8212, 0x8225, 0x8225, 0x8225, 0x8225, 0x8225, 0x8227,
++ 0x8327, 0x8359, 0x8225, 0x8225, 0x8225, 0x8225, 0x8225, 0x8225,
++ 0x8225, 0x8225, 0x8225, 0x8225, 0x8225, 0x1078, 0x1332, 0x0e7e,
++ 0x0d7e, 0x603f, 0x0000, 0x2071, 0xab80, 0x7124, 0x610a, 0x2071,
++ 0xab8c, 0x6110, 0x2168, 0x7614, 0xa6b4, 0x0fff, 0x86ff, 0x0040,
++ 0x82e9, 0xa68c, 0x0c00, 0x0040, 0x825e, 0x0f7e, 0x2c78, 0x1078,
++ 0x4963, 0x0f7f, 0x0040, 0x825a, 0x684c, 0xd0ac, 0x0040, 0x825a,
++ 0x6024, 0xd0dc, 0x00c0, 0x825a, 0x6850, 0xd0bc, 0x00c0, 0x825a,
++ 0x7318, 0x6814, 0xa306, 0x00c0, 0x8301, 0x731c, 0x6810, 0xa306,
++ 0x00c0, 0x8301, 0x7318, 0x6b62, 0x731c, 0x6b5e, 0xa68c, 0x00ff,
++ 0xa186, 0x0002, 0x0040, 0x8291, 0xa186, 0x0028, 0x00c0, 0x826e,
++ 0x1078, 0x8eda, 0x684b, 0x001c, 0x0078, 0x8293, 0xd6dc, 0x0040,
++ 0x828a, 0x684b, 0x0015, 0x684c, 0xd0ac, 0x0040, 0x8288, 0x6914,
++ 0x6a10, 0x2100, 0xa205, 0x0040, 0x8288, 0x7018, 0xa106, 0x00c0,
++ 0x8285, 0x701c, 0xa206, 0x0040, 0x8288, 0x6962, 0x6a5e, 0xc6dc,
++ 0x0078, 0x8293, 0xd6d4, 0x0040, 0x8291, 0x684b, 0x0007, 0x0078,
++ 0x8293, 0x684b, 0x0000, 0x6837, 0x0103, 0x6e46, 0xa01e, 0xd6c4,
++ 0x0040, 0x82bc, 0xa686, 0x0100, 0x00c0, 0x82a7, 0x2001, 0xab99,
++ 0x2004, 0xa005, 0x00c0, 0x82a7, 0xc6c4, 0x0078, 0x8236, 0x7328,
++ 0x732c, 0x6b56, 0x83ff, 0x0040, 0x82bc, 0xa38a, 0x0009, 0x0048,
++ 0x82b3, 0x2019, 0x0008, 0x037e, 0x2308, 0x2019, 0xab98, 0xad90,
++ 0x0019, 0x1078, 0x89e2, 0x037f, 0xd6cc, 0x0040, 0x8317, 0x7124,
++ 0x695a, 0x81ff, 0x0040, 0x8317, 0xa192, 0x0021, 0x00c8, 0x82d5,
++ 0x2071, 0xab98, 0x831c, 0x2300, 0xae18, 0xad90, 0x001d, 0x1078,
++ 0x89e2, 0x1078, 0x91f4, 0x0078, 0x8317, 0x6838, 0xd0fc, 0x0040,
++ 0x82de, 0x2009, 0x0020, 0x695a, 0x0078, 0x82c8, 0x0f7e, 0x2d78,
++ 0x1078, 0x897a, 0x0f7f, 0x1078, 0x91f4, 0x1078, 0x89cf, 0x0078,
++ 0x8319, 0x0f7e, 0x2c78, 0x1078, 0x4963, 0x0f7f, 0x0040, 0x8307,
++ 0x684c, 0xd0ac, 0x0040, 0x8307, 0x6024, 0xd0dc, 0x00c0, 0x8307,
++ 0x6850, 0xd0bc, 0x00c0, 0x8307, 0x6810, 0x6914, 0xa105, 0x0040,
++ 0x8307, 0x1078, 0x8fbf, 0x0d7f, 0x0e7f, 0x0078, 0x8326, 0x684b,
++ 0x0000, 0x6837, 0x0103, 0x6e46, 0x684c, 0xd0ac, 0x0040, 0x8317,
++ 0x6810, 0x6914, 0xa115, 0x0040, 0x8317, 0x1078, 0x84d5, 0x1078,
++ 0x4a73, 0x6218, 0x2268, 0x6a3c, 0x8211, 0x6a3e, 0x1078, 0x8f89,
++ 0x0d7f, 0x0e7f, 0x00c0, 0x8326, 0x1078, 0x772d, 0x007c, 0x0f7e,
++ 0x6003, 0x0003, 0x2079, 0xab8c, 0x7c04, 0x7b00, 0x7e0c, 0x7d08,
++ 0x6010, 0x2078, 0x784c, 0xd0ac, 0x0040, 0x833e, 0x6003, 0x0002,
++ 0x0f7f, 0x007c, 0x2130, 0x2228, 0x0078, 0x834a, 0x2400, 0x797c,
++ 0xa10a, 0x2300, 0x7a80, 0xa213, 0x2600, 0xa102, 0x2500, 0xa203,
++ 0x0048, 0x833a, 0x7c12, 0x7b16, 0x7e0a, 0x7d0e, 0x0f7f, 0x603f,
++ 0x0000, 0x2c10, 0x1078, 0x1cf0, 0x1078, 0x5df6, 0x1078, 0x639b,
++ 0x007c, 0x2001, 0xa8a4, 0x2004, 0x603e, 0x6003, 0x0004, 0x6110,
++ 0x20e1, 0x0005, 0x3d18, 0x3e20, 0x2c10, 0x1078, 0x15fa, 0x007c,
++ 0xa182, 0x0040, 0x0079, 0x836c, 0x837f, 0x837f, 0x837f, 0x837f,
++ 0x837f, 0x8381, 0x8424, 0x837f, 0x837f, 0x843a, 0x84ab, 0x837f,
++ 0x837f, 0x837f, 0x837f, 0x84ba, 0x837f, 0x837f, 0x837f, 0x1078,
++ 0x1332, 0x077e, 0x0f7e, 0x0e7e, 0x0d7e, 0x2071, 0xab8c, 0x6110,
++ 0x2178, 0x7614, 0xa6b4, 0x0fff, 0x7e46, 0x7f4c, 0xc7e5, 0x7f4e,
++ 0x6218, 0x2268, 0x6a3c, 0x8211, 0x6a3e, 0x86ff, 0x0040, 0x841f,
++ 0xa694, 0xff00, 0xa284, 0x0c00, 0x0040, 0x83a2, 0x7018, 0x7862,
++ 0x701c, 0x785e, 0xa284, 0x0300, 0x0040, 0x841f, 0x1078, 0x138b,
++ 0x1040, 0x1332, 0x2d00, 0x784a, 0x7f4c, 0xc7cd, 0x7f4e, 0x6837,
++ 0x0103, 0x7838, 0x683a, 0x783c, 0x683e, 0x7840, 0x6842, 0x6e46,
++ 0xa68c, 0x0c00, 0x0040, 0x83c0, 0x7318, 0x6b62, 0x731c, 0x6b5e,
++ 0xa68c, 0x00ff, 0xa186, 0x0002, 0x0040, 0x83dc, 0xa186, 0x0028,
++ 0x00c0, 0x83ce, 0x684b, 0x001c, 0x0078, 0x83de, 0xd6dc, 0x0040,
++ 0x83d5, 0x684b, 0x0015, 0x0078, 0x83de, 0xd6d4, 0x0040, 0x83dc,
++ 0x684b, 0x0007, 0x0078, 0x83de, 0x684b, 0x0000, 0x6f4e, 0x7850,
++ 0x6852, 0x7854, 0x6856, 0xa01e, 0xd6c4, 0x0040, 0x83fc, 0x7328,
++ 0x732c, 0x6b56, 0x83ff, 0x0040, 0x83fc, 0xa38a, 0x0009, 0x0048,
++ 0x83f3, 0x2019, 0x0008, 0x037e, 0x2308, 0x2019, 0xab98, 0xad90,
++ 0x0019, 0x1078, 0x89e2, 0x037f, 0xd6cc, 0x0040, 0x841f, 0x7124,
++ 0x695a, 0x81ff, 0x0040, 0x841f, 0xa192, 0x0021, 0x00c8, 0x8413,
++ 0x2071, 0xab98, 0x831c, 0x2300, 0xae18, 0xad90, 0x001d, 0x1078,
++ 0x89e2, 0x0078, 0x841f, 0x7838, 0xd0fc, 0x0040, 0x841c, 0x2009,
++ 0x0020, 0x695a, 0x0078, 0x8408, 0x2d78, 0x1078, 0x897a, 0x0d7f,
++ 0x0e7f, 0x0f7f, 0x077f, 0x007c, 0x0f7e, 0x6003, 0x0003, 0x2079,
++ 0xab8c, 0x7c04, 0x7b00, 0x7e0c, 0x7d08, 0x6010, 0x2078, 0x7c12,
++ 0x7b16, 0x7e0a, 0x7d0e, 0x0f7f, 0x2c10, 0x1078, 0x1cf0, 0x1078,
++ 0x6df4, 0x007c, 0x0d7e, 0x0f7e, 0x2c78, 0x1078, 0x4963, 0x0f7f,
++ 0x0040, 0x8446, 0x2001, 0xa8a4, 0x2004, 0x603e, 0x6003, 0x0002,
++ 0x1078, 0x627a, 0x1078, 0x639b, 0x6110, 0x2168, 0x694c, 0xd1e4,
++ 0x0040, 0x84a9, 0xd1cc, 0x0040, 0x8480, 0x6948, 0x6838, 0xd0fc,
++ 0x0040, 0x8478, 0x017e, 0x684c, 0x007e, 0x6850, 0x007e, 0xad90,
++ 0x000d, 0xa198, 0x000d, 0x2009, 0x0020, 0x157e, 0x21a8, 0x2304,
++ 0x2012, 0x8318, 0x8210, 0x00f0, 0x8467, 0x157f, 0x007f, 0x6852,
++ 0x007f, 0x684e, 0x017f, 0x2168, 0x1078, 0x13b4, 0x0078, 0x84a3,
++ 0x017e, 0x1078, 0x13b4, 0x0d7f, 0x1078, 0x89cf, 0x0078, 0x84a3,
++ 0x6837, 0x0103, 0x6944, 0xa184, 0x00ff, 0xa0b6, 0x0002, 0x0040,
++ 0x849f, 0xa086, 0x0028, 0x00c0, 0x8491, 0x684b, 0x001c, 0x0078,
++ 0x84a1, 0xd1dc, 0x0040, 0x8498, 0x684b, 0x0015, 0x0078, 0x84a1,
++ 0xd1d4, 0x0040, 0x849f, 0x684b, 0x0007, 0x0078, 0x84a1, 0x684b,
++ 0x0000, 0x1078, 0x4a73, 0x1078, 0x8f89, 0x00c0, 0x84a9, 0x1078,
++ 0x772d, 0x0d7f, 0x007c, 0x2019, 0x0001, 0x1078, 0x7058, 0x6003,
++ 0x0002, 0x2001, 0xa8a4, 0x2004, 0x603e, 0x1078, 0x627a, 0x1078,
++ 0x639b, 0x007c, 0x1078, 0x627a, 0x1078, 0x2880, 0x0d7e, 0x6110,
++ 0x2168, 0x1078, 0x8d06, 0x0040, 0x84cf, 0x6837, 0x0103, 0x684b,
++ 0x0029, 0x6847, 0x0000, 0x1078, 0x4a73, 0x1078, 0x8eb9, 0x0d7f,
++ 0x1078, 0x772d, 0x1078, 0x639b, 0x007c, 0x684b, 0x0015, 0xd1fc,
++ 0x0040, 0x84e1, 0x684b, 0x0007, 0x8002, 0x8000, 0x810a, 0xa189,
++ 0x0000, 0x6962, 0x685e, 0x007c, 0xa182, 0x0040, 0x0079, 0x84e8,
++ 0x84fb, 0x84fb, 0x84fb, 0x84fb, 0x84fb, 0x84fd, 0x84fb, 0x85d0,
++ 0x85dc, 0x84fb, 0x84fb, 0x84fb, 0x84fb, 0x84fb, 0x84fb, 0x84fb,
++ 0x84fb, 0x84fb, 0x84fb, 0x1078, 0x1332, 0x077e, 0x0f7e, 0x0e7e,
++ 0x0d7e, 0x2071, 0xab8c, 0x6110, 0x2178, 0x7614, 0xa6b4, 0x0fff,
++ 0x0f7e, 0x2c78, 0x1078, 0x4963, 0x0f7f, 0x0040, 0x851b, 0xa684,
++ 0x00ff, 0x00c0, 0x851b, 0x6024, 0xd0f4, 0x0040, 0x851b, 0x1078,
++ 0x8fbf, 0x0078, 0x85cb, 0x7e46, 0x7f4c, 0xc7e5, 0x7f4e, 0x6218,
++ 0x2268, 0x6a3c, 0x8211, 0x6a3e, 0x86ff, 0x0040, 0x85c0, 0xa694,
++ 0xff00, 0xa284, 0x0c00, 0x0040, 0x8531, 0x7018, 0x7862, 0x701c,
++ 0x785e, 0xa284, 0x0300, 0x0040, 0x85bd, 0xa686, 0x0100, 0x00c0,
++ 0x8543, 0x2001, 0xab99, 0x2004, 0xa005, 0x00c0, 0x8543, 0xc6c4,
++ 0x7e46, 0x0078, 0x8524, 0x1078, 0x138b, 0x1040, 0x1332, 0x2d00,
++ 0x784a, 0x7f4c, 0xa7bd, 0x0200, 0x7f4e, 0x6837, 0x0103, 0x7838,
++ 0x683a, 0x783c, 0x683e, 0x7840, 0x6842, 0x6e46, 0xa68c, 0x0c00,
++ 0x0040, 0x855e, 0x7318, 0x6b62, 0x731c, 0x6b5e, 0xa68c, 0x00ff,
++ 0xa186, 0x0002, 0x0040, 0x857a, 0xa186, 0x0028, 0x00c0, 0x856c,
++ 0x684b, 0x001c, 0x0078, 0x857c, 0xd6dc, 0x0040, 0x8573, 0x684b,
++ 0x0015, 0x0078, 0x857c, 0xd6d4, 0x0040, 0x857a, 0x684b, 0x0007,
++ 0x0078, 0x857c, 0x684b, 0x0000, 0x6f4e, 0x7850, 0x6852, 0x7854,
++ 0x6856, 0xa01e, 0xd6c4, 0x0040, 0x859a, 0x7328, 0x732c, 0x6b56,
++ 0x83ff, 0x0040, 0x859a, 0xa38a, 0x0009, 0x0048, 0x8591, 0x2019,
++ 0x0008, 0x037e, 0x2308, 0x2019, 0xab98, 0xad90, 0x0019, 0x1078,
++ 0x89e2, 0x037f, 0xd6cc, 0x0040, 0x85bd, 0x7124, 0x695a, 0x81ff,
++ 0x0040, 0x85bd, 0xa192, 0x0021, 0x00c8, 0x85b1, 0x2071, 0xab98,
++ 0x831c, 0x2300, 0xae18, 0xad90, 0x001d, 0x1078, 0x89e2, 0x0078,
++ 0x85bd, 0x7838, 0xd0fc, 0x0040, 0x85ba, 0x2009, 0x0020, 0x695a,
++ 0x0078, 0x85a6, 0x2d78, 0x1078, 0x897a, 0xd6dc, 0x00c0, 0x85c3,
++ 0xa006, 0x0078, 0x85c9, 0x2001, 0x0001, 0x2071, 0xab8c, 0x7218,
++ 0x731c, 0x1078, 0x1653, 0x0d7f, 0x0e7f, 0x0f7f, 0x077f, 0x007c,
++ 0x2001, 0xa8a4, 0x2004, 0x603e, 0x20e1, 0x0005, 0x3d18, 0x3e20,
++ 0x2c10, 0x1078, 0x15fa, 0x007c, 0x2001, 0xa8a4, 0x2004, 0x603e,
++ 0x0d7e, 0x6003, 0x0002, 0x6110, 0x2168, 0x694c, 0xd1e4, 0x0040,
++ 0x870c, 0x603f, 0x0000, 0x0f7e, 0x2c78, 0x1078, 0x4963, 0x0f7f,
++ 0x0040, 0x8622, 0x6814, 0x6910, 0xa115, 0x0040, 0x8622, 0x6a60,
++ 0xa206, 0x00c0, 0x85ff, 0x685c, 0xa106, 0x0040, 0x8622, 0x684c,
++ 0xc0e4, 0x684e, 0x6847, 0x0000, 0x6863, 0x0000, 0x685f, 0x0000,
++ 0x6024, 0xd0f4, 0x00c0, 0x8617, 0x697c, 0x6810, 0xa102, 0x603a,
++ 0x6980, 0x6814, 0xa103, 0x6036, 0x6024, 0xc0f5, 0x6026, 0x0d7e,
++ 0x6018, 0x2068, 0x683c, 0x8000, 0x683e, 0x0d7f, 0x1078, 0x8fbf,
++ 0x0078, 0x870c, 0x694c, 0xd1cc, 0x0040, 0x86d1, 0x6948, 0x6838,
++ 0xd0fc, 0x0040, 0x8689, 0x017e, 0x684c, 0x007e, 0x6850, 0x007e,
++ 0x0f7e, 0x2178, 0x7944, 0xa184, 0x00ff, 0xa0b6, 0x0002, 0x0040,
++ 0x865c, 0xa086, 0x0028, 0x00c0, 0x8643, 0x684b, 0x001c, 0x784b,
++ 0x001c, 0x0078, 0x8667, 0xd1dc, 0x0040, 0x8653, 0x684b, 0x0015,
++ 0x784b, 0x0015, 0x1078, 0x916c, 0x0040, 0x8651, 0x7944, 0xc1dc,
++ 0x7946, 0x0078, 0x8667, 0xd1d4, 0x0040, 0x865c, 0x684b, 0x0007,
++ 0x784b, 0x0007, 0x0078, 0x8667, 0x684c, 0xd0ac, 0x0040, 0x8667,
++ 0x6810, 0x6914, 0xa115, 0x0040, 0x8667, 0x1078, 0x84d5, 0x6848,
++ 0x784a, 0x6860, 0x7862, 0x685c, 0x785e, 0xad90, 0x000d, 0xaf98,
++ 0x000d, 0x2009, 0x0020, 0x157e, 0x21a8, 0x2304, 0x2012, 0x8318,
++ 0x8210, 0x00f0, 0x8675, 0x157f, 0x0f7f, 0x007f, 0x6852, 0x007f,
++ 0x684e, 0x1078, 0x91f4, 0x017f, 0x2168, 0x1078, 0x13b4, 0x0078,
++ 0x8706, 0x017e, 0x0f7e, 0x2178, 0x7944, 0xa184, 0x00ff, 0xa0b6,
++ 0x0002, 0x0040, 0x86b6, 0xa086, 0x0028, 0x00c0, 0x869d, 0x684b,
++ 0x001c, 0x784b, 0x001c, 0x0078, 0x86c1, 0xd1dc, 0x0040, 0x86ad,
++ 0x684b, 0x0015, 0x784b, 0x0015, 0x1078, 0x916c, 0x0040, 0x86ab,
++ 0x7944, 0xc1dc, 0x7946, 0x0078, 0x86c1, 0xd1d4, 0x0040, 0x86b6,
++ 0x684b, 0x0007, 0x784b, 0x0007, 0x0078, 0x86c1, 0x684c, 0xd0ac,
++ 0x0040, 0x86c1, 0x6810, 0x6914, 0xa115, 0x0040, 0x86c1, 0x1078,
++ 0x84d5, 0x6860, 0x7862, 0x685c, 0x785e, 0x684c, 0x784e, 0x0f7f,
++ 0x1078, 0x13b4, 0x0d7f, 0x1078, 0x91f4, 0x1078, 0x89cf, 0x0078,
++ 0x8706, 0x6837, 0x0103, 0x6944, 0xa184, 0x00ff, 0xa0b6, 0x0002,
++ 0x0040, 0x86f7, 0xa086, 0x0028, 0x00c0, 0x86e2, 0x684b, 0x001c,
++ 0x0078, 0x8704, 0xd1dc, 0x0040, 0x86f0, 0x684b, 0x0015, 0x1078,
++ 0x916c, 0x0040, 0x86ee, 0x6944, 0xc1dc, 0x6946, 0x0078, 0x8704,
++ 0xd1d4, 0x0040, 0x86f7, 0x684b, 0x0007, 0x0078, 0x8704, 0x684b,
++ 0x0000, 0x684c, 0xd0ac, 0x0040, 0x8704, 0x6810, 0x6914, 0xa115,
++ 0x0040, 0x8704, 0x1078, 0x84d5, 0x1078, 0x4a73, 0x1078, 0x8f89,
++ 0x00c0, 0x870c, 0x1078, 0x772d, 0x0d7f, 0x007c, 0x1078, 0x61cd,
++ 0x0078, 0x8714, 0x1078, 0x627a, 0x1078, 0x8d06, 0x0040, 0x8733,
++ 0x0d7e, 0x6110, 0x2168, 0x6837, 0x0103, 0x2009, 0xa60c, 0x210c,
++ 0xd18c, 0x00c0, 0x873e, 0xd184, 0x00c0, 0x873a, 0x6108, 0x694a,
++ 0xa18e, 0x0029, 0x00c0, 0x872e, 0x1078, 0xa4e2, 0x6847, 0x0000,
++ 0x1078, 0x4a73, 0x0d7f, 0x1078, 0x772d, 0x1078, 0x62d1, 0x1078,
++ 0x639b, 0x007c, 0x684b, 0x0004, 0x0078, 0x872e, 0x684b, 0x0004,
++ 0x0078, 0x872e, 0xa182, 0x0040, 0x0079, 0x8746, 0x8759, 0x8759,
++ 0x8759, 0x8759, 0x8759, 0x875b, 0x8759, 0x875e, 0x8759, 0x8759,
++ 0x8759, 0x8759, 0x8759, 0x8759, 0x8759, 0x8759, 0x8759, 0x8759,
++ 0x8759, 0x1078, 0x1332, 0x1078, 0x772d, 0x007c, 0x007e, 0x027e,
++ 0xa016, 0x1078, 0x15fa, 0x027f, 0x007f, 0x007c, 0xa182, 0x0085,
++ 0x0079, 0x876a, 0x8773, 0x8771, 0x8771, 0x877f, 0x8771, 0x8771,
++ 0x8771, 0x1078, 0x1332, 0x6003, 0x0001, 0x6106, 0x1078, 0x5d8a,
++ 0x127e, 0x2091, 0x8000, 0x1078, 0x62d1, 0x127f, 0x007c, 0x027e,
++ 0x057e, 0x0d7e, 0x0e7e, 0x2071, 0xab80, 0x7224, 0x6212, 0x7220,
++ 0x1078, 0x8cf2, 0x0040, 0x87a4, 0x2268, 0x6800, 0xa086, 0x0000,
++ 0x0040, 0x87a4, 0x6018, 0x6d18, 0xa52e, 0x00c0, 0x87a4, 0x0c7e,
++ 0x2d60, 0x1078, 0x89f3, 0x0c7f, 0x0040, 0x87a4, 0x6803, 0x0002,
++ 0x6007, 0x0086, 0x0078, 0x87a6, 0x6007, 0x0087, 0x6003, 0x0001,
++ 0x1078, 0x5d8a, 0x1078, 0x62d1, 0x0f7e, 0x2278, 0x1078, 0x4963,
++ 0x0f7f, 0x0040, 0x87be, 0x6824, 0xd0ec, 0x0040, 0x87be, 0x0c7e,
++ 0x2260, 0x603f, 0x0000, 0x1078, 0x8fbf, 0x0c7f, 0x0e7f, 0x0d7f,
++ 0x057f, 0x027f, 0x007c, 0xa186, 0x0013, 0x00c0, 0x87d4, 0x6004,
++ 0xa08a, 0x0085, 0x1048, 0x1332, 0xa08a, 0x008c, 0x10c8, 0x1332,
++ 0xa082, 0x0085, 0x0079, 0x87e3, 0xa186, 0x0027, 0x0040, 0x87dc,
++ 0xa186, 0x0014, 0x10c0, 0x1332, 0x1078, 0x61cd, 0x1078, 0x8ec6,
++ 0x1078, 0x62d1, 0x007c, 0x87ea, 0x87ec, 0x87ec, 0x87ea, 0x87ea,
++ 0x87ea, 0x87ea, 0x1078, 0x1332, 0x1078, 0x61cd, 0x1078, 0x8ec6,
++ 0x1078, 0x62d1, 0x007c, 0xa186, 0x0013, 0x00c0, 0x87fd, 0x6004,
++ 0xa082, 0x0085, 0x2008, 0x0078, 0x8838, 0xa186, 0x0027, 0x00c0,
++ 0x8820, 0x1078, 0x61cd, 0x1078, 0x2880, 0x0d7e, 0x6010, 0x2068,
++ 0x1078, 0x8d06, 0x0040, 0x8816, 0x6837, 0x0103, 0x6847, 0x0000,
++ 0x684b, 0x0029, 0x1078, 0x4a73, 0x1078, 0x8eb9, 0x0d7f, 0x1078,
++ 0x772d, 0x1078, 0x62d1, 0x007c, 0x1078, 0x7773, 0x0078, 0x881b,
++ 0xa186, 0x0014, 0x00c0, 0x881c, 0x1078, 0x61cd, 0x0d7e, 0x6010,
++ 0x2068, 0x1078, 0x8d06, 0x0040, 0x8816, 0x6837, 0x0103, 0x6847,
++ 0x0000, 0x684b, 0x0006, 0x6850, 0xc0ec, 0x6852, 0x0078, 0x8812,
++ 0x0079, 0x883a, 0x8843, 0x8841, 0x8841, 0x8841, 0x8841, 0x8841,
++ 0x885e, 0x1078, 0x1332, 0x1078, 0x61cd, 0x6030, 0xa08c, 0xff00,
++ 0x810f, 0xa186, 0x0039, 0x0040, 0x8851, 0xa186, 0x0035, 0x00c0,
++ 0x8855, 0x2001, 0xa8a2, 0x0078, 0x8857, 0x2001, 0xa8a3, 0x2004,
++ 0x6016, 0x6003, 0x000c, 0x1078, 0x62d1, 0x007c, 0x1078, 0x61cd,
++ 0x6030, 0xa08c, 0xff00, 0x810f, 0xa186, 0x0039, 0x0040, 0x886c,
++ 0xa186, 0x0035, 0x00c0, 0x8870, 0x2001, 0xa8a2, 0x0078, 0x8872,
++ 0x2001, 0xa8a3, 0x2004, 0x6016, 0x6003, 0x000e, 0x1078, 0x62d1,
++ 0x007c, 0xa182, 0x008c, 0x00c8, 0x8883, 0xa182, 0x0085, 0x0048,
++ 0x8883, 0x0079, 0x8886, 0x1078, 0x7773, 0x007c, 0x888d, 0x888d,
++ 0x888d, 0x888d, 0x888f, 0x88ec, 0x888d, 0x1078, 0x1332, 0x0f7e,
++ 0x2c78, 0x1078, 0x4963, 0x0f7f, 0x0040, 0x88a2, 0x6030, 0xa08c,
++ 0xff00, 0x810f, 0xa186, 0x0039, 0x0040, 0x8903, 0xa186, 0x0035,
++ 0x0040, 0x8903, 0x0d7e, 0x1078, 0x8d06, 0x00c0, 0x88ab, 0x1078,
++ 0x8eb9, 0x0078, 0x88ce, 0x6010, 0x2068, 0x684c, 0xd0e4, 0x00c0,
++ 0x88b3, 0x1078, 0x8eb9, 0x6837, 0x0103, 0x6850, 0xd0b4, 0x0040,
++ 0x88bf, 0x684b, 0x0006, 0xc0ec, 0x6852, 0x0078, 0x88ca, 0xd0bc,
++ 0x0040, 0x88c6, 0x684b, 0x0002, 0x0078, 0x88ca, 0x684b, 0x0005,
++ 0x1078, 0x8f85, 0x6847, 0x0000, 0x1078, 0x4a73, 0x2c68, 0x1078,
++ 0x76c7, 0x0040, 0x88e7, 0x6003, 0x0001, 0x6007, 0x001e, 0x2009,
++ 0xab8e, 0x210c, 0x6136, 0x2009, 0xab8f, 0x210c, 0x613a, 0x6918,
++ 0x611a, 0x6920, 0x6122, 0x601f, 0x0001, 0x1078, 0x5d8a, 0x2d60,
++ 0x1078, 0x772d, 0x0d7f, 0x007c, 0x0f7e, 0x2c78, 0x1078, 0x4963,
++ 0x0f7f, 0x0040, 0x8929, 0x6030, 0xa08c, 0xff00, 0x810f, 0xa186,
++ 0x0035, 0x0040, 0x8903, 0xa186, 0x001e, 0x0040, 0x8903, 0xa186,
++ 0x0039, 0x00c0, 0x8929, 0x0d7e, 0x2c68, 0x1078, 0x91bc, 0x00c0,
++ 0x894d, 0x1078, 0x76c7, 0x0040, 0x8926, 0x6106, 0x6003, 0x0001,
++ 0x601f, 0x0001, 0x6918, 0x611a, 0x6928, 0x612a, 0x692c, 0x612e,
++ 0x6930, 0xa18c, 0x00ff, 0x6132, 0x6934, 0x6136, 0x6938, 0x613a,
++ 0x6920, 0x6122, 0x1078, 0x5d8a, 0x1078, 0x62d1, 0x2d60, 0x0078,
++ 0x894d, 0x0d7e, 0x6010, 0x2068, 0x1078, 0x8d06, 0x0040, 0x894d,
++ 0x6837, 0x0103, 0x6850, 0xd0b4, 0x0040, 0x893c, 0xc0ec, 0x6852,
++ 0x684b, 0x0006, 0x0078, 0x8947, 0xd0bc, 0x0040, 0x8943, 0x684b,
++ 0x0002, 0x0078, 0x8947, 0x684b, 0x0005, 0x1078, 0x8f85, 0x6847,
++ 0x0000, 0x1078, 0x4a73, 0x1078, 0x8eb9, 0x0d7f, 0x1078, 0x772d,
++ 0x007c, 0x017e, 0x0d7e, 0x6010, 0x2068, 0x1078, 0x8d06, 0x0040,
++ 0x8961, 0x6837, 0x0103, 0x684b, 0x0028, 0x6847, 0x0000, 0x1078,
++ 0x4a73, 0x0d7f, 0x017f, 0xa186, 0x0013, 0x0040, 0x8973, 0xa186,
++ 0x0014, 0x0040, 0x8973, 0xa186, 0x0027, 0x0040, 0x8973, 0x1078,
++ 0x7773, 0x0078, 0x8979, 0x1078, 0x61cd, 0x1078, 0x8ec6, 0x1078,
++ 0x62d1, 0x007c, 0x057e, 0x067e, 0x0d7e, 0x0f7e, 0x2029, 0x0001,
++ 0xa182, 0x0101, 0x00c8, 0x8986, 0x0078, 0x8988, 0x2009, 0x0100,
++ 0x2130, 0x2069, 0xab98, 0x831c, 0x2300, 0xad18, 0x2009, 0x0020,
++ 0xaf90, 0x001d, 0x1078, 0x89e2, 0xa6b2, 0x0020, 0x7804, 0xa06d,
++ 0x0040, 0x899c, 0x1078, 0x13b4, 0x1078, 0x138b, 0x0040, 0x89c6,
++ 0x8528, 0x6837, 0x0110, 0x683b, 0x0000, 0x2d20, 0x7c06, 0xa68a,
++ 0x003d, 0x00c8, 0x89b2, 0x2608, 0xad90, 0x000f, 0x1078, 0x89e2,
++ 0x0078, 0x89c6, 0xa6b2, 0x003c, 0x2009, 0x003c, 0x2d78, 0xad90,
++ 0x000f, 0x1078, 0x89e2, 0x0078, 0x899c, 0x0f7f, 0x852f, 0xa5ad,
++ 0x0003, 0x7d36, 0xa5ac, 0x0000, 0x0078, 0x89cb, 0x0f7f, 0x852f,
++ 0xa5ad, 0x0003, 0x7d36, 0x0d7f, 0x067f, 0x057f, 0x007c, 0x0f7e,
++ 0x8dff, 0x0040, 0x89e0, 0x6804, 0xa07d, 0x0040, 0x89de, 0x6807,
++ 0x0000, 0x1078, 0x4a73, 0x2f68, 0x0078, 0x89d3, 0x1078, 0x4a73,
++ 0x0f7f, 0x007c, 0x157e, 0xa184, 0x0001, 0x0040, 0x89e8, 0x8108,
++ 0x810c, 0x21a8, 0x2304, 0x8007, 0x2012, 0x8318, 0x8210, 0x00f0,
++ 0x89ea, 0x157f, 0x007c, 0x067e, 0x127e, 0x2091, 0x8000, 0x2031,
++ 0x0001, 0x601c, 0xa084, 0x000f, 0x1079, 0x8a0f, 0x127f, 0x067f,
++ 0x007c, 0x127e, 0x2091, 0x8000, 0x067e, 0x2031, 0x0000, 0x601c,
++ 0xa084, 0x000f, 0x1079, 0x8a0f, 0x067f, 0x127f, 0x007c, 0x8a29,
++ 0x8a17, 0x8a24, 0x8a45, 0x8a17, 0x8a24, 0x8a45, 0x8a24, 0x1078,
++ 0x1332, 0x037e, 0x2019, 0x0010, 0x1078, 0x9dc7, 0x601f, 0x0006,
++ 0x6003, 0x0007, 0x037f, 0x007c, 0xa006, 0x007c, 0xa085, 0x0001,
++ 0x007c, 0x0d7e, 0x86ff, 0x00c0, 0x8a40, 0x6010, 0x2068, 0x1078,
++ 0x8d06, 0x0040, 0x8a42, 0xa00e, 0x2001, 0x0005, 0x1078, 0x4b51,
++ 0x1078, 0x8f85, 0x1078, 0x4a73, 0x1078, 0x772d, 0xa085, 0x0001,
++ 0x0d7f, 0x007c, 0xa006, 0x0078, 0x8a40, 0x6000, 0xa08a, 0x0010,
++ 0x10c8, 0x1332, 0x1079, 0x8a4d, 0x007c, 0x8a5d, 0x8a82, 0x8a5f,
++ 0x8aa5, 0x8a7e, 0x8a5d, 0x8a24, 0x8a29, 0x8a29, 0x8a24, 0x8a24,
++ 0x8a24, 0x8a24, 0x8a24, 0x8a24, 0x8a24, 0x1078, 0x1332, 0x86ff,
++ 0x00c0, 0x8a7b, 0x601c, 0xa086, 0x0006, 0x0040, 0x8a7b, 0x0d7e,
++ 0x6010, 0x2068, 0x1078, 0x8d06, 0x0040, 0x8a70, 0x1078, 0x8f85,
++ 0x0d7f, 0x6007, 0x0085, 0x6003, 0x000b, 0x601f, 0x0002, 0x1078,
++ 0x5d8a, 0x1078, 0x62d1, 0xa085, 0x0001, 0x007c, 0x1078, 0x1757,
++ 0x0078, 0x8a5f, 0x0e7e, 0x2071, 0xa8b1, 0x7024, 0xac06, 0x00c0,
++ 0x8a8b, 0x1078, 0x6fc4, 0x601c, 0xa084, 0x000f, 0xa086, 0x0006,
++ 0x00c0, 0x8a9d, 0x087e, 0x097e, 0x2049, 0x0001, 0x2c40, 0x1078,
++ 0x7246, 0x097f, 0x087f, 0x0078, 0x8a9f, 0x1078, 0x6ebe, 0x0e7f,
++ 0x00c0, 0x8a5f, 0x1078, 0x8a24, 0x007c, 0x037e, 0x0e7e, 0x2071,
++ 0xa8b1, 0x703c, 0xac06, 0x00c0, 0x8ab5, 0x2019, 0x0000, 0x1078,
++ 0x7058, 0x0e7f, 0x037f, 0x0078, 0x8a5f, 0x1078, 0x738a, 0x0e7f,
++ 0x037f, 0x00c0, 0x8a5f, 0x1078, 0x8a24, 0x007c, 0x0c7e, 0x601c,
++ 0xa084, 0x000f, 0x1079, 0x8ac6, 0x0c7f, 0x007c, 0x8ad5, 0x8b47,
++ 0x8c7f, 0x8ae0, 0x8ec6, 0x8ad5, 0x9db8, 0x772d, 0x8b47, 0x1078,
++ 0x8f00, 0x00c0, 0x8ad5, 0x1078, 0x7c83, 0x007c, 0x1078, 0x61cd,
++ 0x1078, 0x62d1, 0x1078, 0x772d, 0x007c, 0x6017, 0x0001, 0x007c,
++ 0x1078, 0x8d06, 0x0040, 0x8ae8, 0x6010, 0xa080, 0x0019, 0x2c02,
++ 0x6000, 0xa08a, 0x0010, 0x10c8, 0x1332, 0x1079, 0x8af0, 0x007c,
++ 0x8b00, 0x8b02, 0x8b24, 0x8b36, 0x8b43, 0x8b00, 0x8ad5, 0x8ad5,
++ 0x8ad5, 0x8b36, 0x8b36, 0x8b00, 0x8b00, 0x8b00, 0x8b00, 0x8b40,
++ 0x1078, 0x1332, 0x0e7e, 0x6010, 0x2070, 0x7050, 0xc0b5, 0x7052,
++ 0x2071, 0xa8b1, 0x7024, 0xac06, 0x0040, 0x8b20, 0x1078, 0x6ebe,
++ 0x6007, 0x0085, 0x6003, 0x000b, 0x601f, 0x0002, 0x2001, 0xa8a3,
++ 0x2004, 0x6016, 0x1078, 0x5d8a, 0x1078, 0x62d1, 0x0e7f, 0x007c,
++ 0x6017, 0x0001, 0x0078, 0x8b1e, 0x0d7e, 0x6010, 0x2068, 0x6850,
++ 0xc0b5, 0x6852, 0x0d7f, 0x6007, 0x0085, 0x6003, 0x000b, 0x601f,
++ 0x0002, 0x1078, 0x5d8a, 0x1078, 0x62d1, 0x007c, 0x0d7e, 0x6017,
++ 0x0001, 0x6010, 0x2068, 0x6850, 0xc0b5, 0x6852, 0x0d7f, 0x007c,
++ 0x1078, 0x772d, 0x007c, 0x1078, 0x1757, 0x0078, 0x8b24, 0x6000,
++ 0xa08a, 0x0010, 0x10c8, 0x1332, 0x1079, 0x8b4f, 0x007c, 0x8b5f,
++ 0x8add, 0x8b61, 0x8b5f, 0x8b61, 0x8b61, 0x8ad6, 0x8b5f, 0x8acf,
++ 0x8acf, 0x8b5f, 0x8b5f, 0x8b5f, 0x8b5f, 0x8b5f, 0x8b5f, 0x1078,
++ 0x1332, 0x0d7e, 0x6018, 0x2068, 0x6804, 0xa084, 0x00ff, 0x0d7f,
++ 0xa08a, 0x000c, 0x10c8, 0x1332, 0x1079, 0x8b6f, 0x007c, 0x8b7b,
++ 0x8c23, 0x8b7d, 0x8bbd, 0x8b7d, 0x8bbd, 0x8b7d, 0x8b8a, 0x8b7b,
++ 0x8bbd, 0x8b7b, 0x8ba7, 0x1078, 0x1332, 0x6004, 0xa08e, 0x0016,
++ 0x0040, 0x8bb8, 0xa08e, 0x0004, 0x0040, 0x8bb8, 0xa08e, 0x0002,
++ 0x0040, 0x8bb8, 0x6004, 0x1078, 0x8f00, 0x0040, 0x8c3e, 0xa08e,
++ 0x0021, 0x0040, 0x8c42, 0xa08e, 0x0022, 0x0040, 0x8c3e, 0xa08e,
++ 0x003d, 0x0040, 0x8c42, 0xa08e, 0x0039, 0x0040, 0x8c46, 0xa08e,
++ 0x0035, 0x0040, 0x8c46, 0xa08e, 0x001e, 0x0040, 0x8bba, 0xa08e,
++ 0x0001, 0x00c0, 0x8bb6, 0x0d7e, 0x6018, 0x2068, 0x6804, 0xa084,
++ 0x00ff, 0x0d7f, 0xa086, 0x0006, 0x0040, 0x8bb8, 0x1078, 0x2880,
++ 0x1078, 0x7c83, 0x1078, 0x8ec6, 0x007c, 0x0c7e, 0x0d7e, 0x6104,
++ 0xa186, 0x0016, 0x0040, 0x8c13, 0xa186, 0x0002, 0x00c0, 0x8be6,
++ 0x6018, 0x2068, 0x68a0, 0xd0bc, 0x00c0, 0x8c6a, 0x6840, 0xa084,
++ 0x00ff, 0xa005, 0x0040, 0x8be6, 0x8001, 0x6842, 0x6013, 0x0000,
++ 0x601f, 0x0007, 0x6017, 0x0398, 0x1078, 0x76c7, 0x0040, 0x8be6,
++ 0x2d00, 0x601a, 0x601f, 0x0001, 0x0078, 0x8c13, 0x0d7f, 0x0c7f,
++ 0x6004, 0xa08e, 0x0002, 0x00c0, 0x8c04, 0x6018, 0xa080, 0x0028,
++ 0x2004, 0xa086, 0x007e, 0x00c0, 0x8c04, 0x2009, 0xa633, 0x2104,
++ 0xc085, 0x200a, 0x0e7e, 0x2071, 0xa600, 0x1078, 0x42b8, 0x0e7f,
++ 0x1078, 0x7c83, 0x0078, 0x8c08, 0x1078, 0x7c83, 0x1078, 0x2880,
++ 0x0e7e, 0x127e, 0x2091, 0x8000, 0x1078, 0x28a6, 0x127f, 0x0e7f,
++ 0x1078, 0x8ec6, 0x007c, 0x2001, 0x0002, 0x1078, 0x4502, 0x6003,
++ 0x0001, 0x6007, 0x0002, 0x1078, 0x5dd7, 0x1078, 0x62d1, 0x0d7f,
++ 0x0c7f, 0x0078, 0x8c12, 0x0c7e, 0x0d7e, 0x6104, 0xa186, 0x0016,
++ 0x0040, 0x8c13, 0x6018, 0x2068, 0x6840, 0xa084, 0x00ff, 0xa005,
++ 0x0040, 0x8be6, 0x8001, 0x6842, 0x6003, 0x0001, 0x1078, 0x5dd7,
++ 0x1078, 0x62d1, 0x0d7f, 0x0c7f, 0x0078, 0x8c12, 0x1078, 0x7c83,
++ 0x0078, 0x8bba, 0x1078, 0x7ca6, 0x0078, 0x8bba, 0x0d7e, 0x2c68,
++ 0x6104, 0x1078, 0x91bc, 0x0d7f, 0x0040, 0x8c52, 0x1078, 0x772d,
++ 0x0078, 0x8c69, 0x6004, 0x8007, 0x6130, 0xa18c, 0x00ff, 0xa105,
++ 0x6032, 0x6007, 0x0085, 0x6003, 0x000b, 0x601f, 0x0002, 0x6038,
++ 0x600a, 0x2001, 0xa8a3, 0x2004, 0x6016, 0x1078, 0x5d8a, 0x1078,
++ 0x62d1, 0x007c, 0x0d7f, 0x0c7f, 0x1078, 0x7c83, 0x1078, 0x2880,
++ 0x0e7e, 0x127e, 0x2091, 0x8000, 0x1078, 0x28a6, 0x6013, 0x0000,
++ 0x601f, 0x0007, 0x6017, 0x0398, 0x127f, 0x0e7f, 0x007c, 0x6000,
++ 0xa08a, 0x0010, 0x10c8, 0x1332, 0x1079, 0x8c87, 0x007c, 0x8c97,
++ 0x8c97, 0x8c97, 0x8c97, 0x8c97, 0x8c97, 0x8c97, 0x8c97, 0x8c97,
++ 0x8ad5, 0x8c97, 0x8add, 0x8c99, 0x8add, 0x8ca7, 0x8c97, 0x1078,
++ 0x1332, 0x6004, 0xa086, 0x008b, 0x0040, 0x8ca7, 0x6007, 0x008b,
++ 0x6003, 0x000d, 0x1078, 0x5d8a, 0x1078, 0x62d1, 0x007c, 0x1078,
++ 0x8eb9, 0x1078, 0x8d06, 0x0040, 0x8cdf, 0x1078, 0x2880, 0x0d7e,
++ 0x1078, 0x8d06, 0x0040, 0x8cc1, 0x6010, 0x2068, 0x6837, 0x0103,
++ 0x684b, 0x0006, 0x6847, 0x0000, 0x6850, 0xc0ed, 0x6852, 0x1078,
++ 0x4a73, 0x2c68, 0x1078, 0x76c7, 0x0040, 0x8ccf, 0x6818, 0x601a,
++ 0x0c7e, 0x2d60, 0x1078, 0x8ec6, 0x0c7f, 0x0078, 0x8cd0, 0x2d60,
++ 0x0d7f, 0x6013, 0x0000, 0x601f, 0x0001, 0x6007, 0x0001, 0x6003,
++ 0x0001, 0x1078, 0x5dd7, 0x1078, 0x62d1, 0x0078, 0x8cf1, 0x6030,
++ 0xa08c, 0xff00, 0x810f, 0xa186, 0x0039, 0x0040, 0x8ceb, 0xa186,
++ 0x0035, 0x00c0, 0x8cef, 0x1078, 0x2880, 0x0078, 0x8cc1, 0x1078,
++ 0x8ec6, 0x007c, 0xa284, 0x000f, 0x00c0, 0x8d03, 0xa282, 0xad00,
++ 0x0048, 0x8d03, 0x2001, 0xa616, 0x2004, 0xa202, 0x00c8, 0x8d03,
++ 0xa085, 0x0001, 0x007c, 0xa006, 0x0078, 0x8d02, 0x027e, 0x0e7e,
++ 0x2071, 0xa600, 0x6210, 0x705c, 0xa202, 0x0048, 0x8d18, 0x7060,
++ 0xa202, 0x00c8, 0x8d18, 0xa085, 0x0001, 0x0e7f, 0x027f, 0x007c,
++ 0xa006, 0x0078, 0x8d15, 0x0e7e, 0x0c7e, 0x037e, 0x007e, 0x127e,
++ 0x2091, 0x8000, 0x2061, 0xad00, 0x2071, 0xa600, 0x7348, 0x7064,
++ 0xa302, 0x00c8, 0x8d45, 0x601c, 0xa206, 0x00c0, 0x8d3d, 0x1078,
++ 0x902b, 0x0040, 0x8d3d, 0x1078, 0x8f00, 0x00c0, 0x8d39, 0x1078,
++ 0x7c83, 0x0c7e, 0x1078, 0x772d, 0x0c7f, 0xace0, 0x0010, 0x7058,
++ 0xac02, 0x00c8, 0x8d45, 0x0078, 0x8d26, 0x127f, 0x007f, 0x037f,
++ 0x0c7f, 0x0e7f, 0x007c, 0x0e7e, 0x0c7e, 0x017e, 0xa188, 0xa735,
++ 0x210c, 0x81ff, 0x0040, 0x8d59, 0x2061, 0xa9b3, 0x611a, 0x1078,
++ 0x2880, 0xa006, 0x0078, 0x8d5e, 0xa085, 0x0001, 0x017f, 0x0c7f,
++ 0x0e7f, 0x007c, 0x0c7e, 0x057e, 0x127e, 0x2091, 0x8000, 0x0c7e,
++ 0x1078, 0x76c7, 0x057f, 0x0040, 0x8d7b, 0x6612, 0x651a, 0x601f,
++ 0x0003, 0x2009, 0x004b, 0x1078, 0x775c, 0xa085, 0x0001, 0x127f,
++ 0x057f, 0x0c7f, 0x007c, 0xa006, 0x0078, 0x8d77, 0x0c7e, 0x057e,
++ 0x127e, 0x2091, 0x8000, 0x62a0, 0x0c7e, 0x1078, 0x76c7, 0x057f,
++ 0x0040, 0x8da9, 0x6013, 0x0000, 0x651a, 0x601f, 0x0003, 0x0c7e,
++ 0x2560, 0x1078, 0x47e9, 0x0c7f, 0x1078, 0x5f01, 0x077e, 0x2039,
++ 0x0000, 0x1078, 0x5e0a, 0x2c08, 0x1078, 0x9f8b, 0x077f, 0x2009,
++ 0x004c, 0x1078, 0x775c, 0xa085, 0x0001, 0x127f, 0x057f, 0x0c7f,
++ 0x007c, 0xa006, 0x0078, 0x8da5, 0x0f7e, 0x0c7e, 0x047e, 0x0c7e,
++ 0x1078, 0x76c7, 0x2c78, 0x0c7f, 0x0040, 0x8dc6, 0x7e12, 0x2c00,
++ 0x781a, 0x781f, 0x0003, 0x2021, 0x0005, 0x1078, 0x8e11, 0x2f60,
++ 0x2009, 0x004d, 0x1078, 0x775c, 0xa085, 0x0001, 0x047f, 0x0c7f,
++ 0x0f7f, 0x007c, 0x0f7e, 0x0c7e, 0x047e, 0x0c7e, 0x1078, 0x76c7,
++ 0x2c78, 0x0c7f, 0x0040, 0x8de4, 0x7e12, 0x2c00, 0x781a, 0x781f,
++ 0x0003, 0x2021, 0x0005, 0x1078, 0x8e11, 0x2f60, 0x2009, 0x004e,
++ 0x1078, 0x775c, 0xa085, 0x0001, 0x047f, 0x0c7f, 0x0f7f, 0x007c,
++ 0x0f7e, 0x0c7e, 0x047e, 0x0c7e, 0x1078, 0x76c7, 0x2c78, 0x0c7f,
++ 0x0040, 0x8e0d, 0x7e12, 0x2c00, 0x781a, 0x781f, 0x0003, 0x2021,
++ 0x0004, 0x1078, 0x8e11, 0x2001, 0xa89d, 0x2004, 0xd0fc, 0x0040,
++ 0x8e06, 0x2f60, 0x1078, 0x772d, 0x0078, 0x8e0b, 0x2f60, 0x2009,
++ 0x0052, 0x1078, 0x775c, 0xa085, 0x0001, 0x047f, 0x0c7f, 0x0f7f,
++ 0x007c, 0x097e, 0x077e, 0x127e, 0x2091, 0x8000, 0x1078, 0x4775,
++ 0x0040, 0x8e1e, 0x2001, 0x8e16, 0x0078, 0x8e24, 0x1078, 0x4739,
++ 0x0040, 0x8e2d, 0x2001, 0x8e1e, 0x007e, 0xa00e, 0x2400, 0x1078,
++ 0x4b51, 0x1078, 0x4a73, 0x007f, 0x007a, 0x2418, 0x1078, 0x6161,
++ 0x62a0, 0x087e, 0x2041, 0x0001, 0x2039, 0x0001, 0x2608, 0x1078,
++ 0x5f1b, 0x087f, 0x1078, 0x5e0a, 0x2f08, 0x2648, 0x1078, 0x9f8b,
++ 0x613c, 0x81ff, 0x1040, 0x5fdb, 0x1078, 0x62d1, 0x127f, 0x077f,
++ 0x097f, 0x007c, 0x0c7e, 0x127e, 0x2091, 0x8000, 0x0c7e, 0x1078,
++ 0x76c7, 0x017f, 0x0040, 0x8e63, 0x660a, 0x611a, 0x601f, 0x0001,
++ 0x2d00, 0x6012, 0x2009, 0x001f, 0x1078, 0x775c, 0xa085, 0x0001,
++ 0x127f, 0x0c7f, 0x007c, 0xa006, 0x0078, 0x8e60, 0x0c7e, 0x127e,
++ 0x2091, 0x8000, 0x0c7e, 0x1078, 0x76c7, 0x017f, 0x0040, 0x8e7f,
++ 0x660a, 0x611a, 0x601f, 0x0008, 0x2d00, 0x6012, 0x2009, 0x0021,
++ 0x1078, 0x775c, 0xa085, 0x0001, 0x127f, 0x0c7f, 0x007c, 0xa006,
++ 0x0078, 0x8e7c, 0x0c7e, 0x127e, 0x2091, 0x8000, 0x0c7e, 0x1078,
++ 0x76c7, 0x017f, 0x0040, 0x8e9b, 0x660a, 0x611a, 0x601f, 0x0001,
++ 0x2d00, 0x6012, 0x2009, 0x003d, 0x1078, 0x775c, 0xa085, 0x0001,
++ 0x127f, 0x0c7f, 0x007c, 0xa006, 0x0078, 0x8e98, 0x0c7e, 0x127e,
++ 0x2091, 0x8000, 0x0c7e, 0x1078, 0x76c7, 0x017f, 0x0040, 0x8eb6,
++ 0x611a, 0x601f, 0x0001, 0x2d00, 0x6012, 0x2009, 0x0000, 0x1078,
++ 0x775c, 0xa085, 0x0001, 0x127f, 0x0c7f, 0x007c, 0xa006, 0x0078,
++ 0x8eb3, 0x027e, 0x0d7e, 0x6218, 0x2268, 0x6a3c, 0x82ff, 0x0040,
++ 0x8ec3, 0x8211, 0x6a3e, 0x0d7f, 0x027f, 0x007c, 0x007e, 0x6000,
++ 0xa086, 0x0000, 0x0040, 0x8ed8, 0x6013, 0x0000, 0x601f, 0x0007,
++ 0x2001, 0xa8a3, 0x2004, 0x6016, 0x1078, 0xa495, 0x603f, 0x0000,
++ 0x007f, 0x007c, 0x067e, 0x0c7e, 0x0d7e, 0x2031, 0xa653, 0x2634,
++ 0xd6e4, 0x0040, 0x8ee8, 0x6618, 0x2660, 0x6e48, 0x1078, 0x46e7,
++ 0x0d7f, 0x0c7f, 0x067f, 0x007c, 0x007e, 0x017e, 0x6004, 0xa08e,
++ 0x0002, 0x0040, 0x8efd, 0xa08e, 0x0003, 0x0040, 0x8efd, 0xa08e,
++ 0x0004, 0x0040, 0x8efd, 0xa085, 0x0001, 0x017f, 0x007f, 0x007c,
++ 0x007e, 0x0d7e, 0x6010, 0xa06d, 0x0040, 0x8f0d, 0x6838, 0xd0fc,
++ 0x0040, 0x8f0d, 0xa006, 0x0078, 0x8f0f, 0xa085, 0x0001, 0x0d7f,
++ 0x007f, 0x007c, 0x0c7e, 0x127e, 0x2091, 0x8000, 0x0c7e, 0x1078,
++ 0x76c7, 0x017f, 0x0040, 0x8f2c, 0x611a, 0x601f, 0x0001, 0x2d00,
++ 0x6012, 0x1078, 0x2880, 0x2009, 0x0028, 0x1078, 0x775c, 0xa085,
++ 0x0001, 0x127f, 0x0c7f, 0x007c, 0xa006, 0x0078, 0x8f29, 0xa186,
++ 0x0015, 0x00c0, 0x8f44, 0x2011, 0xa620, 0x2204, 0xa086, 0x0074,
++ 0x00c0, 0x8f44, 0x1078, 0x7f91, 0x6003, 0x0001, 0x6007, 0x0029,
++ 0x1078, 0x5dd7, 0x0078, 0x8f48, 0x1078, 0x7c83, 0x1078, 0x772d,
++ 0x007c, 0xa186, 0x0016, 0x00c0, 0x8f53, 0x2001, 0x0004, 0x1078,
++ 0x4502, 0x0078, 0x8f74, 0xa186, 0x0015, 0x00c0, 0x8f78, 0x2011,
++ 0xa620, 0x2204, 0xa086, 0x0014, 0x00c0, 0x8f78, 0x0d7e, 0x6018,
++ 0x2068, 0x1078, 0x4649, 0x0d7f, 0x1078, 0x8043, 0x00c0, 0x8f78,
++ 0x0d7e, 0x6018, 0x2068, 0x6890, 0x0d7f, 0xa005, 0x0040, 0x8f78,
++ 0x2001, 0x0006, 0x1078, 0x4502, 0x1078, 0x77f8, 0x0078, 0x8f7c,
++ 0x1078, 0x7c83, 0x1078, 0x772d, 0x007c, 0x6848, 0xa086, 0x0005,
++ 0x00c0, 0x8f84, 0x1078, 0x8f85, 0x007c, 0x6850, 0xc0ad, 0x6852,
++ 0x007c, 0x0e7e, 0x2071, 0xab8c, 0x7014, 0xd0e4, 0x0040, 0x8f9a,
++ 0x6013, 0x0000, 0x6003, 0x0001, 0x6007, 0x0050, 0x1078, 0x5d8a,
++ 0x1078, 0x62d1, 0x0e7f, 0x007c, 0x0c7e, 0x0f7e, 0x2c78, 0x1078,
++ 0x4963, 0x0f7f, 0x0040, 0x8fa9, 0x601c, 0xa084, 0x000f, 0x1079,
++ 0x8fab, 0x0c7f, 0x007c, 0x8ad5, 0x8fb6, 0x8fb9, 0x8fbc, 0xa25d,
++ 0xa279, 0xa27c, 0x8ad5, 0x8ad5, 0x1078, 0x1332, 0x0005, 0x0005,
++ 0x007c, 0x0005, 0x0005, 0x007c, 0x1078, 0x8fbf, 0x007c, 0x0f7e,
++ 0x2c78, 0x1078, 0x4963, 0x0040, 0x8fee, 0x1078, 0x76c7, 0x00c0,
++ 0x8fcf, 0x2001, 0xa8a4, 0x2004, 0x783e, 0x0078, 0x8fee, 0x7818,
++ 0x601a, 0x781c, 0xa086, 0x0003, 0x0040, 0x8fdc, 0x7808, 0x6036,
++ 0x2f00, 0x603a, 0x0078, 0x8fe0, 0x7808, 0x603a, 0x2f00, 0x6036,
++ 0x602a, 0x601f, 0x0001, 0x6007, 0x0035, 0x6003, 0x0001, 0x7920,
++ 0x6122, 0x1078, 0x5d8a, 0x1078, 0x62d1, 0x2f60, 0x0f7f, 0x007c,
++ 0x017e, 0x0f7e, 0x682c, 0x6032, 0xa08e, 0x0001, 0x0040, 0x9001,
++ 0xa086, 0x0005, 0x0040, 0x9005, 0xa006, 0x602a, 0x602e, 0x0078,
++ 0x9016, 0x6824, 0xc0f4, 0xc0d5, 0x6826, 0x6810, 0x2078, 0x787c,
++ 0x6938, 0xa102, 0x7880, 0x6934, 0xa103, 0x00c8, 0x8ffc, 0x6834,
++ 0x602a, 0x6838, 0xa084, 0xfffc, 0x683a, 0x602e, 0x2d00, 0x6036,
++ 0x6808, 0x603a, 0x6918, 0x611a, 0x6920, 0x6122, 0x601f, 0x0001,
++ 0x6007, 0x0039, 0x6003, 0x0001, 0x1078, 0x5d8a, 0x6803, 0x0002,
++ 0x0f7f, 0x017f, 0x007c, 0x007e, 0x017e, 0x6004, 0xa08e, 0x0034,
++ 0x0040, 0x9050, 0xa08e, 0x0035, 0x0040, 0x9050, 0xa08e, 0x0036,
++ 0x0040, 0x9050, 0xa08e, 0x0037, 0x0040, 0x9050, 0xa08e, 0x0038,
++ 0x0040, 0x9050, 0xa08e, 0x0039, 0x0040, 0x9050, 0xa08e, 0x003a,
++ 0x0040, 0x9050, 0xa08e, 0x003b, 0x0040, 0x9050, 0xa085, 0x0001,
++ 0x017f, 0x007f, 0x007c, 0x0f7e, 0x2c78, 0x1078, 0x4963, 0x00c0,
++ 0x905d, 0xa085, 0x0001, 0x0078, 0x906c, 0x6024, 0xd0f4, 0x00c0,
++ 0x906b, 0xc0f5, 0x6026, 0x6010, 0x2078, 0x7828, 0x603a, 0x782c,
++ 0x6036, 0x1078, 0x1757, 0xa006, 0x0f7f, 0x007c, 0x007e, 0x017e,
++ 0x027e, 0x037e, 0x0e7e, 0x2001, 0xa89e, 0x200c, 0x8000, 0x2014,
++ 0x2001, 0x0032, 0x1078, 0x5c1c, 0x2001, 0xa8a2, 0x82ff, 0x00c0,
++ 0x9083, 0x2011, 0x0014, 0x2202, 0x2001, 0xa8a0, 0x200c, 0x8000,
++ 0x2014, 0x2071, 0xa88d, 0x711a, 0x721e, 0x2001, 0x0064, 0x1078,
++ 0x5c1c, 0x2001, 0xa8a3, 0x82ff, 0x00c0, 0x9098, 0x2011, 0x0014,
++ 0x2202, 0x2009, 0xa8a4, 0xa280, 0x000a, 0x200a, 0x1078, 0x498b,
++ 0x0e7f, 0x037f, 0x027f, 0x017f, 0x007f, 0x007c, 0x007e, 0x0e7e,
++ 0x2001, 0xa8a2, 0x2003, 0x0028, 0x2001, 0xa8a3, 0x2003, 0x0014,
++ 0x2071, 0xa88d, 0x701b, 0x0000, 0x701f, 0x07d0, 0x2001, 0xa8a4,
++ 0x2003, 0x001e, 0x0e7f, 0x007f, 0x007c, 0x0c7e, 0x127e, 0x2091,
++ 0x8000, 0x0c7e, 0x1078, 0x76c7, 0x017f, 0x0040, 0x90d5, 0x611a,
++ 0x601f, 0x0001, 0x2d00, 0x6012, 0x2009, 0x0033, 0x1078, 0x775c,
++ 0xa085, 0x0001, 0x127f, 0x0c7f, 0x007c, 0xa006, 0x0078, 0x90d2,
++ 0x0d7e, 0x0e7e, 0x0f7e, 0x2071, 0xa600, 0xa186, 0x0015, 0x00c0,
++ 0x9107, 0x7080, 0xa086, 0x0018, 0x00c0, 0x9107, 0x6010, 0x2068,
++ 0x6a3c, 0xd2e4, 0x00c0, 0x90fb, 0x2c78, 0x1078, 0x6490, 0x0040,
++ 0x910f, 0x706c, 0x6a50, 0xa206, 0x00c0, 0x9103, 0x7070, 0x6a54,
++ 0xa206, 0x00c0, 0x9103, 0x6218, 0xa290, 0x0028, 0x2214, 0x2009,
++ 0x0000, 0x1078, 0x28c8, 0x1078, 0x77f8, 0x0078, 0x910b, 0x1078,
++ 0x7c83, 0x1078, 0x772d, 0x0f7f, 0x0e7f, 0x0d7f, 0x007c, 0x7050,
++ 0xa080, 0x29c0, 0x2004, 0x6a54, 0xa206, 0x0040, 0x90fb, 0x0078,
++ 0x9103, 0x0c7e, 0x127e, 0x2091, 0x8000, 0x0c7e, 0x1078, 0x76c7,
++ 0x017f, 0x0040, 0x9131, 0x611a, 0x601f, 0x0001, 0x2d00, 0x6012,
++ 0x2009, 0x0043, 0x1078, 0x775c, 0xa085, 0x0001, 0x127f, 0x0c7f,
++ 0x007c, 0xa006, 0x0078, 0x912e, 0x0d7e, 0x0e7e, 0x0f7e, 0x2071,
++ 0xa600, 0xa186, 0x0015, 0x00c0, 0x915a, 0x7080, 0xa086, 0x0004,
++ 0x00c0, 0x915a, 0x6010, 0xa0e8, 0x000f, 0x2c78, 0x1078, 0x6490,
++ 0x0040, 0x9162, 0x706c, 0x6a08, 0xa206, 0x00c0, 0x9156, 0x7070,
++ 0x6a0c, 0xa206, 0x00c0, 0x9156, 0x1078, 0x2880, 0x1078, 0x77f8,
++ 0x0078, 0x915e, 0x1078, 0x7c83, 0x1078, 0x772d, 0x0f7f, 0x0e7f,
++ 0x0d7f, 0x007c, 0x7050, 0xa080, 0x29c0, 0x2004, 0x6a0c, 0xa206,
++ 0x0040, 0x9154, 0x0078, 0x9156, 0x017e, 0x027e, 0x684c, 0xd0ac,
++ 0x0040, 0x9184, 0x6914, 0x6a10, 0x2100, 0xa205, 0x0040, 0x9184,
++ 0x6860, 0xa106, 0x00c0, 0x9180, 0x685c, 0xa206, 0x0040, 0x9184,
++ 0x6962, 0x6a5e, 0xa085, 0x0001, 0x027f, 0x017f, 0x007c, 0x0e7e,
++ 0x127e, 0x2071, 0xa600, 0x2091, 0x8000, 0x7548, 0xa582, 0x0001,
++ 0x0048, 0x91b9, 0x704c, 0x2060, 0x6000, 0xa086, 0x0000, 0x0040,
++ 0x91a5, 0xace0, 0x0010, 0x7058, 0xac02, 0x00c8, 0x91a1, 0x0078,
++ 0x9194, 0x2061, 0xad00, 0x0078, 0x9194, 0x6003, 0x0008, 0x8529,
++ 0x754a, 0xaca8, 0x0010, 0x7058, 0xa502, 0x00c8, 0x91b5, 0x754e,
++ 0xa085, 0x0001, 0x127f, 0x0e7f, 0x007c, 0x704f, 0xad00, 0x0078,
++ 0x91b0, 0xa006, 0x0078, 0x91b2, 0x0c7e, 0x027e, 0x017e, 0xa186,
++ 0x0035, 0x0040, 0x91c6, 0x6a34, 0x0078, 0x91c7, 0x6a28, 0x1078,
++ 0x8cf2, 0x0040, 0x91f0, 0x2260, 0x611c, 0xa186, 0x0003, 0x0040,
++ 0x91d5, 0xa186, 0x0006, 0x00c0, 0x91ec, 0x6834, 0xa206, 0x0040,
++ 0x91e4, 0x6838, 0xa206, 0x00c0, 0x91ec, 0x6108, 0x6834, 0xa106,
++ 0x00c0, 0x91ec, 0x0078, 0x91e9, 0x6008, 0x6938, 0xa106, 0x00c0,
++ 0x91ec, 0x6018, 0x6918, 0xa106, 0x017f, 0x027f, 0x0c7f, 0x007c,
++ 0xa085, 0x0001, 0x0078, 0x91ec, 0x6944, 0xd1cc, 0x0040, 0x920d,
++ 0xa18c, 0x00ff, 0xa18e, 0x0002, 0x00c0, 0x920d, 0xad88, 0x001e,
++ 0x210c, 0xa18c, 0x0f00, 0x810f, 0xa18e, 0x0001, 0x00c0, 0x920d,
++ 0x6810, 0x6914, 0xa115, 0x10c0, 0x84d5, 0x007c, 0x067e, 0x6000,
++ 0xa0b2, 0x0010, 0x10c8, 0x1332, 0x1079, 0x9218, 0x067f, 0x007c,
++ 0x9228, 0x96df, 0x97fb, 0x9228, 0x9228, 0x9228, 0x9228, 0x9228,
++ 0x9262, 0x988e, 0x9228, 0x9228, 0x9228, 0x9228, 0x9228, 0x9228,
++ 0x1078, 0x1332, 0x067e, 0x6000, 0xa0b2, 0x0010, 0x10c8, 0x1332,
++ 0x1079, 0x9234, 0x067f, 0x007c, 0x9244, 0x9d53, 0x9244, 0x9244,
++ 0x9244, 0x9244, 0x9244, 0x9244, 0x9d11, 0x9da1, 0x9244, 0xa3b0,
++ 0xa3e4, 0xa3b0, 0xa3e4, 0x9244, 0x1078, 0x1332, 0x067e, 0x6000,
++ 0xa0b2, 0x0010, 0x10c8, 0x1332, 0x1079, 0x9250, 0x067f, 0x007c,
++ 0x9260, 0x99eb, 0x9ac7, 0x9af5, 0x9b70, 0x9260, 0x9c76, 0x9c1e,
++ 0x989a, 0x9ce5, 0x9cfb, 0x9260, 0x9260, 0x9260, 0x9260, 0x9260,
++ 0x1078, 0x1332, 0xa1b2, 0x0044, 0x10c8, 0x1332, 0x2100, 0x0079,
++ 0x9269, 0x92a9, 0x9498, 0x92a9, 0x92a9, 0x92a9, 0x94a0, 0x92a9,
++ 0x92a9, 0x92a9, 0x92a9, 0x92a9, 0x92a9, 0x92a9, 0x92a9, 0x92a9,
++ 0x92a9, 0x92a9, 0x92a9, 0x92a9, 0x92a9, 0x92a9, 0x92a9, 0x92a9,
++ 0x92ab, 0x9311, 0x9320, 0x9377, 0x9396, 0x9415, 0x9485, 0x92a9,
++ 0x92a9, 0x94a4, 0x92a9, 0x92a9, 0x94b7, 0x94c2, 0x92a9, 0x92a9,
++ 0x92a9, 0x92a9, 0x92a9, 0x94fa, 0x92a9, 0x92a9, 0x9509, 0x92a9,
++ 0x92a9, 0x92a9, 0x92a9, 0x92a9, 0x92a9, 0x9522, 0x92a9, 0x92a9,
++ 0x92a9, 0x95af, 0x92a9, 0x92a9, 0x92a9, 0x92a9, 0x92a9, 0x92a9,
++ 0x9629, 0x1078, 0x1332, 0x1078, 0x4967, 0x00c0, 0x92bb, 0x2001,
++ 0xa633, 0x2004, 0xd0cc, 0x00c0, 0x92bb, 0xa084, 0x0009, 0xa086,
++ 0x0008, 0x00c0, 0x92c3, 0x6007, 0x0009, 0x602b, 0x0009, 0x6013,
++ 0x0000, 0x0078, 0x9493, 0x1078, 0x4957, 0x0e7e, 0x0c7e, 0x037e,
++ 0x027e, 0x017e, 0x6218, 0x2270, 0x72a0, 0x027e, 0x2019, 0x0029,
++ 0x1078, 0x5f01, 0x077e, 0x2039, 0x0000, 0x1078, 0x5e0a, 0x2c08,
++ 0x1078, 0x9f8b, 0x077f, 0x017f, 0x2e60, 0x1078, 0x47e9, 0x017f,
++ 0x027f, 0x037f, 0x0c7f, 0x0e7f, 0x6618, 0x0c7e, 0x2660, 0x1078,
++ 0x45d6, 0x0c7f, 0xa6b0, 0x0001, 0x2634, 0xa684, 0x00ff, 0xa082,
++ 0x0006, 0x0048, 0x9303, 0x1078, 0x9ebf, 0x00c0, 0x9371, 0x1078,
++ 0x9e50, 0x00c0, 0x92ff, 0x6007, 0x0008, 0x0078, 0x9493, 0x6007,
++ 0x0009, 0x0078, 0x9493, 0x1078, 0xa09f, 0x0040, 0x930d, 0x1078,
++ 0x9ebf, 0x0040, 0x92f7, 0x0078, 0x9371, 0x6013, 0x1900, 0x0078,
++ 0x92ff, 0x1078, 0x29bb, 0x00c0, 0x9664, 0x6106, 0x1078, 0x9e05,
++ 0x6007, 0x0006, 0x0078, 0x9493, 0x6007, 0x0007, 0x0078, 0x9493,
++ 0x1078, 0xa41c, 0x00c0, 0x9664, 0x1078, 0x29bb, 0x00c0, 0x9664,
++ 0x0d7e, 0x6618, 0x2668, 0x6e04, 0xa684, 0x00ff, 0xa082, 0x0006,
++ 0x00c8, 0x9336, 0x2001, 0x0001, 0x1078, 0x44ee, 0xa6b4, 0xff00,
++ 0x8637, 0xa686, 0x0006, 0x0040, 0x9353, 0xa686, 0x0004, 0x0040,
++ 0x9353, 0x6e04, 0xa6b4, 0x00ff, 0xa686, 0x0006, 0x0040, 0x9353,
++ 0xa686, 0x0004, 0x0040, 0x9353, 0xa686, 0x0005, 0x0040, 0x9353,
++ 0x0d7f, 0x0078, 0x9371, 0x1078, 0x9f25, 0x00c0, 0x936c, 0xa686,
++ 0x0006, 0x00c0, 0x9365, 0x027e, 0x6218, 0xa290, 0x0028, 0x2214,
++ 0x2009, 0x0000, 0x1078, 0x28c8, 0x027f, 0x1078, 0x4649, 0x6007,
++ 0x000a, 0x0d7f, 0x0078, 0x9493, 0x6007, 0x000b, 0x0d7f, 0x0078,
++ 0x9493, 0x1078, 0x2880, 0x6007, 0x0001, 0x0078, 0x9493, 0x1078,
++ 0xa41c, 0x00c0, 0x9664, 0x1078, 0x29bb, 0x00c0, 0x9664, 0x6618,
++ 0x0d7e, 0x2668, 0x6e04, 0x0d7f, 0xa686, 0x0707, 0x0040, 0x9371,
++ 0x027e, 0x6218, 0xa290, 0x0028, 0x2214, 0x2009, 0x0000, 0x1078,
++ 0x28c8, 0x027f, 0x6007, 0x000c, 0x0078, 0x9493, 0x1078, 0x4967,
++ 0x00c0, 0x93a3, 0x2001, 0xa633, 0x2004, 0xa084, 0x0009, 0xa086,
++ 0x0008, 0x00c0, 0x93ab, 0x6007, 0x0009, 0x602b, 0x0009, 0x6013,
++ 0x0000, 0x0078, 0x9493, 0x1078, 0x4957, 0x6618, 0xa6b0, 0x0001,
++ 0x2634, 0xa684, 0x00ff, 0xa082, 0x0006, 0x0048, 0x93ef, 0xa6b4,
++ 0xff00, 0x8637, 0xa686, 0x0004, 0x0040, 0x93c2, 0xa686, 0x0006,
++ 0x00c0, 0x9371, 0x1078, 0x9f34, 0x00c0, 0x93ca, 0x6007, 0x000e,
++ 0x0078, 0x9493, 0x047e, 0x6418, 0xa4a0, 0x0028, 0x2424, 0xa4a4,
++ 0x00ff, 0x8427, 0x047e, 0x1078, 0x2880, 0x047f, 0x017e, 0xa006,
++ 0x2009, 0xa653, 0x210c, 0xd1a4, 0x0040, 0x93e9, 0x2009, 0x0029,
++ 0x1078, 0xa21d, 0x6018, 0x0d7e, 0x2068, 0x6800, 0xc0e5, 0x6802,
++ 0x0d7f, 0x017f, 0x047f, 0x6007, 0x0001, 0x0078, 0x9493, 0x2001,
++ 0x0001, 0x1078, 0x44ee, 0x157e, 0x017e, 0x027e, 0x037e, 0x20a9,
++ 0x0004, 0x2019, 0xa605, 0x2011, 0xab90, 0x1078, 0x80de, 0x037f,
++ 0x027f, 0x017f, 0x157f, 0xa005, 0x0040, 0x940f, 0xa6b4, 0xff00,
++ 0x8637, 0xa686, 0x0006, 0x0040, 0x93c2, 0x0078, 0x9371, 0x6013,
++ 0x1900, 0x6007, 0x0009, 0x0078, 0x9493, 0x1078, 0x4967, 0x00c0,
++ 0x9422, 0x2001, 0xa633, 0x2004, 0xa084, 0x0009, 0xa086, 0x0008,
++ 0x00c0, 0x942a, 0x6007, 0x0009, 0x602b, 0x0009, 0x6013, 0x0000,
++ 0x0078, 0x9493, 0x1078, 0x4957, 0x6618, 0xa6b0, 0x0001, 0x2634,
++ 0xa684, 0x00ff, 0xa082, 0x0006, 0x0048, 0x9472, 0xa6b4, 0xff00,
++ 0x8637, 0xa686, 0x0004, 0x0040, 0x9441, 0xa686, 0x0006, 0x00c0,
++ 0x9371, 0x1078, 0x9f5f, 0x00c0, 0x944d, 0x1078, 0x9e50, 0x00c0,
++ 0x944d, 0x6007, 0x0010, 0x0078, 0x9493, 0x047e, 0x6418, 0xa4a0,
++ 0x0028, 0x2424, 0xa4a4, 0x00ff, 0x8427, 0x047e, 0x1078, 0x2880,
++ 0x047f, 0x017e, 0xa006, 0x2009, 0xa653, 0x210c, 0xd1a4, 0x0040,
++ 0x946c, 0x2009, 0x0029, 0x1078, 0xa21d, 0x6018, 0x0d7e, 0x2068,
++ 0x6800, 0xc0e5, 0x6802, 0x0d7f, 0x017f, 0x047f, 0x6007, 0x0001,
++ 0x0078, 0x9493, 0x1078, 0xa09f, 0x0040, 0x947f, 0xa6b4, 0xff00,
++ 0x8637, 0xa686, 0x0006, 0x0040, 0x9441, 0x0078, 0x9371, 0x6013,
++ 0x1900, 0x6007, 0x0009, 0x0078, 0x9493, 0x1078, 0x29bb, 0x00c0,
++ 0x9664, 0x1078, 0xa41c, 0x00c0, 0x9664, 0x1078, 0x9667, 0x00c0,
++ 0x9371, 0x6007, 0x0012, 0x6003, 0x0001, 0x1078, 0x5dd7, 0x007c,
++ 0x6007, 0x0001, 0x6003, 0x0001, 0x1078, 0x5dd7, 0x0078, 0x9497,
++ 0x6007, 0x0005, 0x0078, 0x949a, 0x1078, 0xa41c, 0x00c0, 0x9664,
++ 0x1078, 0x29bb, 0x00c0, 0x9664, 0x1078, 0x9667, 0x00c0, 0x9371,
++ 0x6007, 0x0020, 0x6003, 0x0001, 0x1078, 0x5dd7, 0x007c, 0x1078,
++ 0x29bb, 0x00c0, 0x9664, 0x6007, 0x0023, 0x6003, 0x0001, 0x1078,
++ 0x5dd7, 0x007c, 0x1078, 0xa41c, 0x00c0, 0x9664, 0x1078, 0x29bb,
++ 0x00c0, 0x9664, 0x1078, 0x9667, 0x00c0, 0x9371, 0x017e, 0x027e,
++ 0x2011, 0xab90, 0x2214, 0x2c08, 0xa006, 0x1078, 0xa1e6, 0x00c0,
++ 0x94e9, 0x2160, 0x6007, 0x0026, 0x6013, 0x1700, 0x2011, 0xab89,
++ 0x2214, 0xa296, 0xffff, 0x00c0, 0x94f3, 0x6007, 0x0025, 0x0078,
++ 0x94f3, 0x6004, 0xa086, 0x0024, 0x00c0, 0x94f0, 0x1078, 0x772d,
++ 0x2160, 0x6007, 0x0025, 0x6003, 0x0001, 0x1078, 0x5dd7, 0x027f,
++ 0x017f, 0x007c, 0x1078, 0x29bb, 0x00c0, 0x9664, 0x6106, 0x1078,
++ 0x9687, 0x6007, 0x002b, 0x0078, 0x9493, 0x6007, 0x002c, 0x0078,
++ 0x9493, 0x1078, 0xa41c, 0x00c0, 0x9664, 0x1078, 0x29bb, 0x00c0,
++ 0x9664, 0x1078, 0x9667, 0x00c0, 0x9371, 0x6106, 0x1078, 0x968c,
++ 0x00c0, 0x951e, 0x6007, 0x002e, 0x0078, 0x9493, 0x6007, 0x002f,
++ 0x0078, 0x9493, 0x1078, 0x29bb, 0x00c0, 0x9664, 0x0e7e, 0x0d7e,
++ 0x0c7e, 0x6018, 0xa080, 0x0001, 0x200c, 0xa184, 0x00ff, 0xa086,
++ 0x0006, 0x0040, 0x953f, 0xa184, 0xff00, 0x8007, 0xa086, 0x0006,
++ 0x0040, 0x953f, 0x0c7f, 0x0d7f, 0x0e7f, 0x0078, 0x9498, 0x2001,
++ 0xa672, 0x2004, 0xd0e4, 0x0040, 0x95ab, 0x2071, 0xab8c, 0x7010,
++ 0x6036, 0x7014, 0x603a, 0x7108, 0x720c, 0x2001, 0xa653, 0x2004,
++ 0xd0a4, 0x0040, 0x955d, 0x6018, 0x2068, 0x6810, 0xa106, 0x00c0,
++ 0x955d, 0x6814, 0xa206, 0x0040, 0x9581, 0x2001, 0xa653, 0x2004,
++ 0xd0ac, 0x00c0, 0x959f, 0x2069, 0xa600, 0x6870, 0xa206, 0x00c0,
++ 0x959f, 0x686c, 0xa106, 0x00c0, 0x959f, 0x7210, 0x1078, 0x8cf2,
++ 0x0040, 0x95a5, 0x1078, 0xa28e, 0x0040, 0x95a5, 0x622a, 0x6007,
++ 0x0036, 0x6003, 0x0001, 0x1078, 0x5d8a, 0x0c7f, 0x0d7f, 0x0e7f,
++ 0x007c, 0x7214, 0xa286, 0xffff, 0x0040, 0x9593, 0x1078, 0x8cf2,
++ 0x0040, 0x95a5, 0xa280, 0x0002, 0x2004, 0x7110, 0xa106, 0x00c0,
++ 0x95a5, 0x0078, 0x956e, 0x7210, 0x2c08, 0xa085, 0x0001, 0x1078,
++ 0xa1e6, 0x2c10, 0x2160, 0x0040, 0x95a5, 0x0078, 0x956e, 0x6007,
++ 0x0037, 0x6013, 0x1500, 0x0078, 0x9579, 0x6007, 0x0037, 0x6013,
++ 0x1700, 0x0078, 0x9579, 0x6007, 0x0012, 0x0078, 0x9579, 0x1078,
++ 0x29bb, 0x00c0, 0x9664, 0x6018, 0xa080, 0x0001, 0x2004, 0xa084,
++ 0xff00, 0x8007, 0xa086, 0x0006, 0x00c0, 0x9498, 0x0e7e, 0x0d7e,
++ 0x0c7e, 0x2001, 0xa672, 0x2004, 0xd0e4, 0x0040, 0x9621, 0x2069,
++ 0xa600, 0x2071, 0xab8c, 0x7008, 0x6036, 0x720c, 0x623a, 0xa286,
++ 0xffff, 0x00c0, 0x95de, 0x7208, 0x0c7e, 0x2c08, 0xa085, 0x0001,
++ 0x1078, 0xa1e6, 0x2c10, 0x0c7f, 0x0040, 0x9615, 0x1078, 0x8cf2,
++ 0x0040, 0x9615, 0x0c7e, 0x027e, 0x2260, 0x1078, 0x89f3, 0x027f,
++ 0x0c7f, 0x7118, 0xa18c, 0xff00, 0x810f, 0xa186, 0x0001, 0x0040,
++ 0x95ff, 0xa186, 0x0005, 0x0040, 0x95f9, 0xa186, 0x0007, 0x00c0,
++ 0x9609, 0xa280, 0x0004, 0x2004, 0xa005, 0x0040, 0x9609, 0x057e,
++ 0x7510, 0x7614, 0x1078, 0xa2a3, 0x057f, 0x0c7f, 0x0d7f, 0x0e7f,
++ 0x007c, 0x6007, 0x003b, 0x602b, 0x0009, 0x6013, 0x2a00, 0x6003,
++ 0x0001, 0x1078, 0x5d8a, 0x0078, 0x9605, 0x6007, 0x003b, 0x602b,
++ 0x0009, 0x6013, 0x1700, 0x6003, 0x0001, 0x1078, 0x5d8a, 0x0078,
++ 0x9605, 0x6007, 0x003b, 0x602b, 0x000b, 0x6013, 0x0000, 0x0078,
++ 0x9579, 0x0e7e, 0x027e, 0x1078, 0x4967, 0x0040, 0x965e, 0x1078,
++ 0x4957, 0x1078, 0xa4a9, 0x00c0, 0x965c, 0x2071, 0xa600, 0x70cc,
++ 0xc085, 0x70ce, 0x0f7e, 0x2079, 0x0100, 0x7298, 0xa284, 0x00ff,
++ 0x706e, 0x78e6, 0xa284, 0xff00, 0x7270, 0xa205, 0x7072, 0x78ea,
++ 0x0f7f, 0x70d7, 0x0000, 0x2001, 0xa653, 0x2004, 0xd0a4, 0x0040,
++ 0x9655, 0x2011, 0xa8ca, 0x2013, 0x07d0, 0xd0ac, 0x00c0, 0x965e,
++ 0x1078, 0x2677, 0x0078, 0x965e, 0x1078, 0xa4d9, 0x027f, 0x0e7f,
++ 0x1078, 0x772d, 0x0078, 0x9497, 0x1078, 0x772d, 0x007c, 0x0d7e,
++ 0x067e, 0x6618, 0x2668, 0x6e04, 0xa6b4, 0xff00, 0x8637, 0xa686,
++ 0x0006, 0x0040, 0x9684, 0xa686, 0x0004, 0x0040, 0x9684, 0x6e04,
++ 0xa6b4, 0x00ff, 0xa686, 0x0006, 0x0040, 0x9684, 0xa686, 0x0004,
++ 0x0040, 0x9684, 0xa085, 0x0001, 0x067f, 0x0d7f, 0x007c, 0x0d7e,
++ 0x1078, 0x96bb, 0x0d7f, 0x007c, 0x0d7e, 0x1078, 0x96ca, 0x00c0,
++ 0x96b4, 0x680c, 0xa08c, 0xff00, 0x6820, 0xa084, 0x00ff, 0xa115,
++ 0x6212, 0x6824, 0x602a, 0xd1e4, 0x0040, 0x96a2, 0x2009, 0x0001,
++ 0x0078, 0x96b0, 0xd1ec, 0x0040, 0x96b4, 0x6920, 0xa18c, 0x00ff,
++ 0x6824, 0x1078, 0x254d, 0x00c0, 0x96b4, 0x2110, 0x2009, 0x0000,
++ 0x1078, 0x28c8, 0x0078, 0x96b8, 0xa085, 0x0001, 0x0078, 0x96b9,
++ 0xa006, 0x0d7f, 0x007c, 0x2069, 0xab8d, 0x6800, 0xa082, 0x0010,
++ 0x00c8, 0x96c8, 0x6013, 0x0000, 0xa085, 0x0001, 0x0078, 0x96c9,
++ 0xa006, 0x007c, 0x6013, 0x0000, 0x2069, 0xab8c, 0x6808, 0xa084,
++ 0xff00, 0xa086, 0x0800, 0x00c0, 0x96de, 0x6800, 0xa084, 0x00ff,
++ 0xa08e, 0x0014, 0x0040, 0x96de, 0xa08e, 0x0010, 0x007c, 0x6004,
++ 0xa0b2, 0x0044, 0x10c8, 0x1332, 0xa1b6, 0x0013, 0x00c0, 0x96eb,
++ 0x2008, 0x0079, 0x96fe, 0xa1b6, 0x0027, 0x0040, 0x96f3, 0xa1b6,
++ 0x0014, 0x10c0, 0x1332, 0x2001, 0x0007, 0x1078, 0x4535, 0x1078,
++ 0x61cd, 0x1078, 0x8ec6, 0x1078, 0x62d1, 0x007c, 0x973e, 0x9740,
++ 0x973e, 0x973e, 0x973e, 0x9740, 0x974c, 0x97d6, 0x9799, 0x97d6,
++ 0x97ad, 0x97d6, 0x974c, 0x97d6, 0x97ce, 0x97d6, 0x97ce, 0x97d6,
++ 0x97d6, 0x973e, 0x973e, 0x973e, 0x973e, 0x973e, 0x973e, 0x973e,
++ 0x973e, 0x973e, 0x973e, 0x973e, 0x9740, 0x973e, 0x97d6, 0x973e,
++ 0x973e, 0x97d6, 0x973e, 0x97d6, 0x97d6, 0x973e, 0x973e, 0x973e,
++ 0x973e, 0x97d6, 0x97d6, 0x973e, 0x97d6, 0x97d6, 0x973e, 0x973e,
++ 0x973e, 0x973e, 0x973e, 0x9740, 0x97d6, 0x97d6, 0x973e, 0x973e,
++ 0x97d6, 0x97d6, 0x973e, 0x973e, 0x973e, 0x973e, 0x1078, 0x1332,
++ 0x1078, 0x61cd, 0x2001, 0xa8a2, 0x2004, 0x6016, 0x6003, 0x0002,
++ 0x1078, 0x62d1, 0x0078, 0x97dc, 0x0f7e, 0x2079, 0xa652, 0x7804,
++ 0x0f7f, 0xd0ac, 0x00c0, 0x97d6, 0x2001, 0x0000, 0x1078, 0x44ee,
++ 0x6018, 0xa080, 0x0004, 0x2004, 0xa086, 0x00ff, 0x0040, 0x97d6,
++ 0x0c7e, 0x6018, 0x2060, 0x6000, 0xd0f4, 0x00c0, 0x9770, 0x6010,
++ 0xa005, 0x0040, 0x9770, 0x0c7f, 0x1078, 0x3699, 0x0078, 0x97d6,
++ 0x0c7f, 0x2001, 0xa600, 0x2004, 0xa086, 0x0002, 0x00c0, 0x977f,
++ 0x0f7e, 0x2079, 0xa600, 0x7890, 0x8000, 0x7892, 0x0f7f, 0x2001,
++ 0x0002, 0x1078, 0x4502, 0x1078, 0x61cd, 0x601f, 0x0001, 0x6003,
++ 0x0001, 0x6007, 0x0002, 0x1078, 0x5dd7, 0x1078, 0x62d1, 0x0c7e,
++ 0x6118, 0x2160, 0x2009, 0x0001, 0x1078, 0x5a52, 0x0c7f, 0x0078,
++ 0x97dc, 0x6618, 0x0d7e, 0x2668, 0x6e04, 0x0d7f, 0xa6b4, 0xff00,
++ 0x8637, 0xa686, 0x0006, 0x0040, 0x97d6, 0xa686, 0x0004, 0x0040,
++ 0x97d6, 0x2001, 0x0004, 0x0078, 0x97d4, 0x2001, 0xa600, 0x2004,
++ 0xa086, 0x0003, 0x00c0, 0x97b6, 0x1078, 0x3699, 0x2001, 0x0006,
++ 0x1078, 0x97dd, 0x6618, 0x0d7e, 0x2668, 0x6e04, 0x0d7f, 0xa6b4,
++ 0xff00, 0x8637, 0xa686, 0x0006, 0x0040, 0x97d6, 0x2001, 0x0006,
++ 0x0078, 0x97d4, 0x2001, 0x0004, 0x0078, 0x97d4, 0x2001, 0x0006,
++ 0x1078, 0x97dd, 0x0078, 0x97d6, 0x1078, 0x4535, 0x1078, 0x61cd,
++ 0x1078, 0x772d, 0x1078, 0x62d1, 0x007c, 0x017e, 0x0d7e, 0x6118,
++ 0x2168, 0x6900, 0xd184, 0x0040, 0x97f8, 0x6104, 0xa18e, 0x000a,
++ 0x00c0, 0x97f0, 0x699c, 0xd1a4, 0x00c0, 0x97f0, 0x2001, 0x0007,
++ 0x1078, 0x4502, 0x2001, 0x0000, 0x1078, 0x44ee, 0x1078, 0x28a6,
++ 0x0d7f, 0x017f, 0x007c, 0x0d7e, 0x6618, 0x2668, 0x6804, 0xa084,
++ 0xff00, 0x8007, 0x0d7f, 0xa0b2, 0x000c, 0x10c8, 0x1332, 0xa1b6,
++ 0x0015, 0x00c0, 0x980f, 0x1079, 0x9816, 0x0078, 0x9815, 0xa1b6,
++ 0x0016, 0x10c0, 0x1332, 0x1079, 0x9822, 0x007c, 0x7d4e, 0x7d4e,
++ 0x7d4e, 0x7d4e, 0x7d4e, 0x7d4e, 0x9877, 0x982e, 0x7d4e, 0x7d4e,
++ 0x7d4e, 0x7d4e, 0x7d4e, 0x7d4e, 0x7d4e, 0x7d4e, 0x7d4e, 0x7d4e,
++ 0x9877, 0x987f, 0x7d4e, 0x7d4e, 0x7d4e, 0x7d4e, 0x0f7e, 0x2079,
++ 0xa652, 0x7804, 0xd0ac, 0x00c0, 0x9855, 0x6018, 0xa07d, 0x0040,
++ 0x9855, 0x7800, 0xd0f4, 0x00c0, 0x9841, 0x7810, 0xa005, 0x00c0,
++ 0x9855, 0x2001, 0x0000, 0x1078, 0x44ee, 0x2001, 0x0002, 0x1078,
++ 0x4502, 0x601f, 0x0001, 0x6003, 0x0001, 0x6007, 0x0002, 0x1078,
++ 0x5dd7, 0x1078, 0x62d1, 0x0078, 0x9875, 0x2011, 0xab83, 0x2204,
++ 0x8211, 0x220c, 0x1078, 0x254d, 0x00c0, 0x9875, 0x0c7e, 0x1078,
++ 0x45c4, 0x0040, 0x9868, 0x0c7f, 0x1078, 0x772d, 0x0078, 0x9875,
++ 0x6010, 0x007e, 0x6014, 0x007e, 0x1078, 0x42f8, 0x007f, 0x6016,
++ 0x007f, 0x6012, 0x0c7f, 0x1078, 0x772d, 0x0f7f, 0x007c, 0x6604,
++ 0xa6b6, 0x001e, 0x00c0, 0x987e, 0x1078, 0x772d, 0x007c, 0x1078,
++ 0x7f8e, 0x00c0, 0x988b, 0x6003, 0x0001, 0x6007, 0x0001, 0x1078,
++ 0x5dd7, 0x0078, 0x988d, 0x1078, 0x772d, 0x007c, 0x6004, 0xa08a,
++ 0x0044, 0x10c8, 0x1332, 0x1078, 0x61cd, 0x1078, 0x8ec6, 0x1078,
++ 0x62d1, 0x007c, 0xa182, 0x0040, 0x0079, 0x989e, 0x98b1, 0x98b1,
++ 0x98b1, 0x98b1, 0x98b3, 0x98b1, 0x98b1, 0x98b1, 0x98b1, 0x98b1,
++ 0x98b1, 0x98b1, 0x98b1, 0x98b1, 0x98b1, 0x98b1, 0x98b1, 0x98b1,
++ 0x98b1, 0x1078, 0x1332, 0x0d7e, 0x0e7e, 0x0f7e, 0x157e, 0x047e,
++ 0x027e, 0x6218, 0xa280, 0x002b, 0x2004, 0xa005, 0x0040, 0x98c4,
++ 0x2021, 0x0000, 0x1078, 0xa472, 0x6106, 0x2071, 0xab80, 0x7444,
++ 0xa4a4, 0xff00, 0x0040, 0x991b, 0xa486, 0x2000, 0x00c0, 0x98d6,
++ 0x2009, 0x0001, 0x2011, 0x0200, 0x1078, 0x5bf1, 0x1078, 0x138b,
++ 0x1040, 0x1332, 0x6003, 0x0007, 0x2d00, 0x6837, 0x010d, 0x6803,
++ 0x0000, 0x683b, 0x0000, 0x6c5a, 0x2c00, 0x685e, 0x6008, 0x68b2,
++ 0x6018, 0x2078, 0x78a0, 0x8007, 0x7130, 0x694a, 0x017e, 0xa084,
++ 0xff00, 0x6846, 0x684f, 0x0000, 0x6857, 0x0036, 0x1078, 0x4a73,
++ 0x017f, 0xa486, 0x2000, 0x00c0, 0x9903, 0x2019, 0x0017, 0x1078,
++ 0xa195, 0x0078, 0x997d, 0xa486, 0x0400, 0x00c0, 0x990d, 0x2019,
++ 0x0002, 0x1078, 0xa146, 0x0078, 0x997d, 0xa486, 0x0200, 0x00c0,
++ 0x9913, 0x1078, 0xa12b, 0xa486, 0x1000, 0x00c0, 0x9919, 0x1078,
++ 0xa17a, 0x0078, 0x997d, 0x2069, 0xa933, 0x6a00, 0xd284, 0x0040,
++ 0x99e7, 0xa284, 0x0300, 0x00c0, 0x99df, 0x6804, 0xa005, 0x0040,
++ 0x99c5, 0x2d78, 0x6003, 0x0007, 0x1078, 0x1370, 0x0040, 0x9984,
++ 0x7800, 0xd08c, 0x00c0, 0x9937, 0x7804, 0x8001, 0x7806, 0x6013,
++ 0x0000, 0x6803, 0x0000, 0x6837, 0x0116, 0x683b, 0x0000, 0x6008,
++ 0x68b2, 0x2c00, 0x684a, 0x6018, 0x2078, 0x78a0, 0x8007, 0x7130,
++ 0x6986, 0x6846, 0x7928, 0x698a, 0x792c, 0x698e, 0x7930, 0x6992,
++ 0x7934, 0x6996, 0x6853, 0x003d, 0x7244, 0xa294, 0x0003, 0xa286,
++ 0x0002, 0x00c0, 0x995f, 0x684f, 0x0040, 0x0078, 0x9969, 0xa286,
++ 0x0001, 0x00c0, 0x9967, 0x684f, 0x0080, 0x0078, 0x9969, 0x684f,
++ 0x0000, 0x20a9, 0x000a, 0x2001, 0xab90, 0xad90, 0x0015, 0x200c,
++ 0x810f, 0x2112, 0x8000, 0x8210, 0x00f0, 0x996f, 0x200c, 0x6982,
++ 0x8000, 0x200c, 0x697e, 0x1078, 0x4a73, 0x027f, 0x047f, 0x157f,
++ 0x0f7f, 0x0e7f, 0x0d7f, 0x007c, 0x2001, 0xa60e, 0x2004, 0xd084,
++ 0x0040, 0x998e, 0x1078, 0x138b, 0x00c0, 0x9930, 0x6013, 0x0100,
++ 0x6003, 0x0001, 0x6007, 0x0041, 0x1078, 0x5d8a, 0x1078, 0x62d1,
++ 0x0078, 0x997d, 0x2069, 0xab92, 0x2d04, 0xa084, 0xff00, 0xa086,
++ 0x1200, 0x00c0, 0x99b9, 0x2069, 0xab80, 0x686c, 0xa084, 0x00ff,
++ 0x017e, 0x6110, 0xa18c, 0x0700, 0xa10d, 0x6112, 0x017f, 0x6003,
++ 0x0001, 0x6007, 0x0043, 0x1078, 0x5d8a, 0x1078, 0x62d1, 0x0078,
++ 0x997d, 0x6013, 0x0200, 0x6003, 0x0001, 0x6007, 0x0041, 0x1078,
++ 0x5d8a, 0x1078, 0x62d1, 0x0078, 0x997d, 0x2001, 0xa60d, 0x2004,
++ 0xd0ec, 0x0040, 0x99cf, 0x2011, 0x8049, 0x1078, 0x361b, 0x6013,
++ 0x0300, 0x0078, 0x99d5, 0x6013, 0x0100, 0x6003, 0x0001, 0x6007,
++ 0x0041, 0x1078, 0x5d8a, 0x1078, 0x62d1, 0x0078, 0x997d, 0x6013,
++ 0x0500, 0x0078, 0x99d5, 0x6013, 0x0600, 0x0078, 0x999a, 0x6013,
++ 0x0200, 0x0078, 0x999a, 0xa186, 0x0013, 0x00c0, 0x99fd, 0x6004,
++ 0xa08a, 0x0040, 0x1048, 0x1332, 0xa08a, 0x0053, 0x10c8, 0x1332,
++ 0xa082, 0x0040, 0x2008, 0x0079, 0x9a82, 0xa186, 0x0051, 0x0040,
++ 0x9a0a, 0xa186, 0x0047, 0x00c0, 0x9a23, 0x6004, 0xa086, 0x0041,
++ 0x0040, 0x9a31, 0x2001, 0x0109, 0x2004, 0xd084, 0x0040, 0x9a31,
++ 0x127e, 0x2091, 0x2200, 0x007e, 0x017e, 0x027e, 0x1078, 0x5c56,
++ 0x027f, 0x017f, 0x007f, 0x127f, 0x6000, 0xa086, 0x0002, 0x00c0,
++ 0x9a31, 0x0078, 0x9ac7, 0xa186, 0x0027, 0x0040, 0x9a2b, 0xa186,
++ 0x0014, 0x10c0, 0x1332, 0x6004, 0xa082, 0x0040, 0x2008, 0x0079,
++ 0x9a34, 0x1078, 0x7773, 0x007c, 0x9a47, 0x9a49, 0x9a49, 0x9a71,
++ 0x9a47, 0x9a47, 0x9a47, 0x9a47, 0x9a47, 0x9a47, 0x9a47, 0x9a47,
++ 0x9a47, 0x9a47, 0x9a47, 0x9a47, 0x9a47, 0x9a47, 0x9a47, 0x1078,
++ 0x1332, 0x1078, 0x61cd, 0x1078, 0x62d1, 0x037e, 0x0d7e, 0x6010,
++ 0xa06d, 0x0040, 0x9a6e, 0xad84, 0xf000, 0x0040, 0x9a6e, 0x6003,
++ 0x0002, 0x6018, 0x2004, 0xd0bc, 0x00c0, 0x9a6e, 0x2019, 0x0004,
++ 0x1078, 0xa1ca, 0x6013, 0x0000, 0x6014, 0xa005, 0x00c0, 0x9a6c,
++ 0x2001, 0xa8a3, 0x2004, 0x6016, 0x6003, 0x0007, 0x0d7f, 0x037f,
++ 0x007c, 0x0d7e, 0x1078, 0x61cd, 0x1078, 0x62d1, 0x1078, 0x8d06,
++ 0x0040, 0x9a7e, 0x6010, 0x2068, 0x1078, 0x13a4, 0x1078, 0x8ec6,
++ 0x0d7f, 0x007c, 0x9a95, 0x9ab4, 0x9a9e, 0x9ac1, 0x9a95, 0x9a95,
++ 0x9a95, 0x9a95, 0x9a95, 0x9a95, 0x9a95, 0x9a95, 0x9a95, 0x9a95,
++ 0x9a95, 0x9a95, 0x9a95, 0x9a95, 0x9a95, 0x1078, 0x1332, 0x6010,
++ 0xa088, 0x0013, 0x2104, 0xa085, 0x0400, 0x200a, 0x1078, 0x61cd,
++ 0x6010, 0xa080, 0x0013, 0x2004, 0xd0b4, 0x0040, 0x9aaf, 0x6003,
++ 0x0007, 0x2009, 0x0043, 0x1078, 0x775c, 0x0078, 0x9ab1, 0x6003,
++ 0x0002, 0x1078, 0x62d1, 0x007c, 0x1078, 0x61cd, 0x1078, 0xa423,
++ 0x00c0, 0x9abe, 0x1078, 0x5bc1, 0x1078, 0x772d, 0x1078, 0x62d1,
++ 0x007c, 0x1078, 0x61cd, 0x2009, 0x0041, 0x0078, 0x9c1e, 0xa182,
++ 0x0040, 0x0079, 0x9acb, 0x9ade, 0x9ae0, 0x9ade, 0x9ade, 0x9ade,
++ 0x9ade, 0x9ade, 0x9ae1, 0x9ade, 0x9ade, 0x9ade, 0x9ade, 0x9ade,
++ 0x9ade, 0x9ade, 0x9ade, 0x9ade, 0x9aec, 0x9ade, 0x1078, 0x1332,
++ 0x007c, 0x6003, 0x0004, 0x6110, 0x20e1, 0x0005, 0x3d18, 0x3e20,
++ 0x2c10, 0x1078, 0x15fa, 0x007c, 0x0d7e, 0x1078, 0x5bc1, 0x0d7f,
++ 0x1078, 0xa495, 0x1078, 0x772d, 0x007c, 0xa182, 0x0040, 0x0079,
++ 0x9af9, 0x9b0c, 0x9b0c, 0x9b0c, 0x9b0c, 0x9b0c, 0x9b0c, 0x9b0c,
++ 0x9b0e, 0x9b0c, 0x9b11, 0x9b3c, 0x9b0c, 0x9b0c, 0x9b0c, 0x9b0c,
++ 0x9b3c, 0x9b0c, 0x9b0c, 0x9b0c, 0x1078, 0x1332, 0x1078, 0x7773,
++ 0x007c, 0x1078, 0x627a, 0x1078, 0x639b, 0x6010, 0x0d7e, 0x2068,
++ 0x684c, 0xd0fc, 0x0040, 0x9b27, 0xa08c, 0x0003, 0xa18e, 0x0002,
++ 0x0040, 0x9b2f, 0x2009, 0x0041, 0x0d7f, 0x0078, 0x9c1e, 0x6003,
++ 0x0007, 0x6017, 0x0000, 0x1078, 0x5bc1, 0x0d7f, 0x007c, 0x1078,
++ 0xa423, 0x0040, 0x9b35, 0x0d7f, 0x007c, 0x1078, 0x5bc1, 0x1078,
++ 0x772d, 0x0d7f, 0x0078, 0x9b2e, 0x037e, 0x1078, 0x627a, 0x1078,
++ 0x639b, 0x6010, 0x0d7e, 0x2068, 0x6018, 0x2004, 0xd0bc, 0x0040,
++ 0x9b5c, 0x684c, 0xa084, 0x0003, 0xa086, 0x0002, 0x0040, 0x9b58,
++ 0x687c, 0x632c, 0xa31a, 0x632e, 0x6880, 0x6328, 0xa31b, 0x632a,
++ 0x6003, 0x0002, 0x0078, 0x9b6d, 0x2019, 0x0004, 0x1078, 0xa1ca,
++ 0x6014, 0xa005, 0x00c0, 0x9b69, 0x2001, 0xa8a3, 0x2004, 0x8003,
++ 0x6016, 0x6013, 0x0000, 0x6003, 0x0007, 0x0d7f, 0x037f, 0x007c,
++ 0xa186, 0x0013, 0x00c0, 0x9b7e, 0x6004, 0xa086, 0x0042, 0x10c0,
++ 0x1332, 0x1078, 0x61cd, 0x1078, 0x62d1, 0x007c, 0xa186, 0x0027,
++ 0x0040, 0x9b86, 0xa186, 0x0014, 0x00c0, 0x9b96, 0x6004, 0xa086,
++ 0x0042, 0x10c0, 0x1332, 0x2001, 0x0007, 0x1078, 0x4535, 0x1078,
++ 0x61cd, 0x1078, 0x8ec6, 0x1078, 0x62d1, 0x007c, 0xa182, 0x0040,
++ 0x0079, 0x9b9a, 0x9bad, 0x9bad, 0x9bad, 0x9bad, 0x9bad, 0x9bad,
++ 0x9bad, 0x9baf, 0x9bbb, 0x9bad, 0x9bad, 0x9bad, 0x9bad, 0x9bad,
++ 0x9bad, 0x9bad, 0x9bad, 0x9bad, 0x9bad, 0x1078, 0x1332, 0x037e,
++ 0x047e, 0x20e1, 0x0005, 0x3d18, 0x3e20, 0x2c10, 0x1078, 0x15fa,
++ 0x047f, 0x037f, 0x007c, 0x6010, 0x0d7e, 0x2068, 0x6810, 0x6a14,
++ 0x6118, 0x210c, 0xd1bc, 0x0040, 0x9bda, 0x6124, 0xd1f4, 0x00c0,
++ 0x9bda, 0x007e, 0x047e, 0x057e, 0x6c7c, 0xa422, 0x6d80, 0x2200,
++ 0xa52b, 0x602c, 0xa420, 0x642e, 0x6028, 0xa529, 0x652a, 0x057f,
++ 0x047f, 0x007f, 0xa20d, 0x00c0, 0x9bee, 0x684c, 0xd0fc, 0x0040,
++ 0x9be6, 0x2009, 0x0041, 0x0d7f, 0x0078, 0x9c1e, 0x6003, 0x0007,
++ 0x6017, 0x0000, 0x1078, 0x5bc1, 0x0d7f, 0x007c, 0x007e, 0x0f7e,
++ 0x2c78, 0x1078, 0x4963, 0x0f7f, 0x007f, 0x0040, 0x9bfb, 0x6003,
++ 0x0002, 0x0d7f, 0x007c, 0x2009, 0xa60d, 0x210c, 0xd19c, 0x0040,
++ 0x9c05, 0x6003, 0x0007, 0x0078, 0x9c07, 0x6003, 0x0006, 0x1078,
++ 0x9c0d, 0x1078, 0x5bc3, 0x0d7f, 0x007c, 0xd2fc, 0x0040, 0x9c19,
++ 0x8002, 0x8000, 0x8212, 0xa291, 0x0000, 0x2009, 0x0009, 0x0078,
++ 0x9c1b, 0x2009, 0x0015, 0x6a6a, 0x6866, 0x007c, 0xa182, 0x0040,
++ 0x0048, 0x9c24, 0x0079, 0x9c31, 0xa186, 0x0013, 0x0040, 0x9c2c,
++ 0xa186, 0x0014, 0x10c0, 0x1332, 0x6024, 0xd0dc, 0x1040, 0x1332,
++ 0x007c, 0x9c44, 0x9c4b, 0x9c57, 0x9c63, 0x9c44, 0x9c44, 0x9c44,
++ 0x9c72, 0x9c44, 0x9c46, 0x9c46, 0x9c44, 0x9c44, 0x9c44, 0x9c44,
++ 0x9c44, 0x9c44, 0x9c44, 0x9c44, 0x1078, 0x1332, 0x6024, 0xd0dc,
++ 0x1040, 0x1332, 0x007c, 0x6003, 0x0001, 0x6106, 0x1078, 0x5d8a,
++ 0x127e, 0x2091, 0x8000, 0x1078, 0x62d1, 0x127f, 0x007c, 0x6003,
++ 0x0001, 0x6106, 0x1078, 0x5d8a, 0x127e, 0x2091, 0x8000, 0x1078,
++ 0x62d1, 0x127f, 0x007c, 0x6003, 0x0003, 0x6106, 0x2c10, 0x1078,
++ 0x1cf0, 0x127e, 0x2091, 0x8000, 0x1078, 0x5df6, 0x1078, 0x639b,
++ 0x127f, 0x007c, 0xa016, 0x1078, 0x15fa, 0x007c, 0x127e, 0x2091,
++ 0x8000, 0x037e, 0x0d7e, 0xa182, 0x0040, 0x1079, 0x9c83, 0x0d7f,
++ 0x037f, 0x127f, 0x007c, 0x9c93, 0x9c95, 0x9caa, 0x9cc9, 0x9c93,
++ 0x9c93, 0x9c93, 0x9ce1, 0x9c93, 0x9c93, 0x9c93, 0x9c93, 0x9c93,
++ 0x9c93, 0x9c93, 0x9c93, 0x1078, 0x1332, 0x6010, 0x2068, 0x684c,
++ 0xd0fc, 0x0040, 0x9cbf, 0xa09c, 0x0003, 0xa39e, 0x0003, 0x0040,
++ 0x9cbf, 0x6003, 0x0001, 0x6106, 0x1078, 0x5d8a, 0x1078, 0x62d1,
++ 0x0078, 0x9ce4, 0x6010, 0x2068, 0x684c, 0xd0fc, 0x0040, 0x9cbf,
++ 0xa09c, 0x0003, 0xa39e, 0x0003, 0x0040, 0x9cbf, 0x6003, 0x0001,
++ 0x6106, 0x1078, 0x5d8a, 0x1078, 0x62d1, 0x0078, 0x9ce4, 0x6013,
++ 0x0000, 0x6017, 0x0000, 0x2019, 0x0004, 0x1078, 0xa1ca, 0x0078,
++ 0x9ce4, 0x6010, 0x2068, 0x684c, 0xd0fc, 0x0040, 0x9cbf, 0xa09c,
++ 0x0003, 0xa39e, 0x0003, 0x0040, 0x9cbf, 0x6003, 0x0003, 0x6106,
++ 0x2c10, 0x1078, 0x1cf0, 0x1078, 0x5df6, 0x1078, 0x639b, 0x0078,
++ 0x9ce4, 0xa016, 0x1078, 0x15fa, 0x007c, 0x1078, 0x61cd, 0x6110,
++ 0x81ff, 0x0040, 0x9cf6, 0x0d7e, 0x2168, 0x1078, 0xa4e2, 0x037e,
++ 0x2019, 0x0029, 0x1078, 0xa1ca, 0x037f, 0x0d7f, 0x1078, 0x8ec6,
++ 0x1078, 0x62d1, 0x007c, 0x1078, 0x627a, 0x6110, 0x81ff, 0x0040,
++ 0x9d0c, 0x0d7e, 0x2168, 0x1078, 0xa4e2, 0x037e, 0x2019, 0x0029,
++ 0x1078, 0xa1ca, 0x037f, 0x0d7f, 0x1078, 0x8ec6, 0x1078, 0x639b,
++ 0x007c, 0xa182, 0x0085, 0x0079, 0x9d15, 0x9d1e, 0x9d1c, 0x9d1c,
++ 0x9d2a, 0x9d1c, 0x9d1c, 0x9d1c, 0x1078, 0x1332, 0x6003, 0x000b,
++ 0x6106, 0x1078, 0x5d8a, 0x127e, 0x2091, 0x8000, 0x1078, 0x62d1,
++ 0x127f, 0x007c, 0x027e, 0x0e7e, 0x1078, 0xa41c, 0x0040, 0x9d34,
++ 0x1078, 0x772d, 0x0078, 0x9d50, 0x2071, 0xab80, 0x7224, 0x6212,
++ 0x7220, 0x1078, 0xa069, 0x0040, 0x9d41, 0x6007, 0x0086, 0x0078,
++ 0x9d4a, 0x6007, 0x0087, 0x7224, 0xa296, 0xffff, 0x00c0, 0x9d4a,
++ 0x6007, 0x0086, 0x6003, 0x0001, 0x1078, 0x5d8a, 0x1078, 0x62d1,
++ 0x0e7f, 0x027f, 0x007c, 0xa186, 0x0013, 0x00c0, 0x9d64, 0x6004,
++ 0xa08a, 0x0085, 0x1048, 0x1332, 0xa08a, 0x008c, 0x10c8, 0x1332,
++ 0xa082, 0x0085, 0x0079, 0x9d7b, 0xa186, 0x0027, 0x0040, 0x9d70,
++ 0xa186, 0x0014, 0x0040, 0x9d70, 0x1078, 0x7773, 0x0078, 0x9d7a,
++ 0x2001, 0x0007, 0x1078, 0x4535, 0x1078, 0x61cd, 0x1078, 0x8ec6,
++ 0x1078, 0x62d1, 0x007c, 0x9d82, 0x9d84, 0x9d84, 0x9d82, 0x9d82,
++ 0x9d82, 0x9d82, 0x1078, 0x1332, 0x1078, 0x61cd, 0x1078, 0x8ec6,
++ 0x1078, 0x62d1, 0x007c, 0xa182, 0x0085, 0x1048, 0x1332, 0xa182,
++ 0x008c, 0x10c8, 0x1332, 0xa182, 0x0085, 0x0079, 0x9d97, 0x9d9e,
++ 0x9d9e, 0x9d9e, 0x9da0, 0x9d9e, 0x9d9e, 0x9d9e, 0x1078, 0x1332,
++ 0x007c, 0xa186, 0x0013, 0x0040, 0x9db1, 0xa186, 0x0014, 0x0040,
++ 0x9db1, 0xa186, 0x0027, 0x0040, 0x9db1, 0x1078, 0x7773, 0x0078,
++ 0x9db7, 0x1078, 0x61cd, 0x1078, 0x8ec6, 0x1078, 0x62d1, 0x007c,
++ 0x037e, 0x1078, 0xa495, 0x603f, 0x0000, 0x2019, 0x000b, 0x1078,
++ 0x9dc7, 0x601f, 0x0006, 0x6003, 0x0007, 0x037f, 0x007c, 0x127e,
++ 0x037e, 0x2091, 0x8000, 0x087e, 0x2c40, 0x097e, 0x2049, 0x0000,
++ 0x1078, 0x7246, 0x097f, 0x087f, 0x00c0, 0x9e02, 0x077e, 0x2c38,
++ 0x1078, 0x72f3, 0x077f, 0x00c0, 0x9e02, 0x6000, 0xa086, 0x0000,
++ 0x0040, 0x9e02, 0x601c, 0xa086, 0x0007, 0x0040, 0x9e02, 0x0d7e,
++ 0x6000, 0xa086, 0x0004, 0x00c0, 0x9df3, 0x1078, 0xa495, 0x601f,
++ 0x0007, 0x1078, 0x1757, 0x6010, 0x2068, 0x1078, 0x8d06, 0x0040,
++ 0x9dfb, 0x1078, 0xa1ca, 0x0d7f, 0x6013, 0x0000, 0x1078, 0xa495,
++ 0x601f, 0x0007, 0x037f, 0x127f, 0x007c, 0x0f7e, 0x0c7e, 0x037e,
++ 0x157e, 0x2079, 0xab80, 0x7938, 0x783c, 0x1078, 0x254d, 0x00c0,
++ 0x9e49, 0x017e, 0x0c7e, 0x1078, 0x45c4, 0x00c0, 0x9e49, 0x017f,
++ 0x027f, 0x027e, 0x017e, 0x2019, 0x0029, 0x1078, 0x73d0, 0x1078,
++ 0x5f01, 0x077e, 0x2039, 0x0000, 0x1078, 0x5e0a, 0x077f, 0x017f,
++ 0x077e, 0x2039, 0x0000, 0x1078, 0x9f8b, 0x077f, 0x1078, 0x47e9,
++ 0x027e, 0x6204, 0xa294, 0xff00, 0x8217, 0xa286, 0x0006, 0x0040,
++ 0x9e3d, 0xa286, 0x0004, 0x00c0, 0x9e40, 0x62a0, 0x1078, 0x2942,
++ 0x027f, 0x017f, 0x1078, 0x42f8, 0x6612, 0x6516, 0xa006, 0x0078,
++ 0x9e4b, 0x0c7f, 0x017f, 0x157f, 0x037f, 0x0c7f, 0x0f7f, 0x007c,
++ 0x0c7e, 0x0d7e, 0x0e7e, 0x017e, 0x2009, 0xa620, 0x2104, 0xa086,
++ 0x0074, 0x00c0, 0x9eb3, 0x2069, 0xab8e, 0x690c, 0xa182, 0x0100,
++ 0x0048, 0x9ea3, 0x6908, 0xa184, 0x8000, 0x0040, 0x9eaf, 0x6018,
++ 0x2070, 0x7010, 0xa084, 0x00ff, 0x0040, 0x9e72, 0x7000, 0xd0f4,
++ 0x0040, 0x9e76, 0xa184, 0x0800, 0x0040, 0x9eaf, 0x6910, 0xa18a,
++ 0x0001, 0x0048, 0x9ea7, 0x6914, 0x2069, 0xabae, 0x6904, 0x81ff,
++ 0x00c0, 0x9e9b, 0x690c, 0xa182, 0x0100, 0x0048, 0x9ea3, 0x6908,
++ 0x81ff, 0x00c0, 0x9e9f, 0x6910, 0xa18a, 0x0001, 0x0048, 0x9ea7,
++ 0x6918, 0xa18a, 0x0001, 0x0048, 0x9eaf, 0x0078, 0x9eb9, 0x6013,
++ 0x0100, 0x0078, 0x9eb5, 0x6013, 0x0300, 0x0078, 0x9eb5, 0x6013,
++ 0x0500, 0x0078, 0x9eb5, 0x6013, 0x0700, 0x0078, 0x9eb5, 0x6013,
++ 0x0900, 0x0078, 0x9eb5, 0x6013, 0x0b00, 0x0078, 0x9eb5, 0x6013,
++ 0x0f00, 0x0078, 0x9eb5, 0x6013, 0x2d00, 0xa085, 0x0001, 0x0078,
++ 0x9eba, 0xa006, 0x017f, 0x0e7f, 0x0d7f, 0x0c7f, 0x007c, 0x0c7e,
++ 0x0d7e, 0x027e, 0x037e, 0x157e, 0x6218, 0x2268, 0x6b04, 0xa394,
++ 0x00ff, 0xa286, 0x0006, 0x0040, 0x9ee3, 0xa286, 0x0004, 0x0040,
++ 0x9ee3, 0xa394, 0xff00, 0x8217, 0xa286, 0x0006, 0x0040, 0x9ee3,
++ 0xa286, 0x0004, 0x0040, 0x9ee3, 0x0c7e, 0x2d60, 0x1078, 0x45d6,
++ 0x0c7f, 0x0078, 0x9f1e, 0x2011, 0xab96, 0xad98, 0x000a, 0x20a9,
++ 0x0004, 0x1078, 0x80de, 0x00c0, 0x9f1f, 0x2011, 0xab9a, 0xad98,
++ 0x0006, 0x20a9, 0x0004, 0x1078, 0x80de, 0x00c0, 0x9f1f, 0x047e,
++ 0x017e, 0x6aa0, 0xa294, 0x00ff, 0x8227, 0xa006, 0x2009, 0xa653,
++ 0x210c, 0xd1a4, 0x0040, 0x9f0b, 0x2009, 0x0029, 0x1078, 0xa21d,
++ 0x6800, 0xc0e5, 0x6802, 0x2019, 0x0029, 0x1078, 0x5f01, 0x077e,
++ 0x2039, 0x0000, 0x1078, 0x5e0a, 0x2c08, 0x1078, 0x9f8b, 0x077f,
++ 0x2001, 0x0007, 0x1078, 0x4535, 0x017f, 0x047f, 0xa006, 0x157f,
++ 0x037f, 0x027f, 0x0d7f, 0x0c7f, 0x007c, 0x0d7e, 0x2069, 0xab8e,
++ 0x6800, 0xa086, 0x0800, 0x0040, 0x9f31, 0x6013, 0x0000, 0x0078,
++ 0x9f32, 0xa006, 0x0d7f, 0x007c, 0x0c7e, 0x0f7e, 0x017e, 0x027e,
++ 0x037e, 0x157e, 0x2079, 0xab8c, 0x7930, 0x7834, 0x1078, 0x254d,
++ 0x00c0, 0x9f58, 0x1078, 0x45c4, 0x00c0, 0x9f58, 0x2011, 0xab90,
++ 0xac98, 0x000a, 0x20a9, 0x0004, 0x1078, 0x80de, 0x00c0, 0x9f58,
++ 0x2011, 0xab94, 0xac98, 0x0006, 0x20a9, 0x0004, 0x1078, 0x80de,
++ 0x157f, 0x037f, 0x027f, 0x017f, 0x0f7f, 0x0c7f, 0x007c, 0x0c7e,
++ 0x007e, 0x017e, 0x027e, 0x037e, 0x157e, 0x2011, 0xab83, 0x2204,
++ 0x8211, 0x220c, 0x1078, 0x254d, 0x00c0, 0x9f84, 0x1078, 0x45c4,
++ 0x00c0, 0x9f84, 0x2011, 0xab96, 0xac98, 0x000a, 0x20a9, 0x0004,
++ 0x1078, 0x80de, 0x00c0, 0x9f84, 0x2011, 0xab9a, 0xac98, 0x0006,
++ 0x20a9, 0x0004, 0x1078, 0x80de, 0x157f, 0x037f, 0x027f, 0x017f,
++ 0x007f, 0x0c7f, 0x007c, 0x0e7e, 0x0c7e, 0x087e, 0x077e, 0x067e,
++ 0x057e, 0x047e, 0x027e, 0x127e, 0x2091, 0x8000, 0x2740, 0x2029,
++ 0xa8ba, 0x252c, 0x2021, 0xa8c0, 0x2424, 0x2061, 0xad00, 0x2071,
++ 0xa600, 0x7648, 0x7064, 0x81ff, 0x0040, 0x9fb2, 0x007e, 0xa186,
++ 0xa9b3, 0x007f, 0x0040, 0x9fb2, 0x8001, 0xa602, 0x00c8, 0xa01c,
++ 0x0078, 0x9fb5, 0xa606, 0x0040, 0xa01c, 0x2100, 0xac06, 0x0040,
++ 0xa012, 0x1078, 0xa242, 0x0040, 0xa012, 0x671c, 0xa786, 0x0001,
++ 0x0040, 0xa037, 0xa786, 0x0004, 0x0040, 0xa037, 0xa786, 0x0007,
++ 0x0040, 0xa012, 0x2500, 0xac06, 0x0040, 0xa012, 0x2400, 0xac06,
++ 0x0040, 0xa012, 0x1078, 0xa256, 0x00c0, 0xa012, 0x88ff, 0x0040,
++ 0x9fdd, 0x6020, 0xa906, 0x00c0, 0xa012, 0x0d7e, 0x6000, 0xa086,
++ 0x0004, 0x00c0, 0x9fe7, 0x017e, 0x1078, 0x1757, 0x017f, 0xa786,
++ 0x0008, 0x00c0, 0x9ff6, 0x1078, 0x8f00, 0x00c0, 0x9ff6, 0x1078,
++ 0x7c83, 0x0d7f, 0x1078, 0x8ec6, 0x0078, 0xa012, 0x6010, 0x2068,
++ 0x1078, 0x8d06, 0x0040, 0xa00f, 0xa786, 0x0003, 0x00c0, 0xa026,
++ 0x6837, 0x0103, 0x6b4a, 0x6847, 0x0000, 0x1078, 0xa4e2, 0x017e,
++ 0x1078, 0x8f7d, 0x1078, 0x4a73, 0x017f, 0x1078, 0x8eb9, 0x0d7f,
++ 0x1078, 0x8ec6, 0xace0, 0x0010, 0x2001, 0xa616, 0x2004, 0xac02,
++ 0x00c8, 0xa01c, 0x0078, 0x9f9f, 0x127f, 0x027f, 0x047f, 0x057f,
++ 0x067f, 0x077f, 0x087f, 0x0c7f, 0x0e7f, 0x007c, 0xa786, 0x0006,
++ 0x00c0, 0xa000, 0xa386, 0x0005, 0x0040, 0xa034, 0x1078, 0xa4e2,
++ 0x1078, 0xa1ca, 0x0078, 0xa00f, 0x0d7f, 0x0078, 0xa012, 0x1078,
++ 0xa256, 0x00c0, 0xa012, 0x81ff, 0x0040, 0xa012, 0xa180, 0x0001,
++ 0x2004, 0xa086, 0x0018, 0x0040, 0xa04c, 0xa180, 0x0001, 0x2004,
++ 0xa086, 0x002d, 0x00c0, 0xa012, 0x6000, 0xa086, 0x0002, 0x00c0,
++ 0xa012, 0x1078, 0x8eec, 0x0040, 0xa05d, 0x1078, 0x8f00, 0x00c0,
++ 0xa012, 0x1078, 0x7c83, 0x0078, 0xa065, 0x1078, 0x28a6, 0x1078,
++ 0x8f00, 0x00c0, 0xa065, 0x1078, 0x7c83, 0x1078, 0x8ec6, 0x0078,
++ 0xa012, 0x0c7e, 0x0e7e, 0x017e, 0x2c08, 0x2170, 0xa006, 0x1078,
++ 0xa1e6, 0x017f, 0x0040, 0xa079, 0x601c, 0xa084, 0x000f, 0x1079,
++ 0xa07c, 0x0e7f, 0x0c7f, 0x007c, 0xa084, 0xa084, 0xa084, 0xa084,
++ 0xa084, 0xa084, 0xa086, 0xa084, 0xa006, 0x007c, 0x047e, 0x017e,
++ 0x7018, 0xa080, 0x0028, 0x2024, 0xa4a4, 0x00ff, 0x8427, 0x2c00,
++ 0x2009, 0x0020, 0x1078, 0xa21d, 0x017f, 0x047f, 0x037e, 0x2019,
++ 0x0002, 0x1078, 0x9dc7, 0x037f, 0xa085, 0x0001, 0x007c, 0x2001,
++ 0x0001, 0x1078, 0x44ee, 0x157e, 0x017e, 0x027e, 0x037e, 0x20a9,
++ 0x0004, 0x2019, 0xa605, 0x2011, 0xab96, 0x1078, 0x80de, 0x037f,
++ 0x027f, 0x017f, 0x157f, 0xa005, 0x007c, 0x0f7e, 0x0e7e, 0x0c7e,
++ 0x087e, 0x077e, 0x067e, 0x027e, 0x127e, 0x2091, 0x8000, 0x2740,
++ 0x2061, 0xad00, 0x2079, 0x0001, 0x8fff, 0x0040, 0xa11d, 0x2071,
++ 0xa600, 0x7648, 0x7064, 0x8001, 0xa602, 0x00c8, 0xa11d, 0x88ff,
++ 0x0040, 0xa0d8, 0x2800, 0xac06, 0x00c0, 0xa113, 0x2079, 0x0000,
++ 0x1078, 0xa242, 0x0040, 0xa113, 0x2400, 0xac06, 0x0040, 0xa113,
++ 0x671c, 0xa786, 0x0006, 0x00c0, 0xa113, 0xa786, 0x0007, 0x0040,
++ 0xa113, 0x88ff, 0x00c0, 0xa0f7, 0x6018, 0xa206, 0x00c0, 0xa113,
++ 0x85ff, 0x0040, 0xa0f7, 0x6020, 0xa106, 0x00c0, 0xa113, 0x0d7e,
++ 0x6000, 0xa086, 0x0004, 0x00c0, 0xa103, 0x1078, 0xa495, 0x601f,
++ 0x0007, 0x1078, 0x1757, 0x6010, 0x2068, 0x1078, 0x8d06, 0x0040,
++ 0xa10d, 0x047e, 0x1078, 0xa1ca, 0x047f, 0x0d7f, 0x1078, 0x8ec6,
++ 0x88ff, 0x00c0, 0xa127, 0xace0, 0x0010, 0x2001, 0xa616, 0x2004,
++ 0xac02, 0x00c8, 0xa11d, 0x0078, 0xa0c4, 0xa006, 0x127f, 0x027f,
++ 0x067f, 0x077f, 0x087f, 0x0c7f, 0x0e7f, 0x0f7f, 0x007c, 0xa8c5,
++ 0x0001, 0x0078, 0xa11e, 0x077e, 0x057e, 0x087e, 0x2041, 0x0000,
++ 0x2029, 0x0001, 0x2c20, 0x2019, 0x0002, 0x6218, 0x097e, 0x2049,
++ 0x0000, 0x1078, 0x7246, 0x097f, 0x087f, 0x2039, 0x0000, 0x1078,
++ 0x72f3, 0x1078, 0xa0b5, 0x057f, 0x077f, 0x007c, 0x027e, 0x047e,
++ 0x057e, 0x077e, 0x0c7e, 0x157e, 0x2c20, 0x2128, 0x20a9, 0x007f,
++ 0x2009, 0x0000, 0x017e, 0x037e, 0x1078, 0x45c4, 0x00c0, 0xa16e,
++ 0x2c10, 0x057e, 0x087e, 0x2041, 0x0000, 0x2508, 0x2029, 0x0001,
++ 0x097e, 0x2049, 0x0000, 0x1078, 0x7246, 0x097f, 0x087f, 0x2039,
++ 0x0000, 0x1078, 0x72f3, 0x1078, 0xa0b5, 0x057f, 0x037f, 0x017f,
++ 0x8108, 0x00f0, 0xa152, 0x157f, 0x0c7f, 0x077f, 0x057f, 0x047f,
++ 0x027f, 0x007c, 0x077e, 0x057e, 0x6218, 0x087e, 0x2041, 0x0000,
++ 0x2029, 0x0001, 0x2019, 0x0048, 0x097e, 0x2049, 0x0000, 0x1078,
++ 0x7246, 0x097f, 0x087f, 0x2039, 0x0000, 0x1078, 0x72f3, 0x2c20,
++ 0x1078, 0xa0b5, 0x057f, 0x077f, 0x007c, 0x027e, 0x047e, 0x057e,
++ 0x077e, 0x0c7e, 0x157e, 0x2c20, 0x20a9, 0x007f, 0x2009, 0x0000,
++ 0x017e, 0x037e, 0x1078, 0x45c4, 0x00c0, 0xa1be, 0x2c10, 0x087e,
++ 0x2041, 0x0000, 0x2828, 0x047e, 0x2021, 0x0001, 0x1078, 0xa472,
++ 0x047f, 0x097e, 0x2049, 0x0000, 0x1078, 0x7246, 0x097f, 0x087f,
++ 0x2039, 0x0000, 0x1078, 0x72f3, 0x1078, 0xa0b5, 0x037f, 0x017f,
++ 0x8108, 0x00f0, 0xa1a0, 0x157f, 0x0c7f, 0x077f, 0x057f, 0x047f,
++ 0x027f, 0x007c, 0x017e, 0x0f7e, 0xad82, 0xcd00, 0x0048, 0xa1e3,
++ 0xad82, 0xffff, 0x00c8, 0xa1e3, 0x6800, 0xa07d, 0x0040, 0xa1e0,
++ 0x6803, 0x0000, 0x6b52, 0x1078, 0x4a73, 0x2f68, 0x0078, 0xa1d4,
++ 0x6b52, 0x1078, 0x4a73, 0x0f7f, 0x017f, 0x007c, 0x0e7e, 0x047e,
++ 0x037e, 0x2061, 0xad00, 0xa005, 0x00c0, 0xa1f6, 0x2071, 0xa600,
++ 0x7448, 0x7064, 0x8001, 0xa402, 0x00c8, 0xa218, 0x2100, 0xac06,
++ 0x0040, 0xa20a, 0x6000, 0xa086, 0x0000, 0x0040, 0xa20a, 0x6008,
++ 0xa206, 0x00c0, 0xa20a, 0x6018, 0xa1a0, 0x0006, 0x2424, 0xa406,
++ 0x0040, 0xa214, 0xace0, 0x0010, 0x2001, 0xa616, 0x2004, 0xac02,
++ 0x00c8, 0xa218, 0x0078, 0xa1f6, 0xa085, 0x0001, 0x0078, 0xa219,
++ 0xa006, 0x037f, 0x047f, 0x0e7f, 0x007c, 0x0d7e, 0x007e, 0x1078,
++ 0x138b, 0x007f, 0x1040, 0x1332, 0x6837, 0x010d, 0x685e, 0x027e,
++ 0x2010, 0x1078, 0x8cf2, 0x2001, 0x0000, 0x0040, 0xa233, 0x2200,
++ 0xa080, 0x0008, 0x2004, 0x027f, 0x684a, 0x6956, 0x6c46, 0x684f,
++ 0x0000, 0xa006, 0x68b2, 0x6802, 0x683a, 0x685a, 0x1078, 0x4a73,
++ 0x0d7f, 0x007c, 0x6700, 0xa786, 0x0000, 0x0040, 0xa255, 0xa786,
++ 0x0001, 0x0040, 0xa255, 0xa786, 0x000a, 0x0040, 0xa255, 0xa786,
++ 0x0009, 0x0040, 0xa255, 0xa085, 0x0001, 0x007c, 0x0e7e, 0x6018,
++ 0x2070, 0x70a0, 0xa206, 0x0e7f, 0x007c, 0x017e, 0x6004, 0xa08e,
++ 0x001e, 0x00c0, 0xa277, 0x8007, 0x6130, 0xa18c, 0x00ff, 0xa105,
++ 0x6032, 0x6007, 0x0085, 0x6003, 0x000b, 0x601f, 0x0005, 0x2001,
++ 0xa8a3, 0x2004, 0x6016, 0x1078, 0x5d8a, 0x1078, 0x62d1, 0x017f,
++ 0x007c, 0x0005, 0x0005, 0x007c, 0x6024, 0xd0e4, 0x0040, 0xa28d,
++ 0xd0cc, 0x0040, 0xa287, 0x1078, 0x8fbf, 0x0078, 0xa28d, 0x1078,
++ 0xa495, 0x1078, 0x5bc1, 0x1078, 0x772d, 0x007c, 0xa280, 0x0007,
++ 0x2004, 0xa084, 0x000f, 0x0079, 0xa295, 0xa29e, 0xa29e, 0xa29e,
++ 0xa2a0, 0xa29e, 0xa2a0, 0xa2a0, 0xa29e, 0xa2a0, 0xa006, 0x007c,
++ 0xa085, 0x0001, 0x007c, 0xa280, 0x0007, 0x2004, 0xa084, 0x000f,
++ 0x0079, 0xa2aa, 0xa2b3, 0xa2b3, 0xa2b3, 0xa2b3, 0xa2b3, 0xa2b3,
++ 0xa2be, 0xa2b3, 0xa2b3, 0x6007, 0x003b, 0x602b, 0x0009, 0x6013,
++ 0x2a00, 0x6003, 0x0001, 0x1078, 0x5d8a, 0x007c, 0x0c7e, 0x2260,
++ 0x1078, 0xa495, 0x603f, 0x0000, 0x6024, 0xc0f4, 0xc0cc, 0x6026,
++ 0x0c7f, 0x0d7e, 0x2268, 0xa186, 0x0007, 0x00c0, 0xa31f, 0x6810,
++ 0xa005, 0x0040, 0xa2dc, 0xa080, 0x0013, 0x2004, 0xd0fc, 0x00c0,
++ 0xa2dc, 0x0d7f, 0x0078, 0xa2b3, 0x6007, 0x003a, 0x6003, 0x0001,
++ 0x1078, 0x5d8a, 0x1078, 0x62d1, 0x0c7e, 0x2d60, 0x6100, 0xa186,
++ 0x0002, 0x00c0, 0xa3ad, 0x6010, 0xa005, 0x00c0, 0xa2f6, 0x6000,
++ 0xa086, 0x0007, 0x10c0, 0x1332, 0x0078, 0xa3ad, 0xa08c, 0xf000,
++ 0x00c0, 0xa302, 0x0078, 0xa302, 0x2068, 0x6800, 0xa005, 0x00c0,
++ 0xa2fc, 0x2d00, 0xa080, 0x0013, 0x2004, 0xa084, 0x0003, 0xa086,
++ 0x0002, 0x00c0, 0xa31b, 0x6010, 0x2068, 0x684c, 0xc0dc, 0xc0f4,
++ 0x684e, 0x6850, 0xc0f4, 0xc0fc, 0x6852, 0x2009, 0x0043, 0x1078,
++ 0x9c1e, 0x0078, 0xa3ad, 0x2009, 0x0041, 0x0078, 0xa3a7, 0xa186,
++ 0x0005, 0x00c0, 0xa366, 0x6810, 0xa080, 0x0013, 0x2004, 0xd0bc,
++ 0x00c0, 0xa32d, 0x0d7f, 0x0078, 0xa2b3, 0xd0b4, 0x0040, 0xa335,
++ 0xd0fc, 0x1040, 0x1332, 0x0078, 0xa2cf, 0x6007, 0x003a, 0x6003,
++ 0x0001, 0x1078, 0x5d8a, 0x1078, 0x62d1, 0x0c7e, 0x2d60, 0x6100,
++ 0xa186, 0x0002, 0x0040, 0xa348, 0xa186, 0x0004, 0x00c0, 0xa3ad,
++ 0x2071, 0xa8e7, 0x7000, 0xa086, 0x0003, 0x00c0, 0xa355, 0x7004,
++ 0xac06, 0x00c0, 0xa355, 0x7003, 0x0000, 0x6810, 0xa080, 0x0013,
++ 0x200c, 0xc1f4, 0xc1dc, 0x2102, 0x8000, 0x200c, 0xc1f4, 0xc1fc,
++ 0xc1bc, 0x2102, 0x2009, 0x0042, 0x0078, 0xa3a7, 0x037e, 0x0d7e,
++ 0x0d7e, 0x1078, 0x138b, 0x037f, 0x1040, 0x1332, 0x6837, 0x010d,
++ 0x6803, 0x0000, 0x683b, 0x0000, 0x685b, 0x0000, 0x6b5e, 0x6857,
++ 0x0045, 0x2c00, 0x6862, 0x6034, 0x6872, 0x2360, 0x6024, 0xc0dd,
++ 0x6026, 0x6018, 0xa080, 0x0028, 0x2004, 0xa084, 0x00ff, 0x8007,
++ 0x6320, 0x6b4a, 0x6846, 0x684f, 0x0000, 0x6d6a, 0x6e66, 0x686f,
++ 0x0001, 0x1078, 0x4a73, 0x2019, 0x0045, 0x6008, 0x2068, 0x1078,
++ 0x9dc7, 0x2d00, 0x600a, 0x601f, 0x0006, 0x6003, 0x0007, 0x6017,
++ 0x0000, 0x603f, 0x0000, 0x0d7f, 0x037f, 0x0078, 0xa3ae, 0x603f,
++ 0x0000, 0x6003, 0x0007, 0x1078, 0x9c1e, 0x0c7f, 0x0d7f, 0x007c,
++ 0xa186, 0x0013, 0x00c0, 0xa3ba, 0x6004, 0xa082, 0x0085, 0x2008,
++ 0x0079, 0xa3d4, 0xa186, 0x0027, 0x00c0, 0xa3cd, 0x1078, 0x61cd,
++ 0x037e, 0x0d7e, 0x6010, 0x2068, 0x2019, 0x0004, 0x1078, 0xa1ca,
++ 0x0d7f, 0x037f, 0x1078, 0x62d1, 0x007c, 0xa186, 0x0014, 0x0040,
++ 0xa3be, 0x1078, 0x7773, 0x007c, 0xa3dd, 0xa3db, 0xa3db, 0xa3db,
++ 0xa3db, 0xa3db, 0xa3dd, 0x1078, 0x1332, 0x1078, 0x61cd, 0x6003,
++ 0x000c, 0x1078, 0x62d1, 0x007c, 0xa182, 0x008c, 0x00c8, 0xa3ee,
++ 0xa182, 0x0085, 0x0048, 0xa3ee, 0x0079, 0xa3f1, 0x1078, 0x7773,
++ 0x007c, 0xa3f8, 0xa3f8, 0xa3f8, 0xa3f8, 0xa3fa, 0xa419, 0xa3f8,
++ 0x1078, 0x1332, 0x0d7e, 0x2c68, 0x1078, 0x76c7, 0x0040, 0xa414,
++ 0x6003, 0x0001, 0x6007, 0x001e, 0x2009, 0xab8e, 0x210c, 0x6136,
++ 0x2009, 0xab8f, 0x210c, 0x613a, 0x600b, 0xffff, 0x6918, 0x611a,
++ 0x601f, 0x0004, 0x1078, 0x5d8a, 0x2d60, 0x1078, 0x772d, 0x0d7f,
++ 0x007c, 0x1078, 0x772d, 0x007c, 0x0e7e, 0x6018, 0x2070, 0x7000,
++ 0xd0ec, 0x0e7f, 0x007c, 0x6010, 0xa08c, 0xf000, 0x0040, 0xa471,
++ 0xa080, 0x0013, 0x200c, 0xd1ec, 0x0040, 0xa471, 0x2001, 0xa672,
++ 0x2004, 0xd0ec, 0x0040, 0xa471, 0x6003, 0x0002, 0x6024, 0xc0e5,
++ 0x6026, 0xd1ac, 0x0040, 0xa44f, 0x0f7e, 0x2c78, 0x1078, 0x495f,
++ 0x0f7f, 0x0040, 0xa44f, 0x2001, 0xa8a4, 0x2004, 0x603e, 0x2009,
++ 0xa672, 0x210c, 0xd1f4, 0x00c0, 0xa46f, 0x0078, 0xa461, 0x2009,
++ 0xa672, 0x210c, 0xd1f4, 0x0040, 0xa45b, 0x6024, 0xc0e4, 0x6026,
++ 0xa006, 0x0078, 0xa471, 0x2001, 0xa8a4, 0x200c, 0x8103, 0xa100,
++ 0x603e, 0x6018, 0xa088, 0x002b, 0x2104, 0xa005, 0x0040, 0xa46c,
++ 0xa088, 0x0003, 0x0078, 0xa464, 0x2c0a, 0x600f, 0x0000, 0xa085,
++ 0x0001, 0x007c, 0x017e, 0x0c7e, 0x0e7e, 0x6120, 0xa2f0, 0x002b,
++ 0x2e04, 0x2060, 0x8cff, 0x0040, 0xa491, 0x84ff, 0x00c0, 0xa484,
++ 0x6020, 0xa106, 0x00c0, 0xa48c, 0x600c, 0x2072, 0x1078, 0x5bc1,
++ 0x1078, 0x772d, 0x0078, 0xa48e, 0xacf0, 0x0003, 0x2e64, 0x0078,
++ 0xa47a, 0x0e7f, 0x0c7f, 0x017f, 0x007c, 0x0d7e, 0x6018, 0xa0e8,
++ 0x002b, 0x2d04, 0xa005, 0x0040, 0xa4a7, 0xac06, 0x0040, 0xa4a5,
++ 0x2d04, 0xa0e8, 0x0003, 0x0078, 0xa499, 0x600c, 0x206a, 0x0d7f,
++ 0x007c, 0x027e, 0x037e, 0x157e, 0x2011, 0xa626, 0x2204, 0xa084,
++ 0x00ff, 0x2019, 0xab8e, 0x2334, 0xa636, 0x00c0, 0xa4d5, 0x8318,
++ 0x2334, 0x2204, 0xa084, 0xff00, 0xa636, 0x00c0, 0xa4d5, 0x2011,
++ 0xab90, 0x6018, 0xa098, 0x000a, 0x20a9, 0x0004, 0x1078, 0x80de,
++ 0x00c0, 0xa4d5, 0x2011, 0xab94, 0x6018, 0xa098, 0x0006, 0x20a9,
++ 0x0004, 0x1078, 0x80de, 0x00c0, 0xa4d5, 0x157f, 0x037f, 0x027f,
++ 0x007c, 0x0e7e, 0x2071, 0xa600, 0x1078, 0x42b8, 0x1078, 0x2677,
++ 0x0e7f, 0x007c, 0x0e7e, 0x6018, 0x2070, 0x7000, 0xd0fc, 0x0040,
++ 0xa4eb, 0x1078, 0xa4ed, 0x0e7f, 0x007c, 0x6850, 0xc0e5, 0x6852,
++ 0x007c, 0x0e7e, 0x0c7e, 0x077e, 0x067e, 0x057e, 0x047e, 0x027e,
++ 0x017e, 0x127e, 0x2091, 0x8000, 0x2029, 0xa8ba, 0x252c, 0x2021,
++ 0xa8c0, 0x2424, 0x2061, 0xad00, 0x2071, 0xa600, 0x7648, 0x7064,
++ 0xa606, 0x0040, 0xa545, 0x671c, 0xa786, 0x0001, 0x0040, 0xa514,
++ 0xa786, 0x0008, 0x00c0, 0xa53b, 0x2500, 0xac06, 0x0040, 0xa53b,
++ 0x2400, 0xac06, 0x0040, 0xa53b, 0x1078, 0xa242, 0x0040, 0xa53b,
++ 0x1078, 0xa256, 0x00c0, 0xa53b, 0x6000, 0xa086, 0x0004, 0x00c0,
++ 0xa52d, 0x017e, 0x1078, 0x1757, 0x017f, 0x1078, 0x8eec, 0x00c0,
++ 0xa533, 0x1078, 0x28a6, 0x1078, 0x8f00, 0x00c0, 0xa539, 0x1078,
++ 0x7c83, 0x1078, 0x8ec6, 0xace0, 0x0010, 0x2001, 0xa616, 0x2004,
++ 0xac02, 0x00c8, 0xa545, 0x0078, 0xa504, 0x127f, 0x017f, 0x027f,
++ 0x047f, 0x057f, 0x067f, 0x077f, 0x0c7f, 0x0e7f, 0x007c, 0x127e,
++ 0x007e, 0x0e7e, 0x017e, 0x2091, 0x8000, 0x2071, 0xa640, 0xd5a4,
++ 0x0040, 0xa55d, 0x7034, 0x8000, 0x7036, 0xd5b4, 0x0040, 0xa563,
++ 0x7030, 0x8000, 0x7032, 0xd5ac, 0x0040, 0xa579, 0x2500, 0xa084,
++ 0x0007, 0xa08e, 0x0003, 0x0040, 0xa579, 0xa08e, 0x0004, 0x0040,
++ 0xa579, 0xa08e, 0x0005, 0x0040, 0xa579, 0x2071, 0xa64a, 0x1078,
++ 0xa5ba, 0x017f, 0x0e7f, 0x007f, 0x127f, 0x007c, 0x127e, 0x007e,
++ 0x0e7e, 0x017e, 0x2091, 0x8000, 0x2071, 0xa640, 0xd5a4, 0x0040,
++ 0xa58c, 0x7034, 0x8000, 0x7036, 0xd5b4, 0x0040, 0xa592, 0x7030,
++ 0x8000, 0x7032, 0xd5ac, 0x0040, 0xa5a8, 0x2500, 0xa084, 0x0007,
++ 0xa08e, 0x0003, 0x0040, 0xa5a8, 0xa08e, 0x0004, 0x0040, 0xa5a8,
++ 0xa08e, 0x0005, 0x0040, 0xa5a8, 0x2071, 0xa64a, 0x1078, 0xa5ba,
++ 0x017f, 0x0e7f, 0x007f, 0x127f, 0x007c, 0x127e, 0x007e, 0x0e7e,
++ 0x2091, 0x8000, 0x2071, 0xa642, 0x1078, 0xa5ba, 0x0e7f, 0x007f,
++ 0x127f, 0x007c, 0x2e04, 0x8000, 0x2072, 0x00c8, 0xa5c3, 0x8e70,
++ 0x2e04, 0x8000, 0x2072, 0x007c, 0x0e7e, 0x2071, 0xa640, 0x1078,
++ 0xa5ba, 0x0e7f, 0x007c, 0x0e7e, 0x2071, 0xa644, 0x1078, 0xa5ba,
++ 0x0e7f, 0x007c, 0x127e, 0x007e, 0x0e7e, 0x2091, 0x8000, 0x2071,
++ 0xa640, 0x7044, 0x8000, 0x7046, 0x0e7f, 0x007f, 0x127f, 0x007c,
++ 0x0001, 0x0002, 0x0004, 0x0008, 0x0010, 0x0020, 0x0040, 0x0080,
++ 0x0100, 0x0200, 0x0400, 0x0800, 0x1000, 0x2000, 0x4000, 0x8000,
++ 0xa50c
++};
++#ifdef UNIQUE_FW_NAME
++unsigned short fw2100tp_length01 = 0x95f1;
++#else
++unsigned short risc_code_length01 = 0x95f1;
++#endif
++
+--- /dev/null Thu Apr 11 07:25:15 2002
++++ linux-2.5.73-n9560/drivers/scsi/qla2xxx/ql2200ip_fw.c Thu Jul 3 15:34:42 2003
+@@ -0,0 +1,5884 @@
++/******************************************************************************
++ * QLOGIC LINUX SOFTWARE
++ *
++ * QLogic ISP2x00 device driver for Linux 2.5.x
++ * Copyright (C) 2003 Qlogic Corporation
++ * (www.qlogic.com)
++ *
++ * This program is free software; you can redistribute it and/or modify it
++ * under the terms of the GNU General Public License as published by the
++ * Free Software Foundation; either version 2, or (at your option) any
++ * later version.
++ *
++ * This program is distributed in the hope that it will be useful, but
++ * WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ * General Public License for more details.
++ *
++ *************************************************************************/
++
++/************************************************************************
++ * *
++ * -- ISP2200 Initiator/Target Firmware --- *
++ * IP and SCSI, Fabric (Public Loop), Point-point, and *
++ * expanded LUN addressing for FCTAPE *
++ * *
++ ************************************************************************/
++
++/*
++ * Firmware Version 2.02.05 (13:47 Apr 25, 2003)
++ */
++
++#ifdef UNIQUE_FW_NAME
++unsigned short fw2200ip_version = 2*1024+2;
++#else
++unsigned short risc_code_version = 2*1024+2;
++#endif
++
++#ifdef UNIQUE_FW_NAME
++unsigned char fw2200ip_version_str[] = {2,2,5};
++#else
++unsigned char firmware_version[] = {2,2,5};
++#endif
++
++#ifdef UNIQUE_FW_NAME
++#define fw2200ip_VERSION_STRING "2.02.05"
++#else
++#define FW_VERSION_STRING "2.02.05"
++#endif
++
++#ifdef UNIQUE_FW_NAME
++unsigned short fw2200ip_addr01 = 0x1000 ;
++#else
++unsigned short risc_code_addr01 = 0x1000 ;
++#endif
++
++#ifdef UNIQUE_FW_NAME
++unsigned short fw2200ip_code01[] = {
++#else
++unsigned short risc_code01[] = {
++#endif
++ 0x0470, 0x0000, 0x0000, 0xb5c6, 0x0000, 0x0002, 0x0002, 0x0005,
++ 0x0037, 0x2043, 0x4f50, 0x5952, 0x4947, 0x4854, 0x2032, 0x3030,
++ 0x3120, 0x514c, 0x4f47, 0x4943, 0x2043, 0x4f52, 0x504f, 0x5241,
++ 0x5449, 0x4f4e, 0x2049, 0x5350, 0x3232, 0x3030, 0x2046, 0x6972,
++ 0x6d77, 0x6172, 0x6520, 0x2056, 0x6572, 0x7369, 0x6f6e, 0x2030,
++ 0x322e, 0x3032, 0x2e30, 0x3520, 0x2020, 0x2020, 0x2400, 0x20c1,
++ 0x0005, 0x2001, 0x017f, 0x2003, 0x0000, 0x20c9, 0xcbff, 0x2091,
++ 0x2000, 0x2059, 0x0000, 0x2b78, 0x7823, 0x0004, 0x2089, 0x2b14,
++ 0x2051, 0xc600, 0x2a70, 0x2029, 0xfe00, 0x2031, 0xffff, 0x2039,
++ 0xfde9, 0x2021, 0x0200, 0x0804, 0x146c, 0x20a1, 0xc5c6, 0xa00e,
++ 0x20a9, 0x083a, 0x41a4, 0x3400, 0x7562, 0x7666, 0x775e, 0x746a,
++ 0x746e, 0x20a1, 0xce00, 0x7164, 0x810d, 0x810d, 0x810d, 0x810d,
++ 0xa18c, 0x000f, 0x2001, 0x000c, 0xa112, 0xa00e, 0x21a8, 0x41a4,
++ 0x3400, 0x8211, 0x1dd8, 0x7164, 0x3400, 0xa102, 0x0120, 0x0218,
++ 0x20a8, 0xa00e, 0x41a4, 0x3800, 0xd08c, 0x01d8, 0x2009, 0xc600,
++ 0x810d, 0x810d, 0x810d, 0x810d, 0xa18c, 0x000f, 0x2001, 0x0001,
++ 0xa112, 0x20a1, 0x1000, 0xa00e, 0x21a8, 0x41a4, 0x8211, 0x1de0,
++ 0x2009, 0xc600, 0x3400, 0xa102, 0x0120, 0x0218, 0x20a8, 0xa00e,
++ 0x41a4, 0x080c, 0x1415, 0x080c, 0x163c, 0x080c, 0x17de, 0x080c,
++ 0x2061, 0x080c, 0x4f3b, 0x080c, 0x9585, 0x080c, 0x15bf, 0x080c,
++ 0x306e, 0x080c, 0x61dd, 0x080c, 0x5743, 0x080c, 0x7147, 0x080c,
++ 0x6edf, 0x080c, 0x265b, 0x080c, 0x7860, 0x080c, 0x68c0, 0x080c,
++ 0x2515, 0x080c, 0x2629, 0x2091, 0x3009, 0x7823, 0x0000, 0x1004,
++ 0x10c7, 0x7820, 0xa086, 0x0002, 0x1150, 0x7823, 0x4000, 0x0e04,
++ 0x10bf, 0x781b, 0x0001, 0x2091, 0x5000, 0x2091, 0x4080, 0x2a70,
++ 0x7003, 0x0000, 0x2a70, 0x7000, 0xa08e, 0x0003, 0x1168, 0x080c,
++ 0x40b9, 0x080c, 0x3095, 0x080c, 0x622b, 0x080c, 0x5943, 0x080c,
++ 0x7184, 0x080c, 0x6f0a, 0x0c70, 0x000b, 0x0c88, 0x10e8, 0x10e9,
++ 0x1214, 0x10e6, 0x12e1, 0x1412, 0x1413, 0x1414, 0x080c, 0x1519,
++ 0x0005, 0x0126, 0x00f6, 0x2091, 0x8000, 0x7000, 0xa086, 0x0001,
++ 0x1904, 0x11f1, 0x080c, 0x158c, 0x080c, 0x5f22, 0x0150, 0x080c,
++ 0x5f48, 0x15c0, 0x2079, 0x0100, 0x7828, 0xa085, 0x1800, 0x782a,
++ 0x0488, 0x080c, 0x5e5a, 0x7000, 0xa086, 0x0001, 0x1904, 0x11f1,
++ 0x708c, 0xa086, 0x0028, 0x1904, 0x11f1, 0x2001, 0x0161, 0x2003,
++ 0x0001, 0x2079, 0x0100, 0x7827, 0xffff, 0x7a28, 0xa295, 0x1e2f,
++ 0x7a2a, 0x2011, 0x5df5, 0x080c, 0x6fad, 0x2011, 0x5de8, 0x080c,
++ 0x7070, 0x2011, 0x5e37, 0x080c, 0x6fad, 0x2011, 0x4e18, 0x080c,
++ 0x6fad, 0x2011, 0x8030, 0x2019, 0x0000, 0x708b, 0x0000, 0x080c,
++ 0x1eae, 0x00e8, 0x080c, 0x47cb, 0x2079, 0x0100, 0x7844, 0xa005,
++ 0x1904, 0x11f1, 0x2011, 0x4e18, 0x080c, 0x6fad, 0x2011, 0x5e37,
++ 0x080c, 0x6fad, 0x080c, 0x1eae, 0x2001, 0xc8d4, 0x2004, 0x780e,
++ 0x7840, 0xa084, 0xfffb, 0x7842, 0x2011, 0x8010, 0x73cc, 0x080c,
++ 0x407d, 0x723c, 0xc284, 0x723e, 0x2001, 0xc60c, 0x200c, 0xc1ac,
++ 0x2102, 0x080c, 0x8dca, 0x2011, 0x0004, 0x080c, 0xac97, 0x080c,
++ 0x55e1, 0x080c, 0x5f22, 0x0158, 0x080c, 0x4f24, 0x0140, 0x708b,
++ 0x0001, 0x70c7, 0x0000, 0x080c, 0x4968, 0x0804, 0x11f1, 0x080c,
++ 0x570b, 0x0120, 0x7a0c, 0xc2b4, 0x7a0e, 0x0060, 0x7073, 0x0000,
++ 0x080c, 0xb03f, 0x70d4, 0xd09c, 0x1128, 0x70a0, 0xa005, 0x0110,
++ 0x080c, 0x4f02, 0x70df, 0x0000, 0x70db, 0x0000, 0x72d4, 0x080c,
++ 0x5f22, 0x1178, 0x2011, 0x0000, 0x0016, 0x080c, 0x2a95, 0x2019,
++ 0xc8d6, 0x211a, 0x001e, 0x7053, 0xffff, 0x7057, 0x00ef, 0x7077,
++ 0x0000, 0x2079, 0xc652, 0x7804, 0xd0ac, 0x0108, 0xc295, 0x72d6,
++ 0x080c, 0x5f22, 0x0118, 0xa296, 0x0004, 0x0548, 0x2011, 0x0001,
++ 0x080c, 0xac97, 0x709b, 0x0000, 0x709f, 0xffff, 0x7003, 0x0002,
++ 0x2079, 0x0100, 0x7827, 0x0003, 0x7828, 0xa085, 0x0003, 0x782a,
++ 0x00fe, 0x080c, 0x2c62, 0x2011, 0x0005, 0x080c, 0x8f0e, 0x080c,
++ 0x7e94, 0x080c, 0x5f22, 0x0148, 0x00c6, 0x2061, 0x0100, 0x0016,
++ 0x080c, 0x2a95, 0x61e2, 0x001e, 0x00ce, 0x012e, 0x0420, 0x709b,
++ 0x0000, 0x709f, 0xffff, 0x7003, 0x0002, 0x00f6, 0x2079, 0x0100,
++ 0x7827, 0x0003, 0x7828, 0xa085, 0x0003, 0x782a, 0x00fe, 0x2011,
++ 0x0005, 0x080c, 0x8f0e, 0x080c, 0x7e94, 0x080c, 0x5f22, 0x0148,
++ 0x00c6, 0x2061, 0x0100, 0x0016, 0x080c, 0x2a95, 0x61e2, 0x001e,
++ 0x00ce, 0x00fe, 0x012e, 0x0005, 0x00c6, 0x080c, 0x5f22, 0x1118,
++ 0x20a9, 0x0100, 0x0010, 0x20a9, 0x0082, 0x080c, 0x5f22, 0x1118,
++ 0x2009, 0x0000, 0x0010, 0x2009, 0x007e, 0x080c, 0x2f41, 0x8108,
++ 0x1f04, 0x1205, 0x00ce, 0x7073, 0x0000, 0x7074, 0xa084, 0x00ff,
++ 0x7076, 0x70a3, 0x0000, 0x0005, 0x0126, 0x2091, 0x8000, 0x7000,
++ 0xa086, 0x0002, 0x1904, 0x12df, 0x709c, 0xa086, 0xffff, 0x0130,
++ 0x080c, 0x2c62, 0x080c, 0x7e94, 0x0804, 0x12df, 0x70d4, 0xd0ac,
++ 0x1110, 0xd09c, 0x0540, 0xd084, 0x0530, 0x0006, 0x0016, 0x2001,
++ 0x0103, 0x2009, 0xc8d4, 0x210c, 0x2102, 0x001e, 0x000e, 0xd08c,
++ 0x01d0, 0x70d8, 0xa086, 0xffff, 0x0190, 0x080c, 0x2dc1, 0x080c,
++ 0x7e94, 0x70d4, 0xd094, 0x1904, 0x12df, 0x2011, 0x0001, 0x2019,
++ 0x0000, 0x080c, 0x2df9, 0x080c, 0x7e94, 0x0804, 0x12df, 0x70dc,
++ 0xa005, 0x1904, 0x12df, 0x7098, 0xa005, 0x1904, 0x12df, 0x70d4,
++ 0xd0a4, 0x0118, 0xd0b4, 0x0904, 0x12df, 0x080c, 0x570b, 0x1904,
++ 0x12df, 0x2001, 0xc653, 0x2004, 0xd0ac, 0x01c8, 0x0156, 0x00c6,
++ 0x20a9, 0x007f, 0x2009, 0x0000, 0x0016, 0x080c, 0x533d, 0x1118,
++ 0x6000, 0xd0ec, 0x1138, 0x001e, 0x8108, 0x1f04, 0x126c, 0x00ce,
++ 0x015e, 0x0028, 0x001e, 0x00ce, 0x015e, 0x0804, 0x12df, 0x0006,
++ 0x0016, 0x2001, 0x0103, 0x2009, 0xc8d4, 0x210c, 0x2102, 0x001e,
++ 0x000e, 0x71a8, 0x81ff, 0x11b0, 0xa006, 0x2009, 0x0200, 0x20a9,
++ 0x0002, 0x20a1, 0xc925, 0x40a1, 0x2009, 0x0700, 0x20a9, 0x0002,
++ 0x20a1, 0xc915, 0x40a1, 0x7070, 0x8007, 0x7174, 0x810f, 0x20a9,
++ 0x0002, 0x40a1, 0x20a1, 0xc919, 0x2009, 0x0000, 0x080c, 0x14ff,
++ 0x2001, 0x0000, 0x810f, 0x20a9, 0x0002, 0x40a1, 0x7030, 0xc08c,
++ 0x7032, 0x7003, 0x0003, 0x709f, 0xffff, 0x080c, 0x1585, 0xa006,
++ 0x080c, 0x296d, 0x080c, 0x40ef, 0x00f6, 0x2079, 0x0100, 0x080c,
++ 0x5f48, 0x0150, 0x080c, 0x5f22, 0x7828, 0x0118, 0xa084, 0xe1ff,
++ 0x0010, 0xa084, 0xffdf, 0x782a, 0x00fe, 0x2001, 0xc928, 0x2004,
++ 0xa086, 0x0005, 0x1120, 0x2011, 0x0000, 0x080c, 0x8f0e, 0x2011,
++ 0x0000, 0x080c, 0x8f18, 0x080c, 0x7e94, 0x080c, 0x7f6e, 0x012e,
++ 0x0005, 0x0016, 0x0046, 0x00f6, 0x0126, 0x2091, 0x8000, 0x2079,
++ 0x0100, 0x2009, 0xc634, 0x2104, 0xa005, 0x1110, 0x080c, 0x2ac1,
++ 0x2009, 0x00f7, 0x080c, 0x4eeb, 0x7940, 0xa18c, 0x0010, 0x7942,
++ 0x7924, 0xd1b4, 0x0110, 0x7827, 0x0040, 0xd19c, 0x0110, 0x7827,
++ 0x0008, 0x0006, 0x0036, 0x0156, 0x7954, 0xd1ac, 0x1904, 0x134f,
++ 0x080c, 0x5f34, 0x0158, 0x080c, 0x5f48, 0x1128, 0x2001, 0xc8e5,
++ 0x2003, 0x0000, 0x0070, 0x080c, 0x5f2a, 0x0dc0, 0x2001, 0xc8e5,
++ 0x2003, 0xaaaa, 0x2001, 0xc8e6, 0x2003, 0x0001, 0x080c, 0x5e5a,
++ 0x0058, 0x080c, 0x5f22, 0x0140, 0x2009, 0x00f8, 0x080c, 0x4eeb,
++ 0x7843, 0x0090, 0x7843, 0x0010, 0x20a9, 0x09c4, 0x7820, 0xd09c,
++ 0x1138, 0x080c, 0x5f22, 0x0138, 0x7824, 0xd0ac, 0x1904, 0x13f9,
++ 0x1f04, 0x132e, 0x0070, 0x7824, 0x080c, 0x5f3e, 0x0118, 0xd0ac,
++ 0x1904, 0x13f9, 0xa084, 0x1800, 0x0d98, 0x7003, 0x0001, 0x0804,
++ 0x13f9, 0x2001, 0x0001, 0x080c, 0x296d, 0x0804, 0x1408, 0x7850,
++ 0xa084, 0x0180, 0x7852, 0x782f, 0x0020, 0x20a9, 0x0046, 0x1d04,
++ 0x1357, 0x080c, 0x7058, 0x1f04, 0x1357, 0x7850, 0xa084, 0x0180,
++ 0xa085, 0x0400, 0x7852, 0x782f, 0x0000, 0x080c, 0x5f34, 0x0158,
++ 0x080c, 0x5f48, 0x1128, 0x2001, 0xc8e5, 0x2003, 0x0000, 0x0070,
++ 0x080c, 0x5f2a, 0x0dc0, 0x2001, 0xc8e5, 0x2003, 0xaaaa, 0x2001,
++ 0xc8e6, 0x2003, 0x0001, 0x080c, 0x5e5a, 0x0020, 0x2009, 0x00f8,
++ 0x080c, 0x4eeb, 0x20a9, 0x000e, 0xe000, 0x1f04, 0x1384, 0x7850,
++ 0xa084, 0x0180, 0xa085, 0x1400, 0x7852, 0x080c, 0x5f22, 0x0120,
++ 0x7843, 0x0090, 0x7843, 0x0010, 0x2021, 0xe678, 0x2019, 0xea60,
++ 0x7820, 0xd09c, 0x1558, 0x080c, 0x5f22, 0x05d8, 0x7824, 0xd0ac,
++ 0x1904, 0x13f9, 0x080c, 0x5f48, 0x1508, 0x0046, 0x2021, 0x0190,
++ 0x8421, 0x1df0, 0x004e, 0x8421, 0x11c8, 0x7827, 0x0048, 0x20a9,
++ 0x01f4, 0x1d04, 0x13b1, 0x080c, 0x7058, 0x1f04, 0x13b1, 0x7824,
++ 0xa084, 0x0068, 0x15c8, 0x2001, 0xc8e5, 0x2003, 0xaaaa, 0x2001,
++ 0xc8e6, 0x2003, 0x0001, 0x7003, 0x0001, 0x0498, 0x1d04, 0x13ca,
++ 0x080c, 0x7058, 0x8319, 0x1960, 0x2009, 0xc634, 0x2104, 0x8000,
++ 0x200a, 0xa084, 0xfff0, 0x0120, 0x200b, 0x0000, 0x080c, 0x2ac1,
++ 0x00d8, 0x080c, 0x5f34, 0x1140, 0xa4a2, 0x0064, 0x1128, 0x080c,
++ 0x5ef9, 0x7003, 0x0001, 0x00a8, 0x7827, 0x1800, 0xe000, 0xe000,
++ 0x7824, 0x080c, 0x5f3e, 0x0110, 0xd0ac, 0x1158, 0xa084, 0x1800,
++ 0x09a8, 0x7003, 0x0001, 0x0028, 0x2001, 0x0001, 0x080c, 0x296d,
++ 0x0048, 0x2001, 0xc634, 0x2003, 0x0000, 0x7827, 0x0048, 0x7828,
++ 0xc09d, 0x782a, 0x7850, 0xa084, 0x0180, 0xa085, 0x0400, 0x7852,
++ 0x015e, 0x003e, 0x000e, 0x080c, 0x155c, 0x012e, 0x00fe, 0x004e,
++ 0x001e, 0x0005, 0x0005, 0x0005, 0x0005, 0x2a70, 0x2061, 0xc908,
++ 0x2063, 0x0002, 0x6007, 0x0002, 0x600b, 0x0005, 0x600f, 0x0037,
++ 0x2001, 0xc8e5, 0x2003, 0x0000, 0x708b, 0x0000, 0x2009, 0x0100,
++ 0x2104, 0xa082, 0x0002, 0x0218, 0x7053, 0xffff, 0x0010, 0x7053,
++ 0x0000, 0x705b, 0xffff, 0x7073, 0x0000, 0x7077, 0x0000, 0x080c,
++ 0xb03f, 0x2061, 0xc8d5, 0x6003, 0x0909, 0x6007, 0x0000, 0x600b,
++ 0x8800, 0x600f, 0x0200, 0x6013, 0x00ff, 0x6017, 0x001f, 0x601b,
++ 0x0000, 0x601f, 0x07d0, 0x2061, 0xc8dd, 0x6003, 0x8000, 0x6007,
++ 0x0000, 0x600b, 0x0000, 0x600f, 0x0200, 0x6013, 0x00ff, 0x6017,
++ 0x0000, 0x601b, 0x0001, 0x601f, 0x0000, 0x2061, 0xc900, 0x6003,
++ 0x514c, 0x6007, 0x4f47, 0x600b, 0x4943, 0x600f, 0x2020, 0x2001,
++ 0xc628, 0x2003, 0x0000, 0x0005, 0x04a0, 0x2011, 0x0000, 0x81ff,
++ 0x0570, 0xa186, 0x0001, 0x1148, 0x2031, 0x8fff, 0x2039, 0xe601,
++ 0x2021, 0x0100, 0x2029, 0xe600, 0x00e8, 0xa186, 0x0002, 0x1118,
++ 0x2011, 0x0000, 0x00b8, 0xa186, 0x0005, 0x1118, 0x2011, 0x0001,
++ 0x0088, 0xa186, 0x0009, 0x1118, 0x2011, 0x0002, 0x0058, 0xa186,
++ 0x000a, 0x1118, 0x2011, 0x0002, 0x0028, 0xa186, 0x0055, 0x1110,
++ 0x2011, 0x0003, 0x3800, 0xa084, 0xfffc, 0xa205, 0x20c0, 0x0804,
++ 0x104d, 0xa00e, 0x2011, 0x0003, 0x2019, 0x14a8, 0x0804, 0x14f9,
++ 0x2019, 0xaaaa, 0x2061, 0xffff, 0x2c14, 0x2362, 0xe000, 0xe000,
++ 0x2c04, 0xa306, 0x2262, 0x1110, 0xc1b5, 0xc1a5, 0x2011, 0x0000,
++ 0x2019, 0x14bb, 0x04f0, 0x2019, 0xaaaa, 0x2061, 0xffff, 0x2c14,
++ 0x2362, 0xe000, 0xe000, 0x2c1c, 0x2061, 0x7fff, 0xe000, 0xe000,
++ 0x2c04, 0x2061, 0xffff, 0x2262, 0xa306, 0x0110, 0xc18d, 0x0008,
++ 0xc185, 0x2011, 0x0002, 0x2019, 0x14d6, 0x0418, 0x2061, 0xffff,
++ 0x2019, 0xaaaa, 0x2c14, 0x2362, 0xe000, 0xe000, 0x2c04, 0x2262,
++ 0xa306, 0x1180, 0x2c14, 0x2362, 0xe000, 0xe000, 0x2c1c, 0x2061,
++ 0x7fff, 0x2c04, 0x2061, 0xffff, 0x2262, 0xa306, 0x1110, 0xc195,
++ 0x0008, 0xc19d, 0x2011, 0x0001, 0x2019, 0x14f7, 0x0010, 0x0804,
++ 0x146d, 0x3800, 0xa084, 0xfffc, 0xa205, 0x20c0, 0x0837, 0x2011,
++ 0x0000, 0x080c, 0x533d, 0x1178, 0x6004, 0xa0c4, 0x00ff, 0xa8c6,
++ 0x0006, 0x0128, 0xa0c4, 0xff00, 0xa8c6, 0x0600, 0x1120, 0xa186,
++ 0x0080, 0x0108, 0x8210, 0x8108, 0xa186, 0x0100, 0x1d50, 0x2208,
++ 0x0005, 0x2091, 0x8000, 0x0e04, 0x151b, 0x0006, 0x0016, 0x2079,
++ 0x0000, 0x7818, 0xd084, 0x1de8, 0x001e, 0x792e, 0x000e, 0x782a,
++ 0x000e, 0x7826, 0x3900, 0x783a, 0x7823, 0x8002, 0x781b, 0x0001,
++ 0x2091, 0x5000, 0x0126, 0x0156, 0x0146, 0x20a9, 0x0010, 0x20a1,
++ 0xca54, 0x2091, 0x2000, 0x40a1, 0x20a9, 0x0010, 0x2091, 0x2200,
++ 0x40a1, 0x20a9, 0x0010, 0x2091, 0x2400, 0x40a1, 0x20a9, 0x0010,
++ 0x2091, 0x2600, 0x40a1, 0x20a9, 0x0010, 0x2091, 0x2800, 0x40a1,
++ 0x014e, 0x015e, 0x012e, 0x2079, 0xc600, 0x7803, 0x0005, 0x2091,
++ 0x4080, 0x04c9, 0x0cf8, 0x0005, 0x0006, 0x080c, 0x15a7, 0x1518,
++ 0x00f6, 0x2079, 0xc624, 0x2f04, 0x8000, 0x207a, 0xa082, 0x000f,
++ 0x0258, 0xa006, 0x207a, 0x2079, 0xc626, 0x2f04, 0xa084, 0x0001,
++ 0xa086, 0x0001, 0x207a, 0x0070, 0x2079, 0xc626, 0x2f7c, 0x8fff,
++ 0x1128, 0x2001, 0x0c03, 0x2003, 0x0040, 0x0020, 0x2001, 0x0c03,
++ 0x2003, 0x00c0, 0x00fe, 0x000e, 0x0005, 0x0409, 0x1120, 0x2001,
++ 0x0c03, 0x2003, 0x0080, 0x0005, 0x00d1, 0x1120, 0x2001, 0x0c03,
++ 0x2003, 0x0040, 0x0005, 0x0006, 0x0091, 0x1178, 0x2001, 0x0c03,
++ 0x2003, 0x0040, 0x2009, 0x0fff, 0x00a1, 0x2001, 0x0c03, 0x2003,
++ 0x0080, 0x2009, 0x0fff, 0x0069, 0x0c88, 0x000e, 0x0005, 0x00c6,
++ 0x2061, 0x0c00, 0x2c04, 0xa084, 0x00ff, 0xa086, 0x00aa, 0x00ce,
++ 0x0005, 0x0156, 0x0126, 0xa18c, 0x0fff, 0x21a8, 0x1d04, 0x15b6,
++ 0x2091, 0x6000, 0x1f04, 0x15b6, 0x012e, 0x015e, 0x0005, 0x2071,
++ 0xc600, 0x7160, 0x712e, 0x2021, 0x0001, 0xa190, 0x0030, 0xa298,
++ 0x0030, 0x0240, 0x7064, 0xa302, 0x1228, 0x220a, 0x2208, 0x2310,
++ 0x8420, 0x0ca8, 0x3800, 0xd08c, 0x0148, 0x7064, 0xa086, 0xc600,
++ 0x0128, 0x7067, 0xc600, 0x2011, 0x1000, 0x0c48, 0x200b, 0x0000,
++ 0x74b2, 0x74b6, 0x70eb, 0x0010, 0x0005, 0x00e6, 0x0126, 0x2091,
++ 0x8000, 0x2071, 0xc600, 0x70b4, 0x0016, 0x2008, 0x70e8, 0xa16a,
++ 0x2100, 0x001e, 0x0268, 0x8001, 0x70b6, 0x702c, 0x2068, 0x2d04,
++ 0x702e, 0x206b, 0x0000, 0x6807, 0x0000, 0x012e, 0x00ee, 0x0005,
++ 0xa06e, 0x0cd8, 0x00e6, 0x2071, 0xc600, 0x0126, 0x2091, 0x8000,
++ 0x70b4, 0x8001, 0x0260, 0x70b6, 0x702c, 0x2068, 0x2d04, 0x702e,
++ 0x206b, 0x0000, 0x6807, 0x0000, 0x012e, 0x00ee, 0x0005, 0xa06e,
++ 0x0cd8, 0x00e6, 0x0126, 0x2091, 0x8000, 0x2071, 0xc600, 0x702c,
++ 0x206a, 0x2d00, 0x702e, 0x70b4, 0x8000, 0x70b6, 0x012e, 0x00ee,
++ 0x0005, 0x8dff, 0x0138, 0x6804, 0x6807, 0x0000, 0x0006, 0x0c49,
++ 0x00de, 0x0cb8, 0x0005, 0x00e6, 0x2071, 0xc600, 0x70b4, 0xa08a,
++ 0x0010, 0xa00d, 0x00ee, 0x0005, 0x00e6, 0x2071, 0xc959, 0x7007,
++ 0x0000, 0x701b, 0x0000, 0x701f, 0x0000, 0x2071, 0x0000, 0x7010,
++ 0xa085, 0x8004, 0x7012, 0x00ee, 0x0005, 0x0126, 0x2091, 0x8000,
++ 0x00e6, 0x2270, 0x700b, 0x0000, 0x2071, 0xc959, 0x7018, 0xa088,
++ 0xc962, 0x220a, 0x8000, 0xa084, 0x0007, 0x701a, 0x7004, 0xa005,
++ 0x1128, 0x00f6, 0x2079, 0x0010, 0x0089, 0x00fe, 0x00ee, 0x012e,
++ 0x0005, 0x00e6, 0x2071, 0xc959, 0x7004, 0xa005, 0x1128, 0x00f6,
++ 0x2079, 0x0010, 0x0019, 0x00fe, 0x00ee, 0x0005, 0x7000, 0x0002,
++ 0x1680, 0x16e4, 0x1701, 0x1701, 0x23e7, 0x16e4, 0x1701, 0x16e4,
++ 0x7018, 0x711c, 0xa106, 0x1118, 0x7007, 0x0000, 0x0005, 0x00d6,
++ 0xa180, 0xc962, 0x2004, 0x700a, 0x2068, 0x8108, 0xa18c, 0x0007,
++ 0x711e, 0x7803, 0x0026, 0x6824, 0x7832, 0x6828, 0x7836, 0x682c,
++ 0x783a, 0x6830, 0x783e, 0x6810, 0x700e, 0x680c, 0x7016, 0x6804,
++ 0x00de, 0xd084, 0x0120, 0x7007, 0x0001, 0x0029, 0x0005, 0x7007,
++ 0x0002, 0x00b1, 0x0005, 0x0016, 0x0026, 0x710c, 0x2011, 0x0040,
++ 0xa182, 0x0040, 0x1210, 0x2110, 0xa006, 0x700e, 0x7212, 0x8203,
++ 0x7822, 0x7803, 0x0020, 0x7803, 0x0041, 0x002e, 0x001e, 0x0005,
++ 0x0016, 0x0026, 0x0136, 0x0146, 0x0156, 0x7014, 0x2098, 0x20a1,
++ 0x0014, 0x7803, 0x0026, 0x710c, 0x2011, 0x0040, 0xa182, 0x0040,
++ 0x1210, 0x2110, 0xa006, 0x700e, 0x22a8, 0x53a6, 0x8203, 0x7822,
++ 0x7803, 0x0020, 0x3300, 0x7016, 0x7803, 0x0001, 0x015e, 0x014e,
++ 0x013e, 0x002e, 0x001e, 0x0005, 0x0136, 0x0146, 0x0156, 0x2099,
++ 0xc71a, 0x20a1, 0x0018, 0x20a9, 0x0008, 0x53a3, 0x7803, 0x0020,
++ 0x0126, 0x2091, 0x8000, 0x7803, 0x0041, 0x7007, 0x0003, 0x7000,
++ 0xc084, 0x7002, 0x700b, 0xc715, 0x012e, 0x015e, 0x014e, 0x013e,
++ 0x0005, 0x0136, 0x0146, 0x0156, 0x2001, 0xc749, 0x209c, 0x20a1,
++ 0x0014, 0x7803, 0x0026, 0x2001, 0xc74a, 0x20ac, 0x53a6, 0x2099,
++ 0xc74b, 0x20a1, 0x0018, 0x20a9, 0x0008, 0x53a3, 0x7803, 0x0020,
++ 0x0126, 0x2091, 0x8000, 0x7803, 0x0001, 0x7007, 0x0004, 0x7000,
++ 0xc08c, 0x7002, 0x700b, 0xc746, 0x012e, 0x015e, 0x014e, 0x013e,
++ 0x0005, 0x0016, 0x00e6, 0x2071, 0xc959, 0x00f6, 0x2079, 0x0010,
++ 0x7904, 0x7803, 0x0002, 0xd1fc, 0x0120, 0xa18c, 0x0700, 0x7004,
++ 0x0023, 0x00fe, 0x00ee, 0x001e, 0x0005, 0x1676, 0x1745, 0x1773,
++ 0x179d, 0x17cd, 0x2404, 0x1744, 0x0cf8, 0xa18c, 0x0700, 0x1528,
++ 0x0136, 0x0146, 0x0156, 0x7014, 0x20a0, 0x2099, 0x0014, 0x7803,
++ 0x0040, 0x7010, 0x20a8, 0x53a5, 0x3400, 0x7016, 0x015e, 0x014e,
++ 0x013e, 0x700c, 0xa005, 0x0570, 0x7830, 0x7832, 0x7834, 0x7836,
++ 0x080c, 0x16ab, 0x0005, 0x7008, 0xa080, 0x0002, 0x2003, 0x0100,
++ 0x7007, 0x0000, 0x080c, 0x1676, 0x0005, 0x7008, 0xa080, 0x0002,
++ 0x2003, 0x0200, 0x0ca8, 0xa18c, 0x0700, 0x1150, 0x700c, 0xa005,
++ 0x0188, 0x7830, 0x7832, 0x7834, 0x7836, 0x080c, 0x16c0, 0x0005,
++ 0x7008, 0xa080, 0x0002, 0x2003, 0x0200, 0x7007, 0x0000, 0x080c,
++ 0x1676, 0x0005, 0x00d6, 0x7008, 0x2068, 0x7830, 0x6826, 0x7834,
++ 0x682a, 0x7838, 0x682e, 0x783c, 0x6832, 0x680b, 0x0100, 0x00de,
++ 0x7007, 0x0000, 0x080c, 0x1676, 0x0005, 0xa18c, 0x0700, 0x1540,
++ 0x0136, 0x0146, 0x0156, 0x2001, 0xc718, 0x2004, 0xa080, 0x000d,
++ 0x20a0, 0x2099, 0x0014, 0x7803, 0x0040, 0x20a9, 0x0020, 0x53a5,
++ 0x2001, 0xc71a, 0x2004, 0xd0bc, 0x0148, 0x2001, 0xc723, 0x2004,
++ 0xa080, 0x000d, 0x20a0, 0x20a9, 0x0020, 0x53a5, 0x015e, 0x014e,
++ 0x013e, 0x7007, 0x0000, 0x080c, 0x62c2, 0x080c, 0x1676, 0x0005,
++ 0x2011, 0x8003, 0x080c, 0x407d, 0x0cf8, 0xa18c, 0x0700, 0x1148,
++ 0x2001, 0xc748, 0x2003, 0x0100, 0x7007, 0x0000, 0x080c, 0x1676,
++ 0x0005, 0x2011, 0x8004, 0x080c, 0x407d, 0x0cf8, 0x0126, 0x2091,
++ 0x2200, 0x2079, 0x0030, 0x2071, 0xc96a, 0x7003, 0x0000, 0x700f,
++ 0xc977, 0x7013, 0xc977, 0x780f, 0x00f6, 0x7803, 0x0004, 0x012e,
++ 0x0005, 0x6934, 0xa184, 0x0007, 0x0002, 0x17fd, 0x183e, 0x17fd,
++ 0x17fd, 0x1801, 0x1826, 0x180d, 0x1804, 0xa085, 0x0001, 0x0804,
++ 0x1858, 0x080c, 0x7684, 0x05d0, 0x684c, 0xd0bc, 0x0db0, 0x6860,
++ 0x682e, 0x685c, 0x682a, 0x6858, 0x04c8, 0xa18c, 0x00ff, 0xa186,
++ 0x001e, 0x1d58, 0x684c, 0xd0bc, 0x0d40, 0x6860, 0x682e, 0x685c,
++ 0x682a, 0x6804, 0x681a, 0xa080, 0x000d, 0x2004, 0xa084, 0x000f,
++ 0xa080, 0x23c7, 0x2005, 0x6832, 0x6858, 0x0440, 0xa18c, 0x00ff,
++ 0xa186, 0x0015, 0x1990, 0x684c, 0xd0ac, 0x0978, 0x6804, 0x681a,
++ 0xa080, 0x000d, 0x2004, 0xa084, 0x000f, 0xa080, 0x23c7, 0x2005,
++ 0x6832, 0xa006, 0x682e, 0x682a, 0x6858, 0x0080, 0x684c, 0xd0ac,
++ 0x0904, 0x17fd, 0xa006, 0x682e, 0x682a, 0x6858, 0xa18c, 0x000f,
++ 0xa188, 0x23c7, 0x210d, 0x6932, 0x2d08, 0x691a, 0x6826, 0x684c,
++ 0xc0dd, 0x684e, 0xa006, 0x680a, 0x697c, 0x6912, 0x6980, 0x6916,
++ 0x0005, 0x684c, 0xd0ac, 0x090c, 0x1519, 0x6833, 0x23c4, 0x2d08,
++ 0x691a, 0x6858, 0x8001, 0x6826, 0x684c, 0xc0dd, 0x684e, 0xa006,
++ 0x680a, 0x682e, 0x682a, 0x697c, 0x6912, 0x6980, 0x6916, 0x0005,
++ 0x20e1, 0x0007, 0x20e1, 0x2000, 0x2001, 0x020a, 0x2004, 0x82ff,
++ 0x01e8, 0xa280, 0x0004, 0x00d6, 0x206c, 0x684c, 0xd0dc, 0x1190,
++ 0xa280, 0x0007, 0x2004, 0xa086, 0x000a, 0x1110, 0x0891, 0x0010,
++ 0x080c, 0x17f1, 0x0138, 0x00de, 0xa280, 0x0000, 0x2003, 0x0002,
++ 0xa016, 0x0020, 0x6808, 0x8000, 0x680a, 0x00de, 0x0126, 0x0046,
++ 0x0036, 0x0026, 0x2091, 0x2200, 0x002e, 0x003e, 0x004e, 0x7000,
++ 0xa005, 0x0178, 0x710c, 0x220a, 0x8108, 0x230a, 0x8108, 0x240a,
++ 0x8108, 0xa182, 0xc992, 0x0210, 0x2009, 0xc977, 0x710e, 0x012e,
++ 0x0005, 0x7206, 0x2001, 0x18af, 0x0006, 0x2260, 0x0804, 0x19d3,
++ 0x0126, 0x0026, 0x0036, 0x00c6, 0x0006, 0x2091, 0x2200, 0x000e,
++ 0x004e, 0x003e, 0x002e, 0x00d6, 0x00c6, 0x2460, 0x6110, 0x2168,
++ 0x6a62, 0x6b5e, 0xa005, 0x0904, 0x1910, 0x6808, 0xa005, 0x0904,
++ 0x1947, 0x7000, 0xa005, 0x1108, 0x0488, 0x700c, 0x7110, 0xa106,
++ 0x1904, 0x194f, 0x7004, 0xa406, 0x1548, 0x2001, 0x0005, 0x2004,
++ 0xd08c, 0x0168, 0x0046, 0x080c, 0x1b83, 0x004e, 0x2460, 0x6010,
++ 0xa080, 0x0002, 0x2004, 0xa005, 0x0904, 0x1947, 0x0c10, 0x2001,
++ 0x0207, 0x2004, 0xd09c, 0x1d48, 0x7804, 0xa084, 0x6000, 0x0120,
++ 0xa086, 0x6000, 0x0108, 0x0c08, 0x7818, 0x6812, 0x781c, 0x6816,
++ 0x7803, 0x0004, 0x7003, 0x0000, 0x7004, 0x2060, 0x6100, 0xa18e,
++ 0x0004, 0x1904, 0x194f, 0x2009, 0x0048, 0x080c, 0x9613, 0x04f8,
++ 0x6808, 0xa005, 0x05a0, 0x7000, 0xa005, 0x0588, 0x700c, 0x7110,
++ 0xa106, 0x1118, 0x7004, 0xa406, 0x1550, 0x2001, 0x0005, 0x2004,
++ 0xd08c, 0x0160, 0x0046, 0x080c, 0x1b83, 0x004e, 0x2460, 0x6010,
++ 0xa080, 0x0002, 0x2004, 0xa005, 0x01d0, 0x0c28, 0x2001, 0x0207,
++ 0x2004, 0xd09c, 0x1d50, 0x2001, 0x0005, 0x2004, 0xd08c, 0x1d50,
++ 0x7804, 0xa084, 0x6000, 0x0118, 0xa086, 0x6000, 0x19f0, 0x7818,
++ 0x6812, 0x781c, 0x6816, 0x7803, 0x0004, 0x7003, 0x0000, 0x6100,
++ 0xa18e, 0x0004, 0x1120, 0x2009, 0x0048, 0x080c, 0x9613, 0x00ce,
++ 0x00de, 0x012e, 0x0005, 0x00f6, 0x00e6, 0x0026, 0x0036, 0x0046,
++ 0x0056, 0x2071, 0xc96a, 0x7000, 0xa086, 0x0000, 0x0904, 0x19b9,
++ 0x7004, 0xac06, 0x1904, 0x19ab, 0x2079, 0x0030, 0x7000, 0xa086,
++ 0x0003, 0x0904, 0x19ab, 0x7804, 0xd0fc, 0x15c8, 0x20e1, 0x6000,
++ 0x2011, 0x0032, 0x2001, 0x0208, 0x200c, 0x2001, 0x0209, 0x2004,
++ 0xa106, 0x1d88, 0x8211, 0x1db0, 0x7804, 0xd0fc, 0x1540, 0x080c,
++ 0x1f2d, 0x0026, 0x0056, 0x7803, 0x0004, 0x7804, 0xd0ac, 0x1de8,
++ 0x7803, 0x0002, 0x7803, 0x0009, 0x7003, 0x0003, 0x7007, 0x0000,
++ 0x005e, 0x002e, 0x2001, 0x015d, 0x2003, 0x0000, 0x080c, 0x5f22,
++ 0x1138, 0x0066, 0x2031, 0x0001, 0x080c, 0x5fa4, 0x006e, 0x0058,
++ 0x2001, 0x0160, 0x2502, 0x2001, 0x0138, 0x2202, 0x0020, 0x080c,
++ 0x1b83, 0x0804, 0x195b, 0x0156, 0x20a9, 0x0009, 0x2009, 0xc977,
++ 0x2104, 0xac06, 0x1108, 0x200a, 0xa188, 0x0003, 0x1f04, 0x19b0,
++ 0x015e, 0x005e, 0x004e, 0x003e, 0x002e, 0x00ee, 0x00fe, 0x0005,
++ 0x700c, 0x7110, 0xa106, 0x0904, 0x1a5c, 0x2104, 0x7006, 0x2060,
++ 0x8108, 0x211c, 0x8108, 0x2124, 0x8108, 0xa182, 0xc992, 0x0210,
++ 0x2009, 0xc977, 0x7112, 0x8cff, 0x05e8, 0x6010, 0x2068, 0x2d58,
++ 0x080c, 0x7824, 0x6828, 0xa406, 0x15e0, 0x682c, 0xa306, 0x15c8,
++ 0x7004, 0x2060, 0x6020, 0xc0d4, 0x6022, 0x684c, 0xd0f4, 0x0128,
++ 0x6817, 0xffff, 0x6813, 0xffff, 0x0428, 0x6850, 0xd0f4, 0x1130,
++ 0x7803, 0x0004, 0x6810, 0x781a, 0x6814, 0x781e, 0x6824, 0x2050,
++ 0x6818, 0x2060, 0x6830, 0x2040, 0x6034, 0xa0cc, 0x000f, 0x080c,
++ 0x7684, 0x1128, 0x2009, 0x0011, 0x080c, 0x1a5f, 0x0048, 0x2009,
++ 0x0011, 0x080c, 0x1a5f, 0x0120, 0x2009, 0x0001, 0x080c, 0x1a5f,
++ 0x2d58, 0x0005, 0x7803, 0x0004, 0x080c, 0x1ea2, 0x0904, 0x19c0,
++ 0x0cc0, 0x080c, 0x7684, 0x1128, 0x080c, 0x1953, 0x080c, 0x761a,
++ 0x0c88, 0x6020, 0xd0f4, 0x11e0, 0xd0d4, 0x01b8, 0x6038, 0xa402,
++ 0x6034, 0xa303, 0x0108, 0x1288, 0x643a, 0x6336, 0x6c2a, 0x6b2e,
++ 0x0046, 0x0036, 0x2400, 0x6c7c, 0xa402, 0x6812, 0x2300, 0x6b80,
++ 0xa303, 0x6816, 0x003e, 0x004e, 0x0018, 0x080c, 0xafd1, 0x0990,
++ 0x601c, 0xa08e, 0x0008, 0x0904, 0x19e0, 0xa08e, 0x000a, 0x0904,
++ 0x19e0, 0x2001, 0xc674, 0x2004, 0xd0b4, 0x1140, 0x6018, 0x2004,
++ 0xd0bc, 0x1120, 0x6817, 0x7fff, 0x6813, 0xffff, 0x080c, 0x241b,
++ 0x1904, 0x1a12, 0x0804, 0x19e0, 0x7003, 0x0000, 0x0005, 0x8aff,
++ 0x0904, 0x1b5d, 0xa03e, 0x2730, 0xc9fc, 0x6850, 0xd0fc, 0x11b8,
++ 0xd0f4, 0x1538, 0x00d6, 0x2805, 0xac68, 0x2900, 0x0002, 0x1acb,
++ 0x1a98, 0x1a98, 0x1acb, 0x1ace, 0x1ac3, 0x1acb, 0x1a98, 0x1acb,
++ 0x1aa9, 0x1aa9, 0x1acb, 0x1ace, 0x1acb, 0x1abb, 0x1aa9, 0x7803,
++ 0x0004, 0xc0fc, 0x6852, 0x6b6c, 0x6a70, 0x6d1c, 0x6c20, 0x00d6,
++ 0xd99c, 0x0904, 0x1b1e, 0x2805, 0xac68, 0x6f08, 0x6e0c, 0x0804,
++ 0x1b1f, 0xc0f4, 0x6852, 0x6b6c, 0x6a70, 0x00d6, 0x0804, 0x1b2c,
++ 0x2d10, 0x00de, 0x00d6, 0x6834, 0x2268, 0xa084, 0x00ff, 0xa096,
++ 0x0024, 0x0904, 0x1afe, 0x6b08, 0x6a0c, 0x6d00, 0x6c04, 0x0804,
++ 0x1b1e, 0x2d10, 0x00de, 0x00d6, 0x6834, 0x2268, 0xa084, 0x00ff,
++ 0xa096, 0x002c, 0x0540, 0x6b10, 0x6a14, 0x6d00, 0x6c04, 0x6f08,
++ 0x6e0c, 0x0804, 0x1b1f, 0x00de, 0x00d6, 0x6834, 0xa084, 0x00ff,
++ 0xa086, 0x001e, 0x1140, 0x00de, 0x080c, 0x2389, 0x1904, 0x1a5f,
++ 0xa00e, 0x0804, 0x1b5d, 0x00de, 0x080c, 0x1519, 0x2d10, 0x00de,
++ 0x00d6, 0x6834, 0x2268, 0xa084, 0x00ff, 0xa096, 0x0024, 0x0530,
++ 0xa096, 0x002c, 0x1d80, 0x6b10, 0xa3a6, 0xffff, 0x1130, 0x2d10,
++ 0x00de, 0x00d6, 0x080c, 0x72fa, 0x2268, 0x2d10, 0x00de, 0x00d6,
++ 0x7314, 0x685c, 0xa086, 0x0001, 0x1120, 0x6868, 0xa005, 0x0108,
++ 0x2018, 0x2268, 0x2011, 0x0000, 0x6d00, 0x6c04, 0x6f08, 0x6e0c,
++ 0x780f, 0x00f0, 0xe000, 0xe000, 0xe000, 0x0408, 0x6b08, 0xa3a6,
++ 0xffff, 0x1130, 0x2d10, 0x00de, 0x00d6, 0x080c, 0x72fa, 0x2268,
++ 0x2d10, 0x00de, 0x00d6, 0x7314, 0x685c, 0xa086, 0x0001, 0x1120,
++ 0x6868, 0xa005, 0x0108, 0x2018, 0x2268, 0x2011, 0x0000, 0x6d00,
++ 0x6c04, 0x780f, 0x00f0, 0xe000, 0xe000, 0xe000, 0xc9fd, 0x7b22,
++ 0x7a26, 0x7d32, 0x7c36, 0x7f3a, 0x7e3e, 0x731a, 0x721e, 0x7522,
++ 0x7426, 0x772a, 0x762e, 0x7902, 0x7100, 0x8108, 0x7102, 0x00de,
++ 0x6828, 0xa300, 0x682a, 0x682c, 0xa201, 0x682e, 0x8109, 0x2d08,
++ 0x1500, 0xd9fc, 0x0160, 0xc9fc, 0x080c, 0x2389, 0x01e8, 0x2805,
++ 0xac68, 0x6800, 0xa506, 0x11c0, 0x6804, 0xa406, 0x00a8, 0xc9fc,
++ 0x080c, 0x2389, 0x0188, 0x2805, 0xac68, 0x6800, 0xa506, 0x1160,
++ 0x6804, 0xa406, 0x1148, 0x6808, 0xa706, 0x1130, 0x680c, 0xa606,
++ 0x0018, 0xc9fc, 0x080c, 0x2389, 0x2168, 0x0005, 0x080c, 0x1519,
++ 0x080c, 0x2014, 0x7004, 0x2060, 0x00d6, 0x6010, 0x2068, 0x7003,
++ 0x0000, 0x080c, 0x1ec3, 0x080c, 0xac91, 0x0170, 0x6808, 0x8001,
++ 0x680a, 0x697c, 0x6912, 0x6980, 0x6916, 0x682b, 0xffff, 0x682f,
++ 0xffff, 0x6850, 0xc0bd, 0x6852, 0x00de, 0x080c, 0xa961, 0x0804,
++ 0x1dec, 0x080c, 0x1519, 0x0126, 0x2091, 0x2200, 0x0006, 0x0016,
++ 0x2b68, 0x6818, 0x2060, 0x7904, 0x7803, 0x0002, 0xa184, 0x0700,
++ 0x1978, 0xa184, 0x0003, 0xa086, 0x0003, 0x0d58, 0x7000, 0x0002,
++ 0x1ba0, 0x1ba6, 0x1cf5, 0x1dc1, 0x1ddb, 0x1ba0, 0x1ba0, 0x1ba0,
++ 0x7804, 0xd09c, 0x1904, 0x1dec, 0x080c, 0x1519, 0x8001, 0x7002,
++ 0xd1bc, 0x15c0, 0x080c, 0x7684, 0x1508, 0xd1dc, 0x1598, 0x6864,
++ 0x8000, 0x6866, 0xd19c, 0x0140, 0x7004, 0x2060, 0x2009, 0x0102,
++ 0x080c, 0x9613, 0x0804, 0x1cbc, 0x8aff, 0x0130, 0x2009, 0x0001,
++ 0x080c, 0x1a5f, 0x0804, 0x1dec, 0x7004, 0x2060, 0x080c, 0x24e0,
++ 0x080c, 0x761a, 0x7007, 0x0000, 0x0804, 0x1c45, 0xd19c, 0x1904,
++ 0x1c79, 0xd1dc, 0x1178, 0x8aff, 0x0904, 0x1c79, 0x2009, 0x0001,
++ 0x080c, 0x1a5f, 0x0904, 0x1dec, 0x2009, 0x0001, 0x080c, 0x1a5f,
++ 0x0804, 0x1dec, 0x7803, 0x0004, 0x7003, 0x0000, 0xd1bc, 0x1904,
++ 0x1c4b, 0x080c, 0x7684, 0x1130, 0xd19c, 0x0120, 0x6864, 0x8000,
++ 0x6866, 0x0810, 0x0026, 0x0036, 0x7c20, 0x7d24, 0x7e30, 0x7f34,
++ 0x7818, 0x6812, 0x781c, 0x6816, 0x2001, 0x0201, 0x2004, 0xa005,
++ 0x0140, 0x7808, 0xd0ec, 0x1128, 0x7803, 0x0009, 0x7003, 0x0004,
++ 0x0028, 0x080c, 0x7684, 0x0110, 0x080c, 0x1df0, 0x6b28, 0x6a2c,
++ 0x2400, 0x686e, 0xa31a, 0x2500, 0x6872, 0xa213, 0x6b2a, 0x6a2e,
++ 0x00c6, 0x7004, 0x2060, 0x6020, 0xd0f4, 0x1110, 0x633a, 0x6236,
++ 0x00ce, 0x003e, 0x002e, 0x6e1e, 0x6f22, 0x2500, 0xa405, 0x0128,
++ 0x080c, 0x239f, 0x6850, 0xc0fd, 0x6852, 0x2a00, 0x6826, 0x2c00,
++ 0x681a, 0x2800, 0x6832, 0x6808, 0x8001, 0x680a, 0x1148, 0x684c,
++ 0xd0e4, 0x0130, 0x7004, 0x2060, 0x2009, 0x0048, 0x080c, 0x9613,
++ 0x7000, 0xa086, 0x0004, 0x0904, 0x1dec, 0x7003, 0x0000, 0x080c,
++ 0x19c0, 0x0804, 0x1dec, 0x0056, 0x7d0c, 0xd5bc, 0x1110, 0x080c,
++ 0xc55e, 0x005e, 0x080c, 0x1ec3, 0x7004, 0x2060, 0x601c, 0xa086,
++ 0x0009, 0x1140, 0x2009, 0x0106, 0x080c, 0x9613, 0x7007, 0x0000,
++ 0x0804, 0x1dec, 0x00f6, 0x7004, 0x2078, 0x080c, 0x56c3, 0x0118,
++ 0x7820, 0xc0f5, 0x7822, 0x00fe, 0x682b, 0xffff, 0x682f, 0xffff,
++ 0x6808, 0x8001, 0x680a, 0x697c, 0x791a, 0x6980, 0x791e, 0x0804,
++ 0x1dec, 0x7004, 0x00c6, 0x2060, 0x6020, 0x00ce, 0xd0f4, 0x0120,
++ 0x6808, 0x8001, 0x680a, 0x04c0, 0x7818, 0x6812, 0x7a1c, 0x6a16,
++ 0xd19c, 0x0160, 0xa205, 0x0150, 0x7004, 0xa080, 0x0007, 0x2004,
++ 0xa084, 0xfffd, 0xa086, 0x0008, 0x1904, 0x1be2, 0x684c, 0xc0f5,
++ 0x684e, 0x7814, 0xa005, 0x1520, 0x7003, 0x0000, 0x6808, 0x8001,
++ 0x680a, 0x01a0, 0x7004, 0x2060, 0x601c, 0xa086, 0x000a, 0x11a0,
++ 0x0156, 0x20a9, 0x0009, 0x2009, 0xc977, 0x2104, 0xac06, 0x1108,
++ 0x200a, 0xa188, 0x0003, 0x1f04, 0x1cad, 0x015e, 0x7004, 0x2060,
++ 0x2009, 0x0048, 0x080c, 0x9613, 0x080c, 0x19c0, 0x0804, 0x1dec,
++ 0x7818, 0x6812, 0x781c, 0x6816, 0x7814, 0x7908, 0xa18c, 0x0fff,
++ 0xa192, 0x0841, 0x1a04, 0x1b60, 0xa188, 0x0007, 0x8114, 0x8214,
++ 0x8214, 0xa10a, 0x8104, 0x8004, 0x8004, 0xa20a, 0x810b, 0x810b,
++ 0x810b, 0x080c, 0x1f58, 0x7803, 0x0004, 0x780f, 0xffff, 0x7803,
++ 0x0001, 0x7804, 0xd0fc, 0x0de8, 0x7803, 0x0002, 0x7803, 0x0004,
++ 0x780f, 0x00f6, 0x7004, 0x7007, 0x0000, 0x2060, 0x2009, 0x0048,
++ 0x080c, 0x9613, 0x080c, 0x1fae, 0x0838, 0x8001, 0x7002, 0xd194,
++ 0x01b0, 0x7804, 0xd0fc, 0x1904, 0x1d91, 0xd09c, 0x0138, 0x7804,
++ 0xd0fc, 0x1904, 0x1d91, 0xd09c, 0x1904, 0x1d95, 0x8aff, 0x0904,
++ 0x1dec, 0x2009, 0x0001, 0x080c, 0x1a5f, 0x0804, 0x1dec, 0xa184,
++ 0x0888, 0x1148, 0x8aff, 0x0904, 0x1dec, 0x2009, 0x0001, 0x080c,
++ 0x1a5f, 0x0804, 0x1dec, 0x7818, 0x6812, 0x7a1c, 0x6a16, 0xa205,
++ 0x0904, 0x1c96, 0x7803, 0x0004, 0x7003, 0x0000, 0xd1bc, 0x1904,
++ 0x1d73, 0x6834, 0xa084, 0x00ff, 0xa086, 0x0029, 0x1118, 0xd19c,
++ 0x1904, 0x1c96, 0x0026, 0x0036, 0x7c20, 0x7d24, 0x7e30, 0x7f34,
++ 0x7818, 0x6812, 0x781c, 0x6816, 0x2001, 0x0201, 0x2004, 0xa005,
++ 0x0140, 0x7808, 0xd0ec, 0x1128, 0x7803, 0x0009, 0x7003, 0x0004,
++ 0x0020, 0x0016, 0x080c, 0x1df0, 0x001e, 0x6b28, 0x6a2c, 0x080c,
++ 0x239f, 0x00d6, 0x2805, 0xac68, 0x6034, 0xd09c, 0x1128, 0x6808,
++ 0xa31a, 0x680c, 0xa213, 0x0020, 0x6810, 0xa31a, 0x6814, 0xa213,
++ 0x00de, 0xd194, 0x0904, 0x1c10, 0x2a00, 0x6826, 0x2c00, 0x681a,
++ 0x2800, 0x6832, 0x6808, 0x8001, 0x680a, 0x6b2a, 0x6a2e, 0x003e,
++ 0x002e, 0x0804, 0x1cbc, 0x0056, 0x7d0c, 0x080c, 0xc55e, 0x005e,
++ 0x080c, 0x1ec3, 0x00f6, 0x7004, 0x2078, 0x080c, 0x56c3, 0x0118,
++ 0x7820, 0xc0f5, 0x7822, 0x00fe, 0x682b, 0xffff, 0x682f, 0xffff,
++ 0x6808, 0x8001, 0x680a, 0x697c, 0x791a, 0x6980, 0x791e, 0x0804,
++ 0x1dec, 0x7804, 0xd09c, 0x0904, 0x1b8b, 0x7c20, 0x7824, 0xa405,
++ 0x1904, 0x1b8b, 0x7818, 0x6812, 0x7c1c, 0x6c16, 0xa405, 0x1120,
++ 0x7803, 0x0002, 0x0804, 0x1c96, 0x7520, 0x7424, 0x7728, 0x762c,
++ 0x7018, 0xa528, 0x701c, 0xa421, 0xa7b9, 0x0000, 0xa6b1, 0x0000,
++ 0x7830, 0xa506, 0x1150, 0x7834, 0xa406, 0x1138, 0x7838, 0xa706,
++ 0x1120, 0x783c, 0xa606, 0x0904, 0x1b8b, 0x7803, 0x0002, 0x0804,
++ 0x1d22, 0x7803, 0x0004, 0x7003, 0x0000, 0x7004, 0xa00d, 0x0180,
++ 0x6808, 0x8001, 0x680a, 0x1160, 0x7004, 0x2060, 0x2009, 0x0048,
++ 0x601c, 0xa086, 0x0009, 0x1110, 0x080c, 0x1519, 0x080c, 0x9613,
++ 0x080c, 0x19c0, 0x0088, 0x7803, 0x0004, 0x7003, 0x0000, 0x7004,
++ 0x2060, 0x6010, 0xa005, 0x0da0, 0x2068, 0x6808, 0x8000, 0x680a,
++ 0x6c28, 0x6b2c, 0x080c, 0x19d3, 0x001e, 0x000e, 0x012e, 0x0005,
++ 0x700c, 0x7110, 0xa106, 0x0904, 0x1e96, 0x7004, 0x0016, 0x210c,
++ 0xa106, 0x001e, 0x0904, 0x1e96, 0x00d6, 0x00c6, 0x216c, 0x2d00,
++ 0xa005, 0x0904, 0x1e94, 0x681c, 0xa086, 0x0008, 0x0904, 0x1e94,
++ 0x6820, 0xd0d4, 0x1904, 0x1e94, 0x6810, 0x2068, 0x080c, 0x7684,
++ 0x0904, 0x1e94, 0x6850, 0xd0fc, 0x05a8, 0x8108, 0x2104, 0x6b2c,
++ 0xa306, 0x1904, 0x1e94, 0x8108, 0x2104, 0x6a28, 0xa206, 0x1904,
++ 0x1e94, 0x6850, 0xc0fc, 0xc0f5, 0x6852, 0x686c, 0x7822, 0x701a,
++ 0x6870, 0x7826, 0x701e, 0x681c, 0x7832, 0x7022, 0x6820, 0x7836,
++ 0x7026, 0x6818, 0x2060, 0x6034, 0xd09c, 0x0168, 0x6830, 0x2005,
++ 0x00d6, 0xac68, 0x6808, 0x783a, 0x702a, 0x680c, 0x783e, 0x702e,
++ 0x00de, 0x0804, 0x1e8e, 0xa006, 0x783a, 0x783e, 0x702a, 0x702e,
++ 0x0804, 0x1e8e, 0x8108, 0x2104, 0xa005, 0x1904, 0x1e94, 0x6b2c,
++ 0xa306, 0x1904, 0x1e94, 0x8108, 0x2104, 0xa005, 0x15e8, 0x6a28,
++ 0xa206, 0x15d0, 0x6850, 0xc0f5, 0x6852, 0x6830, 0x2005, 0x6918,
++ 0xa160, 0xa180, 0x000d, 0x2004, 0xd09c, 0x11a0, 0x6008, 0x7822,
++ 0x701a, 0x686e, 0x600c, 0x7826, 0x701e, 0x6872, 0x6000, 0x7832,
++ 0x7022, 0x6004, 0x7836, 0x7026, 0xa006, 0x783a, 0x783e, 0x702a,
++ 0x702e, 0x00a0, 0x6010, 0x7822, 0x701a, 0x686e, 0x6014, 0x7826,
++ 0x701e, 0x6872, 0x6000, 0x7832, 0x7022, 0x6004, 0x7836, 0x7026,
++ 0x6008, 0x783a, 0x702a, 0x600c, 0x783e, 0x702e, 0x6810, 0x781a,
++ 0x6814, 0x781e, 0x7803, 0x0011, 0x00ce, 0x00de, 0x0005, 0x2011,
++ 0x0201, 0x2009, 0x003c, 0x2204, 0xa005, 0x1118, 0x8109, 0x1dd8,
++ 0x0005, 0x0005, 0x0ca1, 0x0118, 0x780c, 0xd0a4, 0x0120, 0x00d9,
++ 0xa085, 0x0001, 0x0010, 0x080c, 0x1fae, 0x0005, 0x0126, 0x2091,
++ 0x2200, 0x7000, 0xa086, 0x0003, 0x1160, 0x700c, 0x7110, 0xa106,
++ 0x0140, 0x080c, 0x2b06, 0x20e1, 0x9028, 0x700f, 0xc977, 0x7013,
++ 0xc977, 0x012e, 0x0005, 0x00c6, 0x080c, 0x5f22, 0x11b8, 0x2001,
++ 0x0160, 0x2003, 0x0000, 0x2001, 0x0138, 0x2003, 0x0000, 0x2011,
++ 0x00c8, 0xe000, 0xe000, 0x8211, 0x1de0, 0x0481, 0x0066, 0x2031,
++ 0x0000, 0x080c, 0x5fa4, 0x006e, 0x00ce, 0x0005, 0x080c, 0x1f2d,
++ 0x080c, 0x2b06, 0x20e1, 0x9028, 0x700c, 0x7110, 0xa106, 0x0190,
++ 0x2104, 0xa005, 0x0130, 0x2060, 0x6010, 0x2060, 0x6008, 0x8001,
++ 0x600a, 0xa188, 0x0003, 0xa182, 0xc992, 0x0210, 0x2009, 0xc977,
++ 0x7112, 0x0c50, 0x2001, 0x015d, 0x2003, 0x0000, 0x2001, 0x0160,
++ 0x2502, 0x2001, 0x0138, 0x2202, 0x00ce, 0x0005, 0x080c, 0x2b06,
++ 0x20e1, 0x9028, 0x2001, 0x015d, 0x2003, 0x0000, 0x00e6, 0x00c6,
++ 0x0016, 0x2071, 0xc96a, 0x700c, 0x7110, 0xa106, 0x0190, 0x2104,
++ 0xa005, 0x0130, 0x2060, 0x6010, 0x2060, 0x6008, 0x8001, 0x600a,
++ 0xa188, 0x0003, 0xa182, 0xc992, 0x0210, 0x2009, 0xc977, 0x7112,
++ 0x0c50, 0x001e, 0x00ce, 0x00ee, 0x0005, 0x2001, 0x0138, 0x2014,
++ 0x2003, 0x0000, 0x2001, 0x0160, 0x202c, 0x2003, 0x0000, 0x080c,
++ 0x5f22, 0x1148, 0x2021, 0x0002, 0x1d04, 0x1f3c, 0x2091, 0x6000,
++ 0x8421, 0x1dd0, 0x0005, 0x2021, 0xb015, 0x2001, 0x0141, 0x201c,
++ 0xd3dc, 0x1168, 0x2001, 0x0109, 0x201c, 0xa39c, 0x0048, 0x1138,
++ 0x2001, 0x0111, 0x201c, 0x83ff, 0x1110, 0x8421, 0x1d70, 0x0005,
++ 0x00e6, 0x2071, 0x0200, 0x7808, 0xa084, 0xf000, 0xa10d, 0x0869,
++ 0x2001, 0x0105, 0x2004, 0xa084, 0x0003, 0x1130, 0x2001, 0xc992,
++ 0x2004, 0xa086, 0x0000, 0x0548, 0xa026, 0x2019, 0xf000, 0x8319,
++ 0x1148, 0x2001, 0x012b, 0x2003, 0x95f5, 0x2001, 0x0129, 0x2003,
++ 0x95f5, 0x00d8, 0x2001, 0x0105, 0x2004, 0xa084, 0x0003, 0x1130,
++ 0x2001, 0xc992, 0x2004, 0xa086, 0x0000, 0x0178, 0x2001, 0x0132,
++ 0x2004, 0xa436, 0x0110, 0x2020, 0x0c00, 0x2001, 0x0021, 0x2004,
++ 0xd0fc, 0x09e8, 0x080c, 0x222c, 0x08c0, 0x20e1, 0x7000, 0x7324,
++ 0x7420, 0x7028, 0x7028, 0x7426, 0x7037, 0x0001, 0x810f, 0x712e,
++ 0x702f, 0x0100, 0x7037, 0x0008, 0x7326, 0x7422, 0x2001, 0x0160,
++ 0x2502, 0x2001, 0x0138, 0x2202, 0x00ee, 0x0005, 0x0026, 0x2001,
++ 0x015d, 0x2003, 0x0000, 0x7908, 0xa18c, 0x0fff, 0xa182, 0x0ffd,
++ 0x0210, 0x2009, 0x0000, 0xa190, 0x0007, 0xa294, 0x1ff8, 0x8214,
++ 0x8214, 0x8214, 0x2001, 0x020a, 0x82ff, 0x0140, 0x20e1, 0x6000,
++ 0x200c, 0x200c, 0x200c, 0x200c, 0x8211, 0x1dd0, 0x20e1, 0x7000,
++ 0x200c, 0x200c, 0x7003, 0x0000, 0x20e1, 0x6000, 0x2001, 0x0208,
++ 0x200c, 0x2001, 0x0209, 0x2004, 0xa106, 0x0158, 0x080c, 0x1e97,
++ 0x0130, 0x7908, 0xd1ec, 0x1128, 0x790c, 0xd1a4, 0x0960, 0x080c,
++ 0x1ec3, 0xa006, 0x002e, 0x0005, 0x00f6, 0x00e6, 0x0016, 0x0026,
++ 0x2071, 0xc96a, 0x2079, 0x0030, 0x2011, 0x0050, 0x7000, 0xa086,
++ 0x0000, 0x01a8, 0x8211, 0x0188, 0x2001, 0x0005, 0x2004, 0xd08c,
++ 0x0dc8, 0x7904, 0xa18c, 0x0780, 0x0016, 0x080c, 0x1b83, 0x001e,
++ 0x81ff, 0x1118, 0x2011, 0x0050, 0x0c48, 0xa085, 0x0001, 0x002e,
++ 0x001e, 0x00ee, 0x00fe, 0x0005, 0x7803, 0x0004, 0x2009, 0x0064,
++ 0x7804, 0xd0ac, 0x0904, 0x2060, 0x8109, 0x1dd0, 0x2009, 0x0100,
++ 0x210c, 0xa18a, 0x0003, 0x0a0c, 0x1519, 0x080c, 0x2333, 0x00e6,
++ 0x00f6, 0x2071, 0xc959, 0x2079, 0x0010, 0x7004, 0xa086, 0x0000,
++ 0x0538, 0x7800, 0x0006, 0x7820, 0x0006, 0x7830, 0x0006, 0x7834,
++ 0x0006, 0x7838, 0x0006, 0x783c, 0x0006, 0x7803, 0x0004, 0xe000,
++ 0xe000, 0x2079, 0x0030, 0x7804, 0xd0ac, 0x190c, 0x1519, 0x2079,
++ 0x0010, 0x000e, 0x783e, 0x000e, 0x783a, 0x000e, 0x7836, 0x000e,
++ 0x7832, 0x000e, 0x7822, 0x000e, 0x7802, 0x00fe, 0x00ee, 0x0030,
++ 0x00fe, 0x00ee, 0x7804, 0xd0ac, 0x190c, 0x1519, 0x080c, 0x7f6e,
++ 0x0005, 0x00e6, 0x2071, 0xc992, 0x7003, 0x0000, 0x00ee, 0x0005,
++ 0x00d6, 0xa280, 0x0004, 0x206c, 0x694c, 0xd1dc, 0x1904, 0x20ed,
++ 0x6934, 0xa184, 0x0007, 0x0002, 0x207c, 0x20d8, 0x207c, 0x207e,
++ 0x207c, 0x20bf, 0x209e, 0x208d, 0x080c, 0x1519, 0x2100, 0xa084,
++ 0x00ff, 0xa086, 0x0013, 0x0904, 0x20d8, 0x2100, 0xa084, 0x00ff,
++ 0xa086, 0x001b, 0x0904, 0x20d8, 0x0c78, 0x684c, 0xd0b4, 0x0904,
++ 0x21e9, 0x6860, 0x682e, 0x6816, 0x685c, 0x682a, 0x6812, 0x687c,
++ 0x680a, 0x6880, 0x680e, 0x6958, 0x0804, 0x20e0, 0x6834, 0xa084,
++ 0x00ff, 0xa086, 0x001e, 0x19c0, 0x684c, 0xd0b4, 0x0904, 0x21e9,
++ 0x6860, 0x682e, 0x6816, 0x685c, 0x682a, 0x6812, 0x687c, 0x680a,
++ 0x6880, 0x680e, 0x6804, 0x681a, 0xa080, 0x000d, 0x2004, 0xa084,
++ 0x000f, 0xa080, 0x23c7, 0x2005, 0x6832, 0x6958, 0x0450, 0xa18c,
++ 0x00ff, 0xa186, 0x0015, 0x1548, 0x684c, 0xd0b4, 0x0904, 0x21e9,
++ 0x6804, 0x681a, 0xa080, 0x000d, 0x2004, 0xa084, 0x000f, 0xa080,
++ 0x23c7, 0x2005, 0x6832, 0x6958, 0xa006, 0x682e, 0x682a, 0x0088,
++ 0x684c, 0xd0b4, 0x0904, 0x1b5e, 0x6958, 0xa006, 0x682e, 0x682a,
++ 0x2d00, 0x681a, 0x6834, 0xa084, 0x000f, 0xa080, 0x23c7, 0x2005,
++ 0x6832, 0x6926, 0x684c, 0xc0dd, 0x684e, 0x00de, 0x0005, 0x00f6,
++ 0x2079, 0x0020, 0x7804, 0xd0fc, 0x190c, 0x222c, 0x00e6, 0x00d6,
++ 0x2071, 0xc992, 0x7000, 0xa005, 0x1904, 0x2155, 0x00c6, 0x7206,
++ 0xa280, 0x0004, 0x205c, 0x7004, 0x2068, 0x7803, 0x0004, 0x6818,
++ 0x00d6, 0x2068, 0x686c, 0x7812, 0x6890, 0x00f6, 0x20e1, 0x9040,
++ 0x2079, 0x0200, 0x781a, 0x2079, 0x0100, 0x8004, 0x78d6, 0x00fe,
++ 0x00de, 0x2b68, 0x6824, 0x2050, 0x6818, 0x2060, 0x6830, 0x2040,
++ 0x6034, 0xa0cc, 0x000f, 0x6908, 0x791a, 0x7116, 0x680c, 0x781e,
++ 0x701a, 0xa006, 0x700e, 0x7012, 0x7004, 0x692c, 0x6814, 0xa106,
++ 0x1120, 0x6928, 0x6810, 0xa106, 0x0158, 0x0036, 0x0046, 0x6b14,
++ 0x6c10, 0x080c, 0x241b, 0x004e, 0x003e, 0x0110, 0x00ce, 0x00a8,
++ 0x8aff, 0x1120, 0x00ce, 0xa085, 0x0001, 0x0078, 0x0126, 0x2091,
++ 0x8000, 0x2079, 0x0020, 0x2009, 0x0001, 0x0059, 0x0118, 0x2009,
++ 0x0001, 0x0039, 0x012e, 0x00ce, 0xa006, 0x00de, 0x00ee, 0x00fe,
++ 0x0005, 0x0076, 0x0066, 0x0056, 0x0046, 0x0036, 0x0026, 0x8aff,
++ 0x0904, 0x21e2, 0x700c, 0x7214, 0xa23a, 0x7010, 0x7218, 0xa203,
++ 0x0a04, 0x21e1, 0xa705, 0x0904, 0x21e1, 0xa03e, 0x2730, 0x6850,
++ 0xd0fc, 0x11a8, 0x00d6, 0x2805, 0xac68, 0x2900, 0x0002, 0x21b0,
++ 0x2195, 0x2195, 0x21b0, 0x21b0, 0x21a9, 0x21b0, 0x2195, 0x21b0,
++ 0x219a, 0x219a, 0x21b0, 0x21b0, 0x21b0, 0x21a1, 0x219a, 0xc0fc,
++ 0x6852, 0x6b6c, 0x6a70, 0x6d1c, 0x6c20, 0xd99c, 0x05c8, 0x00d6,
++ 0x2805, 0xac68, 0x6f08, 0x6e0c, 0x0490, 0x6b08, 0x6a0c, 0x6d00,
++ 0x6c04, 0x0468, 0x6b10, 0x6a14, 0x6d00, 0x6c04, 0x6f08, 0x6e0c,
++ 0x0430, 0x00de, 0x00d6, 0x6834, 0xa084, 0x00ff, 0xa086, 0x001e,
++ 0x1138, 0x00de, 0x080c, 0x2389, 0x1904, 0x215f, 0xa00e, 0x0490,
++ 0x2d10, 0x00de, 0x00d6, 0x6834, 0xa084, 0x00ff, 0xa086, 0x0013,
++ 0x2268, 0x09d8, 0x2d10, 0x00de, 0x00d6, 0x6834, 0xa084, 0x00ff,
++ 0xa086, 0x001b, 0x2268, 0x09b0, 0x00de, 0x080c, 0x1519, 0x00de,
++ 0x7b22, 0x7a26, 0x7d32, 0x7c36, 0x7f3a, 0x7e3e, 0x7902, 0x7000,
++ 0x8000, 0x7002, 0x6828, 0xa300, 0x682a, 0x682c, 0xa201, 0x682e,
++ 0x700c, 0xa300, 0x700e, 0x7010, 0xa201, 0x7012, 0x080c, 0x2389,
++ 0x0008, 0xa006, 0x002e, 0x003e, 0x004e, 0x005e, 0x006e, 0x007e,
++ 0x0005, 0x080c, 0x1519, 0x0026, 0x2001, 0x0105, 0x2003, 0x0010,
++ 0x20e1, 0x9040, 0x7803, 0x0004, 0x7003, 0x0000, 0x7004, 0x2060,
++ 0x00d6, 0x6010, 0x2068, 0x080c, 0xac91, 0x0118, 0x6850, 0xc0bd,
++ 0x6852, 0x601c, 0xa086, 0x0006, 0x1180, 0x2061, 0x0100, 0x62c8,
++ 0x2001, 0x00fa, 0x8001, 0x1df0, 0x60c8, 0xa206, 0x1dc0, 0x60c4,
++ 0x686a, 0x60c8, 0x6866, 0x7004, 0x2060, 0x00de, 0x00c6, 0x080c,
++ 0xa961, 0x00ce, 0x2001, 0xc936, 0x2004, 0xac06, 0x1150, 0x20e1,
++ 0x9040, 0x080c, 0x90f6, 0x2011, 0x0000, 0x080c, 0x8f18, 0x080c,
++ 0x7f6e, 0x002e, 0x0804, 0x22e6, 0x0126, 0x2091, 0x2400, 0x0006,
++ 0x0016, 0x00f6, 0x00e6, 0x00d6, 0x00c6, 0x2079, 0x0020, 0x2071,
++ 0xc992, 0x2b68, 0x6818, 0x2060, 0x7904, 0x7803, 0x0002, 0xa184,
++ 0x0700, 0x1904, 0x21eb, 0x7000, 0x0002, 0x22e6, 0x2249, 0x22b9,
++ 0x22e4, 0x8001, 0x7002, 0xd19c, 0x1170, 0x8aff, 0x05d0, 0x2009,
++ 0x0001, 0x080c, 0x2159, 0x0904, 0x22e6, 0x2009, 0x0001, 0x080c,
++ 0x2159, 0x0804, 0x22e6, 0x7803, 0x0004, 0xd194, 0x0148, 0x6850,
++ 0xc0fc, 0x6852, 0x8aff, 0x11d8, 0x684c, 0xc0f5, 0x684e, 0x00b8,
++ 0x0026, 0x0036, 0x6b28, 0x6a2c, 0x7820, 0x686e, 0xa31a, 0x7824,
++ 0x6872, 0xa213, 0x7830, 0x681e, 0x7834, 0x6822, 0x6b2a, 0x6a2e,
++ 0x003e, 0x002e, 0x080c, 0x239f, 0x6850, 0xc0fd, 0x6852, 0x2a00,
++ 0x6826, 0x2c00, 0x681a, 0x2800, 0x6832, 0x7003, 0x0000, 0x0804,
++ 0x22e6, 0x00f6, 0x0026, 0x781c, 0x0006, 0x7818, 0x0006, 0x2079,
++ 0x0100, 0x7a14, 0xa284, 0x0184, 0xa085, 0x0012, 0x7816, 0x0036,
++ 0x2019, 0x1000, 0x8319, 0x090c, 0x1519, 0x7820, 0xd0bc, 0x1dd0,
++ 0x003e, 0x79c8, 0x000e, 0xa102, 0x001e, 0x0006, 0x0016, 0x79c4,
++ 0x000e, 0xa103, 0x78c6, 0x000e, 0x78ca, 0xa284, 0x0184, 0xa085,
++ 0x0012, 0x7816, 0x002e, 0x00fe, 0x7803, 0x0008, 0x7003, 0x0000,
++ 0x0468, 0x8001, 0x7002, 0xd194, 0x0168, 0x7804, 0xd0fc, 0x1904,
++ 0x223c, 0xd19c, 0x11f8, 0x8aff, 0x0508, 0x2009, 0x0001, 0x080c,
++ 0x2159, 0x00e0, 0x0026, 0x0036, 0x6b28, 0x6a2c, 0x080c, 0x239f,
++ 0x00d6, 0x2805, 0xac68, 0x6034, 0xd09c, 0x1128, 0x6808, 0xa31a,
++ 0x680c, 0xa213, 0x0020, 0x6810, 0xa31a, 0x6814, 0xa213, 0x00de,
++ 0x0804, 0x226c, 0x0804, 0x2268, 0x080c, 0x1519, 0x00ce, 0x00de,
++ 0x00ee, 0x00fe, 0x001e, 0x000e, 0x012e, 0x0005, 0x00f6, 0x00e6,
++ 0x2071, 0xc992, 0x7000, 0xa086, 0x0000, 0x05d0, 0x2079, 0x0020,
++ 0x0016, 0x2009, 0x0207, 0x210c, 0xd194, 0x0198, 0x2009, 0x020c,
++ 0x210c, 0xa184, 0x0003, 0x0168, 0x080c, 0xc5a7, 0x2001, 0x0133,
++ 0x2004, 0xa005, 0x090c, 0x1519, 0x20e1, 0x9040, 0x2001, 0x020c,
++ 0x2102, 0x2009, 0x0206, 0x2104, 0x2009, 0x0203, 0x210c, 0xa106,
++ 0x1110, 0x20e1, 0x9040, 0x7804, 0xd0fc, 0x09d8, 0x080c, 0x222c,
++ 0x7000, 0xa086, 0x0000, 0x19a8, 0x001e, 0x7803, 0x0004, 0x7804,
++ 0xd0ac, 0x1de8, 0x20e1, 0x9040, 0x7803, 0x0002, 0x7003, 0x0000,
++ 0x00ee, 0x00fe, 0x0005, 0x0026, 0x00c6, 0x00d6, 0x00e6, 0x00f6,
++ 0x2071, 0xc992, 0x2079, 0x0020, 0x7000, 0xa086, 0x0000, 0x0540,
++ 0x7004, 0x2060, 0x6010, 0x2068, 0x080c, 0xac91, 0x0158, 0x6850,
++ 0xc0b5, 0x6852, 0x680c, 0x7a1c, 0xa206, 0x1120, 0x6808, 0x7a18,
++ 0xa206, 0x01e0, 0x2001, 0x0105, 0x2003, 0x0010, 0x20e1, 0x9040,
++ 0x7803, 0x0004, 0x7003, 0x0000, 0x7004, 0x2060, 0x080c, 0xa961,
++ 0x20e1, 0x9040, 0x080c, 0x90f6, 0x2011, 0x0000, 0x080c, 0x8f18,
++ 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x002e, 0x0005, 0x6810, 0x6a14,
++ 0xa205, 0x1d00, 0x684c, 0xc0dc, 0x684e, 0x2c10, 0x080c, 0x2068,
++ 0x2001, 0x0105, 0x2003, 0x0010, 0x20e1, 0x9040, 0x7803, 0x0004,
++ 0x7003, 0x0000, 0x2069, 0xc927, 0x6833, 0x0000, 0x683f, 0x0000,
++ 0x08f8, 0x8840, 0x2805, 0xa005, 0x1170, 0x6004, 0xa005, 0x0168,
++ 0x681a, 0x2060, 0x6034, 0xa084, 0x000f, 0xa080, 0x23c7, 0x2045,
++ 0x88ff, 0x090c, 0x1519, 0x8a51, 0x0005, 0x2050, 0x0005, 0x8a50,
++ 0x8841, 0x2805, 0xa005, 0x1190, 0x2c00, 0xad06, 0x0120, 0x6000,
++ 0xa005, 0x1108, 0x2d00, 0x2060, 0x681a, 0x6034, 0xa084, 0x000f,
++ 0xa080, 0x23d7, 0x2045, 0x88ff, 0x090c, 0x1519, 0x0005, 0x0000,
++ 0x0011, 0x0015, 0x0019, 0x001d, 0x0021, 0x0025, 0x0029, 0x0000,
++ 0x000f, 0x0015, 0x001b, 0x0021, 0x0027, 0x0000, 0x0000, 0x0000,
++ 0x23bc, 0x23b8, 0x23bc, 0x23bc, 0x23c6, 0x0000, 0x23bc, 0x0000,
++ 0x23c3, 0x23c0, 0x23c3, 0x23c3, 0x0000, 0x23c6, 0x23c3, 0x0000,
++ 0x23be, 0x23be, 0x0000, 0x23be, 0x23c6, 0x0000, 0x23be, 0x0000,
++ 0x23c4, 0x23c4, 0x0000, 0x23c4, 0x0000, 0x23c6, 0x23c4, 0x0136,
++ 0x0146, 0x0156, 0x2099, 0xc765, 0x20a1, 0x0018, 0x20a9, 0x0008,
++ 0x53a3, 0x7803, 0x0020, 0x0126, 0x2091, 0x8000, 0x7803, 0x0041,
++ 0x7007, 0x0005, 0x7000, 0xc094, 0x7002, 0x700b, 0xc760, 0x012e,
++ 0x015e, 0x014e, 0x013e, 0x0005, 0x2099, 0x0014, 0x7803, 0x0040,
++ 0x2001, 0xc765, 0x2004, 0x2010, 0x080c, 0x72ad, 0x2009, 0xc699,
++ 0x2104, 0xa084, 0xfffc, 0x200a, 0x080c, 0x721f, 0x7007, 0x0000,
++ 0x080c, 0x1676, 0x0005, 0x00a6, 0x0096, 0x0086, 0x6b2e, 0x6c2a,
++ 0x6858, 0xa055, 0x0904, 0x24ac, 0x2d60, 0x6034, 0xa0cc, 0x000f,
++ 0xa9c0, 0x23c7, 0xa986, 0x0007, 0x0130, 0xa986, 0x000e, 0x0118,
++ 0xa986, 0x000f, 0x1120, 0x605c, 0xa422, 0x6060, 0xa31b, 0x2805,
++ 0xa045, 0x1140, 0x0310, 0x0804, 0x24ac, 0x6004, 0xa065, 0x0904,
++ 0x24ac, 0x0c18, 0x2805, 0xa005, 0x01a8, 0xac68, 0xd99c, 0x1128,
++ 0x6808, 0xa422, 0x680c, 0xa31b, 0x0020, 0x6810, 0xa422, 0x6814,
++ 0xa31b, 0x0620, 0x2300, 0xa405, 0x0150, 0x8a51, 0x0904, 0x24ac,
++ 0x8840, 0x0c40, 0x6004, 0xa065, 0x0904, 0x24ac, 0x0830, 0x8a51,
++ 0x0904, 0x24ac, 0x8840, 0x2805, 0xa005, 0x1158, 0x6004, 0xa065,
++ 0x0904, 0x24ac, 0x6034, 0xa0cc, 0x000f, 0xa9c0, 0x23c7, 0x2805,
++ 0x2040, 0x2b68, 0x6850, 0xc0fc, 0x6852, 0x0458, 0x8422, 0x8420,
++ 0x831a, 0xa399, 0x0000, 0x00d6, 0x2b68, 0x6c6e, 0x6b72, 0x00de,
++ 0xd99c, 0x1168, 0x6908, 0x2400, 0xa122, 0x690c, 0x2300, 0xa11b,
++ 0x0a0c, 0x1519, 0x6800, 0xa420, 0x6804, 0xa319, 0x0060, 0x6910,
++ 0x2400, 0xa122, 0x6914, 0x2300, 0xa11b, 0x0a0c, 0x1519, 0x6800,
++ 0xa420, 0x6804, 0xa319, 0x2b68, 0x6c1e, 0x6b22, 0x6850, 0xc0fd,
++ 0x6852, 0x2c00, 0x681a, 0x2800, 0x6832, 0x2a00, 0x6826, 0x000e,
++ 0x000e, 0x000e, 0xa006, 0x0028, 0x008e, 0x009e, 0x00ae, 0xa085,
++ 0x0001, 0x0005, 0x2001, 0x0005, 0x2004, 0xa084, 0x0007, 0x0002,
++ 0x24c0, 0x24c1, 0x24c4, 0x24c7, 0x24cc, 0x24cf, 0x24d4, 0x24d9,
++ 0x0005, 0x080c, 0x222c, 0x0005, 0x080c, 0x1b83, 0x0005, 0x080c,
++ 0x1b83, 0x080c, 0x222c, 0x0005, 0x080c, 0x1729, 0x0005, 0x080c,
++ 0x222c, 0x080c, 0x1729, 0x0005, 0x080c, 0x1b83, 0x080c, 0x1729,
++ 0x0005, 0x080c, 0x1b83, 0x080c, 0x222c, 0x080c, 0x1729, 0x0005,
++ 0x0006, 0x0016, 0x0156, 0x20a9, 0x0009, 0x2009, 0xc977, 0x2104,
++ 0xac06, 0x1108, 0x200a, 0xa188, 0x0003, 0x1f04, 0x24e7, 0x015e,
++ 0x001e, 0x000e, 0x0005, 0x00e6, 0x00d6, 0x2071, 0xc96a, 0x700c,
++ 0x7110, 0xa106, 0x01b8, 0x2104, 0xa005, 0x0138, 0xa080, 0x0004,
++ 0x2004, 0x2068, 0x080c, 0x7684, 0x0158, 0xa188, 0x0003, 0xa182,
++ 0xc992, 0x0210, 0x2009, 0xc977, 0x700c, 0xa106, 0x1d60, 0x0010,
++ 0xa085, 0x0001, 0x00de, 0x00ee, 0x0005, 0x0126, 0x2091, 0x2600,
++ 0x2079, 0x0200, 0x2071, 0xcc80, 0x2069, 0xc600, 0x080c, 0x260b,
++ 0x080c, 0x25fb, 0x2009, 0x0004, 0x7912, 0x7817, 0x0004, 0x080c,
++ 0x29a2, 0x781b, 0x0002, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x20a9,
++ 0x0080, 0x782f, 0x0000, 0x1f04, 0x2531, 0x20e1, 0x9080, 0x783b,
++ 0x001f, 0x20e1, 0x8700, 0x012e, 0x0005, 0x0126, 0x2091, 0x2600,
++ 0x781c, 0xd0a4, 0x190c, 0x25f8, 0xa084, 0x0007, 0x0002, 0x2561,
++ 0x254f, 0x2552, 0x2555, 0x255a, 0x255c, 0x255e, 0x2560, 0x080c,
++ 0x68c9, 0x0078, 0x080c, 0x6916, 0x0060, 0x080c, 0x68c9, 0x080c,
++ 0x6916, 0x0038, 0x0041, 0x0028, 0x0031, 0x0018, 0x0021, 0x0008,
++ 0x0011, 0x012e, 0x0005, 0x0006, 0x0016, 0x0026, 0x080c, 0xc5a7,
++ 0x7930, 0xa184, 0x0003, 0x01b0, 0x2001, 0xc936, 0x2004, 0xa005,
++ 0x0170, 0x2001, 0x0133, 0x2004, 0xa005, 0x090c, 0x1519, 0x00c6,
++ 0x2001, 0xc936, 0x2064, 0x080c, 0xa961, 0x00ce, 0x04b8, 0x20e1,
++ 0x9040, 0x04a0, 0xa184, 0x0030, 0x01e0, 0x6a00, 0xa286, 0x0003,
++ 0x1108, 0x00a0, 0x080c, 0x5f22, 0x1178, 0x2001, 0xc8e6, 0x2003,
++ 0x0001, 0x2001, 0xc600, 0x2003, 0x0001, 0xa085, 0x0001, 0x080c,
++ 0x5f66, 0x080c, 0x5e5a, 0x0010, 0x080c, 0x4e5b, 0x080c, 0x25fb,
++ 0x00a8, 0xa184, 0x00c0, 0x0168, 0x00e6, 0x0036, 0x0046, 0x0056,
++ 0x2071, 0xc96a, 0x080c, 0x1ec3, 0x005e, 0x004e, 0x003e, 0x00ee,
++ 0x0028, 0xa184, 0x0300, 0x0110, 0x20e1, 0x9020, 0x7932, 0x002e,
++ 0x001e, 0x000e, 0x0005, 0x0016, 0x00e6, 0x00f6, 0x2071, 0xc600,
++ 0x7128, 0x2001, 0xc8d8, 0x2102, 0x2001, 0xc8e0, 0x2102, 0xa182,
++ 0x0211, 0x1218, 0x2009, 0x0008, 0x0400, 0xa182, 0x0259, 0x1218,
++ 0x2009, 0x0007, 0x00d0, 0xa182, 0x02c1, 0x1218, 0x2009, 0x0006,
++ 0x00a0, 0xa182, 0x0349, 0x1218, 0x2009, 0x0005, 0x0070, 0xa182,
++ 0x0421, 0x1218, 0x2009, 0x0004, 0x0040, 0xa182, 0x0581, 0x1218,
++ 0x2009, 0x0003, 0x0010, 0x2009, 0x0002, 0x2079, 0x0200, 0x7912,
++ 0x7817, 0x0004, 0x080c, 0x29a2, 0x00fe, 0x00ee, 0x001e, 0x0005,
++ 0x7938, 0x080c, 0x1519, 0x00e6, 0x0026, 0x2071, 0x0200, 0x20e1,
++ 0x1000, 0x7220, 0x7028, 0x7020, 0xa206, 0x0de0, 0x20e1, 0x9010,
++ 0x002e, 0x00ee, 0x0005, 0x20e1, 0xa000, 0x7837, 0x0001, 0x782f,
++ 0x0000, 0x782f, 0x0000, 0x782f, 0x0000, 0x782f, 0x0000, 0x7837,
++ 0x0005, 0x20a9, 0x0210, 0x7830, 0xd0bc, 0x1110, 0x1f04, 0x261b,
++ 0x7837, 0x0001, 0x7837, 0x0000, 0xe000, 0xe000, 0x20e1, 0xa000,
++ 0x0005, 0x0126, 0x2091, 0x2800, 0x2061, 0x0100, 0x2071, 0xc600,
++ 0x6024, 0x6026, 0x6053, 0x0030, 0x080c, 0x29e1, 0x6050, 0xa084,
++ 0xfe7f, 0x6052, 0x2009, 0x00ef, 0x6132, 0x6136, 0x080c, 0x29f1,
++ 0x60e7, 0x0000, 0x61ea, 0x60e3, 0x0008, 0x604b, 0xf7f7, 0x6043,
++ 0x0000, 0x602f, 0x0080, 0x602f, 0x0000, 0x6007, 0x0e9f, 0x601b,
++ 0x001e, 0x600f, 0x00ff, 0x2001, 0xc8d4, 0x2003, 0x00ff, 0x602b,
++ 0x002f, 0x012e, 0x0005, 0x2001, 0xc632, 0x2003, 0x0000, 0x2001,
++ 0xc631, 0x2003, 0x0001, 0x0005, 0x0126, 0x2091, 0x2800, 0x0006,
++ 0x0016, 0x0026, 0x6124, 0x0066, 0x2031, 0xc635, 0x2634, 0xa6b4,
++ 0x0028, 0x006e, 0x11c0, 0x6020, 0xd0bc, 0x01a8, 0xd1bc, 0x0198,
++ 0x783c, 0xa005, 0x0180, 0x00e6, 0x0006, 0x2070, 0x701c, 0xa086,
++ 0x0009, 0x000e, 0x00ee, 0x1138, 0x00e6, 0x783c, 0x2070, 0x7008,
++ 0xd0fc, 0x00ee, 0x1130, 0xa184, 0x1e2c, 0x1118, 0xa184, 0x0007,
++ 0x002a, 0xa195, 0x0004, 0xa284, 0x0007, 0x0002, 0x26b8, 0x269e,
++ 0x26a1, 0x26a4, 0x26a9, 0x26ab, 0x26af, 0x26b3, 0x080c, 0x7873,
++ 0x00b8, 0x080c, 0x794e, 0x00a0, 0x080c, 0x794e, 0x080c, 0x7873,
++ 0x0078, 0x0099, 0x0068, 0x080c, 0x7873, 0x0079, 0x0048, 0x080c,
++ 0x794e, 0x0059, 0x0028, 0x080c, 0x794e, 0x080c, 0x7873, 0x0029,
++ 0x002e, 0x001e, 0x000e, 0x012e, 0x0005, 0x6124, 0x6028, 0xd09c,
++ 0x0118, 0xd19c, 0x1904, 0x2910, 0x080c, 0x5f22, 0x0578, 0x7000,
++ 0xa086, 0x0003, 0x0198, 0x6024, 0xa084, 0x1800, 0x0178, 0x080c,
++ 0x5f48, 0x0118, 0x080c, 0x5f34, 0x1148, 0x6027, 0x0020, 0x6043,
++ 0x0000, 0x2001, 0xc8e5, 0x2003, 0xaaaa, 0x0458, 0x080c, 0x5f48,
++ 0x15d0, 0x6024, 0xa084, 0x1800, 0x1108, 0x04a8, 0x2001, 0xc8e5,
++ 0x2003, 0xaaaa, 0x2001, 0xc8e6, 0x2003, 0x0001, 0x2001, 0xc600,
++ 0x2003, 0x0001, 0x080c, 0x5e5a, 0x0804, 0x2910, 0xd1ac, 0x1518,
++ 0x6024, 0xd0dc, 0x1170, 0xd0e4, 0x1188, 0xd0d4, 0x11a0, 0xd0cc,
++ 0x0130, 0x708c, 0xa086, 0x0028, 0x1110, 0x080c, 0x60b1, 0x0804,
++ 0x2910, 0x2001, 0xc8e6, 0x2003, 0x0000, 0x0048, 0x2001, 0xc8e6,
++ 0x2003, 0x0002, 0x0020, 0x080c, 0x6024, 0x0804, 0x2910, 0x080c,
++ 0x6156, 0x0804, 0x2910, 0x6220, 0xd1bc, 0x0568, 0xd2bc, 0x0558,
++ 0x783c, 0xa005, 0x0540, 0x00e6, 0x2070, 0x7008, 0xd0fc, 0x00ee,
++ 0x0510, 0x6028, 0xc0bc, 0x602a, 0x0026, 0x0036, 0x6288, 0x638c,
++ 0x608b, 0xbc91, 0x608f, 0xffff, 0x6043, 0x0001, 0xe000, 0xe000,
++ 0x6027, 0x0080, 0x6017, 0x0000, 0x6043, 0x0000, 0x628a, 0x638e,
++ 0x003e, 0x002e, 0x0016, 0x2001, 0xc696, 0x200c, 0xc184, 0x2102,
++ 0x001e, 0x0804, 0x2969, 0xd1ac, 0x0904, 0x284c, 0x0036, 0x6328,
++ 0xc3bc, 0x632a, 0x003e, 0x080c, 0x5f22, 0x11d8, 0x6027, 0x0020,
++ 0x0006, 0x0026, 0x0036, 0x080c, 0x5f3e, 0x1170, 0x2001, 0xc8e6,
++ 0x2003, 0x0001, 0x2001, 0xc600, 0x2003, 0x0001, 0x080c, 0x5e5a,
++ 0x003e, 0x002e, 0x000e, 0x0005, 0x003e, 0x002e, 0x000e, 0x080c,
++ 0x5ef9, 0x0016, 0x0046, 0x00c6, 0x644c, 0xa486, 0xf0f0, 0x1138,
++ 0x2061, 0x0100, 0x644a, 0x6043, 0x0090, 0x6043, 0x0010, 0x74ce,
++ 0xa48c, 0xff00, 0x7034, 0xd084, 0x0178, 0xa186, 0xf800, 0x1160,
++ 0x703c, 0xd084, 0x1148, 0xc085, 0x703e, 0x0036, 0x2418, 0x2011,
++ 0x8016, 0x080c, 0x407d, 0x003e, 0xa196, 0xff00, 0x05b8, 0x7054,
++ 0xa084, 0x00ff, 0x810f, 0xa116, 0x0588, 0x7130, 0xd184, 0x1570,
++ 0x2011, 0xc653, 0x2214, 0xd2ec, 0x0138, 0xc18d, 0x7132, 0x2011,
++ 0xc653, 0x2214, 0xd2ac, 0x1510, 0x6240, 0xa294, 0x0010, 0x0130,
++ 0x6248, 0xa294, 0xff00, 0xa296, 0xff00, 0x01c0, 0x7030, 0xd08c,
++ 0x0904, 0x2819, 0x7034, 0xd08c, 0x1140, 0x2001, 0xc60c, 0x200c,
++ 0xd1ac, 0x1904, 0x2819, 0xc1ad, 0x2102, 0x0036, 0x73cc, 0x2011,
++ 0x8013, 0x080c, 0x407d, 0x003e, 0x0804, 0x2819, 0x7034, 0xd08c,
++ 0x1140, 0x2001, 0xc60c, 0x200c, 0xd1ac, 0x1904, 0x2819, 0xc1ad,
++ 0x2102, 0x0036, 0x73cc, 0x2011, 0x8013, 0x080c, 0x407d, 0x003e,
++ 0x7130, 0xc185, 0x7132, 0x2011, 0xc653, 0x220c, 0xd1a4, 0x01d0,
++ 0x0016, 0x2009, 0x0001, 0x2011, 0x0100, 0x080c, 0x712e, 0x2019,
++ 0x000e, 0x080c, 0xc10d, 0xa484, 0x00ff, 0xa080, 0x2f6e, 0x200d,
++ 0xa18c, 0xff00, 0x810f, 0x8127, 0xa006, 0x2009, 0x000e, 0x080c,
++ 0xc190, 0x001e, 0x0016, 0x2009, 0x0000, 0x2019, 0x0004, 0x080c,
++ 0x2e19, 0x001e, 0x0070, 0x0156, 0x20a9, 0x007f, 0x2009, 0x0000,
++ 0x080c, 0x533d, 0x1110, 0x080c, 0x4f47, 0x8108, 0x1f04, 0x2810,
++ 0x015e, 0x00ce, 0x004e, 0x2011, 0x0003, 0x080c, 0x8f0e, 0x2011,
++ 0x0002, 0x080c, 0x8f18, 0x080c, 0x8dee, 0x0036, 0x2019, 0x0000,
++ 0x080c, 0x8e79, 0x003e, 0x60e3, 0x0000, 0x001e, 0x2001, 0xc600,
++ 0x2014, 0xa296, 0x0004, 0x1128, 0xd19c, 0x11b0, 0x6228, 0xc29d,
++ 0x622a, 0x2003, 0x0001, 0x2001, 0xc623, 0x2003, 0x0000, 0x6027,
++ 0x0020, 0x080c, 0x5f48, 0x1140, 0x0016, 0x2009, 0x07d0, 0x2011,
++ 0x5e37, 0x080c, 0x7036, 0x001e, 0xd194, 0x0904, 0x2910, 0x0016,
++ 0x6220, 0xd2b4, 0x0904, 0x28b5, 0x080c, 0x7024, 0x080c, 0x8bf5,
++ 0x6027, 0x0004, 0x00f6, 0x2019, 0xc930, 0x2304, 0xa07d, 0x0570,
++ 0x7804, 0xa086, 0x0032, 0x1550, 0x00d6, 0x00c6, 0x00e6, 0x2069,
++ 0x0140, 0x618c, 0x6288, 0x7818, 0x608e, 0x7808, 0x608a, 0x6043,
++ 0x0002, 0x2001, 0x0003, 0x8001, 0x1df0, 0x6043, 0x0000, 0x6803,
++ 0x1000, 0x6803, 0x0000, 0x618e, 0x628a, 0x080c, 0x7db1, 0x080c,
++ 0x7e94, 0x7810, 0x2070, 0x7037, 0x0103, 0x2f60, 0x080c, 0x95e3,
++ 0x00ee, 0x00ce, 0x00de, 0x00fe, 0x001e, 0x0005, 0x00fe, 0x00d6,
++ 0x2069, 0x0140, 0x6804, 0xa084, 0x4000, 0x0120, 0x6803, 0x1000,
++ 0x6803, 0x0000, 0x00de, 0x00c6, 0x2061, 0xc927, 0x6028, 0xa09a,
++ 0x00c8, 0x1238, 0x8000, 0x602a, 0x00ce, 0x080c, 0x8be8, 0x0804,
++ 0x290f, 0x2019, 0xc930, 0x2304, 0xa065, 0x0120, 0x2009, 0x0027,
++ 0x080c, 0x9613, 0x00ce, 0x0804, 0x290f, 0xd2bc, 0x0904, 0x290f,
++ 0x080c, 0x7031, 0x6014, 0xa084, 0x0184, 0xa085, 0x0010, 0x6016,
++ 0x6027, 0x0004, 0x00d6, 0x2069, 0x0140, 0x6804, 0xa084, 0x4000,
++ 0x0120, 0x6803, 0x1000, 0x6803, 0x0000, 0x00de, 0x00c6, 0x2061,
++ 0xc927, 0x6044, 0xa09a, 0x00c8, 0x1620, 0x8000, 0x6046, 0x603c,
++ 0x00ce, 0xa005, 0x05a0, 0x2009, 0x07d0, 0x080c, 0x7029, 0xa080,
++ 0x0007, 0x2004, 0xa086, 0x0006, 0x1138, 0x6114, 0xa18c, 0x0184,
++ 0xa18d, 0x0012, 0x6116, 0x0418, 0xa080, 0x0007, 0x2004, 0xa086,
++ 0x0009, 0x0d98, 0x6114, 0xa18c, 0x0184, 0xa18d, 0x0016, 0x6116,
++ 0x00b0, 0x0036, 0x2019, 0x0001, 0x080c, 0x8e79, 0x003e, 0x2019,
++ 0xc936, 0x2304, 0xa065, 0x0150, 0x2009, 0x004f, 0x601c, 0xa086,
++ 0x0009, 0x1110, 0x2009, 0x0105, 0x080c, 0x9613, 0x00ce, 0x001e,
++ 0xd19c, 0x0904, 0x2969, 0x7034, 0xd0ac, 0x1560, 0x0016, 0x0156,
++ 0x6027, 0x0008, 0x602f, 0x0020, 0x20a9, 0x0006, 0x1d04, 0x291e,
++ 0x2091, 0x6000, 0x1f04, 0x291e, 0x602f, 0x0000, 0x6150, 0xa185,
++ 0x1400, 0x6052, 0x20a9, 0x0366, 0x1d04, 0x292c, 0x2091, 0x6000,
++ 0x6020, 0xd09c, 0x1130, 0x015e, 0x6152, 0x001e, 0x6027, 0x0008,
++ 0x0480, 0x080c, 0x2ab1, 0x1f04, 0x292c, 0x015e, 0x6152, 0x001e,
++ 0x6027, 0x0008, 0x0016, 0x6028, 0xc09c, 0x602a, 0x2011, 0x0003,
++ 0x080c, 0x8f0e, 0x2011, 0x0002, 0x080c, 0x8f18, 0x080c, 0x8dee,
++ 0x0036, 0x2019, 0x0000, 0x080c, 0x8e79, 0x003e, 0x60e3, 0x0000,
++ 0x080c, 0xc586, 0x080c, 0xc5a1, 0xa085, 0x0001, 0x080c, 0x5f66,
++ 0x2001, 0xc600, 0x2003, 0x0004, 0x6027, 0x0008, 0x080c, 0x12e1,
++ 0x001e, 0xa18c, 0xffd0, 0x6126, 0x0005, 0x0006, 0x0016, 0x0026,
++ 0x00e6, 0x00f6, 0x0126, 0x2091, 0x8000, 0x2071, 0xc600, 0x71c4,
++ 0x70c6, 0xa116, 0x0500, 0x81ff, 0x0128, 0x2011, 0x8011, 0x080c,
++ 0x407d, 0x00c8, 0x2011, 0x8012, 0x080c, 0x407d, 0x2001, 0xc672,
++ 0x2004, 0xd0fc, 0x1180, 0x0036, 0x00c6, 0x080c, 0x2a3c, 0x080c,
++ 0x8dca, 0x2061, 0x0100, 0x2019, 0x0028, 0x2009, 0x0000, 0x080c,
++ 0x2e19, 0x00ce, 0x003e, 0x012e, 0x00fe, 0x00ee, 0x002e, 0x001e,
++ 0x000e, 0x0005, 0x00c6, 0x00f6, 0x0006, 0x0026, 0x2061, 0x0100,
++ 0xa190, 0x29b5, 0x2205, 0x60f2, 0x2011, 0x29c2, 0x2205, 0x60ee,
++ 0x002e, 0x000e, 0x00fe, 0x00ce, 0x0005, 0x0840, 0x0840, 0x0840,
++ 0x0580, 0x0420, 0x0348, 0x02c0, 0x0258, 0x0210, 0x01a8, 0x01a8,
++ 0x01a8, 0x01a8, 0x0140, 0x00f8, 0x00d0, 0x00b0, 0x00a0, 0x2028,
++ 0xa18c, 0x00ff, 0x2130, 0xa094, 0xff00, 0x1110, 0x81ff, 0x0118,
++ 0x080c, 0x6be0, 0x0038, 0xa080, 0x2f6e, 0x200d, 0xa18c, 0xff00,
++ 0x810f, 0xa006, 0x0005, 0xa080, 0x2f6e, 0x200d, 0xa18c, 0x00ff,
++ 0x0005, 0x00d6, 0x2069, 0x0140, 0x2001, 0xc615, 0x2003, 0x00ef,
++ 0x20a9, 0x0010, 0xa006, 0x6852, 0x6856, 0x1f04, 0x29ec, 0x00de,
++ 0x0005, 0x0006, 0x00d6, 0x0026, 0x2069, 0x0140, 0x2001, 0xc615,
++ 0x2102, 0x8114, 0x8214, 0x8214, 0x8214, 0x20a9, 0x0010, 0x6853,
++ 0x0000, 0xa006, 0x82ff, 0x1128, 0xa184, 0x000f, 0xa080, 0xc5b5,
++ 0x2005, 0x6856, 0x8211, 0x1f04, 0x2a01, 0x002e, 0x00de, 0x000e,
++ 0x0005, 0x00c6, 0x2061, 0xc600, 0x6030, 0x0110, 0xc09d, 0x0008,
++ 0xc09c, 0x6032, 0x00ce, 0x0005, 0x0156, 0x00d6, 0x0026, 0x0016,
++ 0x0006, 0x2069, 0x0140, 0x6980, 0xa116, 0x0180, 0xa112, 0x1230,
++ 0x8212, 0x8210, 0x22a8, 0x2001, 0x0402, 0x0018, 0x22a8, 0x2001,
++ 0x0404, 0x680e, 0x1f04, 0x2a31, 0x680f, 0x0000, 0x000e, 0x001e,
++ 0x002e, 0x00de, 0x015e, 0x0005, 0x2001, 0xc653, 0x2004, 0xd0c4,
++ 0x0150, 0xd0a4, 0x0140, 0xa006, 0x0046, 0x2020, 0x2009, 0x002e,
++ 0x080c, 0xc190, 0x004e, 0x0005, 0x00f6, 0x0016, 0x0026, 0x2079,
++ 0x0140, 0x78c4, 0xd0dc, 0x0548, 0xa084, 0x0700, 0xa08e, 0x0300,
++ 0x1520, 0x2011, 0x0000, 0x2009, 0x0002, 0x2300, 0xa080, 0x0020,
++ 0x2018, 0x2300, 0x080c, 0x783f, 0x2011, 0x0030, 0x2200, 0x8007,
++ 0xa085, 0x004c, 0x78c2, 0x2009, 0x0204, 0x210c, 0x2200, 0xa100,
++ 0x2009, 0x0138, 0x200a, 0x080c, 0x5f22, 0x1118, 0x2009, 0xc8d6,
++ 0x200a, 0x002e, 0x001e, 0x00fe, 0x0005, 0x78c3, 0x0000, 0x0cc8,
++ 0x0126, 0x2091, 0x2800, 0x0006, 0x0016, 0x0026, 0x2001, 0x0170,
++ 0x200c, 0x8000, 0x2014, 0xa184, 0x0003, 0x0110, 0x0804, 0x1b81,
++ 0x002e, 0x001e, 0x000e, 0x012e, 0x0005, 0x0006, 0x2001, 0x0100,
++ 0x2004, 0xa082, 0x0005, 0x000e, 0x0268, 0x2001, 0x0170, 0x200c,
++ 0xa18c, 0x00ff, 0xa18e, 0x004c, 0x1128, 0x200c, 0xa18c, 0xff00,
++ 0x810f, 0x0010, 0x2009, 0x0000, 0x2001, 0x0204, 0x2004, 0xa108,
++ 0x0005, 0x0006, 0x0156, 0x00f6, 0x2079, 0x0100, 0x20a9, 0x000a,
++ 0x7854, 0xd08c, 0x1110, 0x1f04, 0x2ab8, 0x00fe, 0x015e, 0x000e,
++ 0x0005, 0x0016, 0x00c6, 0x0006, 0x2061, 0x0100, 0x6030, 0x0006,
++ 0x6048, 0x0006, 0x60e4, 0x0006, 0x60e8, 0x0006, 0x6050, 0x0006,
++ 0x60f0, 0x0006, 0x60ec, 0x0006, 0x600c, 0x0006, 0x6004, 0x0006,
++ 0x6028, 0x0006, 0x60e0, 0x0006, 0x602f, 0x0100, 0x602f, 0x0000,
++ 0xe000, 0xe000, 0xe000, 0xe000, 0x602f, 0x0040, 0x602f, 0x0000,
++ 0x000e, 0x60e2, 0x000e, 0x602a, 0x000e, 0x6006, 0x000e, 0x600e,
++ 0x000e, 0x60ee, 0x000e, 0x60f2, 0x000e, 0x6052, 0x000e, 0x60ea,
++ 0x000e, 0x60e6, 0x000e, 0x604a, 0x000e, 0x6032, 0x6036, 0x2008,
++ 0x080c, 0x29f1, 0x000e, 0x00ce, 0x001e, 0x0005, 0x2009, 0x0171,
++ 0x2104, 0xd0dc, 0x0140, 0x2009, 0x0170, 0x2104, 0x200b, 0x0080,
++ 0xe000, 0xe000, 0x200a, 0x0005, 0x2ba4, 0x2ba8, 0x2bac, 0x2bb2,
++ 0x2bb8, 0x2bbe, 0x2bc4, 0x2bcc, 0x2bd4, 0x2bda, 0x2be0, 0x2be8,
++ 0x2bf0, 0x2bf8, 0x2c00, 0x2c0a, 0x2c57, 0x2c57, 0x2c57, 0x2c57,
++ 0x2c57, 0x2c57, 0x2c57, 0x2c57, 0x2c57, 0x2c57, 0x2c57, 0x2c57,
++ 0x2c57, 0x2c57, 0x2c57, 0x2c57, 0x2c14, 0x2c14, 0x2c14, 0x2c14,
++ 0x2c14, 0x2c14, 0x2c14, 0x2c14, 0x2c14, 0x2c14, 0x2c14, 0x2c14,
++ 0x2c14, 0x2c14, 0x2c14, 0x2c14, 0x2c57, 0x2c57, 0x2c57, 0x2c57,
++ 0x2c57, 0x2c57, 0x2c57, 0x2c57, 0x2c57, 0x2c57, 0x2c57, 0x2c57,
++ 0x2c57, 0x2c57, 0x2c57, 0x2c57, 0x2c16, 0x2c16, 0x2c1c, 0x2c1c,
++ 0x2c23, 0x2c23, 0x2c2a, 0x2c2a, 0x2c33, 0x2c33, 0x2c3a, 0x2c3a,
++ 0x2c43, 0x2c43, 0x2c4c, 0x2c4c, 0x2c57, 0x2c57, 0x2c57, 0x2c57,
++ 0x2c57, 0x2c57, 0x2c57, 0x2c57, 0x2c57, 0x2c57, 0x2c57, 0x2c57,
++ 0x2c57, 0x2c57, 0x2c57, 0x2c57, 0x2c14, 0x2c14, 0x2c14, 0x2c14,
++ 0x2c14, 0x2c14, 0x2c14, 0x2c14, 0x2c14, 0x2c14, 0x2c14, 0x2c14,
++ 0x2c14, 0x2c14, 0x2c14, 0x2c14, 0x2c57, 0x2c57, 0x2c57, 0x2c57,
++ 0x2c57, 0x2c57, 0x2c57, 0x2c57, 0x2c57, 0x2c57, 0x2c57, 0x2c57,
++ 0x2c57, 0x2c57, 0x2c57, 0x2c57, 0x2c14, 0x2c14, 0x2c14, 0x2c14,
++ 0x2c14, 0x2c14, 0x2c14, 0x2c14, 0x2c14, 0x2c14, 0x2c14, 0x2c14,
++ 0x2c14, 0x2c14, 0x2c14, 0x2c14, 0x0106, 0x0006, 0x0804, 0x2c5f,
++ 0x0106, 0x0006, 0x0804, 0x2c5f, 0x0106, 0x0006, 0x080c, 0x2664,
++ 0x0804, 0x2c5f, 0x0106, 0x0006, 0x080c, 0x2664, 0x0804, 0x2c5f,
++ 0x0106, 0x0006, 0x080c, 0x24b2, 0x0804, 0x2c5f, 0x0106, 0x0006,
++ 0x080c, 0x24b2, 0x0804, 0x2c5f, 0x0106, 0x0006, 0x080c, 0x2664,
++ 0x080c, 0x24b2, 0x0804, 0x2c5f, 0x0106, 0x0006, 0x080c, 0x2664,
++ 0x080c, 0x24b2, 0x0804, 0x2c5f, 0x0106, 0x0006, 0x080c, 0x253d,
++ 0x0804, 0x2c5f, 0x0106, 0x0006, 0x080c, 0x253d, 0x0804, 0x2c5f,
++ 0x0106, 0x0006, 0x080c, 0x2664, 0x080c, 0x253d, 0x0804, 0x2c5f,
++ 0x0106, 0x0006, 0x080c, 0x2664, 0x080c, 0x253d, 0x0804, 0x2c5f,
++ 0x0106, 0x0006, 0x080c, 0x24b2, 0x080c, 0x253d, 0x0804, 0x2c5f,
++ 0x0106, 0x0006, 0x080c, 0x24b2, 0x080c, 0x253d, 0x0804, 0x2c5f,
++ 0x0106, 0x0006, 0x080c, 0x2664, 0x080c, 0x24b2, 0x080c, 0x253d,
++ 0x0804, 0x2c5f, 0x0106, 0x0006, 0x080c, 0x2664, 0x080c, 0x24b2,
++ 0x080c, 0x253d, 0x0804, 0x2c5f, 0xe000, 0x0cf0, 0x0106, 0x0006,
++ 0x080c, 0x2a80, 0x0804, 0x2c5f, 0x0106, 0x0006, 0x080c, 0x2a80,
++ 0x080c, 0x2664, 0x04e0, 0x0106, 0x0006, 0x080c, 0x2a80, 0x080c,
++ 0x24b2, 0x04a8, 0x0106, 0x0006, 0x080c, 0x2a80, 0x080c, 0x2664,
++ 0x080c, 0x24b2, 0x0460, 0x0106, 0x0006, 0x080c, 0x2a80, 0x080c,
++ 0x253d, 0x0428, 0x0106, 0x0006, 0x080c, 0x2a80, 0x080c, 0x2664,
++ 0x080c, 0x253d, 0x00e0, 0x0106, 0x0006, 0x080c, 0x2a80, 0x080c,
++ 0x24b2, 0x080c, 0x253d, 0x0098, 0x0106, 0x0006, 0x080c, 0x2a80,
++ 0x080c, 0x2664, 0x080c, 0x24b2, 0x080c, 0x253d, 0x0040, 0x20d1,
++ 0x0000, 0x20d1, 0x0001, 0x20d1, 0x0000, 0x080c, 0x1519, 0x000e,
++ 0x010e, 0x000d, 0x00c6, 0x0026, 0x0046, 0x2021, 0x0000, 0x080c,
++ 0x570b, 0x1904, 0x2d3f, 0x72d4, 0x2001, 0xc8e5, 0x2004, 0xa005,
++ 0x1110, 0xd29c, 0x0148, 0xd284, 0x1138, 0xd2bc, 0x1904, 0x2d3f,
++ 0x080c, 0x2d43, 0x0804, 0x2d3f, 0xd2cc, 0x1904, 0x2d3f, 0x080c,
++ 0x5f22, 0x1120, 0x709f, 0xffff, 0x0804, 0x2d3f, 0xd294, 0x0120,
++ 0x709f, 0xffff, 0x0804, 0x2d3f, 0x2001, 0xc615, 0x203c, 0x7288,
++ 0xd284, 0x0904, 0x2ce1, 0xd28c, 0x1904, 0x2ce1, 0x0036, 0x739c,
++ 0xa38e, 0xffff, 0x1110, 0x2019, 0x0001, 0x8314, 0xa2e0, 0xcdc0,
++ 0x2c04, 0xa38c, 0x0001, 0x0120, 0xa084, 0xff00, 0x8007, 0x0010,
++ 0xa084, 0x00ff, 0xa70e, 0x0560, 0xa08e, 0x0000, 0x0548, 0xa08e,
++ 0x00ff, 0x1150, 0x7230, 0xd284, 0x1538, 0x7288, 0xc28d, 0x728a,
++ 0x709f, 0xffff, 0x003e, 0x0428, 0x2009, 0x0000, 0x080c, 0x29c7,
++ 0x080c, 0x52e1, 0x11b8, 0x6004, 0xa084, 0x00ff, 0xa086, 0x0006,
++ 0x1150, 0x7030, 0xd08c, 0x0118, 0x6000, 0xd0bc, 0x0120, 0x080c,
++ 0x2d56, 0x0140, 0x0028, 0x080c, 0x2e87, 0x080c, 0x2d84, 0x0110,
++ 0x8318, 0x0818, 0x739e, 0x0010, 0x709f, 0xffff, 0x003e, 0x0804,
++ 0x2d3f, 0xa780, 0x2f6e, 0x203d, 0xa7bc, 0xff00, 0x873f, 0x2041,
++ 0x007e, 0x709c, 0xa096, 0xffff, 0x1120, 0x2009, 0x0000, 0x28a8,
++ 0x0050, 0xa812, 0x0220, 0x2008, 0xa802, 0x20a8, 0x0020, 0x709f,
++ 0xffff, 0x0804, 0x2d3f, 0x2700, 0x0156, 0x0016, 0xa106, 0x05a0,
++ 0xc484, 0x080c, 0x533d, 0x0120, 0x080c, 0x52e1, 0x15a8, 0x0008,
++ 0xc485, 0x6004, 0xa084, 0x00ff, 0xa086, 0x0006, 0x1130, 0x7030,
++ 0xd08c, 0x01e8, 0x6000, 0xd0bc, 0x11d0, 0x7288, 0xd28c, 0x0188,
++ 0x6004, 0xa084, 0x00ff, 0xa082, 0x0006, 0x02b0, 0xd484, 0x1118,
++ 0x080c, 0x5300, 0x0028, 0x080c, 0x2f14, 0x0170, 0x080c, 0x2f41,
++ 0x0058, 0x080c, 0x2e87, 0x080c, 0x2d84, 0x0170, 0x0028, 0x080c,
++ 0x2f14, 0x0110, 0x0419, 0x0140, 0x001e, 0x8108, 0x015e, 0x1f04,
++ 0x2cfb, 0x709f, 0xffff, 0x0018, 0x001e, 0x015e, 0x719e, 0x004e,
++ 0x002e, 0x00ce, 0x0005, 0x00c6, 0x0016, 0x709f, 0x0001, 0x2009,
++ 0x007e, 0x080c, 0x52e1, 0x1138, 0x080c, 0x2e87, 0x04a9, 0x0118,
++ 0x70d4, 0xc0bd, 0x70d6, 0x001e, 0x00ce, 0x0005, 0x0016, 0x0076,
++ 0x00d6, 0x00c6, 0x2c68, 0x2001, 0xc657, 0x2004, 0xa084, 0x00ff,
++ 0x6842, 0x080c, 0xaf0d, 0x01d8, 0x2d00, 0x601a, 0x080c, 0xb05e,
++ 0x601f, 0x0001, 0x2001, 0x0000, 0x080c, 0x527f, 0x2001, 0x0000,
++ 0x080c, 0x5291, 0x0126, 0x2091, 0x8000, 0x7098, 0x8000, 0x709a,
++ 0x012e, 0x2009, 0x0004, 0x080c, 0x9613, 0xa085, 0x0001, 0x00ce,
++ 0x00de, 0x007e, 0x001e, 0x0005, 0x0016, 0x0076, 0x00d6, 0x00c6,
++ 0x2c68, 0x2001, 0xc657, 0x2004, 0xa084, 0x00ff, 0x6842, 0x080c,
++ 0xaf0d, 0x0550, 0x2d00, 0x601a, 0x6800, 0xc0c4, 0x6802, 0x68a0,
++ 0xa086, 0x007e, 0x0140, 0x6804, 0xa084, 0x00ff, 0xa086, 0x0006,
++ 0x1110, 0x080c, 0x2e46, 0x080c, 0xb05e, 0x601f, 0x0001, 0x2001,
++ 0x0000, 0x080c, 0x527f, 0x2001, 0x0002, 0x080c, 0x5291, 0x0126,
++ 0x2091, 0x8000, 0x7098, 0x8000, 0x709a, 0x012e, 0x2009, 0x0002,
++ 0x080c, 0x9613, 0xa085, 0x0001, 0x00ce, 0x00de, 0x007e, 0x001e,
++ 0x0005, 0x00c6, 0x0026, 0x2009, 0x0080, 0x080c, 0x52e1, 0x1120,
++ 0x0031, 0x0110, 0x70db, 0xffff, 0x002e, 0x00ce, 0x0005, 0x0016,
++ 0x0076, 0x00d6, 0x00c6, 0x2c68, 0x080c, 0x958d, 0x01e8, 0x2d00,
++ 0x601a, 0x080c, 0xb05e, 0x601f, 0x0001, 0x2001, 0x0000, 0x080c,
++ 0x527f, 0x2001, 0x0002, 0x080c, 0x5291, 0x0126, 0x2091, 0x8000,
++ 0x080c, 0x2e46, 0x70dc, 0x8000, 0x70de, 0x012e, 0x2009, 0x0002,
++ 0x080c, 0x9613, 0xa085, 0x0001, 0x00ce, 0x00de, 0x007e, 0x001e,
++ 0x0005, 0x00c6, 0x00d6, 0x0126, 0x2091, 0x8000, 0x2009, 0x007f,
++ 0x080c, 0x52e1, 0x1190, 0x2c68, 0x080c, 0x958d, 0x0170, 0x2d00,
++ 0x601a, 0x6312, 0x601f, 0x0001, 0x620a, 0x080c, 0xb05e, 0x2009,
++ 0x0022, 0x080c, 0x9613, 0xa085, 0x0001, 0x012e, 0x00de, 0x00ce,
++ 0x0005, 0x00e6, 0x00c6, 0x0066, 0x0036, 0x0026, 0x080c, 0x7b22,
++ 0x080c, 0x7abb, 0x080c, 0xa090, 0x2130, 0x81ff, 0x0128, 0x20a9,
++ 0x007e, 0x2009, 0x0000, 0x0020, 0x20a9, 0x007f, 0x2009, 0x0000,
++ 0x0016, 0x080c, 0x533d, 0x1120, 0x080c, 0x553e, 0x080c, 0x4f47,
++ 0x001e, 0x8108, 0x1f04, 0x2e30, 0x86ff, 0x1110, 0x080c, 0x11f4,
++ 0x002e, 0x003e, 0x006e, 0x00ce, 0x00ee, 0x0005, 0x00e6, 0x00c6,
++ 0x0036, 0x0026, 0x0016, 0x6218, 0x2270, 0x72a0, 0x0026, 0x2019,
++ 0x0029, 0x080c, 0x7b16, 0x0076, 0x2039, 0x0000, 0x080c, 0x7a0e,
++ 0x2c08, 0x080c, 0xbef7, 0x007e, 0x001e, 0x2e60, 0x080c, 0x553e,
++ 0x6210, 0x6314, 0x080c, 0x4f47, 0x6212, 0x6316, 0x001e, 0x002e,
++ 0x003e, 0x00ce, 0x00ee, 0x0005, 0x00e6, 0x0006, 0x6018, 0xa080,
++ 0x0028, 0x2004, 0xa086, 0x0080, 0x0150, 0x2071, 0xc600, 0x7098,
++ 0xa005, 0x0110, 0x8001, 0x709a, 0x000e, 0x00ee, 0x0005, 0x2071,
++ 0xc600, 0x70dc, 0xa005, 0x0dc0, 0x8001, 0x70de, 0x0ca8, 0x6000,
++ 0xc08c, 0x6002, 0x0005, 0x00f6, 0x00e6, 0x00c6, 0x0036, 0x0026,
++ 0x0016, 0x0156, 0x2178, 0x81ff, 0x1118, 0x20a9, 0x0001, 0x0098,
++ 0x2001, 0xc653, 0x2004, 0xd0c4, 0x0150, 0xd0a4, 0x0140, 0xa006,
++ 0x0046, 0x2020, 0x2009, 0x002d, 0x080c, 0xc190, 0x004e, 0x20a9,
++ 0x00ff, 0x2011, 0x0000, 0x0026, 0xa28e, 0x007e, 0x0904, 0x2ef3,
++ 0xa28e, 0x007f, 0x0904, 0x2ef3, 0xa28e, 0x0080, 0x05e0, 0xa288,
++ 0xc77b, 0x210c, 0x81ff, 0x05b8, 0x8fff, 0x1148, 0x2001, 0xc905,
++ 0x0006, 0x2003, 0x0001, 0x04d9, 0x000e, 0x2003, 0x0000, 0x00c6,
++ 0x2160, 0x2001, 0x0001, 0x080c, 0x5715, 0x00ce, 0x2019, 0x0029,
++ 0x080c, 0x7b16, 0x0076, 0x2039, 0x0000, 0x080c, 0x7a0e, 0x00c6,
++ 0x0026, 0x2160, 0x6204, 0xa294, 0x00ff, 0xa286, 0x0006, 0x1118,
++ 0x6007, 0x0404, 0x0028, 0x2001, 0x0004, 0x8007, 0xa215, 0x6206,
++ 0x002e, 0x00ce, 0x0016, 0x2c08, 0x080c, 0xbef7, 0x001e, 0x007e,
++ 0x2160, 0x080c, 0x553e, 0x002e, 0x8210, 0x1f04, 0x2eab, 0x015e,
++ 0x001e, 0x002e, 0x003e, 0x00ce, 0x00ee, 0x00fe, 0x0005, 0x0046,
++ 0x0026, 0x0016, 0x2001, 0xc653, 0x2004, 0xd0c4, 0x0148, 0xd0a4,
++ 0x0138, 0xa006, 0x2220, 0x8427, 0x2009, 0x0029, 0x080c, 0xc190,
++ 0x001e, 0x002e, 0x004e, 0x0005, 0x0016, 0x0026, 0x0036, 0x00c6,
++ 0x7288, 0x82ff, 0x01f8, 0x2011, 0xc653, 0x2214, 0xd2ac, 0x11d0,
++ 0x2100, 0x080c, 0x29db, 0x81ff, 0x01b8, 0x2019, 0x0001, 0x8314,
++ 0xa2e0, 0xcdc0, 0x2c04, 0xd384, 0x0120, 0xa084, 0xff00, 0x8007,
++ 0x0010, 0xa084, 0x00ff, 0xa116, 0x0138, 0xa096, 0x00ff, 0x0110,
++ 0x8318, 0x0c68, 0xa085, 0x0001, 0x00ce, 0x003e, 0x002e, 0x001e,
++ 0x0005, 0x0016, 0x00c6, 0x0126, 0x2091, 0x8000, 0x0016, 0x0026,
++ 0x0036, 0x2110, 0x0026, 0x2019, 0x0029, 0x080c, 0x9132, 0x002e,
++ 0x080c, 0xc4e4, 0x003e, 0x002e, 0x001e, 0xa180, 0xc77b, 0x2004,
++ 0xa065, 0x0158, 0x0016, 0x00c6, 0x2061, 0xca3c, 0x001e, 0x611a,
++ 0x080c, 0x2e46, 0x001e, 0x080c, 0x5300, 0x012e, 0x00ce, 0x001e,
++ 0x0005, 0x2001, 0xc635, 0x2004, 0xd0cc, 0x0005, 0x7eef, 0x7de8,
++ 0x7ce4, 0x80e2, 0x7be1, 0x80e0, 0x80dc, 0x80da, 0x7ad9, 0x80d6,
++ 0x80d5, 0x80d4, 0x80d3, 0x80d2, 0x80d1, 0x79ce, 0x78cd, 0x80cc,
++ 0x80cb, 0x80ca, 0x80c9, 0x80c7, 0x80c6, 0x77c5, 0x76c3, 0x80bc,
++ 0x80ba, 0x75b9, 0x80b6, 0x74b5, 0x73b4, 0x72b3, 0x80b2, 0x80b1,
++ 0x80ae, 0x71ad, 0x80ac, 0x70ab, 0x6faa, 0x6ea9, 0x80a7, 0x6da6,
++ 0x6ca5, 0x6ba3, 0x6a9f, 0x699e, 0x689d, 0x809b, 0x8098, 0x6797,
++ 0x6690, 0x658f, 0x6488, 0x6384, 0x6282, 0x8081, 0x8080, 0x617c,
++ 0x607a, 0x8079, 0x5f76, 0x8075, 0x8074, 0x8073, 0x8072, 0x8071,
++ 0x806e, 0x5e6d, 0x806c, 0x5d6b, 0x5c6a, 0x5b69, 0x8067, 0x5a66,
++ 0x5965, 0x5863, 0x575c, 0x565a, 0x5559, 0x8056, 0x8055, 0x5454,
++ 0x5353, 0x5252, 0x5151, 0x504e, 0x4f4d, 0x804c, 0x804b, 0x4e4a,
++ 0x4d49, 0x8047, 0x4c46, 0x8045, 0x8043, 0x803c, 0x803a, 0x8039,
++ 0x8036, 0x4b35, 0x8034, 0x4a33, 0x4932, 0x4831, 0x802e, 0x472d,
++ 0x462c, 0x452b, 0x442a, 0x4329, 0x4227, 0x8026, 0x8025, 0x4123,
++ 0x401f, 0x3f1e, 0x3e1d, 0x3d1b, 0x3c18, 0x8017, 0x8010, 0x3b0f,
++ 0x3a08, 0x8004, 0x3902, 0x8001, 0x8000, 0x8000, 0x3800, 0x3700,
++ 0x3600, 0x8000, 0x3500, 0x8000, 0x8000, 0x8000, 0x3400, 0x8000,
++ 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x3300, 0x3200, 0x8000,
++ 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x3100, 0x3000, 0x8000,
++ 0x8000, 0x2f00, 0x8000, 0x2e00, 0x2d00, 0x2c00, 0x8000, 0x8000,
++ 0x8000, 0x2b00, 0x8000, 0x2a00, 0x2900, 0x2800, 0x8000, 0x2700,
++ 0x2600, 0x2500, 0x2400, 0x2300, 0x2200, 0x8000, 0x8000, 0x2100,
++ 0x2000, 0x1f00, 0x1e00, 0x1d00, 0x1c00, 0x8000, 0x8000, 0x1b00,
++ 0x1a00, 0x8000, 0x1900, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000,
++ 0x8000, 0x1800, 0x8000, 0x1700, 0x1600, 0x1500, 0x8000, 0x1400,
++ 0x1300, 0x1200, 0x1100, 0x1000, 0x0f00, 0x8000, 0x8000, 0x0e00,
++ 0x0d00, 0x0c00, 0x0b00, 0x0a00, 0x0900, 0x8000, 0x8000, 0x0800,
++ 0x0700, 0x8000, 0x0600, 0x8000, 0x8000, 0x8000, 0x0500, 0x0400,
++ 0x0300, 0x8000, 0x0200, 0x8000, 0x8000, 0x8000, 0x0100, 0x8000,
++ 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x0000, 0x8000, 0x8000,
++ 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000,
++ 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x2071, 0xc6a2,
++ 0x7003, 0x0002, 0xa006, 0x7012, 0x7016, 0x703a, 0x703e, 0x7033,
++ 0xc6b2, 0x7037, 0xc6b2, 0x7007, 0x0001, 0x2061, 0xc6f2, 0x6003,
++ 0x0002, 0x0005, 0x1004, 0x3094, 0x0e04, 0x3094, 0x2071, 0xc6a2,
++ 0x2b78, 0x7818, 0xd084, 0x1140, 0x2a60, 0x7820, 0xa08e, 0x0069,
++ 0x1904, 0x3179, 0x0804, 0x3112, 0x0005, 0x2071, 0xc6a2, 0x7004,
++ 0x0002, 0x309d, 0x309e, 0x30a7, 0x30b8, 0x0005, 0x1004, 0x30a6,
++ 0x0e04, 0x30a6, 0x2b78, 0x7818, 0xd084, 0x01e8, 0x0005, 0x2b78,
++ 0x2061, 0xc6f2, 0x6008, 0xa08e, 0x0100, 0x0128, 0xa086, 0x0200,
++ 0x0904, 0x3173, 0x0005, 0x7014, 0x2068, 0x2a60, 0x7018, 0x0807,
++ 0x7010, 0x2068, 0x6834, 0xa086, 0x0103, 0x0108, 0x0005, 0x2a60,
++ 0x2b78, 0x7018, 0x0807, 0x2a60, 0x7820, 0xa08a, 0x0040, 0x1210,
++ 0x61c4, 0x0042, 0x2100, 0xa08a, 0x003f, 0x1a04, 0x3170, 0x61c4,
++ 0x0804, 0x3112, 0x3154, 0x317f, 0x3187, 0x318b, 0x3193, 0x3199,
++ 0x319d, 0x31a9, 0x31ac, 0x31b6, 0x31b9, 0x3170, 0x3170, 0x3170,
++ 0x31bc, 0x3170, 0x31cb, 0x31e2, 0x31f9, 0x3273, 0x3278, 0x32a1,
++ 0x32f2, 0x3303, 0x3322, 0x335a, 0x3364, 0x3371, 0x3384, 0x33a5,
++ 0x33ae, 0x33e4, 0x33ea, 0x3170, 0x3413, 0x3170, 0x3170, 0x3170,
++ 0x3170, 0x3170, 0x341a, 0x3424, 0x3170, 0x3170, 0x3170, 0x3170,
++ 0x3170, 0x3170, 0x3170, 0x3170, 0x342c, 0x3170, 0x3170, 0x3170,
++ 0x3170, 0x3170, 0x343e, 0x3448, 0x3170, 0x3170, 0x3170, 0x3170,
++ 0x3170, 0x3170, 0x0002, 0x3472, 0x34c6, 0x3521, 0x353b, 0x3170,
++ 0x356c, 0x399f, 0x456f, 0x3170, 0x3170, 0x3170, 0x3170, 0x3170,
++ 0x3170, 0x3170, 0x3170, 0x31b6, 0x31b9, 0x39a1, 0x3170, 0x39ae,
++ 0x4608, 0x4663, 0x46c7, 0x3170, 0x472a, 0x4754, 0x4773, 0x47a5,
++ 0x3170, 0x3170, 0x3170, 0x39b2, 0x3b57, 0x3b71, 0x3b8f, 0x3bf0,
++ 0x3c50, 0x3c5b, 0x3c93, 0x3ca2, 0x3cb1, 0x3cb4, 0x3cd7, 0x3d21,
++ 0x3d97, 0x3da4, 0x3ea5, 0x3fd4, 0x3ffd, 0x40fb, 0x411d, 0x4129,
++ 0x4162, 0x4232, 0x428c, 0x4352, 0x43a4, 0x4404, 0x4419, 0x4434,
++ 0x44a6, 0x4558, 0x713c, 0x0000, 0x2021, 0x4000, 0x080c, 0x405a,
++ 0x0126, 0x2091, 0x8000, 0x0e04, 0x3160, 0x7818, 0xd084, 0x0110,
++ 0x012e, 0x0cb0, 0x7c22, 0x7926, 0x7a2a, 0x7b2e, 0x781b, 0x0001,
++ 0x2091, 0x4080, 0x7007, 0x0001, 0x2091, 0x5000, 0x012e, 0x0005,
++ 0x2021, 0x4001, 0x0c18, 0x2021, 0x4002, 0x0c00, 0x2021, 0x4003,
++ 0x08e8, 0x2021, 0x4005, 0x08d0, 0x2021, 0x4006, 0x08b8, 0xa02e,
++ 0x2520, 0x7b28, 0x7a2c, 0x7824, 0x7930, 0x0804, 0x4067, 0x7823,
++ 0x0004, 0x7824, 0x0807, 0xa02e, 0x2520, 0x7b28, 0x7a2c, 0x7824,
++ 0x7930, 0x0804, 0x406a, 0x7924, 0x7828, 0x2114, 0x200a, 0x0804,
++ 0x3154, 0x7924, 0x2114, 0x0804, 0x3154, 0x2099, 0x0009, 0x20a1,
++ 0x0009, 0x20a9, 0x0007, 0x53a3, 0x7924, 0x7a28, 0x7b2c, 0x0804,
++ 0x3154, 0x7824, 0x2060, 0x0090, 0x2009, 0x0002, 0x2011, 0x0002,
++ 0x2019, 0x0005, 0x783b, 0x0037, 0x0804, 0x3154, 0x7d38, 0x7c3c,
++ 0x0840, 0x7d38, 0x7c3c, 0x0888, 0x2061, 0x1000, 0xe10c, 0xa006,
++ 0x2c15, 0xa200, 0x8c60, 0x8109, 0x1dd8, 0x2010, 0xa005, 0x0904,
++ 0x3154, 0x0804, 0x3176, 0x2069, 0xc652, 0x7824, 0x7930, 0xa11a,
++ 0x1a04, 0x317c, 0x8019, 0x0904, 0x317c, 0x684a, 0x6942, 0x782c,
++ 0x6852, 0x7828, 0x6856, 0xa006, 0x685a, 0x685e, 0x080c, 0x61f8,
++ 0x0804, 0x3154, 0x2069, 0xc652, 0x7824, 0x7934, 0xa11a, 0x1a04,
++ 0x317c, 0x8019, 0x0904, 0x317c, 0x684e, 0x6946, 0x782c, 0x6862,
++ 0x7828, 0x6866, 0xa006, 0x686a, 0x686e, 0x080c, 0x57d7, 0x0804,
++ 0x3154, 0xa02e, 0x2520, 0x81ff, 0x1904, 0x3179, 0x7924, 0x7b28,
++ 0x7a2c, 0x20a9, 0x0005, 0x20a1, 0xc6a9, 0x41a1, 0x080c, 0x4026,
++ 0x0904, 0x3179, 0x2009, 0x0020, 0x080c, 0x4067, 0x701b, 0x3211,
++ 0x0005, 0x6834, 0x2008, 0xa084, 0x00ff, 0xa096, 0x0011, 0x0138,
++ 0xa096, 0x0019, 0x0120, 0xa096, 0x0015, 0x1904, 0x3179, 0x810f,
++ 0xa18c, 0x00ff, 0x0904, 0x3179, 0x710e, 0x700c, 0x8001, 0x0528,
++ 0x700e, 0x080c, 0x4026, 0x0904, 0x3179, 0x2009, 0x0020, 0x2061,
++ 0xc6f2, 0x6224, 0x6328, 0x642c, 0x6530, 0xa290, 0x0040, 0xa399,
++ 0x0000, 0xa4a1, 0x0000, 0xa5a9, 0x0000, 0x080c, 0x4067, 0x701b,
++ 0x3242, 0x0005, 0x6834, 0xa084, 0x00ff, 0xa096, 0x0002, 0x0120,
++ 0xa096, 0x000a, 0x1904, 0x3179, 0x08c0, 0x7010, 0x2068, 0x6838,
++ 0xc0fd, 0x683a, 0x080c, 0x51dd, 0x1128, 0x7007, 0x0003, 0x701b,
++ 0x325c, 0x0005, 0x080c, 0x592e, 0x0126, 0x2091, 0x8000, 0x20a9,
++ 0x0005, 0x2099, 0xc6a9, 0x530a, 0x2100, 0xa210, 0xa399, 0x0000,
++ 0xa4a1, 0x0000, 0xa5a9, 0x0000, 0xad80, 0x000d, 0x2009, 0x0020,
++ 0x012e, 0x0804, 0x406a, 0x61ac, 0x7824, 0x60ae, 0x0804, 0x3154,
++ 0x2091, 0x8000, 0x7823, 0x4000, 0x7827, 0x4953, 0x782b, 0x5020,
++ 0x782f, 0x2020, 0x2009, 0x017f, 0x2104, 0x7832, 0x3f00, 0x7836,
++ 0x2061, 0x0100, 0x6200, 0x2061, 0x0200, 0x603c, 0x8007, 0xa205,
++ 0x783a, 0x2009, 0x04fd, 0x2104, 0x783e, 0x781b, 0x0001, 0x2091,
++ 0x5000, 0x2091, 0x4080, 0x2071, 0x0010, 0x20c1, 0x00f0, 0x0804,
++ 0x0427, 0x81ff, 0x1904, 0x3179, 0x7924, 0x810f, 0xa18c, 0x00ff,
++ 0x080c, 0x533d, 0x1904, 0x317c, 0x7e38, 0xa684, 0x3fff, 0xa082,
++ 0x4000, 0x0210, 0x0804, 0x317c, 0x7c28, 0x7d2c, 0x080c, 0x5505,
++ 0xd28c, 0x1118, 0x080c, 0x54ae, 0x0010, 0x080c, 0x54de, 0x1518,
++ 0x2061, 0xce00, 0x0126, 0x2091, 0x8000, 0x6000, 0xa086, 0x0000,
++ 0x0148, 0x6010, 0xa06d, 0x0130, 0x683c, 0xa406, 0x1118, 0x6840,
++ 0xa506, 0x0150, 0x012e, 0xace0, 0x0018, 0x2001, 0xc617, 0x2004,
++ 0xac02, 0x1a04, 0x3179, 0x0c30, 0x080c, 0xa961, 0x012e, 0x0904,
++ 0x3179, 0x0804, 0x3154, 0xa00e, 0x2001, 0x0005, 0x080c, 0x592e,
++ 0x0126, 0x2091, 0x8000, 0x080c, 0xaf09, 0x080c, 0x580a, 0x012e,
++ 0x0804, 0x3154, 0x81ff, 0x1904, 0x3179, 0x080c, 0x403b, 0x0904,
++ 0x317c, 0x080c, 0x5403, 0x0904, 0x3179, 0x080c, 0x5511, 0x0904,
++ 0x3179, 0x0804, 0x3154, 0x81ff, 0x1904, 0x3179, 0x080c, 0x404b,
++ 0x0904, 0x317c, 0x080c, 0x557d, 0x0904, 0x3179, 0x2019, 0x0005,
++ 0x7924, 0x080c, 0x552c, 0x0904, 0x3179, 0x7828, 0xa08a, 0x1000,
++ 0x1a04, 0x317c, 0x8003, 0x800b, 0x810b, 0xa108, 0x080c, 0x6fb9,
++ 0x0804, 0x3154, 0x0126, 0x2091, 0x8000, 0x81ff, 0x0118, 0x2009,
++ 0x0001, 0x0450, 0x2029, 0x00ff, 0x6450, 0x2400, 0xa506, 0x01f8,
++ 0x2508, 0x080c, 0x533d, 0x11d8, 0x080c, 0x557d, 0x1128, 0x2009,
++ 0x0002, 0x62b4, 0x2518, 0x00c0, 0x2019, 0x0004, 0xa00e, 0x080c,
++ 0x552c, 0x1118, 0x2009, 0x0006, 0x0078, 0x7824, 0xa08a, 0x1000,
++ 0x1270, 0x8003, 0x800b, 0x810b, 0xa108, 0x080c, 0x6fb9, 0x8529,
++ 0x1ae0, 0x012e, 0x0804, 0x3154, 0x012e, 0x0804, 0x3179, 0x012e,
++ 0x0804, 0x317c, 0x080c, 0x403b, 0x0904, 0x317c, 0x080c, 0x5469,
++ 0x080c, 0x5505, 0x0804, 0x3154, 0x81ff, 0x1904, 0x3179, 0x080c,
++ 0x403b, 0x0904, 0x317c, 0x080c, 0x545a, 0x080c, 0x5505, 0x0804,
++ 0x3154, 0x81ff, 0x1904, 0x3179, 0x080c, 0x403b, 0x0904, 0x317c,
++ 0x080c, 0x54e0, 0x0904, 0x3179, 0x080c, 0x5221, 0x080c, 0x54a7,
++ 0x080c, 0x5505, 0x0804, 0x3154, 0x080c, 0x403b, 0x0904, 0x317c,
++ 0x080c, 0x5403, 0x0904, 0x3179, 0x62a0, 0x2019, 0x0005, 0x00c6,
++ 0x080c, 0x553e, 0x2061, 0x0000, 0x080c, 0x7b16, 0x0076, 0x2039,
++ 0x0000, 0x080c, 0x7a0e, 0x2009, 0x0000, 0x080c, 0xbef7, 0x007e,
++ 0x00ce, 0x080c, 0x5505, 0x0804, 0x3154, 0x080c, 0x403b, 0x0904,
++ 0x317c, 0x080c, 0x5505, 0x2208, 0x0804, 0x3154, 0x0156, 0x00d6,
++ 0x00e6, 0x2069, 0xc734, 0x6810, 0x6914, 0xa10a, 0x1210, 0x2009,
++ 0x0000, 0x6816, 0x2011, 0x0000, 0x2019, 0x0000, 0x20a9, 0x007e,
++ 0x2069, 0xc77b, 0x2d04, 0xa075, 0x0130, 0x704c, 0x0071, 0xa210,
++ 0x7080, 0x0059, 0xa318, 0x8d68, 0x1f04, 0x33c2, 0x2300, 0xa218,
++ 0x00ee, 0x00de, 0x015e, 0x0804, 0x3154, 0x00f6, 0x0016, 0xa07d,
++ 0x0140, 0x2001, 0x0000, 0x8000, 0x2f0c, 0x81ff, 0x0110, 0x2178,
++ 0x0cd0, 0x001e, 0x00fe, 0x0005, 0x2069, 0xc734, 0x6910, 0x62b0,
++ 0x0804, 0x3154, 0x81ff, 0x1904, 0x3179, 0x6150, 0xa190, 0x2f6e,
++ 0x2215, 0xa294, 0x00ff, 0x6370, 0x83ff, 0x0108, 0x6274, 0x67d4,
++ 0xd79c, 0x0118, 0x2031, 0x0001, 0x0090, 0xd7ac, 0x0118, 0x2031,
++ 0x0003, 0x0068, 0xd7a4, 0x0118, 0x2031, 0x0002, 0x0040, 0x080c,
++ 0x5f22, 0x1118, 0x2031, 0x0004, 0x0010, 0x2031, 0x0000, 0x7e3a,
++ 0x7f3e, 0x0804, 0x3154, 0x6140, 0x6244, 0x2019, 0xc8fd, 0x231c,
++ 0x0804, 0x3154, 0x0126, 0x2091, 0x8000, 0x6134, 0xa006, 0x2010,
++ 0x6338, 0x012e, 0x0804, 0x3154, 0x080c, 0x404b, 0x0904, 0x317c,
++ 0x6244, 0x6338, 0x0804, 0x3154, 0x6140, 0x6244, 0x7824, 0x6042,
++ 0x7b28, 0x6346, 0x2069, 0xc652, 0x831f, 0xa305, 0x6816, 0x782c,
++ 0x2069, 0xc8fd, 0x2d1c, 0x206a, 0x0804, 0x3154, 0x0126, 0x2091,
++ 0x8000, 0x7824, 0x6036, 0x782c, 0x603a, 0x012e, 0x0804, 0x3154,
++ 0x7838, 0xa005, 0x01a8, 0x7828, 0xa025, 0x0904, 0x317c, 0x782c,
++ 0xa02d, 0x0904, 0x317c, 0xa00e, 0x080c, 0x533d, 0x1120, 0x6244,
++ 0x6338, 0x6446, 0x653a, 0xa186, 0x00ff, 0x0190, 0x8108, 0x0ca0,
++ 0x080c, 0x404b, 0x0904, 0x317c, 0x7828, 0xa00d, 0x0904, 0x317c,
++ 0x782c, 0xa005, 0x0904, 0x317c, 0x6244, 0x6146, 0x6338, 0x603a,
++ 0x0804, 0x3154, 0x2001, 0xc600, 0x2004, 0xa086, 0x0003, 0x1904,
++ 0x3179, 0x00c6, 0x2061, 0x0100, 0x7924, 0x810f, 0xa18c, 0x00ff,
++ 0xa196, 0x00ff, 0x1130, 0x2001, 0xc615, 0x2004, 0xa085, 0xff00,
++ 0x0078, 0xa182, 0x007f, 0x16a0, 0xa188, 0x2f6e, 0x210d, 0xa18c,
++ 0x00ff, 0x2001, 0xc615, 0x2004, 0xa116, 0x0550, 0x810f, 0xa105,
++ 0x0126, 0x2091, 0x8000, 0x0006, 0x080c, 0x958d, 0x000e, 0x01e0,
++ 0x601a, 0x600b, 0xbc09, 0x601f, 0x0001, 0x080c, 0x4026, 0x01d8,
++ 0x6837, 0x0000, 0x7007, 0x0003, 0x6833, 0x0000, 0x6838, 0xc0fd,
++ 0x683a, 0x701b, 0x351a, 0x2d00, 0x6012, 0x2009, 0x0032, 0x080c,
++ 0x9613, 0x012e, 0x00ce, 0x0005, 0x012e, 0x00ce, 0x0804, 0x3179,
++ 0x00ce, 0x0804, 0x317c, 0x080c, 0x95e3, 0x0cb0, 0x2001, 0xc600,
++ 0x2004, 0xa086, 0x0003, 0x1904, 0x3179, 0x00c6, 0x2061, 0x0100,
++ 0x7924, 0x810f, 0xa18c, 0x00ff, 0xa196, 0x00ff, 0x1130, 0x2001,
++ 0xc615, 0x2004, 0xa085, 0xff00, 0x0078, 0xa182, 0x007f, 0x16a0,
++ 0xa188, 0x2f6e, 0x210d, 0xa18c, 0x00ff, 0x2001, 0xc615, 0x2004,
++ 0xa116, 0x0550, 0x810f, 0xa105, 0x0126, 0x2091, 0x8000, 0x0006,
++ 0x080c, 0x958d, 0x000e, 0x01e0, 0x601a, 0x600b, 0xbc05, 0x601f,
++ 0x0001, 0x080c, 0x4026, 0x01d8, 0x6837, 0x0000, 0x7007, 0x0003,
++ 0x6833, 0x0000, 0x6838, 0xc0fd, 0x683a, 0x701b, 0x351a, 0x2d00,
++ 0x6012, 0x2009, 0x0032, 0x080c, 0x9613, 0x012e, 0x00ce, 0x0005,
++ 0x012e, 0x00ce, 0x0804, 0x3179, 0x00ce, 0x0804, 0x317c, 0x080c,
++ 0x95e3, 0x0cb0, 0x6830, 0xa086, 0x0100, 0x0904, 0x3179, 0x0804,
++ 0x3154, 0x2061, 0xc9bc, 0x0126, 0x2091, 0x8000, 0x6000, 0xd084,
++ 0x0178, 0x6104, 0x6208, 0x2a60, 0x6068, 0x783a, 0x60b4, 0x783e,
++ 0x60b0, 0x2019, 0x0072, 0x201a, 0x6348, 0x012e, 0x0804, 0x3154,
++ 0xa00e, 0x2110, 0x0c80, 0x81ff, 0x1904, 0x3179, 0x080c, 0x5f22,
++ 0x0904, 0x3179, 0x0126, 0x2091, 0x8000, 0x6248, 0x6068, 0xa202,
++ 0x0248, 0xa085, 0x0001, 0x080c, 0x2a11, 0x080c, 0x4968, 0x012e,
++ 0x0804, 0x3154, 0x012e, 0x0804, 0x317c, 0x0006, 0x0016, 0x00c6,
++ 0x00e6, 0x2001, 0xc906, 0x2070, 0x2061, 0xc652, 0x6008, 0x2072,
++ 0x2009, 0x0000, 0x2011, 0x1000, 0x080c, 0x783f, 0x7206, 0x00ee,
++ 0x00ce, 0x001e, 0x000e, 0x0005, 0x0126, 0x2091, 0x8000, 0x7824,
++ 0xa084, 0x0007, 0x0002, 0x357e, 0x3587, 0x358e, 0x357b, 0x357b,
++ 0x357b, 0x357b, 0x357b, 0x012e, 0x0804, 0x317c, 0x2009, 0x0114,
++ 0x2104, 0xa085, 0x0800, 0x200a, 0x080c, 0x36f9, 0x0070, 0x2009,
++ 0x010b, 0x200b, 0x0010, 0x080c, 0x36f9, 0x0038, 0x81ff, 0x0128,
++ 0x012e, 0x2021, 0x400b, 0x0804, 0x3156, 0x0086, 0x0096, 0x00a6,
++ 0x00b6, 0x00c6, 0x00d6, 0x00e6, 0x00f6, 0x080c, 0x3555, 0x2009,
++ 0x0101, 0x210c, 0x0016, 0x2001, 0x0138, 0x200c, 0x2003, 0x0001,
++ 0x0016, 0x2001, 0x007a, 0x2034, 0x2001, 0x007b, 0x202c, 0xa006,
++ 0x2048, 0x2050, 0x2058, 0x080c, 0x3944, 0x080c, 0x38a8, 0xa03e,
++ 0x2720, 0x00f6, 0x00e6, 0x00c6, 0x2d60, 0x2071, 0xc992, 0x2079,
++ 0x0020, 0x00d6, 0x2069, 0x0000, 0x6824, 0xd0b4, 0x0140, 0x2001,
++ 0x007d, 0x2004, 0x783e, 0x2001, 0x007c, 0x2004, 0x783a, 0x00de,
++ 0x2011, 0x0001, 0x080c, 0x3854, 0x080c, 0x3854, 0x00ce, 0x00ee,
++ 0x00fe, 0x080c, 0x379f, 0x080c, 0x387c, 0x080c, 0x37f9, 0x080c,
++ 0x375e, 0x080c, 0x378f, 0x00f6, 0x2079, 0x0100, 0x7824, 0xd094,
++ 0x0530, 0x7814, 0xa084, 0x0184, 0xa085, 0x0010, 0x7816, 0x2079,
++ 0x0140, 0x080c, 0x36d7, 0x1110, 0x00fe, 0x0430, 0x7804, 0xd0dc,
++ 0x0dc0, 0x2079, 0x0100, 0x7827, 0x0086, 0x7814, 0xa084, 0x0184,
++ 0xa085, 0x0032, 0x7816, 0x080c, 0x36d7, 0x1110, 0x00fe, 0x00a0,
++ 0x7824, 0xd0bc, 0x0dc0, 0x7827, 0x0080, 0xa026, 0x7c16, 0x7824,
++ 0xd0ac, 0x0130, 0x8b58, 0x080c, 0x36e1, 0x00fe, 0x0804, 0x36a1,
++ 0x00fe, 0x080c, 0x36d7, 0x1150, 0x8948, 0x2001, 0x007a, 0x2602,
++ 0x2001, 0x007b, 0x2502, 0x080c, 0x36e1, 0x0088, 0x87ff, 0x0140,
++ 0x2001, 0x0201, 0x2004, 0xa005, 0x1904, 0x35db, 0x8739, 0x0038,
++ 0x2001, 0xc96a, 0x2004, 0xa086, 0x0000, 0x1904, 0x35db, 0x2001,
++ 0x0033, 0x2003, 0x00f6, 0x8631, 0x1208, 0x8529, 0x2500, 0xa605,
++ 0x0904, 0x36a1, 0x7824, 0xd0bc, 0x0128, 0x2900, 0xaa05, 0xab05,
++ 0x1904, 0x36a1, 0x6033, 0x000d, 0x2001, 0x0030, 0x2003, 0x0004,
++ 0x7824, 0xd0ac, 0x1148, 0x2001, 0xc96a, 0x2003, 0x0003, 0x2001,
++ 0x0030, 0x2003, 0x0009, 0x0040, 0x6027, 0x0001, 0x2001, 0x0075,
++ 0x2004, 0xa005, 0x0108, 0x6026, 0x2c00, 0x601a, 0x20e1, 0x9040,
++ 0x2d00, 0x681a, 0x6833, 0x000d, 0x7824, 0xd0a4, 0x1180, 0x6827,
++ 0x0000, 0x00c6, 0x20a9, 0x0004, 0x2061, 0x0020, 0x6003, 0x0008,
++ 0x2001, 0x0203, 0x2004, 0x1f04, 0x3676, 0x00ce, 0x0040, 0x6827,
++ 0x0001, 0x2001, 0x0074, 0x2004, 0xa005, 0x0108, 0x6826, 0x00f6,
++ 0x00c6, 0x2079, 0x0100, 0x2061, 0x0020, 0x7827, 0x0002, 0x2001,
++ 0x0072, 0x2004, 0xa084, 0xfff8, 0x601a, 0x0006, 0x2001, 0x0073,
++ 0x2004, 0x601e, 0x78c6, 0x000e, 0x78ca, 0x00ce, 0x00fe, 0x0804,
++ 0x35b9, 0x2061, 0x0100, 0x6027, 0x0002, 0x001e, 0x61e2, 0x001e,
++ 0x6106, 0x7824, 0xa084, 0x0003, 0xa086, 0x0002, 0x0188, 0x20e1,
++ 0x9028, 0x6050, 0xa084, 0xf7ef, 0x6052, 0x602f, 0x0000, 0x602c,
++ 0xc0ac, 0x602e, 0x604b, 0xf7f7, 0x6043, 0x0090, 0x6043, 0x0010,
++ 0x2908, 0x2a10, 0x2b18, 0x2b00, 0xaa05, 0xa905, 0x00fe, 0x00ee,
++ 0x00de, 0x00ce, 0x00be, 0x00ae, 0x009e, 0x008e, 0x1118, 0x012e,
++ 0x0804, 0x3154, 0x012e, 0x2021, 0x400c, 0x0804, 0x3156, 0xa085,
++ 0x0001, 0x1d04, 0x36e0, 0x2091, 0x6000, 0x8420, 0xa486, 0x0064,
++ 0x0005, 0x2001, 0x0105, 0x2003, 0x0010, 0x2001, 0x0030, 0x2003,
++ 0x0004, 0x2001, 0x0020, 0x2003, 0x0004, 0x2001, 0xc96a, 0x2003,
++ 0x0000, 0x2001, 0xc992, 0x2003, 0x0000, 0x20e1, 0xf000, 0xa026,
++ 0x0005, 0x00f6, 0x2079, 0x0100, 0x2001, 0xc615, 0x200c, 0x7932,
++ 0x7936, 0x080c, 0x29f1, 0x7850, 0xa084, 0x0980, 0xa085, 0x0030,
++ 0x7852, 0x2019, 0x01f4, 0x8319, 0x1df0, 0xa084, 0x0980, 0x7852,
++ 0x782c, 0xc0ad, 0x782e, 0x20a9, 0x0046, 0x1d04, 0x3715, 0x2091,
++ 0x6000, 0x1f04, 0x3715, 0x7850, 0xa085, 0x0400, 0x7852, 0x2001,
++ 0x0009, 0x2004, 0xa084, 0x0003, 0xa086, 0x0001, 0x1118, 0x782c,
++ 0xc0ac, 0x782e, 0x784b, 0xf7f7, 0x7843, 0x0090, 0x7843, 0x0010,
++ 0x20a9, 0x000e, 0xe000, 0x1f04, 0x3732, 0x7850, 0xa085, 0x1400,
++ 0x7852, 0x2019, 0x61a8, 0x7854, 0xe000, 0xe000, 0xd08c, 0x1110,
++ 0x8319, 0x1dc8, 0x7827, 0x0048, 0x7850, 0xa085, 0x0400, 0x7852,
++ 0x7843, 0x0040, 0x2019, 0x01f4, 0xe000, 0xe000, 0x8319, 0x1de0,
++ 0x2001, 0x0140, 0x2003, 0x0100, 0x7827, 0x0020, 0x7843, 0x0000,
++ 0x2003, 0x0000, 0x7827, 0x0048, 0x00fe, 0x0005, 0x7824, 0xd0ac,
++ 0x11c8, 0x00f6, 0x00e6, 0x2071, 0xc96a, 0x2079, 0x0030, 0x2001,
++ 0x0201, 0x2004, 0xa005, 0x0160, 0x7000, 0xa086, 0x0000, 0x1140,
++ 0x0051, 0xd0bc, 0x0108, 0x8738, 0x7003, 0x0003, 0x7803, 0x0019,
++ 0x00ee, 0x00fe, 0x0005, 0x780c, 0xa08c, 0x0070, 0x0178, 0x2009,
++ 0x007a, 0x260a, 0x2009, 0x007b, 0x250a, 0xd0b4, 0x0108, 0x8a50,
++ 0xd0ac, 0x0108, 0x8948, 0xd0a4, 0x0108, 0x8b58, 0x0005, 0x00f6,
++ 0x2079, 0x0200, 0x781c, 0xd084, 0x0140, 0x20e1, 0x0007, 0x20e1,
++ 0x2000, 0x2001, 0x020a, 0x2004, 0x0ca8, 0x00fe, 0x0005, 0x00e6,
++ 0x2071, 0x0100, 0x2001, 0xc907, 0x2004, 0x70e2, 0x2009, 0xc615,
++ 0x210c, 0x716e, 0x7063, 0x0100, 0x7166, 0x719e, 0x706b, 0x0000,
++ 0x7073, 0x0809, 0x7077, 0x0008, 0x7078, 0xa080, 0x0100, 0x707a,
++ 0x7080, 0x8000, 0x7082, 0x7087, 0xaaaa, 0xa006, 0x708a, 0x708e,
++ 0x707e, 0x70d6, 0x70ab, 0x0036, 0x70af, 0x95d5, 0x7027, 0x0080,
++ 0x7014, 0xa084, 0x0184, 0xa085, 0x0032, 0x7016, 0x080c, 0x387c,
++ 0x080c, 0x36d7, 0x1110, 0x8421, 0x0028, 0x7024, 0xd0bc, 0x0db0,
++ 0x7027, 0x0080, 0x00f6, 0x00e6, 0x2071, 0xc96a, 0x2079, 0x0030,
++ 0x00d6, 0x2069, 0x0000, 0x6824, 0xd0b4, 0x0120, 0x683c, 0x783e,
++ 0x6838, 0x783a, 0x00de, 0x2011, 0x0011, 0x080c, 0x3854, 0x2011,
++ 0x0001, 0x080c, 0x3854, 0x00ee, 0x00fe, 0x7017, 0x0000, 0x00ee,
++ 0x0005, 0x00f6, 0x00e6, 0x2071, 0xc96a, 0x2079, 0x0030, 0x7904,
++ 0xd1fc, 0x0904, 0x3851, 0x7803, 0x0002, 0xa026, 0xd19c, 0x1904,
++ 0x384d, 0x7000, 0x0002, 0x3851, 0x380f, 0x3833, 0x384d, 0xd1bc,
++ 0x1150, 0xd1dc, 0x1150, 0x8001, 0x7002, 0x2011, 0x0001, 0x04e1,
++ 0x05c0, 0x04d1, 0x04b0, 0x780f, 0x0000, 0x7820, 0x7924, 0x7803,
++ 0x0004, 0x7822, 0x7926, 0x2001, 0x0201, 0x200c, 0x81ff, 0x0de8,
++ 0x080c, 0x377b, 0x2009, 0x0001, 0x7808, 0xd0ec, 0x0110, 0x2009,
++ 0x0011, 0x7902, 0x00f0, 0x8001, 0x7002, 0xa184, 0x0880, 0x1138,
++ 0x7804, 0xd0fc, 0x1940, 0x2011, 0x0001, 0x00b1, 0x0090, 0x6030,
++ 0xa092, 0x0004, 0xa086, 0x0009, 0x1120, 0x6000, 0x601a, 0x2011,
++ 0x0025, 0x6232, 0xd1dc, 0x1988, 0x0870, 0x7803, 0x0004, 0x7003,
++ 0x0000, 0x00ee, 0x00fe, 0x0005, 0x6024, 0xa005, 0x0520, 0x8001,
++ 0x6026, 0x6018, 0x6130, 0xa140, 0x2804, 0x7832, 0x8840, 0x2804,
++ 0x7836, 0x8840, 0x2804, 0x7822, 0x8840, 0x2804, 0x7826, 0x8840,
++ 0x7a02, 0x7000, 0x8000, 0x7002, 0x6018, 0xa802, 0xa08a, 0x0029,
++ 0x1138, 0x6018, 0xa080, 0x0001, 0x2004, 0x601a, 0x2001, 0x000d,
++ 0x6032, 0xa085, 0x0001, 0x0005, 0x00f6, 0x00e6, 0x00c6, 0x2071,
++ 0xc992, 0x2079, 0x0020, 0x7904, 0xd1fc, 0x01f0, 0x7803, 0x0002,
++ 0x2d60, 0xa026, 0x7000, 0x0002, 0x38a4, 0x388f, 0x389b, 0x8001,
++ 0x7002, 0xd19c, 0x1188, 0x2011, 0x0001, 0x080c, 0x3854, 0x0160,
++ 0x080c, 0x3854, 0x0048, 0x8001, 0x7002, 0x7804, 0xd0fc, 0x1d30,
++ 0x2011, 0x0001, 0x080c, 0x3854, 0x00ce, 0x00ee, 0x00fe, 0x0005,
++ 0x00f6, 0x00e6, 0x00c6, 0x2061, 0x0200, 0x2001, 0xc907, 0x2004,
++ 0x601a, 0x2061, 0x0100, 0x2001, 0xc906, 0x2004, 0x60ce, 0x6004,
++ 0xc0ac, 0xa085, 0x0200, 0x6006, 0x2001, 0x0074, 0x2004, 0xa005,
++ 0x01f8, 0x2038, 0x2001, 0x0076, 0x2024, 0x2001, 0x0077, 0x201c,
++ 0x080c, 0x4026, 0x6833, 0x000d, 0x6f26, 0x2d00, 0x681a, 0xa78a,
++ 0x0007, 0x0220, 0x2138, 0x2009, 0x0007, 0x0010, 0x2708, 0xa03e,
++ 0x6818, 0xa080, 0x000d, 0x04b1, 0x1d90, 0x2d00, 0x681a, 0x0088,
++ 0x080c, 0x4026, 0x6833, 0x000d, 0x2070, 0x6827, 0x0001, 0x2d00,
++ 0x681a, 0x2001, 0x0076, 0x2004, 0x2072, 0x2001, 0x0077, 0x2004,
++ 0x7006, 0x2061, 0x0020, 0x2079, 0x0100, 0x2001, 0xc906, 0x2004,
++ 0x6012, 0x20e1, 0x9040, 0x2001, 0x0072, 0x2004, 0xa084, 0xfff8,
++ 0x700a, 0x601a, 0x0006, 0x2001, 0x0073, 0x2004, 0x700e, 0x601e,
++ 0x78c6, 0x000e, 0x78ca, 0xa006, 0x603a, 0x603e, 0x00ce, 0x00ee,
++ 0x00fe, 0x0005, 0x00e6, 0x2071, 0x0010, 0x20a0, 0x2099, 0x0014,
++ 0x7003, 0x0026, 0x7432, 0x7336, 0xa006, 0x703a, 0x703e, 0x810b,
++ 0x810b, 0x21a8, 0x810b, 0x7122, 0x7003, 0x0041, 0x7004, 0xd0fc,
++ 0x0de8, 0x7003, 0x0002, 0x7003, 0x0040, 0x53a5, 0x7430, 0x7334,
++ 0x87ff, 0x0180, 0x00c6, 0x00d6, 0x2d60, 0x00c6, 0x080c, 0x4026,
++ 0x00ce, 0x6018, 0x2070, 0x2d00, 0x7006, 0x601a, 0x00de, 0x00ce,
++ 0xa085, 0x0001, 0x00ee, 0x0005, 0x00e6, 0x2001, 0x0075, 0x2004,
++ 0xa005, 0x0508, 0x2038, 0x2001, 0x0078, 0x2024, 0x2001, 0x0079,
++ 0x201c, 0x080c, 0x4026, 0x2d60, 0x6833, 0x000d, 0x6f26, 0x2d00,
++ 0x681a, 0xa78a, 0x0007, 0x0220, 0x2138, 0x2009, 0x0007, 0x0010,
++ 0x2708, 0xa03e, 0x6818, 0xa080, 0x000d, 0x080c, 0x3912, 0x1d88,
++ 0x2d00, 0x681a, 0x00e0, 0x080c, 0x4026, 0x2d60, 0x6033, 0x000d,
++ 0x2070, 0x6027, 0x0001, 0x2c00, 0x601a, 0x2001, 0x0078, 0x2004,
++ 0x2072, 0x2001, 0x0079, 0x2004, 0x7006, 0x2001, 0x0072, 0x2004,
++ 0xa084, 0xfff8, 0x700a, 0x2001, 0x0073, 0x2004, 0x700e, 0x2001,
++ 0x0030, 0x2003, 0x0004, 0x7824, 0xd0ac, 0x1178, 0x2001, 0x0101,
++ 0x200c, 0xc1ed, 0x2102, 0x6027, 0x0000, 0x2001, 0xc96a, 0x2003,
++ 0x0003, 0x2001, 0x0030, 0x2003, 0x0009, 0x00ee, 0x0005, 0x0804,
++ 0x3154, 0x0126, 0x2091, 0x8000, 0x20a9, 0x0012, 0x2001, 0xc640,
++ 0x20a0, 0xa006, 0x40a4, 0x012e, 0x0804, 0x3154, 0x7d38, 0x7c3c,
++ 0x0804, 0x31fb, 0x080c, 0x4026, 0x0904, 0x3179, 0x080c, 0x5f22,
++ 0x0110, 0x080c, 0x4f2c, 0x2009, 0x001c, 0x7a2c, 0x7b28, 0x7c3c,
++ 0x7d38, 0x080c, 0x4067, 0x701b, 0x39c6, 0x0005, 0xade8, 0x000d,
++ 0x6800, 0xa005, 0x0904, 0x317c, 0x6804, 0xd0ac, 0x0118, 0xd0a4,
++ 0x0904, 0x317c, 0xd094, 0x00c6, 0x2061, 0x0100, 0x6104, 0x0138,
++ 0x6200, 0xa292, 0x0005, 0x0218, 0xa18c, 0xffdf, 0x0010, 0xa18d,
++ 0x0020, 0x6106, 0x00ce, 0xd08c, 0x00c6, 0x2061, 0x0100, 0x6104,
++ 0x0118, 0xa18d, 0x0010, 0x0010, 0xa18c, 0xffef, 0x6106, 0x00ce,
++ 0x2009, 0x0100, 0x210c, 0xa18a, 0x0002, 0x0268, 0xd084, 0x0158,
++ 0x6a28, 0xa28a, 0x007f, 0x1a04, 0x317c, 0xa288, 0x2f6e, 0x210d,
++ 0xa18c, 0x00ff, 0x615a, 0xd0dc, 0x0130, 0x6828, 0xa08a, 0x007f,
++ 0x1a04, 0x317c, 0x6052, 0x6808, 0xa08a, 0x0100, 0x0a04, 0x317c,
++ 0xa08a, 0x0841, 0x1a04, 0x317c, 0xa084, 0x0007, 0x1904, 0x317c,
++ 0x680c, 0xa005, 0x0904, 0x317c, 0x6810, 0xa005, 0x0904, 0x317c,
++ 0x6848, 0x6940, 0xa10a, 0x1a04, 0x317c, 0x8001, 0x0904, 0x317c,
++ 0x684c, 0x6944, 0xa10a, 0x1a04, 0x317c, 0x8001, 0x0904, 0x317c,
++ 0x6804, 0xd0fc, 0x0560, 0x080c, 0x4026, 0x0904, 0x3179, 0x2009,
++ 0x0014, 0x7a2c, 0x7b28, 0x7c3c, 0x7d38, 0xa290, 0x0038, 0xa399,
++ 0x0000, 0x080c, 0x4067, 0x701b, 0x3a46, 0x0005, 0xade8, 0x000d,
++ 0x20a9, 0x0014, 0x2d98, 0x2069, 0xc66e, 0x2da0, 0x53a3, 0x7010,
++ 0xa0e8, 0x000d, 0x2001, 0xc672, 0x200c, 0xd1e4, 0x0140, 0x00c6,
++ 0x2061, 0x0100, 0x6004, 0xa085, 0x0b00, 0x6006, 0x00ce, 0x2009,
++ 0xc8f8, 0x200b, 0x0000, 0x2001, 0xc674, 0x2004, 0xd0ac, 0x0158,
++ 0x7824, 0x200a, 0x2009, 0x017f, 0x200a, 0x3200, 0xa084, 0x003f,
++ 0xa085, 0x3020, 0x2090, 0x20a9, 0x001c, 0x2d98, 0x2069, 0xc652,
++ 0x2da0, 0x53a3, 0x6814, 0xa08c, 0x00ff, 0x6142, 0x8007, 0xa084,
++ 0x00ff, 0x6046, 0x080c, 0x61f8, 0x080c, 0x576e, 0x080c, 0x57d7,
++ 0x6000, 0xa086, 0x0000, 0x1904, 0x3b41, 0x6808, 0x602a, 0x080c,
++ 0x25bb, 0x0006, 0x2001, 0x0100, 0x2004, 0xa082, 0x0005, 0x000e,
++ 0x0268, 0x2009, 0x0170, 0x200b, 0x0080, 0xe000, 0xe000, 0x200b,
++ 0x0000, 0x0036, 0x6b08, 0x080c, 0x2a4c, 0x003e, 0x6818, 0x691c,
++ 0x6a20, 0x6b24, 0x8007, 0x810f, 0x8217, 0x831f, 0x6016, 0x611a,
++ 0x621e, 0x6322, 0x6c04, 0xd4f4, 0x0148, 0x6830, 0x6934, 0x6a38,
++ 0x6b3c, 0x8007, 0x810f, 0x8217, 0x831f, 0x0010, 0xa084, 0xf0ff,
++ 0x6006, 0x610a, 0x620e, 0x6312, 0x8007, 0x810f, 0x8217, 0x831f,
++ 0x20a9, 0x0004, 0x20a1, 0xc90d, 0x40a1, 0x080c, 0x707c, 0x6904,
++ 0xd1fc, 0x0520, 0x00c6, 0x2009, 0x0000, 0x20a9, 0x0001, 0x6b70,
++ 0xd384, 0x01c8, 0x0020, 0x839d, 0x12b0, 0x3508, 0x8109, 0x080c,
++ 0x67ed, 0x6878, 0x6016, 0x6874, 0x2008, 0xa084, 0xff00, 0x8007,
++ 0x600a, 0xa184, 0x00ff, 0x6006, 0x8108, 0x1118, 0x6003, 0x0003,
++ 0x0010, 0x6003, 0x0001, 0x1f04, 0x3adb, 0x00ce, 0x2069, 0xc652,
++ 0x2001, 0xc8e5, 0x6a80, 0xa294, 0x0030, 0xa28e, 0x0000, 0x0170,
++ 0xa28e, 0x0010, 0x0118, 0xa28e, 0x0020, 0x0140, 0x2003, 0xaaaa,
++ 0x080c, 0x2a95, 0x2001, 0xc8d6, 0x2102, 0x0008, 0x2102, 0x00c6,
++ 0x2061, 0x0100, 0x602f, 0x0040, 0x602f, 0x0000, 0x00ce, 0x080c,
++ 0x5f22, 0x0128, 0x080c, 0x440b, 0x0110, 0x080c, 0x2a11, 0x60c8,
++ 0xa005, 0x01d0, 0x6003, 0x0001, 0x2009, 0x3b27, 0x00e0, 0x080c,
++ 0x5f22, 0x1178, 0x2011, 0x5df5, 0x080c, 0x6fad, 0x2011, 0x5de8,
++ 0x080c, 0x7070, 0x2001, 0xc8e6, 0x2003, 0x0000, 0x080c, 0x5e5a,
++ 0x0040, 0x080c, 0x4e5b, 0x0028, 0x6003, 0x0004, 0x2009, 0x3b41,
++ 0x0010, 0x0804, 0x3154, 0x2001, 0x0100, 0x2004, 0xa082, 0x0005,
++ 0x0258, 0x2001, 0x0170, 0x2004, 0xa084, 0x00ff, 0xa086, 0x004c,
++ 0x1118, 0x2091, 0x309d, 0x0817, 0x2091, 0x301d, 0x0817, 0x6000,
++ 0xa086, 0x0000, 0x0904, 0x3179, 0x2069, 0xc652, 0x7830, 0x6842,
++ 0x7834, 0x6846, 0x6804, 0xd0fc, 0x0118, 0x2009, 0x0030, 0x0010,
++ 0x2009, 0x001c, 0x2d00, 0x7a2c, 0x7b28, 0x7c3c, 0x7d38, 0x0804,
++ 0x406a, 0xa006, 0x080c, 0x2a11, 0x81ff, 0x1904, 0x3179, 0x080c,
++ 0x5f22, 0x1178, 0x2001, 0xc8e6, 0x2003, 0x0001, 0x2001, 0xc600,
++ 0x2003, 0x0001, 0xa085, 0x0001, 0x080c, 0x5f66, 0x080c, 0x5e5a,
++ 0x0020, 0x080c, 0x4f2c, 0x080c, 0x4e5b, 0x0804, 0x3154, 0x81ff,
++ 0x1904, 0x3179, 0x080c, 0x5f22, 0x1110, 0x0804, 0x3179, 0x6188,
++ 0x81ff, 0x0198, 0x703f, 0x0000, 0x2001, 0xcdc0, 0x2009, 0x0040,
++ 0x7a2c, 0x7b28, 0x7c3c, 0x7d38, 0x0126, 0x2091, 0x8000, 0x080c,
++ 0x406a, 0x701b, 0x3152, 0x012e, 0x0005, 0x703f, 0x0001, 0x00d6,
++ 0x2069, 0xcdc0, 0x20a9, 0x0040, 0x20a1, 0xcdc0, 0x2019, 0xffff,
++ 0x43a4, 0x6550, 0xa588, 0x2f6e, 0x210d, 0xa18c, 0x00ff, 0x216a,
++ 0xa00e, 0x2011, 0x0002, 0x2100, 0xa506, 0x01a8, 0x080c, 0x533d,
++ 0x1190, 0x6014, 0x821c, 0x0238, 0xa398, 0xcdc0, 0xa085, 0xff00,
++ 0x8007, 0x201a, 0x0038, 0xa398, 0xcdc0, 0x2324, 0xa4a4, 0xff00,
++ 0xa405, 0x201a, 0x8210, 0x8108, 0xa182, 0x0080, 0x1208, 0x0c18,
++ 0x8201, 0x8007, 0x2d0c, 0xa105, 0x206a, 0x00de, 0x20a9, 0x0040,
++ 0x20a1, 0xcdc0, 0x2099, 0xcdc0, 0x080c, 0x4ecb, 0x0804, 0x3b9c,
++ 0x080c, 0x404b, 0x0904, 0x317c, 0x00c6, 0x080c, 0x4026, 0x00ce,
++ 0x1120, 0x2009, 0x0002, 0x0804, 0x3179, 0x2001, 0xc653, 0x2004,
++ 0xd0b4, 0x0550, 0x7824, 0xa084, 0xff00, 0xa08e, 0x7e00, 0x0520,
++ 0xa08e, 0x7f00, 0x0508, 0xa08e, 0x8000, 0x01f0, 0x6000, 0xd08c,
++ 0x11d8, 0x6004, 0xa084, 0x00ff, 0xa086, 0x0006, 0x11a8, 0x6837,
++ 0x0000, 0x6838, 0xc0fd, 0x683a, 0x080c, 0xae11, 0x1120, 0x2009,
++ 0x0003, 0x0804, 0x3179, 0x7007, 0x0003, 0x701b, 0x3c28, 0x0005,
++ 0x080c, 0x404b, 0x0904, 0x317c, 0x20a9, 0x002b, 0x2c98, 0xade8,
++ 0x0002, 0x2da0, 0x53a3, 0x20a9, 0x0004, 0xac80, 0x0006, 0x2098,
++ 0xad80, 0x0006, 0x20a0, 0x080c, 0x4ecb, 0x20a9, 0x0004, 0xac80,
++ 0x000a, 0x2098, 0xad80, 0x000a, 0x20a0, 0x080c, 0x4ecb, 0x2d00,
++ 0x2009, 0x002b, 0x7a2c, 0x7b28, 0x7c3c, 0x7d38, 0x0804, 0x406a,
++ 0x81ff, 0x1904, 0x3179, 0x080c, 0x403b, 0x0904, 0x317c, 0x080c,
++ 0x551a, 0x0804, 0x3154, 0x81ff, 0x1904, 0x3179, 0x7828, 0xa08a,
++ 0x1000, 0x1a04, 0x317c, 0x080c, 0x404b, 0x0904, 0x317c, 0x080c,
++ 0x557d, 0x0904, 0x3179, 0x2019, 0x0004, 0xa00e, 0x080c, 0x552c,
++ 0x7924, 0x810f, 0x7a28, 0x0011, 0x0804, 0x3154, 0xa186, 0x00ff,
++ 0x0110, 0x0071, 0x0060, 0x2029, 0x007e, 0x2061, 0xc600, 0x6450,
++ 0x2400, 0xa506, 0x0110, 0x2508, 0x0019, 0x8529, 0x1ec8, 0x0005,
++ 0x080c, 0x533d, 0x1138, 0x2200, 0x8003, 0x800b, 0x810b, 0xa108,
++ 0x080c, 0x6fb9, 0x0005, 0x81ff, 0x1904, 0x3179, 0x080c, 0x403b,
++ 0x0904, 0x317c, 0x080c, 0x5403, 0x0904, 0x3179, 0x080c, 0x5523,
++ 0x0804, 0x3154, 0x81ff, 0x1904, 0x3179, 0x080c, 0x403b, 0x0904,
++ 0x317c, 0x080c, 0x5403, 0x0904, 0x3179, 0x080c, 0x5511, 0x0804,
++ 0x3154, 0x6100, 0x0804, 0x3154, 0x080c, 0x404b, 0x0904, 0x317c,
++ 0x2001, 0xc600, 0x2004, 0xa086, 0x0003, 0x1904, 0x3179, 0x00d6,
++ 0xace8, 0x000a, 0x7924, 0xd184, 0x0110, 0xace8, 0x0006, 0x680c,
++ 0x8007, 0x783e, 0x6808, 0x8007, 0x783a, 0x6b04, 0x831f, 0x6a00,
++ 0x8217, 0x00de, 0x6100, 0xa18c, 0x0200, 0x0804, 0x3154, 0x7824,
++ 0xa09c, 0x00ff, 0xa39a, 0x0003, 0x1a04, 0x3179, 0x6250, 0xa294,
++ 0x00ff, 0xa084, 0xff00, 0x8007, 0xa206, 0x1150, 0x2001, 0xc640,
++ 0x2009, 0x000c, 0x7a2c, 0x7b28, 0x7c3c, 0x7d38, 0x0804, 0x406a,
++ 0x81ff, 0x1904, 0x3179, 0x080c, 0x404b, 0x0904, 0x317c, 0x6004,
++ 0xa084, 0x00ff, 0xa086, 0x0006, 0x1904, 0x3179, 0x00c6, 0x080c,
++ 0x4026, 0x00ce, 0x0904, 0x3179, 0x6837, 0x0000, 0x6838, 0xc0fd,
++ 0x683a, 0x080c, 0xadbd, 0x0904, 0x3179, 0x7007, 0x0003, 0x701b,
++ 0x3d12, 0x0005, 0x6830, 0xa086, 0x0100, 0x0904, 0x3179, 0xad80,
++ 0x000e, 0x2009, 0x000c, 0x7a2c, 0x7b28, 0x7c3c, 0x7d38, 0x0804,
++ 0x406a, 0xa006, 0x080c, 0x2a11, 0x7824, 0xa084, 0x00ff, 0xa086,
++ 0x00ff, 0x0118, 0x81ff, 0x1904, 0x3179, 0x080c, 0x5f22, 0x0110,
++ 0x080c, 0x4f2c, 0x7828, 0xa08a, 0x1000, 0x1a04, 0x317c, 0x7924,
++ 0xa18c, 0xff00, 0x810f, 0xa186, 0x00ff, 0x0138, 0xa182, 0x007f,
++ 0x1a04, 0x317c, 0x2100, 0x080c, 0x29db, 0x0026, 0x00c6, 0x0126,
++ 0x2091, 0x8000, 0x2061, 0xc93a, 0x601b, 0x0000, 0x601f, 0x0000,
++ 0x080c, 0x5f22, 0x1178, 0x2001, 0xc8e6, 0x2003, 0x0001, 0x2001,
++ 0xc600, 0x2003, 0x0001, 0xa085, 0x0001, 0x080c, 0x5f66, 0x080c,
++ 0x5e5a, 0x0420, 0x2011, 0x0003, 0x080c, 0x8f0e, 0x2011, 0x0002,
++ 0x080c, 0x8f18, 0x080c, 0x8dee, 0x0036, 0x2019, 0x0000, 0x080c,
++ 0x8e79, 0x003e, 0x2061, 0x0100, 0x2001, 0xc615, 0x2004, 0xa084,
++ 0x00ff, 0x810f, 0xa105, 0x604a, 0x6043, 0x0090, 0x6043, 0x0010,
++ 0x2009, 0x002d, 0x2011, 0x4e90, 0x080c, 0x7036, 0x7924, 0xa18c,
++ 0xff00, 0x810f, 0x080c, 0x5f22, 0x1110, 0x2009, 0x00ff, 0x7a28,
++ 0x080c, 0x3c76, 0x012e, 0x00ce, 0x002e, 0x0804, 0x3154, 0x7924,
++ 0xa18c, 0xff00, 0x810f, 0x00c6, 0x080c, 0x52e1, 0x2c08, 0x00ce,
++ 0x1904, 0x317c, 0x0804, 0x3154, 0x81ff, 0x0120, 0x2009, 0x0001,
++ 0x0804, 0x3179, 0x60d4, 0xd0ac, 0x1130, 0xd09c, 0x1120, 0x2009,
++ 0x0005, 0x0804, 0x3179, 0x080c, 0x4026, 0x1120, 0x2009, 0x0002,
++ 0x0804, 0x3179, 0x7924, 0x7a2c, 0x7b28, 0x7c3c, 0x7d38, 0x080c,
++ 0x4067, 0x701b, 0x3dc4, 0x0005, 0x2009, 0x0080, 0x080c, 0x533d,
++ 0x1130, 0x6004, 0xa084, 0x00ff, 0xa086, 0x0006, 0x0120, 0x2021,
++ 0x400a, 0x0804, 0x3156, 0x00d6, 0xade8, 0x000d, 0x6900, 0x6a08,
++ 0x6b0c, 0x6c10, 0x6d14, 0x6e18, 0x6820, 0xa0be, 0x0100, 0x0904,
++ 0x3e3b, 0xa0be, 0x0112, 0x0904, 0x3e3b, 0xa0be, 0x0113, 0x0904,
++ 0x3e3b, 0xa0be, 0x0114, 0x0904, 0x3e3b, 0xa0be, 0x0117, 0x0904,
++ 0x3e3b, 0xa0be, 0x011a, 0x0904, 0x3e3b, 0xa0be, 0x011c, 0x0904,
++ 0x3e3b, 0xa0be, 0x0121, 0x05b0, 0xa0be, 0x0131, 0x0598, 0xa0be,
++ 0x0171, 0x05c8, 0xa0be, 0x0173, 0x05b0, 0xa0be, 0x01a1, 0x1120,
++ 0x6830, 0x8007, 0x6832, 0x04a8, 0xa0be, 0x0212, 0x0540, 0xa0be,
++ 0x0213, 0x0528, 0xa0be, 0x0214, 0x01b0, 0xa0be, 0x0217, 0x0168,
++ 0xa0be, 0x021a, 0x1120, 0x6838, 0x8007, 0x683a, 0x00e0, 0xa0be,
++ 0x0300, 0x01c8, 0x00de, 0x0804, 0x317c, 0xad80, 0x0010, 0x20a9,
++ 0x0007, 0x080c, 0x3e81, 0xad80, 0x000e, 0x20a9, 0x0001, 0x080c,
++ 0x3e81, 0x0048, 0xad80, 0x000c, 0x080c, 0x3e8f, 0x0050, 0xad80,
++ 0x000e, 0x080c, 0x3e8f, 0xad80, 0x000c, 0x20a9, 0x0001, 0x080c,
++ 0x3e81, 0x00c6, 0x080c, 0x4026, 0x0568, 0x6838, 0xc0fd, 0x683a,
++ 0x6837, 0x0119, 0x6853, 0x0000, 0x684f, 0x0020, 0x685b, 0x0001,
++ 0x810b, 0x697e, 0x6883, 0x0000, 0x6a86, 0x6b8a, 0x6c8e, 0x6d92,
++ 0x6996, 0x689b, 0x0000, 0x00ce, 0x00de, 0x6837, 0x0000, 0x6838,
++ 0xc0fd, 0x683a, 0x6823, 0x0000, 0x6804, 0x2068, 0x080c, 0xadd9,
++ 0x1120, 0x2009, 0x0003, 0x0804, 0x3179, 0x7007, 0x0003, 0x701b,
++ 0x3e78, 0x0005, 0x00ce, 0x00de, 0x2009, 0x0002, 0x0804, 0x3179,
++ 0x6820, 0xa086, 0x8001, 0x1904, 0x3154, 0x2009, 0x0004, 0x0804,
++ 0x3179, 0x0016, 0x2008, 0x2044, 0x8000, 0x204c, 0x8000, 0x290a,
++ 0x8108, 0x280a, 0x8108, 0x1f04, 0x3e83, 0x001e, 0x0005, 0x0016,
++ 0x00a6, 0x00b6, 0x2008, 0x2044, 0x8000, 0x204c, 0x8000, 0x2054,
++ 0x8000, 0x205c, 0x2b0a, 0x8108, 0x2a0a, 0x8108, 0x290a, 0x8108,
++ 0x280a, 0x00be, 0x00ae, 0x001e, 0x0005, 0x81ff, 0x0120, 0x2009,
++ 0x0001, 0x0804, 0x3179, 0x60d4, 0xd0ac, 0x1130, 0xd09c, 0x1120,
++ 0x2009, 0x0005, 0x0804, 0x3179, 0x7924, 0x2140, 0xa18c, 0xff00,
++ 0x810f, 0x60d4, 0xd0ac, 0x1120, 0xa182, 0x0080, 0x0a04, 0x317c,
++ 0xa182, 0x00ff, 0x1a04, 0x317c, 0x7a2c, 0x7b28, 0x6070, 0xa306,
++ 0x1140, 0x6074, 0xa24e, 0x0904, 0x317c, 0xa9cc, 0xff00, 0x0904,
++ 0x317c, 0x00c6, 0x080c, 0x3f6e, 0x2c68, 0x00ce, 0x0538, 0xa0c6,
++ 0x4000, 0x1180, 0x00c6, 0x0006, 0x2d60, 0x2009, 0x0000, 0x080c,
++ 0x55de, 0x1108, 0xc185, 0x6000, 0xd0bc, 0x0108, 0xc18d, 0x000e,
++ 0x00ce, 0x0088, 0xa0c6, 0x4007, 0x1110, 0x2408, 0x0060, 0xa0c6,
++ 0x4008, 0x1118, 0x2708, 0x2610, 0x0030, 0xa0c6, 0x4009, 0x1108,
++ 0x0010, 0x2001, 0x4006, 0x2020, 0x0804, 0x3156, 0x2d00, 0x7022,
++ 0x0016, 0x00b6, 0x00c6, 0x00e6, 0x2c70, 0x080c, 0x958d, 0x05d8,
++ 0x2d00, 0x601a, 0x080c, 0xb05e, 0x2e58, 0x00ee, 0x00e6, 0x00c6,
++ 0x080c, 0x4026, 0x00ce, 0x2b70, 0x1150, 0x080c, 0x95e3, 0x00ee,
++ 0x00ce, 0x00be, 0x001e, 0x2009, 0x0002, 0x0804, 0x3179, 0x6837,
++ 0x0000, 0x683b, 0x0000, 0x2d00, 0x6012, 0x6833, 0x0000, 0x6838,
++ 0xc0fd, 0xd88c, 0x0108, 0xc0f5, 0x683a, 0x0126, 0x2091, 0x8000,
++ 0x080c, 0x2e46, 0x012e, 0x601f, 0x0001, 0x2001, 0x0000, 0x080c,
++ 0x527f, 0x2001, 0x0002, 0x080c, 0x5291, 0x2009, 0x0002, 0x080c,
++ 0x9613, 0xa085, 0x0001, 0x00ee, 0x00ce, 0x00be, 0x001e, 0x1120,
++ 0x2009, 0x0003, 0x0804, 0x3179, 0x7007, 0x0003, 0x701b, 0x3f51,
++ 0x0005, 0x6830, 0xa086, 0x0100, 0x7020, 0x2060, 0x1138, 0x2009,
++ 0x0004, 0x6204, 0xa294, 0x00ff, 0x0804, 0x3179, 0x2009, 0x0000,
++ 0x6838, 0xd0f4, 0x1904, 0x3154, 0x080c, 0x55de, 0x1108, 0xc185,
++ 0x6000, 0xd0bc, 0x0108, 0xc18d, 0x0804, 0x3154, 0x00e6, 0x00d6,
++ 0x2029, 0x0000, 0x2001, 0xc635, 0x2004, 0xd0ac, 0x0138, 0x2021,
++ 0x0000, 0x20a9, 0x00ff, 0x2071, 0xc77b, 0x0030, 0x2021, 0x0080,
++ 0x20a9, 0x007f, 0x2071, 0xc7fb, 0x2e04, 0xa005, 0x1130, 0x2100,
++ 0xa406, 0x15a0, 0x2428, 0xc5fd, 0x0488, 0x2068, 0x6f10, 0x2700,
++ 0xa306, 0x11e0, 0x6e14, 0x2600, 0xa206, 0x11c0, 0x2400, 0xa106,
++ 0x1190, 0x2d60, 0xd884, 0x0598, 0x080c, 0x56ed, 0x1580, 0x2001,
++ 0x4000, 0x0470, 0x6004, 0xa084, 0x00ff, 0xa086, 0x0006, 0x1538,
++ 0x2001, 0x4000, 0x0428, 0x2001, 0x4007, 0x0410, 0x2400, 0xa106,
++ 0x1168, 0x6e14, 0x87ff, 0x1138, 0x86ff, 0x09a0, 0x2001, 0xc635,
++ 0x2004, 0xd0ac, 0x1978, 0x2001, 0x4008, 0x0090, 0x8420, 0x8e70,
++ 0x1f04, 0x3f84, 0x85ff, 0x1130, 0x2001, 0x4009, 0x0048, 0x2001,
++ 0x0001, 0x0030, 0x080c, 0x52e1, 0x1dd0, 0x6312, 0x6216, 0xa006,
++ 0xa005, 0x00de, 0x00ee, 0x0005, 0x81ff, 0x1904, 0x3179, 0x080c,
++ 0x4026, 0x0904, 0x3179, 0x6837, 0x0000, 0x6838, 0xc0fd, 0x683a,
++ 0x7824, 0xa005, 0x0904, 0x317c, 0xa096, 0x00ff, 0x0120, 0xa092,
++ 0x0004, 0x1a04, 0x317c, 0x2010, 0x2d18, 0x080c, 0x2df9, 0x0904,
++ 0x3179, 0x7007, 0x0003, 0x701b, 0x3ff6, 0x0005, 0x6830, 0xa086,
++ 0x0100, 0x0904, 0x3179, 0x0804, 0x3154, 0x7924, 0xa18c, 0xff00,
++ 0x810f, 0x60d4, 0xd0ac, 0x1120, 0xa182, 0x0080, 0x0a04, 0x317c,
++ 0xa182, 0x00ff, 0x1a04, 0x317c, 0x0126, 0x2091, 0x8000, 0x080c,
++ 0xacc1, 0x1188, 0xa190, 0xc77b, 0x2204, 0xa065, 0x0160, 0x080c,
++ 0x4f47, 0x2001, 0xc635, 0x2004, 0xd0ac, 0x0110, 0x6017, 0x0000,
++ 0x012e, 0x0804, 0x3154, 0x012e, 0x0804, 0x3179, 0x080c, 0x1602,
++ 0x0188, 0xa006, 0x6802, 0x7010, 0xa005, 0x1120, 0x2d00, 0x7012,
++ 0x7016, 0x0030, 0x7014, 0x6802, 0x2060, 0x2d00, 0x6006, 0x7016,
++ 0xad80, 0x000d, 0x0005, 0x7924, 0x810f, 0xa18c, 0x00ff, 0x080c,
++ 0x533d, 0x1130, 0x7e28, 0xa684, 0x3fff, 0xa082, 0x4000, 0x0208,
++ 0xa066, 0x8cff, 0x0005, 0x7e24, 0x860f, 0xa18c, 0x00ff, 0x080c,
++ 0x533d, 0x1128, 0xa6b4, 0x00ff, 0xa682, 0x4000, 0x0208, 0xa066,
++ 0x8cff, 0x0005, 0x0016, 0x7110, 0x81ff, 0x0128, 0x2168, 0x6904,
++ 0x080c, 0x1619, 0x0cc8, 0x7112, 0x7116, 0x001e, 0x0005, 0x2031,
++ 0x0001, 0x0010, 0x2031, 0x0000, 0x2061, 0xc6f2, 0x6606, 0x6112,
++ 0x600e, 0x6226, 0x632a, 0x642e, 0x6532, 0x2c10, 0x080c, 0x164d,
++ 0x7007, 0x0002, 0x701b, 0x3154, 0x0005, 0x00f6, 0x0126, 0x2091,
++ 0x8000, 0x2079, 0x0000, 0x2001, 0xc6b0, 0x2004, 0xa005, 0x1168,
++ 0x0e04, 0x4095, 0x7818, 0xd084, 0x1140, 0x7a22, 0x7b26, 0x7c2a,
++ 0x781b, 0x0001, 0x2091, 0x4080, 0x0408, 0x0016, 0x00c6, 0x00e6,
++ 0x2071, 0xc6a2, 0x7138, 0xa182, 0x0010, 0x0218, 0x7030, 0x2060,
++ 0x0078, 0x7030, 0xa0e0, 0x0004, 0xac82, 0xc6f2, 0x0210, 0x2061,
++ 0xc6b2, 0x2c00, 0x7032, 0x81ff, 0x1108, 0x7036, 0x8108, 0x713a,
++ 0x2262, 0x6306, 0x640a, 0x00ee, 0x00ce, 0x001e, 0x012e, 0x00fe,
++ 0x0005, 0x00e6, 0x2071, 0xc6a2, 0x7038, 0xa005, 0x0570, 0x0126,
++ 0x2091, 0x8000, 0x0e04, 0x40ec, 0x00f6, 0x2079, 0x0000, 0x7818,
++ 0xd084, 0x1508, 0x00c6, 0x7034, 0x2060, 0x2c04, 0x7822, 0x6004,
++ 0x7826, 0x6008, 0x782a, 0x781b, 0x0001, 0x2091, 0x4080, 0x7038,
++ 0x8001, 0x703a, 0xa005, 0x1130, 0x7033, 0xc6b2, 0x7037, 0xc6b2,
++ 0x00ce, 0x0048, 0xac80, 0x0004, 0xa0fa, 0xc6f2, 0x0210, 0x2001,
++ 0xc6b2, 0x7036, 0x00ce, 0x00fe, 0x012e, 0x00ee, 0x0005, 0x0026,
++ 0x2001, 0xc653, 0x2004, 0xd0c4, 0x0120, 0x2011, 0x8014, 0x080c,
++ 0x407d, 0x002e, 0x0005, 0x81ff, 0x1904, 0x3179, 0x0126, 0x2091,
++ 0x8000, 0x6030, 0xc08d, 0xc085, 0xc0ac, 0x6032, 0x080c, 0x5f22,
++ 0x1178, 0x2001, 0xc8e6, 0x2003, 0x0001, 0x2001, 0xc600, 0x2003,
++ 0x0001, 0xa085, 0x0001, 0x080c, 0x5f66, 0x080c, 0x5e5a, 0x0010,
++ 0x080c, 0x4e5b, 0x012e, 0x0804, 0x3154, 0x7824, 0x2008, 0xa18c,
++ 0xfffd, 0x1128, 0x61e0, 0xa10d, 0x61e2, 0x0804, 0x3154, 0x0804,
++ 0x317c, 0x81ff, 0x1904, 0x3179, 0x6000, 0xa086, 0x0003, 0x1904,
++ 0x3179, 0x2001, 0xc653, 0x2004, 0xd0ac, 0x1904, 0x3179, 0x080c,
++ 0x404b, 0x0904, 0x317c, 0x6004, 0xa084, 0x00ff, 0xa086, 0x0006,
++ 0x1120, 0x7828, 0xa005, 0x0904, 0x3154, 0x00c6, 0x080c, 0x4026,
++ 0x00ce, 0x0904, 0x3179, 0x6837, 0x0000, 0x6833, 0x0000, 0x6838,
++ 0xc0fd, 0x683a, 0x080c, 0xaea2, 0x0904, 0x3179, 0x7007, 0x0003,
++ 0x701b, 0x415b, 0x0005, 0x6830, 0xa086, 0x0100, 0x0904, 0x3179,
++ 0x0804, 0x3154, 0x2001, 0xc600, 0x2004, 0xa086, 0x0003, 0x1904,
++ 0x3179, 0x7f24, 0x7a2c, 0x7b28, 0x7c3c, 0x7d38, 0x080c, 0x4026,
++ 0x0904, 0x3179, 0x2009, 0x0000, 0x2031, 0x0000, 0x7023, 0x0000,
++ 0x702f, 0x0000, 0xad80, 0x0005, 0x7026, 0x20a0, 0x080c, 0x533d,
++ 0x1904, 0x41e1, 0x6004, 0xa0c4, 0x00ff, 0xa8c6, 0x0006, 0x0148,
++ 0xa0c4, 0xff00, 0xa8c6, 0x0600, 0x0120, 0x080c, 0x56ed, 0x1904,
++ 0x41e1, 0xd794, 0x1110, 0xd784, 0x0158, 0xac80, 0x0006, 0x2098,
++ 0x3400, 0x20a9, 0x0004, 0x53a3, 0x080c, 0x3e8f, 0xd794, 0x0148,
++ 0xac80, 0x000a, 0x2098, 0x3400, 0x20a9, 0x0004, 0x53a3, 0x080c,
++ 0x3e8f, 0xa186, 0x007e, 0x0178, 0xa186, 0x0080, 0x0160, 0x6004,
++ 0xa084, 0x00ff, 0xa0c2, 0x0006, 0x1210, 0xc1fd, 0x0020, 0x080c,
++ 0x55de, 0x1108, 0xc1fd, 0x21a2, 0xc1fc, 0xd794, 0x01d8, 0xac80,
++ 0x0000, 0x2098, 0x94a0, 0x20a9, 0x0002, 0x53a3, 0xac80, 0x0003,
++ 0x20a6, 0x94a0, 0xac80, 0x0004, 0x2098, 0x3400, 0x20a9, 0x0002,
++ 0x53a3, 0x080c, 0x3e81, 0xac80, 0x0026, 0x2098, 0x20a9, 0x0002,
++ 0x53a3, 0x0008, 0x94a0, 0xd794, 0x0110, 0xa6b0, 0x000b, 0xa6b0,
++ 0x0005, 0x8108, 0x2001, 0xc635, 0x2004, 0xd0ac, 0x0118, 0xa186,
++ 0x0100, 0x0040, 0xd78c, 0x0120, 0xa186, 0x0100, 0x0170, 0x0018,
++ 0xa186, 0x007e, 0x0150, 0xd794, 0x0118, 0xa686, 0x0020, 0x0010,
++ 0xa686, 0x0028, 0x0150, 0x0804, 0x417e, 0x86ff, 0x1120, 0x7120,
++ 0x810b, 0x0804, 0x3154, 0x702f, 0x0001, 0x711e, 0x7020, 0xa600,
++ 0x7022, 0x772a, 0x2061, 0xc6f2, 0x6007, 0x0000, 0x6612, 0x7024,
++ 0x600e, 0x6226, 0x632a, 0x642e, 0x6532, 0x2c10, 0x080c, 0x164d,
++ 0x7007, 0x0002, 0x701b, 0x421d, 0x0005, 0x702c, 0xa005, 0x1170,
++ 0x711c, 0x7024, 0x20a0, 0x7728, 0x2031, 0x0000, 0x2061, 0xc6f2,
++ 0x6224, 0x6328, 0x642c, 0x6530, 0x0804, 0x417e, 0x7120, 0x810b,
++ 0x0804, 0x3154, 0x2029, 0x007e, 0x7924, 0x7a28, 0x7b2c, 0x7c38,
++ 0xa184, 0xff00, 0x8007, 0xa0e2, 0x0020, 0x0a04, 0x317c, 0xa502,
++ 0x0a04, 0x317c, 0xa184, 0x00ff, 0xa0e2, 0x0020, 0x0a04, 0x317c,
++ 0xa502, 0x0a04, 0x317c, 0xa284, 0xff00, 0x8007, 0xa0e2, 0x0020,
++ 0x0a04, 0x317c, 0xa502, 0x0a04, 0x317c, 0xa284, 0x00ff, 0xa0e2,
++ 0x0020, 0x0a04, 0x317c, 0xa502, 0x0a04, 0x317c, 0xa384, 0xff00,
++ 0x8007, 0xa0e2, 0x0020, 0x0a04, 0x317c, 0xa502, 0x0a04, 0x317c,
++ 0xa384, 0x00ff, 0xa0e2, 0x0020, 0x0a04, 0x317c, 0xa502, 0x0a04,
++ 0x317c, 0xa484, 0xff00, 0x8007, 0xa0e2, 0x0020, 0x0a04, 0x317c,
++ 0xa502, 0x0a04, 0x317c, 0xa484, 0x00ff, 0xa0e2, 0x0020, 0x0a04,
++ 0x317c, 0xa502, 0x0a04, 0x317c, 0x2061, 0xc900, 0x6102, 0x6206,
++ 0x630a, 0x640e, 0x0804, 0x3154, 0x080c, 0x4026, 0x0904, 0x3179,
++ 0x2009, 0x0020, 0x7a2c, 0x7b28, 0x7c3c, 0x7d38, 0x080c, 0x4067,
++ 0x701b, 0x429b, 0x0005, 0x0126, 0xade8, 0x000d, 0x2001, 0x0138,
++ 0x2003, 0x0000, 0x00e6, 0x2071, 0xc96a, 0x700c, 0x7110, 0xa106,
++ 0x1de0, 0x00ee, 0x2091, 0x8000, 0x6800, 0xa005, 0x0904, 0x432f,
++ 0x6804, 0x2008, 0xa18c, 0xffe0, 0x1904, 0x432f, 0x680c, 0xa005,
++ 0x0904, 0x432f, 0xa082, 0xff01, 0x1a04, 0x432f, 0x6810, 0xa082,
++ 0x005c, 0x0a04, 0x432f, 0x6824, 0x2008, 0xa082, 0x0008, 0x0a04,
++ 0x432f, 0xa182, 0x0400, 0x1a04, 0x432f, 0x080c, 0x7394, 0x6820,
++ 0x8000, 0x6822, 0x6944, 0x6820, 0xa102, 0x0a04, 0x432f, 0x6828,
++ 0x6944, 0x810c, 0xa102, 0x0a04, 0x432f, 0x6840, 0xa082, 0x000f,
++ 0x1a04, 0x432f, 0x00d6, 0x6848, 0xa005, 0x0148, 0x2008, 0x2069,
++ 0xc600, 0x68e8, 0xa108, 0x68b0, 0xa102, 0x1208, 0x69ea, 0x00de,
++ 0x20a9, 0x0020, 0x2d98, 0x2069, 0xc682, 0x2da0, 0x53a3, 0x00d6,
++ 0x080c, 0x15e5, 0x2d00, 0x00de, 0x0904, 0x4346, 0x684e, 0x080c,
++ 0x725b, 0x05d8, 0x080c, 0x7158, 0x080c, 0x5695, 0x0580, 0x00c6,
++ 0x2061, 0x0100, 0x6104, 0xa18d, 0x8000, 0x6106, 0x610c, 0xa18d,
++ 0x0300, 0xa18c, 0xffbf, 0x610e, 0x2001, 0xc8d4, 0x200c, 0xa18d,
++ 0x0300, 0xa18c, 0xffbf, 0x2102, 0x6b10, 0x2061, 0xc96a, 0x6316,
++ 0x00ce, 0x685f, 0x0000, 0x2001, 0xc696, 0x2003, 0x0000, 0x080c,
++ 0x2a95, 0x2001, 0x0138, 0x2102, 0x012e, 0x0804, 0x3154, 0x080c,
++ 0x2a95, 0x2001, 0x0138, 0x2102, 0x012e, 0x0804, 0x317c, 0x080c,
++ 0x7475, 0x080c, 0x7484, 0x080c, 0x7147, 0x2001, 0xc695, 0x206c,
++ 0x080c, 0x1619, 0x2001, 0xc695, 0x2003, 0x0000, 0x2001, 0xc63a,
++ 0x2003, 0x0010, 0x080c, 0x2a95, 0x2001, 0x0138, 0x2102, 0x012e,
++ 0x0804, 0x3179, 0x2001, 0xc756, 0x2004, 0xa086, 0x0000, 0x0904,
++ 0x3179, 0x080c, 0x768f, 0x1904, 0x3179, 0x2001, 0xc8e5, 0x2004,
++ 0xa086, 0xaaaa, 0x0138, 0x2001, 0xc635, 0x2004, 0xa084, 0x0028,
++ 0x0904, 0x3170, 0x2001, 0xc600, 0x2004, 0xa086, 0x0003, 0x1904,
++ 0x3179, 0x7924, 0x810c, 0x7a2c, 0x7b28, 0x7c3c, 0x7d38, 0x080c,
++ 0x4026, 0x0904, 0x3179, 0x080c, 0x4067, 0x701b, 0x4380, 0x0005,
++ 0x080c, 0x958d, 0x0904, 0x3179, 0x2001, 0xc8d3, 0x2004, 0x601a,
++ 0x0016, 0x0026, 0x2001, 0xc61c, 0x2004, 0x8007, 0x6934, 0xa105,
++ 0x6836, 0x2001, 0xc61d, 0x2004, 0x8007, 0x683a, 0x002e, 0x001e,
++ 0x2d00, 0x6012, 0x601f, 0x0001, 0x2009, 0x0040, 0x080c, 0x9613,
++ 0x0804, 0x3154, 0x0804, 0x3179, 0x2001, 0xc756, 0x200c, 0xa18e,
++ 0x0000, 0x0904, 0x4402, 0x2001, 0x0101, 0x200c, 0xa18c, 0x7fff,
++ 0x2102, 0x2001, 0x0103, 0x200c, 0xa18c, 0xfeff, 0xa18c, 0xfdff,
++ 0xa18d, 0x0040, 0x2102, 0x2001, 0xc8d4, 0x200c, 0xa18c, 0xfeff,
++ 0xa18c, 0xfdff, 0xa18d, 0x0040, 0x2102, 0x2001, 0x0138, 0x2003,
++ 0x0000, 0x0126, 0x2091, 0x8000, 0x080c, 0x24f3, 0x012e, 0x0128,
++ 0x20a9, 0x006e, 0x1f04, 0x43d2, 0x0ca0, 0x2001, 0xc756, 0x2003,
++ 0x0000, 0x080c, 0x2a95, 0x2001, 0x0138, 0x2102, 0x0126, 0x2091,
++ 0x8000, 0x2001, 0xc695, 0x200c, 0x81ff, 0x0138, 0x2168, 0x080c,
++ 0x1619, 0x2001, 0xc695, 0x2003, 0x0000, 0x2001, 0xc8d3, 0x200c,
++ 0x81ff, 0x0138, 0x2168, 0x080c, 0x1619, 0x2001, 0xc8d3, 0x2003,
++ 0x0000, 0x2001, 0xc63a, 0x2003, 0x0010, 0x080c, 0x7475, 0x080c,
++ 0x7484, 0x012e, 0x0804, 0x3154, 0x7824, 0x00e6, 0x2071, 0xc682,
++ 0x00ee, 0x0804, 0x3154, 0x0006, 0x2001, 0xc653, 0x2004, 0xd0cc,
++ 0x000e, 0x0005, 0x0006, 0x2001, 0xc672, 0x2004, 0xd0bc, 0x000e,
++ 0x0005, 0x6168, 0x7a24, 0x6300, 0x82ff, 0x1118, 0x7926, 0x0804,
++ 0x3154, 0x83ff, 0x1904, 0x317c, 0x2001, 0xfff0, 0xa200, 0x1a04,
++ 0x317c, 0x2019, 0xffff, 0x606c, 0xa302, 0xa200, 0x0a04, 0x317c,
++ 0x7926, 0x626a, 0x0804, 0x3154, 0x2001, 0xc600, 0x2004, 0xa086,
++ 0x0003, 0x1904, 0x3179, 0x7c28, 0x7d24, 0x7e38, 0x7f2c, 0x080c,
++ 0x4026, 0x0904, 0x3179, 0x2009, 0x0000, 0x2019, 0x0000, 0x7023,
++ 0x0000, 0x702f, 0x0000, 0xad80, 0x0003, 0x7026, 0x20a0, 0xa1e0,
++ 0xc77b, 0x2c64, 0x8cff, 0x01b8, 0x6004, 0xa084, 0x00ff, 0xa086,
++ 0x0006, 0x0130, 0x6004, 0xa084, 0xff00, 0xa086, 0x0600, 0x1158,
++ 0x6014, 0x20a2, 0x94a0, 0x6010, 0x8007, 0xa105, 0x8007, 0x20a2,
++ 0x94a0, 0xa398, 0x0002, 0x8108, 0xa182, 0x00ff, 0x0120, 0xa386,
++ 0x002a, 0x0148, 0x08e0, 0x83ff, 0x1120, 0x7120, 0x810c, 0x0804,
++ 0x3154, 0x702f, 0x0001, 0x711e, 0x7020, 0xa300, 0x7022, 0x2061,
++ 0xc6f2, 0x6007, 0x0000, 0x6312, 0x7024, 0x600e, 0x6426, 0x652a,
++ 0x662e, 0x6732, 0x2c10, 0x080c, 0x164d, 0x7007, 0x0002, 0x701b,
++ 0x4492, 0x0005, 0x702c, 0xa005, 0x1168, 0x711c, 0x7024, 0x20a0,
++ 0x2019, 0x0000, 0x2061, 0xc6f2, 0x6424, 0x6528, 0x662c, 0x6730,
++ 0x0804, 0x444f, 0x7120, 0x810c, 0x0804, 0x3154, 0x81ff, 0x1904,
++ 0x3179, 0x60d4, 0xd0ac, 0x1118, 0xd09c, 0x0904, 0x3179, 0x080c,
++ 0x4026, 0x0904, 0x3179, 0x7924, 0x7a2c, 0x7b28, 0x7c3c, 0x7d38,
++ 0x080c, 0x4067, 0x701b, 0x44bd, 0x0005, 0x00d6, 0xade8, 0x000d,
++ 0x6828, 0xa0be, 0x7000, 0x0148, 0xa0be, 0x7100, 0x0130, 0xa0be,
++ 0x7200, 0x0118, 0x00de, 0x0804, 0x317c, 0x6820, 0x6924, 0x080c,
++ 0x29c7, 0x1510, 0x080c, 0x52e1, 0x11f8, 0x7122, 0x6612, 0x6516,
++ 0x6e18, 0x00c6, 0x080c, 0x4026, 0x01b8, 0x080c, 0x4026, 0x01a0,
++ 0x00ce, 0x00de, 0x6837, 0x0000, 0x6838, 0xc0fd, 0x683a, 0x6823,
++ 0x0000, 0x6804, 0x2068, 0x080c, 0xadf5, 0x0904, 0x3179, 0x7007,
++ 0x0003, 0x701b, 0x44f7, 0x0005, 0x00de, 0x0804, 0x3179, 0x7120,
++ 0x080c, 0x2f41, 0x6820, 0xa086, 0x8001, 0x0904, 0x3179, 0x2d00,
++ 0x701e, 0x6804, 0xa080, 0x0002, 0x0006, 0x20a9, 0x002a, 0x2098,
++ 0x20a0, 0x080c, 0x4ecb, 0x000e, 0xade8, 0x000d, 0x6a08, 0x6b0c,
++ 0x6c10, 0x6d14, 0x2061, 0xc6f2, 0x6007, 0x0000, 0x6e00, 0x6f28,
++ 0xa7c6, 0x7000, 0x1108, 0x0018, 0xa7c6, 0x7100, 0x1140, 0xa6c2,
++ 0x0004, 0x0a04, 0x317c, 0x2009, 0x0004, 0x0804, 0x406a, 0xa7c6,
++ 0x7200, 0x1904, 0x317c, 0xa6c2, 0x0054, 0x0a04, 0x317c, 0x600e,
++ 0x6013, 0x002a, 0x6226, 0x632a, 0x642e, 0x6532, 0x2c10, 0x080c,
++ 0x164d, 0x7007, 0x0002, 0x701b, 0x453e, 0x0005, 0x701c, 0x2068,
++ 0x6804, 0xa080, 0x0001, 0x2004, 0xa080, 0x0002, 0x0006, 0x20a9,
++ 0x002a, 0x2098, 0x20a0, 0x080c, 0x4ecb, 0x000e, 0x2009, 0x002a,
++ 0x2061, 0xc6f2, 0x6224, 0x6328, 0x642c, 0x6530, 0x0804, 0x406a,
++ 0x81ff, 0x1904, 0x3179, 0x792c, 0x2001, 0xc8e7, 0x2102, 0x080c,
++ 0x403b, 0x0904, 0x317c, 0x080c, 0x5403, 0x0904, 0x3179, 0x0126,
++ 0x2091, 0x8000, 0x080c, 0x5535, 0x012e, 0x0804, 0x3154, 0x7824,
++ 0xd08c, 0x1118, 0xd084, 0x0904, 0x3bf0, 0x080c, 0x404b, 0x0904,
++ 0x317c, 0x00c6, 0x080c, 0x4026, 0x00ce, 0x1120, 0x2009, 0x0002,
++ 0x0804, 0x3179, 0x6004, 0xa084, 0x00ff, 0xa086, 0x0006, 0x0128,
++ 0xa08e, 0x0004, 0x0110, 0xa08e, 0x0005, 0x15b8, 0x7824, 0xd08c,
++ 0x0120, 0x6000, 0xc08c, 0x6002, 0x0030, 0x2001, 0xc653, 0x2004,
++ 0xd0b4, 0x0904, 0x3c2c, 0x7824, 0xa084, 0xff00, 0xa08e, 0x7e00,
++ 0x0904, 0x3c2c, 0xa08e, 0x7f00, 0x0904, 0x3c2c, 0xa08e, 0x8000,
++ 0x0904, 0x3c2c, 0x6000, 0xd08c, 0x1904, 0x3c2c, 0x6837, 0x0000,
++ 0x6838, 0xc0fd, 0x683a, 0x080c, 0xae11, 0x1120, 0x2009, 0x0003,
++ 0x0804, 0x3179, 0x7007, 0x0003, 0x701b, 0x45bf, 0x0005, 0x080c,
++ 0x404b, 0x0904, 0x317c, 0x0804, 0x3c2c, 0x2009, 0xc631, 0x210c,
++ 0x81ff, 0x0120, 0x2009, 0x0001, 0x0804, 0x3179, 0x2001, 0xc600,
++ 0x2004, 0xa086, 0x0003, 0x0120, 0x2009, 0x0007, 0x0804, 0x3179,
++ 0x2001, 0xc653, 0x2004, 0xd0ac, 0x0120, 0x2009, 0x0008, 0x0804,
++ 0x3179, 0x609c, 0xd0a4, 0x1118, 0xd0ac, 0x1904, 0x3c2c, 0x6837,
++ 0x0000, 0x6833, 0x0000, 0x6838, 0xc0fd, 0x683a, 0x080c, 0xaea2,
++ 0x1120, 0x2009, 0x0003, 0x0804, 0x3179, 0x7007, 0x0003, 0x701b,
++ 0x45fa, 0x0005, 0x6830, 0xa086, 0x0100, 0x1120, 0x2009, 0x0004,
++ 0x0804, 0x3179, 0x080c, 0x404b, 0x0904, 0x317c, 0x0804, 0x458e,
++ 0x81ff, 0x2009, 0x0001, 0x1904, 0x3179, 0x6000, 0xa086, 0x0003,
++ 0x2009, 0x0007, 0x1904, 0x3179, 0x2001, 0xc653, 0x2004, 0xd0ac,
++ 0x2009, 0x0008, 0x1904, 0x3179, 0x080c, 0x404b, 0x0904, 0x317c,
++ 0x6004, 0xa084, 0x00ff, 0xa086, 0x0006, 0x2009, 0x0009, 0x1904,
++ 0x3179, 0x00c6, 0x080c, 0x4026, 0x00ce, 0x2009, 0x0002, 0x0904,
++ 0x3179, 0x6837, 0x0000, 0x6833, 0x0000, 0x6838, 0xc0fd, 0x683a,
++ 0x7928, 0xa194, 0xff00, 0xa18c, 0x00ff, 0xa006, 0x82ff, 0x1128,
++ 0xc0ed, 0x6952, 0x792c, 0x6956, 0x0048, 0xa28e, 0x0100, 0x1904,
++ 0x317c, 0xc0e5, 0x6853, 0x0000, 0x6857, 0x0000, 0x683e, 0x080c,
++ 0xb05f, 0x2009, 0x0003, 0x0904, 0x3179, 0x7007, 0x0003, 0x701b,
++ 0x465a, 0x0005, 0x6830, 0xa086, 0x0100, 0x2009, 0x0004, 0x0904,
++ 0x3179, 0x0804, 0x3154, 0x81ff, 0x2009, 0x0001, 0x1904, 0x3179,
++ 0x6000, 0xa086, 0x0003, 0x2009, 0x0007, 0x1904, 0x3179, 0x080c,
++ 0x404b, 0x0904, 0x317c, 0x6004, 0xa084, 0x00ff, 0xa086, 0x0006,
++ 0x2009, 0x0009, 0x1904, 0x3179, 0x00c6, 0x080c, 0x4026, 0x00ce,
++ 0x2009, 0x0002, 0x0904, 0x3179, 0xad80, 0x000f, 0x2009, 0x0008,
++ 0x7a2c, 0x7b28, 0x7c3c, 0x7d38, 0x080c, 0x4067, 0x701b, 0x4691,
++ 0x0005, 0x00d6, 0xade8, 0x000f, 0x6800, 0xa086, 0x0500, 0x1140,
++ 0x6804, 0xa005, 0x1128, 0x6808, 0xa084, 0xff00, 0x1108, 0x0018,
++ 0x00de, 0x1904, 0x317c, 0x00de, 0x6837, 0x0000, 0x6833, 0x0000,
++ 0x6838, 0xc0fd, 0x683a, 0x00c6, 0x080c, 0x404b, 0x1118, 0x00ce,
++ 0x0804, 0x317c, 0x080c, 0xb0ae, 0x2009, 0x0003, 0x00ce, 0x0904,
++ 0x3179, 0x7007, 0x0003, 0x701b, 0x46be, 0x0005, 0x6830, 0xa086,
++ 0x0100, 0x2009, 0x0004, 0x0904, 0x3179, 0x0804, 0x3154, 0x81ff,
++ 0x0120, 0x2009, 0x0001, 0x0804, 0x3179, 0x6000, 0xa086, 0x0003,
++ 0x0120, 0x2009, 0x0007, 0x0804, 0x3179, 0x7e24, 0x860f, 0xa18c,
++ 0x00ff, 0xa6b4, 0x00ff, 0x080c, 0x533d, 0x1904, 0x317c, 0xa186,
++ 0x007f, 0x0150, 0x6004, 0xa084, 0x00ff, 0xa086, 0x0006, 0x0120,
++ 0x2009, 0x0009, 0x0804, 0x3179, 0x00c6, 0x080c, 0x4026, 0x00ce,
++ 0x1120, 0x2009, 0x0002, 0x0804, 0x3179, 0x6837, 0x0000, 0x6838,
++ 0xc0fd, 0x683a, 0x2001, 0x0100, 0x8007, 0x680a, 0x080c, 0xae2c,
++ 0x1120, 0x2009, 0x0003, 0x0804, 0x3179, 0x7007, 0x0003, 0x701b,
++ 0x470a, 0x0005, 0x6808, 0x8007, 0xa086, 0x0100, 0x1120, 0x2009,
++ 0x0004, 0x0804, 0x3179, 0x68b0, 0x6836, 0x6810, 0x8007, 0xa084,
++ 0x00ff, 0x800c, 0x6814, 0x8007, 0xa084, 0x00ff, 0x8004, 0xa080,
++ 0x0002, 0xa108, 0xad80, 0x0004, 0x7a2c, 0x7b28, 0x7c3c, 0x7d38,
++ 0x0804, 0x406a, 0x080c, 0x4026, 0x1120, 0x2009, 0x0002, 0x0804,
++ 0x3179, 0x7924, 0xa194, 0xff00, 0xa18c, 0x00ff, 0x8217, 0x82ff,
++ 0x0110, 0x0804, 0x317c, 0x2009, 0x001a, 0x7a2c, 0x7b28, 0x7c3c,
++ 0x7d38, 0x080c, 0x4067, 0x701b, 0x4746, 0x0005, 0x2001, 0xc62a,
++ 0x2003, 0x0001, 0xad80, 0x000d, 0x2098, 0x20a9, 0x001a, 0x20a1,
++ 0xc90d, 0x53a3, 0x0804, 0x3154, 0x080c, 0x4026, 0x1120, 0x2009,
++ 0x0002, 0x0804, 0x3179, 0x7924, 0xa194, 0xff00, 0xa18c, 0x00ff,
++ 0x8217, 0x82ff, 0x0110, 0x0804, 0x317c, 0x2099, 0xc90d, 0x20a0,
++ 0x20a9, 0x001a, 0x53a3, 0x2009, 0x001a, 0x7a2c, 0x7b28, 0x7c3c,
++ 0x7d38, 0x0804, 0x406a, 0x7824, 0xa08a, 0x1000, 0x1a04, 0x317c,
++ 0x0126, 0x2091, 0x8000, 0x8003, 0x800b, 0x810b, 0xa108, 0x00c6,
++ 0x2061, 0xc93a, 0x6142, 0x00ce, 0x012e, 0x0804, 0x3154, 0x00c6,
++ 0x080c, 0x5f22, 0x1188, 0x2001, 0xc8e6, 0x2003, 0x0001, 0x2001,
++ 0xc600, 0x2003, 0x0001, 0xa085, 0x0001, 0x080c, 0x5f66, 0x080c,
++ 0x5e5a, 0x080c, 0x1519, 0x0038, 0x2061, 0xc600, 0x6030, 0xc09d,
++ 0x6032, 0x080c, 0x4e5b, 0x00ce, 0x0005, 0x0126, 0x2091, 0x8000,
++ 0x00c6, 0x2061, 0xc93a, 0x7924, 0x6152, 0x614e, 0x6057, 0x0000,
++ 0x604b, 0x0009, 0x7838, 0x606a, 0x783c, 0x6066, 0x7828, 0x6062,
++ 0x782c, 0x605e, 0x2061, 0xc8e8, 0x2001, 0xc94f, 0x600e, 0x6013,
++ 0x0001, 0x6017, 0x0002, 0x6007, 0x0000, 0x6037, 0x0000, 0x00ce,
++ 0x012e, 0x0804, 0x3154, 0x0126, 0x00c6, 0x00e6, 0x2061, 0x0100,
++ 0x2071, 0xc600, 0x6044, 0xd0a4, 0x11b0, 0xd084, 0x0118, 0x080c,
++ 0x4942, 0x0068, 0xd08c, 0x0118, 0x080c, 0x4863, 0x0040, 0xd094,
++ 0x0118, 0x080c, 0x4834, 0x0018, 0xd09c, 0x0108, 0x0061, 0x00ee,
++ 0x00ce, 0x012e, 0x0005, 0x0016, 0x6128, 0xd19c, 0x1110, 0xc19d,
++ 0x612a, 0x001e, 0x0ca0, 0x624c, 0xa286, 0xf0f0, 0x1150, 0x6048,
++ 0xa086, 0xf0f0, 0x0130, 0x624a, 0x6043, 0x0090, 0x6043, 0x0010,
++ 0x0490, 0xa294, 0xff00, 0xa296, 0xf700, 0x0178, 0x7134, 0xd1a4,
++ 0x1160, 0x6240, 0xa295, 0x0100, 0x6242, 0xa294, 0x0010, 0x0128,
++ 0x2009, 0x00f7, 0x080c, 0x4eeb, 0x00f0, 0x6040, 0xa084, 0x0010,
++ 0xa085, 0x0140, 0x6042, 0x6043, 0x0000, 0x707b, 0x0000, 0x7097,
++ 0x0001, 0x70bb, 0x0000, 0x70d7, 0x0000, 0x2009, 0xcdc0, 0x200b,
++ 0x0000, 0x708b, 0x0000, 0x707f, 0x000a, 0x2009, 0x000a, 0x2011,
++ 0x4e11, 0x080c, 0x7036, 0x0005, 0x0156, 0x2001, 0xc674, 0x2004,
++ 0xd08c, 0x0110, 0x7053, 0xffff, 0x707c, 0xa005, 0x1510, 0x2011,
++ 0x4e11, 0x080c, 0x6fad, 0x6040, 0xa094, 0x0010, 0xa285, 0x0020,
++ 0x6042, 0x20a9, 0x00c8, 0x6044, 0xd08c, 0x1168, 0x1f04, 0x484b,
++ 0x6242, 0x708f, 0x0000, 0x6040, 0xa094, 0x0010, 0xa285, 0x0080,
++ 0x6042, 0x6242, 0x0030, 0x6242, 0x708f, 0x0000, 0x7083, 0x0000,
++ 0x0000, 0x015e, 0x0005, 0x7080, 0xa08a, 0x0003, 0x1210, 0x0023,
++ 0x0010, 0x080c, 0x1519, 0x0005, 0x486f, 0x48bf, 0x4941, 0x00f6,
++ 0x7083, 0x0001, 0x20e1, 0xa000, 0xe000, 0x20e1, 0x8700, 0x080c,
++ 0x25bb, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x2079, 0xcc00, 0x207b,
++ 0x2200, 0x7807, 0x00ef, 0x780b, 0x0000, 0x780f, 0x00ef, 0x7813,
++ 0x0138, 0x7817, 0x0000, 0x781b, 0x0000, 0x781f, 0x0000, 0x7823,
++ 0xffff, 0x7827, 0xffff, 0x782b, 0x0000, 0x782f, 0x0000, 0x2079,
++ 0xcc0c, 0x207b, 0x1101, 0x7807, 0x0000, 0x2099, 0xc605, 0x20a1,
++ 0xcc0e, 0x20a9, 0x0004, 0x53a3, 0x2079, 0xcc12, 0x207b, 0x0000,
++ 0x7807, 0x0000, 0x2099, 0xcc00, 0x20a1, 0x020b, 0x20a9, 0x0014,
++ 0x53a6, 0x60c3, 0x000c, 0x600f, 0x0000, 0x080c, 0x4e42, 0x00fe,
++ 0x7087, 0x0000, 0x6043, 0x0008, 0x6043, 0x0000, 0x0005, 0x00d6,
++ 0x7084, 0x7087, 0x0000, 0xa025, 0x0904, 0x4929, 0x6020, 0xd0b4,
++ 0x1904, 0x4927, 0x7194, 0x81ff, 0x0904, 0x4917, 0xa486, 0x000c,
++ 0x1904, 0x4922, 0xa480, 0x0018, 0x8004, 0x20a8, 0x2011, 0xcc80,
++ 0x2019, 0xcc00, 0x220c, 0x2304, 0xa106, 0x11b8, 0x8210, 0x8318,
++ 0x1f04, 0x48da, 0x6043, 0x0004, 0x608b, 0xbc94, 0x608f, 0xf0f0,
++ 0x6043, 0x0006, 0x7083, 0x0002, 0x708f, 0x0002, 0x2009, 0x07d0,
++ 0x2011, 0x4e18, 0x080c, 0x7036, 0x0490, 0x2069, 0xcc80, 0x6930,
++ 0xa18e, 0x1101, 0x1538, 0x6834, 0xa005, 0x1520, 0x6900, 0xa18c,
++ 0x00ff, 0x1118, 0x6804, 0xa005, 0x0190, 0x2011, 0xcc8e, 0x2019,
++ 0xc605, 0x20a9, 0x0004, 0x220c, 0x2304, 0xa102, 0x0230, 0x1190,
++ 0x8210, 0x8318, 0x1f04, 0x490b, 0x0068, 0x7097, 0x0000, 0x20e1,
++ 0x9080, 0x20e1, 0x4000, 0x2099, 0xcc80, 0x20a1, 0x020b, 0x20a9,
++ 0x0014, 0x53a6, 0x6043, 0x0008, 0x6043, 0x0000, 0x0010, 0x00de,
++ 0x0005, 0x6040, 0xa085, 0x0100, 0x6042, 0x6020, 0xd0b4, 0x1db8,
++ 0x60c3, 0x000c, 0x2011, 0xc931, 0x2013, 0x0000, 0x7087, 0x0000,
++ 0x20e1, 0x9080, 0x60a3, 0x0056, 0x60a7, 0x9575, 0x080c, 0x8bec,
++ 0x0c30, 0x0005, 0x708c, 0xa08a, 0x001d, 0x1210, 0x0023, 0x0010,
++ 0x080c, 0x1519, 0x0005, 0x4975, 0x4984, 0x49ac, 0x49c5, 0x49e9,
++ 0x4a11, 0x4a35, 0x4a66, 0x4a8a, 0x4ab2, 0x4ae9, 0x4b11, 0x4b2d,
++ 0x4b43, 0x4b63, 0x4b76, 0x4b7e, 0x4bae, 0x4bd2, 0x4bfa, 0x4c1e,
++ 0x4c4f, 0x4c8c, 0x4cbb, 0x4cd7, 0x4d16, 0x4d36, 0x4d4f, 0x4d50,
++ 0x00c6, 0x2061, 0xc600, 0x6003, 0x0007, 0x2061, 0x0100, 0x6004,
++ 0xa084, 0xfff9, 0x6006, 0x00ce, 0x0005, 0x608b, 0xbc94, 0x608f,
++ 0xf0f0, 0x6043, 0x0002, 0x708f, 0x0001, 0x2009, 0x07d0, 0x2011,
++ 0x4e18, 0x080c, 0x7036, 0x0005, 0x00f6, 0x7084, 0xa086, 0x0014,
++ 0x1508, 0x6043, 0x0000, 0x6020, 0xd0b4, 0x11e0, 0x2079, 0xcc80,
++ 0x7a30, 0xa296, 0x1102, 0x11a0, 0x7834, 0xa005, 0x1188, 0x7a38,
++ 0xd2fc, 0x0128, 0x70b8, 0xa005, 0x1110, 0x70bb, 0x0001, 0x2011,
++ 0x4e18, 0x080c, 0x6fad, 0x708f, 0x0010, 0x080c, 0x4b7e, 0x0010,
++ 0x080c, 0x4e5b, 0x00fe, 0x0005, 0x708f, 0x0003, 0x6043, 0x0004,
++ 0x2011, 0x4e18, 0x080c, 0x6fad, 0x080c, 0x4ed3, 0x20a3, 0x1102,
++ 0x20a3, 0x0000, 0x20a9, 0x000a, 0x20a3, 0x0000, 0x1f04, 0x49bc,
++ 0x60c3, 0x0014, 0x080c, 0x4e42, 0x0005, 0x00f6, 0x7084, 0xa005,
++ 0x01f0, 0x2011, 0x4e18, 0x080c, 0x6fad, 0xa086, 0x0014, 0x11a8,
++ 0x2079, 0xcc80, 0x7a30, 0xa296, 0x1102, 0x1178, 0x7834, 0xa005,
++ 0x1160, 0x7a38, 0xd2fc, 0x0128, 0x70b8, 0xa005, 0x1110, 0x70bb,
++ 0x0001, 0x708f, 0x0004, 0x0029, 0x0010, 0x080c, 0x4e5b, 0x00fe,
++ 0x0005, 0x708f, 0x0005, 0x080c, 0x4ed3, 0x20a3, 0x1103, 0x20a3,
++ 0x0000, 0x3430, 0x2011, 0xcc8e, 0x080c, 0x4f24, 0x1160, 0x7078,
++ 0xa005, 0x1148, 0x7150, 0xa186, 0xffff, 0x0128, 0x080c, 0x4ddc,
++ 0x0110, 0x080c, 0x4f02, 0x20a9, 0x0008, 0x2298, 0x26a0, 0x53a6,
++ 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x0014, 0x080c, 0x4e42,
++ 0x0005, 0x00f6, 0x7084, 0xa005, 0x01f0, 0x2011, 0x4e18, 0x080c,
++ 0x6fad, 0xa086, 0x0014, 0x11a8, 0x2079, 0xcc80, 0x7a30, 0xa296,
++ 0x1103, 0x1178, 0x7834, 0xa005, 0x1160, 0x7a38, 0xd2fc, 0x0128,
++ 0x70b8, 0xa005, 0x1110, 0x70bb, 0x0001, 0x708f, 0x0006, 0x0029,
++ 0x0010, 0x080c, 0x4e5b, 0x00fe, 0x0005, 0x708f, 0x0007, 0x080c,
++ 0x4ed3, 0x20a3, 0x1104, 0x20a3, 0x0000, 0x3430, 0x2011, 0xcc8e,
++ 0x080c, 0x4f24, 0x11a8, 0x7078, 0xa005, 0x1190, 0x7158, 0xa186,
++ 0xffff, 0x0170, 0xa180, 0x2f6e, 0x200d, 0xa18c, 0xff00, 0x810f,
++ 0x080c, 0x4ddc, 0x0128, 0x080c, 0x4412, 0x0110, 0x080c, 0x2a11,
++ 0x20a9, 0x0008, 0x2298, 0x26a0, 0x53a6, 0x20a3, 0x0000, 0x20a3,
++ 0x0000, 0x60c3, 0x0014, 0x080c, 0x4e42, 0x0005, 0x00f6, 0x7084,
++ 0xa005, 0x01f0, 0x2011, 0x4e18, 0x080c, 0x6fad, 0xa086, 0x0014,
++ 0x11a8, 0x2079, 0xcc80, 0x7a30, 0xa296, 0x1104, 0x1178, 0x7834,
++ 0xa005, 0x1160, 0x7a38, 0xd2fc, 0x0128, 0x70b8, 0xa005, 0x1110,
++ 0x70bb, 0x0001, 0x708f, 0x0008, 0x0029, 0x0010, 0x080c, 0x4e5b,
++ 0x00fe, 0x0005, 0x708f, 0x0009, 0x080c, 0x4ed3, 0x20a3, 0x1105,
++ 0x20a3, 0x0100, 0x3430, 0x080c, 0x4f24, 0x1150, 0x7078, 0xa005,
++ 0x1138, 0x080c, 0x4d51, 0x1170, 0xa085, 0x0001, 0x080c, 0x2a11,
++ 0x20a9, 0x0008, 0x2099, 0xcc8e, 0x26a0, 0x53a6, 0x20a3, 0x0000,
++ 0x20a3, 0x0000, 0x60c3, 0x0014, 0x080c, 0x4e42, 0x0010, 0x080c,
++ 0x4968, 0x0005, 0x00f6, 0x7084, 0xa005, 0x0588, 0x2011, 0x4e18,
++ 0x080c, 0x6fad, 0xa086, 0x0014, 0x1540, 0x2079, 0xcc80, 0x7a30,
++ 0xa296, 0x1105, 0x1510, 0x7834, 0x2011, 0x0100, 0xa21e, 0x1160,
++ 0x7a38, 0xd2fc, 0x0128, 0x70b8, 0xa005, 0x1110, 0x70bb, 0x0001,
++ 0x708f, 0x000a, 0x00b1, 0x0098, 0xa005, 0x1178, 0x7a38, 0xd2fc,
++ 0x0128, 0x70b8, 0xa005, 0x1110, 0x70bb, 0x0001, 0x708b, 0x0000,
++ 0x708f, 0x000e, 0x080c, 0x4b63, 0x0010, 0x080c, 0x4e5b, 0x00fe,
++ 0x0005, 0x708f, 0x000b, 0x2011, 0xcc0e, 0x22a0, 0x20a9, 0x0040,
++ 0x2019, 0xffff, 0x43a4, 0x20a9, 0x0002, 0x2009, 0x0000, 0x41a4,
++ 0x080c, 0x4ed3, 0x20a3, 0x1106, 0x20a3, 0x0000, 0x080c, 0x4f24,
++ 0x0118, 0x2013, 0x0000, 0x0020, 0x7054, 0xa085, 0x0100, 0x2012,
++ 0x2298, 0x20a9, 0x0042, 0x53a6, 0x60c3, 0x0084, 0x080c, 0x4e42,
++ 0x0005, 0x00f6, 0x7084, 0xa005, 0x01b0, 0x2011, 0x4e18, 0x080c,
++ 0x6fad, 0xa086, 0x0084, 0x1168, 0x2079, 0xcc80, 0x7a30, 0xa296,
++ 0x1106, 0x1138, 0x7834, 0xa005, 0x1120, 0x708f, 0x000c, 0x0029,
++ 0x0010, 0x080c, 0x4e5b, 0x00fe, 0x0005, 0x708f, 0x000d, 0x080c,
++ 0x4ed3, 0x20a3, 0x1107, 0x20a3, 0x0000, 0x2099, 0xcc8e, 0x20a9,
++ 0x0040, 0x53a6, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x0084,
++ 0x080c, 0x4e42, 0x0005, 0x00f6, 0x7084, 0xa005, 0x01d0, 0x2011,
++ 0x4e18, 0x080c, 0x6fad, 0xa086, 0x0084, 0x1188, 0x2079, 0xcc80,
++ 0x7a30, 0xa296, 0x1107, 0x1158, 0x7834, 0xa005, 0x1140, 0x708b,
++ 0x0001, 0x080c, 0x4ec5, 0x708f, 0x000e, 0x0029, 0x0010, 0x080c,
++ 0x4e5b, 0x00fe, 0x0005, 0x708f, 0x000f, 0x7087, 0x0000, 0x608b,
++ 0xbc85, 0x608f, 0xb5b5, 0x6043, 0x0005, 0x6043, 0x0004, 0x2009,
++ 0x07d0, 0x2011, 0x4e18, 0x080c, 0x6fa1, 0x0005, 0x7084, 0xa005,
++ 0x0120, 0x2011, 0x4e18, 0x080c, 0x6fad, 0x0005, 0x708f, 0x0011,
++ 0x080c, 0x4f24, 0x11a0, 0x7170, 0x81ff, 0x0188, 0x2009, 0x0000,
++ 0x7074, 0xa084, 0x00ff, 0x080c, 0x29c7, 0xa186, 0x007e, 0x0138,
++ 0xa186, 0x0080, 0x0120, 0x2011, 0xcc8e, 0x080c, 0x4ddc, 0x20e1,
++ 0x9080, 0x20e1, 0x4000, 0x2099, 0xcc80, 0x20a1, 0x020b, 0x7484,
++ 0xa480, 0x0018, 0xa080, 0x0007, 0xa084, 0x03f8, 0x8004, 0x20a8,
++ 0x53a6, 0x60c3, 0x0014, 0x080c, 0x4e42, 0x0005, 0x00f6, 0x7084,
++ 0xa005, 0x01f0, 0x2011, 0x4e18, 0x080c, 0x6fad, 0xa086, 0x0014,
++ 0x11a8, 0x2079, 0xcc80, 0x7a30, 0xa296, 0x1103, 0x1178, 0x7834,
++ 0xa005, 0x1160, 0x7a38, 0xd2fc, 0x0128, 0x70b8, 0xa005, 0x1110,
++ 0x70bb, 0x0001, 0x708f, 0x0012, 0x0029, 0x0010, 0x080c, 0x4e5b,
++ 0x00fe, 0x0005, 0x708f, 0x0013, 0x080c, 0x4edf, 0x20a3, 0x1103,
++ 0x20a3, 0x0000, 0x3430, 0x2011, 0xcc8e, 0x080c, 0x4f24, 0x1160,
++ 0x7078, 0xa005, 0x1148, 0x7150, 0xa186, 0xffff, 0x0128, 0x080c,
++ 0x4ddc, 0x0110, 0x080c, 0x4f02, 0x20a9, 0x0008, 0x2298, 0x26a0,
++ 0x53a6, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x0014, 0x080c,
++ 0x4e42, 0x0005, 0x00f6, 0x7084, 0xa005, 0x01f0, 0x2011, 0x4e18,
++ 0x080c, 0x6fad, 0xa086, 0x0014, 0x11a8, 0x2079, 0xcc80, 0x7a30,
++ 0xa296, 0x1104, 0x1178, 0x7834, 0xa005, 0x1160, 0x7a38, 0xd2fc,
++ 0x0128, 0x70b8, 0xa005, 0x1110, 0x70bb, 0x0001, 0x708f, 0x0014,
++ 0x0029, 0x0010, 0x080c, 0x4e5b, 0x00fe, 0x0005, 0x708f, 0x0015,
++ 0x080c, 0x4edf, 0x20a3, 0x1104, 0x20a3, 0x0000, 0x3430, 0x2011,
++ 0xcc8e, 0x080c, 0x4f24, 0x11a8, 0x7078, 0xa005, 0x1190, 0x7158,
++ 0xa186, 0xffff, 0x0170, 0xa180, 0x2f6e, 0x200d, 0xa18c, 0xff00,
++ 0x810f, 0x080c, 0x4ddc, 0x0128, 0x080c, 0x4412, 0x0110, 0x080c,
++ 0x2a11, 0x20a9, 0x0008, 0x2298, 0x26a0, 0x53a6, 0x20a3, 0x0000,
++ 0x20a3, 0x0000, 0x60c3, 0x0014, 0x080c, 0x4e42, 0x0005, 0x00f6,
++ 0x7084, 0xa005, 0x05b8, 0x2011, 0x4e18, 0x080c, 0x6fad, 0xa086,
++ 0x0014, 0x1570, 0x2079, 0xcc80, 0x7a30, 0xa296, 0x1105, 0x1540,
++ 0x7834, 0x2011, 0x0100, 0xa21e, 0x1148, 0x7a38, 0xd2fc, 0x0128,
++ 0x70b8, 0xa005, 0x1110, 0x70bb, 0x0001, 0x0060, 0xa005, 0x11c0,
++ 0x7a38, 0xd2fc, 0x0128, 0x70b8, 0xa005, 0x1110, 0x70bb, 0x0001,
++ 0x708b, 0x0000, 0x7a38, 0xd2f4, 0x0138, 0x2001, 0xc674, 0x2004,
++ 0xd0a4, 0x1110, 0x70d7, 0x0008, 0x708f, 0x0016, 0x0029, 0x0010,
++ 0x080c, 0x4e5b, 0x00fe, 0x0005, 0x20e1, 0x9080, 0x20e1, 0x4000,
++ 0x2099, 0xcc80, 0x20a1, 0x020b, 0x20a9, 0x000e, 0x53a6, 0x3430,
++ 0x2011, 0xcc8e, 0x708f, 0x0017, 0x080c, 0x4f24, 0x1150, 0x7078,
++ 0xa005, 0x1138, 0x080c, 0x4d51, 0x1170, 0xa085, 0x0001, 0x080c,
++ 0x2a11, 0x20a9, 0x0008, 0x2099, 0xcc8e, 0x26a0, 0x53a6, 0x20a3,
++ 0x0000, 0x20a3, 0x0000, 0x60c3, 0x0014, 0x080c, 0x4e42, 0x0010,
++ 0x080c, 0x4968, 0x0005, 0x00f6, 0x7084, 0xa005, 0x01b0, 0x2011,
++ 0x4e18, 0x080c, 0x6fad, 0xa086, 0x0084, 0x1168, 0x2079, 0xcc80,
++ 0x7a30, 0xa296, 0x1106, 0x1138, 0x7834, 0xa005, 0x1120, 0x708f,
++ 0x0018, 0x0029, 0x0010, 0x080c, 0x4e5b, 0x00fe, 0x0005, 0x708f,
++ 0x0019, 0x080c, 0x4edf, 0x20a3, 0x1106, 0x20a3, 0x0000, 0x3430,
++ 0x2099, 0xcc8e, 0x2039, 0xcc0e, 0x27a0, 0x20a9, 0x0040, 0x53a3,
++ 0x080c, 0x4f24, 0x11e8, 0x2728, 0x2514, 0x8207, 0xa084, 0x00ff,
++ 0x8000, 0x2018, 0xa294, 0x00ff, 0x8007, 0xa205, 0x202a, 0x7054,
++ 0x2310, 0x8214, 0xa2a0, 0xcc0e, 0x2414, 0xa38c, 0x0001, 0x0118,
++ 0xa294, 0xff00, 0x0018, 0xa294, 0x00ff, 0x8007, 0xa215, 0x2222,
++ 0x2798, 0x26a0, 0x20a9, 0x0040, 0x53a6, 0x20a3, 0x0000, 0x20a3,
++ 0x0000, 0x60c3, 0x0084, 0x080c, 0x4e42, 0x0005, 0x00f6, 0x7084,
++ 0xa005, 0x01d0, 0x2011, 0x4e18, 0x080c, 0x6fad, 0xa086, 0x0084,
++ 0x1188, 0x2079, 0xcc80, 0x7a30, 0xa296, 0x1107, 0x1158, 0x7834,
++ 0xa005, 0x1140, 0x708b, 0x0001, 0x080c, 0x4ec5, 0x708f, 0x001a,
++ 0x0029, 0x0010, 0x080c, 0x4e5b, 0x00fe, 0x0005, 0x708f, 0x001b,
++ 0x20e1, 0x9080, 0x20e1, 0x4000, 0x2099, 0xcc80, 0x20a1, 0x020b,
++ 0x7484, 0xa480, 0x0018, 0xa080, 0x0007, 0xa084, 0x03f8, 0x8004,
++ 0x20a8, 0x53a6, 0x60c3, 0x0084, 0x080c, 0x4e42, 0x0005, 0x0005,
++ 0x0005, 0x0086, 0x0096, 0x2029, 0xc653, 0x252c, 0x20a9, 0x0008,
++ 0x2041, 0xcc0e, 0x28a0, 0x2099, 0xcc8e, 0x53a3, 0x20a9, 0x0008,
++ 0x2011, 0x0007, 0xd5d4, 0x0110, 0x2011, 0x0000, 0x2800, 0xa200,
++ 0x200c, 0xa1a6, 0xffff, 0x1148, 0xd5d4, 0x0110, 0x8210, 0x0008,
++ 0x8211, 0x1f04, 0x4d66, 0x0804, 0x4dd4, 0x82ff, 0x1160, 0xd5d4,
++ 0x0120, 0xa1a6, 0x3fff, 0x0d90, 0x0020, 0xa1a6, 0x3fff, 0x0904,
++ 0x4dd4, 0xa18d, 0xc000, 0x20a9, 0x0010, 0x2019, 0x0001, 0xd5d4,
++ 0x0110, 0x2019, 0x0010, 0x2120, 0xd5d4, 0x0110, 0x8423, 0x0008,
++ 0x8424, 0x1240, 0xd5d4, 0x0110, 0x8319, 0x0008, 0x8318, 0x1f04,
++ 0x4d8c, 0x04d0, 0x23a8, 0x2021, 0x0001, 0x8426, 0x8425, 0x1f04,
++ 0x4d9e, 0x2328, 0x8529, 0xa2be, 0x0007, 0x0158, 0x0006, 0x2039,
++ 0x0007, 0x2200, 0xa73a, 0x000e, 0x27a8, 0xa5a8, 0x0010, 0x1f04,
++ 0x4dad, 0x7552, 0xa5c8, 0x2f6e, 0x292d, 0xa5ac, 0x00ff, 0x7576,
++ 0x6532, 0x6536, 0x0016, 0x2508, 0x080c, 0x29f1, 0x001e, 0x60e7,
++ 0x0000, 0x65ea, 0x2018, 0x2304, 0xa405, 0x201a, 0x707b, 0x0001,
++ 0x26a0, 0x2898, 0x20a9, 0x0008, 0x53a6, 0x20a3, 0x0000, 0x20a3,
++ 0x0000, 0xa085, 0x0001, 0x0028, 0xa006, 0x0018, 0xa006, 0x080c,
++ 0x1519, 0x009e, 0x008e, 0x0005, 0x2118, 0x2021, 0x0000, 0x2001,
++ 0x0007, 0xa39a, 0x0010, 0x0218, 0x8420, 0x8001, 0x0cd0, 0x2118,
++ 0x84ff, 0x0120, 0xa39a, 0x0010, 0x8421, 0x1de0, 0x2021, 0x0001,
++ 0x83ff, 0x0118, 0x8423, 0x8319, 0x1de8, 0xa238, 0x2704, 0xa42c,
++ 0x11b8, 0xa405, 0x203a, 0x7152, 0xa1a0, 0x2f6e, 0x242d, 0xa5ac,
++ 0x00ff, 0x7576, 0x6532, 0x6536, 0x0016, 0x2508, 0x080c, 0x29f1,
++ 0x001e, 0x60e7, 0x0000, 0x65ea, 0x707b, 0x0001, 0xa084, 0x0000,
++ 0x0005, 0x00e6, 0x2071, 0xc600, 0x707f, 0x0000, 0x00ee, 0x0005,
++ 0x00e6, 0x00f6, 0x2079, 0x0100, 0x2071, 0x0140, 0x080c, 0x8bf5,
++ 0x7004, 0xa084, 0x4000, 0x0120, 0x7003, 0x1000, 0x7003, 0x0000,
++ 0x0126, 0x2091, 0x8000, 0x2071, 0xc623, 0x2073, 0x0000, 0x7840,
++ 0x0026, 0x0016, 0x2009, 0x00f7, 0x080c, 0x4eeb, 0x001e, 0xa094,
++ 0x0010, 0xa285, 0x0080, 0x7842, 0x7a42, 0x002e, 0x012e, 0x00fe,
++ 0x00ee, 0x0005, 0x0126, 0x2091, 0x8000, 0x2011, 0xc931, 0x2013,
++ 0x0000, 0x7087, 0x0000, 0x012e, 0x20e1, 0x9080, 0x60a3, 0x0056,
++ 0x60a7, 0x9575, 0x080c, 0x8bec, 0x2009, 0x07d0, 0x2011, 0x4e18,
++ 0x080c, 0x7036, 0x0005, 0x0016, 0x0026, 0x00c6, 0x0126, 0x2091,
++ 0x8000, 0x2011, 0x0003, 0x080c, 0x8f0e, 0x2011, 0x0002, 0x080c,
++ 0x8f18, 0x080c, 0x8dee, 0x0036, 0x2019, 0x0000, 0x080c, 0x8e79,
++ 0x003e, 0x2009, 0x00f7, 0x080c, 0x4eeb, 0x2061, 0xc93a, 0x601b,
++ 0x0000, 0x601f, 0x0000, 0x2061, 0xc600, 0x6003, 0x0001, 0x2061,
++ 0x0100, 0x6043, 0x0090, 0x6043, 0x0010, 0x2009, 0x002d, 0x2011,
++ 0x4e90, 0x080c, 0x6fa1, 0x012e, 0x00ce, 0x002e, 0x001e, 0x0005,
++ 0x00e6, 0x0006, 0x0126, 0x2091, 0x8000, 0x2071, 0x0100, 0x080c,
++ 0x8bf5, 0x2071, 0x0140, 0x7004, 0xa084, 0x4000, 0x0120, 0x7003,
++ 0x1000, 0x7003, 0x0000, 0x080c, 0x5f2a, 0x01a8, 0x080c, 0x5f48,
++ 0x1190, 0x2001, 0xc8e5, 0x2003, 0xaaaa, 0x0016, 0x080c, 0x2a95,
++ 0x2001, 0xc8d6, 0x2102, 0x001e, 0x2001, 0xc8e6, 0x2003, 0x0000,
++ 0x080c, 0x5e5a, 0x0030, 0x2001, 0x0001, 0x080c, 0x296d, 0x080c,
++ 0x4e5b, 0x012e, 0x000e, 0x00ee, 0x0005, 0x20a9, 0x0040, 0x20a1,
++ 0xcdc0, 0x2099, 0xcc8e, 0x3304, 0x8007, 0x20a2, 0x9398, 0x94a0,
++ 0x1f04, 0x4ecb, 0x0005, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x2099,
++ 0xcc00, 0x20a1, 0x020b, 0x20a9, 0x000c, 0x53a6, 0x0005, 0x20e1,
++ 0x9080, 0x20e1, 0x4000, 0x2099, 0xcc80, 0x20a1, 0x020b, 0x20a9,
++ 0x000c, 0x53a6, 0x0005, 0x00c6, 0x0006, 0x2061, 0x0100, 0x810f,
++ 0x2001, 0xc631, 0x2004, 0xa005, 0x1138, 0x2001, 0xc615, 0x2004,
++ 0xa084, 0x00ff, 0xa105, 0x0010, 0xa185, 0x00f7, 0x604a, 0x000e,
++ 0x00ce, 0x0005, 0x0016, 0x0046, 0x2001, 0xc653, 0x2004, 0xd0a4,
++ 0x0158, 0xa006, 0x2020, 0x2009, 0x002a, 0x080c, 0xc190, 0x2001,
++ 0xc60c, 0x200c, 0xc195, 0x2102, 0x2019, 0x002a, 0x2009, 0x0000,
++ 0x080c, 0x2e19, 0x004e, 0x001e, 0x0005, 0x080c, 0x4e5b, 0x708f,
++ 0x0000, 0x7087, 0x0000, 0x0005, 0x0006, 0x2001, 0xc60c, 0x2004,
++ 0xd09c, 0x0100, 0x000e, 0x0005, 0x0006, 0x0016, 0x0126, 0x2091,
++ 0x8000, 0x2001, 0x0101, 0x200c, 0xa18d, 0x0006, 0x2102, 0x012e,
++ 0x001e, 0x000e, 0x0005, 0x0156, 0x20a9, 0x00ff, 0x2009, 0xc77b,
++ 0xa006, 0x200a, 0x8108, 0x1f04, 0x4f41, 0x015e, 0x0005, 0x00d6,
++ 0x0036, 0x0156, 0x0136, 0x0146, 0x2069, 0xc652, 0xa006, 0x6002,
++ 0x6007, 0x0707, 0x600a, 0x600e, 0x6012, 0xa198, 0x2f6e, 0x231d,
++ 0xa39c, 0x00ff, 0x6316, 0x20a9, 0x0004, 0xac98, 0x0006, 0x23a0,
++ 0x40a4, 0x20a9, 0x0004, 0xac98, 0x000a, 0x23a0, 0x40a4, 0x603e,
++ 0x6042, 0x604e, 0x6052, 0x6056, 0x605a, 0x605e, 0x6062, 0x6066,
++ 0x606a, 0x606e, 0x6072, 0x6076, 0x607a, 0x607e, 0x6082, 0x6086,
++ 0x608a, 0x608e, 0x6092, 0x6096, 0x609a, 0x609e, 0x60be, 0x61a2,
++ 0x00d6, 0x60a4, 0xa06d, 0x0110, 0x080c, 0x1619, 0x60a7, 0x0000,
++ 0x60a8, 0xa06d, 0x0110, 0x080c, 0x1619, 0x60ab, 0x0000, 0x00de,
++ 0xa006, 0x604a, 0x6810, 0x603a, 0x680c, 0x6046, 0xa006, 0x60b2,
++ 0x60ae, 0x60b6, 0x60bb, 0x0520, 0x6814, 0xa084, 0x00ff, 0x6042,
++ 0x014e, 0x013e, 0x015e, 0x003e, 0x00de, 0x0005, 0x0126, 0x2091,
++ 0x8000, 0x6944, 0x6e48, 0xa684, 0x3fff, 0xa082, 0x4000, 0x1a04,
++ 0x505c, 0xa18c, 0xff00, 0x810f, 0xa182, 0x00ff, 0x1a04, 0x5061,
++ 0x2001, 0xc60c, 0x2004, 0xa084, 0x0003, 0x01c0, 0x2001, 0xc60c,
++ 0x2004, 0xd084, 0x1904, 0x5044, 0xa188, 0xc77b, 0x2104, 0xa065,
++ 0x0904, 0x5044, 0x6004, 0xa084, 0x00ff, 0xa08e, 0x0006, 0x1904,
++ 0x5044, 0x6000, 0xd0c4, 0x0904, 0x5044, 0x0068, 0xa188, 0xc77b,
++ 0x2104, 0xa065, 0x0904, 0x5028, 0x6004, 0xa084, 0x00ff, 0xa08e,
++ 0x0006, 0x1904, 0x502d, 0x60a4, 0xa00d, 0x0118, 0x080c, 0x5568,
++ 0x05d0, 0x60a8, 0xa00d, 0x0188, 0x080c, 0x55b3, 0x1170, 0x694c,
++ 0xd1fc, 0x1118, 0x080c, 0x5272, 0x0448, 0x080c, 0x5221, 0x694c,
++ 0xd1ec, 0x1520, 0x080c, 0x545a, 0x0408, 0x694c, 0xa184, 0xa000,
++ 0x0178, 0xd1ec, 0x0140, 0xd1fc, 0x0118, 0x080c, 0x5469, 0x0028,
++ 0x080c, 0x5469, 0x0028, 0xd1fc, 0x0118, 0x080c, 0x5221, 0x0070,
++ 0x6050, 0xa00d, 0x0130, 0x2d00, 0x200a, 0x6803, 0x0000, 0x6052,
++ 0x0028, 0x2d00, 0x6052, 0x604e, 0x6803, 0x0000, 0x080c, 0x79b6,
++ 0xa006, 0x012e, 0x0005, 0x2001, 0x0005, 0x2009, 0x0000, 0x04e8,
++ 0x2001, 0x0028, 0x2009, 0x0000, 0x04c0, 0xa082, 0x0006, 0x12a0,
++ 0x2001, 0xc635, 0x2004, 0xd0ac, 0x1160, 0x60a0, 0xd0bc, 0x1148,
++ 0x6100, 0xd1fc, 0x0904, 0x4fe3, 0x2001, 0x0029, 0x2009, 0x1000,
++ 0x0420, 0x2001, 0x0028, 0x00a8, 0x2009, 0xc60c, 0x210c, 0xd18c,
++ 0x0118, 0x2001, 0x0004, 0x0068, 0xd184, 0x0118, 0x2001, 0x0004,
++ 0x0040, 0x2001, 0x0029, 0x6100, 0xd1fc, 0x0118, 0x2009, 0x1000,
++ 0x0060, 0x2009, 0x0000, 0x0048, 0x2001, 0x0029, 0x2009, 0x0000,
++ 0x0020, 0x2001, 0x0029, 0x2009, 0x0000, 0xa005, 0x012e, 0x0005,
++ 0x00e6, 0x0126, 0x2091, 0x8000, 0x6844, 0xa084, 0xff00, 0xa08e,
++ 0xff00, 0x1120, 0x2001, 0xc8d3, 0x2064, 0x0080, 0x6844, 0x8007,
++ 0xa084, 0x00ff, 0x2008, 0xa182, 0x00ff, 0x1698, 0xa188, 0xc77b,
++ 0x2104, 0xa065, 0x01d8, 0x080c, 0x56ed, 0x11d8, 0x2c70, 0x080c,
++ 0x958d, 0x0568, 0x2e00, 0x601a, 0x2d00, 0x6012, 0x601f, 0x0009,
++ 0x600b, 0x0000, 0x6844, 0xa08e, 0xff00, 0x1110, 0x600b, 0x8000,
++ 0x2009, 0x0100, 0x080c, 0x9613, 0xa006, 0x00b0, 0x2001, 0x0028,
++ 0x0090, 0x2009, 0xc60c, 0x210c, 0xd18c, 0x0118, 0x2001, 0x0004,
++ 0x0038, 0xd184, 0x0118, 0x2001, 0x0004, 0x0010, 0x2001, 0x0029,
++ 0x0010, 0x2001, 0x0029, 0xa005, 0x012e, 0x00ee, 0x0005, 0x2001,
++ 0x002c, 0x0cc8, 0x00e6, 0x0126, 0x2091, 0x8000, 0x6844, 0x8007,
++ 0xa084, 0x00ff, 0x2008, 0xa182, 0x00ff, 0x1a04, 0x510d, 0xa188,
++ 0xc77b, 0x2104, 0xa065, 0x01c0, 0x6004, 0xa084, 0x00ff, 0xa08e,
++ 0x0006, 0x11a8, 0x2c70, 0x080c, 0x958d, 0x05e8, 0x2e00, 0x601a,
++ 0x2d00, 0x6012, 0x600b, 0xffff, 0x601f, 0x000a, 0x2009, 0x0003,
++ 0x080c, 0x9613, 0xa006, 0x0460, 0x2001, 0x0028, 0x0440, 0xa082,
++ 0x0006, 0x1298, 0x2001, 0xc635, 0x2004, 0xd0ac, 0x1158, 0x60a0,
++ 0xd0bc, 0x1140, 0x6100, 0xd1fc, 0x09e8, 0x2001, 0x0029, 0x2009,
++ 0x1000, 0x00a8, 0x2001, 0x0028, 0x0090, 0x2009, 0xc60c, 0x210c,
++ 0xd18c, 0x0118, 0x2001, 0x0004, 0x0050, 0xd184, 0x0118, 0x2001,
++ 0x0004, 0x0028, 0x2001, 0x0029, 0x0010, 0x2001, 0x0029, 0xa005,
++ 0x012e, 0x00ee, 0x0005, 0x2001, 0x002c, 0x0cc8, 0x00f6, 0x00e6,
++ 0x0126, 0x2091, 0x8000, 0x2011, 0x0000, 0x2079, 0xc600, 0x6944,
++ 0xa18c, 0xff00, 0x810f, 0xa182, 0x00ff, 0x1a04, 0x51d8, 0x080c,
++ 0x533d, 0x11a0, 0x6004, 0xa084, 0x00ff, 0xa082, 0x0006, 0x1270,
++ 0x6864, 0xa0c6, 0x006f, 0x0150, 0x2001, 0xc635, 0x2004, 0xd0ac,
++ 0x1904, 0x51c1, 0x60a0, 0xd0bc, 0x1904, 0x51c1, 0x6864, 0xa0c6,
++ 0x006f, 0x0118, 0x2008, 0x0804, 0x518a, 0x6968, 0x2140, 0xa18c,
++ 0xff00, 0x810f, 0x78d4, 0xd0ac, 0x1118, 0xa182, 0x0080, 0x06d0,
++ 0xa182, 0x00ff, 0x16b8, 0x6a70, 0x6b6c, 0x7870, 0xa306, 0x1160,
++ 0x7874, 0xa24e, 0x1118, 0x2208, 0x2310, 0x0460, 0xa9cc, 0xff00,
++ 0x1118, 0x2208, 0x2310, 0x0430, 0x080c, 0x3f6e, 0x2c70, 0x0550,
++ 0x2009, 0x0000, 0x2011, 0x0000, 0xa0c6, 0x4000, 0x1160, 0x0006,
++ 0x2e60, 0x080c, 0x55de, 0x1108, 0xc185, 0x7000, 0xd0bc, 0x0108,
++ 0xc18d, 0x000e, 0x0088, 0xa0c6, 0x4007, 0x1110, 0x2408, 0x0060,
++ 0xa0c6, 0x4008, 0x1118, 0x2708, 0x2610, 0x0030, 0xa0c6, 0x4009,
++ 0x1108, 0x0010, 0x2001, 0x4006, 0x6866, 0x696a, 0x6a6e, 0x2001,
++ 0x0030, 0x0450, 0x080c, 0x958d, 0x1138, 0x2001, 0x4005, 0x2009,
++ 0x0003, 0x2011, 0x0000, 0x0c80, 0x2e00, 0x601a, 0x080c, 0xb05e,
++ 0x2d00, 0x6012, 0x601f, 0x0001, 0x6838, 0xd88c, 0x0108, 0xc0f5,
++ 0x683a, 0x0126, 0x2091, 0x8000, 0x080c, 0x2e46, 0x012e, 0x2001,
++ 0x0000, 0x080c, 0x527f, 0x2001, 0x0002, 0x080c, 0x5291, 0x2009,
++ 0x0002, 0x080c, 0x9613, 0xa006, 0xa005, 0x012e, 0x00ee, 0x00fe,
++ 0x0005, 0x2001, 0x0028, 0x2009, 0x0000, 0x0cb0, 0x2009, 0xc60c,
++ 0x210c, 0xd18c, 0x0118, 0x2001, 0x0004, 0x0038, 0xd184, 0x0118,
++ 0x2001, 0x0004, 0x0010, 0x2001, 0x0029, 0x2009, 0x0000, 0x0c20,
++ 0x2001, 0x0029, 0x2009, 0x0000, 0x08f8, 0x6944, 0x6e48, 0xa684,
++ 0x3fff, 0xa082, 0x4000, 0x16b8, 0xa18c, 0xff00, 0x810f, 0xa182,
++ 0x00ff, 0x12e0, 0xa188, 0xc77b, 0x2104, 0xa065, 0x01b8, 0x6004,
++ 0xa084, 0x00ff, 0xa08e, 0x0006, 0x11b0, 0x684c, 0xd0ec, 0x0120,
++ 0x080c, 0x5469, 0x0431, 0x0030, 0x0421, 0x684c, 0xd0fc, 0x0110,
++ 0x080c, 0x545a, 0x080c, 0x54a7, 0xa006, 0x00c8, 0x2001, 0x0028,
++ 0x2009, 0x0000, 0x00a0, 0xa082, 0x0006, 0x1240, 0x6100, 0xd1fc,
++ 0x0d20, 0x2001, 0x0029, 0x2009, 0x1000, 0x0048, 0x2001, 0x0029,
++ 0x2009, 0x0000, 0x0020, 0x2001, 0x0029, 0x2009, 0x0000, 0xa005,
++ 0x0005, 0x0126, 0x2091, 0x8000, 0x6050, 0xa00d, 0x0138, 0x2d00,
++ 0x200a, 0x6803, 0x0000, 0x6052, 0x012e, 0x0005, 0x2d00, 0x6052,
++ 0x604e, 0x6803, 0x0000, 0x0cc0, 0x0126, 0x2091, 0x8000, 0x604c,
++ 0xa005, 0x0170, 0x00e6, 0x2071, 0xc927, 0x7004, 0xa086, 0x0002,
++ 0x0168, 0x00ee, 0x604c, 0x6802, 0x2d00, 0x604e, 0x012e, 0x0005,
++ 0x2d00, 0x6052, 0x604e, 0x6803, 0x0000, 0x0cc0, 0x701c, 0xac06,
++ 0x1d80, 0x604c, 0x2070, 0x7000, 0x6802, 0x2d00, 0x7002, 0x00ee,
++ 0x012e, 0x0005, 0x0126, 0x2091, 0x8000, 0x604c, 0xa06d, 0x0130,
++ 0x6800, 0xa005, 0x1108, 0x6052, 0x604e, 0xad05, 0x012e, 0x0005,
++ 0x604c, 0xa06d, 0x0130, 0x6800, 0xa005, 0x1108, 0x6052, 0x604e,
++ 0xad05, 0x0005, 0x6803, 0x0000, 0x6084, 0xa00d, 0x0120, 0x2d00,
++ 0x200a, 0x6086, 0x0005, 0x2d00, 0x6086, 0x6082, 0x0cd8, 0x0126,
++ 0x00c6, 0x0026, 0x2091, 0x8000, 0x6218, 0x2260, 0x6200, 0xa005,
++ 0x0110, 0xc285, 0x0008, 0xc284, 0x6202, 0x002e, 0x00ce, 0x012e,
++ 0x0005, 0x0126, 0x00c6, 0x2091, 0x8000, 0x6218, 0x2260, 0x6204,
++ 0x0006, 0xa086, 0x0006, 0x1180, 0x609c, 0xd0ac, 0x0168, 0x2001,
++ 0xc653, 0x2004, 0xd0a4, 0x0140, 0xa284, 0xff00, 0x8007, 0xa086,
++ 0x0007, 0x1110, 0x2011, 0x0600, 0x000e, 0xa294, 0xff00, 0xa215,
++ 0x6206, 0x0006, 0xa086, 0x0006, 0x1128, 0x6290, 0x82ff, 0x1110,
++ 0x080c, 0x1519, 0x000e, 0x00ce, 0x012e, 0x0005, 0x0126, 0x00c6,
++ 0x2091, 0x8000, 0x6218, 0x2260, 0x6204, 0x0006, 0xa086, 0x0006,
++ 0x1178, 0x609c, 0xd0a4, 0x0160, 0x2001, 0xc653, 0x2004, 0xd0ac,
++ 0x1138, 0xa284, 0x00ff, 0xa086, 0x0007, 0x1110, 0x2011, 0x0006,
++ 0x000e, 0xa294, 0x00ff, 0x8007, 0xa215, 0x6206, 0x00ce, 0x012e,
++ 0x0005, 0x0026, 0xa182, 0x00ff, 0x0218, 0xa085, 0x0001, 0x00b0,
++ 0xa190, 0xc77b, 0x2204, 0xa065, 0x1180, 0x0016, 0x00d6, 0x080c,
++ 0x15e5, 0x2d60, 0x00de, 0x001e, 0x0d80, 0x2c00, 0x2012, 0x60a7,
++ 0x0000, 0x60ab, 0x0000, 0x080c, 0x4f47, 0xa006, 0x002e, 0x0005,
++ 0x0126, 0x2091, 0x8000, 0x0026, 0xa182, 0x00ff, 0x0218, 0xa085,
++ 0x0001, 0x0480, 0x00d6, 0xa190, 0xc77b, 0x2204, 0xa06d, 0x0540,
++ 0x2013, 0x0000, 0x00d6, 0x00c6, 0x2d60, 0x60a4, 0xa06d, 0x0110,
++ 0x080c, 0x1619, 0x60a8, 0xa06d, 0x0110, 0x080c, 0x1619, 0x00ce,
++ 0x00de, 0x00d6, 0x00c6, 0x68bc, 0x2060, 0x8cff, 0x0168, 0x600c,
++ 0x0006, 0x6010, 0x2068, 0x080c, 0xac91, 0x0110, 0x080c, 0x1629,
++ 0x080c, 0x95e3, 0x00ce, 0x0c88, 0x00ce, 0x00de, 0x080c, 0x1619,
++ 0x00de, 0xa006, 0x002e, 0x012e, 0x0005, 0x0016, 0xa182, 0x00ff,
++ 0x0218, 0xa085, 0x0001, 0x0030, 0xa188, 0xc77b, 0x2104, 0xa065,
++ 0x0dc0, 0xa006, 0x001e, 0x0005, 0x00d6, 0x0156, 0x0136, 0x0146,
++ 0x600b, 0x0000, 0x600f, 0x0000, 0x6000, 0xc08c, 0x6002, 0x080c,
++ 0x5f22, 0x1558, 0x60a0, 0xa086, 0x007e, 0x2069, 0xcc90, 0x0130,
++ 0x2001, 0xc635, 0x2004, 0xd0ac, 0x1500, 0x0098, 0x2d04, 0xd0e4,
++ 0x01e0, 0x00d6, 0x2069, 0xcc8e, 0x00c6, 0x2061, 0xc8f9, 0x6810,
++ 0x2062, 0x6814, 0x6006, 0x6818, 0x600a, 0x681c, 0x600e, 0x00ce,
++ 0x00de, 0x8d69, 0x2d04, 0x2069, 0x0140, 0xa005, 0x1110, 0x2001,
++ 0x0001, 0x6886, 0x2069, 0xc600, 0x68a6, 0x2069, 0xcc8e, 0x6808,
++ 0x605e, 0x6810, 0x6062, 0x6138, 0xa10a, 0x0208, 0x603a, 0x6814,
++ 0x6066, 0x2099, 0xcc96, 0xac88, 0x000a, 0x21a0, 0x20a9, 0x0004,
++ 0x53a3, 0x2099, 0xcc9a, 0xac88, 0x0006, 0x21a0, 0x20a9, 0x0004,
++ 0x53a3, 0x2069, 0xccae, 0x6808, 0x606a, 0x690c, 0x616e, 0x6810,
++ 0x6072, 0x6818, 0x6076, 0x60a0, 0xa086, 0x007e, 0x1120, 0x2069,
++ 0xcc8e, 0x690c, 0x616e, 0xa182, 0x0211, 0x1218, 0x2009, 0x0008,
++ 0x0400, 0xa182, 0x0259, 0x1218, 0x2009, 0x0007, 0x00d0, 0xa182,
++ 0x02c1, 0x1218, 0x2009, 0x0006, 0x00a0, 0xa182, 0x0349, 0x1218,
++ 0x2009, 0x0005, 0x0070, 0xa182, 0x0421, 0x1218, 0x2009, 0x0004,
++ 0x0040, 0xa182, 0x0581, 0x1218, 0x2009, 0x0003, 0x0010, 0x2009,
++ 0x0002, 0x6192, 0x014e, 0x013e, 0x015e, 0x00de, 0x0005, 0x0016,
++ 0x0026, 0x00e6, 0x2071, 0xcc8d, 0x2e04, 0x6896, 0x2071, 0xcc8e,
++ 0x7004, 0x689a, 0x701c, 0x689e, 0x6a00, 0x2009, 0xc672, 0x210c,
++ 0xd0bc, 0x0120, 0xd1ec, 0x0110, 0xc2ad, 0x0008, 0xc2ac, 0xd0c4,
++ 0x0120, 0xd1e4, 0x0110, 0xc2bd, 0x0008, 0xc2bc, 0x6a02, 0x00ee,
++ 0x002e, 0x001e, 0x0005, 0x00d6, 0x0126, 0x2091, 0x8000, 0x60a4,
++ 0xa06d, 0x01c0, 0x6900, 0x81ff, 0x1540, 0x6a04, 0xa282, 0x0010,
++ 0x1648, 0xad88, 0x0004, 0x20a9, 0x0010, 0x2104, 0xa086, 0xffff,
++ 0x0128, 0x8108, 0x1f04, 0x5415, 0x080c, 0x1519, 0x260a, 0x8210,
++ 0x6a06, 0x0098, 0x080c, 0x1602, 0x01a8, 0x2d00, 0x60a6, 0x6803,
++ 0x0000, 0xad88, 0x0004, 0x20a9, 0x0010, 0x200b, 0xffff, 0x8108,
++ 0x1f04, 0x542d, 0x6807, 0x0001, 0x6e12, 0xa085, 0x0001, 0x012e,
++ 0x00de, 0x0005, 0xa006, 0x0cd8, 0x0126, 0x2091, 0x8000, 0x00d6,
++ 0x60a4, 0xa00d, 0x01a0, 0x2168, 0x6800, 0xa005, 0x1160, 0x080c,
++ 0x5568, 0x1168, 0x200b, 0xffff, 0x6804, 0xa08a, 0x0002, 0x0218,
++ 0x8001, 0x6806, 0x0020, 0x080c, 0x1619, 0x60a7, 0x0000, 0x00de,
++ 0x012e, 0x0005, 0x0126, 0x2091, 0x8000, 0x080c, 0x55c6, 0x0010,
++ 0x080c, 0x5221, 0x080c, 0x54e0, 0x1dd8, 0x080c, 0x54a7, 0x012e,
++ 0x0005, 0x00d6, 0x0126, 0x2091, 0x8000, 0x60a8, 0xa06d, 0x01c0,
++ 0x6950, 0x81ff, 0x1540, 0x6a54, 0xa282, 0x0010, 0x1670, 0xad88,
++ 0x0018, 0x20a9, 0x0010, 0x2104, 0xa086, 0xffff, 0x0128, 0x8108,
++ 0x1f04, 0x547b, 0x080c, 0x1519, 0x260a, 0x8210, 0x6a56, 0x0098,
++ 0x080c, 0x1602, 0x01d0, 0x2d00, 0x60aa, 0x6853, 0x0000, 0xad88,
++ 0x0018, 0x20a9, 0x0010, 0x200b, 0xffff, 0x8108, 0x1f04, 0x5493,
++ 0x6857, 0x0001, 0x6e62, 0x0010, 0x080c, 0x5272, 0x0089, 0x1de0,
++ 0xa085, 0x0001, 0x012e, 0x00de, 0x0005, 0xa006, 0x0cd8, 0x0126,
++ 0x2091, 0x8000, 0x080c, 0x79b6, 0x012e, 0x0005, 0xa01e, 0x0010,
++ 0x2019, 0x0001, 0xa00e, 0x0126, 0x2091, 0x8000, 0x604c, 0x2068,
++ 0x6000, 0xd0dc, 0x1170, 0x8dff, 0x01f8, 0x83ff, 0x0120, 0x6848,
++ 0xa606, 0x0158, 0x0030, 0x683c, 0xa406, 0x1118, 0x6840, 0xa506,
++ 0x0120, 0x2d08, 0x6800, 0x2068, 0x0c70, 0x080c, 0x8fb7, 0x6a00,
++ 0x604c, 0xad06, 0x1110, 0x624e, 0x0018, 0xa180, 0x0000, 0x2202,
++ 0x82ff, 0x1110, 0x6152, 0x8dff, 0x012e, 0x0005, 0xa01e, 0x0010,
++ 0x2019, 0x0001, 0xa00e, 0x6080, 0x2068, 0x8dff, 0x01e8, 0x83ff,
++ 0x0120, 0x6848, 0xa606, 0x0158, 0x0030, 0x683c, 0xa406, 0x1118,
++ 0x6840, 0xa506, 0x0120, 0x2d08, 0x6800, 0x2068, 0x0c70, 0x6a00,
++ 0x6080, 0xad06, 0x1110, 0x6282, 0x0018, 0xa180, 0x0000, 0x2202,
++ 0x82ff, 0x1110, 0x6186, 0x8dff, 0x0005, 0xa016, 0x080c, 0x5562,
++ 0x1110, 0x2011, 0x0001, 0x080c, 0x55ad, 0x1110, 0xa295, 0x0002,
++ 0x0005, 0x080c, 0x55de, 0x0118, 0x080c, 0xad46, 0x0010, 0xa085,
++ 0x0001, 0x0005, 0x080c, 0x55de, 0x0118, 0x080c, 0xacd6, 0x0010,
++ 0xa085, 0x0001, 0x0005, 0x080c, 0x55de, 0x0118, 0x080c, 0xad29,
++ 0x0010, 0xa085, 0x0001, 0x0005, 0x080c, 0x55de, 0x0118, 0x080c,
++ 0xacf2, 0x0010, 0xa085, 0x0001, 0x0005, 0x080c, 0x55de, 0x0118,
++ 0x080c, 0xad62, 0x0010, 0xa085, 0x0001, 0x0005, 0x0126, 0x0006,
++ 0x00d6, 0x2091, 0x8000, 0x6080, 0xa06d, 0x01a0, 0x6800, 0x0006,
++ 0x6837, 0x0103, 0x6b4a, 0x6847, 0x0000, 0x080c, 0xaf03, 0x0006,
++ 0x6000, 0xd0fc, 0x0110, 0x080c, 0xc4e0, 0x000e, 0x080c, 0x580a,
++ 0x000e, 0x0c50, 0x6083, 0x0000, 0x6087, 0x0000, 0x00de, 0x000e,
++ 0x012e, 0x0005, 0x60a4, 0xa00d, 0x1118, 0xa085, 0x0001, 0x0005,
++ 0x00e6, 0x2170, 0x7000, 0xa005, 0x1168, 0x20a9, 0x0010, 0xae88,
++ 0x0004, 0x2104, 0xa606, 0x0130, 0x8108, 0x1f04, 0x5571, 0xa085,
++ 0x0001, 0x0008, 0xa006, 0x00ee, 0x0005, 0x00d6, 0x0126, 0x2091,
++ 0x8000, 0x60a4, 0xa06d, 0x1128, 0x080c, 0x1602, 0x01a0, 0x2d00,
++ 0x60a6, 0x6803, 0x0001, 0x6807, 0x0000, 0xad88, 0x0004, 0x20a9,
++ 0x0010, 0x200b, 0xffff, 0x8108, 0x1f04, 0x5591, 0xa085, 0x0001,
++ 0x012e, 0x00de, 0x0005, 0xa006, 0x0cd8, 0x00d6, 0x0126, 0x2091,
++ 0x8000, 0x60a4, 0xa06d, 0x0130, 0x60a7, 0x0000, 0x080c, 0x1619,
++ 0xa085, 0x0001, 0x012e, 0x00de, 0x0005, 0x60a8, 0xa00d, 0x1118,
++ 0xa085, 0x0001, 0x0005, 0x00e6, 0x2170, 0x7050, 0xa005, 0x1160,
++ 0x20a9, 0x0010, 0xae88, 0x0018, 0x2104, 0xa606, 0x0128, 0x8108,
++ 0x1f04, 0x55bc, 0xa085, 0x0001, 0x00ee, 0x0005, 0x0126, 0x2091,
++ 0x8000, 0x0c19, 0x1188, 0x200b, 0xffff, 0x00d6, 0x60a8, 0x2068,
++ 0x6854, 0xa08a, 0x0002, 0x0218, 0x8001, 0x6856, 0x0020, 0x080c,
++ 0x1619, 0x60ab, 0x0000, 0x00de, 0x012e, 0x0005, 0x609c, 0xd0a4,
++ 0x0005, 0x00f6, 0x080c, 0x5f22, 0x01b0, 0x71b8, 0x81ff, 0x1198,
++ 0x71d4, 0xd19c, 0x0180, 0x2001, 0x007e, 0xa080, 0xc77b, 0x2004,
++ 0xa07d, 0x0148, 0x7804, 0xa084, 0x00ff, 0xa086, 0x0006, 0x1118,
++ 0x7800, 0xc0ed, 0x7802, 0x2079, 0xc652, 0x7804, 0xd0a4, 0x01e8,
++ 0x0156, 0x00c6, 0x20a9, 0x007f, 0x2009, 0x0000, 0x0016, 0x080c,
++ 0x533d, 0x1168, 0x6004, 0xa084, 0xff00, 0x8007, 0xa096, 0x0004,
++ 0x0118, 0xa086, 0x0006, 0x1118, 0x6000, 0xc0ed, 0x6002, 0x001e,
++ 0x8108, 0x1f04, 0x5606, 0x00ce, 0x015e, 0x080c, 0x570b, 0x0120,
++ 0x2001, 0xc8fc, 0x200c, 0x0038, 0x2079, 0xc652, 0x7804, 0xd0a4,
++ 0x0130, 0x2009, 0x07d0, 0x2011, 0x5631, 0x080c, 0x7036, 0x00fe,
++ 0x0005, 0x2011, 0x5631, 0x080c, 0x6fad, 0x080c, 0x570b, 0x01f0,
++ 0x2001, 0xc7f9, 0x2004, 0xa080, 0x0000, 0x200c, 0xc1ec, 0x2102,
++ 0x2001, 0xc653, 0x2004, 0xd0a4, 0x0130, 0x2009, 0x07d0, 0x2011,
++ 0x5631, 0x080c, 0x7036, 0x00e6, 0x2071, 0xc600, 0x7073, 0x0000,
++ 0x7077, 0x0000, 0x080c, 0x2c62, 0x00ee, 0x04b0, 0x0156, 0x00c6,
++ 0x20a9, 0x007f, 0x2009, 0x0000, 0x0016, 0x080c, 0x533d, 0x1530,
++ 0x6000, 0xd0ec, 0x0518, 0x0046, 0x62a0, 0xa294, 0x00ff, 0x8227,
++ 0xa006, 0x2009, 0x0029, 0x080c, 0xc190, 0x6000, 0xc0e5, 0xc0ec,
++ 0x6002, 0x6004, 0xa084, 0x00ff, 0xa085, 0x0700, 0x6006, 0x2019,
++ 0x0029, 0x080c, 0x7b16, 0x0076, 0x2039, 0x0000, 0x080c, 0x7a0e,
++ 0x2009, 0x0000, 0x080c, 0xbef7, 0x007e, 0x004e, 0x001e, 0x8108,
++ 0x1f04, 0x565c, 0x00ce, 0x015e, 0x0005, 0x00c6, 0x6018, 0x2060,
++ 0x6000, 0xc0ec, 0x6002, 0x00ce, 0x0005, 0x00c6, 0x00d6, 0x080c,
++ 0x15e5, 0x2d60, 0x0508, 0x2009, 0x00ff, 0x60a7, 0x0000, 0x60ab,
++ 0x0000, 0x080c, 0x4f47, 0x6007, 0x0006, 0x6013, 0x00ff, 0x6017,
++ 0xffff, 0x606f, 0x0200, 0x606c, 0x6093, 0x0002, 0x60bb, 0x0520,
++ 0x60a3, 0x00ff, 0x60b7, 0x0000, 0x60af, 0x0000, 0x2c08, 0x2001,
++ 0xc8d3, 0x2102, 0xa085, 0x0001, 0x00de, 0x00ce, 0x0005, 0x7818,
++ 0x2004, 0xd0ac, 0x0005, 0x7818, 0x2004, 0xd0bc, 0x0005, 0x0156,
++ 0x00e6, 0x00d6, 0x00c6, 0x0026, 0x20a9, 0x00ff, 0x2009, 0x0000,
++ 0x0016, 0x080c, 0x533d, 0x1178, 0x2c70, 0x70ac, 0xa005, 0x0158,
++ 0x2060, 0x620c, 0x0026, 0x6010, 0x2068, 0x080c, 0x761a, 0x002e,
++ 0x2260, 0x82ff, 0x1db0, 0x001e, 0x8108, 0x1f04, 0x56d0, 0x002e,
++ 0x00ce, 0x00de, 0x00ee, 0x015e, 0x0005, 0x0006, 0x0016, 0x0026,
++ 0x6004, 0xa08c, 0x00ff, 0xa196, 0x0006, 0x0188, 0xa196, 0x0004,
++ 0x0170, 0xa196, 0x0005, 0x0158, 0xa08c, 0xff00, 0x810f, 0xa196,
++ 0x0006, 0x0128, 0xa196, 0x0004, 0x0110, 0xa196, 0x0005, 0x002e,
++ 0x001e, 0x000e, 0x0005, 0x00f6, 0x2001, 0xc7f9, 0x2004, 0xa07d,
++ 0x0110, 0x7800, 0xd0ec, 0x00fe, 0x0005, 0x0126, 0x0026, 0x2091,
++ 0x8000, 0x0006, 0x62a0, 0xa290, 0xc77b, 0x2204, 0xac06, 0x190c,
++ 0x1519, 0x000e, 0x6200, 0xa005, 0x0110, 0xc2fd, 0x0008, 0xc2fc,
++ 0x6202, 0x002e, 0x012e, 0x0005, 0x2011, 0xc635, 0x2204, 0xd0cc,
++ 0x0138, 0x2001, 0xc8fa, 0x200c, 0x2011, 0x5739, 0x080c, 0x7036,
++ 0x0005, 0x2011, 0x5739, 0x080c, 0x6fad, 0x2011, 0xc635, 0x2204,
++ 0xc0cc, 0x2012, 0x0005, 0x2071, 0xc734, 0x7003, 0x0001, 0x7007,
++ 0x0000, 0x7013, 0x0000, 0x7017, 0x0000, 0x701b, 0x0000, 0x701f,
++ 0x0000, 0x700b, 0x0000, 0x704b, 0x0001, 0x704f, 0x0000, 0x705b,
++ 0x0020, 0x705f, 0x0040, 0x707f, 0x0000, 0x2071, 0xc8c3, 0x7003,
++ 0xc734, 0x7007, 0x0000, 0x700b, 0x0000, 0x700f, 0xc8a3, 0x7013,
++ 0x0020, 0x7017, 0x0040, 0x7037, 0x0000, 0x0005, 0x0016, 0x00e6,
++ 0x2071, 0xc87b, 0xa00e, 0x7186, 0x718a, 0x7097, 0x0001, 0x2001,
++ 0xc653, 0x2004, 0xd0fc, 0x1150, 0x2001, 0xc653, 0x2004, 0xa00e,
++ 0xd09c, 0x0108, 0x8108, 0x7102, 0x0804, 0x57d4, 0x2001, 0xc672,
++ 0x200c, 0xa184, 0x000f, 0x2009, 0xc673, 0x210c, 0x0002, 0x577c,
++ 0x57af, 0x57b6, 0x57c0, 0x57c5, 0x577c, 0x577c, 0x577c, 0x579f,
++ 0x577c, 0x577c, 0x577c, 0x577c, 0x577c, 0x577c, 0x577c, 0x7003,
++ 0x0004, 0x0136, 0x0146, 0x0156, 0x2099, 0xc676, 0x20a1, 0xc8cc,
++ 0x20a9, 0x0004, 0x53a3, 0x015e, 0x014e, 0x013e, 0x0428, 0x708f,
++ 0x0005, 0x7007, 0x0122, 0x2001, 0x0002, 0x0030, 0x708f, 0x0002,
++ 0x7007, 0x0121, 0x2001, 0x0003, 0x7002, 0x7097, 0x0001, 0x0088,
++ 0x7007, 0x0122, 0x2001, 0x0002, 0x0020, 0x7007, 0x0121, 0x2001,
++ 0x0003, 0x7002, 0xa006, 0x7096, 0x708e, 0xa184, 0xff00, 0x8007,
++ 0x709a, 0xa184, 0x00ff, 0x7092, 0x00ee, 0x001e, 0x0005, 0x00e6,
++ 0x2071, 0xc734, 0x684c, 0xa005, 0x1130, 0x7028, 0xc085, 0x702a,
++ 0xa085, 0x0001, 0x0428, 0x6a60, 0x7236, 0x6b64, 0x733a, 0x6868,
++ 0x703e, 0x7076, 0x686c, 0x7042, 0x707a, 0x684c, 0x702e, 0x6844,
++ 0x7032, 0x2009, 0x000d, 0x200a, 0x700b, 0x0000, 0x8007, 0x8006,
++ 0x8006, 0xa08c, 0x003f, 0xa084, 0xffc0, 0xa210, 0x2100, 0xa319,
++ 0x726e, 0x7372, 0x7028, 0xc084, 0x702a, 0x7007, 0x0001, 0xa006,
++ 0x00ee, 0x0005, 0x0156, 0x00e6, 0x0026, 0x6838, 0xd0fc, 0x1904,
++ 0x5863, 0x6804, 0xa00d, 0x0188, 0x00d6, 0x2071, 0xc600, 0xa016,
++ 0x702c, 0x2168, 0x6904, 0x206a, 0x8210, 0x2d00, 0x81ff, 0x1dc8,
++ 0x702e, 0x70b4, 0xa200, 0x70b6, 0x00de, 0x2071, 0xc734, 0x701c,
++ 0xa005, 0x1904, 0x5873, 0x20a9, 0x0032, 0x0f04, 0x5871, 0x0e04,
++ 0x582d, 0x2071, 0xc87b, 0x7200, 0x82ff, 0x05d8, 0x6934, 0xa186,
++ 0x0103, 0x1904, 0x5881, 0x6948, 0x6844, 0xa105, 0x1540, 0x2009,
++ 0x8020, 0x2200, 0x0002, 0x5871, 0x5848, 0x58e8, 0x58f5, 0x5871,
++ 0x2071, 0x0000, 0x20a9, 0x0032, 0x0f04, 0x5871, 0x7018, 0xd084,
++ 0x1dd8, 0x7122, 0x683c, 0x7026, 0x6840, 0x702a, 0x701b, 0x0001,
++ 0x2091, 0x4080, 0x2071, 0xc600, 0x702c, 0x206a, 0x2d00, 0x702e,
++ 0x70b4, 0x8000, 0x70b6, 0x002e, 0x00ee, 0x015e, 0x0005, 0x6844,
++ 0xa086, 0x0100, 0x1130, 0x6868, 0xa005, 0x1118, 0x2009, 0x8020,
++ 0x0880, 0x2071, 0xc734, 0x2d08, 0x206b, 0x0000, 0x7010, 0x8000,
++ 0x7012, 0x7018, 0xa06d, 0x711a, 0x0110, 0x6902, 0x0008, 0x711e,
++ 0x0c10, 0xa18c, 0x00ff, 0xa186, 0x0013, 0x01e0, 0xa186, 0x001b,
++ 0x01c8, 0xa186, 0x0023, 0x01e8, 0xa186, 0x0017, 0x0130, 0xa186,
++ 0x001e, 0x0118, 0xa18e, 0x001f, 0x19e0, 0x684c, 0xd0cc, 0x09c8,
++ 0x6850, 0xa084, 0x00ff, 0xa086, 0x0001, 0x1998, 0x2009, 0x8021,
++ 0x0804, 0x5841, 0x6848, 0xa005, 0x1960, 0x2009, 0x8022, 0x0804,
++ 0x5841, 0x2071, 0x0000, 0x7018, 0xd084, 0x1918, 0x00e6, 0x2071,
++ 0xc682, 0x7140, 0x00ee, 0x6838, 0xa102, 0x0a04, 0x5871, 0x684c,
++ 0xa005, 0x1158, 0x00e6, 0x2071, 0xc682, 0x7004, 0x00ee, 0xd08c,
++ 0x1904, 0x5871, 0x2001, 0x8024, 0x0040, 0x6848, 0xd084, 0x1118,
++ 0x2001, 0x8023, 0x0010, 0x2001, 0x8027, 0x7022, 0x6840, 0x7026,
++ 0x683c, 0x702a, 0x6850, 0x702e, 0x0026, 0x0036, 0x6b38, 0x2e10,
++ 0xa290, 0x0072, 0x2d00, 0xa080, 0x0015, 0x200c, 0x2112, 0x8000,
++ 0x200c, 0x8210, 0x8319, 0x1dd0, 0x003e, 0x002e, 0x0804, 0x5856,
++ 0x7084, 0x8008, 0xa092, 0x001e, 0x1a04, 0x5871, 0x7186, 0xae90,
++ 0x0003, 0xa210, 0x683c, 0x2012, 0x0080, 0x7084, 0x8008, 0xa092,
++ 0x000f, 0x1a04, 0x5871, 0x7186, 0xae90, 0x0003, 0x8003, 0xa210,
++ 0x683c, 0x2012, 0x8210, 0x6840, 0x2012, 0x7088, 0xa10a, 0x0a04,
++ 0x585a, 0x718c, 0x7084, 0xa10a, 0x0a04, 0x585a, 0x2071, 0x0000,
++ 0x7018, 0xd084, 0x1904, 0x585a, 0x2071, 0xc87b, 0x7000, 0xa086,
++ 0x0002, 0x1150, 0x080c, 0x5b75, 0x2071, 0x0000, 0x701b, 0x0001,
++ 0x2091, 0x4080, 0x0804, 0x585a, 0x080c, 0x5b9f, 0x2071, 0x0000,
++ 0x701b, 0x0001, 0x2091, 0x4080, 0x0804, 0x585a, 0x0006, 0x684c,
++ 0x0006, 0x6837, 0x0103, 0x20a9, 0x001c, 0xad80, 0x0011, 0x20a0,
++ 0x2001, 0x0000, 0x40a4, 0x000e, 0xa084, 0x00ff, 0x684e, 0x000e,
++ 0x684a, 0x6952, 0x0005, 0x2071, 0xc734, 0x7004, 0x0002, 0x5951,
++ 0x5962, 0x5b60, 0x5b61, 0x5b6e, 0x5b74, 0x5952, 0x5b51, 0x5ae7,
++ 0x5b3d, 0x0005, 0x0126, 0x2091, 0x8000, 0x0e04, 0x5961, 0x2009,
++ 0x000d, 0x7030, 0x200a, 0x2091, 0x4080, 0x7007, 0x0001, 0x700b,
++ 0x0000, 0x012e, 0x2069, 0xc93a, 0x683c, 0xa005, 0x03f8, 0x11f0,
++ 0x0126, 0x2091, 0x8000, 0x2069, 0x0000, 0x6934, 0x2001, 0xc740,
++ 0x2004, 0xa10a, 0x0170, 0x0e04, 0x5985, 0x2069, 0x0000, 0x6818,
++ 0xd084, 0x1158, 0x2009, 0x8040, 0x6922, 0x681b, 0x0001, 0x2091,
++ 0x4080, 0x2069, 0xc93a, 0x683f, 0xffff, 0x012e, 0x2069, 0xc600,
++ 0x6848, 0x6968, 0xa102, 0x2069, 0xc87b, 0x688a, 0x6984, 0x701c,
++ 0xa06d, 0x0120, 0x81ff, 0x0904, 0x59db, 0x00a0, 0x81ff, 0x0904,
++ 0x5aa1, 0x2071, 0xc87b, 0x7184, 0x7088, 0xa10a, 0x1258, 0x7190,
++ 0x2071, 0xc93a, 0x7038, 0xa005, 0x0128, 0x1b04, 0x5aa1, 0x713a,
++ 0x0804, 0x5aa1, 0x2071, 0xc87b, 0x718c, 0x0126, 0x2091, 0x8000,
++ 0x7084, 0xa10a, 0x0a04, 0x5abc, 0x0e04, 0x5a5d, 0x2071, 0x0000,
++ 0x7018, 0xd084, 0x1904, 0x5a5d, 0x2001, 0xffff, 0x2071, 0xc93a,
++ 0x703a, 0x2071, 0xc87b, 0x7000, 0xa086, 0x0002, 0x1150, 0x080c,
++ 0x5b75, 0x2071, 0x0000, 0x701b, 0x0001, 0x2091, 0x4080, 0x0804,
++ 0x5a5d, 0x080c, 0x5b9f, 0x2071, 0x0000, 0x701b, 0x0001, 0x2091,
++ 0x4080, 0x0804, 0x5a5d, 0x2071, 0xc87b, 0x7000, 0xa005, 0x0904,
++ 0x5a83, 0x6934, 0xa186, 0x0103, 0x1904, 0x5a60, 0x684c, 0xd0bc,
++ 0x1904, 0x5a83, 0x6948, 0x6844, 0xa105, 0x1904, 0x5a78, 0x2009,
++ 0x8020, 0x2071, 0xc87b, 0x7000, 0x0002, 0x5a83, 0x5a43, 0x5a1b,
++ 0x5a2d, 0x59fa, 0x0136, 0x0146, 0x0156, 0x2099, 0xc676, 0x20a1,
++ 0xc8cc, 0x20a9, 0x0004, 0x53a3, 0x015e, 0x014e, 0x013e, 0x2071,
++ 0xc8c3, 0xad80, 0x000f, 0x700e, 0x7013, 0x0002, 0x7007, 0x0002,
++ 0x700b, 0x0000, 0x2e10, 0x080c, 0x164d, 0x2071, 0xc734, 0x7007,
++ 0x0009, 0x0804, 0x5aa1, 0x7084, 0x8008, 0xa092, 0x001e, 0x1a04,
++ 0x5aa1, 0xae90, 0x0003, 0xa210, 0x683c, 0x2012, 0x7186, 0x2071,
++ 0xc734, 0x080c, 0x5bf6, 0x0804, 0x5aa1, 0x7084, 0x8008, 0xa092,
++ 0x000f, 0x1a04, 0x5aa1, 0xae90, 0x0003, 0x8003, 0xa210, 0x683c,
++ 0x2012, 0x8210, 0x6840, 0x2012, 0x7186, 0x2071, 0xc734, 0x080c,
++ 0x5bf6, 0x0804, 0x5aa1, 0x0126, 0x2091, 0x8000, 0x0e04, 0x5a5d,
++ 0x2071, 0x0000, 0x7018, 0xd084, 0x1180, 0x7122, 0x683c, 0x7026,
++ 0x6840, 0x702a, 0x701b, 0x0001, 0x2091, 0x4080, 0x012e, 0x2071,
++ 0xc734, 0x080c, 0x5bf6, 0x0804, 0x5aa1, 0x012e, 0x0804, 0x5aa1,
++ 0xa18c, 0x00ff, 0xa186, 0x0017, 0x0130, 0xa186, 0x001e, 0x0118,
++ 0xa18e, 0x001f, 0x11c0, 0x684c, 0xd0cc, 0x01a8, 0x6850, 0xa084,
++ 0x00ff, 0xa086, 0x0001, 0x1178, 0x2009, 0x8021, 0x0804, 0x59f1,
++ 0x6844, 0xa086, 0x0100, 0x1138, 0x6868, 0xa005, 0x1120, 0x2009,
++ 0x8020, 0x0804, 0x59f1, 0x2071, 0xc734, 0x080c, 0x5c08, 0x01c8,
++ 0x2071, 0xc734, 0x700f, 0x0001, 0x6934, 0xa184, 0x00ff, 0xa086,
++ 0x0003, 0x1130, 0x810f, 0xa18c, 0x00ff, 0x8101, 0x0108, 0x710e,
++ 0x7007, 0x0003, 0x080c, 0x5c21, 0x7050, 0xa086, 0x0100, 0x0904,
++ 0x5b61, 0x0126, 0x2091, 0x8000, 0x2071, 0xc734, 0x7008, 0xa086,
++ 0x0001, 0x1180, 0x0e04, 0x5aba, 0x2009, 0x000d, 0x7030, 0x200a,
++ 0x2091, 0x4080, 0x700b, 0x0000, 0x7004, 0xa086, 0x0006, 0x1110,
++ 0x7007, 0x0001, 0x012e, 0x0005, 0x2071, 0xc734, 0x080c, 0x5c08,
++ 0x0518, 0x2071, 0xc87b, 0x7084, 0x700a, 0x20a9, 0x0020, 0x2099,
++ 0xc87c, 0x20a1, 0xc8a3, 0x53a3, 0x7087, 0x0000, 0x2071, 0xc734,
++ 0x2069, 0xc8c3, 0x706c, 0x6826, 0x7070, 0x682a, 0x7074, 0x682e,
++ 0x7078, 0x6832, 0x2d10, 0x080c, 0x164d, 0x7007, 0x0008, 0x2001,
++ 0xffff, 0x2071, 0xc93a, 0x703a, 0x012e, 0x0804, 0x5aa1, 0x2069,
++ 0xc8c3, 0x6808, 0xa08e, 0x0000, 0x0904, 0x5b3c, 0xa08e, 0x0200,
++ 0x0904, 0x5b3a, 0xa08e, 0x0100, 0x1904, 0x5b3c, 0x0126, 0x2091,
++ 0x8000, 0x0e04, 0x5b38, 0x2069, 0x0000, 0x6818, 0xd084, 0x15c0,
++ 0x702c, 0x7130, 0x8108, 0xa102, 0x0230, 0xa00e, 0x7034, 0x706e,
++ 0x7038, 0x7072, 0x0048, 0x706c, 0xa080, 0x0040, 0x706e, 0x1220,
++ 0x7070, 0xa081, 0x0000, 0x7072, 0x7132, 0x6936, 0x700b, 0x0000,
++ 0x2001, 0xc8a0, 0x2004, 0xa005, 0x1190, 0x6934, 0x2069, 0xc87b,
++ 0x689c, 0x699e, 0x2069, 0xc93a, 0xa102, 0x1118, 0x683c, 0xa005,
++ 0x1368, 0x2001, 0xc8a1, 0x200c, 0x810d, 0x693e, 0x0038, 0x2009,
++ 0x8040, 0x6922, 0x681b, 0x0001, 0x2091, 0x4080, 0x7007, 0x0001,
++ 0x012e, 0x0010, 0x7007, 0x0005, 0x0005, 0x2001, 0xc8c5, 0x2004,
++ 0xa08e, 0x0100, 0x1128, 0x7007, 0x0001, 0x080c, 0x5bf6, 0x0005,
++ 0xa08e, 0x0000, 0x0de0, 0xa08e, 0x0200, 0x1dc8, 0x7007, 0x0005,
++ 0x0005, 0x701c, 0xa06d, 0x0158, 0x080c, 0x5c08, 0x0140, 0x7007,
++ 0x0003, 0x080c, 0x5c21, 0x7050, 0xa086, 0x0100, 0x0110, 0x0005,
++ 0x0005, 0x7050, 0xa09e, 0x0100, 0x1118, 0x7007, 0x0004, 0x0030,
++ 0xa086, 0x0200, 0x1110, 0x7007, 0x0005, 0x0005, 0x080c, 0x5bc4,
++ 0x7006, 0x080c, 0x5bf6, 0x0005, 0x0005, 0x00e6, 0x0156, 0x2071,
++ 0xc87b, 0x7184, 0x81ff, 0x0500, 0xa006, 0x7086, 0xae80, 0x0003,
++ 0x2071, 0x0000, 0x21a8, 0x2014, 0x7226, 0x8000, 0x0f04, 0x5b99,
++ 0x2014, 0x722a, 0x8000, 0x0f04, 0x5b99, 0x2014, 0x722e, 0x8000,
++ 0x0f04, 0x5b99, 0x2014, 0x723a, 0x8000, 0x0f04, 0x5b99, 0x2014,
++ 0x723e, 0xa180, 0x8030, 0x7022, 0x015e, 0x00ee, 0x0005, 0x00e6,
++ 0x0156, 0x2071, 0xc87b, 0x7184, 0x81ff, 0x01d8, 0xa006, 0x7086,
++ 0xae80, 0x0003, 0x2071, 0x0000, 0x21a8, 0x2014, 0x7226, 0x8000,
++ 0x2014, 0x722a, 0x8000, 0x0f04, 0x5bbb, 0x2014, 0x723a, 0x8000,
++ 0x2014, 0x723e, 0x0018, 0x2001, 0x8020, 0x0010, 0x2001, 0x8042,
++ 0x7022, 0x015e, 0x00ee, 0x0005, 0x702c, 0x7130, 0x8108, 0xa102,
++ 0x0230, 0xa00e, 0x7034, 0x706e, 0x7038, 0x7072, 0x0048, 0x706c,
++ 0xa080, 0x0040, 0x706e, 0x1220, 0x7070, 0xa081, 0x0000, 0x7072,
++ 0x7132, 0x700c, 0x8001, 0x700e, 0x1180, 0x0126, 0x2091, 0x8000,
++ 0x0e04, 0x5bf0, 0x2001, 0x000d, 0x2102, 0x2091, 0x4080, 0x2001,
++ 0x0001, 0x700b, 0x0000, 0x012e, 0x0005, 0x2001, 0x0007, 0x0005,
++ 0x2001, 0x0006, 0x700b, 0x0001, 0x012e, 0x0005, 0x701c, 0xa06d,
++ 0x0170, 0x0126, 0x2091, 0x8000, 0x7010, 0x8001, 0x7012, 0x2d04,
++ 0x701e, 0xa005, 0x1108, 0x701a, 0x012e, 0x080c, 0x1619, 0x0005,
++ 0x2019, 0x000d, 0x2304, 0x230c, 0xa10e, 0x0130, 0x2304, 0x230c,
++ 0xa10e, 0x0110, 0xa006, 0x0060, 0x732c, 0x8319, 0x7130, 0xa102,
++ 0x1118, 0x2300, 0xa005, 0x0020, 0x0210, 0xa302, 0x0008, 0x8002,
++ 0x0005, 0x2d00, 0x7026, 0xa080, 0x000d, 0x7056, 0x7053, 0x0000,
++ 0x0126, 0x2091, 0x8000, 0x2009, 0xc959, 0x2104, 0xc08d, 0x200a,
++ 0x012e, 0x080c, 0x1669, 0x0005, 0x708c, 0xa08a, 0x0029, 0x1220,
++ 0xa082, 0x001d, 0x0033, 0x0010, 0x080c, 0x1519, 0x6027, 0x1e00,
++ 0x0005, 0x5d2f, 0x5caa, 0x5cc2, 0x5cff, 0x5d20, 0x5d5a, 0x5d6c,
++ 0x5cc2, 0x5d46, 0x5c4e, 0x5c7c, 0x5c4d, 0x0005, 0x00d6, 0x2069,
++ 0x0200, 0x6804, 0xa005, 0x1180, 0x6808, 0xa005, 0x1518, 0x708f,
++ 0x0028, 0x2069, 0xc90c, 0x2d04, 0x7002, 0x080c, 0x6024, 0x6028,
++ 0xa085, 0x0600, 0x602a, 0x00b0, 0x708f, 0x0028, 0x2069, 0xc90c,
++ 0x2d04, 0x7002, 0x6028, 0xa085, 0x0600, 0x602a, 0x00e6, 0x0036,
++ 0x0046, 0x0056, 0x2071, 0xc96a, 0x080c, 0x1ec3, 0x005e, 0x004e,
++ 0x003e, 0x00ee, 0x00de, 0x0005, 0x00d6, 0x2069, 0x0200, 0x6804,
++ 0xa005, 0x1180, 0x6808, 0xa005, 0x1518, 0x708f, 0x0028, 0x2069,
++ 0xc90c, 0x2d04, 0x7002, 0x080c, 0x60b1, 0x6028, 0xa085, 0x0600,
++ 0x602a, 0x00b0, 0x708f, 0x0028, 0x2069, 0xc90c, 0x2d04, 0x7002,
++ 0x6028, 0xa085, 0x0600, 0x602a, 0x00e6, 0x0036, 0x0046, 0x0056,
++ 0x2071, 0xc96a, 0x080c, 0x1ec3, 0x005e, 0x004e, 0x003e, 0x00ee,
++ 0x00de, 0x0005, 0x6803, 0x0090, 0x6124, 0xd1e4, 0x1190, 0x080c,
++ 0x5dd7, 0xd1d4, 0x1160, 0xd1dc, 0x1138, 0xd1cc, 0x0150, 0x708f,
++ 0x0020, 0x080c, 0x5dd7, 0x0028, 0x708f, 0x001d, 0x0010, 0x708f,
++ 0x001f, 0x0005, 0x6803, 0x0088, 0x6124, 0xd1cc, 0x1590, 0xd1dc,
++ 0x1568, 0xd1e4, 0x1540, 0xa184, 0x1e00, 0x1580, 0x60e3, 0x0001,
++ 0x600c, 0xc0b4, 0x600e, 0x080c, 0x5f52, 0x080c, 0x25fb, 0x0156,
++ 0x6803, 0x0100, 0x20a9, 0x0014, 0x6804, 0xd0dc, 0x1118, 0x1f04,
++ 0x5cdc, 0x0048, 0x20a9, 0x0014, 0x6803, 0x0080, 0x6804, 0xd0d4,
++ 0x1130, 0x1f04, 0x5ce6, 0x080c, 0x5f73, 0x015e, 0x0078, 0x015e,
++ 0x708f, 0x0028, 0x0058, 0x708f, 0x001e, 0x0040, 0x708f, 0x001d,
++ 0x0028, 0x708f, 0x0020, 0x0010, 0x708f, 0x001f, 0x0005, 0x60e3,
++ 0x0001, 0x600c, 0xc0b4, 0x600e, 0x080c, 0x5f52, 0x080c, 0x25fb,
++ 0x6803, 0x0080, 0x6124, 0xd1d4, 0x1180, 0xd1dc, 0x1158, 0xd1e4,
++ 0x1130, 0xa184, 0x1e00, 0x1158, 0x708f, 0x0028, 0x0040, 0x708f,
++ 0x001e, 0x0028, 0x708f, 0x001d, 0x0010, 0x708f, 0x001f, 0x0005,
++ 0x6803, 0x00a0, 0x6124, 0xd1dc, 0x1138, 0xd1e4, 0x0138, 0x080c,
++ 0x1f06, 0x708f, 0x001e, 0x0010, 0x708f, 0x001d, 0x0005, 0x080c,
++ 0x5e49, 0x6124, 0xd1dc, 0x1188, 0x080c, 0x5dd7, 0x0016, 0x080c,
++ 0x1f06, 0x001e, 0xd1d4, 0x1128, 0xd1e4, 0x0138, 0x708f, 0x001e,
++ 0x0020, 0x708f, 0x001f, 0x080c, 0x5dd7, 0x0005, 0x6803, 0x00a0,
++ 0x6124, 0xd1d4, 0x1160, 0xd1cc, 0x1150, 0xd1dc, 0x1128, 0xd1e4,
++ 0x0140, 0x708f, 0x001e, 0x0028, 0x708f, 0x001d, 0x0010, 0x708f,
++ 0x0021, 0x0005, 0x080c, 0x5e49, 0x6124, 0xd1d4, 0x1150, 0xd1dc,
++ 0x1128, 0xd1e4, 0x0140, 0x708f, 0x001e, 0x0028, 0x708f, 0x001d,
++ 0x0010, 0x708f, 0x001f, 0x0005, 0x6803, 0x0090, 0x6124, 0xd1d4,
++ 0x1178, 0xd1cc, 0x1150, 0xd1dc, 0x1128, 0xd1e4, 0x0158, 0x708f,
++ 0x001e, 0x0040, 0x708f, 0x001d, 0x0028, 0x708f, 0x0020, 0x0010,
++ 0x708f, 0x001f, 0x0005, 0x0016, 0x00c6, 0x00d6, 0x00e6, 0x0126,
++ 0x2061, 0x0100, 0x2069, 0x0140, 0x2071, 0xc600, 0x2091, 0x8000,
++ 0x080c, 0x5f22, 0x11e8, 0x2001, 0xc60c, 0x200c, 0xd1b4, 0x01c0,
++ 0xc1b4, 0x2102, 0x6027, 0x0200, 0xe000, 0xe000, 0x6024, 0xd0cc,
++ 0x0158, 0x6803, 0x00a0, 0x2001, 0xc8e6, 0x2003, 0x0001, 0x2001,
++ 0xc600, 0x2003, 0x0001, 0x0428, 0x6028, 0xc0cd, 0x602a, 0x0408,
++ 0x080c, 0x5f3e, 0x0150, 0x080c, 0x5f34, 0x1138, 0x2001, 0x0001,
++ 0x080c, 0x296d, 0x080c, 0x5ef9, 0x00a0, 0x080c, 0x5e46, 0x0178,
++ 0x2001, 0x0001, 0x080c, 0x296d, 0x708c, 0xa086, 0x001e, 0x0120,
++ 0x708c, 0xa086, 0x0022, 0x1118, 0x708f, 0x0025, 0x0010, 0x708f,
++ 0x0021, 0x012e, 0x00ee, 0x00de, 0x00ce, 0x001e, 0x0005, 0x0026,
++ 0x2011, 0x5de8, 0x080c, 0x7070, 0x002e, 0x0016, 0x0026, 0x2009,
++ 0x0064, 0x2011, 0x5de8, 0x080c, 0x7067, 0x002e, 0x001e, 0x0005,
++ 0x00e6, 0x00f6, 0x0016, 0x080c, 0x8bf5, 0x2071, 0xc600, 0x080c,
++ 0x5d83, 0x001e, 0x00fe, 0x00ee, 0x0005, 0x0016, 0x0026, 0x0036,
++ 0x00c6, 0x00d6, 0x00e6, 0x00f6, 0x0126, 0x080c, 0x8bf5, 0x2061,
++ 0x0100, 0x2069, 0x0140, 0x2071, 0xc600, 0x2091, 0x8000, 0x6028,
++ 0xc09c, 0x602a, 0x2011, 0x0003, 0x080c, 0x8f0e, 0x2011, 0x0002,
++ 0x080c, 0x8f18, 0x080c, 0x8dee, 0x080c, 0x7024, 0x0036, 0x2019,
++ 0x0000, 0x080c, 0x8e79, 0x003e, 0x60e3, 0x0000, 0x080c, 0xc586,
++ 0x080c, 0xc5a1, 0x2001, 0xc600, 0x2003, 0x0004, 0x6027, 0x0008,
++ 0x080c, 0x12e1, 0x2001, 0x0001, 0x080c, 0x296d, 0x012e, 0x00fe,
++ 0x00ee, 0x00de, 0x00ce, 0x003e, 0x002e, 0x001e, 0x0005, 0x2001,
++ 0xc600, 0x2004, 0xa086, 0x0004, 0x0140, 0x2001, 0xc8e5, 0x2003,
++ 0xaaaa, 0x2001, 0xc8e6, 0x2003, 0x0000, 0x0005, 0x6020, 0xd09c,
++ 0x0005, 0x6800, 0xa086, 0x00c0, 0x0160, 0x6803, 0x00c0, 0x0156,
++ 0x20a9, 0x002d, 0x1d04, 0x5e52, 0x2091, 0x6000, 0x1f04, 0x5e52,
++ 0x015e, 0x0005, 0x00c6, 0x00d6, 0x00e6, 0x2061, 0x0100, 0x2069,
++ 0x0140, 0x2071, 0xc600, 0x2001, 0xc8e6, 0x200c, 0xa186, 0x0000,
++ 0x0158, 0xa186, 0x0001, 0x0158, 0xa186, 0x0002, 0x0158, 0xa186,
++ 0x0003, 0x0158, 0x0804, 0x5ee7, 0x708f, 0x0022, 0x0040, 0x708f,
++ 0x0021, 0x0028, 0x708f, 0x0023, 0x0020, 0x708f, 0x0024, 0x6043,
++ 0x0000, 0x60e3, 0x0000, 0x6887, 0x0001, 0x2001, 0x0001, 0x080c,
++ 0x2a1c, 0x0026, 0x2011, 0x0003, 0x080c, 0x8f0e, 0x2011, 0x0002,
++ 0x080c, 0x8f18, 0x080c, 0x8dee, 0x0036, 0x2019, 0x0000, 0x080c,
++ 0x8e79, 0x003e, 0x002e, 0x7000, 0xa08e, 0x0004, 0x0118, 0x602b,
++ 0x0028, 0x0010, 0x602b, 0x0020, 0x0156, 0x0126, 0x2091, 0x8000,
++ 0x20a9, 0x0005, 0x6024, 0xd0ac, 0x0120, 0x012e, 0x015e, 0x0804,
++ 0x5ef5, 0x6800, 0xa084, 0x00a0, 0xc0bd, 0x6802, 0x6904, 0xd1d4,
++ 0x1130, 0x6803, 0x0100, 0x1f04, 0x5eaa, 0x080c, 0x5f73, 0x012e,
++ 0x015e, 0x080c, 0x5f34, 0x01a8, 0x6044, 0xa005, 0x0168, 0x6050,
++ 0x0006, 0xa085, 0x0020, 0x6052, 0x080c, 0x5f73, 0xa006, 0x8001,
++ 0x1df0, 0x000e, 0x6052, 0x0028, 0x6804, 0xd0d4, 0x1110, 0x080c,
++ 0x5f73, 0x0016, 0x0026, 0x2009, 0x00c8, 0x2011, 0x5df5, 0x080c,
++ 0x7036, 0x002e, 0x001e, 0x2001, 0xc8e6, 0x2003, 0x0004, 0x080c,
++ 0x5c34, 0x080c, 0x5f34, 0x0148, 0x6804, 0xd0d4, 0x1130, 0xd0dc,
++ 0x1100, 0x2001, 0xc8e6, 0x2003, 0x0000, 0x00ee, 0x00de, 0x00ce,
++ 0x0005, 0x00c6, 0x00d6, 0x00e6, 0x2061, 0x0100, 0x2069, 0x0140,
++ 0x2071, 0xc600, 0x2001, 0xc8e5, 0x2003, 0x0000, 0x2001, 0xc8d6,
++ 0x2003, 0x0000, 0x708f, 0x0000, 0x60e3, 0x0000, 0x6887, 0x0000,
++ 0x2001, 0x0000, 0x080c, 0x2a1c, 0x6803, 0x0000, 0x6043, 0x0090,
++ 0x6043, 0x0010, 0x6027, 0xffff, 0x602b, 0x182f, 0x00ee, 0x00de,
++ 0x00ce, 0x0005, 0x0006, 0x2001, 0xc8e5, 0x2004, 0xa086, 0xaaaa,
++ 0x000e, 0x0005, 0x0006, 0x2001, 0xc672, 0x2004, 0xa084, 0x0030,
++ 0xa086, 0x0000, 0x000e, 0x0005, 0x0006, 0x2001, 0xc672, 0x2004,
++ 0xa084, 0x0030, 0xa086, 0x0030, 0x000e, 0x0005, 0x0006, 0x2001,
++ 0xc672, 0x2004, 0xa084, 0x0030, 0xa086, 0x0010, 0x000e, 0x0005,
++ 0x0006, 0x2001, 0xc672, 0x2004, 0xa084, 0x0030, 0xa086, 0x0020,
++ 0x000e, 0x0005, 0x2001, 0xc60c, 0x2004, 0xd0a4, 0x0170, 0x080c,
++ 0x2a3c, 0x0036, 0x0016, 0x2009, 0x0000, 0x2019, 0x0028, 0x080c,
++ 0x2e19, 0x001e, 0x003e, 0xa006, 0x0009, 0x0005, 0x00e6, 0x2071,
++ 0xc60c, 0x2e04, 0x0118, 0xa085, 0x0010, 0x0010, 0xa084, 0xffef,
++ 0x2072, 0x00ee, 0x0005, 0x6050, 0x0006, 0x60f0, 0x0006, 0x60ec,
++ 0x0006, 0x600c, 0x0006, 0x6004, 0x0006, 0x6028, 0x0006, 0x602f,
++ 0x0100, 0x602f, 0x0000, 0x602f, 0x0040, 0x602f, 0x0000, 0x000e,
++ 0x602a, 0x000e, 0x6006, 0x000e, 0x600e, 0x000e, 0x60ee, 0x000e,
++ 0x60f2, 0x60e3, 0x0000, 0x6887, 0x0001, 0x2001, 0x0001, 0x080c,
++ 0x2a1c, 0x6800, 0xa084, 0x00a0, 0xc0bd, 0x6802, 0x6803, 0x00a0,
++ 0x000e, 0x6052, 0x6050, 0x0005, 0x0156, 0x0016, 0x0026, 0x0036,
++ 0x00c6, 0x00d6, 0x00e6, 0x2061, 0x0100, 0x2069, 0x0140, 0x2071,
++ 0xc600, 0x6020, 0xa084, 0x0080, 0x0138, 0x2001, 0xc60c, 0x200c,
++ 0xc1bd, 0x2102, 0x0804, 0x601c, 0x2001, 0xc60c, 0x200c, 0xc1bc,
++ 0x2102, 0x6028, 0xa084, 0xe1ff, 0x602a, 0x6027, 0x0200, 0x6803,
++ 0x0090, 0x20a9, 0x0384, 0x6024, 0xd0cc, 0x1508, 0x1d04, 0x5fcb,
++ 0x2091, 0x6000, 0x1f04, 0x5fcb, 0x2011, 0x0003, 0x080c, 0x8f0e,
++ 0x2011, 0x0002, 0x080c, 0x8f18, 0x080c, 0x8dee, 0x2019, 0x0000,
++ 0x080c, 0x8e79, 0x6803, 0x00a0, 0x2001, 0xc8e6, 0x2003, 0x0001,
++ 0x2001, 0xc600, 0x2003, 0x0001, 0xa085, 0x0001, 0x0468, 0x86ff,
++ 0x1120, 0x080c, 0x1f06, 0x080c, 0x25fb, 0x60e3, 0x0000, 0x2001,
++ 0xc8d6, 0x2004, 0x080c, 0x2a1c, 0x60e2, 0x6803, 0x0080, 0x20a9,
++ 0x0384, 0x6027, 0x1e00, 0x2009, 0x1e00, 0xe000, 0x6024, 0xa10c,
++ 0x0138, 0x1d04, 0x6001, 0x2091, 0x6000, 0x1f04, 0x6001, 0x0820,
++ 0x6028, 0xa085, 0x1e00, 0x602a, 0x70a4, 0xa005, 0x1118, 0x6887,
++ 0x0001, 0x0008, 0x6886, 0xa006, 0x00ee, 0x00de, 0x00ce, 0x003e,
++ 0x002e, 0x001e, 0x015e, 0x0005, 0x0156, 0x0016, 0x0026, 0x0036,
++ 0x00c6, 0x00d6, 0x00e6, 0x2061, 0x0100, 0x2071, 0xc600, 0x2069,
++ 0x0140, 0x6020, 0xa084, 0x00c0, 0x0120, 0x6884, 0xa005, 0x1904,
++ 0x6078, 0x6803, 0x0088, 0x60e3, 0x0000, 0x6887, 0x0000, 0x2001,
++ 0x0000, 0x080c, 0x2a1c, 0x2069, 0x0200, 0x6804, 0xa005, 0x1118,
++ 0x6808, 0xa005, 0x01c0, 0x6028, 0xa084, 0xfbff, 0x602a, 0x6027,
++ 0x0400, 0x2069, 0xc90c, 0x7000, 0x206a, 0x708f, 0x0026, 0x7003,
++ 0x0001, 0x20a9, 0x0002, 0x1d04, 0x605b, 0x2091, 0x6000, 0x1f04,
++ 0x605b, 0x0804, 0x60a9, 0x2069, 0x0140, 0x20a9, 0x0384, 0x6027,
++ 0x1e00, 0x2009, 0x1e00, 0xe000, 0x6024, 0xa10c, 0x0520, 0xa084,
++ 0x1a00, 0x1508, 0x1d04, 0x6067, 0x2091, 0x6000, 0x1f04, 0x6067,
++ 0x2011, 0x0003, 0x080c, 0x8f0e, 0x2011, 0x0002, 0x080c, 0x8f18,
++ 0x080c, 0x8dee, 0x2019, 0x0000, 0x080c, 0x8e79, 0x6803, 0x00a0,
++ 0x2001, 0xc8e6, 0x2003, 0x0001, 0x2001, 0xc600, 0x2003, 0x0001,
++ 0xa085, 0x0001, 0x00b0, 0x080c, 0x25fb, 0x6803, 0x0080, 0x2069,
++ 0x0140, 0x60e3, 0x0000, 0x70a4, 0xa005, 0x1118, 0x6887, 0x0001,
++ 0x0008, 0x6886, 0x2001, 0xc8d6, 0x2004, 0x080c, 0x2a1c, 0x60e2,
++ 0xa006, 0x00ee, 0x00de, 0x00ce, 0x003e, 0x002e, 0x001e, 0x015e,
++ 0x0005, 0x0156, 0x0016, 0x0026, 0x0036, 0x00c6, 0x00d6, 0x00e6,
++ 0x2061, 0x0100, 0x2071, 0xc600, 0x6020, 0xa084, 0x00c0, 0x01e0,
++ 0x2011, 0x0003, 0x080c, 0x8f0e, 0x2011, 0x0002, 0x080c, 0x8f18,
++ 0x080c, 0x8dee, 0x2019, 0x0000, 0x080c, 0x8e79, 0x2069, 0x0140,
++ 0x6803, 0x00a0, 0x2001, 0xc8e6, 0x2003, 0x0001, 0x2001, 0xc600,
++ 0x2003, 0x0001, 0x0804, 0x614e, 0x2001, 0xc60c, 0x200c, 0xd1b4,
++ 0x1160, 0xc1b5, 0x2102, 0x080c, 0x5ddd, 0x2069, 0x0140, 0x080c,
++ 0x25fb, 0x6803, 0x0080, 0x60e3, 0x0000, 0x2069, 0x0200, 0x6804,
++ 0xa005, 0x1118, 0x6808, 0xa005, 0x01c0, 0x6028, 0xa084, 0xfdff,
++ 0x602a, 0x6027, 0x0200, 0x2069, 0xc90c, 0x7000, 0x206a, 0x708f,
++ 0x0027, 0x7003, 0x0001, 0x20a9, 0x0002, 0x1d04, 0x6105, 0x2091,
++ 0x6000, 0x1f04, 0x6105, 0x0804, 0x614e, 0x6027, 0x1e00, 0x2009,
++ 0x1e00, 0xe000, 0x6024, 0xa10c, 0x01c8, 0xa084, 0x1c00, 0x11b0,
++ 0x1d04, 0x610d, 0x0006, 0x0016, 0x00c6, 0x00d6, 0x00e6, 0x080c,
++ 0x6f0a, 0x00ee, 0x00de, 0x00ce, 0x001e, 0x000e, 0x00e6, 0x2071,
++ 0xc93a, 0x7018, 0x00ee, 0xa005, 0x1d00, 0x0500, 0x0026, 0x2011,
++ 0x5df5, 0x080c, 0x6fad, 0x2011, 0x5de8, 0x080c, 0x7070, 0x002e,
++ 0x2069, 0x0140, 0x60e3, 0x0000, 0x70a4, 0xa005, 0x1118, 0x6887,
++ 0x0001, 0x0008, 0x6886, 0x2001, 0xc8d6, 0x2004, 0x080c, 0x2a1c,
++ 0x60e2, 0x2001, 0xc60c, 0x200c, 0xc1b4, 0x2102, 0x00ee, 0x00de,
++ 0x00ce, 0x003e, 0x002e, 0x001e, 0x015e, 0x0005, 0x0156, 0x0016,
++ 0x0026, 0x0036, 0x0046, 0x00c6, 0x00e6, 0x2061, 0x0100, 0x2071,
++ 0xc600, 0x7130, 0xd184, 0x1180, 0x2011, 0xc653, 0x2214, 0xd2ec,
++ 0x0138, 0xc18d, 0x7132, 0x2011, 0xc653, 0x2214, 0xd2ac, 0x1120,
++ 0x7030, 0xd08c, 0x0904, 0x61bb, 0x7130, 0xc185, 0x7132, 0x2011,
++ 0xc653, 0x220c, 0xd1a4, 0x0530, 0x0016, 0x2019, 0x000e, 0x080c,
++ 0xc10d, 0x0156, 0x20a9, 0x007f, 0x2009, 0x0000, 0xa186, 0x007e,
++ 0x01a0, 0xa186, 0x0080, 0x0188, 0x080c, 0x533d, 0x1170, 0x8127,
++ 0xa006, 0x0016, 0x2009, 0x000e, 0x080c, 0xc190, 0x2009, 0x0001,
++ 0x2011, 0x0100, 0x080c, 0x712e, 0x001e, 0x8108, 0x1f04, 0x6186,
++ 0x015e, 0x001e, 0xd1ac, 0x1148, 0x0016, 0x2009, 0x0000, 0x2019,
++ 0x0004, 0x080c, 0x2e19, 0x001e, 0x0070, 0x0156, 0x20a9, 0x007f,
++ 0x2009, 0x0000, 0x080c, 0x533d, 0x1110, 0x080c, 0x4f47, 0x8108,
++ 0x1f04, 0x61b2, 0x015e, 0x080c, 0x1f06, 0x2011, 0x0003, 0x080c,
++ 0x8f0e, 0x2011, 0x0002, 0x080c, 0x8f18, 0x080c, 0x8dee, 0x0036,
++ 0x2019, 0x0000, 0x080c, 0x8e79, 0x003e, 0x60e3, 0x0000, 0x2001,
++ 0xc600, 0x2003, 0x0001, 0x080c, 0x5e5a, 0x00ee, 0x00ce, 0x004e,
++ 0x003e, 0x002e, 0x001e, 0x015e, 0x0005, 0x2071, 0xc702, 0x7003,
++ 0x0000, 0x7007, 0x0000, 0x700f, 0x0000, 0x702b, 0x0001, 0x704f,
++ 0x0000, 0x7053, 0x0001, 0x705f, 0x0020, 0x7063, 0x0040, 0x7083,
++ 0x0000, 0x708b, 0x0000, 0x708f, 0x0001, 0x70bf, 0x0000, 0x0005,
++ 0x00e6, 0x2071, 0xc702, 0x6848, 0xa005, 0x1130, 0x7028, 0xc085,
++ 0x702a, 0xa085, 0x0001, 0x0428, 0x6a50, 0x7236, 0x6b54, 0x733a,
++ 0x6858, 0x703e, 0x707a, 0x685c, 0x7042, 0x707e, 0x6848, 0x702e,
++ 0x6840, 0x7032, 0x2009, 0x000c, 0x200a, 0x8007, 0x8006, 0x8006,
++ 0xa08c, 0x003f, 0xa084, 0xffc0, 0xa210, 0x2100, 0xa319, 0x7272,
++ 0x7376, 0x7028, 0xc084, 0x702a, 0x7007, 0x0001, 0x700f, 0x0000,
++ 0xa006, 0x00ee, 0x0005, 0x2b78, 0x2071, 0xc702, 0x7004, 0x0043,
++ 0x700c, 0x0002, 0x6237, 0x622e, 0x622e, 0x622e, 0x622e, 0x0005,
++ 0x628d, 0x628e, 0x62c0, 0x62c1, 0x628b, 0x630f, 0x6314, 0x6345,
++ 0x6346, 0x6361, 0x6362, 0x6363, 0x6364, 0x6365, 0x6366, 0x6431,
++ 0x6458, 0x700c, 0x0002, 0x6250, 0x628b, 0x628b, 0x628c, 0x628c,
++ 0x7830, 0x7930, 0xa106, 0x0120, 0x7830, 0x7930, 0xa106, 0x1510,
++ 0x7030, 0xa10a, 0x01f8, 0x1210, 0x712c, 0xa10a, 0xa18a, 0x0002,
++ 0x12d0, 0x080c, 0x15e5, 0x01b0, 0x2d00, 0x705a, 0x7063, 0x0040,
++ 0x2001, 0x0003, 0x7057, 0x0000, 0x0126, 0x0006, 0x2091, 0x8000,
++ 0x2009, 0xc959, 0x2104, 0xc085, 0x200a, 0x000e, 0x700e, 0x012e,
++ 0x080c, 0x1669, 0x0005, 0x080c, 0x15e5, 0x0de0, 0x2d00, 0x705a,
++ 0x080c, 0x15e5, 0x1108, 0x0c10, 0x2d00, 0x7086, 0x7063, 0x0080,
++ 0x2001, 0x0004, 0x08f8, 0x0005, 0x0005, 0x0005, 0x700c, 0x0002,
++ 0x6295, 0x6298, 0x62a6, 0x62bf, 0x62bf, 0x080c, 0x6249, 0x0005,
++ 0x0126, 0x8001, 0x700e, 0x7058, 0x0006, 0x080c, 0x67d4, 0x0120,
++ 0x2091, 0x8000, 0x080c, 0x6249, 0x00de, 0x0048, 0x0126, 0x8001,
++ 0x700e, 0x080c, 0x67d4, 0x7058, 0x2068, 0x7084, 0x705a, 0x6803,
++ 0x0000, 0x6807, 0x0000, 0x6834, 0xa084, 0x00ff, 0xa08a, 0x003a,
++ 0x1218, 0x00db, 0x012e, 0x0005, 0x012e, 0x080c, 0x6367, 0x0005,
++ 0x0005, 0x0005, 0x00e6, 0x2071, 0xc702, 0x700c, 0x0002, 0x62cc,
++ 0x62cc, 0x62cc, 0x62ce, 0x62d1, 0x00ee, 0x0005, 0x700f, 0x0001,
++ 0x0010, 0x700f, 0x0002, 0x00ee, 0x0005, 0x6367, 0x6367, 0x6383,
++ 0x6367, 0x653e, 0x6367, 0x6367, 0x6367, 0x6367, 0x6367, 0x6383,
++ 0x6580, 0x65c3, 0x660c, 0x6620, 0x6367, 0x6367, 0x639f, 0x6383,
++ 0x63b3, 0x6367, 0x640e, 0x66cc, 0x66e7, 0x6367, 0x639f, 0x6367,
++ 0x63b3, 0x6367, 0x6367, 0x6404, 0x66e7, 0x6367, 0x6367, 0x6367,
++ 0x6367, 0x6367, 0x6367, 0x6367, 0x6367, 0x6367, 0x63c8, 0x6367,
++ 0x6367, 0x6367, 0x6367, 0x6367, 0x6367, 0x6367, 0x6367, 0x6367,
++ 0x6866, 0x6367, 0x67f2, 0x6367, 0x67f2, 0x6367, 0x63dd, 0x7020,
++ 0x2068, 0x080c, 0x1619, 0x0005, 0x700c, 0x0002, 0x631b, 0x631e,
++ 0x632c, 0x6344, 0x6344, 0x080c, 0x6249, 0x0005, 0x0126, 0x8001,
++ 0x700e, 0x7058, 0x0006, 0x080c, 0x67d4, 0x0120, 0x2091, 0x8000,
++ 0x080c, 0x6249, 0x00de, 0x0048, 0x0126, 0x8001, 0x700e, 0x080c,
++ 0x67d4, 0x7058, 0x2068, 0x7084, 0x705a, 0x6803, 0x0000, 0x6807,
++ 0x0000, 0x6834, 0xa084, 0x00ff, 0xa08a, 0x001a, 0x1218, 0x003b,
++ 0x012e, 0x0005, 0x012e, 0x0419, 0x0005, 0x0005, 0x0005, 0x6367,
++ 0x6383, 0x652a, 0x6367, 0x6383, 0x6367, 0x6383, 0x6383, 0x6367,
++ 0x6383, 0x652a, 0x6383, 0x6383, 0x6383, 0x6383, 0x6383, 0x6367,
++ 0x6383, 0x652a, 0x6367, 0x6367, 0x6383, 0x6367, 0x6367, 0x6367,
++ 0x6383, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x7007,
++ 0x0001, 0x6838, 0xa084, 0x00ff, 0xc0d5, 0x683a, 0x0126, 0x2091,
++ 0x8000, 0x080c, 0x580a, 0x012e, 0x0005, 0x7007, 0x0001, 0x6838,
++ 0xa084, 0x00ff, 0xc0e5, 0x683a, 0x0126, 0x2091, 0x8000, 0x080c,
++ 0x580a, 0x012e, 0x0005, 0x7007, 0x0001, 0x6838, 0xa084, 0x00ff,
++ 0xc0ed, 0x683a, 0x0126, 0x2091, 0x8000, 0x080c, 0x580a, 0x012e,
++ 0x0005, 0x7007, 0x0001, 0x6838, 0xa084, 0x00ff, 0xc0dd, 0x683a,
++ 0x0126, 0x2091, 0x8000, 0x080c, 0x580a, 0x012e, 0x0005, 0x6834,
++ 0x8007, 0xa084, 0x00ff, 0x0988, 0x8001, 0x1120, 0x7007, 0x0001,
++ 0x0804, 0x64c1, 0x7007, 0x0006, 0x7012, 0x2d00, 0x7016, 0x701a,
++ 0x704b, 0x64c1, 0x0005, 0x6834, 0x8007, 0xa084, 0x00ff, 0x0904,
++ 0x6375, 0x8001, 0x1120, 0x7007, 0x0001, 0x0804, 0x64de, 0x7007,
++ 0x0006, 0x7012, 0x2d00, 0x7016, 0x701a, 0x704b, 0x64de, 0x0005,
++ 0x6834, 0x8007, 0xa084, 0x00ff, 0x0904, 0x6375, 0x8001, 0x1120,
++ 0x7007, 0x0001, 0x0804, 0x6507, 0x7007, 0x0006, 0x7012, 0x2d00,
++ 0x7016, 0x701a, 0x704b, 0x6507, 0x0005, 0x6834, 0x8007, 0xa084,
++ 0x00ff, 0xa086, 0x0001, 0x1904, 0x6375, 0x7007, 0x0001, 0x2009,
++ 0xc631, 0x210c, 0x81ff, 0x11a8, 0x6838, 0xa084, 0x00ff, 0x683a,
++ 0x6853, 0x0000, 0x080c, 0x5116, 0x1108, 0x0005, 0x0126, 0x2091,
++ 0x8000, 0x6837, 0x0139, 0x684a, 0x6952, 0x080c, 0x580a, 0x012e,
++ 0x0ca0, 0x2001, 0x0028, 0x0c90, 0x684c, 0xa084, 0x00c0, 0xa086,
++ 0x00c0, 0x1120, 0x7007, 0x0001, 0x0804, 0x66ff, 0x2d00, 0x7016,
++ 0x701a, 0x20a9, 0x0004, 0xa080, 0x0024, 0x2098, 0x20a1, 0xc72d,
++ 0x53a3, 0x6858, 0x7012, 0xa082, 0x0401, 0x1a04, 0x6391, 0x6a84,
++ 0xa28a, 0x0002, 0x1a04, 0x6391, 0x82ff, 0x1138, 0x6888, 0x698c,
++ 0xa105, 0x0118, 0x2001, 0x6494, 0x0018, 0xa280, 0x648a, 0x2005,
++ 0x70c6, 0x7010, 0xa015, 0x0904, 0x6476, 0x080c, 0x15e5, 0x1118,
++ 0x7007, 0x000f, 0x0005, 0x2d00, 0x7022, 0x70c4, 0x2060, 0x2c05,
++ 0x6836, 0xe004, 0xad00, 0x7096, 0xe008, 0xa20a, 0x1210, 0xa00e,
++ 0x2200, 0x7112, 0xe20c, 0x8003, 0x800b, 0xa296, 0x0004, 0x0108,
++ 0xa108, 0x719a, 0x810b, 0x719e, 0xae90, 0x0022, 0x080c, 0x164d,
++ 0x7090, 0xa08e, 0x0100, 0x0170, 0xa086, 0x0200, 0x0118, 0x7007,
++ 0x0010, 0x0005, 0x7020, 0x2068, 0x080c, 0x1619, 0x7014, 0x2068,
++ 0x0804, 0x6391, 0x7020, 0x2068, 0x7018, 0x6802, 0x6807, 0x0000,
++ 0x2d08, 0x2068, 0x6906, 0x711a, 0x0804, 0x6431, 0x7014, 0x2068,
++ 0x7007, 0x0001, 0x6884, 0xa005, 0x1128, 0x6888, 0x698c, 0xa105,
++ 0x0108, 0x00b1, 0x6834, 0xa084, 0x00ff, 0xa086, 0x001e, 0x0904,
++ 0x66ff, 0x04b8, 0x648c, 0x6490, 0x0002, 0x0011, 0x0007, 0x0004,
++ 0x000a, 0x000f, 0x0005, 0x0006, 0x000a, 0x0011, 0x0005, 0x0004,
++ 0x00f6, 0x00e6, 0x00c6, 0x0076, 0x0066, 0x6f88, 0x6e8c, 0x6804,
++ 0x2060, 0xacf0, 0x0021, 0xacf8, 0x0027, 0x2009, 0x0005, 0x700c,
++ 0x7816, 0x7008, 0x7812, 0x7004, 0x7806, 0x7000, 0x7802, 0x7e0e,
++ 0x7f0a, 0x8109, 0x0128, 0xaef2, 0x0004, 0xaffa, 0x0006, 0x0c78,
++ 0x6004, 0xa065, 0x1d30, 0x006e, 0x007e, 0x00ce, 0x00ee, 0x00fe,
++ 0x0005, 0x2009, 0xc631, 0x210c, 0x81ff, 0x1198, 0x6838, 0xa084,
++ 0x00ff, 0x683a, 0x080c, 0x4fa6, 0x1108, 0x0005, 0x080c, 0x592e,
++ 0x0126, 0x2091, 0x8000, 0x080c, 0xaf03, 0x080c, 0x580a, 0x012e,
++ 0x0ca0, 0x2001, 0x0028, 0x2009, 0x0000, 0x0c80, 0x2009, 0xc631,
++ 0x210c, 0x81ff, 0x11d8, 0x6858, 0xa005, 0x01d8, 0x2001, 0xc756,
++ 0x2004, 0xa086, 0x0000, 0x01c0, 0x6838, 0xa084, 0x00ff, 0x683a,
++ 0x6853, 0x0000, 0x080c, 0x5068, 0x1108, 0x0005, 0x684a, 0x0126,
++ 0x2091, 0x8000, 0x080c, 0x580a, 0x012e, 0x0cb8, 0x2001, 0x0028,
++ 0x0ca8, 0x2001, 0x0000, 0x0c90, 0x2001, 0x002c, 0x0c78, 0x2009,
++ 0xc631, 0x210c, 0x81ff, 0x11b0, 0x6858, 0xa005, 0x01c0, 0x6838,
++ 0xa084, 0x00ff, 0x683a, 0x6853, 0x0000, 0x080c, 0x50ba, 0x1108,
++ 0x0005, 0x0126, 0x2091, 0x8000, 0x684a, 0x6952, 0x080c, 0x580a,
++ 0x012e, 0x0cb0, 0x2001, 0x0028, 0x2009, 0x0000, 0x0c90, 0x2001,
++ 0x0000, 0x0c78, 0x7018, 0x6802, 0x2d08, 0x2068, 0x6906, 0x711a,
++ 0x7010, 0x8001, 0x7012, 0x0118, 0x7007, 0x0006, 0x0030, 0x7014,
++ 0x2068, 0x7007, 0x0001, 0x7048, 0x080f, 0x0005, 0x7007, 0x0001,
++ 0x6944, 0x810f, 0xa18c, 0x00ff, 0x6848, 0xa084, 0x00ff, 0x20a9,
++ 0x0001, 0xa096, 0x0001, 0x01b0, 0x2009, 0x0000, 0x20a9, 0x00ff,
++ 0xa096, 0x0002, 0x0178, 0xa005, 0x11f0, 0x6944, 0x810f, 0xa18c,
++ 0x00ff, 0x080c, 0x533d, 0x11b8, 0x0066, 0x6e50, 0x080c, 0x543c,
++ 0x006e, 0x0088, 0x0046, 0x2011, 0xc60c, 0x2224, 0xc484, 0x2412,
++ 0x004e, 0x00c6, 0x080c, 0x533d, 0x1110, 0x080c, 0x559d, 0x8108,
++ 0x1f04, 0x656a, 0x00ce, 0x684c, 0xd084, 0x1118, 0x080c, 0x1619,
++ 0x0005, 0x0126, 0x2091, 0x8000, 0x080c, 0x580a, 0x012e, 0x0005,
++ 0x0126, 0x2091, 0x8000, 0x7007, 0x0001, 0x2001, 0xc653, 0x2004,
++ 0xd0a4, 0x0580, 0x2061, 0xc9bc, 0x6100, 0xd184, 0x0178, 0x6858,
++ 0xa084, 0x00ff, 0x1550, 0x6000, 0xd084, 0x0520, 0x6004, 0xa005,
++ 0x1538, 0x6003, 0x0000, 0x600b, 0x0000, 0x00c8, 0x2011, 0x0001,
++ 0x6860, 0xa005, 0x1110, 0x2001, 0x001e, 0x8000, 0x6016, 0x6858,
++ 0xa084, 0x00ff, 0x0178, 0x6006, 0x6858, 0x8007, 0xa084, 0x00ff,
++ 0x0148, 0x600a, 0x6858, 0x8000, 0x1108, 0xc28d, 0x6202, 0x012e,
++ 0x0804, 0x67c3, 0x012e, 0x0804, 0x67bd, 0x012e, 0x0804, 0x67b7,
++ 0x012e, 0x0804, 0x67ba, 0x0126, 0x2091, 0x8000, 0x7007, 0x0001,
++ 0x2001, 0xc653, 0x2004, 0xd0a4, 0x05e0, 0x2061, 0xc9bc, 0x6000,
++ 0xd084, 0x05b8, 0x6204, 0x6308, 0xd08c, 0x1530, 0x6c48, 0xa484,
++ 0x0003, 0x0170, 0x6958, 0xa18c, 0x00ff, 0x8001, 0x1120, 0x2100,
++ 0xa210, 0x0620, 0x0028, 0x8001, 0x1508, 0x2100, 0xa212, 0x02f0,
++ 0xa484, 0x000c, 0x0188, 0x6958, 0x810f, 0xa18c, 0x00ff, 0xa082,
++ 0x0004, 0x1120, 0x2100, 0xa318, 0x0288, 0x0030, 0xa082, 0x0004,
++ 0x1168, 0x2100, 0xa31a, 0x0250, 0x6860, 0xa005, 0x0110, 0x8000,
++ 0x6016, 0x6206, 0x630a, 0x012e, 0x0804, 0x67c3, 0x012e, 0x0804,
++ 0x67c0, 0x012e, 0x0804, 0x67bd, 0x0126, 0x2091, 0x8000, 0x7007,
++ 0x0001, 0x2061, 0xc9bc, 0x6300, 0xd38c, 0x1120, 0x6308, 0x8318,
++ 0x0220, 0x630a, 0x012e, 0x0804, 0x67d1, 0x012e, 0x0804, 0x67c0,
++ 0x0126, 0x00c6, 0x2091, 0x8000, 0x7007, 0x0001, 0x684c, 0xd0ac,
++ 0x0148, 0x00c6, 0x2061, 0xc9bc, 0x6000, 0xa084, 0xfcff, 0x6002,
++ 0x00ce, 0x0448, 0x6858, 0xa005, 0x05d0, 0x685c, 0xa065, 0x0598,
++ 0x2001, 0xc631, 0x2004, 0xa005, 0x0118, 0x080c, 0xae54, 0x0068,
++ 0x6013, 0x0400, 0x6057, 0x0000, 0x694c, 0xd1a4, 0x0110, 0x6950,
++ 0x6156, 0x2009, 0x0041, 0x080c, 0x9613, 0x6958, 0xa18c, 0xff00,
++ 0xa186, 0x2000, 0x1140, 0x0026, 0x2009, 0x0000, 0x2011, 0xfdff,
++ 0x080c, 0x712e, 0x002e, 0x684c, 0xd0c4, 0x0148, 0x2061, 0xc9bc,
++ 0x6000, 0xd08c, 0x1120, 0x6008, 0x8000, 0x0208, 0x600a, 0x00ce,
++ 0x012e, 0x0804, 0x67c3, 0x00ce, 0x012e, 0x0804, 0x67bd, 0x6954,
++ 0xa186, 0x002e, 0x0d40, 0xa186, 0x002d, 0x0d28, 0xa186, 0x0045,
++ 0x0528, 0xa186, 0x002a, 0x1130, 0x2001, 0xc60c, 0x200c, 0xc194,
++ 0x2102, 0x08c8, 0xa186, 0x0020, 0x0170, 0xa186, 0x0029, 0x1d18,
++ 0x6944, 0xa18c, 0xff00, 0x810f, 0x080c, 0x533d, 0x1960, 0x6000,
++ 0xc0e4, 0x6002, 0x0840, 0x685c, 0xa065, 0x09a8, 0x6007, 0x0024,
++ 0x2001, 0xc8fd, 0x2004, 0x6016, 0x0804, 0x665b, 0x685c, 0xa065,
++ 0x0950, 0x00e6, 0x6860, 0xa075, 0x2001, 0xc631, 0x2004, 0xa005,
++ 0x0150, 0x080c, 0xae54, 0x8eff, 0x0118, 0x2e60, 0x080c, 0xae54,
++ 0x00ee, 0x0804, 0x665b, 0x6020, 0xc0dc, 0xc0d5, 0x6022, 0x2e60,
++ 0x6007, 0x003a, 0x6870, 0xa005, 0x0130, 0x6007, 0x003b, 0x6874,
++ 0x602a, 0x6878, 0x6012, 0x6003, 0x0001, 0x080c, 0x7999, 0x080c,
++ 0x7e94, 0x00ee, 0x0804, 0x665b, 0x2061, 0xc9bc, 0x6000, 0xd084,
++ 0x0190, 0xd08c, 0x1904, 0x67d1, 0x0126, 0x2091, 0x8000, 0x6204,
++ 0x8210, 0x0220, 0x6206, 0x012e, 0x0804, 0x67d1, 0x012e, 0x6853,
++ 0x0016, 0x0804, 0x67ca, 0x6853, 0x0007, 0x0804, 0x67ca, 0x6834,
++ 0x8007, 0xa084, 0x00ff, 0x1118, 0x080c, 0x6375, 0x0078, 0x2030,
++ 0x8001, 0x1120, 0x7007, 0x0001, 0x0051, 0x0040, 0x7007, 0x0006,
++ 0x7012, 0x2d00, 0x7016, 0x701a, 0x704b, 0x66ff, 0x0005, 0x00e6,
++ 0x0126, 0x2091, 0x8000, 0xa03e, 0x2009, 0xc631, 0x210c, 0x81ff,
++ 0x1904, 0x677d, 0x2009, 0xc60c, 0x210c, 0xd194, 0x1904, 0x67a7,
++ 0x6848, 0x2070, 0xae82, 0xce00, 0x0a04, 0x6771, 0x2001, 0xc617,
++ 0x2004, 0xae02, 0x1a04, 0x6771, 0x711c, 0xa186, 0x0006, 0x1904,
++ 0x6760, 0x7018, 0xa005, 0x0904, 0x677d, 0x2004, 0xd0e4, 0x1904,
++ 0x67a2, 0x2061, 0xc9bc, 0x6100, 0xa184, 0x0301, 0xa086, 0x0001,
++ 0x1550, 0x7020, 0xd0dc, 0x1904, 0x67aa, 0x6853, 0x0000, 0x6803,
++ 0x0000, 0x2d08, 0x7010, 0xa005, 0x1158, 0x7112, 0x684c, 0xd0f4,
++ 0x1904, 0x67ad, 0x2e60, 0x080c, 0x708a, 0x012e, 0x00ee, 0x0005,
++ 0x2068, 0x6800, 0xa005, 0x1de0, 0x6902, 0x2168, 0x684c, 0xd0f4,
++ 0x1904, 0x67ad, 0x012e, 0x00ee, 0x0005, 0x012e, 0x00ee, 0x6853,
++ 0x0006, 0x0804, 0x67ca, 0xd184, 0x0dc0, 0xd1c4, 0x11a8, 0x00b8,
++ 0x6944, 0xa18c, 0xff00, 0x810f, 0x080c, 0x533d, 0x15d8, 0x6000,
++ 0xd0e4, 0x15c0, 0x711c, 0xa186, 0x0007, 0x1118, 0x6853, 0x0002,
++ 0x0498, 0x6853, 0x0008, 0x0480, 0x6853, 0x000e, 0x0468, 0x6853,
++ 0x0017, 0x0450, 0x6853, 0x0035, 0x0438, 0x2001, 0xc672, 0x2004,
++ 0xd0fc, 0x01e8, 0x6848, 0x2070, 0xae82, 0xce00, 0x02c0, 0x605c,
++ 0xae02, 0x12a8, 0x711c, 0xa186, 0x0006, 0x1188, 0x7018, 0xa005,
++ 0x0170, 0x2004, 0xd0bc, 0x0158, 0x2039, 0x0001, 0x7000, 0xa086,
++ 0x0007, 0x1904, 0x670a, 0x7003, 0x0002, 0x0804, 0x670a, 0x6853,
++ 0x0028, 0x0010, 0x6853, 0x0029, 0x012e, 0x00ee, 0x0418, 0x6853,
++ 0x002a, 0x0cd0, 0x6853, 0x0045, 0x0cb8, 0x2e60, 0x2019, 0x0002,
++ 0x6017, 0x0014, 0x080c, 0xbd55, 0x012e, 0x00ee, 0x0005, 0x2009,
++ 0x003e, 0x0058, 0x2009, 0x0004, 0x0040, 0x2009, 0x0006, 0x0028,
++ 0x2009, 0x0016, 0x0010, 0x2009, 0x0001, 0x6854, 0xa084, 0xff00,
++ 0xa105, 0x6856, 0x0126, 0x2091, 0x8000, 0x080c, 0x580a, 0x012e,
++ 0x0005, 0x080c, 0x1619, 0x0005, 0x702c, 0x7130, 0x8108, 0xa102,
++ 0x0230, 0xa00e, 0x7034, 0x7072, 0x7038, 0x7076, 0x0058, 0x7070,
++ 0xa080, 0x0040, 0x7072, 0x1230, 0x7074, 0xa081, 0x0000, 0x7076,
++ 0xa085, 0x0001, 0x7932, 0x7132, 0x0005, 0x00d6, 0x080c, 0x7081,
++ 0x00de, 0x0005, 0x2001, 0xc756, 0x2004, 0xa086, 0x0000, 0x0904,
++ 0x684d, 0x080c, 0x768f, 0x0904, 0x6850, 0x6868, 0xa084, 0x0007,
++ 0x0904, 0x6844, 0x080c, 0x958d, 0x0904, 0x6847, 0x2d00, 0x6012,
++ 0x6834, 0xa084, 0x00ff, 0xa086, 0x0035, 0x1198, 0x2001, 0xc8e5,
++ 0x2004, 0xa086, 0xaaaa, 0x0130, 0x2001, 0xc635, 0x2004, 0xa084,
++ 0x0028, 0x05c8, 0x6008, 0xc0fd, 0x600a, 0x2001, 0xc8d3, 0x2004,
++ 0x0098, 0x6870, 0xa084, 0x00ff, 0x696c, 0xa18c, 0xff00, 0xa105,
++ 0x696c, 0xa18c, 0x00ff, 0x080c, 0x29c7, 0x11e0, 0x00c6, 0x080c,
++ 0x533d, 0x2c00, 0x00ce, 0x11b0, 0x601a, 0x601f, 0x0001, 0x2009,
++ 0x0040, 0x6834, 0xa084, 0x00ff, 0xa086, 0x0035, 0x0110, 0x2009,
++ 0x0041, 0x080c, 0x9613, 0x0005, 0x684b, 0x0101, 0x0078, 0x684b,
++ 0x002c, 0x0060, 0x684b, 0x0028, 0x0080, 0x684b, 0x0104, 0x0030,
++ 0x684b, 0x0105, 0x0018, 0x684b, 0x0106, 0x0038, 0x0126, 0x2091,
++ 0x8000, 0x080c, 0x580a, 0x012e, 0x0005, 0x0126, 0x2091, 0x8000,
++ 0x080c, 0x580a, 0x012e, 0x080c, 0x95e3, 0x0005, 0x00d6, 0x00c6,
++ 0x0036, 0x0026, 0x0016, 0x7007, 0x0001, 0x6a44, 0xa282, 0x0004,
++ 0x1a04, 0x68b1, 0xd284, 0x0170, 0x6a4c, 0xa290, 0xc77b, 0x2204,
++ 0xa065, 0x6004, 0x05e0, 0x8007, 0xa084, 0x00ff, 0xa084, 0x0006,
++ 0x1108, 0x04a8, 0x2c10, 0x080c, 0x958d, 0x1118, 0x080c, 0xaf0d,
++ 0x05a0, 0x621a, 0x6844, 0x0002, 0x6890, 0x6895, 0x6898, 0x689e,
++ 0x2019, 0x0002, 0x080c, 0xc10d, 0x0060, 0x080c, 0xc0a4, 0x0048,
++ 0x2019, 0x0002, 0x6950, 0x080c, 0xc0bf, 0x0018, 0x6950, 0x080c,
++ 0xc0a4, 0x080c, 0x95e3, 0x6857, 0x0000, 0x0126, 0x2091, 0x8000,
++ 0x080c, 0x580a, 0x012e, 0x001e, 0x002e, 0x003e, 0x00ce, 0x00de,
++ 0x0005, 0x6857, 0x0006, 0x0c88, 0x6857, 0x0002, 0x0c70, 0x6857,
++ 0x0005, 0x0c58, 0x6857, 0x0004, 0x0c40, 0x6857, 0x0007, 0x0c28,
++ 0x00d6, 0x2011, 0x0004, 0x2204, 0xa085, 0x8002, 0x2012, 0x00de,
++ 0x0005, 0x20e1, 0x0002, 0x3d08, 0x20e1, 0x2000, 0x3d00, 0xa084,
++ 0x7000, 0x0118, 0xa086, 0x1000, 0x15e0, 0x20e1, 0x0000, 0x3d00,
++ 0xa094, 0xff00, 0x8217, 0xa084, 0xf000, 0xa086, 0x3000, 0x1160,
++ 0xa184, 0xff00, 0x8007, 0xa086, 0x0008, 0x1558, 0x080c, 0x2f69,
++ 0x1540, 0x080c, 0x6b32, 0x0400, 0x20e1, 0x0004, 0x3d60, 0xd1bc,
++ 0x1170, 0x2100, 0xa084, 0xff00, 0xa086, 0x0500, 0x1138, 0x0026,
++ 0x2c10, 0x080c, 0x6d90, 0x002e, 0x01a0, 0x0070, 0x3e60, 0xac84,
++ 0x0007, 0x1178, 0xac82, 0xce00, 0x0260, 0x685c, 0xac02, 0x1248,
++ 0x2009, 0x0047, 0x080c, 0x9613, 0x7a1c, 0xd284, 0x1904, 0x68c9,
++ 0x0005, 0xa016, 0x080c, 0x1870, 0x0cb8, 0x0cd8, 0x781c, 0xd08c,
++ 0x0500, 0x0156, 0x0136, 0x0146, 0x20e1, 0x3000, 0x3d20, 0x3e28,
++ 0xa584, 0x0076, 0x1538, 0xa484, 0x7000, 0xa086, 0x1000, 0x11a8,
++ 0x080c, 0x6991, 0x01f8, 0x20e1, 0x3000, 0x7828, 0x7828, 0x080c,
++ 0x69ad, 0x014e, 0x013e, 0x015e, 0x2009, 0xc92f, 0x2104, 0xa005,
++ 0x1108, 0x0005, 0x080c, 0x7e94, 0x0ce0, 0xa484, 0x7000, 0x1548,
++ 0x080c, 0x6991, 0x01d8, 0x7000, 0xa084, 0xff00, 0xa086, 0x8100,
++ 0x0d10, 0x00a0, 0xd5a4, 0x0178, 0x0056, 0x0046, 0x080c, 0x1f2d,
++ 0x080c, 0x25fb, 0x2001, 0x0160, 0x2502, 0x2001, 0x0138, 0x2202,
++ 0x004e, 0x005e, 0x0048, 0x04a9, 0x6887, 0x0000, 0x080c, 0xc536,
++ 0x20e1, 0x3000, 0x7828, 0x7828, 0x00b9, 0x014e, 0x013e, 0x015e,
++ 0x0880, 0x0439, 0x1130, 0x7000, 0xa084, 0xff00, 0xa086, 0x8100,
++ 0x1d68, 0x080c, 0xc536, 0x20e1, 0x3000, 0x7828, 0x7828, 0x0056,
++ 0x080c, 0x6e1f, 0x005e, 0x0c40, 0x2001, 0xc60e, 0x2004, 0xd08c,
++ 0x0178, 0x2001, 0xc600, 0x2004, 0xa086, 0x0003, 0x1148, 0x0026,
++ 0x0036, 0x2011, 0x8048, 0x2518, 0x080c, 0x407d, 0x003e, 0x002e,
++ 0x0005, 0xa484, 0x01ff, 0x6886, 0xa005, 0x0160, 0xa080, 0x001f,
++ 0xa084, 0x03f8, 0x80ac, 0x20e1, 0x1000, 0x2ea0, 0x2099, 0x020a,
++ 0x53a5, 0x0005, 0x20a9, 0x000c, 0x20e1, 0x1000, 0x2ea0, 0x2099,
++ 0x020a, 0x53a5, 0xa085, 0x0001, 0x0ca0, 0x7000, 0xa084, 0xff00,
++ 0xa08c, 0xf000, 0x8007, 0xa196, 0x0000, 0x1118, 0x0804, 0x6c37,
++ 0x0005, 0xa196, 0x2000, 0x1148, 0x6900, 0xa18e, 0x0001, 0x1118,
++ 0x080c, 0x47cb, 0x0ca8, 0x0039, 0x0c98, 0xa196, 0x8000, 0x1d80,
++ 0x080c, 0x6ce3, 0x0c68, 0x00c6, 0x6a84, 0x82ff, 0x0904, 0x6b2c,
++ 0x7110, 0xa18c, 0xff00, 0x810f, 0xa196, 0x0001, 0x0120, 0xa196,
++ 0x0023, 0x1904, 0x6b2c, 0xa08e, 0x0023, 0x1570, 0x080c, 0x6d7e,
++ 0x0904, 0x6b2c, 0x7124, 0x610a, 0x7030, 0xa08e, 0x0200, 0x1150,
++ 0x7034, 0xa005, 0x1904, 0x6b2c, 0x2009, 0x0015, 0x080c, 0x9613,
++ 0x0804, 0x6b2c, 0xa08e, 0x0214, 0x0118, 0xa08e, 0x0210, 0x1130,
++ 0x2009, 0x0015, 0x080c, 0x9613, 0x0804, 0x6b2c, 0xa08e, 0x0100,
++ 0x1904, 0x6b2c, 0x7034, 0xa005, 0x1904, 0x6b2c, 0x2009, 0x0016,
++ 0x080c, 0x9613, 0x0804, 0x6b2c, 0xa08e, 0x0022, 0x1904, 0x6b2c,
++ 0x7030, 0xa08e, 0x0300, 0x1580, 0x68d4, 0xd0a4, 0x0528, 0xc0b5,
++ 0x68d6, 0x7100, 0xa18c, 0x00ff, 0x6972, 0x7004, 0x6876, 0x00f6,
++ 0x2079, 0x0100, 0x79e6, 0x78ea, 0x0006, 0xa084, 0x00ff, 0x0016,
++ 0x2008, 0x080c, 0x29f1, 0x7932, 0x7936, 0x001e, 0x000e, 0x00fe,
++ 0x080c, 0x29c7, 0x6952, 0x703c, 0x00e6, 0x2071, 0x0140, 0x7086,
++ 0x2071, 0xc600, 0x70a6, 0x00ee, 0x7034, 0xa005, 0x1904, 0x6b2c,
++ 0x2009, 0x0017, 0x0804, 0x6af2, 0xa08e, 0x0400, 0x1158, 0x7034,
++ 0xa005, 0x1904, 0x6b2c, 0x68d4, 0xc0a5, 0x68d6, 0x2009, 0x0030,
++ 0x0804, 0x6af2, 0xa08e, 0x0500, 0x1140, 0x7034, 0xa005, 0x1904,
++ 0x6b2c, 0x2009, 0x0018, 0x0804, 0x6af2, 0xa08e, 0x2010, 0x1120,
++ 0x2009, 0x0019, 0x0804, 0x6af2, 0xa08e, 0x2110, 0x1120, 0x2009,
++ 0x001a, 0x0804, 0x6af2, 0xa08e, 0x5200, 0x1140, 0x7034, 0xa005,
++ 0x1904, 0x6b2c, 0x2009, 0x001b, 0x0804, 0x6af2, 0xa08e, 0x5000,
++ 0x1140, 0x7034, 0xa005, 0x1904, 0x6b2c, 0x2009, 0x001c, 0x0804,
++ 0x6af2, 0xa08e, 0x1300, 0x1120, 0x2009, 0x0034, 0x0804, 0x6af2,
++ 0xa08e, 0x1200, 0x1140, 0x7034, 0xa005, 0x1904, 0x6b2c, 0x2009,
++ 0x0024, 0x0804, 0x6af2, 0xa08c, 0xff00, 0xa18e, 0x2400, 0x1120,
++ 0x2009, 0x002d, 0x0804, 0x6af2, 0xa08c, 0xff00, 0xa18e, 0x5300,
++ 0x1120, 0x2009, 0x002a, 0x0804, 0x6af2, 0xa08e, 0x0f00, 0x1120,
++ 0x2009, 0x0020, 0x0804, 0x6af2, 0xa08e, 0x5300, 0x1108, 0x00d8,
++ 0xa08e, 0x6104, 0x11c0, 0x2011, 0xcc8d, 0x8208, 0x2204, 0xa082,
++ 0x0004, 0x20a8, 0x95ac, 0x95ac, 0x2011, 0x8015, 0x211c, 0x8108,
++ 0x0046, 0x2124, 0x080c, 0x407d, 0x004e, 0x8108, 0x1f04, 0x6abc,
++ 0x2009, 0x0023, 0x0438, 0xa08e, 0x6000, 0x1118, 0x2009, 0x003f,
++ 0x0408, 0xa08e, 0x5400, 0x1158, 0x080c, 0x6e79, 0x1904, 0x6b2c,
++ 0x2009, 0x0046, 0x0016, 0x2001, 0xc8d3, 0x2064, 0x0498, 0xa08e,
++ 0x5500, 0x1140, 0x080c, 0x6eac, 0x2009, 0x0041, 0x0158, 0x2009,
++ 0x0042, 0x0040, 0xa08e, 0x7800, 0x1118, 0x2009, 0x0045, 0x0010,
++ 0x2009, 0x001d, 0x0016, 0x2011, 0xcc83, 0x2204, 0x8211, 0x220c,
++ 0x080c, 0x29c7, 0x1598, 0x080c, 0x52e1, 0x1580, 0x6612, 0x6516,
++ 0x86ff, 0x01e8, 0x001e, 0x0016, 0xa186, 0x0017, 0x1158, 0x6870,
++ 0xa606, 0x11a8, 0x6874, 0xa506, 0xa084, 0xff00, 0x1180, 0x6000,
++ 0xc0f5, 0x6002, 0xa186, 0x0046, 0x1150, 0x6870, 0xa606, 0x1138,
++ 0x6874, 0xa506, 0xa084, 0xff00, 0x1110, 0x001e, 0x0068, 0x00c6,
++ 0x080c, 0x958d, 0x0168, 0x001e, 0x611a, 0x601f, 0x0004, 0x7120,
++ 0x610a, 0x001e, 0x080c, 0x9613, 0x00ce, 0x0005, 0x001e, 0x0ce0,
++ 0x00ce, 0x0ce0, 0x00c6, 0x0046, 0x080c, 0x6b86, 0x1904, 0x6b83,
++ 0xa28e, 0x0033, 0x11e8, 0x080c, 0x6d7e, 0x0904, 0x6b83, 0x7124,
++ 0x610a, 0x7030, 0xa08e, 0x0200, 0x1140, 0x7034, 0xa005, 0x15d8,
++ 0x2009, 0x0015, 0x080c, 0x9613, 0x04b0, 0xa08e, 0x0100, 0x1598,
++ 0x7034, 0xa005, 0x1580, 0x2009, 0x0016, 0x080c, 0x9613, 0x0458,
++ 0xa28e, 0x0032, 0x1540, 0x7030, 0xa08e, 0x1400, 0x1520, 0x2009,
++ 0x0038, 0x0016, 0x2011, 0xcc83, 0x2204, 0x8211, 0x220c, 0x080c,
++ 0x29c7, 0x11c0, 0x080c, 0x52e1, 0x11a8, 0x6612, 0x6516, 0x00c6,
++ 0x080c, 0x958d, 0x0170, 0x001e, 0x611a, 0x080c, 0xb05e, 0x601f,
++ 0x0004, 0x7120, 0x610a, 0x001e, 0x080c, 0x9613, 0x080c, 0x7e94,
++ 0x0010, 0x00ce, 0x001e, 0x004e, 0x00ce, 0x0005, 0x00f6, 0x00d6,
++ 0x0026, 0x0016, 0x0136, 0x0146, 0x0156, 0x3c00, 0x0006, 0x2079,
++ 0x0030, 0x2069, 0x0200, 0x080c, 0x1fec, 0x1590, 0x080c, 0x1e97,
++ 0x05e0, 0x04f1, 0x1130, 0x7908, 0xa18c, 0x1fff, 0xa182, 0x0011,
++ 0x1688, 0x20a9, 0x000c, 0x20e1, 0x0000, 0x2ea0, 0x2099, 0x020a,
++ 0x53a5, 0x20e1, 0x2000, 0x2001, 0x020a, 0x2004, 0x7a0c, 0x7808,
++ 0xa080, 0x0007, 0xa084, 0x1ff8, 0x0419, 0x1120, 0xa08a, 0x0140,
++ 0x1a0c, 0x1519, 0x80ac, 0x20e1, 0x6000, 0x2099, 0x020a, 0x53a5,
++ 0x20e1, 0x7000, 0x6828, 0x6828, 0x7803, 0x0004, 0xa294, 0x0070,
++ 0x000e, 0x20e0, 0x015e, 0x014e, 0x013e, 0x001e, 0x002e, 0x00de,
++ 0x00fe, 0x0005, 0xa016, 0x080c, 0x1870, 0xa085, 0x0001, 0x0c80,
++ 0x0006, 0x2001, 0x0111, 0x2004, 0xa084, 0x0003, 0x000e, 0x0005,
++ 0x0046, 0x00e6, 0x00d6, 0x2028, 0x2130, 0xa696, 0x00ff, 0x1198,
++ 0xa596, 0xfffd, 0x1120, 0x2009, 0x007f, 0x0804, 0x6c32, 0xa596,
++ 0xfffe, 0x1118, 0x2009, 0x007e, 0x04e8, 0xa596, 0xfffc, 0x1118,
++ 0x2009, 0x0080, 0x04b8, 0x2011, 0x0000, 0x2019, 0xc635, 0x231c,
++ 0xd3ac, 0x0138, 0x2021, 0x0000, 0x20a9, 0x00ff, 0x2071, 0xc77b,
++ 0x0030, 0x2021, 0x0081, 0x20a9, 0x007e, 0x2071, 0xc7fc, 0x2e1c,
++ 0x83ff, 0x1128, 0x82ff, 0x1198, 0x2410, 0xc2fd, 0x0080, 0x2368,
++ 0x6f10, 0x0006, 0x2100, 0xa706, 0x000e, 0x6b14, 0x1120, 0xa346,
++ 0x1110, 0x2408, 0x0078, 0x87ff, 0x1110, 0x83ff, 0x0d58, 0x8420,
++ 0x8e70, 0x1f04, 0x6c0f, 0x82ff, 0x1118, 0xa085, 0x0001, 0x0018,
++ 0xc2fc, 0x2208, 0xa006, 0x00de, 0x00ee, 0x004e, 0x0005, 0xa084,
++ 0x0007, 0x000a, 0x0005, 0x6c43, 0x6c43, 0x6c43, 0x6e0c, 0x6c43,
++ 0x6c44, 0x6c59, 0x6cce, 0x0005, 0x7110, 0xd1bc, 0x0188, 0x7120,
++ 0x2160, 0xac8c, 0x0007, 0x1160, 0xac8a, 0xce00, 0x0248, 0x685c,
++ 0xac02, 0x1230, 0x7124, 0x610a, 0x2009, 0x0046, 0x080c, 0x9613,
++ 0x0005, 0x00c6, 0xa484, 0x01ff, 0x0904, 0x6cac, 0x7110, 0xd1bc,
++ 0x1904, 0x6cac, 0x2011, 0xcc83, 0x2204, 0x8211, 0x220c, 0x080c,
++ 0x29c7, 0x1904, 0x6cac, 0x080c, 0x52e1, 0x15f0, 0x6612, 0x6516,
++ 0x6000, 0xd0ec, 0x15c8, 0x6204, 0xa294, 0xff00, 0x8217, 0xa286,
++ 0x0006, 0x0148, 0x6204, 0xa294, 0x00ff, 0xa286, 0x0006, 0x11a0,
++ 0xa295, 0x0600, 0x6206, 0x00c6, 0x080c, 0x958d, 0x001e, 0x0530,
++ 0x611a, 0x601f, 0x0006, 0x7120, 0x610a, 0x7130, 0x6152, 0x2009,
++ 0x0044, 0x080c, 0x9613, 0x00c0, 0x00c6, 0x080c, 0x958d, 0x001e,
++ 0x0198, 0x611a, 0x601f, 0x0004, 0x7120, 0x610a, 0xa286, 0x0004,
++ 0x1118, 0x6007, 0x0005, 0x0010, 0x6007, 0x0001, 0x6003, 0x0001,
++ 0x080c, 0x79df, 0x080c, 0x7e94, 0x00ce, 0x0005, 0x2001, 0xc60d,
++ 0x2004, 0xd0ec, 0x0120, 0x2011, 0x8049, 0x080c, 0x407d, 0x00c6,
++ 0x080c, 0xaf0d, 0x001e, 0x0d80, 0x611a, 0x601f, 0x0006, 0x7120,
++ 0x610a, 0x7130, 0x6152, 0x6013, 0x0300, 0x6003, 0x0001, 0x6007,
++ 0x0041, 0x080c, 0x7999, 0x080c, 0x7e94, 0x08f0, 0x7110, 0xd1bc,
++ 0x0188, 0x7020, 0x2060, 0xac84, 0x0007, 0x1160, 0xac82, 0xce00,
++ 0x0248, 0x685c, 0xac02, 0x1230, 0x7124, 0x610a, 0x2009, 0x0045,
++ 0x080c, 0x9613, 0x0005, 0x0006, 0x080c, 0x2f69, 0x000e, 0x1168,
++ 0x7110, 0xa18c, 0xff00, 0x810f, 0xa18e, 0x0000, 0x1130, 0xa084,
++ 0x000f, 0xa08a, 0x0006, 0x1208, 0x000b, 0x0005, 0x6cfc, 0x6cfd,
++ 0x6cfc, 0x6cfc, 0x6d66, 0x6d72, 0x0005, 0x7110, 0xd1bc, 0x0120,
++ 0x702c, 0xd084, 0x0904, 0x6d65, 0x700c, 0x7108, 0x080c, 0x29c7,
++ 0x1904, 0x6d65, 0x080c, 0x52e1, 0x1904, 0x6d65, 0x6612, 0x6516,
++ 0x6204, 0x7110, 0xd1bc, 0x01f8, 0xa28c, 0x00ff, 0xa186, 0x0004,
++ 0x0118, 0xa186, 0x0006, 0x15c8, 0x00c6, 0x080c, 0x6d7e, 0x00ce,
++ 0x0904, 0x6d65, 0x00c6, 0x080c, 0x958d, 0x001e, 0x05f0, 0x611a,
++ 0x080c, 0xb05e, 0x601f, 0x0002, 0x7120, 0x610a, 0x2009, 0x0088,
++ 0x080c, 0x9613, 0x0490, 0xa28c, 0x00ff, 0xa186, 0x0006, 0x0160,
++ 0xa186, 0x0004, 0x0148, 0xa294, 0xff00, 0x8217, 0xa286, 0x0004,
++ 0x0118, 0xa286, 0x0006, 0x1188, 0x00c6, 0x080c, 0x958d, 0x001e,
++ 0x01e0, 0x611a, 0x080c, 0xb05e, 0x601f, 0x0005, 0x7120, 0x610a,
++ 0x2009, 0x0088, 0x080c, 0x9613, 0x0080, 0x00c6, 0x080c, 0x958d,
++ 0x001e, 0x0158, 0x611a, 0x080c, 0xb05e, 0x601f, 0x0004, 0x7120,
++ 0x610a, 0x2009, 0x0001, 0x080c, 0x9613, 0x0005, 0x7110, 0xd1bc,
++ 0x0140, 0x00a1, 0x0130, 0x7124, 0x610a, 0x2009, 0x0089, 0x080c,
++ 0x9613, 0x0005, 0x7110, 0xd1bc, 0x0140, 0x0041, 0x0130, 0x7124,
++ 0x610a, 0x2009, 0x008a, 0x080c, 0x9613, 0x0005, 0x7020, 0x2060,
++ 0xac84, 0x0007, 0x1158, 0xac82, 0xce00, 0x0240, 0x2001, 0xc617,
++ 0x2004, 0xac02, 0x1218, 0xa085, 0x0001, 0x0005, 0xa006, 0x0ce8,
++ 0x00c6, 0x00d6, 0x00e6, 0x080c, 0x2f69, 0x1904, 0x6e07, 0x2001,
++ 0xc756, 0x2004, 0xa086, 0x0000, 0x0904, 0x6e07, 0x20e1, 0x0000,
++ 0x3d08, 0xa18c, 0x00ff, 0xa18e, 0x00ff, 0x1500, 0x3e00, 0xa086,
++ 0xffff, 0x11e0, 0x2001, 0xc8d3, 0x2064, 0x2009, 0x00ff, 0x0006,
++ 0x0016, 0x2001, 0xc61d, 0x2004, 0x20e1, 0x0001, 0x3e08, 0xa106,
++ 0x1130, 0x2001, 0xc61c, 0x2004, 0x3d08, 0xa106, 0x0118, 0x001e,
++ 0x000e, 0x00a8, 0x001e, 0x000e, 0x0804, 0x6e07, 0x20e1, 0x0001,
++ 0x3d08, 0x3e00, 0x0156, 0x080c, 0x29c7, 0x015e, 0x15c0, 0x080c,
++ 0x533d, 0x0128, 0x2001, 0xc8d3, 0x2064, 0x2009, 0x00ff, 0x2138,
++ 0x873f, 0x2c00, 0x2070, 0x20e1, 0x0003, 0x3d18, 0x831f, 0xa39c,
++ 0x00ff, 0x20e1, 0x2000, 0x3d00, 0xa084, 0x7000, 0xa086, 0x1000,
++ 0x0120, 0x080c, 0x75ea, 0x11d8, 0x0080, 0x080c, 0x958d, 0x01b8,
++ 0x20e1, 0x0002, 0x3e08, 0xd19c, 0x0118, 0x6124, 0xc19d, 0x6126,
++ 0x2e00, 0x601a, 0x620a, 0x601f, 0x0009, 0x2009, 0x0101, 0x080c,
++ 0x9613, 0xa085, 0x0001, 0x00ee, 0x00de, 0x00ce, 0x0005, 0xa006,
++ 0x00ee, 0x00de, 0x00ce, 0x0005, 0x7110, 0xd1bc, 0x1178, 0x7024,
++ 0x2060, 0xac84, 0x0007, 0x1150, 0xac82, 0xce00, 0x0238, 0x685c,
++ 0xac02, 0x1220, 0x2009, 0x0051, 0x080c, 0x9613, 0x0005, 0x2031,
++ 0x0105, 0x0069, 0x0005, 0x2031, 0x0206, 0x0049, 0x0005, 0x2031,
++ 0x0207, 0x0029, 0x0005, 0x2031, 0x0213, 0x0009, 0x0005, 0x00c6,
++ 0x00d6, 0x00f6, 0x7000, 0xa084, 0xf000, 0xa086, 0xc000, 0x05b0,
++ 0x080c, 0x958d, 0x0598, 0x0066, 0x00c6, 0x0046, 0x2011, 0xcc83,
++ 0x2204, 0x8211, 0x220c, 0x080c, 0x29c7, 0x1580, 0x080c, 0x52e1,
++ 0x1568, 0x6612, 0x6516, 0x2c00, 0x004e, 0x00ce, 0x601a, 0x080c,
++ 0xb05e, 0x080c, 0x1602, 0x01f0, 0x2d00, 0x6056, 0x6803, 0x0000,
++ 0x6837, 0x0000, 0x6c3a, 0xadf8, 0x000f, 0x20a9, 0x000e, 0x2fa0,
++ 0x2e98, 0x53a3, 0x006e, 0x6612, 0x6007, 0x003e, 0x601f, 0x0001,
++ 0x6003, 0x0001, 0x080c, 0x79df, 0x080c, 0x7e94, 0x00fe, 0x00de,
++ 0x00ce, 0x0005, 0x080c, 0x95e3, 0x006e, 0x0cc0, 0x004e, 0x00ce,
++ 0x0cc8, 0x0156, 0x0046, 0x2e00, 0xa0a0, 0x000e, 0x2404, 0x2020,
++ 0x8427, 0xa4a4, 0x0007, 0xd484, 0x0148, 0x20a9, 0x0003, 0x2019,
++ 0xc606, 0x2011, 0xcc9b, 0x080c, 0xa103, 0x11d8, 0xd48c, 0x0148,
++ 0x20a9, 0x0003, 0x2019, 0xc602, 0x2011, 0xcc9f, 0x080c, 0xa103,
++ 0x1180, 0xd494, 0x0170, 0x080c, 0x7694, 0x0148, 0x20a9, 0x0008,
++ 0x2019, 0xc69a, 0x2011, 0xccaa, 0x080c, 0xa118, 0x0010, 0xa085,
++ 0x0001, 0x004e, 0x015e, 0x0005, 0x0156, 0x0046, 0x2e00, 0xa0a0,
++ 0x000e, 0x2404, 0x2020, 0x8427, 0xa4a4, 0x0007, 0xd484, 0x0148,
++ 0x20a9, 0x0003, 0x2019, 0xc606, 0x2011, 0xcc93, 0x080c, 0xa103,
++ 0x11d8, 0xd48c, 0x0148, 0x20a9, 0x0003, 0x2019, 0xc602, 0x2011,
++ 0xcc97, 0x080c, 0xa103, 0x1180, 0xd494, 0x0170, 0x080c, 0x7694,
++ 0x0148, 0x20a9, 0x0008, 0x2019, 0xc69a, 0x2011, 0xcca2, 0x080c,
++ 0xa118, 0x0010, 0xa085, 0x0001, 0x004e, 0x015e, 0x0005, 0x2071,
++ 0xc93a, 0x7003, 0x0003, 0x700f, 0x0361, 0xa006, 0x701a, 0x7076,
++ 0x7012, 0x7017, 0xce00, 0x7007, 0x0000, 0x7026, 0x702b, 0x8c0c,
++ 0x7032, 0x7037, 0x8c6c, 0x703b, 0xffff, 0x703f, 0xffff, 0x7042,
++ 0x7047, 0x4787, 0x704a, 0x705b, 0x703f, 0x2001, 0xc8e8, 0x2003,
++ 0x0003, 0x2001, 0xc8ea, 0x2003, 0x0100, 0x3a00, 0xa084, 0x0005,
++ 0x706e, 0x0005, 0x2071, 0xc93a, 0x1d04, 0x6f9c, 0x2091, 0x6000,
++ 0x700c, 0x8001, 0x700e, 0x1518, 0x700f, 0x0361, 0x7007, 0x0001,
++ 0x0126, 0x2091, 0x8000, 0x7040, 0xa00d, 0x0128, 0x8109, 0x7142,
++ 0x1110, 0x7044, 0x080f, 0x00c6, 0x2061, 0xc600, 0x6034, 0x00ce,
++ 0xd0cc, 0x0180, 0x3a00, 0xa084, 0x0005, 0x726c, 0xa216, 0x0150,
++ 0x706e, 0x2011, 0x8043, 0x2018, 0x080c, 0x407d, 0x0018, 0x0126,
++ 0x2091, 0x8000, 0x7024, 0xa00d, 0x0188, 0x7020, 0x8001, 0x7022,
++ 0x1168, 0x7023, 0x0009, 0x8109, 0x7126, 0xa186, 0x03e8, 0x1110,
++ 0x7028, 0x080f, 0x81ff, 0x1110, 0x7028, 0x080f, 0x7030, 0xa00d,
++ 0x0180, 0x702c, 0x8001, 0x702e, 0x1160, 0x702f, 0x0009, 0x8109,
++ 0x7132, 0x0128, 0xa184, 0x007f, 0x090c, 0x8cc8, 0x0010, 0x7034,
++ 0x080f, 0x7038, 0xa005, 0x0118, 0x0310, 0x8001, 0x703a, 0x703c,
++ 0xa005, 0x0118, 0x0310, 0x8001, 0x703e, 0x704c, 0xa00d, 0x0168,
++ 0x7048, 0x8001, 0x704a, 0x1148, 0x704b, 0x0009, 0x8109, 0x714e,
++ 0x1120, 0x7150, 0x714e, 0x7058, 0x080f, 0x7018, 0xa00d, 0x01d8,
++ 0x0016, 0x7074, 0xa00d, 0x0158, 0x7070, 0x8001, 0x7072, 0x1138,
++ 0x7073, 0x0009, 0x8109, 0x7176, 0x1110, 0x7078, 0x080f, 0x001e,
++ 0x7008, 0x8001, 0x700a, 0x1138, 0x700b, 0x0009, 0x8109, 0x711a,
++ 0x1110, 0x701c, 0x080f, 0x012e, 0x7004, 0x0002, 0x6fc2, 0x6fc3,
++ 0x6fdb, 0x00e6, 0x2071, 0xc93a, 0x7018, 0xa005, 0x1120, 0x711a,
++ 0x721e, 0x700b, 0x0009, 0x00ee, 0x0005, 0x00e6, 0x0006, 0x2071,
++ 0xc93a, 0x701c, 0xa206, 0x1110, 0x701a, 0x701e, 0x000e, 0x00ee,
++ 0x0005, 0x00e6, 0x2071, 0xc93a, 0x6088, 0xa102, 0x0208, 0x618a,
++ 0x00ee, 0x0005, 0x0005, 0x7110, 0x080c, 0x533d, 0x1158, 0x6088,
++ 0x8001, 0x0240, 0x608a, 0x1130, 0x0126, 0x2091, 0x8000, 0x080c,
++ 0x7e94, 0x012e, 0x8108, 0xa182, 0x00ff, 0x0218, 0xa00e, 0x7007,
++ 0x0002, 0x7112, 0x0005, 0x7014, 0x2060, 0x0126, 0x2091, 0x8000,
++ 0x603c, 0xa005, 0x0128, 0x8001, 0x603e, 0x1110, 0x080c, 0xaf4c,
++ 0x6014, 0xa005, 0x0518, 0x8001, 0x6016, 0x1500, 0x611c, 0xa186,
++ 0x0003, 0x0130, 0xa186, 0x0006, 0x0118, 0xa186, 0x0009, 0x11a0,
++ 0x6010, 0x2068, 0x6854, 0xa08a, 0x199a, 0x0270, 0xa082, 0x1999,
++ 0x6856, 0xa08a, 0x199a, 0x0210, 0x2001, 0x1999, 0x8003, 0x800b,
++ 0x810b, 0xa108, 0x6116, 0x0010, 0x080c, 0xaa1c, 0x012e, 0xac88,
++ 0x0018, 0x7116, 0x2001, 0xfe00, 0xa102, 0x0220, 0x7017, 0xce00,
++ 0x7007, 0x0000, 0x0005, 0x00e6, 0x2071, 0xc93a, 0x7027, 0x07d0,
++ 0x7023, 0x0009, 0x00ee, 0x0005, 0x2001, 0xc943, 0x2003, 0x0000,
++ 0x0005, 0x00e6, 0x2071, 0xc93a, 0x7132, 0x702f, 0x0009, 0x00ee,
++ 0x0005, 0x2011, 0xc946, 0x2013, 0x0000, 0x0005, 0x00e6, 0x2071,
++ 0xc93a, 0x711a, 0x721e, 0x700b, 0x0009, 0x00ee, 0x0005, 0x00c6,
++ 0x0026, 0x7054, 0x8000, 0x7056, 0x2061, 0xc8e8, 0x6008, 0xa086,
++ 0x0000, 0x0158, 0x7068, 0x6032, 0x7064, 0x602e, 0x7060, 0x602a,
++ 0x705c, 0x6026, 0x2c10, 0x080c, 0x164d, 0x002e, 0x00ce, 0x0005,
++ 0x0006, 0x0016, 0x00c6, 0x00d6, 0x00e6, 0x00f6, 0x080c, 0x6f0a,
++ 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x001e, 0x000e, 0x0005, 0x00e6,
++ 0x2071, 0xc93a, 0x7176, 0x727a, 0x7073, 0x0009, 0x00ee, 0x0005,
++ 0x00e6, 0x0006, 0x2071, 0xc93a, 0x7078, 0xa206, 0x1110, 0x7076,
++ 0x707a, 0x000e, 0x00ee, 0x0005, 0x00c6, 0x2061, 0xc9bc, 0x00ce,
++ 0x0005, 0xa184, 0x000f, 0x8003, 0x8003, 0x8003, 0xa080, 0xc9bc,
++ 0x2060, 0x0005, 0x6854, 0xa08a, 0x199a, 0x0210, 0x2001, 0x1999,
++ 0xa005, 0x1150, 0x00c6, 0x2061, 0xc9bc, 0x6014, 0x00ce, 0xa005,
++ 0x1138, 0x2001, 0x001e, 0x0020, 0xa08e, 0xffff, 0x1108, 0xa006,
++ 0x8003, 0x800b, 0x810b, 0xa108, 0x6116, 0x684c, 0xa08c, 0x00c0,
++ 0xa18e, 0x00c0, 0x05e8, 0xd0b4, 0x1138, 0xd0bc, 0x1550, 0x2009,
++ 0x0006, 0x080c, 0x7105, 0x0005, 0xd0fc, 0x0138, 0xa084, 0x0003,
++ 0x0120, 0xa086, 0x0003, 0x1904, 0x70ff, 0x6020, 0xd0d4, 0x0130,
++ 0xc0d4, 0x6022, 0x6860, 0x602a, 0x685c, 0x602e, 0x2009, 0xc674,
++ 0x2104, 0xd084, 0x0138, 0x87ff, 0x1120, 0x2009, 0x0042, 0x080c,
++ 0x9613, 0x0005, 0x87ff, 0x1120, 0x2009, 0x0043, 0x080c, 0x9613,
++ 0x0005, 0xd0fc, 0x0130, 0xa084, 0x0003, 0x0118, 0xa086, 0x0003,
++ 0x11f0, 0x87ff, 0x1120, 0x2009, 0x0042, 0x080c, 0x9613, 0x0005,
++ 0xd0fc, 0x0160, 0xa084, 0x0003, 0xa08e, 0x0002, 0x0148, 0x87ff,
++ 0x1120, 0x2009, 0x0041, 0x080c, 0x9613, 0x0005, 0x0061, 0x0ce8,
++ 0x87ff, 0x1dd8, 0x2009, 0x0043, 0x080c, 0x9613, 0x0cb0, 0x2009,
++ 0x0004, 0x0019, 0x0005, 0x2009, 0x0001, 0x00d6, 0x6010, 0xa0ec,
++ 0xf000, 0x0510, 0x2068, 0x6952, 0x6800, 0x6012, 0xa186, 0x0001,
++ 0x1188, 0x694c, 0xa18c, 0x8100, 0xa18e, 0x8100, 0x1158, 0x00c6,
++ 0x2061, 0xc9bc, 0x6200, 0xd28c, 0x1120, 0x6204, 0x8210, 0x0208,
++ 0x6206, 0x00ce, 0x080c, 0x580a, 0x6010, 0xa06d, 0x0076, 0x2039,
++ 0x0000, 0x190c, 0x708a, 0x007e, 0x00de, 0x0005, 0x0156, 0x00c6,
++ 0x2061, 0xc9bc, 0x6000, 0x81ff, 0x0110, 0xa205, 0x0008, 0xa204,
++ 0x6002, 0x00ce, 0x015e, 0x0005, 0x6800, 0xd08c, 0x1138, 0x6808,
++ 0xa005, 0x0120, 0x8001, 0x680a, 0xa085, 0x0001, 0x0005, 0x2071,
++ 0xc755, 0x7003, 0x0006, 0x7007, 0x0000, 0x700f, 0x0000, 0x7013,
++ 0x0001, 0x702f, 0x0006, 0x7033, 0x0001, 0x7063, 0x0000, 0x0005,
++ 0x00e6, 0x2071, 0xc755, 0x6a2c, 0x721e, 0x6b30, 0x7322, 0x6834,
++ 0x7026, 0x705a, 0x6838, 0x702a, 0x705e, 0x6824, 0x7016, 0x683c,
++ 0x701a, 0x2009, 0x0070, 0x200a, 0xa005, 0x0150, 0x2009, 0x0000,
++ 0xa188, 0x000c, 0x8001, 0x1de0, 0x2100, 0xa210, 0x1208, 0x8318,
++ 0x7252, 0x7356, 0x7010, 0xc084, 0x7012, 0x7007, 0x0001, 0x700f,
++ 0x0000, 0xa006, 0x00ee, 0x0005, 0x2b78, 0x2071, 0xc755, 0x7004,
++ 0x004b, 0x700c, 0x0002, 0x718e, 0x7187, 0x7187, 0x0005, 0x7198,
++ 0x71e9, 0x71ea, 0x71eb, 0x71ec, 0x71ff, 0x7200, 0x700c, 0x0cba,
++ 0x2f00, 0xa080, 0x0070, 0x2004, 0x2f08, 0xa188, 0x0070, 0x210c,
++ 0xa106, 0x0150, 0x2f00, 0xa080, 0x0070, 0x2004, 0x2f08, 0xa188,
++ 0x0070, 0x210c, 0xa106, 0x15e0, 0x7018, 0xa10a, 0x1118, 0x080c,
++ 0x722d, 0x04b0, 0x1210, 0x7114, 0xa10a, 0xa192, 0x000a, 0x0210,
++ 0x2009, 0x000a, 0x00d6, 0x0016, 0x2001, 0xc682, 0xa080, 0x0011,
++ 0x2014, 0x2001, 0xc76f, 0xa080, 0x0005, 0x2004, 0xa100, 0xa202,
++ 0x001e, 0x00de, 0x0e20, 0x080c, 0x727c, 0x2200, 0xa102, 0x0208,
++ 0x2208, 0x713a, 0x080c, 0x7377, 0x2100, 0x7042, 0x2001, 0x0002,
++ 0x7037, 0x0000, 0x0126, 0x0006, 0x2091, 0x8000, 0x2009, 0xc959,
++ 0x2104, 0xc095, 0x200a, 0x000e, 0x700e, 0x012e, 0x080c, 0x1669,
++ 0x0005, 0x0005, 0x0005, 0x0005, 0x700c, 0x0002, 0x71f1, 0x71f4,
++ 0x71fe, 0x080c, 0x7196, 0x0005, 0x0126, 0x8001, 0x700e, 0x7138,
++ 0x0041, 0x2091, 0x8000, 0x080c, 0x7196, 0x012e, 0x0005, 0x0005,
++ 0x0005, 0x7018, 0xa100, 0x7214, 0xa21a, 0x1130, 0x701c, 0x7052,
++ 0x7020, 0x7056, 0xa006, 0x0068, 0x0006, 0x080c, 0x7377, 0x2100,
++ 0x7250, 0xa210, 0x7252, 0x1220, 0x7054, 0xa081, 0x0000, 0x7056,
++ 0x000e, 0x2f08, 0xa188, 0x0070, 0x200a, 0x701a, 0x0005, 0x00e6,
++ 0x2071, 0xc755, 0x700c, 0x0002, 0x7227, 0x7227, 0x7229, 0x00ee,
++ 0x0005, 0x700f, 0x0001, 0x00ee, 0x0005, 0x0126, 0x2091, 0x8000,
++ 0x00d6, 0x00e6, 0x2071, 0xc76f, 0x702c, 0xa005, 0x0178, 0x2068,
++ 0x6964, 0x080c, 0x727c, 0x2100, 0x2208, 0xa102, 0x0238, 0x6800,
++ 0x702e, 0x080c, 0x75b9, 0x080c, 0x1629, 0x0c70, 0x00ee, 0x00de,
++ 0x012e, 0x0005, 0x00e6, 0x2071, 0xc76f, 0x702c, 0x6802, 0x2d00,
++ 0x702e, 0x6858, 0x7120, 0xa102, 0x0a0c, 0x1519, 0x7022, 0x685b,
++ 0x0000, 0x00ee, 0x0005, 0x00d6, 0x00e6, 0x2071, 0xc76f, 0xa006,
++ 0x7006, 0x700e, 0x701a, 0x701e, 0x7022, 0x7016, 0x702a, 0x7026,
++ 0x702f, 0x0000, 0x080c, 0x742b, 0x0168, 0x080c, 0x745d, 0x2d00,
++ 0x7002, 0x700a, 0x701a, 0x7013, 0x0001, 0x701f, 0x0007, 0x00ee,
++ 0x00de, 0x0005, 0xa00e, 0x0cd8, 0x00e6, 0x00d6, 0x00c6, 0x2071,
++ 0xc76f, 0x721c, 0x2100, 0xa202, 0x1618, 0x080c, 0x745d, 0x090c,
++ 0x1519, 0x7018, 0xa005, 0x1160, 0x2d00, 0x7002, 0x700a, 0x701a,
++ 0xa006, 0x7006, 0x700e, 0x6806, 0x6802, 0x7012, 0x701e, 0x0038,
++ 0x2060, 0x6806, 0x2d00, 0x6002, 0x701a, 0x6803, 0x0000, 0x7010,
++ 0x8000, 0x7012, 0x701c, 0xa080, 0x0007, 0x701e, 0x721c, 0x08d0,
++ 0x721c, 0x00ce, 0x00de, 0x00ee, 0x0005, 0x0156, 0x0136, 0x0146,
++ 0x00e6, 0x0126, 0x2091, 0x8000, 0x2071, 0xc76f, 0x7300, 0xa398,
++ 0x0003, 0x7104, 0x080c, 0x7377, 0x810c, 0x2100, 0xa318, 0x8003,
++ 0x2228, 0x2021, 0x0054, 0xa402, 0xa532, 0x0208, 0x2028, 0x2500,
++ 0x8004, 0x20a8, 0x23a0, 0xe000, 0xe000, 0xe000, 0x53a5, 0x2508,
++ 0x080c, 0x7380, 0x2130, 0x7014, 0xa600, 0x7016, 0x2600, 0x711c,
++ 0xa102, 0x701e, 0x7004, 0xa600, 0x2008, 0xa082, 0x0007, 0x1180,
++ 0x7000, 0x2004, 0xa005, 0x1140, 0x2009, 0x0001, 0x0026, 0x080c,
++ 0x727c, 0x002e, 0x7000, 0x2004, 0x7002, 0x7007, 0x0000, 0x0008,
++ 0x7106, 0x2500, 0xa212, 0x1910, 0x012e, 0x00ee, 0x014e, 0x013e,
++ 0x015e, 0x0005, 0x0016, 0x0026, 0x00e6, 0x00d6, 0x080c, 0x7340,
++ 0x15e0, 0x2170, 0x2805, 0xac68, 0x2900, 0x0002, 0x7316, 0x7316,
++ 0x731a, 0x7316, 0x731a, 0x7316, 0x7316, 0x7316, 0x7316, 0x7316,
++ 0x7323, 0x7316, 0x7323, 0x7316, 0x7316, 0x7316, 0x080c, 0x1519,
++ 0xa005, 0x00f0, 0x7000, 0x6802, 0x7004, 0x6806, 0x7010, 0x680a,
++ 0x680f, 0x0000, 0x0060, 0x7010, 0x6812, 0x6817, 0x0000, 0x7000,
++ 0x6802, 0x7004, 0x6806, 0x7008, 0x680a, 0x700c, 0x680e, 0x00de,
++ 0x685c, 0x8000, 0x685e, 0x6858, 0x8001, 0x685a, 0x00d6, 0xa006,
++ 0x00de, 0x00ee, 0x002e, 0x001e, 0x0005, 0xa085, 0x0001, 0x0cc0,
++ 0x00e6, 0x0036, 0x2071, 0xc76f, 0x7014, 0xa005, 0x0568, 0x8001,
++ 0x7016, 0x7020, 0x8001, 0x7022, 0x7008, 0xa080, 0x0003, 0x710c,
++ 0x2110, 0x0429, 0x810c, 0xa118, 0x8210, 0xa282, 0x0007, 0x11b0,
++ 0x7008, 0x2004, 0xa005, 0x0178, 0x00d6, 0x0006, 0x7008, 0x2068,
++ 0x080c, 0x746c, 0x000e, 0x2068, 0x6807, 0x0000, 0x700a, 0x00de,
++ 0x7010, 0x8001, 0x7012, 0x700f, 0x0000, 0x0008, 0x720e, 0x2308,
++ 0xa006, 0x003e, 0x00ee, 0x0005, 0xa085, 0x0001, 0x0cd0, 0x0006,
++ 0x810b, 0x810b, 0x2100, 0x810b, 0xa100, 0x2008, 0x000e, 0x0005,
++ 0x0006, 0x0026, 0x2100, 0xa005, 0x0160, 0xa092, 0x000c, 0x0248,
++ 0x2009, 0x0000, 0x8108, 0xa082, 0x000c, 0x1de0, 0x002e, 0x000e,
++ 0x0005, 0x2009, 0x0000, 0x0cd0, 0x2d00, 0xa0b8, 0x0008, 0x690c,
++ 0x6810, 0x2019, 0x0001, 0x2031, 0x73c2, 0xa112, 0x0220, 0x0118,
++ 0x8318, 0x2208, 0x0cd0, 0x6808, 0xa005, 0x0108, 0x8318, 0x233a,
++ 0x6804, 0xd084, 0x2300, 0x2021, 0x0001, 0x1150, 0xa082, 0x0003,
++ 0x0967, 0x0a67, 0x8420, 0xa082, 0x0007, 0x0967, 0x0a67, 0x0cd0,
++ 0xa082, 0x0002, 0x0967, 0x0a67, 0x8420, 0xa082, 0x0005, 0x0967,
++ 0x0a67, 0x0cd0, 0x6c1a, 0x2d00, 0xa0b8, 0x0007, 0x00e6, 0x2071,
++ 0xc600, 0x7128, 0x6810, 0x2019, 0x0001, 0xa10a, 0x0118, 0x0210,
++ 0x8318, 0x0cd8, 0x2031, 0x73d5, 0x0870, 0x6c16, 0x00ee, 0x0005,
++ 0x00e6, 0x00c6, 0x0126, 0x2091, 0x8000, 0x2e00, 0x2060, 0x2071,
++ 0xc76f, 0x2009, 0x0001, 0x0026, 0x080c, 0x727c, 0x002e, 0x7300,
++ 0xa398, 0x0003, 0x7104, 0x080c, 0x7377, 0x810c, 0x2100, 0xa318,
++ 0x6834, 0xa084, 0x00ff, 0xa086, 0x0024, 0x00d6, 0x2368, 0x1138,
++ 0x6000, 0x6802, 0x6004, 0x6806, 0x6008, 0x6812, 0x0050, 0x6000,
++ 0x6802, 0x6004, 0x6806, 0x6008, 0x680a, 0x600c, 0x680e, 0x6010,
++ 0x6812, 0x00de, 0x7014, 0x8000, 0x7016, 0x711c, 0x8109, 0x711e,
++ 0x7004, 0x8000, 0x2008, 0xa082, 0x0007, 0x1180, 0x7000, 0x2004,
++ 0xa005, 0x1140, 0x2009, 0x0001, 0x0026, 0x080c, 0x727c, 0x002e,
++ 0x7000, 0x2004, 0x7002, 0x7007, 0x0000, 0x0008, 0x7106, 0x012e,
++ 0x00ce, 0x00ee, 0x0005, 0x00d6, 0x0046, 0x0126, 0x2091, 0x8000,
++ 0x2001, 0xc682, 0xa080, 0x0011, 0x2004, 0x8003, 0x2020, 0x080c,
++ 0x15e5, 0x01d0, 0x2d00, 0x7026, 0x6803, 0x0000, 0x6807, 0x0000,
++ 0x080c, 0x15e5, 0x0188, 0x7024, 0x6802, 0x6807, 0x0000, 0x2d00,
++ 0x7026, 0xa4a2, 0x0007, 0x0110, 0x0208, 0x0c90, 0xa085, 0x0001,
++ 0x012e, 0x004e, 0x00de, 0x0005, 0x7024, 0xa005, 0x0dc8, 0x2068,
++ 0x2024, 0x080c, 0x1619, 0x2400, 0x0cc0, 0x0126, 0x2091, 0x8000,
++ 0x7024, 0x2068, 0xa005, 0x0130, 0x2004, 0x7026, 0x6803, 0x0000,
++ 0x6807, 0x0000, 0x012e, 0x0005, 0x0126, 0x2091, 0x8000, 0x7024,
++ 0x6802, 0x2d00, 0x7026, 0x012e, 0x0005, 0x00d6, 0x2001, 0xc778,
++ 0x2004, 0xa005, 0x0138, 0x2068, 0x6800, 0x0006, 0x080c, 0x1619,
++ 0x000e, 0x0cb8, 0x00de, 0x0005, 0x00d6, 0x00e6, 0x2071, 0xc76f,
++ 0x7008, 0xa005, 0x0138, 0x2068, 0x6800, 0x0006, 0x080c, 0x1619,
++ 0x000e, 0x0cb8, 0xa006, 0x7002, 0x700a, 0x7006, 0x700e, 0x701a,
++ 0x701e, 0x7022, 0x702a, 0x7026, 0x702e, 0x00ee, 0x00de, 0x0005,
++ 0x00f6, 0x00e6, 0x00d6, 0x00c6, 0x0086, 0x0046, 0x0056, 0x0026,
++ 0x2031, 0x0000, 0x2001, 0xc756, 0x2004, 0xa005, 0x0904, 0x7532,
++ 0x2071, 0xc682, 0x20e1, 0x0002, 0x3d08, 0xd19c, 0x0140, 0x2069,
++ 0xc600, 0x6a28, 0x761c, 0x7114, 0x2041, 0x0000, 0x0028, 0x7118,
++ 0x720c, 0x7620, 0x7008, 0x2040, 0x080c, 0x7627, 0x0904, 0x7532,
++ 0x7004, 0xd084, 0x1128, 0x2021, 0x0024, 0x2029, 0x0002, 0x0020,
++ 0x2021, 0x002c, 0x2029, 0x000a, 0x080c, 0x1602, 0x0904, 0x752a,
++ 0x2d00, 0x2060, 0x6436, 0x0016, 0x20e1, 0x0001, 0x3d08, 0x3e00,
++ 0xa18c, 0x00ff, 0x6142, 0x603e, 0x001e, 0x6746, 0x2700, 0xa086,
++ 0xff00, 0x1118, 0x6063, 0x0000, 0x0010, 0x6063, 0x0003, 0xa006,
++ 0x6002, 0x602a, 0x602e, 0x6006, 0x603a, 0x604a, 0x6052, 0x6057,
++ 0x0005, 0x605e, 0x6066, 0x604e, 0x2800, 0x606a, 0x604c, 0xc0ad,
++ 0x604e, 0x665a, 0x2c00, 0x2078, 0x0479, 0x607f, 0xffff, 0x6083,
++ 0x0000, 0x8109, 0x0180, 0x080c, 0x1602, 0x01c0, 0x2d00, 0x7806,
++ 0x2f00, 0x6802, 0x6d36, 0xa006, 0x2d00, 0x2520, 0x00e9, 0x2d00,
++ 0x2078, 0x8109, 0x1d80, 0x2c00, 0xa005, 0x002e, 0x005e, 0x004e,
++ 0x008e, 0x00ce, 0x00de, 0x00ee, 0x00fe, 0x0005, 0x2c00, 0x2068,
++ 0x080c, 0x1629, 0x2600, 0x2071, 0xc76f, 0x7120, 0xa102, 0x0a0c,
++ 0x1519, 0x7022, 0xa006, 0x0c48, 0x00d6, 0x00c6, 0x0136, 0x0146,
++ 0x0156, 0x0016, 0x2068, 0x2400, 0xa084, 0x000f, 0xa080, 0x23c7,
++ 0x2005, 0x2005, 0xad60, 0x2c00, 0x2d08, 0xa188, 0x0030, 0xa102,
++ 0x20a8, 0x2c00, 0x20a0, 0x2001, 0xffff, 0x40a4, 0x001e, 0x015e,
++ 0x014e, 0x013e, 0x00ce, 0x00de, 0x0005, 0x00c6, 0x00e6, 0x00f6,
++ 0x6858, 0x2071, 0xc76f, 0x7120, 0xa102, 0x0a0c, 0x1519, 0x7022,
++ 0x6960, 0x694e, 0x697c, 0x2009, 0xffff, 0x7818, 0xa102, 0xe000,
++ 0x6852, 0x684b, 0x0000, 0x6868, 0xa005, 0x0118, 0x6848, 0xc085,
++ 0x684a, 0x2d00, 0xa080, 0x0015, 0x2038, 0x2031, 0x0018, 0x6864,
++ 0x2020, 0x683a, 0x685c, 0xa08a, 0x00ff, 0x1a0c, 0x1519, 0x2028,
++ 0x2d00, 0x2060, 0x2078, 0x6934, 0xa18c, 0x000f, 0xa188, 0x23c7,
++ 0x2145, 0x685c, 0x2050, 0xa005, 0x0530, 0x2805, 0xac70, 0x6834,
++ 0xa084, 0x00ff, 0xa086, 0x0024, 0x1110, 0x7008, 0x0040, 0x6834,
++ 0xa084, 0x00ff, 0xa086, 0x002c, 0x190c, 0x1519, 0x7010, 0x0006,
++ 0x2400, 0xa005, 0x000e, 0x0168, 0x203a, 0x8738, 0x8631, 0x090c,
++ 0x1519, 0x8421, 0x8529, 0x0138, 0x080c, 0x2389, 0x090c, 0x1519,
++ 0x08e0, 0x080c, 0x73d8, 0x6837, 0x0023, 0x00fe, 0x00ee, 0x00ce,
++ 0x0005, 0x00e6, 0x00c6, 0x00a6, 0x0086, 0x0056, 0x2d00, 0x2060,
++ 0x6934, 0xa18c, 0x000f, 0xa188, 0x23c7, 0x2145, 0x685c, 0x2050,
++ 0xa005, 0x01d0, 0x2028, 0x2805, 0xac70, 0x6834, 0xa084, 0x00ff,
++ 0xa086, 0x0024, 0x1110, 0x7008, 0x0008, 0x7010, 0x0006, 0xa086,
++ 0xffff, 0x000e, 0x0110, 0x080c, 0x73d8, 0x8529, 0x0128, 0x080c,
++ 0x2389, 0x090c, 0x1519, 0x0c38, 0x005e, 0x008e, 0x00ae, 0x00ce,
++ 0x00ee, 0x0005, 0x70ac, 0xa005, 0x0120, 0x2060, 0x6008, 0xa306,
++ 0x0005, 0xa085, 0x0001, 0x0ce0, 0x70ac, 0x600e, 0x2c00, 0x70ae,
++ 0x0005, 0x00f6, 0x00d6, 0x0036, 0x70ac, 0xa005, 0x01b8, 0x2068,
++ 0x2079, 0x0000, 0x2c08, 0xa11e, 0x1118, 0x680c, 0x70ae, 0x0060,
++ 0xa106, 0x0140, 0x2d00, 0x2078, 0x680c, 0xa005, 0x090c, 0x1519,
++ 0x2068, 0x0cb0, 0x6b0c, 0x7b0e, 0x600f, 0x0000, 0x003e, 0x00de,
++ 0x00fe, 0x0005, 0x00e6, 0x080c, 0x724a, 0x6018, 0x2070, 0xa006,
++ 0x70b2, 0x70b6, 0x08b1, 0x080c, 0x95e3, 0x00ee, 0x0005, 0x00d6,
++ 0x0026, 0x0016, 0x2061, 0xc76f, 0x6020, 0x6414, 0xa600, 0xa42a,
++ 0x02f0, 0x6022, 0x2069, 0xc682, 0x6828, 0x6114, 0xa102, 0x1288,
++ 0x685c, 0xd08c, 0x1130, 0xc08d, 0x685e, 0x2011, 0x8025, 0x080c,
++ 0x407d, 0x2001, 0xc695, 0x2004, 0xa080, 0x0000, 0x200c, 0x8108,
++ 0x2102, 0xa085, 0x0001, 0x001e, 0x002e, 0x00de, 0x0005, 0x2069,
++ 0xc682, 0x6804, 0xd094, 0x0148, 0x685c, 0xd084, 0x1130, 0xc085,
++ 0x685e, 0x2011, 0x8026, 0x080c, 0x407d, 0x2001, 0xc695, 0x2004,
++ 0xa080, 0x0001, 0x200c, 0x8108, 0x2102, 0xa006, 0x2031, 0x0000,
++ 0x0c10, 0x0006, 0x0016, 0x00c6, 0x6018, 0x2060, 0x6010, 0xa005,
++ 0x0178, 0x2001, 0xc756, 0x2004, 0xa005, 0x0150, 0x2001, 0xc600,
++ 0x2004, 0xa086, 0x0003, 0x1120, 0x2011, 0x8014, 0x080c, 0x407d,
++ 0x00ce, 0x001e, 0x000e, 0x0005, 0x0016, 0x6834, 0xa08c, 0x00ff,
++ 0xa186, 0x0024, 0x0110, 0xa186, 0x002c, 0x001e, 0x0005, 0x2001,
++ 0xc683, 0x2004, 0xd09c, 0x0005, 0x2001, 0xc683, 0x2004, 0xd0a4,
++ 0x0005, 0x0066, 0x6000, 0xa0b2, 0x0010, 0x1a0c, 0x1519, 0x0013,
++ 0x006e, 0x0005, 0x76b2, 0x76b2, 0x76b2, 0x76b4, 0x770f, 0x76b2,
++ 0x76b2, 0x76b2, 0x774d, 0x76b2, 0x77aa, 0x76b2, 0x76b2, 0x76b2,
++ 0x76b2, 0x76b2, 0x080c, 0x1519, 0xa182, 0x0100, 0x0002, 0x76c6,
++ 0x76c6, 0x76c6, 0x76c8, 0x76e1, 0x76fb, 0x76c6, 0x76c6, 0x76c6,
++ 0x76c6, 0x76c6, 0x76c6, 0x76c6, 0x76c6, 0x76c6, 0x080c, 0x1519,
++ 0x00d6, 0x080c, 0x7e47, 0x080c, 0x7f6e, 0x6110, 0x2168, 0x684b,
++ 0x0000, 0x00d6, 0x6018, 0x2068, 0x6008, 0x68b6, 0x68bb, 0x0500,
++ 0xa006, 0x68b2, 0x00de, 0x080c, 0x580a, 0x080c, 0x95e3, 0x00de,
++ 0x0005, 0x080c, 0x7e47, 0x00f6, 0x00d6, 0x6110, 0x2178, 0x080c,
++ 0xac91, 0x0150, 0x00e6, 0x6018, 0x2070, 0xa006, 0x70b2, 0x70b6,
++ 0x00ee, 0x2f68, 0x080c, 0x580a, 0x00de, 0x00fe, 0x080c, 0x95e3,
++ 0x080c, 0x7f6e, 0x0005, 0x080c, 0x7e47, 0x080c, 0x2e46, 0x00d6,
++ 0x6110, 0x2168, 0x080c, 0xac91, 0x0120, 0x684b, 0x0029, 0x080c,
++ 0x580a, 0x00de, 0x080c, 0x95e3, 0x080c, 0x7f6e, 0x0005, 0xa182,
++ 0x0100, 0x0002, 0x7721, 0x7723, 0x772b, 0x7721, 0x7721, 0x7721,
++ 0x7748, 0x7721, 0x7721, 0x7721, 0x7721, 0x7721, 0x7721, 0x7721,
++ 0x7721, 0x080c, 0x1519, 0x20e1, 0x0005, 0x3d18, 0x3e20, 0x2c10,
++ 0x080c, 0x1870, 0x0005, 0x00d6, 0x00e6, 0x2001, 0xc756, 0x2004,
++ 0xa086, 0x0000, 0x6110, 0x1118, 0x080c, 0x1629, 0x0028, 0x2168,
++ 0x080c, 0x7555, 0x080c, 0x580a, 0x6018, 0x2070, 0xa006, 0x70b2,
++ 0x70b6, 0x080c, 0x75f9, 0x00ee, 0x00de, 0x080c, 0x95e3, 0x0005,
++ 0x080c, 0x761a, 0x080c, 0x56c7, 0x0005, 0xa182, 0x0100, 0x0002,
++ 0x7762, 0x7788, 0x7760, 0x7760, 0x7760, 0x7760, 0x7760, 0x7760,
++ 0x7760, 0x7760, 0x7760, 0x7760, 0x7760, 0x7760, 0x7760, 0x7760,
++ 0x080c, 0x1519, 0x00d6, 0x6003, 0x0003, 0x6106, 0x6010, 0x2068,
++ 0x687c, 0x680a, 0x6880, 0x680e, 0x6813, 0x0000, 0x6817, 0x0000,
++ 0x6854, 0xa092, 0x199a, 0x0210, 0x2001, 0x1999, 0x8003, 0x8013,
++ 0x8213, 0xa210, 0x6216, 0x00de, 0x2c10, 0x080c, 0x2068, 0x080c,
++ 0x79fc, 0x0126, 0x2091, 0x8000, 0x080c, 0x7f6e, 0x012e, 0x0005,
++ 0x6003, 0x0004, 0x630a, 0x080c, 0x74a0, 0x0168, 0x6012, 0x600f,
++ 0x0000, 0x080c, 0x75f4, 0x20e1, 0x0005, 0x3d18, 0x3e20, 0x2c10,
++ 0x080c, 0x1870, 0x0005, 0x2011, 0x0000, 0x080c, 0x1870, 0x00e6,
++ 0x6018, 0x2070, 0x70b3, 0x0000, 0x70b7, 0x0000, 0x00ee, 0x080c,
++ 0x95e3, 0x0005, 0x00d6, 0x080c, 0x7e47, 0x080c, 0x7f6e, 0x6110,
++ 0x2168, 0x684b, 0x0000, 0x00d6, 0x6018, 0x2068, 0x6008, 0x68b6,
++ 0x68bb, 0x0500, 0xa006, 0x68b2, 0x00de, 0x080c, 0x580a, 0x080c,
++ 0x95e3, 0x00de, 0x0005, 0x6000, 0xa08a, 0x0010, 0x1a0c, 0x1519,
++ 0x000b, 0x0005, 0x77da, 0x77da, 0x77da, 0x77dc, 0x77f1, 0x77da,
++ 0x77da, 0x77da, 0x77da, 0x77da, 0x77da, 0x77da, 0x77da, 0x77da,
++ 0x77da, 0x77da, 0x080c, 0x1519, 0x080c, 0x90f6, 0x6110, 0x2168,
++ 0x684b, 0x0006, 0x00d6, 0x6018, 0x2068, 0x6008, 0x68b6, 0x68bb,
++ 0x0500, 0xa006, 0x68b2, 0x00de, 0x080c, 0x580a, 0x080c, 0x95e3,
++ 0x0005, 0x080c, 0x761a, 0x0005, 0x6000, 0xa08a, 0x0010, 0x1a0c,
++ 0x1519, 0x000b, 0x0005, 0x780b, 0x780b, 0x780b, 0x780d, 0x781d,
++ 0x780b, 0x780b, 0x780b, 0x780b, 0x780b, 0x780b, 0x780b, 0x780b,
++ 0x780b, 0x780b, 0x780b, 0x080c, 0x1519, 0x0036, 0x00e6, 0x2071,
++ 0xc927, 0x703c, 0xac06, 0x1120, 0x2019, 0x0000, 0x080c, 0x8e79,
++ 0x080c, 0x90f6, 0x00ee, 0x003e, 0x0005, 0x00d6, 0x6010, 0x2068,
++ 0x080c, 0x761a, 0x00de, 0x0005, 0x080c, 0x7684, 0x1150, 0x6024,
++ 0xd09c, 0x1138, 0x6810, 0x2009, 0xffff, 0xa102, 0x2020, 0x2019,
++ 0x0000, 0x0005, 0x20a9, 0x0010, 0xa006, 0x8004, 0x8086, 0x818e,
++ 0x1208, 0xa200, 0x1f04, 0x7836, 0x8086, 0x818e, 0x0005, 0x0156,
++ 0x20a9, 0x0010, 0xa005, 0x01b8, 0xa11a, 0x12a8, 0x8213, 0x818d,
++ 0x0228, 0xa11a, 0x1220, 0x1f04, 0x7846, 0x0028, 0xa11a, 0x2308,
++ 0x8210, 0x1f04, 0x7846, 0x0006, 0x3200, 0xa084, 0xefff, 0x2080,
++ 0x000e, 0x015e, 0x0005, 0x0006, 0x3200, 0xa085, 0x1000, 0x0cb8,
++ 0x0126, 0x2091, 0x2800, 0x2079, 0xc927, 0x012e, 0x00d6, 0x2069,
++ 0xc927, 0x6803, 0x0005, 0x2069, 0x0004, 0x2d04, 0xa085, 0x8001,
++ 0x206a, 0x00de, 0x0005, 0x00c6, 0x6027, 0x0001, 0x7804, 0xa084,
++ 0x0007, 0x0002, 0x7884, 0x78a5, 0x78f8, 0x788a, 0x78a5, 0x7884,
++ 0x7882, 0x7882, 0x080c, 0x1519, 0x080c, 0x7024, 0x080c, 0x7e94,
++ 0x00ce, 0x0005, 0x62c0, 0x82ff, 0x1110, 0x00ce, 0x0005, 0x2011,
++ 0x4e18, 0x080c, 0x6fad, 0x7828, 0xa092, 0x00c8, 0x1228, 0x8000,
++ 0x782a, 0x080c, 0x4e52, 0x0c88, 0x080c, 0x4e18, 0x7807, 0x0003,
++ 0x7827, 0x0000, 0x782b, 0x0000, 0x0c40, 0x080c, 0x7024, 0x3c00,
++ 0x0006, 0x2011, 0x0209, 0x20e1, 0x4000, 0x2214, 0x000e, 0x20e0,
++ 0x82ff, 0x0178, 0x62c0, 0x82ff, 0x1160, 0x782b, 0x0000, 0x7824,
++ 0xa065, 0x090c, 0x1519, 0x2009, 0x0013, 0x080c, 0x9613, 0x00ce,
++ 0x0005, 0x3900, 0xa082, 0xca74, 0x1210, 0x080c, 0x91cb, 0x00c6,
++ 0x7824, 0xa065, 0x090c, 0x1519, 0x7804, 0xa086, 0x0004, 0x0904,
++ 0x7938, 0x7828, 0xa092, 0x2710, 0x1230, 0x8000, 0x782a, 0x00ce,
++ 0x080c, 0x8be8, 0x0c20, 0x6104, 0xa186, 0x0003, 0x1188, 0x00e6,
++ 0x2071, 0xc600, 0x70e0, 0x00ee, 0xd08c, 0x0150, 0x00c6, 0x00e6,
++ 0x2061, 0x0100, 0x2071, 0xc600, 0x080c, 0x4e5b, 0x00ee, 0x00ce,
++ 0x080c, 0xc59b, 0x2009, 0x0014, 0x080c, 0x9613, 0x00ce, 0x0838,
++ 0x2001, 0xc943, 0x2003, 0x0000, 0x62c0, 0x82ff, 0x1160, 0x782b,
++ 0x0000, 0x7824, 0xa065, 0x090c, 0x1519, 0x2009, 0x0013, 0x080c,
++ 0x9667, 0x00ce, 0x0005, 0x00c6, 0x00d6, 0x3900, 0xa082, 0xca74,
++ 0x1210, 0x080c, 0x91cb, 0x7824, 0xa005, 0x090c, 0x1519, 0x781c,
++ 0xa06d, 0x090c, 0x1519, 0x6800, 0xc0dc, 0x6802, 0x7924, 0x2160,
++ 0x080c, 0x95e3, 0x693c, 0x81ff, 0x090c, 0x1519, 0x8109, 0x693e,
++ 0x6854, 0xa015, 0x0110, 0x7a1e, 0x0010, 0x7918, 0x791e, 0x7807,
++ 0x0000, 0x7827, 0x0000, 0x00de, 0x00ce, 0x080c, 0x7e94, 0x0888,
++ 0x6104, 0xa186, 0x0002, 0x0128, 0xa186, 0x0004, 0x0110, 0x0804,
++ 0x78d1, 0x7808, 0xac06, 0x0904, 0x78d1, 0x080c, 0x7db1, 0x080c,
++ 0x79df, 0x00ce, 0x080c, 0x7e94, 0x0804, 0x78bf, 0x00c6, 0x6027,
++ 0x0002, 0x62c8, 0x60c4, 0xa205, 0x11a8, 0x793c, 0xa1e5, 0x0000,
++ 0x0160, 0x2009, 0x0049, 0x601c, 0xa086, 0x0009, 0x1110, 0x2009,
++ 0x0103, 0x080c, 0x9613, 0x00ce, 0x0005, 0x2011, 0xc946, 0x2013,
++ 0x0000, 0x0cc8, 0x3908, 0xa192, 0xca74, 0x1210, 0x080c, 0x91cb,
++ 0x793c, 0x81ff, 0x0d90, 0x7944, 0xa192, 0x7530, 0x12f0, 0x8108,
++ 0x7946, 0x793c, 0xa188, 0x0007, 0x210c, 0xa18e, 0x0006, 0x1138,
++ 0x6014, 0xa084, 0x0184, 0xa085, 0x0012, 0x6016, 0x08e0, 0x793c,
++ 0xa188, 0x0007, 0x210c, 0xa18e, 0x0009, 0x0d90, 0x6014, 0xa084,
++ 0x0184, 0xa085, 0x0016, 0x6016, 0x0870, 0x7848, 0xc085, 0x784a,
++ 0x0850, 0x0006, 0x0016, 0x00c6, 0x0126, 0x2091, 0x8000, 0x600f,
++ 0x0000, 0x2c08, 0x2061, 0xc927, 0x6020, 0x8000, 0x6022, 0x6010,
++ 0xa005, 0x0148, 0xa080, 0x0003, 0x2102, 0x6112, 0x012e, 0x00ce,
++ 0x001e, 0x000e, 0x0005, 0x6116, 0x6112, 0x0cc0, 0x00d6, 0x2069,
++ 0xc927, 0x6000, 0xd0d4, 0x0168, 0x6820, 0x8000, 0x6822, 0xa086,
++ 0x0001, 0x1110, 0x2c00, 0x681e, 0x6804, 0xa084, 0x0007, 0x0804,
++ 0x7e9a, 0xc0d5, 0x6002, 0x6818, 0xa005, 0x0158, 0x6056, 0x605b,
++ 0x0000, 0x0006, 0x2c00, 0x681a, 0x00de, 0x685a, 0x2069, 0xc927,
++ 0x0c18, 0x6056, 0x605a, 0x2c00, 0x681a, 0x681e, 0x08e8, 0x0006,
++ 0x0016, 0x00c6, 0x0126, 0x2091, 0x8000, 0x600f, 0x0000, 0x2c08,
++ 0x2061, 0xc927, 0x6020, 0x8000, 0x6022, 0x6008, 0xa005, 0x0148,
++ 0xa080, 0x0003, 0x2102, 0x610a, 0x012e, 0x00ce, 0x001e, 0x000e,
++ 0x0005, 0x610e, 0x610a, 0x0cc0, 0x00c6, 0x600f, 0x0000, 0x2c08,
++ 0x2061, 0xc927, 0x6034, 0xa005, 0x0130, 0xa080, 0x0003, 0x2102,
++ 0x6136, 0x00ce, 0x0005, 0x613a, 0x6136, 0x0cd8, 0x00f6, 0x00e6,
++ 0x00d6, 0x00c6, 0x0076, 0x0066, 0x0056, 0x0036, 0x0026, 0x0016,
++ 0x0006, 0x0126, 0xa02e, 0x2071, 0xc927, 0x7638, 0x2660, 0x2678,
++ 0x2091, 0x8000, 0x8cff, 0x0904, 0x7a87, 0x6018, 0xa080, 0x0028,
++ 0x2004, 0xa206, 0x1904, 0x7a82, 0x87ff, 0x0120, 0x6050, 0xa106,
++ 0x1904, 0x7a82, 0x703c, 0xac06, 0x1190, 0x0036, 0x2019, 0x0001,
++ 0x080c, 0x8e79, 0x7033, 0x0000, 0x703f, 0x0000, 0x7043, 0x0000,
++ 0x7047, 0x0000, 0x704b, 0x0000, 0x003e, 0x2029, 0x0001, 0x7038,
++ 0xac36, 0x1110, 0x660c, 0x763a, 0x7034, 0xac36, 0x1140, 0x2c00,
++ 0xaf36, 0x0118, 0x2f00, 0x7036, 0x0010, 0x7037, 0x0000, 0x660c,
++ 0x0066, 0x2c00, 0xaf06, 0x0110, 0x7e0e, 0x0008, 0x2678, 0x600f,
++ 0x0000, 0x080c, 0xac91, 0x01c8, 0x6010, 0x2068, 0x601c, 0xa086,
++ 0x0003, 0x1580, 0x6837, 0x0103, 0x6b4a, 0x6847, 0x0000, 0x0016,
++ 0x0036, 0x0076, 0x080c, 0xaf03, 0x080c, 0xc4d7, 0x080c, 0x580a,
++ 0x007e, 0x003e, 0x001e, 0x080c, 0xae48, 0x080c, 0xae54, 0x00ce,
++ 0x0804, 0x7a22, 0x2c78, 0x600c, 0x2060, 0x0804, 0x7a22, 0x85ff,
++ 0x0120, 0x0036, 0x080c, 0x7f6e, 0x003e, 0x012e, 0x000e, 0x001e,
++ 0x002e, 0x003e, 0x005e, 0x006e, 0x007e, 0x00ce, 0x00de, 0x00ee,
++ 0x00fe, 0x0005, 0x601c, 0xa086, 0x0006, 0x0158, 0x601c, 0xa086,
++ 0x0009, 0x1190, 0x684b, 0x0006, 0x080c, 0x580a, 0x080c, 0x95e3,
++ 0x08b0, 0x0016, 0x0036, 0x0076, 0x080c, 0xc4d7, 0x080c, 0xc141,
++ 0x007e, 0x003e, 0x001e, 0x0848, 0x601c, 0xa086, 0x000a, 0x0904,
++ 0x7a6c, 0x0804, 0x7a6a, 0x0006, 0x0066, 0x00c6, 0x00d6, 0x00f6,
++ 0x2031, 0x0000, 0x0126, 0x2091, 0x8000, 0x2079, 0xc927, 0x7838,
++ 0xa065, 0x0568, 0x600c, 0x0006, 0x600f, 0x0000, 0x783c, 0xac06,
++ 0x1180, 0x0036, 0x2019, 0x0001, 0x080c, 0x8e79, 0x7833, 0x0000,
++ 0x783f, 0x0000, 0x7843, 0x0000, 0x7847, 0x0000, 0x784b, 0x0000,
++ 0x003e, 0x080c, 0xac91, 0x0178, 0x6010, 0x2068, 0x601c, 0xa086,
++ 0x0003, 0x11b0, 0x6837, 0x0103, 0x6b4a, 0x6847, 0x0000, 0x080c,
++ 0x580a, 0x080c, 0xae48, 0x080c, 0xae54, 0x000e, 0x0888, 0x7e3a,
++ 0x7e36, 0x012e, 0x00fe, 0x00de, 0x00ce, 0x006e, 0x000e, 0x0005,
++ 0x601c, 0xa086, 0x0006, 0x0150, 0x601c, 0xa086, 0x0009, 0x1148,
++ 0x6b4a, 0x080c, 0x580a, 0x080c, 0x95e3, 0x0c38, 0x080c, 0xc141,
++ 0x0c10, 0x601c, 0xa086, 0x000a, 0x09b8, 0x08a0, 0x0016, 0x0026,
++ 0x0086, 0x2041, 0x0000, 0x0099, 0x080c, 0x7be4, 0x008e, 0x002e,
++ 0x001e, 0x0005, 0x00f6, 0x0126, 0x2079, 0xc927, 0x2091, 0x8000,
++ 0x080c, 0x7c71, 0x080c, 0x7ce3, 0x012e, 0x00fe, 0x0005, 0x00f6,
++ 0x00e6, 0x00d6, 0x00c6, 0x0066, 0x0016, 0x0006, 0x0126, 0x2091,
++ 0x8000, 0x2071, 0xc927, 0x7614, 0x2660, 0x2678, 0x8cff, 0x0904,
++ 0x7bba, 0x6018, 0xa080, 0x0028, 0x2004, 0xa206, 0x1904, 0x7bb5,
++ 0x88ff, 0x0120, 0x6050, 0xa106, 0x1904, 0x7bb5, 0x7024, 0xac06,
++ 0x1538, 0x2069, 0x0100, 0x68c0, 0xa005, 0x01f0, 0x080c, 0x7024,
++ 0x080c, 0x8bf5, 0x68c3, 0x0000, 0x080c, 0x90e6, 0x7027, 0x0000,
++ 0x0036, 0x2069, 0x0140, 0x6b04, 0xa384, 0x1000, 0x0120, 0x6803,
++ 0x0100, 0x6803, 0x0000, 0x2069, 0x0100, 0x6824, 0xd084, 0x0110,
++ 0x6827, 0x0001, 0x003e, 0x0020, 0x6003, 0x0009, 0x630a, 0x04e8,
++ 0x7014, 0xac36, 0x1110, 0x660c, 0x7616, 0x7010, 0xac36, 0x1140,
++ 0x2c00, 0xaf36, 0x0118, 0x2f00, 0x7012, 0x0010, 0x7013, 0x0000,
++ 0x660c, 0x0066, 0x2c00, 0xaf06, 0x0110, 0x7e0e, 0x0008, 0x2678,
++ 0x600f, 0x0000, 0x6010, 0x2068, 0x080c, 0xac91, 0x01b8, 0x601c,
++ 0xa086, 0x0003, 0x1540, 0x6837, 0x0103, 0x6b4a, 0x6847, 0x0000,
++ 0x0016, 0x0036, 0x0086, 0x080c, 0xaf03, 0x080c, 0xc4d7, 0x080c,
++ 0x580a, 0x008e, 0x003e, 0x001e, 0x080c, 0xae48, 0x080c, 0xae54,
++ 0x080c, 0x8fb7, 0x00ce, 0x0804, 0x7b3e, 0x2c78, 0x600c, 0x2060,
++ 0x0804, 0x7b3e, 0x012e, 0x000e, 0x001e, 0x006e, 0x00ce, 0x00de,
++ 0x00ee, 0x00fe, 0x0005, 0x601c, 0xa086, 0x0006, 0x1158, 0x0016,
++ 0x0036, 0x0086, 0x080c, 0xc4d7, 0x080c, 0xc141, 0x008e, 0x003e,
++ 0x001e, 0x08e0, 0x601c, 0xa086, 0x0002, 0x1128, 0x6004, 0xa086,
++ 0x0085, 0x0908, 0x0898, 0x601c, 0xa086, 0x0005, 0x1978, 0x6004,
++ 0xa086, 0x0085, 0x0d20, 0x0850, 0x00c6, 0x0006, 0x0126, 0x2091,
++ 0x8000, 0xa280, 0xc77b, 0x2004, 0xa065, 0x0904, 0x7c6d, 0x00f6,
++ 0x00e6, 0x00d6, 0x0066, 0x2071, 0xc927, 0x6654, 0x7018, 0xac06,
++ 0x1108, 0x761a, 0x701c, 0xac06, 0x1130, 0x86ff, 0x1118, 0x7018,
++ 0x701e, 0x0008, 0x761e, 0x6058, 0xa07d, 0x0108, 0x7e56, 0xa6ed,
++ 0x0000, 0x0110, 0x2f00, 0x685a, 0x6057, 0x0000, 0x605b, 0x0000,
++ 0x6000, 0xc0d4, 0xc0dc, 0x6002, 0x080c, 0x5268, 0x0904, 0x7c69,
++ 0x7624, 0x86ff, 0x05e8, 0xa680, 0x0004, 0x2004, 0xad06, 0x15c0,
++ 0x00d6, 0x2069, 0x0100, 0x68c0, 0xa005, 0x0548, 0x080c, 0x7024,
++ 0x080c, 0x8bf5, 0x68c3, 0x0000, 0x080c, 0x90e6, 0x7027, 0x0000,
++ 0x0036, 0x2069, 0x0140, 0x6b04, 0xa384, 0x1000, 0x0120, 0x6803,
++ 0x0100, 0x6803, 0x0000, 0x2069, 0x0100, 0x6824, 0xd084, 0x0110,
++ 0x6827, 0x0001, 0x003e, 0x00de, 0x00c6, 0x603c, 0xa005, 0x0110,
++ 0x8001, 0x603e, 0x2660, 0x080c, 0xae54, 0x00ce, 0x0048, 0x00de,
++ 0x00c6, 0x2660, 0x6003, 0x0009, 0x630a, 0x00ce, 0x0804, 0x7c14,
++ 0x8dff, 0x0158, 0x6837, 0x0103, 0x6b4a, 0x6847, 0x0000, 0x080c,
++ 0xaf03, 0x080c, 0xc4d7, 0x080c, 0x580a, 0x080c, 0x8fb7, 0x0804,
++ 0x7c14, 0x006e, 0x00de, 0x00ee, 0x00fe, 0x012e, 0x000e, 0x00ce,
++ 0x0005, 0x0006, 0x0066, 0x00c6, 0x00d6, 0x2031, 0x0000, 0x7814,
++ 0xa065, 0x0904, 0x7cc3, 0x600c, 0x0006, 0x600f, 0x0000, 0x7824,
++ 0xac06, 0x1540, 0x2069, 0x0100, 0x68c0, 0xa005, 0x01f0, 0x080c,
++ 0x7024, 0x080c, 0x8bf5, 0x68c3, 0x0000, 0x080c, 0x90e6, 0x7827,
++ 0x0000, 0x0036, 0x2069, 0x0140, 0x6b04, 0xa384, 0x1000, 0x0120,
++ 0x6803, 0x0100, 0x6803, 0x0000, 0x2069, 0x0100, 0x6824, 0xd084,
++ 0x0110, 0x6827, 0x0001, 0x003e, 0x0028, 0x6003, 0x0009, 0x630a,
++ 0x2c30, 0x00b0, 0x6010, 0x2068, 0x080c, 0xac91, 0x0168, 0x601c,
++ 0xa086, 0x0003, 0x11b8, 0x6837, 0x0103, 0x6b4a, 0x6847, 0x0000,
++ 0x080c, 0x580a, 0x080c, 0xae48, 0x080c, 0xae54, 0x080c, 0x8fb7,
++ 0x000e, 0x0804, 0x7c78, 0x7e16, 0x7e12, 0x00de, 0x00ce, 0x006e,
++ 0x000e, 0x0005, 0x601c, 0xa086, 0x0006, 0x1118, 0x080c, 0xc141,
++ 0x0c58, 0x601c, 0xa086, 0x0002, 0x1128, 0x6004, 0xa086, 0x0085,
++ 0x09d0, 0x0c10, 0x601c, 0xa086, 0x0005, 0x19f0, 0x6004, 0xa086,
++ 0x0085, 0x0d60, 0x08c8, 0x0006, 0x0066, 0x00c6, 0x00d6, 0x7818,
++ 0xa065, 0x0904, 0x7d49, 0x6054, 0x0006, 0x6057, 0x0000, 0x605b,
++ 0x0000, 0x6000, 0xc0d4, 0xc0dc, 0x6002, 0x080c, 0x5268, 0x0904,
++ 0x7d46, 0x7e24, 0x86ff, 0x05e8, 0xa680, 0x0004, 0x2004, 0xad06,
++ 0x15c0, 0x00d6, 0x2069, 0x0100, 0x68c0, 0xa005, 0x0548, 0x080c,
++ 0x7024, 0x080c, 0x8bf5, 0x68c3, 0x0000, 0x080c, 0x90e6, 0x7827,
++ 0x0000, 0x0036, 0x2069, 0x0140, 0x6b04, 0xa384, 0x1000, 0x0120,
++ 0x6803, 0x0100, 0x6803, 0x0000, 0x2069, 0x0100, 0x6824, 0xd084,
++ 0x0110, 0x6827, 0x0001, 0x003e, 0x00de, 0x00c6, 0x603c, 0xa005,
++ 0x0110, 0x8001, 0x603e, 0x2660, 0x080c, 0xae54, 0x00ce, 0x0048,
++ 0x00de, 0x00c6, 0x2660, 0x6003, 0x0009, 0x630a, 0x00ce, 0x0804,
++ 0x7cf5, 0x8dff, 0x0138, 0x6837, 0x0103, 0x6b4a, 0x6847, 0x0000,
++ 0x080c, 0x580a, 0x080c, 0x8fb7, 0x0804, 0x7cf5, 0x000e, 0x0804,
++ 0x7ce8, 0x781e, 0x781a, 0x00de, 0x00ce, 0x006e, 0x000e, 0x0005,
++ 0x00e6, 0x00d6, 0x0066, 0x6000, 0xd0dc, 0x01a0, 0x604c, 0xa06d,
++ 0x0188, 0x6848, 0xa606, 0x1170, 0x2071, 0xc927, 0x7024, 0xa035,
++ 0x0148, 0xa080, 0x0004, 0x2004, 0xad06, 0x1120, 0x6000, 0xc0dc,
++ 0x6002, 0x0021, 0x006e, 0x00de, 0x00ee, 0x0005, 0x00f6, 0x2079,
++ 0x0100, 0x78c0, 0xa005, 0x1138, 0x00c6, 0x2660, 0x6003, 0x0009,
++ 0x630a, 0x00ce, 0x04a0, 0x080c, 0x8bf5, 0x78c3, 0x0000, 0x080c,
++ 0x90e6, 0x7027, 0x0000, 0x0036, 0x2079, 0x0140, 0x7b04, 0xa384,
++ 0x1000, 0x0120, 0x7803, 0x0100, 0x7803, 0x0000, 0x2079, 0x0100,
++ 0x7824, 0xd084, 0x0110, 0x7827, 0x0001, 0x080c, 0x90e6, 0x003e,
++ 0x080c, 0x5268, 0x00c6, 0x603c, 0xa005, 0x0110, 0x8001, 0x603e,
++ 0x2660, 0x080c, 0x95e3, 0x00ce, 0x6837, 0x0103, 0x6b4a, 0x6847,
++ 0x0000, 0x080c, 0xaf03, 0x080c, 0x580a, 0x080c, 0x8fb7, 0x00fe,
++ 0x0005, 0x00e6, 0x00c6, 0x2071, 0xc927, 0x7004, 0xa084, 0x0007,
++ 0x0002, 0x7dc3, 0x7dc6, 0x7ddc, 0x7df5, 0x7e32, 0x7dc3, 0x7dc1,
++ 0x7dc1, 0x080c, 0x1519, 0x00ce, 0x00ee, 0x0005, 0x7024, 0xa065,
++ 0x0148, 0x7020, 0x8001, 0x7022, 0x600c, 0xa015, 0x0150, 0x7216,
++ 0x600f, 0x0000, 0x7007, 0x0000, 0x7027, 0x0000, 0x00ce, 0x00ee,
++ 0x0005, 0x7216, 0x7212, 0x0cb0, 0x6018, 0x2060, 0x080c, 0x5268,
++ 0x6000, 0xc0dc, 0x6002, 0x7020, 0x8001, 0x7022, 0x0120, 0x6054,
++ 0xa015, 0x0140, 0x721e, 0x7007, 0x0000, 0x7027, 0x0000, 0x00ce,
++ 0x00ee, 0x0005, 0x7218, 0x721e, 0x0cb0, 0x7024, 0xa065, 0x05b8,
++ 0x700c, 0xac06, 0x1160, 0x080c, 0x8fb7, 0x600c, 0xa015, 0x0120,
++ 0x720e, 0x600f, 0x0000, 0x0448, 0x720e, 0x720a, 0x0430, 0x7014,
++ 0xac06, 0x1160, 0x080c, 0x8fb7, 0x600c, 0xa015, 0x0120, 0x7216,
++ 0x600f, 0x0000, 0x00d0, 0x7216, 0x7212, 0x00b8, 0x601c, 0xa086,
++ 0x0003, 0x1198, 0x6018, 0x2060, 0x080c, 0x5268, 0x6000, 0xc0dc,
++ 0x6002, 0x080c, 0x8fb7, 0x701c, 0xa065, 0x0138, 0x6054, 0xa015,
++ 0x0110, 0x721e, 0x0010, 0x7218, 0x721e, 0x7027, 0x0000, 0x00ce,
++ 0x00ee, 0x0005, 0x7024, 0xa065, 0x0140, 0x080c, 0x8fb7, 0x600c,
++ 0xa015, 0x0150, 0x720e, 0x600f, 0x0000, 0x080c, 0x90e6, 0x7027,
++ 0x0000, 0x00ce, 0x00ee, 0x0005, 0x720e, 0x720a, 0x0cb0, 0x00d6,
++ 0x2069, 0xc927, 0x6830, 0xa084, 0x0003, 0x0002, 0x7e54, 0x7e56,
++ 0x7e7a, 0x7e52, 0x080c, 0x1519, 0x00de, 0x0005, 0x00c6, 0x6840,
++ 0xa086, 0x0001, 0x01b8, 0x683c, 0xa065, 0x0130, 0x600c, 0xa015,
++ 0x0170, 0x6a3a, 0x600f, 0x0000, 0x6833, 0x0000, 0x683f, 0x0000,
++ 0x2011, 0xc946, 0x2013, 0x0000, 0x00ce, 0x00de, 0x0005, 0x683a,
++ 0x6836, 0x0c90, 0x6843, 0x0000, 0x6838, 0xa065, 0x0d68, 0x6003,
++ 0x0003, 0x0c50, 0x00c6, 0x6843, 0x0000, 0x6847, 0x0000, 0x684b,
++ 0x0000, 0x683c, 0xa065, 0x0168, 0x600c, 0xa015, 0x0130, 0x6a3a,
++ 0x600f, 0x0000, 0x683f, 0x0000, 0x0020, 0x683f, 0x0000, 0x683a,
++ 0x6836, 0x00ce, 0x00de, 0x0005, 0x00d6, 0x2069, 0xc927, 0x6804,
++ 0xa084, 0x0007, 0x0006, 0xa005, 0x11c8, 0x2001, 0xc635, 0x2004,
++ 0xa084, 0x0028, 0x1198, 0x2001, 0xc8e5, 0x2004, 0xa086, 0xaaaa,
++ 0x0168, 0x2001, 0xc696, 0x2004, 0xd08c, 0x1118, 0xd084, 0x1118,
++ 0x0028, 0x080c, 0x7f6e, 0x000e, 0x00de, 0x0005, 0x000e, 0x0002,
++ 0x7ec2, 0x7f5e, 0x7f5e, 0x7f5e, 0x7f5e, 0x7f60, 0x7ec0, 0x7ec0,
++ 0x080c, 0x1519, 0x6820, 0xa005, 0x1110, 0x00de, 0x0005, 0x00c6,
++ 0x680c, 0xa065, 0x0150, 0x6807, 0x0004, 0x6826, 0x682b, 0x0000,
++ 0x080c, 0x7ff0, 0x00ce, 0x00de, 0x0005, 0x6814, 0xa065, 0x0150,
++ 0x6807, 0x0001, 0x6826, 0x682b, 0x0000, 0x080c, 0x7ff0, 0x00ce,
++ 0x00de, 0x0005, 0x00e6, 0x0036, 0x6a1c, 0xa2f5, 0x0000, 0x0904,
++ 0x7f5a, 0x704c, 0xa00d, 0x0118, 0x7088, 0xa005, 0x01a0, 0x7054,
++ 0xa075, 0x0120, 0xa20e, 0x0904, 0x7f5a, 0x0028, 0x6818, 0xa20e,
++ 0x0904, 0x7f5a, 0x2070, 0x704c, 0xa00d, 0x0d88, 0x7088, 0xa005,
++ 0x1d70, 0x2e00, 0x681e, 0x733c, 0x7038, 0xa302, 0x1e40, 0x080c,
++ 0x95ba, 0x0904, 0x7f5a, 0x8318, 0x733e, 0x6112, 0x2e10, 0x621a,
++ 0xa180, 0x0014, 0x2004, 0xa084, 0x00ff, 0x605a, 0xa180, 0x0014,
++ 0x2003, 0x0000, 0xa180, 0x0015, 0x2004, 0xa08a, 0x199a, 0x0210,
++ 0x2001, 0x1999, 0x8003, 0x801b, 0x831b, 0xa318, 0x6316, 0x003e,
++ 0x00f6, 0x2c78, 0x71a0, 0x2001, 0xc635, 0x2004, 0xd0ac, 0x1110,
++ 0xd1bc, 0x0150, 0x7100, 0xd1f4, 0x0120, 0x7114, 0xa18c, 0x00ff,
++ 0x0040, 0x2009, 0x0000, 0x0028, 0xa1e0, 0x2f6e, 0x2c0d, 0xa18c,
++ 0x00ff, 0x2061, 0x0100, 0x619a, 0x080c, 0x8620, 0x7300, 0xc3dd,
++ 0x7302, 0x6807, 0x0002, 0x2f18, 0x6b26, 0x682b, 0x0000, 0x781f,
++ 0x0003, 0x7803, 0x0001, 0x7807, 0x0040, 0x00fe, 0x00ee, 0x00ce,
++ 0x00de, 0x0005, 0x003e, 0x00ee, 0x00ce, 0x0cd0, 0x00de, 0x0005,
++ 0x00c6, 0x680c, 0xa065, 0x0138, 0x6807, 0x0004, 0x6826, 0x682b,
++ 0x0000, 0x080c, 0x7ff0, 0x00ce, 0x00de, 0x0005, 0x00f6, 0x00d6,
++ 0x2069, 0xc927, 0x6830, 0xa086, 0x0000, 0x1904, 0x7fcb, 0x2001,
++ 0xc60c, 0x200c, 0xd1bc, 0x1904, 0x7fe6, 0x6838, 0xa07d, 0x0904,
++ 0x7fcb, 0x2001, 0xc635, 0x2004, 0xa084, 0x0028, 0x11f8, 0x2001,
++ 0xc8e5, 0x2004, 0xa086, 0xaaaa, 0x01c8, 0x781c, 0xa086, 0x0009,
++ 0x11a8, 0x7808, 0xd0fc, 0x0190, 0x2001, 0xc928, 0x2004, 0xa005,
++ 0x1138, 0x2001, 0xc696, 0x200c, 0xc185, 0xc18c, 0x2102, 0x0030,
++ 0x2011, 0xc696, 0x2204, 0xc08d, 0x2012, 0x0428, 0x2f00, 0x6833,
++ 0x0001, 0x683e, 0x6847, 0x0000, 0x684b, 0x0000, 0x0126, 0x00f6,
++ 0x2091, 0x2400, 0x002e, 0x080c, 0x20ef, 0x11c0, 0x012e, 0xe000,
++ 0xe000, 0xe000, 0x6a3c, 0x2278, 0x781c, 0xa086, 0x0009, 0x1148,
++ 0x7808, 0xd0fc, 0x0118, 0x080c, 0x8969, 0x0028, 0x080c, 0x89e2,
++ 0x0010, 0x080c, 0x8a66, 0x00de, 0x00fe, 0x0005, 0x012e, 0xe000,
++ 0x6843, 0x0000, 0x781c, 0xa086, 0x0009, 0x0110, 0x7803, 0x0002,
++ 0x780c, 0xa015, 0x0140, 0x6a3a, 0x780f, 0x0000, 0x6833, 0x0000,
++ 0x683f, 0x0000, 0x0c40, 0x683a, 0x6836, 0x0cc0, 0xc1bc, 0x2102,
++ 0x0066, 0x2031, 0x0001, 0x080c, 0x5fa4, 0x006e, 0x0804, 0x7f7d,
++ 0x601c, 0xa084, 0x000f, 0x000b, 0x0005, 0x7ffe, 0x8003, 0x84c1,
++ 0x85dd, 0x8003, 0x84c1, 0x85dd, 0x7ffe, 0x8003, 0x080c, 0x7db1,
++ 0x080c, 0x7e94, 0x0005, 0x0156, 0x0136, 0x0146, 0x00c6, 0x00f6,
++ 0x6004, 0xa08a, 0x0080, 0x1a0c, 0x1519, 0x6118, 0x2178, 0x79a0,
++ 0x2011, 0xc635, 0x2214, 0xd2ac, 0x1110, 0xd1bc, 0x0150, 0x7900,
++ 0xd1f4, 0x0120, 0x7914, 0xa18c, 0x00ff, 0x0040, 0x2009, 0x0000,
++ 0x0028, 0xa1f8, 0x2f6e, 0x2f0d, 0xa18c, 0x00ff, 0x2c78, 0x2061,
++ 0x0100, 0x619a, 0xa08a, 0x0040, 0x1a04, 0x8077, 0x0033, 0x00fe,
++ 0x00ce, 0x014e, 0x013e, 0x015e, 0x0005, 0x8126, 0x8171, 0x819e,
++ 0x826b, 0x8299, 0x82a1, 0x82c7, 0x82d8, 0x82e9, 0x82f1, 0x8307,
++ 0x82f1, 0x8368, 0x82d8, 0x8389, 0x8391, 0x82e9, 0x8391, 0x83a2,
++ 0x8075, 0x8075, 0x8075, 0x8075, 0x8075, 0x8075, 0x8075, 0x8075,
++ 0x8075, 0x8075, 0x8075, 0x8d1a, 0x8d3f, 0x8d54, 0x8d77, 0x8d98,
++ 0x82c7, 0x8075, 0x82c7, 0x82f1, 0x8075, 0x819e, 0x826b, 0x8075,
++ 0x91e8, 0x82f1, 0x8075, 0x9208, 0x82f1, 0x8075, 0x82e9, 0x811f,
++ 0x808a, 0x8075, 0x922d, 0x92a2, 0x9379, 0x8075, 0x938a, 0x82c2,
++ 0x93a6, 0x8075, 0x8dad, 0x9401, 0x8075, 0x080c, 0x1519, 0x2100,
++ 0x0033, 0x00fe, 0x00ce, 0x014e, 0x013e, 0x015e, 0x0005, 0x9458,
++ 0x9507, 0x8088, 0x80be, 0x80dc, 0x80f2, 0x8088, 0x82c7, 0x8088,
++ 0x080c, 0x1519, 0x00d6, 0x20a1, 0x020b, 0x080c, 0x83bf, 0x7810,
++ 0x2068, 0x20a3, 0x2414, 0x20a3, 0x0018, 0x20a3, 0x0800, 0x683c,
++ 0x20a2, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3,
++ 0x0000, 0x6850, 0x20a2, 0x6854, 0x20a2, 0x20a3, 0x0000, 0x20a3,
++ 0x0000, 0x60c3, 0x0018, 0x080c, 0x8be2, 0x00de, 0x0005, 0x00d6,
++ 0x7818, 0x2068, 0x68a0, 0x2069, 0xc600, 0x6ad4, 0xd2ac, 0x1110,
++ 0xd0bc, 0x0110, 0xa085, 0x0001, 0x00de, 0x0005, 0x00d6, 0x20a1,
++ 0x020b, 0x080c, 0x83bf, 0x20a3, 0x0500, 0x20a3, 0x0000, 0x7810,
++ 0xa0e8, 0x000f, 0x6808, 0x20a2, 0x680c, 0x20a2, 0x6810, 0x20a2,
++ 0x6814, 0x20a2, 0x6818, 0x20a2, 0x681c, 0x20a2, 0x60c3, 0x0010,
++ 0x080c, 0x8be2, 0x00de, 0x0005, 0x0156, 0x0146, 0x20a1, 0x020b,
++ 0x080c, 0x83bf, 0x20a3, 0x7800, 0x20a3, 0x0000, 0x7808, 0x8007,
++ 0x20a2, 0x20a3, 0x0000, 0x60c3, 0x0008, 0x080c, 0x8be2, 0x014e,
++ 0x015e, 0x0005, 0x0156, 0x0146, 0x20a1, 0x020b, 0x080c, 0x845b,
++ 0x20a3, 0x0200, 0x20a3, 0x0000, 0x20a3, 0xdf10, 0x20a3, 0x0034,
++ 0x2099, 0xc605, 0x20a9, 0x0004, 0x53a6, 0x2099, 0xc601, 0x20a9,
++ 0x0004, 0x53a6, 0x2099, 0xc90d, 0x20a9, 0x001a, 0x3304, 0x8007,
++ 0x20a2, 0x9398, 0x1f04, 0x810e, 0x20a3, 0x0000, 0x20a3, 0x0000,
++ 0x60c3, 0x004c, 0x080c, 0x8be2, 0x014e, 0x015e, 0x0005, 0x2001,
++ 0xc615, 0x2004, 0x609a, 0x080c, 0x8be2, 0x0005, 0x20a1, 0x020b,
++ 0x080c, 0x83bf, 0x20a3, 0x5200, 0x20a3, 0x0000, 0x00d6, 0x2069,
++ 0xc652, 0x6804, 0xd084, 0x0150, 0x6828, 0x20a3, 0x0000, 0x0016,
++ 0x080c, 0x29db, 0x21a2, 0x001e, 0x00de, 0x0028, 0x00de, 0x20a3,
++ 0x0000, 0x20a3, 0x0000, 0x20a9, 0x0004, 0x2099, 0xc605, 0x53a6,
++ 0x20a9, 0x0004, 0x2099, 0xc601, 0x53a6, 0x2001, 0xc635, 0x2004,
++ 0xd0ac, 0x1138, 0x7818, 0xa080, 0x0028, 0x2004, 0xa082, 0x007f,
++ 0x0238, 0x2001, 0xc61c, 0x20a6, 0x2001, 0xc61d, 0x20a6, 0x0040,
++ 0x20a3, 0x0000, 0x2001, 0xc615, 0x2004, 0xa084, 0x00ff, 0x20a2,
++ 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x001c, 0x080c, 0x8be2,
++ 0x0005, 0x20a1, 0x020b, 0x080c, 0x83bf, 0x20a3, 0x0500, 0x20a3,
++ 0x0000, 0x2001, 0xc635, 0x2004, 0xd0ac, 0x1138, 0x7818, 0xa080,
++ 0x0028, 0x2004, 0xa082, 0x007f, 0x0238, 0x2001, 0xc61c, 0x20a6,
++ 0x2001, 0xc61d, 0x20a6, 0x0040, 0x20a3, 0x0000, 0x2001, 0xc615,
++ 0x2004, 0xa084, 0x00ff, 0x20a2, 0x20a9, 0x0004, 0x2099, 0xc605,
++ 0x53a6, 0x60c3, 0x0010, 0x080c, 0x8be2, 0x0005, 0x20a1, 0x020b,
++ 0x080c, 0x83bf, 0x00c6, 0x7818, 0x2060, 0x2001, 0x0000, 0x080c,
++ 0x5715, 0x00ce, 0x7818, 0xa080, 0x0028, 0x2004, 0xa086, 0x007e,
++ 0x1130, 0x20a3, 0x0400, 0x620c, 0xc2b4, 0x620e, 0x0010, 0x20a3,
++ 0x0300, 0x20a3, 0x0000, 0x7818, 0xa080, 0x0028, 0x2004, 0xa086,
++ 0x007e, 0x1904, 0x822d, 0x2001, 0xc635, 0x2004, 0xd0a4, 0x01c8,
++ 0x2099, 0xc8d5, 0x33a6, 0x9398, 0x20a3, 0x0000, 0x9398, 0x3304,
++ 0xa084, 0x2000, 0x20a2, 0x9398, 0x33a6, 0x9398, 0x20a3, 0x0000,
++ 0x9398, 0x2001, 0x2710, 0x20a2, 0x9398, 0x33a6, 0x9398, 0x33a6,
++ 0x00d0, 0x2099, 0xc8d5, 0x33a6, 0x9398, 0x33a6, 0x9398, 0x3304,
++ 0x080c, 0x5f22, 0x1118, 0xa084, 0x37ff, 0x0010, 0xa084, 0x3fff,
++ 0x20a2, 0x9398, 0x33a6, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3,
++ 0x0000, 0x20a3, 0x0000, 0x20a9, 0x0004, 0x2099, 0xc605, 0x53a6,
++ 0x20a9, 0x0004, 0x2099, 0xc601, 0x53a6, 0x20a9, 0x0008, 0x20a3,
++ 0x0000, 0x1f04, 0x8207, 0x20a9, 0x0008, 0x20a3, 0x0000, 0x1f04,
++ 0x820d, 0x2099, 0xc8dd, 0x3304, 0xc0dd, 0x20a2, 0x2001, 0xc672,
++ 0x2004, 0xd0e4, 0x0158, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x9398,
++ 0x9398, 0x9398, 0x33a6, 0x20a9, 0x0004, 0x0010, 0x20a9, 0x0007,
++ 0x20a3, 0x0000, 0x1f04, 0x8228, 0x0468, 0x2001, 0xc635, 0x2004,
++ 0xd0a4, 0x0140, 0x2001, 0xc8d6, 0x2004, 0x60e3, 0x0000, 0x080c,
++ 0x2a1c, 0x60e2, 0x2099, 0xc8d5, 0x20a9, 0x0008, 0x53a6, 0x20a9,
++ 0x0004, 0x2099, 0xc605, 0x53a6, 0x20a9, 0x0004, 0x2099, 0xc601,
++ 0x53a6, 0x20a9, 0x0008, 0x20a3, 0x0000, 0x1f04, 0x824b, 0x20a9,
++ 0x0008, 0x20a3, 0x0000, 0x1f04, 0x8251, 0x2099, 0xc8dd, 0x20a9,
++ 0x0008, 0x53a6, 0x20a9, 0x0008, 0x20a3, 0x0000, 0x1f04, 0x825c,
++ 0x20a9, 0x000a, 0x20a3, 0x0000, 0x1f04, 0x8262, 0x60c3, 0x0074,
++ 0x080c, 0x8be2, 0x0005, 0x20a1, 0x020b, 0x080c, 0x83bf, 0x20a3,
++ 0x2010, 0x20a3, 0x0014, 0x20a3, 0x0800, 0x20a3, 0x2000, 0xa006,
++ 0x20a2, 0x20a2, 0x20a2, 0x20a2, 0x20a2, 0x00f6, 0x2079, 0xc652,
++ 0x7904, 0x00fe, 0xd1ac, 0x1110, 0xa085, 0x0020, 0xd1a4, 0x0110,
++ 0xa085, 0x0010, 0xa085, 0x0002, 0x00d6, 0x0804, 0x834a, 0x20a2,
++ 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x0014, 0x080c, 0x8be2,
++ 0x0005, 0x20a1, 0x020b, 0x080c, 0x83bf, 0x20a3, 0x5000, 0x0804,
++ 0x81b9, 0x20a1, 0x020b, 0x080c, 0x83bf, 0x20a3, 0x2110, 0x20a3,
++ 0x0014, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3,
++ 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3,
++ 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x0014, 0x080c,
++ 0x8be2, 0x0005, 0x20a1, 0x020b, 0x080c, 0x8453, 0x0020, 0x20a1,
++ 0x020b, 0x080c, 0x845b, 0x20a3, 0x0200, 0x20a3, 0x0000, 0x20a3,
++ 0x0000, 0x20a3, 0x0000, 0x60c3, 0x0004, 0x080c, 0x8be2, 0x0005,
++ 0x20a1, 0x020b, 0x080c, 0x845b, 0x20a3, 0x0100, 0x20a3, 0x0000,
++ 0x20a3, 0x0003, 0x20a3, 0x2a00, 0x60c3, 0x0008, 0x080c, 0x8be2,
++ 0x0005, 0x20a1, 0x020b, 0x080c, 0x845b, 0x20a3, 0x0200, 0x0804,
++ 0x81b9, 0x20a1, 0x020b, 0x080c, 0x845b, 0x20a3, 0x0100, 0x20a3,
++ 0x0000, 0x7828, 0xa005, 0x0110, 0x20a2, 0x0010, 0x20a3, 0x0003,
++ 0x7810, 0x20a2, 0x60c3, 0x0008, 0x080c, 0x8be2, 0x0005, 0x00d6,
++ 0x20a1, 0x020b, 0x080c, 0x845b, 0x20a3, 0x0210, 0x20a3, 0x0014,
++ 0x20a3, 0x0800, 0x7818, 0x2068, 0x6894, 0xa086, 0x0014, 0x1198,
++ 0x699c, 0xa184, 0x0030, 0x0190, 0x6998, 0xa184, 0xc000, 0x1140,
++ 0xd1ec, 0x0118, 0x20a3, 0x2100, 0x0058, 0x20a3, 0x0100, 0x0040,
++ 0x20a3, 0x0400, 0x0028, 0x20a3, 0x0700, 0x0010, 0x700f, 0x0800,
++ 0xa006, 0x20a2, 0x20a2, 0x20a2, 0x20a2, 0x20a2, 0x00f6, 0x2079,
++ 0xc652, 0x7904, 0x00fe, 0xd1ac, 0x1110, 0xa085, 0x0020, 0xd1a4,
++ 0x0110, 0xa085, 0x0010, 0x2009, 0xc674, 0x210c, 0xd184, 0x1110,
++ 0xa085, 0x0002, 0x0026, 0x2009, 0xc672, 0x210c, 0xd1e4, 0x0130,
++ 0xc0c5, 0xa094, 0x0030, 0xa296, 0x0010, 0x0140, 0xd1ec, 0x0130,
++ 0xa094, 0x0030, 0xa296, 0x0010, 0x0108, 0xc0bd, 0x002e, 0x20a2,
++ 0x20a2, 0x20a2, 0x60c3, 0x0014, 0x080c, 0x8be2, 0x00de, 0x0005,
++ 0x20a1, 0x020b, 0x080c, 0x845b, 0x20a3, 0x0210, 0x20a3, 0x0014,
++ 0x20a3, 0x0000, 0x20a3, 0x0100, 0x20a3, 0x0000, 0x20a3, 0x0000,
++ 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000,
++ 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x0014, 0x080c, 0x8be2,
++ 0x0005, 0x20a1, 0x020b, 0x080c, 0x845b, 0x20a3, 0x0200, 0x0804,
++ 0x812c, 0x20a1, 0x020b, 0x080c, 0x845b, 0x20a3, 0x0100, 0x20a3,
++ 0x0000, 0x20a3, 0x0003, 0x20a3, 0x2a00, 0x60c3, 0x0008, 0x080c,
++ 0x8be2, 0x0005, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x20a1, 0x020b,
++ 0x080c, 0x845b, 0x20a3, 0x0100, 0x20a3, 0x0000, 0x20a3, 0x000b,
++ 0x20a3, 0x0000, 0x60c3, 0x0008, 0x080c, 0x8be2, 0x0005, 0x0026,
++ 0x0036, 0x0046, 0x2019, 0x3200, 0x2021, 0x0800, 0x0038, 0x0026,
++ 0x0036, 0x0046, 0x2019, 0x2200, 0x2021, 0x0100, 0x20e1, 0x9080,
++ 0x20e1, 0x4000, 0x7818, 0xa080, 0x0028, 0x2014, 0xa286, 0x007e,
++ 0x11a0, 0xa385, 0x00ff, 0x20a2, 0x20a3, 0xfffe, 0x20a3, 0x0000,
++ 0x2011, 0xc615, 0x2214, 0x2001, 0xc8e5, 0x2004, 0xa005, 0x0118,
++ 0x2011, 0xc61d, 0x2214, 0x22a2, 0x04d0, 0xa286, 0x007f, 0x1138,
++ 0x00d6, 0xa385, 0x00ff, 0x20a2, 0x20a3, 0xfffd, 0x00c8, 0x2001,
++ 0xc635, 0x2004, 0xd0ac, 0x1110, 0xd2bc, 0x01c8, 0xa286, 0x0080,
++ 0x00d6, 0x1130, 0xa385, 0x00ff, 0x20a2, 0x20a3, 0xfffc, 0x0040,
++ 0xa2e8, 0xc77b, 0x2d6c, 0x6810, 0xa305, 0x20a2, 0x6814, 0x20a2,
++ 0x2069, 0xc61c, 0x2da6, 0x8d68, 0x2da6, 0x00de, 0x0080, 0x00d6,
++ 0xa2e8, 0xc77b, 0x2d6c, 0x6810, 0xa305, 0x20a2, 0x6814, 0x20a2,
++ 0x00de, 0x20a3, 0x0000, 0x2011, 0xc615, 0x2214, 0x22a2, 0xa485,
++ 0x0029, 0x20a2, 0x004e, 0x003e, 0x20a3, 0x0000, 0x080c, 0x8bd1,
++ 0x22a2, 0x20a3, 0x0000, 0x2fa2, 0x20a3, 0xffff, 0x20a3, 0x0000,
++ 0x20a3, 0x0000, 0x002e, 0x0005, 0x0026, 0x20e1, 0x9080, 0x20e1,
++ 0x4000, 0x20a3, 0x02ff, 0x2011, 0xfffc, 0x22a2, 0x00d6, 0x2069,
++ 0xc61c, 0x2da6, 0x8d68, 0x2da6, 0x00de, 0x20a3, 0x2029, 0x20a3,
++ 0x0000, 0x08e0, 0x20a3, 0x0100, 0x20a3, 0x0000, 0x20a3, 0xfc02,
++ 0x20a3, 0x0000, 0x0005, 0x0026, 0x0036, 0x0046, 0x2019, 0x3300,
++ 0x2021, 0x0800, 0x0038, 0x0026, 0x0036, 0x0046, 0x2019, 0x2300,
++ 0x2021, 0x0100, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x7818, 0xa080,
++ 0x0028, 0x2004, 0x2011, 0xc635, 0x2214, 0xd2ac, 0x1118, 0xa092,
++ 0x007e, 0x02d8, 0x00d6, 0xa0e8, 0xc77b, 0x2d6c, 0x6810, 0xa305,
++ 0x20a2, 0x6814, 0x20a2, 0x6810, 0xa005, 0x1140, 0x6814, 0xa005,
++ 0x1128, 0x20a3, 0x00ff, 0x20a3, 0xfffe, 0x0028, 0x2069, 0xc61c,
++ 0x2da6, 0x8d68, 0x2da6, 0x00de, 0x0080, 0x00d6, 0xa0e8, 0xc77b,
++ 0x2d6c, 0x6810, 0xa305, 0x20a2, 0x6814, 0x20a2, 0x00de, 0x20a3,
++ 0x0000, 0x2011, 0xc615, 0x2214, 0x22a2, 0xa485, 0x0098, 0x20a2,
++ 0x20a3, 0x0000, 0x004e, 0x003e, 0x080c, 0x8bd1, 0x22a2, 0x20a3,
++ 0x0000, 0x7a08, 0x22a2, 0x2fa2, 0x20a3, 0x0000, 0x20a3, 0x0000,
++ 0x002e, 0x0005, 0x080c, 0x8bd1, 0x22a2, 0x20a3, 0x0000, 0x7a08,
++ 0x22a2, 0x7810, 0x20a2, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x002e,
++ 0x0005, 0x00c6, 0x00f6, 0x6004, 0xa08a, 0x0085, 0x0a0c, 0x1519,
++ 0xa08a, 0x008c, 0x1a0c, 0x1519, 0x6118, 0x2178, 0x79a0, 0x2011,
++ 0xc635, 0x2214, 0xd2ac, 0x1110, 0xd1bc, 0x0150, 0x7900, 0xd1f4,
++ 0x0120, 0x7914, 0xa18c, 0x00ff, 0x0040, 0x2009, 0x0000, 0x0028,
++ 0xa1f8, 0x2f6e, 0x2f0d, 0xa18c, 0x00ff, 0x2c78, 0x2061, 0x0100,
++ 0x619a, 0xa082, 0x0085, 0x001b, 0x00fe, 0x00ce, 0x0005, 0x84f8,
++ 0x8502, 0x851d, 0x84f6, 0x84f6, 0x84f6, 0x84f8, 0x080c, 0x1519,
++ 0x0146, 0x20a1, 0x020b, 0x04a1, 0x60c3, 0x0000, 0x080c, 0x8be2,
++ 0x014e, 0x0005, 0x0146, 0x20a1, 0x020b, 0x080c, 0x8569, 0x20a3,
++ 0x0000, 0x20a3, 0x0000, 0x7808, 0x20a2, 0x7810, 0x20a2, 0x20a3,
++ 0x0000, 0x20a3, 0xffff, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3,
++ 0x000c, 0x080c, 0x8be2, 0x014e, 0x0005, 0x0146, 0x20a1, 0x020b,
++ 0x080c, 0x85a3, 0x20a3, 0x0003, 0x20a3, 0x0300, 0x20a3, 0x0000,
++ 0x20a3, 0x0000, 0x60c3, 0x0004, 0x080c, 0x8be2, 0x014e, 0x0005,
++ 0x0026, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x7818, 0xa080, 0x0028,
++ 0x2004, 0x2011, 0xc635, 0x2214, 0xd2ac, 0x1118, 0xa092, 0x007e,
++ 0x0288, 0x00d6, 0xa0e8, 0xc77b, 0x2d6c, 0x6810, 0xa085, 0x8100,
++ 0x20a2, 0x6814, 0x20a2, 0x2069, 0xc61c, 0x2da6, 0x8d68, 0x2da6,
++ 0x00de, 0x0088, 0x00d6, 0xa0e8, 0xc77b, 0x2d6c, 0x6810, 0xa085,
++ 0x8100, 0x20a2, 0x6814, 0x20a2, 0x00de, 0x20a3, 0x0000, 0x2011,
++ 0xc615, 0x2214, 0x22a2, 0x20a3, 0x0009, 0x20a3, 0x0000, 0x0804,
++ 0x8426, 0x0026, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x7818, 0xa080,
++ 0x0028, 0x2004, 0x2011, 0xc635, 0x2214, 0xd2ac, 0x1118, 0xa092,
++ 0x007e, 0x0288, 0x00d6, 0xa0e8, 0xc77b, 0x2d6c, 0x6810, 0xa085,
++ 0x8400, 0x20a2, 0x6814, 0x20a2, 0x2069, 0xc61c, 0x2da6, 0x8d68,
++ 0x2da6, 0x00de, 0x0088, 0x00d6, 0xa0e8, 0xc77b, 0x2d6c, 0x6810,
++ 0xa085, 0x8400, 0x20a2, 0x6814, 0x20a2, 0x00de, 0x20a3, 0x0000,
++ 0x2011, 0xc615, 0x2214, 0x22a2, 0x2001, 0x0099, 0x20a2, 0x20a3,
++ 0x0000, 0x0804, 0x84b2, 0x0026, 0x20e1, 0x9080, 0x20e1, 0x4000,
++ 0x7818, 0xa080, 0x0028, 0x2004, 0x2011, 0xc635, 0x2214, 0xd2ac,
++ 0x1118, 0xa092, 0x007e, 0x0288, 0x00d6, 0xa0e8, 0xc77b, 0x2d6c,
++ 0x6810, 0xa085, 0x8500, 0x20a2, 0x6814, 0x20a2, 0x2069, 0xc61c,
++ 0x2da6, 0x8d68, 0x2da6, 0x00de, 0x0088, 0x00d6, 0xa0e8, 0xc77b,
++ 0x2d6c, 0x6810, 0xa085, 0x8500, 0x20a2, 0x6814, 0x20a2, 0x00de,
++ 0x20a3, 0x0000, 0x2011, 0xc615, 0x2214, 0x22a2, 0x2001, 0x0099,
++ 0x20a2, 0x20a3, 0x0000, 0x0804, 0x84b2, 0x00c6, 0x00f6, 0x2c78,
++ 0x7804, 0xa08a, 0x0040, 0x0a0c, 0x1519, 0xa08a, 0x0053, 0x1a0c,
++ 0x1519, 0x7918, 0x2160, 0x61a0, 0x2011, 0xc635, 0x2214, 0xd2ac,
++ 0x1110, 0xd1bc, 0x0150, 0x6100, 0xd1f4, 0x0120, 0x6114, 0xa18c,
++ 0x00ff, 0x0040, 0x2009, 0x0000, 0x0028, 0xa1e0, 0x2f6e, 0x2c0d,
++ 0xa18c, 0x00ff, 0x2061, 0x0100, 0x619a, 0xa082, 0x0040, 0x001b,
++ 0x00fe, 0x00ce, 0x0005, 0x8620, 0x872c, 0x86c9, 0x88de, 0x861e,
++ 0x861e, 0x861e, 0x861e, 0x861e, 0x861e, 0x861e, 0x8f70, 0x8f80,
++ 0x8f90, 0x8fa0, 0x861e, 0x93b7, 0x861e, 0x8f5f, 0x080c, 0x1519,
++ 0x00d6, 0x0156, 0x0146, 0x780b, 0xffff, 0x20a1, 0x020b, 0x080c,
++ 0x8680, 0x7910, 0x2168, 0x6948, 0x7952, 0x21a2, 0xa016, 0x22a2,
++ 0x22a2, 0x22a2, 0x694c, 0xa184, 0x000f, 0x1118, 0x2001, 0x0005,
++ 0x0040, 0xd184, 0x0118, 0x2001, 0x0004, 0x0018, 0xa084, 0x0006,
++ 0x8004, 0x0016, 0x2008, 0x7858, 0xa084, 0x00ff, 0x8007, 0xa105,
++ 0x001e, 0x20a2, 0xd1ac, 0x0118, 0x20a3, 0x0002, 0x0048, 0xd1b4,
++ 0x0118, 0x20a3, 0x0001, 0x0020, 0x20a3, 0x0000, 0x2230, 0x0010,
++ 0x6a80, 0x6e7c, 0x20a9, 0x0008, 0x0136, 0xad88, 0x0017, 0x2198,
++ 0x20a1, 0x021b, 0x53a6, 0x013e, 0x20a1, 0x020b, 0x22a2, 0x26a2,
++ 0x60c3, 0x0020, 0x20e1, 0x9080, 0x6014, 0xa084, 0x0004, 0xa085,
++ 0x0009, 0x6016, 0x2001, 0xc943, 0x2003, 0x07d0, 0x2001, 0xc942,
++ 0x2003, 0x0009, 0x080c, 0x17f1, 0x014e, 0x015e, 0x00de, 0x0005,
++ 0x20e1, 0x9080, 0x20e1, 0x4000, 0x7a18, 0xa280, 0x0023, 0x2014,
++ 0x8210, 0xa294, 0x00ff, 0x2202, 0x8217, 0x7818, 0xa080, 0x0028,
++ 0x2004, 0x2019, 0xc635, 0x231c, 0xd3ac, 0x1110, 0xd0bc, 0x0188,
++ 0x00d6, 0xa0e8, 0xc77b, 0x2d6c, 0x6810, 0xa085, 0x0600, 0x20a2,
++ 0x6814, 0x20a2, 0x2069, 0xc61c, 0x2da6, 0x8d68, 0x2da6, 0x00de,
++ 0x0088, 0x00d6, 0xa0e8, 0xc77b, 0x2d6c, 0x6810, 0xa085, 0x0600,
++ 0x20a2, 0x6814, 0x20a2, 0x00de, 0x20a3, 0x0000, 0x2009, 0xc615,
++ 0x210c, 0x21a2, 0x20a3, 0x0829, 0x20a3, 0x0000, 0x22a2, 0x20a3,
++ 0x0000, 0x2fa2, 0x20a3, 0xffff, 0x20a3, 0x0000, 0x20a3, 0x0000,
++ 0x0005, 0x00d6, 0x0156, 0x0136, 0x0146, 0x20a1, 0x020b, 0x00c1,
++ 0x7810, 0x2068, 0x6860, 0x20a2, 0x685c, 0x20a2, 0x6880, 0x20a2,
++ 0x687c, 0x20a2, 0xa006, 0x20a2, 0x20a2, 0x20a2, 0x20a2, 0x60c3,
++ 0x000c, 0x080c, 0x8be2, 0x014e, 0x013e, 0x015e, 0x00de, 0x0005,
++ 0x0026, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x7818, 0xa080, 0x0028,
++ 0x2004, 0x2011, 0xc635, 0x2214, 0xd2ac, 0x1110, 0xd0bc, 0x0188,
++ 0x00d6, 0xa0e8, 0xc77b, 0x2d6c, 0x6810, 0xa085, 0x0500, 0x20a2,
++ 0x6814, 0x20a2, 0x2069, 0xc61c, 0x2da6, 0x8d68, 0x2da6, 0x00de,
++ 0x0088, 0x00d6, 0xa0e8, 0xc77b, 0x2d6c, 0x6810, 0xa085, 0x0500,
++ 0x20a2, 0x6814, 0x20a2, 0x00de, 0x20a3, 0x0000, 0x2011, 0xc615,
++ 0x2214, 0x22a2, 0x20a3, 0x0889, 0x20a3, 0x0000, 0x080c, 0x8bd1,
++ 0x22a2, 0x20a3, 0x0000, 0x7a08, 0x22a2, 0x2fa2, 0x20a3, 0x0000,
++ 0x20a3, 0x0000, 0x002e, 0x0005, 0x00d6, 0x0156, 0x0136, 0x0146,
++ 0x7810, 0xa0ec, 0xf000, 0x0168, 0xa06d, 0x080c, 0x56bf, 0x0148,
++ 0x684c, 0xa084, 0x2020, 0xa086, 0x2020, 0x1118, 0x7820, 0xc0cd,
++ 0x7822, 0x20a1, 0x020b, 0x080c, 0x8894, 0xa016, 0x22a2, 0x22a2,
++ 0x22a2, 0x22a2, 0x22a2, 0x7810, 0xa084, 0xf000, 0x1130, 0x7810,
++ 0xa084, 0x0700, 0x8007, 0x0043, 0x0010, 0xa006, 0x002b, 0x014e,
++ 0x013e, 0x015e, 0x00de, 0x0005, 0x8766, 0x87fb, 0x880b, 0x883d,
++ 0x8850, 0x886b, 0x8874, 0x8764, 0x080c, 0x1519, 0x0016, 0x0036,
++ 0x694c, 0xa18c, 0x0003, 0x0118, 0xa186, 0x0003, 0x1170, 0x6b78,
++ 0x7820, 0xd0cc, 0x0108, 0xc3e5, 0x23a2, 0x6868, 0x20a2, 0x6864,
++ 0x20a2, 0x003e, 0x001e, 0x0804, 0x8847, 0xa186, 0x0001, 0x190c,
++ 0x1519, 0x6b78, 0x7820, 0xd0cc, 0x0108, 0xc3e5, 0x23a2, 0x6868,
++ 0x20a2, 0x6864, 0x20a2, 0x22a2, 0x6874, 0x20a2, 0x22a2, 0x687c,
++ 0x20a2, 0x2009, 0x0018, 0xa384, 0x0300, 0x0904, 0x87f5, 0xd3c4,
++ 0x0110, 0x687c, 0xa108, 0xd3cc, 0x0110, 0x6874, 0xa108, 0x0156,
++ 0x20a9, 0x000d, 0xad80, 0x0020, 0x201c, 0x831f, 0x23a2, 0x8000,
++ 0x1f04, 0x87a4, 0x015e, 0x22a2, 0x22a2, 0x22a2, 0xa184, 0x0003,
++ 0x0904, 0x87f5, 0x20a1, 0x020b, 0x20e1, 0x9080, 0x20e1, 0x4000,
++ 0x0006, 0x7818, 0xa080, 0x0028, 0x2004, 0x2011, 0xc635, 0x2214,
++ 0xd2ac, 0x1110, 0xd0bc, 0x0188, 0x00d6, 0xa0e8, 0xc77b, 0x2d6c,
++ 0x6810, 0xa085, 0x0700, 0x20a2, 0x6814, 0x20a2, 0x2069, 0xc61c,
++ 0x2da6, 0x8d68, 0x2da6, 0x00de, 0x0088, 0x00d6, 0xa0e8, 0xc77b,
++ 0x2d6c, 0x6810, 0xa085, 0x0700, 0x20a2, 0x6814, 0x20a2, 0x00de,
++ 0x20a3, 0x0000, 0x2011, 0xc615, 0x2214, 0x22a2, 0x000e, 0x7b20,
++ 0xd3cc, 0x0118, 0x20a3, 0x0889, 0x0010, 0x20a3, 0x0898, 0x20a2,
++ 0x080c, 0x8bd1, 0x22a2, 0x20a3, 0x0000, 0x61c2, 0x003e, 0x001e,
++ 0x080c, 0x8be2, 0x0005, 0x2011, 0x0008, 0x2001, 0xc60d, 0x2004,
++ 0xd0f4, 0x0110, 0x2011, 0x0028, 0x7820, 0xd0cc, 0x0108, 0xc2e5,
++ 0x22a2, 0xa016, 0x04d0, 0x2011, 0x0302, 0x0016, 0x0036, 0x7828,
++ 0x792c, 0xa11d, 0x0108, 0xc2dd, 0x7b20, 0xd3cc, 0x0108, 0xc2e5,
++ 0x22a2, 0x20a2, 0x21a2, 0x003e, 0x001e, 0xa016, 0x22a2, 0x20a3,
++ 0x0012, 0x22a2, 0x20a3, 0x0008, 0x22a2, 0x22a2, 0x22a2, 0x22a2,
++ 0x20a3, 0x7000, 0x20a3, 0x0500, 0x22a2, 0x20a3, 0x000a, 0x22a2,
++ 0x22a2, 0x20a3, 0x2500, 0x22a2, 0x22a2, 0x22a2, 0x22a2, 0x22a2,
++ 0x60c3, 0x0032, 0x080c, 0x8be2, 0x0005, 0x2011, 0x0028, 0x7820,
++ 0xd0cc, 0x0108, 0xc2e5, 0x22a2, 0xa016, 0x22a2, 0x22a2, 0x22a2,
++ 0x22a2, 0x22a2, 0x22a2, 0x60c3, 0x0018, 0x080c, 0x8be2, 0x0005,
++ 0x2011, 0x0100, 0x7820, 0xd0cc, 0x0108, 0xc2e5, 0x22a2, 0xa016,
++ 0x22a2, 0x22a2, 0x22a2, 0x22a2, 0x22a2, 0x20a3, 0x0008, 0x22a2,
++ 0x7854, 0xa084, 0x00ff, 0x20a2, 0x22a2, 0x22a2, 0x60c3, 0x0020,
++ 0x080c, 0x8be2, 0x0005, 0x2011, 0x0008, 0x7820, 0xd0cc, 0x0108,
++ 0xc2e5, 0x22a2, 0xa016, 0x0888, 0x0036, 0x7b10, 0xa384, 0xff00,
++ 0x7812, 0xa384, 0x00ff, 0x8001, 0x1138, 0x7820, 0xd0cc, 0x0108,
++ 0xc2e5, 0x22a2, 0x003e, 0x0808, 0x0046, 0x2021, 0x0800, 0x0006,
++ 0x7820, 0xd0cc, 0x000e, 0x0108, 0xc4e5, 0x24a2, 0x004e, 0x22a2,
++ 0x20a2, 0x003e, 0x0804, 0x8847, 0x0026, 0x20e1, 0x9080, 0x20e1,
++ 0x4000, 0x7818, 0xa080, 0x0028, 0x2004, 0x2011, 0xc635, 0x2214,
++ 0xd2ac, 0x1110, 0xd0bc, 0x0188, 0x00d6, 0xa0e8, 0xc77b, 0x2d6c,
++ 0x6810, 0xa085, 0x0700, 0x20a2, 0x6814, 0x20a2, 0x2069, 0xc61c,
++ 0x2da6, 0x8d68, 0x2da6, 0x00de, 0x0088, 0x00d6, 0xa0e8, 0xc77b,
++ 0x2d6c, 0x6810, 0xa085, 0x0700, 0x20a2, 0x6814, 0x20a2, 0x00de,
++ 0x20a3, 0x0000, 0x2011, 0xc615, 0x2214, 0x22a2, 0x7820, 0xd0cc,
++ 0x0118, 0x20a3, 0x0889, 0x0010, 0x20a3, 0x0898, 0x20a3, 0x0000,
++ 0x080c, 0x8bd1, 0x22a2, 0x20a3, 0x0000, 0x7a08, 0x22a2, 0x2fa2,
++ 0x20a3, 0x0000, 0x20a3, 0x0000, 0x002e, 0x0005, 0x00d6, 0x0156,
++ 0x0136, 0x0146, 0x0016, 0x0036, 0x7810, 0xa084, 0x0700, 0x8007,
++ 0x003b, 0x003e, 0x001e, 0x014e, 0x013e, 0x015e, 0x00de, 0x0005,
++ 0x88f8, 0x88f8, 0x88fa, 0x88f8, 0x88f8, 0x88f8, 0x891c, 0x88f8,
++ 0x080c, 0x1519, 0x7910, 0xa18c, 0xf8ff, 0xa18d, 0x0600, 0x7912,
++ 0x20a1, 0x020b, 0x2009, 0x0003, 0x00f9, 0x00d6, 0x2069, 0xc652,
++ 0x6804, 0xd0bc, 0x0130, 0x682c, 0xa084, 0x00ff, 0x8007, 0x20a2,
++ 0x0010, 0x20a3, 0x3f00, 0x00de, 0x22a2, 0x22a2, 0x22a2, 0x60c3,
++ 0x0001, 0x080c, 0x8be2, 0x0005, 0x20a1, 0x020b, 0x2009, 0x0003,
++ 0x0019, 0x20a3, 0x7f00, 0x0c80, 0x0026, 0x20e1, 0x9080, 0x20e1,
++ 0x4000, 0x7818, 0xa080, 0x0028, 0x2004, 0x2011, 0xc635, 0x2214,
++ 0xd2ac, 0x1110, 0xd0bc, 0x0188, 0x00d6, 0xa0e8, 0xc77b, 0x2d6c,
++ 0x6810, 0xa085, 0x0100, 0x20a2, 0x6814, 0x20a2, 0x2069, 0xc61c,
++ 0x2da6, 0x8d68, 0x2da6, 0x00de, 0x0088, 0x00d6, 0xa0e8, 0xc77b,
++ 0x2d6c, 0x6810, 0xa085, 0x0100, 0x20a2, 0x6814, 0x20a2, 0x00de,
++ 0x20a3, 0x0000, 0x2011, 0xc615, 0x2214, 0x22a2, 0x20a3, 0x0888,
++ 0xa18d, 0x0008, 0x21a2, 0x080c, 0x8bd1, 0x22a2, 0x20a3, 0x0000,
++ 0x7a08, 0x22a2, 0x2fa2, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x002e,
++ 0x0005, 0x00e6, 0x00d6, 0x00c6, 0x0066, 0x0056, 0x0046, 0x0036,
++ 0x2061, 0x0100, 0x2071, 0xc600, 0x2009, 0xc615, 0x210c, 0x7818,
++ 0x2068, 0x2031, 0xc635, 0x2634, 0xa6b4, 0x0028, 0x0110, 0x7370,
++ 0x7474, 0x2500, 0x2031, 0xc635, 0x2634, 0xa6b4, 0x0028, 0x0140,
++ 0x2001, 0x04ff, 0x6062, 0x6067, 0xffff, 0x636a, 0x646e, 0x0050,
++ 0x2001, 0x00ff, 0xa085, 0x0400, 0x6062, 0x6067, 0xffff, 0x606b,
++ 0x0000, 0x616e, 0x68b8, 0x6073, 0x0530, 0x6077, 0x0008, 0x688c,
++ 0x8000, 0xa084, 0x00ff, 0x688e, 0x8007, 0xa085, 0x0020, 0x607a,
++ 0x68b4, 0x607f, 0x0000, 0x2d00, 0x6082, 0x6087, 0xffff, 0x7810,
++ 0x2070, 0x7014, 0x608a, 0x7010, 0x608e, 0x700c, 0x60c6, 0x7008,
++ 0x60ca, 0x686c, 0x60ce, 0x60ab, 0x0036, 0x60af, 0x95d5, 0x60d7,
++ 0x0000, 0x2001, 0xc635, 0x2004, 0xa084, 0x0028, 0x0128, 0x609f,
++ 0x0000, 0x2001, 0x0092, 0x0048, 0x6028, 0xc0bd, 0x602a, 0x609f,
++ 0x00ff, 0x6027, 0xffff, 0x2001, 0x00b2, 0x6016, 0x2009, 0x07d0,
++ 0x080c, 0x7029, 0x003e, 0x004e, 0x005e, 0x006e, 0x00ce, 0x00de,
++ 0x00ee, 0x0005, 0x00e6, 0x00d6, 0x00c6, 0x0066, 0x0056, 0x0046,
++ 0x0036, 0x2061, 0x0100, 0x2071, 0xc600, 0x2009, 0xc615, 0x210c,
++ 0x7818, 0x2068, 0x68a0, 0x2028, 0x2031, 0xc635, 0x2634, 0xd6ac,
++ 0x1160, 0xa582, 0x007e, 0x1248, 0x2500, 0xd0bc, 0x1130, 0xa080,
++ 0x2f6e, 0x2015, 0xa294, 0x00ff, 0x0020, 0x6910, 0x6a14, 0x7370,
++ 0x7474, 0x2001, 0xc635, 0x2004, 0xd0ac, 0x1128, 0xa582, 0x007e,
++ 0x1210, 0xd5bc, 0x0138, 0xa185, 0x0400, 0x6062, 0x6266, 0x636a,
++ 0x646e, 0x0030, 0x6063, 0x0400, 0x6266, 0x606b, 0x0000, 0x616e,
++ 0x68b8, 0x6072, 0x6077, 0x0000, 0x6864, 0xd0a4, 0x0110, 0x6077,
++ 0x0008, 0x688c, 0x8000, 0xa084, 0x00ff, 0x688e, 0x8007, 0xa085,
++ 0x0020, 0x607a, 0x68b4, 0x607f, 0x0000, 0x2d00, 0x6082, 0x6087,
++ 0xffff, 0x7810, 0x2070, 0x7014, 0x608a, 0x7010, 0x608e, 0x700c,
++ 0x60c6, 0x7008, 0x60ca, 0x686c, 0x60ce, 0x60ab, 0x0036, 0x60af,
++ 0x95d5, 0x60d7, 0x0000, 0xa582, 0x007e, 0x0210, 0x2011, 0x0000,
++ 0x629e, 0x00f6, 0x2079, 0x0140, 0x7803, 0x0000, 0x00fe, 0x2009,
++ 0x0092, 0x6116, 0x2009, 0x07d0, 0x080c, 0x7029, 0x003e, 0x004e,
++ 0x005e, 0x006e, 0x00ce, 0x00de, 0x00ee, 0x0005, 0x00e6, 0x00d6,
++ 0x00c6, 0x0056, 0x0046, 0x0036, 0x2061, 0x0100, 0x2071, 0xc600,
++ 0x7154, 0x7818, 0x2068, 0x68a0, 0x2028, 0x76d4, 0xd6ac, 0x1130,
++ 0xd0bc, 0x1120, 0x6910, 0x6a14, 0x7454, 0x0020, 0x6910, 0x6a14,
++ 0x7370, 0x7474, 0x781c, 0xa0be, 0x0006, 0x0904, 0x8b1c, 0xa0be,
++ 0x000a, 0x15e8, 0xa185, 0x0200, 0x6062, 0x6266, 0x636a, 0x646e,
++ 0x6073, 0x2029, 0x6077, 0x0000, 0x688c, 0x8000, 0xa084, 0x00ff,
++ 0x688e, 0x8007, 0x607a, 0x607f, 0x0000, 0x2f00, 0x6082, 0x7808,
++ 0x6086, 0x7810, 0x2070, 0x7014, 0x608a, 0x7010, 0x608e, 0x700c,
++ 0x60c6, 0x7008, 0x60ca, 0x686c, 0x60ce, 0x60af, 0x95d5, 0x60d7,
++ 0x0000, 0x609f, 0x0000, 0x080c, 0x9452, 0x2009, 0x07d0, 0x60c4,
++ 0xa084, 0xfff0, 0xa005, 0x0110, 0x2009, 0x1b58, 0x080c, 0x7029,
++ 0x003e, 0x004e, 0x005e, 0x00ce, 0x00de, 0x00ee, 0x0005, 0x70d4,
++ 0xd0ac, 0x1110, 0xd5bc, 0x0138, 0xa185, 0x0100, 0x6062, 0x6266,
++ 0x636a, 0x646e, 0x0038, 0xa185, 0x0100, 0x6062, 0x6266, 0x606b,
++ 0x0000, 0x646e, 0x6073, 0x0809, 0x6077, 0x0008, 0x688c, 0x8000,
++ 0xa084, 0x00ff, 0x688e, 0x8007, 0x607a, 0x607f, 0x0000, 0x2f00,
++ 0x6082, 0x7808, 0x6086, 0x7810, 0x2070, 0x7014, 0x608a, 0x7010,
++ 0x608e, 0x700c, 0x60c6, 0x7008, 0x60ca, 0x686c, 0x60ce, 0x60af,
++ 0x95d5, 0x60d7, 0x0000, 0xa582, 0x0080, 0x0248, 0x6a00, 0xd2f4,
++ 0x0120, 0x6a14, 0xa294, 0x00ff, 0x0010, 0x2011, 0x0000, 0x629e,
++ 0x080c, 0x9452, 0x2009, 0x07d0, 0x60c4, 0xa084, 0xfff0, 0xa005,
++ 0x0110, 0x2009, 0x1b58, 0x080c, 0x7029, 0x003e, 0x004e, 0x005e,
++ 0x00ce, 0x00de, 0x00ee, 0x0005, 0x7810, 0x2070, 0x704c, 0xa084,
++ 0x0003, 0xa086, 0x0002, 0x0904, 0x8b72, 0x2001, 0xc635, 0x2004,
++ 0xd0ac, 0x1110, 0xd5bc, 0x0138, 0xa185, 0x0100, 0x6062, 0x6266,
++ 0x636a, 0x646e, 0x0038, 0xa185, 0x0100, 0x6062, 0x6266, 0x606b,
++ 0x0000, 0x646e, 0x6073, 0x0880, 0x6077, 0x0008, 0x688c, 0x8000,
++ 0xa084, 0x00ff, 0x688e, 0x8007, 0x607a, 0x7834, 0x607e, 0x2f00,
++ 0x6086, 0x7808, 0x6082, 0x7060, 0x608a, 0x705c, 0x608e, 0x7080,
++ 0x60c6, 0x707c, 0x60ca, 0x707c, 0x792c, 0xa108, 0x792e, 0x7080,
++ 0x7928, 0xa109, 0x792a, 0x686c, 0x60ce, 0x60af, 0x95d5, 0x60d7,
++ 0x0000, 0xa582, 0x0080, 0x0248, 0x6a00, 0xd2f4, 0x0120, 0x6a14,
++ 0xa294, 0x00ff, 0x0010, 0x2011, 0x0000, 0x629e, 0x080c, 0x944f,
++ 0x0804, 0x8b0a, 0x2001, 0xc635, 0x2004, 0xd0ac, 0x1110, 0xd5bc,
++ 0x0138, 0xa185, 0x0700, 0x6062, 0x6266, 0x636a, 0x646e, 0x0038,
++ 0xa185, 0x0700, 0x6062, 0x6266, 0x606b, 0x0000, 0x646e, 0x080c,
++ 0x56bf, 0x0180, 0x00d6, 0x7810, 0xa06d, 0x684c, 0x00de, 0xa084,
++ 0x2020, 0xa086, 0x2020, 0x1130, 0x7820, 0xc0cd, 0x7822, 0x6073,
++ 0x0889, 0x0010, 0x6073, 0x0898, 0x6077, 0x0000, 0x688c, 0x8000,
++ 0xa084, 0x00ff, 0x688e, 0x8007, 0x607a, 0x607f, 0x0000, 0x2f00,
++ 0x6086, 0x7808, 0x6082, 0x7014, 0x608a, 0x7010, 0x608e, 0x700c,
++ 0x60c6, 0x7008, 0x60ca, 0x686c, 0x60ce, 0x60af, 0x95d5, 0x60d7,
++ 0x0000, 0xa582, 0x0080, 0x0248, 0x6a00, 0xd2f4, 0x0120, 0x6a14,
++ 0xa294, 0x00ff, 0x0010, 0x2011, 0x0000, 0x629e, 0x7820, 0xd0cc,
++ 0x0120, 0x080c, 0x9452, 0x0804, 0x8b0a, 0x080c, 0x944f, 0x0804,
++ 0x8b0a, 0x7a18, 0xa280, 0x0023, 0x2014, 0x8210, 0xa294, 0x00ff,
++ 0x2202, 0x8217, 0x0005, 0x00d6, 0x2069, 0xc927, 0x6843, 0x0001,
++ 0x00de, 0x0005, 0x20e1, 0x9080, 0x60a3, 0x0056, 0x60a7, 0x9575,
++ 0x0019, 0x080c, 0x701b, 0x0005, 0x0006, 0x6014, 0xa084, 0x0004,
++ 0xa085, 0x0009, 0x6016, 0x000e, 0x0005, 0x0016, 0x00c6, 0x0006,
++ 0x2061, 0x0100, 0x61a4, 0x60a7, 0x95f5, 0x6014, 0xa084, 0x0004,
++ 0xa085, 0x0008, 0x6016, 0x000e, 0xe000, 0xe000, 0xe000, 0xe000,
++ 0x61a6, 0x00ce, 0x001e, 0x0005, 0x00c6, 0x00d6, 0x0016, 0x0026,
++ 0x2061, 0x0100, 0x2069, 0x0140, 0x080c, 0x5f22, 0x1198, 0x2001,
++ 0xc943, 0x2004, 0xa005, 0x15b8, 0x0066, 0x2031, 0x0001, 0x080c,
++ 0x5fa4, 0x006e, 0x1118, 0x080c, 0x701b, 0x0468, 0x00c6, 0x2061,
++ 0xc927, 0x00d8, 0x6904, 0xa194, 0x4000, 0x0550, 0x0831, 0x6803,
++ 0x1000, 0x6803, 0x0000, 0x00c6, 0x2061, 0xc927, 0x6128, 0xa192,
++ 0x00c8, 0x1258, 0x8108, 0x612a, 0x6124, 0x00ce, 0x81ff, 0x0198,
++ 0x080c, 0x701b, 0x080c, 0x8bec, 0x0070, 0x6124, 0xa1e5, 0x0000,
++ 0x0140, 0x080c, 0xc59b, 0x080c, 0x7024, 0x2009, 0x0014, 0x080c,
++ 0x9613, 0x00ce, 0x0000, 0x002e, 0x001e, 0x00de, 0x00ce, 0x0005,
++ 0x2001, 0xc943, 0x2004, 0xa005, 0x1db0, 0x00c6, 0x2061, 0xc927,
++ 0x6128, 0xa192, 0x0003, 0x1e08, 0x8108, 0x612a, 0x00ce, 0x080c,
++ 0x701b, 0x080c, 0x4e5b, 0x0c38, 0x00c6, 0x00d6, 0x00e6, 0x0016,
++ 0x0026, 0x080c, 0x7031, 0x2071, 0xc927, 0x713c, 0x81ff, 0x0904,
++ 0x8cc1, 0x2061, 0x0100, 0x2069, 0x0140, 0x080c, 0x5f22, 0x1500,
++ 0x0036, 0x2019, 0x0002, 0x080c, 0x8e79, 0x003e, 0x713c, 0x2160,
++ 0x080c, 0xc59b, 0x2009, 0x004a, 0x621c, 0xa296, 0x0009, 0x1138,
++ 0x6110, 0xa188, 0x0012, 0x200b, 0x0006, 0x2009, 0x0104, 0x080c,
++ 0x9613, 0x0066, 0x2031, 0x0001, 0x080c, 0x5fa4, 0x006e, 0x0408,
++ 0x6904, 0xa194, 0x4000, 0x0518, 0x6803, 0x1000, 0x6803, 0x0000,
++ 0x0036, 0x2019, 0x0001, 0x080c, 0x8e79, 0x003e, 0x713c, 0x2160,
++ 0x080c, 0xc59b, 0x2009, 0x004a, 0x621c, 0xa296, 0x0009, 0x1138,
++ 0x6110, 0xa188, 0x0012, 0x200b, 0x0006, 0x2009, 0x0104, 0x080c,
++ 0x9613, 0x002e, 0x001e, 0x00ee, 0x00de, 0x00ce, 0x0005, 0x0c00,
++ 0x0026, 0x00e6, 0x2071, 0xc927, 0x7048, 0xd084, 0x01d8, 0x713c,
++ 0x81ff, 0x01c0, 0x2071, 0x0100, 0xa188, 0x0007, 0x2114, 0xa28e,
++ 0x0006, 0x1138, 0x7014, 0xa084, 0x0184, 0xa085, 0x0012, 0x7016,
++ 0x0048, 0xa28e, 0x0009, 0x0db0, 0x7014, 0xa084, 0x0184, 0xa085,
++ 0x0016, 0x7016, 0x00ee, 0x002e, 0x0005, 0x00e6, 0x00d6, 0x00c6,
++ 0x0066, 0x0056, 0x0046, 0x0006, 0x0126, 0x2091, 0x8000, 0x6018,
++ 0x2068, 0x6ca0, 0x2071, 0xc927, 0x7018, 0x2068, 0x8dff, 0x0188,
++ 0x68a0, 0xa406, 0x0118, 0x6854, 0x2068, 0x0cc0, 0x6010, 0x2060,
++ 0x643c, 0x6540, 0x6648, 0x2d60, 0x080c, 0x54ae, 0x0110, 0xa085,
++ 0x0001, 0x012e, 0x000e, 0x004e, 0x005e, 0x006e, 0x00ce, 0x00de,
++ 0x00ee, 0x0005, 0x20a1, 0x020b, 0x080c, 0x83bf, 0x20a3, 0x1200,
++ 0x20a3, 0x0000, 0x20a3, 0x0000, 0x781c, 0xa086, 0x0004, 0x1110,
++ 0x6098, 0x0018, 0x2001, 0xc615, 0x2004, 0x20a2, 0x7834, 0x20a2,
++ 0x7838, 0x20a2, 0x20a9, 0x0010, 0xa006, 0x20a2, 0x1f04, 0x8d35,
++ 0x20a2, 0x20a2, 0x60c3, 0x002c, 0x080c, 0x8be2, 0x0005, 0x0156,
++ 0x0146, 0x20a1, 0x020b, 0x080c, 0x83bf, 0x20a3, 0x0f00, 0x20a3,
++ 0x0000, 0x20a3, 0x0000, 0x7808, 0x20a2, 0x60c3, 0x0008, 0x080c,
++ 0x8be2, 0x014e, 0x015e, 0x0005, 0x0156, 0x0146, 0x20a1, 0x020b,
++ 0x080c, 0x845b, 0x20a3, 0x0200, 0x20a3, 0x0000, 0x20a9, 0x0006,
++ 0x2011, 0xc640, 0x2019, 0xc641, 0x23a6, 0x22a6, 0xa398, 0x0002,
++ 0xa290, 0x0002, 0x1f04, 0x8d64, 0x20a3, 0x0000, 0x20a3, 0x0000,
++ 0x60c3, 0x001c, 0x080c, 0x8be2, 0x014e, 0x015e, 0x0005, 0x0156,
++ 0x0146, 0x0016, 0x0026, 0x20a1, 0x020b, 0x080c, 0x8434, 0x080c,
++ 0x844a, 0x7810, 0xa080, 0x0000, 0x2004, 0xa080, 0x0015, 0x2098,
++ 0x7808, 0xa088, 0x0002, 0x21a8, 0x53a6, 0xa080, 0x0004, 0x8003,
++ 0x60c2, 0x080c, 0x8be2, 0x002e, 0x001e, 0x014e, 0x015e, 0x0005,
++ 0x0156, 0x0146, 0x20a1, 0x020b, 0x080c, 0x83bf, 0x20a3, 0x6200,
++ 0x20a3, 0x0000, 0x20a3, 0x0000, 0x7808, 0x20a2, 0x60c3, 0x0008,
++ 0x080c, 0x8be2, 0x014e, 0x015e, 0x0005, 0x0156, 0x0146, 0x0016,
++ 0x0026, 0x20a1, 0x020b, 0x080c, 0x83bf, 0x7810, 0xa080, 0x0000,
++ 0x2004, 0xa080, 0x0017, 0x2098, 0x7808, 0xa088, 0x0002, 0x21a8,
++ 0x53a6, 0x8003, 0x60c2, 0x080c, 0x8be2, 0x002e, 0x001e, 0x014e,
++ 0x015e, 0x0005, 0x00e6, 0x00c6, 0x0006, 0x0126, 0x2091, 0x8000,
++ 0x2071, 0xc927, 0x700c, 0x2060, 0x8cff, 0x0178, 0x080c, 0xae8f,
++ 0x1110, 0x080c, 0x9c09, 0x600c, 0x0006, 0x080c, 0xb056, 0x080c,
++ 0x95e3, 0x080c, 0x8fb7, 0x00ce, 0x0c78, 0x700f, 0x0000, 0x700b,
++ 0x0000, 0x012e, 0x000e, 0x00ce, 0x00ee, 0x0005, 0x0126, 0x0156,
++ 0x00f6, 0x00e6, 0x00d6, 0x00c6, 0x0026, 0x0016, 0x0006, 0x2091,
++ 0x8000, 0x2069, 0x0100, 0x2079, 0x0140, 0x2071, 0xc927, 0x7024,
++ 0x2060, 0x8cff, 0x05a0, 0x080c, 0x8bf5, 0x68c3, 0x0000, 0x080c,
++ 0x7024, 0x2009, 0x0013, 0x080c, 0x9613, 0x20a9, 0x01f4, 0x6824,
++ 0xd094, 0x0158, 0x6827, 0x0004, 0x7804, 0xa084, 0x4000, 0x01a0,
++ 0x7803, 0x1000, 0x7803, 0x0000, 0x0078, 0xd084, 0x0118, 0x6827,
++ 0x0001, 0x0010, 0x1f04, 0x8e0f, 0x7804, 0xa084, 0x1000, 0x0120,
++ 0x7803, 0x0100, 0x7803, 0x0000, 0x6824, 0x000e, 0x001e, 0x002e,
++ 0x00ce, 0x00de, 0x00ee, 0x00fe, 0x015e, 0x012e, 0x0005, 0x2001,
++ 0xc600, 0x2004, 0xa096, 0x0001, 0x0590, 0xa096, 0x0004, 0x0578,
++ 0x080c, 0x7024, 0x6814, 0xa084, 0x0001, 0x0110, 0x68a7, 0x95f5,
++ 0x6817, 0x0008, 0x68c3, 0x0000, 0x2011, 0x4e18, 0x080c, 0x6fad,
++ 0x20a9, 0x01f4, 0x6824, 0xd094, 0x0158, 0x6827, 0x0004, 0x7804,
++ 0xa084, 0x4000, 0x01a0, 0x7803, 0x1000, 0x7803, 0x0000, 0x0078,
++ 0xd084, 0x0118, 0x6827, 0x0001, 0x0010, 0x1f04, 0x8e52, 0x7804,
++ 0xa084, 0x1000, 0x0120, 0x7803, 0x0100, 0x7803, 0x0000, 0x000e,
++ 0x001e, 0x002e, 0x00ce, 0x00de, 0x00ee, 0x00fe, 0x015e, 0x012e,
++ 0x0005, 0x0126, 0x0156, 0x00f6, 0x00e6, 0x00d6, 0x00c6, 0x0026,
++ 0x0016, 0x0006, 0x2091, 0x8000, 0x2069, 0x0100, 0x2079, 0x0140,
++ 0x2071, 0xc927, 0x703c, 0x2060, 0x8cff, 0x0904, 0x8f04, 0xa386,
++ 0x0002, 0x1128, 0x6814, 0xa084, 0x0002, 0x0904, 0x8f04, 0x68af,
++ 0x95f5, 0x6817, 0x0010, 0x2009, 0x00fa, 0x8109, 0x1df0, 0x68c7,
++ 0x0000, 0x68cb, 0x0008, 0x080c, 0x7031, 0x080c, 0x22ee, 0x0046,
++ 0x2009, 0x017f, 0x200b, 0x00a5, 0x2021, 0x0169, 0x2404, 0xa084,
++ 0x000f, 0xa086, 0x0004, 0x1500, 0x68af, 0x95f5, 0x68c7, 0x0000,
++ 0x68cb, 0x0008, 0x00e6, 0x00f6, 0x2079, 0x0020, 0x2071, 0xc992,
++ 0x6814, 0xa084, 0x0184, 0xa085, 0x0012, 0x6816, 0x7803, 0x0008,
++ 0x7003, 0x0000, 0x00fe, 0x00ee, 0xa386, 0x0002, 0x1128, 0x7884,
++ 0xa005, 0x1110, 0x7887, 0x0001, 0x2001, 0xc8f8, 0x2004, 0x200a,
++ 0x004e, 0xa39d, 0x0000, 0x1140, 0x2009, 0x0049, 0x601c, 0xa086,
++ 0x0009, 0x0110, 0x080c, 0x9613, 0x20a9, 0x03e8, 0x6824, 0xd094,
++ 0x0158, 0x6827, 0x0004, 0x7804, 0xa084, 0x4000, 0x01a0, 0x7803,
++ 0x1000, 0x7803, 0x0000, 0x0078, 0xd08c, 0x0118, 0x6827, 0x0002,
++ 0x0010, 0x1f04, 0x8ee6, 0x7804, 0xa084, 0x1000, 0x0120, 0x7803,
++ 0x0100, 0x7803, 0x0000, 0x6824, 0x000e, 0x001e, 0x002e, 0x00ce,
++ 0x00de, 0x00ee, 0x00fe, 0x015e, 0x012e, 0x0005, 0x00d6, 0x0126,
++ 0x2091, 0x8000, 0x2069, 0xc927, 0x6a06, 0x012e, 0x00de, 0x0005,
++ 0x00d6, 0x0126, 0x2091, 0x8000, 0x2069, 0xc927, 0x6a32, 0x012e,
++ 0x00de, 0x0005, 0x00f6, 0x00e6, 0x00c6, 0x0066, 0x0006, 0x0126,
++ 0x2071, 0xc927, 0x7614, 0x2660, 0x2678, 0x2091, 0x8000, 0x8cff,
++ 0x0538, 0x601c, 0xa206, 0x1500, 0x7014, 0xac36, 0x1110, 0x660c,
++ 0x7616, 0x7010, 0xac36, 0x1140, 0x2c00, 0xaf36, 0x0118, 0x2f00,
++ 0x7012, 0x0010, 0x7013, 0x0000, 0x660c, 0x0066, 0x2c00, 0xaf06,
++ 0x0110, 0x7e0e, 0x0008, 0x2678, 0x600f, 0x0000, 0x080c, 0xae54,
++ 0x080c, 0x8fb7, 0x00ce, 0x08d8, 0x2c78, 0x600c, 0x2060, 0x08b8,
++ 0x012e, 0x000e, 0x006e, 0x00ce, 0x00ee, 0x00fe, 0x0005, 0x0156,
++ 0x0146, 0x20a1, 0x020b, 0x080c, 0x8680, 0x7810, 0x20a2, 0xa006,
++ 0x20a2, 0x20a2, 0x20a2, 0x20a2, 0x20a3, 0x1000, 0x0804, 0x8faf,
++ 0x0156, 0x0146, 0x20a1, 0x020b, 0x080c, 0x8680, 0x7810, 0x20a2,
++ 0xa006, 0x20a2, 0x20a2, 0x20a2, 0x20a2, 0x20a3, 0x4000, 0x0478,
++ 0x0156, 0x0146, 0x20a1, 0x020b, 0x080c, 0x8680, 0x7810, 0x20a2,
++ 0xa006, 0x20a2, 0x20a2, 0x20a2, 0x20a2, 0x20a3, 0x2000, 0x00f8,
++ 0x0156, 0x0146, 0x20a1, 0x020b, 0x080c, 0x8680, 0x7810, 0x20a2,
++ 0xa006, 0x20a2, 0x20a2, 0x20a2, 0x20a2, 0x20a3, 0x0400, 0x0078,
++ 0x0156, 0x0146, 0x20a1, 0x020b, 0x080c, 0x8680, 0x7810, 0x20a2,
++ 0xa006, 0x20a2, 0x20a2, 0x20a2, 0x20a2, 0x20a3, 0x0200, 0x0089,
++ 0x60c3, 0x0020, 0x080c, 0x8be2, 0x014e, 0x015e, 0x0005, 0x00e6,
++ 0x2071, 0xc927, 0x7020, 0xa005, 0x0110, 0x8001, 0x7022, 0x00ee,
++ 0x0005, 0x20a9, 0x0008, 0x20a2, 0x1f04, 0x8fc3, 0x20a2, 0x20a2,
++ 0x0005, 0x00f6, 0x00e6, 0x00d6, 0x00c6, 0x0076, 0x0066, 0x0006,
++ 0x0126, 0x2091, 0x8000, 0x2071, 0xc927, 0x7614, 0x2660, 0x2678,
++ 0x2039, 0x0001, 0x87ff, 0x0904, 0x905f, 0x8cff, 0x0904, 0x905f,
++ 0x601c, 0xa086, 0x0006, 0x1904, 0x905a, 0x88ff, 0x0138, 0x2800,
++ 0xac06, 0x1904, 0x905a, 0x2039, 0x0000, 0x0050, 0x6018, 0xa206,
++ 0x1904, 0x905a, 0x85ff, 0x0120, 0x6050, 0xa106, 0x1904, 0x905a,
++ 0x7024, 0xac06, 0x1598, 0x2069, 0x0100, 0x68c0, 0xa005, 0x1160,
++ 0x6824, 0xd084, 0x0148, 0x6827, 0x0001, 0x080c, 0x7024, 0x080c,
++ 0x90e6, 0x7027, 0x0000, 0x0410, 0x080c, 0x7024, 0x6820, 0xd0b4,
++ 0x0110, 0x68a7, 0x95f5, 0x6817, 0x0008, 0x68c3, 0x0000, 0x080c,
++ 0x90e6, 0x7027, 0x0000, 0x0036, 0x2069, 0x0140, 0x6b04, 0xa384,
++ 0x1000, 0x0120, 0x6803, 0x0100, 0x6803, 0x0000, 0x2069, 0x0100,
++ 0x6824, 0xd084, 0x0110, 0x6827, 0x0001, 0x003e, 0x7014, 0xac36,
++ 0x1110, 0x660c, 0x7616, 0x7010, 0xac36, 0x1140, 0x2c00, 0xaf36,
++ 0x0118, 0x2f00, 0x7012, 0x0010, 0x7013, 0x0000, 0x660c, 0x0066,
++ 0x2c00, 0xaf06, 0x0110, 0x7e0e, 0x0008, 0x2678, 0x89ff, 0x1158,
++ 0x600f, 0x0000, 0x6010, 0x2068, 0x080c, 0xac91, 0x0110, 0x080c,
++ 0xc141, 0x080c, 0xae54, 0x080c, 0x8fb7, 0x88ff, 0x1190, 0x00ce,
++ 0x0804, 0x8fda, 0x2c78, 0x600c, 0x2060, 0x0804, 0x8fda, 0xa006,
++ 0x012e, 0x000e, 0x006e, 0x007e, 0x00ce, 0x00de, 0x00ee, 0x00fe,
++ 0x0005, 0x6017, 0x0000, 0x00ce, 0xa8c5, 0x0001, 0x0c88, 0x00f6,
++ 0x00e6, 0x00d6, 0x00c6, 0x0066, 0x0026, 0x0006, 0x0126, 0x2091,
++ 0x8000, 0x2071, 0xc927, 0x7638, 0x2660, 0x2678, 0x8cff, 0x0904,
++ 0x90d6, 0x601c, 0xa086, 0x0006, 0x1904, 0x90d1, 0x87ff, 0x0128,
++ 0x2700, 0xac06, 0x1904, 0x90d1, 0x0048, 0x6018, 0xa206, 0x1904,
++ 0x90d1, 0x85ff, 0x0118, 0x6050, 0xa106, 0x15d8, 0x703c, 0xac06,
++ 0x1180, 0x0036, 0x2019, 0x0001, 0x080c, 0x8e79, 0x7033, 0x0000,
++ 0x703f, 0x0000, 0x7043, 0x0000, 0x7047, 0x0000, 0x704b, 0x0000,
++ 0x003e, 0x7038, 0xac36, 0x1110, 0x660c, 0x763a, 0x7034, 0xac36,
++ 0x1140, 0x2c00, 0xaf36, 0x0118, 0x2f00, 0x7036, 0x0010, 0x7037,
++ 0x0000, 0x660c, 0x0066, 0x2c00, 0xaf06, 0x0110, 0x7e0e, 0x0008,
++ 0x2678, 0x600f, 0x0000, 0x6010, 0x2068, 0x080c, 0xac91, 0x0110,
++ 0x080c, 0xc141, 0x080c, 0xae54, 0x87ff, 0x1190, 0x00ce, 0x0804,
++ 0x907e, 0x2c78, 0x600c, 0x2060, 0x0804, 0x907e, 0xa006, 0x012e,
++ 0x000e, 0x002e, 0x006e, 0x00ce, 0x00de, 0x00ee, 0x00fe, 0x0005,
++ 0x6017, 0x0000, 0x00ce, 0xa7bd, 0x0001, 0x0c88, 0x00e6, 0x2071,
++ 0xc927, 0x2001, 0xc600, 0x2004, 0xa086, 0x0002, 0x1118, 0x7007,
++ 0x0005, 0x0010, 0x7007, 0x0000, 0x00ee, 0x0005, 0x00f6, 0x00e6,
++ 0x00c6, 0x0066, 0x0026, 0x0006, 0x0126, 0x2091, 0x8000, 0x2071,
++ 0xc927, 0x2c10, 0x7638, 0x2660, 0x2678, 0x8cff, 0x0518, 0x2200,
++ 0xac06, 0x11e0, 0x7038, 0xac36, 0x1110, 0x660c, 0x763a, 0x7034,
++ 0xac36, 0x1140, 0x2c00, 0xaf36, 0x0118, 0x2f00, 0x7036, 0x0010,
++ 0x7037, 0x0000, 0x660c, 0x2c00, 0xaf06, 0x0110, 0x7e0e, 0x0008,
++ 0x2678, 0x600f, 0x0000, 0xa085, 0x0001, 0x0020, 0x2c78, 0x600c,
++ 0x2060, 0x08d8, 0x012e, 0x000e, 0x002e, 0x006e, 0x00ce, 0x00ee,
++ 0x00fe, 0x0005, 0x00f6, 0x00e6, 0x00d6, 0x00c6, 0x0066, 0x0006,
++ 0x0126, 0x2091, 0x8000, 0x2071, 0xc927, 0x760c, 0x2660, 0x2678,
++ 0x8cff, 0x0904, 0x91bc, 0x6018, 0xa080, 0x0028, 0x2004, 0xa206,
++ 0x1904, 0x91b7, 0x7024, 0xac06, 0x1508, 0x2069, 0x0100, 0x68c0,
++ 0xa005, 0x0904, 0x9193, 0x080c, 0x8bf5, 0x68c3, 0x0000, 0x080c,
++ 0x90e6, 0x7027, 0x0000, 0x0036, 0x2069, 0x0140, 0x6b04, 0xa384,
++ 0x1000, 0x0120, 0x6803, 0x0100, 0x6803, 0x0000, 0x2069, 0x0100,
++ 0x6824, 0xd084, 0x0110, 0x6827, 0x0001, 0x003e, 0x700c, 0xac36,
++ 0x1110, 0x660c, 0x760e, 0x7008, 0xac36, 0x1140, 0x2c00, 0xaf36,
++ 0x0118, 0x2f00, 0x700a, 0x0010, 0x700b, 0x0000, 0x660c, 0x0066,
++ 0x2c00, 0xaf06, 0x0110, 0x7e0e, 0x0008, 0x2678, 0x600f, 0x0000,
++ 0x080c, 0xae7e, 0x1158, 0x080c, 0x2e6c, 0x080c, 0xae8f, 0x11f0,
++ 0x080c, 0x9c09, 0x00d8, 0x080c, 0x90e6, 0x08c0, 0x080c, 0xae8f,
++ 0x1118, 0x080c, 0x9c09, 0x0090, 0x6010, 0x2068, 0x080c, 0xac91,
++ 0x0168, 0x601c, 0xa086, 0x0003, 0x11f8, 0x6837, 0x0103, 0x6b4a,
++ 0x6847, 0x0000, 0x080c, 0x580a, 0x080c, 0xae48, 0x080c, 0xb056,
++ 0x080c, 0xae54, 0x080c, 0x8fb7, 0x00ce, 0x0804, 0x9140, 0x2c78,
++ 0x600c, 0x2060, 0x0804, 0x9140, 0x012e, 0x000e, 0x006e, 0x00ce,
++ 0x00de, 0x00ee, 0x00fe, 0x0005, 0x601c, 0xa086, 0x0006, 0x1d30,
++ 0x080c, 0xc141, 0x0c18, 0x0036, 0x0156, 0x0136, 0x0146, 0x3908,
++ 0xa006, 0xa190, 0x0020, 0x221c, 0xa39e, 0x2c61, 0x1118, 0x8210,
++ 0x8000, 0x0cc8, 0xa005, 0x0138, 0x20a9, 0x0020, 0x2198, 0xa110,
++ 0x22a0, 0x22c8, 0x53a3, 0x014e, 0x013e, 0x015e, 0x003e, 0x0005,
++ 0x00d6, 0x20a1, 0x020b, 0x080c, 0x845b, 0x20a3, 0x0200, 0x20a3,
++ 0x0014, 0x60c3, 0x0014, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x2099,
++ 0xc900, 0x20a9, 0x0004, 0x53a6, 0x20a3, 0x0004, 0x20a3, 0x7878,
++ 0x20a3, 0x0000, 0x20a3, 0x0000, 0x080c, 0x8be2, 0x00de, 0x0005,
++ 0x20a1, 0x020b, 0x080c, 0x845b, 0x20a3, 0x0214, 0x20a3, 0x0018,
++ 0x20a3, 0x0800, 0x7810, 0xa084, 0xff00, 0x20a2, 0x20a3, 0x0000,
++ 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x7810, 0xa084,
++ 0x00ff, 0x20a2, 0x7828, 0x20a2, 0x20a3, 0x0000, 0x20a3, 0x0000,
++ 0x60c3, 0x0018, 0x080c, 0x8be2, 0x0005, 0x00d6, 0x0016, 0x2f68,
++ 0x2009, 0x0035, 0x080c, 0xb141, 0x1904, 0x929b, 0x20a1, 0x020b,
++ 0x080c, 0x83bf, 0x20a3, 0x1300, 0x20a3, 0x0000, 0x7828, 0x2068,
++ 0x681c, 0xa086, 0x0003, 0x0580, 0x7818, 0xa080, 0x0028, 0x2014,
++ 0x2001, 0xc635, 0x2004, 0xd0ac, 0x11d0, 0xa286, 0x007e, 0x1128,
++ 0x20a3, 0x00ff, 0x20a3, 0xfffe, 0x04b8, 0xa286, 0x007f, 0x1128,
++ 0x20a3, 0x00ff, 0x20a3, 0xfffd, 0x0478, 0xd2bc, 0x0180, 0xa286,
++ 0x0080, 0x1128, 0x20a3, 0x00ff, 0x20a3, 0xfffc, 0x0428, 0xa2e8,
++ 0xc77b, 0x2d6c, 0x6810, 0x20a2, 0x6814, 0x20a2, 0x00e8, 0x20a3,
++ 0x0000, 0x6098, 0x20a2, 0x00c0, 0x2001, 0xc635, 0x2004, 0xd0ac,
++ 0x1138, 0x7818, 0xa080, 0x0028, 0x2004, 0xa082, 0x007e, 0x0240,
++ 0x00d6, 0x2069, 0xc61c, 0x2da6, 0x8d68, 0x2da6, 0x00de, 0x0020,
++ 0x20a3, 0x0000, 0x6034, 0x20a2, 0x7834, 0x20a2, 0x7838, 0x20a2,
++ 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x000c, 0x080c, 0x8be2,
++ 0x001e, 0x00de, 0x0005, 0x7817, 0x0001, 0x7803, 0x0006, 0x001e,
++ 0x00de, 0x0005, 0x00d6, 0x0026, 0x7928, 0x2168, 0x691c, 0xa186,
++ 0x0006, 0x01c0, 0xa186, 0x0003, 0x0904, 0x9311, 0xa186, 0x0005,
++ 0x0904, 0x92fa, 0xa186, 0x0004, 0x05b8, 0xa186, 0x0008, 0x0904,
++ 0x9302, 0x7807, 0x0037, 0x7813, 0x1700, 0x080c, 0x9379, 0x002e,
++ 0x00de, 0x0005, 0x080c, 0x9335, 0x2009, 0x4000, 0x6800, 0x0002,
++ 0x92db, 0x92e6, 0x92dd, 0x92e6, 0x92e2, 0x92db, 0x92db, 0x92e6,
++ 0x92e6, 0x92e6, 0x92e6, 0x92db, 0x92db, 0x92db, 0x92db, 0x92db,
++ 0x92e6, 0x92db, 0x92e6, 0x080c, 0x1519, 0x6820, 0xd0e4, 0x0110,
++ 0xd0cc, 0x0110, 0xa00e, 0x0010, 0x2009, 0x2000, 0x6828, 0x20a2,
++ 0x682c, 0x20a2, 0x0804, 0x932b, 0x080c, 0x9335, 0x20a3, 0x0000,
++ 0x20a3, 0x0000, 0x2009, 0x4000, 0x6a00, 0xa286, 0x0002, 0x1108,
++ 0xa00e, 0x0488, 0x04d1, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x2009,
++ 0x4000, 0x0448, 0x0491, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x2009,
++ 0x4000, 0xa286, 0x0005, 0x0118, 0xa286, 0x0002, 0x1108, 0xa00e,
++ 0x00d0, 0x0419, 0x6810, 0x2068, 0x697c, 0x6810, 0xa112, 0x6980,
++ 0x6814, 0xa103, 0x20a2, 0x22a2, 0x7928, 0xa180, 0x0000, 0x2004,
++ 0xa08e, 0x0002, 0x0130, 0xa08e, 0x0004, 0x0118, 0x2009, 0x4000,
++ 0x0010, 0x2009, 0x0000, 0x21a2, 0x20a3, 0x0000, 0x60c3, 0x0018,
++ 0x080c, 0x8be2, 0x002e, 0x00de, 0x0005, 0x0036, 0x0046, 0x0056,
++ 0x0066, 0x20a1, 0x020b, 0x080c, 0x845b, 0xa006, 0x20a3, 0x0200,
++ 0x20a2, 0x7934, 0x21a2, 0x7938, 0x21a2, 0x7818, 0xa080, 0x0028,
++ 0x2004, 0x2011, 0xc635, 0x2214, 0xd2ac, 0x1118, 0xa092, 0x007e,
++ 0x0268, 0x00d6, 0x2069, 0xc61c, 0x2d2c, 0x8d68, 0x2d34, 0xa0e8,
++ 0xc77b, 0x2d6c, 0x6b10, 0x6c14, 0x00de, 0x0030, 0x2019, 0x0000,
++ 0x6498, 0x2029, 0x0000, 0x6634, 0x7828, 0xa080, 0x0007, 0x2004,
++ 0xa086, 0x0003, 0x1128, 0x25a2, 0x26a2, 0x23a2, 0x24a2, 0x0020,
++ 0x23a2, 0x24a2, 0x25a2, 0x26a2, 0x006e, 0x005e, 0x004e, 0x003e,
++ 0x0005, 0x20a1, 0x020b, 0x080c, 0x845b, 0x20a3, 0x0100, 0x20a3,
++ 0x0000, 0x20a3, 0x0009, 0x7810, 0x20a2, 0x60c3, 0x0008, 0x080c,
++ 0x8be2, 0x0005, 0x20a1, 0x020b, 0x080c, 0x83b7, 0x20a3, 0x1400,
++ 0x20a3, 0x0000, 0x7834, 0x20a2, 0x7838, 0x20a2, 0x7828, 0x20a2,
++ 0x782c, 0x20a2, 0x7830, 0xa084, 0x00ff, 0x8007, 0x20a2, 0x20a3,
++ 0x0000, 0x60c3, 0x0010, 0x080c, 0x8be2, 0x0005, 0x20a1, 0x020b,
++ 0x080c, 0x8453, 0x20a3, 0x0100, 0x20a3, 0x0000, 0x7828, 0x20a2,
++ 0x7810, 0x20a2, 0x60c3, 0x0008, 0x080c, 0x8be2, 0x0005, 0x0146,
++ 0x20a1, 0x020b, 0x0031, 0x60c3, 0x0000, 0x080c, 0x8be2, 0x014e,
++ 0x0005, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x7818, 0xa080, 0x0028,
++ 0x2004, 0x2011, 0xc635, 0x2214, 0xd2ac, 0x1110, 0xd0bc, 0x0188,
++ 0x00d6, 0xa0e8, 0xc77b, 0x2d6c, 0x6810, 0xa085, 0x0300, 0x20a2,
++ 0x6814, 0x20a2, 0x2069, 0xc61c, 0x2da6, 0x8d68, 0x2da6, 0x00de,
++ 0x0078, 0x00d6, 0xa0e8, 0xc77b, 0x2d6c, 0x6810, 0xa085, 0x0300,
++ 0x20a2, 0x6814, 0x20a2, 0x00de, 0x20a3, 0x0000, 0x6234, 0x22a2,
++ 0x20a3, 0x0819, 0x20a3, 0x0000, 0x080c, 0x8bd1, 0x22a2, 0x20a3,
++ 0x0000, 0x2fa2, 0x7a08, 0x22a2, 0x20a3, 0x0000, 0x20a3, 0x0000,
++ 0x0005, 0x20a1, 0x020b, 0x0079, 0x7910, 0x21a2, 0x20a3, 0x0000,
++ 0x60c3, 0x0000, 0x20e1, 0x9080, 0x60a7, 0x9575, 0x080c, 0x8bec,
++ 0x080c, 0x701b, 0x0005, 0x0156, 0x0136, 0x0036, 0x00d6, 0x00e6,
++ 0x20e1, 0x9080, 0x20e1, 0x4000, 0x7854, 0x2068, 0xadf0, 0x000f,
++ 0x7210, 0xa296, 0x00c0, 0xa294, 0xfffd, 0x7212, 0x7214, 0xa294,
++ 0x0300, 0x7216, 0x7100, 0xa194, 0x00ff, 0x7308, 0xa384, 0x00ff,
++ 0xa08d, 0xc200, 0x7102, 0xa384, 0xff00, 0xa215, 0x720a, 0x7004,
++ 0x720c, 0x700e, 0x7206, 0x20a9, 0x000a, 0x2e98, 0x53a6, 0x60a3,
++ 0x0035, 0x6a38, 0xa294, 0x7000, 0xa286, 0x3000, 0x0110, 0x60a3,
++ 0x0037, 0x00ee, 0x00de, 0x003e, 0x013e, 0x015e, 0x0005, 0x2009,
++ 0x0092, 0x0010, 0x2009, 0x0096, 0x60ab, 0x0036, 0x6116, 0x0005,
++ 0x609b, 0x0000, 0x20a1, 0x020b, 0x20e1, 0x9080, 0x20e1, 0x4000,
++ 0x20a3, 0x22ff, 0x20a3, 0xffff, 0x00d6, 0x2069, 0xc61c, 0x2da6,
++ 0x8d68, 0x2da6, 0x00de, 0x20a3, 0x0138, 0x20a3, 0x0000, 0x0026,
++ 0x080c, 0x8bd1, 0x22a2, 0x20a3, 0x0000, 0x2fa2, 0x20a3, 0xffff,
++ 0x20a3, 0x0000, 0x20a3, 0x0000, 0x002e, 0x20a3, 0x5400, 0x20a3,
++ 0x0000, 0x080c, 0x768f, 0x11b8, 0x0016, 0x7810, 0xa080, 0x000d,
++ 0x20a9, 0x0014, 0x200c, 0x810f, 0x21a2, 0x8000, 0x1f04, 0x948a,
++ 0x20a9, 0x0012, 0x2001, 0x0000, 0x20a3, 0x0000, 0x1f04, 0x9494,
++ 0x001e, 0x0804, 0x9502, 0x7810, 0x0016, 0x00c6, 0x00d6, 0x7810,
++ 0x2068, 0x2061, 0xc600, 0x6070, 0xa084, 0x00ff, 0x6968, 0x810f,
++ 0xa18c, 0xff00, 0xa105, 0x20a2, 0x6074, 0x20a2, 0x6968, 0xa18c,
++ 0xff00, 0x21a2, 0x20a3, 0x0000, 0x20a9, 0x0004, 0x2009, 0xc605,
++ 0x2104, 0x20a2, 0x8108, 0x1f04, 0x94b8, 0x20a9, 0x0004, 0x2009,
++ 0xc601, 0x2104, 0x20a2, 0x8108, 0x1f04, 0x94c1, 0x20a9, 0x0004,
++ 0x2d08, 0xa188, 0x001d, 0x2104, 0x8007, 0x20a2, 0x8108, 0x1f04,
++ 0x94cb, 0x20a9, 0x0004, 0x2d08, 0xa188, 0x0021, 0x2104, 0x8007,
++ 0x20a2, 0x8108, 0x1f04, 0x94d6, 0x080c, 0x7694, 0x1138, 0x20a9,
++ 0x0008, 0x20a3, 0x0000, 0x1f04, 0x94e1, 0x0050, 0x20a9, 0x0008,
++ 0x2009, 0xc69a, 0x2104, 0x8007, 0x20a2, 0x8108, 0x1f04, 0x94ea,
++ 0x20a9, 0x0008, 0x2d08, 0xa188, 0x0025, 0x2104, 0x8007, 0x20a2,
++ 0x8108, 0x1f04, 0x94f5, 0x00de, 0x00ce, 0x001e, 0x20a3, 0x0000,
++ 0x20a3, 0x0000, 0x60c3, 0x004c, 0x080c, 0x8be2, 0x0005, 0x20a1,
++ 0x020b, 0x080c, 0x83bf, 0x20a3, 0x5500, 0x20a3, 0x0000, 0x7810,
++ 0x0016, 0x00c6, 0x00d6, 0x7810, 0x2068, 0x686c, 0xa084, 0x00ff,
++ 0x6968, 0x810f, 0xa18c, 0xff00, 0xa105, 0x20a2, 0x696c, 0xa18c,
++ 0xff00, 0x6870, 0xa084, 0x00ff, 0xa105, 0x20a2, 0x6968, 0xa18c,
++ 0xff00, 0x2061, 0xc600, 0x6070, 0xa084, 0x00ff, 0xa10d, 0x21a2,
++ 0x6174, 0x21a2, 0x20a9, 0x0004, 0x2d08, 0xa188, 0x001d, 0x2104,
++ 0x8007, 0x20a2, 0x8108, 0x1f04, 0x9537, 0x20a9, 0x0004, 0x2d08,
++ 0xa188, 0x0021, 0x2104, 0x8007, 0x20a2, 0x8108, 0x1f04, 0x9542,
++ 0x20a9, 0x0004, 0x2009, 0xc605, 0x2104, 0x20a2, 0x8108, 0x1f04,
++ 0x954c, 0x20a9, 0x0004, 0x2009, 0xc601, 0x2104, 0x20a2, 0x8108,
++ 0x1f04, 0x9555, 0x20a9, 0x0008, 0x2d08, 0xa188, 0x0025, 0x2104,
++ 0x8007, 0x20a2, 0x8108, 0x1f04, 0x955f, 0x080c, 0x7694, 0x1138,
++ 0x20a9, 0x0008, 0x20a3, 0x0000, 0x1f04, 0x956a, 0x0050, 0x20a9,
++ 0x0008, 0x2009, 0xc69a, 0x2104, 0x8007, 0x20a2, 0x8108, 0x1f04,
++ 0x9573, 0x00de, 0x00ce, 0x001e, 0x20a3, 0x0000, 0x20a3, 0x0000,
++ 0x60c3, 0x004c, 0x080c, 0x8be2, 0x0005, 0x2061, 0xce00, 0x2a70,
++ 0x7068, 0x704a, 0x704f, 0xce00, 0x0005, 0x00e6, 0x0126, 0x2071,
++ 0xc600, 0x2091, 0x8000, 0x7548, 0xa582, 0x0010, 0x0608, 0x704c,
++ 0x2060, 0x6000, 0xa086, 0x0000, 0x0148, 0xace0, 0x0018, 0x705c,
++ 0xac02, 0x1208, 0x0cb0, 0x2061, 0xce00, 0x0c98, 0x6003, 0x0008,
++ 0x8529, 0x754a, 0xaca8, 0x0018, 0x705c, 0xa502, 0x1230, 0x754e,
++ 0xa085, 0x0001, 0x012e, 0x00ee, 0x0005, 0x704f, 0xce00, 0x0cc0,
++ 0xa006, 0x0cc0, 0x00e6, 0x2071, 0xc600, 0x7548, 0xa582, 0x0010,
++ 0x0600, 0x704c, 0x2060, 0x6000, 0xa086, 0x0000, 0x0148, 0xace0,
++ 0x0018, 0x705c, 0xac02, 0x1208, 0x0cb0, 0x2061, 0xce00, 0x0c98,
++ 0x6003, 0x0008, 0x8529, 0x754a, 0xaca8, 0x0018, 0x705c, 0xa502,
++ 0x1228, 0x754e, 0xa085, 0x0001, 0x00ee, 0x0005, 0x704f, 0xce00,
++ 0x0cc8, 0xa006, 0x0cc8, 0xac82, 0xce00, 0x0a0c, 0x1519, 0x2001,
++ 0xc617, 0x2004, 0xac02, 0x1a0c, 0x1519, 0xa006, 0x6006, 0x600a,
++ 0x600e, 0x6012, 0x6016, 0x601a, 0x601f, 0x0000, 0x6003, 0x0000,
++ 0x6052, 0x6056, 0x6022, 0x6026, 0x602a, 0x602e, 0x6032, 0x6036,
++ 0x603a, 0x603e, 0x6026, 0x2061, 0xc600, 0x6048, 0x8000, 0x604a,
++ 0xa086, 0x0001, 0x0108, 0x0005, 0x0126, 0x2091, 0x8000, 0x080c,
++ 0x7e94, 0x012e, 0x0cc0, 0x601c, 0xa084, 0x000f, 0x0002, 0x9622,
++ 0x9631, 0x964c, 0x9667, 0xb189, 0xb1a4, 0xb1bf, 0x9622, 0x9631,
++ 0x7699, 0x9682, 0xa186, 0x0013, 0x1128, 0x080c, 0x7db1, 0x080c,
++ 0x7e94, 0x0005, 0xa18e, 0x0047, 0x1118, 0xa016, 0x080c, 0x1870,
++ 0x0005, 0x0066, 0x6000, 0xa0b2, 0x0010, 0x1a0c, 0x1519, 0x0013,
++ 0x006e, 0x0005, 0x964a, 0x9a78, 0x9c43, 0x964a, 0x9cc0, 0x9740,
++ 0x964a, 0x964a, 0x9a0a, 0xa126, 0x964a, 0x964a, 0x964a, 0x964a,
++ 0x964a, 0x964a, 0x080c, 0x1519, 0x0066, 0x6000, 0xa0b2, 0x0010,
++ 0x1a0c, 0x1519, 0x0013, 0x006e, 0x0005, 0x9665, 0xa759, 0x9665,
++ 0x9665, 0x9665, 0x9665, 0x9665, 0x9665, 0xa704, 0xa8c5, 0x9665,
++ 0xa786, 0xa7fd, 0xa786, 0xa7fd, 0x9665, 0x080c, 0x1519, 0x0066,
++ 0x6000, 0xa0b2, 0x0010, 0x1a0c, 0x1519, 0x0013, 0x006e, 0x0005,
++ 0x9680, 0xa167, 0xa231, 0xa36c, 0xa4c8, 0x9680, 0x9680, 0x9680,
++ 0xa141, 0xa6b4, 0xa6b7, 0x9680, 0x9680, 0x9680, 0x9680, 0xa6e1,
++ 0x080c, 0x1519, 0x0066, 0x6000, 0xa0b2, 0x0010, 0x1a0c, 0x1519,
++ 0x0013, 0x006e, 0x0005, 0x969b, 0x969b, 0x969b, 0x96c9, 0x9716,
++ 0x969b, 0x969b, 0x969b, 0x969d, 0x969b, 0x969b, 0x969b, 0x969b,
++ 0x969b, 0x969b, 0x969b, 0x080c, 0x1519, 0xa186, 0x0003, 0x190c,
++ 0x1519, 0x00d6, 0x6003, 0x0003, 0x6106, 0x6010, 0x2068, 0x684f,
++ 0x0040, 0x687c, 0x680a, 0x6880, 0x680e, 0x6813, 0x0000, 0x6817,
++ 0x0000, 0x6854, 0xa092, 0x199a, 0x0210, 0x2001, 0x1999, 0x8003,
++ 0x8013, 0x8213, 0xa210, 0x6216, 0x00de, 0x2c10, 0x080c, 0x2068,
++ 0x080c, 0x79fc, 0x0126, 0x2091, 0x8000, 0x080c, 0x7f6e, 0x012e,
++ 0x0005, 0xa182, 0x0047, 0x0002, 0x96d5, 0x96d5, 0x96d7, 0x96f0,
++ 0x96d5, 0x96d5, 0x96d5, 0x96d5, 0x9702, 0x080c, 0x1519, 0x00d6,
++ 0x0016, 0x080c, 0x7e47, 0x080c, 0x7f6e, 0x6003, 0x0004, 0x6110,
++ 0x2168, 0x684f, 0x0020, 0x685c, 0x685a, 0x6874, 0x687e, 0x6878,
++ 0x6882, 0x6897, 0x0000, 0x689b, 0x0000, 0x001e, 0x00de, 0x0005,
++ 0x080c, 0x7e47, 0x00d6, 0x6110, 0x2168, 0x080c, 0xac91, 0x0120,
++ 0x684b, 0x0006, 0x080c, 0x580a, 0x00de, 0x080c, 0x95e3, 0x080c,
++ 0x7f6e, 0x0005, 0x080c, 0x7e47, 0x080c, 0x2e46, 0x00d6, 0x6110,
++ 0x2168, 0x080c, 0xac91, 0x0120, 0x684b, 0x0029, 0x080c, 0x580a,
++ 0x00de, 0x080c, 0x95e3, 0x080c, 0x7f6e, 0x0005, 0xa182, 0x0047,
++ 0x0002, 0x9724, 0x9733, 0x9722, 0x9722, 0x9722, 0x9722, 0x9722,
++ 0x9722, 0x9722, 0x080c, 0x1519, 0x00d6, 0x6010, 0x2068, 0x684c,
++ 0xc0f4, 0x684e, 0x00de, 0x20e1, 0x0005, 0x3d18, 0x3e20, 0x2c10,
++ 0x080c, 0x1870, 0x0005, 0x00d6, 0x6110, 0x2168, 0x684b, 0x0000,
++ 0x6853, 0x0000, 0x080c, 0x580a, 0x00de, 0x080c, 0x95e3, 0x0005,
++ 0xa1b6, 0x0015, 0x1118, 0x080c, 0x95e3, 0x0030, 0xa1b6, 0x0016,
++ 0x190c, 0x1519, 0x080c, 0x95e3, 0x0005, 0x20a9, 0x000e, 0x2e98,
++ 0x6010, 0x20a0, 0x53a3, 0x20a9, 0x0006, 0x3310, 0x3420, 0x9398,
++ 0x94a0, 0x3318, 0x3428, 0x222e, 0x2326, 0xa290, 0x0002, 0xa5a8,
++ 0x0002, 0xa398, 0x0002, 0xa4a0, 0x0002, 0x1f04, 0x975b, 0x00e6,
++ 0x080c, 0xac91, 0x0130, 0x6010, 0x2070, 0x7007, 0x0000, 0x7037,
++ 0x0103, 0x00ee, 0x080c, 0x95e3, 0x0005, 0x00d6, 0x0036, 0x7330,
++ 0xa386, 0x0200, 0x1130, 0x6018, 0x2068, 0x6813, 0x00ff, 0x6817,
++ 0xfffd, 0x6010, 0xa005, 0x0130, 0x2068, 0x6807, 0x0000, 0x6837,
++ 0x0103, 0x6b32, 0x080c, 0x95e3, 0x003e, 0x00de, 0x0005, 0x0016,
++ 0x20a9, 0x002a, 0xae80, 0x000c, 0x2098, 0x6010, 0xa080, 0x0002,
++ 0x20a0, 0x53a3, 0x20a9, 0x002a, 0x6010, 0xa080, 0x0001, 0x2004,
++ 0xa080, 0x0002, 0x20a0, 0x53a3, 0x00e6, 0x6010, 0x2004, 0x2070,
++ 0x7037, 0x0103, 0x00ee, 0x080c, 0x95e3, 0x001e, 0x0005, 0x0016,
++ 0x2009, 0x0000, 0x7030, 0xa086, 0x0100, 0x0140, 0x7038, 0xa084,
++ 0x00ff, 0x800c, 0x703c, 0xa084, 0x00ff, 0x8004, 0xa080, 0x0004,
++ 0xa108, 0x21a8, 0xae80, 0x000c, 0x2098, 0x6010, 0xa080, 0x0002,
++ 0x20a0, 0x080c, 0x4ecb, 0x00e6, 0x080c, 0xac91, 0x0140, 0x6010,
++ 0x2070, 0x7007, 0x0000, 0x7034, 0x70b2, 0x7037, 0x0103, 0x00ee,
++ 0x080c, 0x95e3, 0x001e, 0x0005, 0x0016, 0x2009, 0x0000, 0x7030,
++ 0xa086, 0x0200, 0x0110, 0x2009, 0x0001, 0x00d6, 0x6010, 0xa06d,
++ 0x090c, 0x1519, 0x694a, 0x080c, 0x580a, 0x00de, 0x080c, 0x95e3,
++ 0x001e, 0x0005, 0x00e6, 0x00d6, 0x603f, 0x0000, 0x2c68, 0x0016,
++ 0x2009, 0x0035, 0x080c, 0xb141, 0x001e, 0x1168, 0x0026, 0x6228,
++ 0x2268, 0x002e, 0x2071, 0xcc8c, 0x6b1c, 0xa386, 0x0003, 0x0130,
++ 0xa386, 0x0006, 0x0128, 0x080c, 0x95e3, 0x0020, 0x0031, 0x0010,
++ 0x080c, 0x98d3, 0x00de, 0x00ee, 0x0005, 0x00f6, 0x6810, 0x2078,
++ 0xa186, 0x0015, 0x0904, 0x98ba, 0xa18e, 0x0016, 0x1904, 0x98d1,
++ 0x700c, 0xa08c, 0xff00, 0xa186, 0x1700, 0x0120, 0xa186, 0x0300,
++ 0x1904, 0x9899, 0x8fff, 0x1138, 0x6800, 0xa086, 0x000f, 0x0904,
++ 0x987d, 0x0804, 0x98cf, 0x6808, 0xa086, 0xffff, 0x1904, 0x98bc,
++ 0x784c, 0xa084, 0x0060, 0xa086, 0x0020, 0x1150, 0x797c, 0x7810,
++ 0xa106, 0x1904, 0x98bc, 0x7980, 0x7814, 0xa106, 0x1904, 0x98bc,
++ 0x080c, 0xae48, 0x6858, 0x7852, 0x784c, 0xc0dc, 0xc0f4, 0xc0d4,
++ 0x784e, 0x0026, 0xa00e, 0x6a14, 0x2001, 0x000a, 0x080c, 0x783f,
++ 0x7854, 0xa20a, 0x0208, 0x8011, 0x7a56, 0x82ff, 0x002e, 0x1138,
++ 0x00c6, 0x2d60, 0x080c, 0xaa40, 0x00ce, 0x0804, 0x98cf, 0x00c6,
++ 0x00d6, 0x2f68, 0x6838, 0xd0fc, 0x1118, 0x080c, 0x4fa6, 0x0010,
++ 0x080c, 0x51dd, 0x00de, 0x00ce, 0x1904, 0x98bc, 0x00c6, 0x2d60,
++ 0x080c, 0x95e3, 0x00ce, 0x0804, 0x98cf, 0x00c6, 0x080c, 0xaf0d,
++ 0x0190, 0x6013, 0x0000, 0x6818, 0x601a, 0x080c, 0xb05e, 0x601f,
++ 0x0003, 0x6904, 0x00c6, 0x2d60, 0x080c, 0x95e3, 0x00ce, 0x080c,
++ 0x9613, 0x00ce, 0x04e0, 0x2001, 0xc8ff, 0x2004, 0x683e, 0x00ce,
++ 0x04b0, 0x7008, 0xa086, 0x000b, 0x11a0, 0x6018, 0x200c, 0xc1bc,
++ 0x2102, 0x00c6, 0x2d60, 0x7853, 0x0003, 0x6007, 0x0085, 0x6003,
++ 0x000b, 0x601f, 0x0002, 0x080c, 0x7999, 0x080c, 0x7e94, 0x00ce,
++ 0x00f0, 0x700c, 0xa086, 0x2a00, 0x1138, 0x2001, 0xc8ff, 0x2004,
++ 0x683e, 0x00a8, 0x0481, 0x00a8, 0x8fff, 0x090c, 0x1519, 0x00c6,
++ 0x00d6, 0x2d60, 0x2f68, 0x6837, 0x0103, 0x684b, 0x0003, 0x080c,
++ 0xa934, 0x080c, 0xae48, 0x080c, 0xae54, 0x00de, 0x00ce, 0x080c,
++ 0x95e3, 0x00fe, 0x0005, 0xa186, 0x0015, 0x1128, 0x2001, 0xc8ff,
++ 0x2004, 0x683e, 0x0068, 0xa18e, 0x0016, 0x1160, 0x00c6, 0x2d00,
++ 0x2060, 0x080c, 0xc3e2, 0x080c, 0x7103, 0x080c, 0x95e3, 0x00ce,
++ 0x080c, 0x95e3, 0x0005, 0x0026, 0x0036, 0x0046, 0x7228, 0x7c80,
++ 0x7b7c, 0xd2f4, 0x0130, 0x2001, 0xc8ff, 0x2004, 0x683e, 0x0804,
++ 0x994d, 0x00c6, 0x2d60, 0x080c, 0xa954, 0x00ce, 0x6804, 0xa086,
++ 0x0050, 0x1168, 0x00c6, 0x2d00, 0x2060, 0x6003, 0x0001, 0x6007,
++ 0x0050, 0x080c, 0x7999, 0x080c, 0x7e94, 0x00ce, 0x04f0, 0x6800,
++ 0xa086, 0x000f, 0x01c8, 0x8fff, 0x090c, 0x1519, 0x6820, 0xd0dc,
++ 0x1198, 0x6800, 0xa086, 0x0004, 0x1198, 0x784c, 0xd0ac, 0x0180,
++ 0x784c, 0xc0dc, 0xc0f4, 0x784e, 0x7850, 0xc0f4, 0xc0fc, 0x7852,
++ 0x2001, 0x0001, 0x682e, 0x00e0, 0x2001, 0x0007, 0x682e, 0x00c0,
++ 0x784c, 0xd0b4, 0x1130, 0xd0ac, 0x0db8, 0x784c, 0xd0f4, 0x1da0,
++ 0x0c38, 0xd2ec, 0x1d88, 0x7024, 0xa306, 0x1118, 0x7020, 0xa406,
++ 0x0d58, 0x7020, 0x6836, 0x7024, 0x683a, 0x2001, 0x0005, 0x682e,
++ 0x080c, 0xaf9a, 0x080c, 0x7e94, 0x0010, 0x080c, 0x95e3, 0x004e,
++ 0x003e, 0x002e, 0x0005, 0x00e6, 0x00d6, 0x0026, 0x6034, 0x2068,
++ 0x6a1c, 0xa286, 0x0007, 0x0904, 0x99b1, 0xa286, 0x0002, 0x0904,
++ 0x99b1, 0xa286, 0x0000, 0x0904, 0x99b1, 0x6808, 0x6338, 0xa306,
++ 0x1904, 0x99b1, 0x2071, 0xcc8c, 0xa186, 0x0015, 0x05e0, 0xa18e,
++ 0x0016, 0x1190, 0x6030, 0xa084, 0x00ff, 0xa086, 0x0001, 0x1160,
++ 0x700c, 0xa086, 0x2a00, 0x1140, 0x6034, 0xa080, 0x0008, 0x200c,
++ 0xc1dd, 0xc1f5, 0x2102, 0x0438, 0x00c6, 0x6034, 0x2060, 0x6104,
++ 0xa186, 0x004b, 0x01a0, 0xa186, 0x004c, 0x0188, 0xa186, 0x004d,
++ 0x0170, 0xa186, 0x004e, 0x0158, 0xa186, 0x0052, 0x0140, 0x6010,
++ 0x2068, 0x080c, 0xac91, 0x090c, 0x1519, 0x6853, 0x0003, 0x6007,
++ 0x0085, 0x6003, 0x000b, 0x601f, 0x0002, 0x080c, 0x7999, 0x080c,
++ 0x7e94, 0x00ce, 0x0030, 0x6034, 0x2070, 0x2001, 0xc8ff, 0x2004,
++ 0x703e, 0x080c, 0x95e3, 0x002e, 0x00de, 0x00ee, 0x0005, 0x00d6,
++ 0x20a9, 0x000e, 0x2e98, 0x6010, 0x20a0, 0x53a3, 0xa1b6, 0x0015,
++ 0x1558, 0x6018, 0x2068, 0x0156, 0x0036, 0x0026, 0xae90, 0x000c,
++ 0xa290, 0x0004, 0x20a9, 0x0004, 0xad98, 0x000a, 0x080c, 0xa103,
++ 0x002e, 0x003e, 0x015e, 0x11d8, 0x0156, 0x0036, 0x0026, 0xae90,
++ 0x000c, 0xa290, 0x0008, 0x20a9, 0x0004, 0xad98, 0x0006, 0x080c,
++ 0xa103, 0x002e, 0x003e, 0x015e, 0x1150, 0x7038, 0x680a, 0x703c,
++ 0x680e, 0x6800, 0xc08d, 0x6802, 0x00de, 0x0804, 0x9767, 0x080c,
++ 0x2e46, 0x00c6, 0x080c, 0x958d, 0x2f00, 0x601a, 0x6013, 0x0000,
++ 0x601f, 0x0001, 0x6007, 0x0001, 0x6003, 0x0001, 0x2001, 0x0007,
++ 0x080c, 0x5291, 0x080c, 0x52be, 0x080c, 0x79df, 0x080c, 0x7e94,
++ 0x00ce, 0x0c10, 0x2100, 0xa1b2, 0x0080, 0x1a0c, 0x1519, 0xa1b2,
++ 0x0040, 0x1a04, 0x9a6e, 0x0002, 0x9a62, 0x9a56, 0x9a62, 0x9a62,
++ 0x9a62, 0x9a62, 0x9a54, 0x9a54, 0x9a54, 0x9a54, 0x9a54, 0x9a54,
++ 0x9a54, 0x9a54, 0x9a54, 0x9a54, 0x9a54, 0x9a54, 0x9a54, 0x9a54,
++ 0x9a54, 0x9a54, 0x9a54, 0x9a54, 0x9a54, 0x9a54, 0x9a54, 0x9a54,
++ 0x9a54, 0x9a54, 0x9a54, 0x9a62, 0x9a54, 0x9a62, 0x9a62, 0x9a54,
++ 0x9a54, 0x9a54, 0x9a54, 0x9a54, 0x9a62, 0x9a54, 0x9a54, 0x9a54,
++ 0x9a54, 0x9a54, 0x9a54, 0x9a54, 0x9a54, 0x9a54, 0x9a62, 0x9a62,
++ 0x9a54, 0x9a54, 0x9a54, 0x9a54, 0x9a54, 0x9a54, 0x9a54, 0x9a54,
++ 0x9a54, 0x9a62, 0x9a54, 0x9a54, 0x080c, 0x1519, 0x6003, 0x0001,
++ 0x6106, 0x080c, 0x79df, 0x0126, 0x2091, 0x8000, 0x080c, 0x7e94,
++ 0x012e, 0x0005, 0x6003, 0x0001, 0x6106, 0x080c, 0x79df, 0x0126,
++ 0x2091, 0x8000, 0x080c, 0x7e94, 0x012e, 0x0005, 0x2600, 0x0002,
++ 0x9a62, 0x9a62, 0x9a76, 0x9a62, 0x9a62, 0x9a76, 0x080c, 0x1519,
++ 0x6004, 0xa0b2, 0x0080, 0x1a0c, 0x1519, 0xa1b6, 0x0013, 0x0904,
++ 0x9b28, 0xa1b6, 0x0027, 0x1904, 0x9aee, 0x080c, 0x7db1, 0x6004,
++ 0x080c, 0xae7e, 0x0190, 0x080c, 0xae8f, 0x0904, 0x9ae8, 0xa08e,
++ 0x0021, 0x0904, 0x9aeb, 0xa08e, 0x0022, 0x0904, 0x9ae8, 0xa08e,
++ 0x003d, 0x0904, 0x9aeb, 0x0804, 0x9ae1, 0x080c, 0x2e6c, 0x2001,
++ 0x0007, 0x080c, 0x5291, 0x6018, 0xa080, 0x0028, 0x200c, 0x080c,
++ 0x9c09, 0xa186, 0x007e, 0x1148, 0x2001, 0xc635, 0x2014, 0xc285,
++ 0x080c, 0x5f22, 0x1108, 0xc2ad, 0x2202, 0x0016, 0x0026, 0x0036,
++ 0x2110, 0x0026, 0x2019, 0x0028, 0x080c, 0x9132, 0x002e, 0x080c,
++ 0xc4e4, 0x003e, 0x002e, 0x001e, 0x0016, 0x0026, 0x0036, 0x2110,
++ 0x2019, 0x0028, 0x080c, 0x7b16, 0x0076, 0x2039, 0x0000, 0x080c,
++ 0x7a0e, 0x00c6, 0x6018, 0xa065, 0x0110, 0x080c, 0x553e, 0x00ce,
++ 0x2c08, 0x080c, 0xbef7, 0x007e, 0x003e, 0x002e, 0x001e, 0x080c,
++ 0x5300, 0x080c, 0xb056, 0x080c, 0x95e3, 0x080c, 0x7e94, 0x0005,
++ 0x080c, 0x9c09, 0x0cb0, 0x080c, 0x9c37, 0x0c98, 0xa186, 0x0014,
++ 0x1db0, 0x080c, 0x7db1, 0x080c, 0x2e46, 0x080c, 0xae7e, 0x1188,
++ 0x080c, 0x2e6c, 0x6018, 0xa080, 0x0028, 0x200c, 0x080c, 0x9c09,
++ 0xa186, 0x007e, 0x1128, 0x2001, 0xc635, 0x200c, 0xc185, 0x2102,
++ 0x08c0, 0x080c, 0xae8f, 0x1118, 0x080c, 0x9c09, 0x0890, 0x6004,
++ 0xa08e, 0x0032, 0x1158, 0x00e6, 0x00f6, 0x2071, 0xc6a2, 0x2079,
++ 0x0000, 0x080c, 0x3179, 0x00fe, 0x00ee, 0x0818, 0x6004, 0xa08e,
++ 0x0021, 0x0d50, 0xa08e, 0x0022, 0x090c, 0x9c09, 0x0804, 0x9ae1,
++ 0xa0b2, 0x0040, 0x1a04, 0x9beb, 0x2008, 0x0002, 0x9b70, 0x9b71,
++ 0x9b74, 0x9b77, 0x9b7a, 0x9b7d, 0x9b6e, 0x9b6e, 0x9b6e, 0x9b6e,
++ 0x9b6e, 0x9b6e, 0x9b6e, 0x9b6e, 0x9b6e, 0x9b6e, 0x9b6e, 0x9b6e,
++ 0x9b6e, 0x9b6e, 0x9b6e, 0x9b6e, 0x9b6e, 0x9b6e, 0x9b6e, 0x9b6e,
++ 0x9b6e, 0x9b6e, 0x9b6e, 0x9b6e, 0x9b80, 0x9b8f, 0x9b6e, 0x9b91,
++ 0x9b8f, 0x9b6e, 0x9b6e, 0x9b6e, 0x9b6e, 0x9b6e, 0x9b8f, 0x9b8f,
++ 0x9b6e, 0x9b6e, 0x9b6e, 0x9b6e, 0x9b6e, 0x9b6e, 0x9b6e, 0x9b6e,
++ 0x9bcb, 0x9b8f, 0x9b6e, 0x9b8b, 0x9b6e, 0x9b6e, 0x9b6e, 0x9b8c,
++ 0x9b6e, 0x9b6e, 0x9b6e, 0x9b8f, 0x9bc2, 0x9b6e, 0x080c, 0x1519,
++ 0x00f0, 0x2001, 0x000b, 0x0460, 0x2001, 0x0003, 0x0448, 0x2001,
++ 0x0005, 0x0430, 0x2001, 0x0001, 0x0418, 0x2001, 0x0009, 0x0400,
++ 0x080c, 0x7db1, 0x6003, 0x0005, 0x2001, 0xc8ff, 0x2004, 0x603e,
++ 0x080c, 0x7e94, 0x00a0, 0x0018, 0x0010, 0x080c, 0x5291, 0x0804,
++ 0x9bdc, 0x080c, 0x7db1, 0x2001, 0xc8fd, 0x2004, 0x6016, 0x2001,
++ 0xc8ff, 0x2004, 0x603e, 0x6003, 0x0004, 0x080c, 0x7e94, 0x0005,
++ 0x080c, 0x5291, 0x080c, 0x7db1, 0x6003, 0x0002, 0x2001, 0xc8ff,
++ 0x2004, 0x603e, 0x0036, 0x2019, 0xc65d, 0x2304, 0xa084, 0xff00,
++ 0x1120, 0x2001, 0xc8fd, 0x201c, 0x0040, 0x8007, 0xa09a, 0x0004,
++ 0x0ec0, 0x8003, 0x801b, 0x831b, 0xa318, 0x6316, 0x003e, 0x080c,
++ 0x7e94, 0x08e8, 0x080c, 0x7db1, 0x080c, 0xb056, 0x080c, 0x95e3,
++ 0x080c, 0x7e94, 0x08a0, 0x00e6, 0x00f6, 0x2071, 0xc6a2, 0x2079,
++ 0x0000, 0x080c, 0x3179, 0x00fe, 0x00ee, 0x080c, 0x7db1, 0x080c,
++ 0x95e3, 0x080c, 0x7e94, 0x0818, 0x080c, 0x7db1, 0x2001, 0xc8ff,
++ 0x2004, 0x603e, 0x6003, 0x0002, 0x2001, 0xc8fd, 0x2004, 0x6016,
++ 0x080c, 0x7e94, 0x0005, 0x2600, 0x2008, 0x0002, 0x9bf6, 0x9bdc,
++ 0x9bf4, 0x9bdc, 0x9bdc, 0x9bf4, 0x080c, 0x1519, 0x080c, 0x7db1,
++ 0x00d6, 0x6010, 0x2068, 0x080c, 0x768f, 0x1118, 0x080c, 0x1619,
++ 0x0010, 0x080c, 0x580a, 0x00de, 0x080c, 0x95e3, 0x080c, 0x7e94,
++ 0x0005, 0x00e6, 0x0026, 0x0016, 0x080c, 0xac91, 0x0508, 0x6010,
++ 0x2070, 0x7034, 0xa086, 0x0139, 0x1148, 0x2001, 0x0030, 0x2009,
++ 0x0000, 0x2011, 0x4005, 0x080c, 0xb10d, 0x0090, 0x7038, 0xd0fc,
++ 0x0178, 0x7007, 0x0000, 0x0016, 0x6004, 0xa08e, 0x0021, 0x0160,
++ 0xa08e, 0x003d, 0x0148, 0x001e, 0x7037, 0x0103, 0x7033, 0x0100,
++ 0x001e, 0x002e, 0x00ee, 0x0005, 0x001e, 0x0009, 0x0cc8, 0x00e6,
++ 0xacf0, 0x0004, 0x2e74, 0x7000, 0x2070, 0x7037, 0x0103, 0x7023,
++ 0x8001, 0x00ee, 0x0005, 0x00d6, 0x6618, 0x2668, 0x6804, 0xa084,
++ 0x00ff, 0x00de, 0xa0b2, 0x000c, 0x1a0c, 0x1519, 0x6604, 0xa6b6,
++ 0x0043, 0x1120, 0x080c, 0xb0c9, 0x0804, 0x9cb0, 0x6604, 0xa6b6,
++ 0x0033, 0x1120, 0x080c, 0xb079, 0x0804, 0x9cb0, 0x6604, 0xa6b6,
++ 0x0028, 0x1120, 0x080c, 0xaebf, 0x0804, 0x9cb0, 0x6604, 0xa6b6,
++ 0x0029, 0x1120, 0x080c, 0xaed6, 0x0804, 0x9cb0, 0x6604, 0xa6b6,
++ 0x001f, 0x1118, 0x080c, 0x974d, 0x04d8, 0x6604, 0xa6b6, 0x0000,
++ 0x1118, 0x080c, 0x99b7, 0x04a0, 0x6604, 0xa6b6, 0x0022, 0x1118,
++ 0x080c, 0x9775, 0x0468, 0x6604, 0xa6b6, 0x0035, 0x1118, 0x080c,
++ 0x97f2, 0x0430, 0x6604, 0xa6b6, 0x0039, 0x1118, 0x080c, 0x9953,
++ 0x00f8, 0x6604, 0xa6b6, 0x003d, 0x1118, 0x080c, 0x978f, 0x00c0,
++ 0x6604, 0xa6b6, 0x0044, 0x1118, 0x080c, 0x97af, 0x0088, 0x6604,
++ 0xa6b6, 0x0041, 0x1118, 0x080c, 0x97dc, 0x0050, 0xa1b6, 0x0015,
++ 0x1110, 0x0053, 0x0028, 0xa1b6, 0x0016, 0x1118, 0x0804, 0x9e93,
++ 0x0005, 0x080c, 0x962a, 0x0ce0, 0x9cda, 0x9cdd, 0x9cda, 0x9d21,
++ 0x9cda, 0x9e1a, 0x9ea1, 0x9cda, 0x9cda, 0x9e6b, 0x9cda, 0x9e81,
++ 0xa1b6, 0x0048, 0x0140, 0x20e1, 0x0005, 0x3d18, 0x3e20, 0x2c10,
++ 0x080c, 0x1870, 0x0005, 0x00e6, 0xacf0, 0x0004, 0x2e74, 0x7000,
++ 0x2070, 0x7037, 0x0103, 0x00ee, 0x080c, 0x95e3, 0x0005, 0x080c,
++ 0x95e3, 0x0005, 0xe000, 0xe000, 0x0005, 0x00e6, 0x2071, 0xc600,
++ 0x7084, 0xa086, 0x0074, 0x1530, 0x080c, 0xbece, 0x11b0, 0x00d6,
++ 0x6018, 0x2068, 0x7030, 0xd08c, 0x0128, 0x6800, 0xd0bc, 0x0110,
++ 0xc0c5, 0x6802, 0x00e9, 0x00de, 0x2001, 0x0006, 0x080c, 0x5291,
++ 0x080c, 0x2e6c, 0x080c, 0x95e3, 0x0088, 0x2001, 0x000a, 0x080c,
++ 0x5291, 0x080c, 0x2e6c, 0x6003, 0x0001, 0x6007, 0x0001, 0x080c,
++ 0x79df, 0x0020, 0x2001, 0x0001, 0x080c, 0x9df5, 0x00ee, 0x0005,
++ 0x6800, 0xd084, 0x0168, 0x2001, 0x0000, 0x080c, 0x527f, 0x2069,
++ 0xc652, 0x6804, 0xd0a4, 0x0120, 0x2001, 0x0006, 0x080c, 0x52be,
++ 0x0005, 0x00d6, 0x2011, 0xc621, 0x2204, 0xa086, 0x0074, 0x1904,
++ 0x9df0, 0x6018, 0x2068, 0x6aa0, 0xa286, 0x007e, 0x1120, 0x080c,
++ 0x9fc3, 0x0804, 0x9d8f, 0x080c, 0x9fb9, 0x6018, 0x2068, 0xa080,
++ 0x0028, 0x2014, 0xa286, 0x0080, 0x11c0, 0x6813, 0x00ff, 0x6817,
++ 0xfffc, 0x6010, 0xa005, 0x0138, 0x2068, 0x6807, 0x0000, 0x6837,
++ 0x0103, 0x6833, 0x0200, 0x2001, 0x0006, 0x080c, 0x5291, 0x080c,
++ 0x2e6c, 0x080c, 0x95e3, 0x0804, 0x9df3, 0x00e6, 0x2071, 0xc635,
++ 0x2e04, 0xd09c, 0x0188, 0x2071, 0xcc80, 0x7108, 0x720c, 0xa18c,
++ 0x00ff, 0x1118, 0xa284, 0xff00, 0x0138, 0x6018, 0x2070, 0x70a0,
++ 0xd0bc, 0x1110, 0x7112, 0x7216, 0x00ee, 0x6010, 0xa005, 0x0198,
++ 0x2068, 0x6838, 0xd0f4, 0x0178, 0x6834, 0xa084, 0x00ff, 0xa086,
++ 0x0039, 0x1958, 0x2001, 0x0000, 0x2009, 0x0000, 0x2011, 0x4000,
++ 0x080c, 0xb10d, 0x0840, 0x2001, 0x0004, 0x080c, 0x5291, 0x6003,
++ 0x0001, 0x6007, 0x0003, 0x080c, 0x79df, 0x0804, 0x9df3, 0x685c,
++ 0xd0e4, 0x01d8, 0x080c, 0xb009, 0x080c, 0x5f22, 0x0118, 0xd0dc,
++ 0x1904, 0x9d4b, 0x2011, 0xc635, 0x2204, 0xc0ad, 0x2012, 0x2001,
++ 0xc8d6, 0x2004, 0x00f6, 0x2079, 0x0100, 0x78e3, 0x0000, 0x080c,
++ 0x2a1c, 0x78e2, 0x00fe, 0x0804, 0x9d4b, 0x080c, 0xb03f, 0x2011,
++ 0xc635, 0x2204, 0xc0a5, 0x2012, 0x0006, 0x080c, 0xc023, 0x000e,
++ 0x1904, 0x9d4b, 0xc0b5, 0x2012, 0x2001, 0x0006, 0x080c, 0x5291,
++ 0x2001, 0x0000, 0x080c, 0x527f, 0x00c6, 0x2009, 0x00ef, 0x00f6,
++ 0x2079, 0x0100, 0x79ea, 0x7932, 0x7936, 0x00fe, 0x080c, 0x29f1,
++ 0x00f6, 0x2079, 0xc600, 0x7976, 0x2100, 0x2009, 0x0000, 0x080c,
++ 0x29c7, 0x7952, 0x00fe, 0x8108, 0x080c, 0x52e1, 0x2c00, 0x00ce,
++ 0x1904, 0x9d4b, 0x601a, 0x2001, 0x0002, 0x080c, 0x5291, 0x601f,
++ 0x0001, 0x6003, 0x0001, 0x6007, 0x0002, 0x080c, 0x79df, 0x0018,
++ 0x2001, 0x0001, 0x0011, 0x00de, 0x0005, 0x0066, 0x2030, 0xa005,
++ 0x0170, 0x2001, 0x0007, 0x080c, 0x5291, 0x2001, 0xc600, 0x2004,
++ 0xa086, 0x0003, 0x1120, 0x2001, 0x0007, 0x080c, 0x52be, 0x2600,
++ 0xa005, 0x1150, 0x6010, 0xa080, 0x000e, 0x2004, 0xd0fc, 0x1120,
++ 0x2011, 0x8014, 0x080c, 0x407d, 0x080c, 0x2e6c, 0x080c, 0x95e3,
++ 0x006e, 0x0005, 0x00e6, 0x0026, 0x0016, 0x2071, 0xc600, 0x7084,
++ 0xa086, 0x0014, 0x15f0, 0x7000, 0xa086, 0x0003, 0x1128, 0x6010,
++ 0xa005, 0x1110, 0x080c, 0x40ef, 0x00d6, 0x6018, 0x2068, 0x080c,
++ 0x53df, 0x080c, 0x9d10, 0x00de, 0x080c, 0xa072, 0x1550, 0x00d6,
++ 0x6018, 0x2068, 0x6890, 0x00de, 0xa005, 0x0518, 0x2001, 0x0006,
++ 0x080c, 0x5291, 0x00e6, 0x6010, 0xa075, 0x01a8, 0x7034, 0xa084,
++ 0x00ff, 0xa086, 0x0039, 0x1148, 0x2001, 0x0000, 0x2009, 0x0000,
++ 0x2011, 0x4000, 0x080c, 0xb10d, 0x0030, 0x7007, 0x0000, 0x7037,
++ 0x0103, 0x7033, 0x0200, 0x00ee, 0x080c, 0x2e6c, 0x080c, 0x95e3,
++ 0x0030, 0x080c, 0x9c09, 0x2001, 0x0000, 0x080c, 0x9df5, 0x001e,
++ 0x002e, 0x00ee, 0x0005, 0x2011, 0xc621, 0x2204, 0xa086, 0x0014,
++ 0x1158, 0x2001, 0x0002, 0x080c, 0x5291, 0x6003, 0x0001, 0x6007,
++ 0x0001, 0x080c, 0x79df, 0x0020, 0x2001, 0x0001, 0x080c, 0x9df5,
++ 0x0005, 0x2011, 0xc621, 0x2204, 0xa086, 0x0004, 0x1138, 0x2001,
++ 0x0007, 0x080c, 0x5291, 0x080c, 0x95e3, 0x0020, 0x2001, 0x0001,
++ 0x080c, 0x9df5, 0x0005, 0x000b, 0x0005, 0x9cda, 0x9eac, 0x9cda,
++ 0x9ee2, 0x9cda, 0x9f6f, 0x9ea1, 0x9cd7, 0x9cda, 0x9f84, 0x9cda,
++ 0x9f96, 0x6604, 0xa686, 0x0003, 0x0904, 0x9e1a, 0xa6b6, 0x001e,
++ 0x1110, 0x080c, 0x95e3, 0x0005, 0x00d6, 0x00c6, 0x080c, 0x9fa8,
++ 0x1178, 0x2001, 0x0000, 0x080c, 0x527f, 0x2001, 0x0002, 0x080c,
++ 0x5291, 0x6003, 0x0001, 0x6007, 0x0002, 0x080c, 0x79df, 0x00f8,
++ 0x2009, 0xcc8e, 0x2104, 0xa086, 0x0009, 0x1160, 0x6018, 0x2068,
++ 0x6840, 0xa084, 0x00ff, 0xa005, 0x0170, 0x8001, 0x6842, 0x6017,
++ 0x000a, 0x0068, 0x2009, 0xcc8f, 0x2104, 0xa084, 0xff00, 0xa086,
++ 0x1900, 0x1108, 0x08d0, 0x2001, 0x0001, 0x080c, 0x9df5, 0x00ce,
++ 0x00de, 0x0005, 0x0026, 0x2011, 0x0000, 0x080c, 0x9fb6, 0x00d6,
++ 0x2069, 0xc8e5, 0x2d04, 0xa005, 0x0168, 0x6018, 0x2068, 0x68a0,
++ 0xa086, 0x007e, 0x1138, 0x2069, 0xc61d, 0x2d04, 0x8000, 0x206a,
++ 0x00de, 0x0010, 0x00de, 0x0078, 0x2001, 0x0000, 0x080c, 0x527f,
++ 0x2001, 0x0002, 0x080c, 0x5291, 0x6003, 0x0001, 0x6007, 0x0002,
++ 0x080c, 0x79df, 0x0490, 0x00d6, 0x6010, 0x2068, 0x080c, 0xac91,
++ 0x00de, 0x0108, 0x6a34, 0x080c, 0x9c09, 0x2009, 0xcc8e, 0x2134,
++ 0xa6b4, 0x00ff, 0xa686, 0x0005, 0x0510, 0xa686, 0x000b, 0x01c8,
++ 0x2009, 0xcc8f, 0x2104, 0xa084, 0xff00, 0x1118, 0xa686, 0x0009,
++ 0x01b0, 0xa086, 0x1900, 0x1168, 0xa686, 0x0009, 0x0180, 0x2001,
++ 0x0004, 0x080c, 0x5291, 0x2001, 0x0028, 0x6016, 0x6007, 0x004b,
++ 0x0020, 0x2001, 0x0001, 0x080c, 0x9df5, 0x002e, 0x0005, 0x00d6,
++ 0xa286, 0x0139, 0x0160, 0x6010, 0x2068, 0x080c, 0xac91, 0x0148,
++ 0x6834, 0xa086, 0x0139, 0x0118, 0x6838, 0xd0fc, 0x0110, 0x00de,
++ 0x0c40, 0x6018, 0x2068, 0x6840, 0xa084, 0x00ff, 0xa005, 0x0140,
++ 0x8001, 0x6842, 0x6017, 0x000a, 0x6007, 0x0016, 0x00de, 0x08e8,
++ 0x68a0, 0xa086, 0x007e, 0x1138, 0x00e6, 0x2071, 0xc600, 0x080c,
++ 0x4f02, 0x00ee, 0x0010, 0x080c, 0x2e46, 0x00de, 0x0850, 0x080c,
++ 0x9fb6, 0x1158, 0x2001, 0x0004, 0x080c, 0x5291, 0x6003, 0x0001,
++ 0x6007, 0x0003, 0x080c, 0x79df, 0x0030, 0x080c, 0x9c09, 0x2001,
++ 0x0000, 0x080c, 0x9df5, 0x0005, 0x0489, 0x1158, 0x2001, 0x0008,
++ 0x080c, 0x5291, 0x6003, 0x0001, 0x6007, 0x0005, 0x080c, 0x79df,
++ 0x0020, 0x2001, 0x0001, 0x080c, 0x9df5, 0x0005, 0x00f9, 0x1158,
++ 0x2001, 0x000a, 0x080c, 0x5291, 0x6003, 0x0001, 0x6007, 0x0001,
++ 0x080c, 0x79df, 0x0020, 0x2001, 0x0001, 0x080c, 0x9df5, 0x0005,
++ 0x2009, 0xcc8e, 0x2104, 0xa086, 0x0003, 0x1138, 0x2009, 0xcc8f,
++ 0x2104, 0xa084, 0xff00, 0xa086, 0x2a00, 0x0005, 0xa085, 0x0001,
++ 0x0005, 0x00c6, 0x0016, 0xac88, 0x0006, 0x2164, 0x080c, 0x534c,
++ 0x001e, 0x00ce, 0x0005, 0x00f6, 0x00e6, 0x00d6, 0x0036, 0x0016,
++ 0x6018, 0x2068, 0x2071, 0xc635, 0x2e04, 0xa085, 0x0003, 0x2072,
++ 0x080c, 0xa047, 0x0560, 0x2009, 0xc635, 0x2104, 0xc0cd, 0x200a,
++ 0x2001, 0xc653, 0x2004, 0xd0a4, 0x0158, 0xa006, 0x2020, 0x2009,
++ 0x002a, 0x080c, 0xc190, 0x2001, 0xc60c, 0x200c, 0xc195, 0x2102,
++ 0x2019, 0x002a, 0x2009, 0x0001, 0x080c, 0x2e19, 0x2071, 0xc600,
++ 0x080c, 0x2c62, 0x00c6, 0x0156, 0x20a9, 0x0081, 0x2009, 0x007f,
++ 0x080c, 0x2f41, 0x8108, 0x1f04, 0x9ff8, 0x015e, 0x00ce, 0x080c,
++ 0x9fb9, 0x6813, 0x00ff, 0x6817, 0xfffe, 0x2071, 0xcc80, 0x2079,
++ 0x0100, 0x2e04, 0xa084, 0x00ff, 0x2069, 0xc61c, 0x206a, 0x78e6,
++ 0x0006, 0x8e70, 0x2e04, 0x2069, 0xc61d, 0x206a, 0x78ea, 0x7832,
++ 0x7836, 0x2010, 0xa084, 0xff00, 0x001e, 0xa105, 0x2009, 0xc628,
++ 0x200a, 0x2200, 0xa084, 0x00ff, 0x2008, 0x080c, 0x29f1, 0x080c,
++ 0x5f22, 0x0170, 0x2069, 0xcc8e, 0x2071, 0xc8f9, 0x6810, 0x2072,
++ 0x6814, 0x7006, 0x6818, 0x700a, 0x681c, 0x700e, 0x080c, 0xb009,
++ 0x0040, 0x2001, 0x0006, 0x080c, 0x5291, 0x080c, 0x2e6c, 0x080c,
++ 0x95e3, 0x001e, 0x003e, 0x00de, 0x00ee, 0x00fe, 0x0005, 0x0026,
++ 0x0036, 0x00e6, 0x0156, 0x2019, 0xc628, 0x231c, 0x83ff, 0x01e8,
++ 0x2071, 0xcc80, 0x2e14, 0xa294, 0x00ff, 0x7004, 0xa084, 0xff00,
++ 0xa205, 0xa306, 0x1190, 0x2011, 0xcc96, 0xad98, 0x000a, 0x20a9,
++ 0x0004, 0x080c, 0xa103, 0x1148, 0x2011, 0xcc9a, 0xad98, 0x0006,
++ 0x20a9, 0x0004, 0x080c, 0xa103, 0x1100, 0x015e, 0x00ee, 0x003e,
++ 0x002e, 0x0005, 0x00e6, 0x2071, 0xcc8c, 0x7004, 0xa086, 0x0014,
++ 0x11a8, 0x7008, 0xa086, 0x0800, 0x1188, 0x700c, 0xd0ec, 0x0160,
++ 0xa084, 0x0f00, 0xa086, 0x0100, 0x1138, 0x7024, 0xd0a4, 0x1110,
++ 0xd0ac, 0x0110, 0xa006, 0x0010, 0xa085, 0x0001, 0x00ee, 0x0005,
++ 0x00e6, 0x00d6, 0x00c6, 0x0076, 0x0056, 0x0046, 0x0026, 0x0006,
++ 0x0126, 0x2091, 0x8000, 0x2029, 0xc930, 0x252c, 0x2021, 0xc936,
++ 0x2424, 0x2061, 0xce00, 0x2071, 0xc600, 0x7248, 0x7068, 0xa202,
++ 0x16f0, 0x080c, 0xc1b8, 0x05a0, 0x671c, 0xa786, 0x0001, 0x0580,
++ 0xa786, 0x0007, 0x0568, 0x2500, 0xac06, 0x0550, 0x2400, 0xac06,
++ 0x0538, 0x00c6, 0x6000, 0xa086, 0x0004, 0x1110, 0x080c, 0x1953,
++ 0xa786, 0x0008, 0x1148, 0x080c, 0xae8f, 0x1130, 0x00ce, 0x080c,
++ 0x9c09, 0x080c, 0xae54, 0x00a0, 0x6010, 0x2068, 0x080c, 0xac91,
++ 0x0160, 0xa786, 0x0003, 0x11e8, 0x6837, 0x0103, 0x6b4a, 0x6847,
++ 0x0000, 0x080c, 0x580a, 0x080c, 0xae48, 0x080c, 0xae54, 0x00ce,
++ 0xace0, 0x0018, 0x705c, 0xac02, 0x1210, 0x0804, 0xa0a5, 0x012e,
++ 0x000e, 0x002e, 0x004e, 0x005e, 0x007e, 0x00ce, 0x00de, 0x00ee,
++ 0x0005, 0xa786, 0x0006, 0x1118, 0x080c, 0xc141, 0x0c30, 0xa786,
++ 0x0009, 0x1128, 0x2009, 0x0106, 0x080c, 0x9613, 0x0c00, 0xa786,
++ 0x000a, 0x09a0, 0x0888, 0x220c, 0x2304, 0xa106, 0x1130, 0x8210,
++ 0x8318, 0x1f04, 0xa103, 0xa006, 0x0005, 0x2304, 0xa102, 0x0218,
++ 0x2001, 0x0001, 0x0010, 0x2001, 0x0000, 0xa18d, 0x0001, 0x0005,
++ 0x220c, 0x810f, 0x2304, 0xa106, 0x1130, 0x8210, 0x8318, 0x1f04,
++ 0xa118, 0xa006, 0x0005, 0xa18d, 0x0001, 0x0005, 0x6004, 0xa08a,
++ 0x0080, 0x1a0c, 0x1519, 0x080c, 0xae7e, 0x0120, 0x080c, 0xae8f,
++ 0x0168, 0x0028, 0x080c, 0x2e6c, 0x080c, 0xae8f, 0x0138, 0x080c,
++ 0x7db1, 0x080c, 0x95e3, 0x080c, 0x7e94, 0x0005, 0x080c, 0x9c09,
++ 0x0cb0, 0xa182, 0x0040, 0x0002, 0xa157, 0xa157, 0xa157, 0xa157,
++ 0xa157, 0xa157, 0xa157, 0xa157, 0xa157, 0xa157, 0xa157, 0xa159,
++ 0xa159, 0xa159, 0xa159, 0xa157, 0xa157, 0xa157, 0xa159, 0x080c,
++ 0x1519, 0x600b, 0xffff, 0x6003, 0x0001, 0x6106, 0x080c, 0x7999,
++ 0x0126, 0x2091, 0x8000, 0x080c, 0x7e94, 0x012e, 0x0005, 0xa186,
++ 0x0013, 0x1128, 0x6004, 0xa082, 0x0040, 0x0804, 0xa1f3, 0xa186,
++ 0x0027, 0x11e8, 0x080c, 0x7db1, 0x080c, 0x2e46, 0x00d6, 0x6110,
++ 0x2168, 0x080c, 0xac91, 0x0168, 0x6837, 0x0103, 0x684b, 0x0029,
++ 0x6847, 0x0000, 0x694c, 0xc1c5, 0x694e, 0x080c, 0x580a, 0x080c,
++ 0xae48, 0x00de, 0x080c, 0x95e3, 0x080c, 0x7e94, 0x0005, 0xa186,
++ 0x0014, 0x1120, 0x6004, 0xa082, 0x0040, 0x0428, 0xa186, 0x0046,
++ 0x0138, 0xa186, 0x0045, 0x0120, 0xa186, 0x0047, 0x190c, 0x1519,
++ 0x2001, 0x0109, 0x2004, 0xd084, 0x0198, 0x0126, 0x2091, 0x2800,
++ 0x0006, 0x0016, 0x0026, 0x080c, 0x7873, 0x002e, 0x001e, 0x000e,
++ 0x012e, 0xe000, 0x6000, 0xa086, 0x0002, 0x1110, 0x0804, 0xa231,
++ 0x080c, 0x962a, 0x0005, 0x0002, 0xa1d1, 0xa1cf, 0xa1cf, 0xa1cf,
++ 0xa1cf, 0xa1cf, 0xa1cf, 0xa1cf, 0xa1cf, 0xa1cf, 0xa1cf, 0xa1ec,
++ 0xa1ec, 0xa1ec, 0xa1ec, 0xa1cf, 0xa1ec, 0xa1cf, 0xa1ec, 0x080c,
++ 0x1519, 0x080c, 0x7db1, 0x00d6, 0x6110, 0x2168, 0x080c, 0xac91,
++ 0x0168, 0x6837, 0x0103, 0x684b, 0x0006, 0x6847, 0x0000, 0x6850,
++ 0xc0ec, 0x6852, 0x080c, 0x580a, 0x080c, 0xae48, 0x00de, 0x080c,
++ 0x95e3, 0x080c, 0x7e94, 0x0005, 0x080c, 0x7db1, 0x080c, 0x95e3,
++ 0x080c, 0x7e94, 0x0005, 0x0002, 0xa209, 0xa207, 0xa207, 0xa207,
++ 0xa207, 0xa207, 0xa207, 0xa207, 0xa207, 0xa207, 0xa207, 0xa21b,
++ 0xa21b, 0xa21b, 0xa21b, 0xa207, 0xa22a, 0xa207, 0xa21b, 0x080c,
++ 0x1519, 0x080c, 0x7db1, 0x2001, 0xc8ff, 0x2004, 0x603e, 0x6003,
++ 0x0002, 0x080c, 0x7e94, 0x6010, 0xa088, 0x0013, 0x2104, 0xa085,
++ 0x0400, 0x200a, 0x0005, 0x080c, 0x7db1, 0x2001, 0xc8fd, 0x2004,
++ 0x6016, 0x2001, 0xc8ff, 0x2004, 0x603e, 0x6003, 0x000f, 0x080c,
++ 0x7e94, 0x0005, 0x080c, 0x7db1, 0x080c, 0x95e3, 0x080c, 0x7e94,
++ 0x0005, 0xa182, 0x0040, 0x0002, 0xa247, 0xa247, 0xa247, 0xa247,
++ 0xa247, 0xa249, 0xa32e, 0xa35d, 0xa247, 0xa247, 0xa247, 0xa247,
++ 0xa247, 0xa247, 0xa247, 0xa247, 0xa247, 0xa247, 0xa247, 0x080c,
++ 0x1519, 0x00e6, 0x00d6, 0x603f, 0x0000, 0x2071, 0xcc80, 0x7124,
++ 0x610a, 0x2071, 0xcc8c, 0x6110, 0x2168, 0x7614, 0xa6b4, 0x0fff,
++ 0x86ff, 0x0904, 0xa2f7, 0xa68c, 0x0c00, 0x0518, 0x00f6, 0x2c78,
++ 0x080c, 0x56c3, 0x00fe, 0x01c8, 0x684c, 0xd0ac, 0x01b0, 0x6020,
++ 0xd0dc, 0x1198, 0x6850, 0xd0bc, 0x1180, 0x7318, 0x6814, 0xa306,
++ 0x1904, 0xa30a, 0x731c, 0x6810, 0xa31e, 0x0138, 0xd6d4, 0x0904,
++ 0xa30a, 0x6b14, 0xa305, 0x1904, 0xa30a, 0x7318, 0x6b62, 0x731c,
++ 0x6b5e, 0xa68c, 0x00ff, 0xa186, 0x0002, 0x0518, 0xa186, 0x0028,
++ 0x1128, 0x080c, 0xae6d, 0x684b, 0x001c, 0x00e8, 0xd6dc, 0x01a0,
++ 0x684b, 0x0015, 0x684c, 0xd0ac, 0x0170, 0x6914, 0x6a10, 0x2100,
++ 0xa205, 0x0148, 0x7018, 0xa106, 0x1118, 0x701c, 0xa206, 0x0118,
++ 0x6962, 0x6a5e, 0xc6dc, 0x0038, 0xd6d4, 0x0118, 0x684b, 0x0007,
++ 0x0010, 0x684b, 0x0000, 0x6837, 0x0103, 0x6e46, 0xa01e, 0xd6c4,
++ 0x01f0, 0xa686, 0x0100, 0x1140, 0x2001, 0xcc99, 0x2004, 0xa005,
++ 0x1118, 0xc6c4, 0x0804, 0xa258, 0x7328, 0x732c, 0x6b56, 0x83ff,
++ 0x0170, 0xa38a, 0x0009, 0x0210, 0x2019, 0x0008, 0x0036, 0x2308,
++ 0x2019, 0xcc98, 0xad90, 0x0019, 0x080c, 0xa944, 0x003e, 0xd6cc,
++ 0x0904, 0xa31d, 0x7124, 0x695a, 0x81ff, 0x0904, 0xa31d, 0xa192,
++ 0x0021, 0x1260, 0x2071, 0xcc98, 0x831c, 0x2300, 0xae18, 0xad90,
++ 0x001d, 0x080c, 0xa944, 0x080c, 0xb16e, 0x04b8, 0x6838, 0xd0fc,
++ 0x0120, 0x2009, 0x0020, 0x695a, 0x0c68, 0x00f6, 0x2d78, 0x080c,
++ 0xa8e9, 0x00fe, 0x080c, 0xb16e, 0x080c, 0xa934, 0x0440, 0x00f6,
++ 0x2c78, 0x080c, 0x56c3, 0x00fe, 0x0190, 0x684c, 0xd0ac, 0x0178,
++ 0x6020, 0xd0dc, 0x1160, 0x6850, 0xd0bc, 0x1148, 0x6810, 0x6914,
++ 0xa105, 0x0128, 0x080c, 0xaf6c, 0x00de, 0x00ee, 0x00f0, 0x684b,
++ 0x0000, 0x6837, 0x0103, 0x6e46, 0x684c, 0xd0ac, 0x0130, 0x6810,
++ 0x6914, 0xa115, 0x0110, 0x080c, 0xa4ba, 0x080c, 0x580a, 0x6218,
++ 0x2268, 0x6a3c, 0x82ff, 0x0110, 0x8211, 0x6a3e, 0x080c, 0xaf3a,
++ 0x00de, 0x00ee, 0x1110, 0x080c, 0x95e3, 0x0005, 0x00f6, 0x6003,
++ 0x0003, 0x2079, 0xcc8c, 0x7c04, 0x7b00, 0x7e0c, 0x7d08, 0x6010,
++ 0x2078, 0x784c, 0xd0ac, 0x0138, 0x6003, 0x0002, 0x00fe, 0x0005,
++ 0x2130, 0x2228, 0x0058, 0x2400, 0x797c, 0xa10a, 0x2300, 0x7a80,
++ 0xa213, 0x2600, 0xa102, 0x2500, 0xa203, 0x0e90, 0x7c12, 0x7b16,
++ 0x7e0a, 0x7d0e, 0x00fe, 0x603f, 0x0000, 0x2c10, 0x080c, 0x2068,
++ 0x080c, 0x79fc, 0x080c, 0x7f6e, 0x0005, 0x2001, 0xc8ff, 0x2004,
++ 0x603e, 0x6003, 0x0004, 0x6110, 0x20e1, 0x0005, 0x3d18, 0x3e20,
++ 0x2c10, 0x080c, 0x1870, 0x0005, 0xa182, 0x0040, 0x0002, 0xa382,
++ 0xa382, 0xa382, 0xa382, 0xa382, 0xa384, 0xa417, 0xa382, 0xa382,
++ 0xa42d, 0xa491, 0xa382, 0xa382, 0xa382, 0xa382, 0xa4a0, 0xa382,
++ 0xa382, 0xa382, 0x080c, 0x1519, 0x0076, 0x00f6, 0x00e6, 0x00d6,
++ 0x2071, 0xcc8c, 0x6110, 0x2178, 0x7614, 0xa6b4, 0x0fff, 0x7e46,
++ 0x7f4c, 0xc7e5, 0x7f4e, 0x6218, 0x2268, 0x6a3c, 0x82ff, 0x0110,
++ 0x8211, 0x6a3e, 0x86ff, 0x0904, 0xa412, 0xa694, 0xff00, 0xa284,
++ 0x0c00, 0x0120, 0x7018, 0x7862, 0x701c, 0x785e, 0xa284, 0x0300,
++ 0x0904, 0xa412, 0x080c, 0x1602, 0x090c, 0x1519, 0x2d00, 0x784a,
++ 0x7f4c, 0xc7cd, 0x7f4e, 0x6837, 0x0103, 0x7838, 0x683a, 0x783c,
++ 0x683e, 0x7840, 0x6842, 0x6e46, 0xa68c, 0x0c00, 0x0120, 0x7318,
++ 0x6b62, 0x731c, 0x6b5e, 0xa68c, 0x00ff, 0xa186, 0x0002, 0x0180,
++ 0xa186, 0x0028, 0x1118, 0x684b, 0x001c, 0x0060, 0xd6dc, 0x0118,
++ 0x684b, 0x0015, 0x0038, 0xd6d4, 0x0118, 0x684b, 0x0007, 0x0010,
++ 0x684b, 0x0000, 0x6f4e, 0x7850, 0x6852, 0x7854, 0x6856, 0xa01e,
++ 0xd6c4, 0x0198, 0x7328, 0x732c, 0x6b56, 0x83ff, 0x0170, 0xa38a,
++ 0x0009, 0x0210, 0x2019, 0x0008, 0x0036, 0x2308, 0x2019, 0xcc98,
++ 0xad90, 0x0019, 0x080c, 0xa944, 0x003e, 0xd6cc, 0x01d8, 0x7124,
++ 0x695a, 0x81ff, 0x01b8, 0xa192, 0x0021, 0x1250, 0x2071, 0xcc98,
++ 0x831c, 0x2300, 0xae18, 0xad90, 0x001d, 0x080c, 0xa944, 0x0050,
++ 0x7838, 0xd0fc, 0x0120, 0x2009, 0x0020, 0x695a, 0x0c78, 0x2d78,
++ 0x080c, 0xa8e9, 0x00de, 0x00ee, 0x00fe, 0x007e, 0x0005, 0x00f6,
++ 0x6003, 0x0003, 0x2079, 0xcc8c, 0x7c04, 0x7b00, 0x7e0c, 0x7d08,
++ 0x6010, 0x2078, 0x7c12, 0x7b16, 0x7e0a, 0x7d0e, 0x00fe, 0x2c10,
++ 0x080c, 0x2068, 0x080c, 0x8bdb, 0x0005, 0x00d6, 0x00f6, 0x2c78,
++ 0x080c, 0x56c3, 0x00fe, 0x0120, 0x2001, 0xc8ff, 0x2004, 0x603e,
++ 0x6003, 0x0002, 0x080c, 0x7e47, 0x080c, 0x7f6e, 0x6110, 0x2168,
++ 0x694c, 0xd1e4, 0x0904, 0xa48f, 0xd1cc, 0x0540, 0x6948, 0x6838,
++ 0xd0fc, 0x01e8, 0x0016, 0x684c, 0x0006, 0x6850, 0x0006, 0xad90,
++ 0x000d, 0xa198, 0x000d, 0x2009, 0x0020, 0x0156, 0x21a8, 0x2304,
++ 0x2012, 0x8318, 0x8210, 0x1f04, 0xa457, 0x015e, 0x000e, 0x6852,
++ 0x000e, 0x684e, 0x001e, 0x2168, 0x080c, 0x1629, 0x0418, 0x0016,
++ 0x080c, 0x1629, 0x00de, 0x080c, 0xa934, 0x00e0, 0x6837, 0x0103,
++ 0x6944, 0xa184, 0x00ff, 0xa0b6, 0x0002, 0x0180, 0xa086, 0x0028,
++ 0x1118, 0x684b, 0x001c, 0x0060, 0xd1dc, 0x0118, 0x684b, 0x0015,
++ 0x0038, 0xd1d4, 0x0118, 0x684b, 0x0007, 0x0010, 0x684b, 0x0000,
++ 0x080c, 0x580a, 0x080c, 0xaf3a, 0x1110, 0x080c, 0x95e3, 0x00de,
++ 0x0005, 0x2019, 0x0001, 0x080c, 0x8e79, 0x6003, 0x0002, 0x2001,
++ 0xc8ff, 0x2004, 0x603e, 0x080c, 0x7e47, 0x080c, 0x7f6e, 0x0005,
++ 0x080c, 0x7e47, 0x080c, 0x2e46, 0x00d6, 0x6110, 0x2168, 0x080c,
++ 0xac91, 0x0150, 0x6837, 0x0103, 0x684b, 0x0029, 0x6847, 0x0000,
++ 0x080c, 0x580a, 0x080c, 0xae48, 0x00de, 0x080c, 0x95e3, 0x080c,
++ 0x7f6e, 0x0005, 0x684b, 0x0015, 0xd1fc, 0x0138, 0x684b, 0x0007,
++ 0x8002, 0x8000, 0x810a, 0xa189, 0x0000, 0x6962, 0x685e, 0x0005,
++ 0xa182, 0x0040, 0x0002, 0xa4de, 0xa4de, 0xa4de, 0xa4de, 0xa4de,
++ 0xa4e0, 0xa4de, 0xa59b, 0xa5a7, 0xa4de, 0xa4de, 0xa4de, 0xa4de,
++ 0xa4de, 0xa4de, 0xa4de, 0xa4de, 0xa4de, 0xa4de, 0x080c, 0x1519,
++ 0x0076, 0x00f6, 0x00e6, 0x00d6, 0x2071, 0xcc8c, 0x6110, 0x2178,
++ 0x7614, 0xa6b4, 0x0fff, 0x00f6, 0x2c78, 0x080c, 0x56c3, 0x00fe,
++ 0x0150, 0xa684, 0x00ff, 0x1138, 0x6020, 0xd0f4, 0x0120, 0x080c,
++ 0xaf6c, 0x0804, 0xa596, 0x7e46, 0x7f4c, 0xc7e5, 0x7f4e, 0x6218,
++ 0x2268, 0x6a3c, 0x82ff, 0x0110, 0x8211, 0x6a3e, 0x86ff, 0x0904,
++ 0xa58c, 0xa694, 0xff00, 0xa284, 0x0c00, 0x0120, 0x7018, 0x7862,
++ 0x701c, 0x785e, 0xa284, 0x0300, 0x0904, 0xa58a, 0xa686, 0x0100,
++ 0x1140, 0x2001, 0xcc99, 0x2004, 0xa005, 0x1118, 0xc6c4, 0x7e46,
++ 0x0c28, 0x080c, 0x1602, 0x090c, 0x1519, 0x2d00, 0x784a, 0x7f4c,
++ 0xa7bd, 0x0200, 0x7f4e, 0x6837, 0x0103, 0x7838, 0x683a, 0x783c,
++ 0x683e, 0x7840, 0x6842, 0x6e46, 0xa68c, 0x0c00, 0x0120, 0x7318,
++ 0x6b62, 0x731c, 0x6b5e, 0xa68c, 0x00ff, 0xa186, 0x0002, 0x0180,
++ 0xa186, 0x0028, 0x1118, 0x684b, 0x001c, 0x0060, 0xd6dc, 0x0118,
++ 0x684b, 0x0015, 0x0038, 0xd6d4, 0x0118, 0x684b, 0x0007, 0x0010,
++ 0x684b, 0x0000, 0x6f4e, 0x7850, 0x6852, 0x7854, 0x6856, 0xa01e,
++ 0xd6c4, 0x0198, 0x7328, 0x732c, 0x6b56, 0x83ff, 0x0170, 0xa38a,
++ 0x0009, 0x0210, 0x2019, 0x0008, 0x0036, 0x2308, 0x2019, 0xcc98,
++ 0xad90, 0x0019, 0x080c, 0xa944, 0x003e, 0xd6cc, 0x01d8, 0x7124,
++ 0x695a, 0x81ff, 0x01b8, 0xa192, 0x0021, 0x1250, 0x2071, 0xcc98,
++ 0x831c, 0x2300, 0xae18, 0xad90, 0x001d, 0x080c, 0xa944, 0x0050,
++ 0x7838, 0xd0fc, 0x0120, 0x2009, 0x0020, 0x695a, 0x0c78, 0x2d78,
++ 0x080c, 0xa8e9, 0xd6dc, 0x1110, 0xa006, 0x0030, 0x2001, 0x0001,
++ 0x2071, 0xcc8c, 0x7218, 0x731c, 0x080c, 0x18b8, 0x00de, 0x00ee,
++ 0x00fe, 0x007e, 0x0005, 0x2001, 0xc8ff, 0x2004, 0x603e, 0x20e1,
++ 0x0005, 0x3d18, 0x3e20, 0x2c10, 0x080c, 0x1870, 0x0005, 0x2001,
++ 0xc8ff, 0x2004, 0x603e, 0x00d6, 0x6003, 0x0002, 0x6110, 0x2168,
++ 0x694c, 0xd1e4, 0x0904, 0xa6b2, 0x603f, 0x0000, 0x00f6, 0x2c78,
++ 0x080c, 0x56c3, 0x00fe, 0x0560, 0x6814, 0x6910, 0xa115, 0x0540,
++ 0x6a60, 0xa206, 0x1118, 0x685c, 0xa106, 0x0510, 0x684c, 0xc0e4,
++ 0x684e, 0x6847, 0x0000, 0x6863, 0x0000, 0x685f, 0x0000, 0x6020,
++ 0xd0f4, 0x1158, 0x697c, 0x6810, 0xa102, 0x603a, 0x6980, 0x6814,
++ 0xa103, 0x6036, 0x6020, 0xc0f5, 0x6022, 0x00d6, 0x6018, 0x2068,
++ 0x683c, 0x8000, 0x683e, 0x00de, 0x080c, 0xaf6c, 0x0804, 0xa6b2,
++ 0x694c, 0xd1cc, 0x0904, 0xa682, 0x6948, 0x6838, 0xd0fc, 0x0904,
++ 0xa645, 0x0016, 0x684c, 0x0006, 0x6850, 0x0006, 0x00f6, 0x2178,
++ 0x7944, 0xa184, 0x00ff, 0xa0b6, 0x0002, 0x01e0, 0xa086, 0x0028,
++ 0x1128, 0x684b, 0x001c, 0x784b, 0x001c, 0x00e8, 0xd1dc, 0x0158,
++ 0x684b, 0x0015, 0x784b, 0x0015, 0x080c, 0xb0f6, 0x0118, 0x7944,
++ 0xc1dc, 0x7946, 0x0080, 0xd1d4, 0x0128, 0x684b, 0x0007, 0x784b,
++ 0x0007, 0x0048, 0x684c, 0xd0ac, 0x0130, 0x6810, 0x6914, 0xa115,
++ 0x0110, 0x080c, 0xa4ba, 0x6848, 0x784a, 0x6860, 0x7862, 0x685c,
++ 0x785e, 0xad90, 0x000d, 0xaf98, 0x000d, 0x2009, 0x0020, 0x0156,
++ 0x21a8, 0x2304, 0x2012, 0x8318, 0x8210, 0x1f04, 0xa631, 0x015e,
++ 0x00fe, 0x000e, 0x6852, 0x000e, 0x684e, 0x080c, 0xb16e, 0x001e,
++ 0x2168, 0x080c, 0x1629, 0x0804, 0xa6ad, 0x0016, 0x00f6, 0x2178,
++ 0x7944, 0xa184, 0x00ff, 0xa0b6, 0x0002, 0x01e0, 0xa086, 0x0028,
++ 0x1128, 0x684b, 0x001c, 0x784b, 0x001c, 0x00e8, 0xd1dc, 0x0158,
++ 0x684b, 0x0015, 0x784b, 0x0015, 0x080c, 0xb0f6, 0x0118, 0x7944,
++ 0xc1dc, 0x7946, 0x0080, 0xd1d4, 0x0128, 0x684b, 0x0007, 0x784b,
++ 0x0007, 0x0048, 0x684c, 0xd0ac, 0x0130, 0x6810, 0x6914, 0xa115,
++ 0x0110, 0x080c, 0xa4ba, 0x6860, 0x7862, 0x685c, 0x785e, 0x684c,
++ 0x784e, 0x00fe, 0x080c, 0x1629, 0x00de, 0x080c, 0xb16e, 0x080c,
++ 0xa934, 0x0458, 0x6837, 0x0103, 0x6944, 0xa184, 0x00ff, 0xa0b6,
++ 0x0002, 0x01b0, 0xa086, 0x0028, 0x1118, 0x684b, 0x001c, 0x00d8,
++ 0xd1dc, 0x0148, 0x684b, 0x0015, 0x080c, 0xb0f6, 0x0118, 0x6944,
++ 0xc1dc, 0x6946, 0x0080, 0xd1d4, 0x0118, 0x684b, 0x0007, 0x0058,
++ 0x684b, 0x0000, 0x684c, 0xd0ac, 0x0130, 0x6810, 0x6914, 0xa115,
++ 0x0110, 0x080c, 0xa4ba, 0x080c, 0x580a, 0x080c, 0xaf3a, 0x1110,
++ 0x080c, 0x95e3, 0x00de, 0x0005, 0x080c, 0x7db1, 0x0010, 0x080c,
++ 0x7e47, 0x080c, 0xac91, 0x01c0, 0x00d6, 0x6110, 0x2168, 0x6837,
++ 0x0103, 0x2009, 0xc60c, 0x210c, 0xd18c, 0x11c0, 0xd184, 0x1198,
++ 0x6108, 0x694a, 0xa18e, 0x0029, 0x1110, 0x080c, 0xc4d7, 0x6847,
++ 0x0000, 0x080c, 0x580a, 0x00de, 0x080c, 0x95e3, 0x080c, 0x7e94,
++ 0x080c, 0x7f6e, 0x0005, 0x684b, 0x0004, 0x0c88, 0x684b, 0x0004,
++ 0x0c70, 0xa182, 0x0040, 0x0002, 0xa6f7, 0xa6f7, 0xa6f7, 0xa6f7,
++ 0xa6f7, 0xa6f9, 0xa6f7, 0xa6fc, 0xa6f7, 0xa6f7, 0xa6f7, 0xa6f7,
++ 0xa6f7, 0xa6f7, 0xa6f7, 0xa6f7, 0xa6f7, 0xa6f7, 0xa6f7, 0x080c,
++ 0x1519, 0x080c, 0x95e3, 0x0005, 0x0006, 0x0026, 0xa016, 0x080c,
++ 0x1870, 0x002e, 0x000e, 0x0005, 0xa182, 0x0085, 0x0002, 0xa710,
++ 0xa70e, 0xa70e, 0xa71c, 0xa70e, 0xa70e, 0xa70e, 0x080c, 0x1519,
++ 0x6003, 0x0001, 0x6106, 0x080c, 0x7999, 0x0126, 0x2091, 0x8000,
++ 0x080c, 0x7e94, 0x012e, 0x0005, 0x0026, 0x0056, 0x00d6, 0x00e6,
++ 0x2071, 0xcc80, 0x7224, 0x6212, 0x7220, 0x080c, 0xac81, 0x01a0,
++ 0x2268, 0x6800, 0xa086, 0x0000, 0x0178, 0x6018, 0x6d18, 0xa52e,
++ 0x1158, 0x00c6, 0x2d60, 0x080c, 0xa954, 0x00ce, 0x0128, 0x6803,
++ 0x0002, 0x6007, 0x0086, 0x0010, 0x6007, 0x0087, 0x6003, 0x0001,
++ 0x080c, 0x7999, 0x080c, 0x7e94, 0x00f6, 0x2278, 0x080c, 0x56c3,
++ 0x00fe, 0x0150, 0x6820, 0xd0ec, 0x0138, 0x00c6, 0x2260, 0x603f,
++ 0x0000, 0x080c, 0xaf6c, 0x00ce, 0x00ee, 0x00de, 0x005e, 0x002e,
++ 0x0005, 0xa186, 0x0013, 0x1160, 0x6004, 0xa08a, 0x0085, 0x0a0c,
++ 0x1519, 0xa08a, 0x008c, 0x1a0c, 0x1519, 0xa082, 0x0085, 0x0072,
++ 0xa186, 0x0027, 0x0120, 0xa186, 0x0014, 0x190c, 0x1519, 0x080c,
++ 0x7db1, 0x080c, 0xae54, 0x080c, 0x7e94, 0x0005, 0xa77d, 0xa77f,
++ 0xa77f, 0xa77d, 0xa77d, 0xa77d, 0xa77d, 0x080c, 0x1519, 0x080c,
++ 0x7db1, 0x080c, 0xae54, 0x080c, 0x7e94, 0x0005, 0xa186, 0x0013,
++ 0x1128, 0x6004, 0xa082, 0x0085, 0x2008, 0x04a8, 0xa186, 0x0027,
++ 0x11e8, 0x080c, 0x7db1, 0x080c, 0x2e46, 0x00d6, 0x6010, 0x2068,
++ 0x080c, 0xac91, 0x0150, 0x6837, 0x0103, 0x6847, 0x0000, 0x684b,
++ 0x0029, 0x080c, 0x580a, 0x080c, 0xae48, 0x00de, 0x080c, 0x95e3,
++ 0x080c, 0x7e94, 0x0005, 0x080c, 0x962a, 0x0ce0, 0xa186, 0x0014,
++ 0x1dd0, 0x080c, 0x7db1, 0x00d6, 0x6010, 0x2068, 0x080c, 0xac91,
++ 0x0d60, 0x6837, 0x0103, 0x6847, 0x0000, 0x684b, 0x0006, 0x6850,
++ 0xc0ec, 0x6852, 0x08f0, 0x0002, 0xa7cd, 0xa7cb, 0xa7cb, 0xa7cb,
++ 0xa7cb, 0xa7cb, 0xa7e5, 0x080c, 0x1519, 0x080c, 0x7db1, 0x6030,
++ 0xa08c, 0xff00, 0x810f, 0xa186, 0x0039, 0x0118, 0xa186, 0x0035,
++ 0x1118, 0x2001, 0xc8fd, 0x0010, 0x2001, 0xc8fe, 0x2004, 0x6016,
++ 0x6003, 0x000c, 0x080c, 0x7e94, 0x0005, 0x080c, 0x7db1, 0x6030,
++ 0xa08c, 0xff00, 0x810f, 0xa186, 0x0039, 0x0118, 0xa186, 0x0035,
++ 0x1118, 0x2001, 0xc8fd, 0x0010, 0x2001, 0xc8fe, 0x2004, 0x6016,
++ 0x6003, 0x000e, 0x080c, 0x7e94, 0x0005, 0xa182, 0x008c, 0x1220,
++ 0xa182, 0x0085, 0x0208, 0x001a, 0x080c, 0x962a, 0x0005, 0xa80e,
++ 0xa80e, 0xa80e, 0xa80e, 0xa810, 0xa869, 0xa80e, 0x080c, 0x1519,
++ 0x00d6, 0x00f6, 0x2c78, 0x080c, 0x56c3, 0x00fe, 0x0168, 0x6030,
++ 0xa08c, 0xff00, 0x810f, 0xa186, 0x0039, 0x0118, 0xa186, 0x0035,
++ 0x1118, 0x00de, 0x0804, 0xa87c, 0x080c, 0xac91, 0x1118, 0x080c,
++ 0xae48, 0x00f0, 0x6010, 0x2068, 0x684c, 0xd0e4, 0x1110, 0x080c,
++ 0xae48, 0x6837, 0x0103, 0x6850, 0xd0b4, 0x0128, 0x684b, 0x0006,
++ 0xc0ec, 0x6852, 0x0048, 0xd0bc, 0x0118, 0x684b, 0x0002, 0x0020,
++ 0x684b, 0x0005, 0x080c, 0xaf09, 0x6847, 0x0000, 0x080c, 0x580a,
++ 0x2c68, 0x080c, 0x958d, 0x01c0, 0x6003, 0x0001, 0x6007, 0x001e,
++ 0x600b, 0xffff, 0x2009, 0xcc8e, 0x210c, 0x6136, 0x2009, 0xcc8f,
++ 0x210c, 0x613a, 0x6918, 0x611a, 0x080c, 0xb05e, 0x6950, 0x6152,
++ 0x601f, 0x0001, 0x080c, 0x7999, 0x2d60, 0x080c, 0x95e3, 0x00de,
++ 0x0005, 0x00f6, 0x2c78, 0x080c, 0x56c3, 0x00fe, 0x0598, 0x6030,
++ 0xa08c, 0xff00, 0x810f, 0xa186, 0x0035, 0x0130, 0xa186, 0x001e,
++ 0x0118, 0xa186, 0x0039, 0x1530, 0x00d6, 0x2c68, 0x080c, 0xb141,
++ 0x1904, 0xa8c1, 0x080c, 0x958d, 0x01d8, 0x6106, 0x6003, 0x0001,
++ 0x601f, 0x0001, 0x6918, 0x611a, 0x6928, 0x612a, 0x692c, 0x612e,
++ 0x6930, 0xa18c, 0x00ff, 0x6132, 0x6934, 0x6136, 0x6938, 0x613a,
++ 0x6950, 0x6152, 0x080c, 0xb05e, 0x080c, 0x7999, 0x080c, 0x7e94,
++ 0x2d60, 0x00f8, 0x00d6, 0x6010, 0x2068, 0x080c, 0xac91, 0x01c8,
++ 0x6837, 0x0103, 0x6850, 0xd0b4, 0x0128, 0xc0ec, 0x6852, 0x684b,
++ 0x0006, 0x0048, 0xd0bc, 0x0118, 0x684b, 0x0002, 0x0020, 0x684b,
++ 0x0005, 0x080c, 0xaf09, 0x6847, 0x0000, 0x080c, 0x580a, 0x080c,
++ 0xae48, 0x00de, 0x080c, 0x95e3, 0x0005, 0x0016, 0x00d6, 0x6010,
++ 0x2068, 0x080c, 0xac91, 0x0140, 0x6837, 0x0103, 0x684b, 0x0028,
++ 0x6847, 0x0000, 0x080c, 0x580a, 0x00de, 0x001e, 0xa186, 0x0013,
++ 0x0148, 0xa186, 0x0014, 0x0130, 0xa186, 0x0027, 0x0118, 0x080c,
++ 0x962a, 0x0030, 0x080c, 0x7db1, 0x080c, 0xae54, 0x080c, 0x7e94,
++ 0x0005, 0x0056, 0x0066, 0x00d6, 0x00f6, 0x2029, 0x0001, 0xa182,
++ 0x0101, 0x1208, 0x0010, 0x2009, 0x0100, 0x2130, 0x2069, 0xcc98,
++ 0x831c, 0x2300, 0xad18, 0x2009, 0x0020, 0xaf90, 0x001d, 0x080c,
++ 0xa944, 0xa6b2, 0x0020, 0x7804, 0xa06d, 0x0110, 0x080c, 0x1629,
++ 0x080c, 0x1602, 0x0500, 0x8528, 0x6837, 0x0110, 0x683b, 0x0000,
++ 0x2d20, 0x7c06, 0xa68a, 0x003d, 0x1228, 0x2608, 0xad90, 0x000f,
++ 0x0459, 0x0088, 0xa6b2, 0x003c, 0x2009, 0x003c, 0x2d78, 0xad90,
++ 0x000f, 0x0411, 0x0c28, 0x00fe, 0x852f, 0xa5ad, 0x0003, 0x7d36,
++ 0xa5ac, 0x0000, 0x0028, 0x00fe, 0x852f, 0xa5ad, 0x0003, 0x7d36,
++ 0x00de, 0x006e, 0x005e, 0x0005, 0x00f6, 0x8dff, 0x0158, 0x6804,
++ 0xa07d, 0x0130, 0x6807, 0x0000, 0x080c, 0x580a, 0x2f68, 0x0cb8,
++ 0x080c, 0x580a, 0x00fe, 0x0005, 0x0156, 0xa184, 0x0001, 0x0108,
++ 0x8108, 0x810c, 0x21a8, 0x2304, 0x8007, 0x2012, 0x8318, 0x8210,
++ 0x1f04, 0xa94b, 0x015e, 0x0005, 0x0066, 0x0126, 0x2091, 0x8000,
++ 0x2031, 0x0001, 0x601c, 0xa084, 0x000f, 0x0083, 0x012e, 0x006e,
++ 0x0005, 0x0126, 0x2091, 0x8000, 0x0066, 0x2031, 0x0000, 0x601c,
++ 0xa084, 0x000f, 0x001b, 0x006e, 0x012e, 0x0005, 0xa98b, 0xa98b,
++ 0xa986, 0xa9ad, 0xa979, 0xa986, 0xa9ad, 0xa986, 0xa979, 0x77f4,
++ 0xa986, 0x080c, 0x1519, 0x0036, 0x2019, 0x0010, 0x080c, 0xbd55,
++ 0x601f, 0x0006, 0x6003, 0x0007, 0x003e, 0x0005, 0xa006, 0x0005,
++ 0xa085, 0x0001, 0x0005, 0x00d6, 0x86ff, 0x11d8, 0x6010, 0x2068,
++ 0x080c, 0xac91, 0x01c0, 0x6834, 0xa086, 0x0139, 0x1128, 0x684b,
++ 0x0005, 0x6853, 0x0000, 0x0028, 0xa00e, 0x2001, 0x0005, 0x080c,
++ 0x592e, 0x080c, 0xaf09, 0x080c, 0x580a, 0x080c, 0x95e3, 0xa085,
++ 0x0001, 0x00de, 0x0005, 0xa006, 0x0ce0, 0x6000, 0xa08a, 0x0010,
++ 0x1a0c, 0x1519, 0x000b, 0x0005, 0xa9c4, 0xa9e5, 0xa9c6, 0xaa04,
++ 0xa9e2, 0xa9c4, 0xa986, 0xa98b, 0xa98b, 0xa986, 0xa986, 0xa986,
++ 0xa986, 0xa986, 0xa986, 0xa986, 0x080c, 0x1519, 0x86ff, 0x11b8,
++ 0x601c, 0xa086, 0x0006, 0x0198, 0x00d6, 0x6010, 0x2068, 0x080c,
++ 0xac91, 0x0110, 0x080c, 0xaf09, 0x00de, 0x6007, 0x0085, 0x6003,
++ 0x000b, 0x601f, 0x0002, 0x080c, 0x7999, 0x080c, 0x7e94, 0xa085,
++ 0x0001, 0x0005, 0x080c, 0x1953, 0x0c08, 0x00e6, 0x2071, 0xc927,
++ 0x7024, 0xac06, 0x1110, 0x080c, 0x8dee, 0x601c, 0xa084, 0x000f,
++ 0xa086, 0x0006, 0x1150, 0x0086, 0x0096, 0x2049, 0x0001, 0x2c40,
++ 0x080c, 0x8fc9, 0x009e, 0x008e, 0x0010, 0x080c, 0x8ced, 0x00ee,
++ 0x1928, 0x080c, 0xa986, 0x0005, 0x0036, 0x00e6, 0x2071, 0xc927,
++ 0x703c, 0xac06, 0x1140, 0x2019, 0x0000, 0x080c, 0x8e79, 0x00ee,
++ 0x003e, 0x0804, 0xa9c6, 0x080c, 0x90f6, 0x00ee, 0x003e, 0x1904,
++ 0xa9c6, 0x080c, 0xa986, 0x0005, 0x00c6, 0x601c, 0xa084, 0x000f,
++ 0x0013, 0x00ce, 0x0005, 0xaa35, 0xaaa2, 0xabf0, 0xaa40, 0xae54,
++ 0xaa35, 0xbd47, 0xb185, 0xaaa2, 0x77c3, 0xac5b, 0x080c, 0x1519,
++ 0x080c, 0xae8f, 0x1110, 0x080c, 0x9c09, 0x0005, 0x080c, 0x7db1,
++ 0x080c, 0x7e94, 0x080c, 0x95e3, 0x0005, 0x6017, 0x0001, 0x0005,
++ 0x080c, 0xac91, 0x0120, 0x6010, 0xa080, 0x0019, 0x2c02, 0x6000,
++ 0xa08a, 0x0010, 0x1a0c, 0x1519, 0x000b, 0x0005, 0xaa5e, 0xaa60,
++ 0xaa80, 0xaa92, 0xaa9f, 0xaa5e, 0xaa35, 0xaa35, 0xaa35, 0xaa92,
++ 0xaa92, 0xaa5e, 0xaa5e, 0xaa5e, 0xaa5e, 0xaa9c, 0x080c, 0x1519,
++ 0x00e6, 0x6010, 0x2070, 0x7050, 0xc0b5, 0x7052, 0x2071, 0xc927,
++ 0x7024, 0xac06, 0x0190, 0x080c, 0x8ced, 0x6007, 0x0085, 0x6003,
++ 0x000b, 0x601f, 0x0002, 0x2001, 0xc8fe, 0x2004, 0x6016, 0x080c,
++ 0x7999, 0x080c, 0x7e94, 0x00ee, 0x0005, 0x6017, 0x0001, 0x0cd8,
++ 0x00d6, 0x6010, 0x2068, 0x6850, 0xc0b5, 0x6852, 0x00de, 0x6007,
++ 0x0085, 0x6003, 0x000b, 0x601f, 0x0002, 0x080c, 0x7999, 0x080c,
++ 0x7e94, 0x0005, 0x00d6, 0x6017, 0x0001, 0x6010, 0x2068, 0x6850,
++ 0xc0b5, 0x6852, 0x00de, 0x0005, 0x080c, 0x95e3, 0x0005, 0x080c,
++ 0x1953, 0x08f0, 0x6000, 0xa08a, 0x0010, 0x1a0c, 0x1519, 0x000b,
++ 0x0005, 0xaab9, 0xaa3d, 0xaabb, 0xaab9, 0xaabb, 0xaabb, 0xaa36,
++ 0xaab9, 0xaa30, 0xaa30, 0xaab9, 0xaab9, 0xaab9, 0xaab9, 0xaab9,
++ 0xaab9, 0x080c, 0x1519, 0x00d6, 0x6018, 0x2068, 0x6804, 0xa084,
++ 0x00ff, 0x00de, 0xa08a, 0x000c, 0x1a0c, 0x1519, 0x000b, 0x0005,
++ 0xaad4, 0xab96, 0xaad6, 0xab14, 0xaad6, 0xab14, 0xaad6, 0xaae4,
++ 0xaad4, 0xab14, 0xaad4, 0xab00, 0x080c, 0x1519, 0x6004, 0xa08e,
++ 0x0016, 0x05a8, 0xa08e, 0x0004, 0x0590, 0xa08e, 0x0002, 0x0578,
++ 0xa08e, 0x004b, 0x0904, 0xab92, 0x6004, 0x080c, 0xae8f, 0x0904,
++ 0xabaf, 0xa08e, 0x0021, 0x0904, 0xabb3, 0xa08e, 0x0022, 0x0904,
++ 0xabaf, 0xa08e, 0x003d, 0x0904, 0xabb3, 0xa08e, 0x0039, 0x0904,
++ 0xabb7, 0xa08e, 0x0035, 0x0904, 0xabb7, 0xa08e, 0x001e, 0x0188,
++ 0xa08e, 0x0001, 0x1150, 0x00d6, 0x6018, 0x2068, 0x6804, 0xa084,
++ 0x00ff, 0x00de, 0xa086, 0x0006, 0x0110, 0x080c, 0x2e46, 0x080c,
++ 0x9c09, 0x080c, 0xae54, 0x0005, 0x00c6, 0x00d6, 0x6104, 0xa186,
++ 0x0016, 0x0904, 0xab83, 0xa186, 0x0002, 0x15d8, 0x2001, 0xc635,
++ 0x2004, 0xd08c, 0x1198, 0x080c, 0x5f22, 0x1180, 0x2001, 0xc8e6,
++ 0x2003, 0x0001, 0x2001, 0xc600, 0x2003, 0x0001, 0xa085, 0x0001,
++ 0x080c, 0x5f66, 0x080c, 0x5e5a, 0x0804, 0xabd9, 0x6018, 0x2068,
++ 0x2001, 0xc635, 0x2004, 0xd0ac, 0x1904, 0xabd9, 0x68a0, 0xd0bc,
++ 0x1904, 0xabd9, 0x6840, 0xa084, 0x00ff, 0xa005, 0x0190, 0x8001,
++ 0x6842, 0x6013, 0x0000, 0x601f, 0x0007, 0x6017, 0x0398, 0x603f,
++ 0x0000, 0x080c, 0x958d, 0x0128, 0x2d00, 0x601a, 0x601f, 0x0001,
++ 0x0450, 0x00de, 0x00ce, 0x6004, 0xa08e, 0x0002, 0x11a8, 0x6018,
++ 0xa080, 0x0028, 0x2004, 0xa086, 0x007e, 0x1170, 0x2009, 0xc635,
++ 0x2104, 0xc085, 0x200a, 0x00e6, 0x2071, 0xc600, 0x080c, 0x4f02,
++ 0x00ee, 0x080c, 0x9c09, 0x0020, 0x080c, 0x9c09, 0x080c, 0x2e46,
++ 0x00e6, 0x0126, 0x2091, 0x8000, 0x080c, 0x2e6c, 0x012e, 0x00ee,
++ 0x080c, 0xae54, 0x0005, 0x2001, 0x0002, 0x080c, 0x5291, 0x6003,
++ 0x0001, 0x6007, 0x0002, 0x080c, 0x79df, 0x080c, 0x7e94, 0x00de,
++ 0x00ce, 0x0c80, 0x080c, 0x2e6c, 0x0804, 0xab0f, 0x00c6, 0x00d6,
++ 0x6104, 0xa186, 0x0016, 0x0d38, 0x6018, 0x2068, 0x6840, 0xa084,
++ 0x00ff, 0xa005, 0x0904, 0xab59, 0x8001, 0x6842, 0x6003, 0x0001,
++ 0x080c, 0x79df, 0x080c, 0x7e94, 0x00de, 0x00ce, 0x0898, 0x080c,
++ 0x9c09, 0x0804, 0xab11, 0x080c, 0x9c37, 0x0804, 0xab11, 0x00d6,
++ 0x2c68, 0x6104, 0x080c, 0xb141, 0x00de, 0x0118, 0x080c, 0x95e3,
++ 0x00b8, 0x6004, 0x8007, 0x6130, 0xa18c, 0x00ff, 0xa105, 0x6032,
++ 0x6007, 0x0085, 0x6003, 0x000b, 0x601f, 0x0002, 0x6038, 0x600a,
++ 0x2001, 0xc8fe, 0x2004, 0x6016, 0x080c, 0x7999, 0x080c, 0x7e94,
++ 0x0005, 0x00de, 0x00ce, 0x080c, 0x9c09, 0x080c, 0x2e46, 0x00e6,
++ 0x0126, 0x2091, 0x8000, 0x080c, 0x2e6c, 0x6013, 0x0000, 0x601f,
++ 0x0007, 0x6017, 0x0398, 0x603f, 0x0000, 0x012e, 0x00ee, 0x0005,
++ 0x6000, 0xa08a, 0x0010, 0x1a0c, 0x1519, 0x000b, 0x0005, 0xac07,
++ 0xac07, 0xac07, 0xac07, 0xac07, 0xac07, 0xac07, 0xac07, 0xac07,
++ 0xaa35, 0xac07, 0xaa3d, 0xac09, 0xaa3d, 0xac16, 0xac07, 0x080c,
++ 0x1519, 0x6004, 0xa086, 0x008b, 0x0148, 0x6007, 0x008b, 0x6003,
++ 0x000d, 0x080c, 0x7999, 0x080c, 0x7e94, 0x0005, 0x080c, 0xae48,
++ 0x080c, 0xac91, 0x0580, 0x080c, 0x2e46, 0x00d6, 0x080c, 0xac91,
++ 0x0168, 0x6010, 0x2068, 0x6837, 0x0103, 0x684b, 0x0006, 0x6847,
++ 0x0000, 0x6850, 0xc0ed, 0x6852, 0x080c, 0x580a, 0x2c68, 0x080c,
++ 0x958d, 0x0150, 0x6818, 0x601a, 0x080c, 0xb05e, 0x00c6, 0x2d60,
++ 0x080c, 0xae54, 0x00ce, 0x0008, 0x2d60, 0x00de, 0x6013, 0x0000,
++ 0x601f, 0x0001, 0x6007, 0x0001, 0x6003, 0x0001, 0x080c, 0x79df,
++ 0x080c, 0x7e94, 0x0078, 0x6030, 0xa08c, 0xff00, 0x810f, 0xa186,
++ 0x0039, 0x0118, 0xa186, 0x0035, 0x1118, 0x080c, 0x2e46, 0x08b0,
++ 0x080c, 0xae54, 0x0005, 0x6000, 0xa08a, 0x0010, 0x1a0c, 0x1519,
++ 0x000b, 0x0005, 0xac72, 0xac72, 0xac72, 0xac74, 0xac74, 0xac72,
++ 0xac72, 0xac72, 0xac72, 0xac72, 0xac72, 0xac72, 0xac72, 0xac72,
++ 0xac72, 0xac72, 0x080c, 0x1519, 0x080c, 0x90f6, 0x190c, 0x1519,
++ 0x6110, 0x2168, 0x684b, 0x0006, 0x080c, 0x580a, 0x080c, 0x95e3,
++ 0x0005, 0xa284, 0x0007, 0x1158, 0xa282, 0xce00, 0x0240, 0x2001,
++ 0xc617, 0x2004, 0xa202, 0x1218, 0xa085, 0x0001, 0x0005, 0xa006,
++ 0x0ce8, 0x0026, 0x6210, 0xa294, 0xf000, 0x002e, 0x0005, 0x00e6,
++ 0x00c6, 0x0036, 0x0006, 0x0126, 0x2091, 0x8000, 0x2061, 0xce00,
++ 0x2071, 0xc600, 0x7348, 0x7068, 0xa302, 0x12a8, 0x601c, 0xa206,
++ 0x1160, 0x080c, 0xafe9, 0x0148, 0x080c, 0xae8f, 0x1110, 0x080c,
++ 0x9c09, 0x00c6, 0x080c, 0x95e3, 0x00ce, 0xace0, 0x0018, 0x705c,
++ 0xac02, 0x1208, 0x0c38, 0x012e, 0x000e, 0x003e, 0x00ce, 0x00ee,
++ 0x0005, 0x00e6, 0x00c6, 0x0016, 0xa188, 0xc77b, 0x210c, 0x81ff,
++ 0x0128, 0x2061, 0xca3c, 0x611a, 0x080c, 0x2e46, 0xa006, 0x0010,
++ 0xa085, 0x0001, 0x001e, 0x00ce, 0x00ee, 0x0005, 0x00c6, 0x0056,
++ 0x0126, 0x2091, 0x8000, 0x00c6, 0x080c, 0x958d, 0x005e, 0x0180,
++ 0x6612, 0x651a, 0x080c, 0xb05e, 0x601f, 0x0003, 0x2009, 0x004b,
++ 0x080c, 0x9613, 0xa085, 0x0001, 0x012e, 0x005e, 0x00ce, 0x0005,
++ 0xa006, 0x0cd0, 0x00c6, 0x0056, 0x0126, 0x2091, 0x8000, 0x62a0,
++ 0x00c6, 0x080c, 0xaf0d, 0x005e, 0x0550, 0x6013, 0x0000, 0x651a,
++ 0x080c, 0xb05e, 0x601f, 0x0003, 0x0016, 0x00c6, 0x2560, 0x080c,
++ 0x553e, 0x00ce, 0x080c, 0x7b16, 0x0076, 0x2039, 0x0000, 0x080c,
++ 0x7a0e, 0x2c08, 0x080c, 0xbef7, 0x007e, 0x001e, 0xd184, 0x0128,
++ 0x080c, 0x95e3, 0xa085, 0x0001, 0x0030, 0x2009, 0x004c, 0x080c,
++ 0x9613, 0xa085, 0x0001, 0x012e, 0x005e, 0x00ce, 0x0005, 0xa006,
++ 0x0cd0, 0x00f6, 0x00c6, 0x0046, 0x00c6, 0x080c, 0x958d, 0x2c78,
++ 0x00ce, 0x0180, 0x7e12, 0x2c00, 0x781a, 0x781f, 0x0003, 0x2021,
++ 0x0005, 0x080c, 0xad87, 0x2f60, 0x2009, 0x004d, 0x080c, 0x9613,
++ 0xa085, 0x0001, 0x004e, 0x00ce, 0x00fe, 0x0005, 0x00f6, 0x00c6,
++ 0x0046, 0x00c6, 0x080c, 0x958d, 0x2c78, 0x00ce, 0x0178, 0x7e12,
++ 0x2c00, 0x781a, 0x781f, 0x0003, 0x2021, 0x0005, 0x0481, 0x2f60,
++ 0x2009, 0x004e, 0x080c, 0x9613, 0xa085, 0x0001, 0x004e, 0x00ce,
++ 0x00fe, 0x0005, 0x00f6, 0x00c6, 0x0046, 0x00c6, 0x080c, 0x958d,
++ 0x2c78, 0x00ce, 0x01c0, 0x7e12, 0x2c00, 0x781a, 0x781f, 0x0003,
++ 0x2021, 0x0004, 0x00a1, 0x2001, 0xc8e7, 0x2004, 0xd0fc, 0x0120,
++ 0x2f60, 0x080c, 0x95e3, 0x0028, 0x2f60, 0x2009, 0x0052, 0x080c,
++ 0x9613, 0xa085, 0x0001, 0x004e, 0x00ce, 0x00fe, 0x0005, 0x0096,
++ 0x0076, 0x0126, 0x2091, 0x8000, 0x080c, 0x54e0, 0x0118, 0x2001,
++ 0xad8c, 0x0028, 0x080c, 0x54b0, 0x0158, 0x2001, 0xad92, 0x0006,
++ 0xa00e, 0x2400, 0x080c, 0x592e, 0x080c, 0x580a, 0x000e, 0x0807,
++ 0x2418, 0x080c, 0x7d50, 0x62a0, 0x0086, 0x2041, 0x0001, 0x2039,
++ 0x0001, 0x2608, 0x080c, 0x7b2f, 0x008e, 0x080c, 0x7a0e, 0x2f08,
++ 0x2648, 0x080c, 0xbef7, 0x613c, 0x81ff, 0x090c, 0x7be4, 0x080c,
++ 0x7e94, 0x012e, 0x007e, 0x009e, 0x0005, 0x00c6, 0x0126, 0x2091,
++ 0x8000, 0x00c6, 0x080c, 0x958d, 0x001e, 0x0188, 0x660a, 0x611a,
++ 0x080c, 0xb05e, 0x601f, 0x0001, 0x2d00, 0x6012, 0x2009, 0x001f,
++ 0x080c, 0x9613, 0xa085, 0x0001, 0x012e, 0x00ce, 0x0005, 0xa006,
++ 0x0cd8, 0x00c6, 0x0126, 0x2091, 0x8000, 0x00c6, 0x080c, 0x958d,
++ 0x001e, 0x0188, 0x660a, 0x611a, 0x080c, 0xb05e, 0x601f, 0x0008,
++ 0x2d00, 0x6012, 0x2009, 0x0021, 0x080c, 0x9613, 0xa085, 0x0001,
++ 0x012e, 0x00ce, 0x0005, 0xa006, 0x0cd8, 0x00c6, 0x0126, 0x2091,
++ 0x8000, 0x00c6, 0x080c, 0x958d, 0x001e, 0x0188, 0x660a, 0x611a,
++ 0x080c, 0xb05e, 0x601f, 0x0001, 0x2d00, 0x6012, 0x2009, 0x003d,
++ 0x080c, 0x9613, 0xa085, 0x0001, 0x012e, 0x00ce, 0x0005, 0xa006,
++ 0x0cd8, 0x00c6, 0x0126, 0x2091, 0x8000, 0x00c6, 0x080c, 0xaf0d,
++ 0x001e, 0x0180, 0x611a, 0x080c, 0xb05e, 0x601f, 0x0001, 0x2d00,
++ 0x6012, 0x2009, 0x0000, 0x080c, 0x9613, 0xa085, 0x0001, 0x012e,
++ 0x00ce, 0x0005, 0xa006, 0x0cd8, 0x00c6, 0x0126, 0x2091, 0x8000,
++ 0x00c6, 0x080c, 0x958d, 0x001e, 0x0188, 0x660a, 0x611a, 0x080c,
++ 0xb05e, 0x601f, 0x0001, 0x2d00, 0x6012, 0x2009, 0x0044, 0x080c,
++ 0x9613, 0xa085, 0x0001, 0x012e, 0x00ce, 0x0005, 0xa006, 0x0cd8,
++ 0x0026, 0x00d6, 0x6218, 0x2268, 0x6a3c, 0x82ff, 0x0110, 0x8211,
++ 0x6a3e, 0x00de, 0x002e, 0x0005, 0x0006, 0x6000, 0xa086, 0x0000,
++ 0x0190, 0x6013, 0x0000, 0x601f, 0x0007, 0x2001, 0xc8fd, 0x2004,
++ 0x0006, 0xa082, 0x0051, 0x000e, 0x0208, 0x8004, 0x6016, 0x080c,
++ 0xc3e2, 0x603f, 0x0000, 0x000e, 0x0005, 0x0066, 0x00c6, 0x00d6,
++ 0x2031, 0xc653, 0x2634, 0xd6e4, 0x0128, 0x6618, 0x2660, 0x6e48,
++ 0x080c, 0x5469, 0x00de, 0x00ce, 0x006e, 0x0005, 0x0006, 0x0016,
++ 0x6004, 0xa08e, 0x0002, 0x0140, 0xa08e, 0x0003, 0x0128, 0xa08e,
++ 0x0004, 0x0110, 0xa085, 0x0001, 0x001e, 0x000e, 0x0005, 0x0006,
++ 0x00d6, 0x6010, 0xa06d, 0x0148, 0x6834, 0xa086, 0x0139, 0x0138,
++ 0x6838, 0xd0fc, 0x0110, 0xa006, 0x0010, 0xa085, 0x0001, 0x00de,
++ 0x000e, 0x0005, 0x00c6, 0x0126, 0x2091, 0x8000, 0x00c6, 0x080c,
++ 0x958d, 0x001e, 0x0190, 0x611a, 0x080c, 0xb05e, 0x601f, 0x0001,
++ 0x2d00, 0x6012, 0x080c, 0x2e46, 0x2009, 0x0028, 0x080c, 0x9613,
++ 0xa085, 0x0001, 0x012e, 0x00ce, 0x0005, 0xa006, 0x0cd8, 0xa186,
++ 0x0015, 0x1178, 0x2011, 0xc621, 0x2204, 0xa086, 0x0074, 0x1148,
++ 0x080c, 0x9fb9, 0x6003, 0x0001, 0x6007, 0x0029, 0x080c, 0x79df,
++ 0x0020, 0x080c, 0x9c09, 0x080c, 0x95e3, 0x0005, 0xa186, 0x0016,
++ 0x1128, 0x2001, 0x0004, 0x080c, 0x5291, 0x00e8, 0xa186, 0x0015,
++ 0x11e8, 0x2011, 0xc621, 0x2204, 0xa086, 0x0014, 0x11b8, 0x00d6,
++ 0x6018, 0x2068, 0x080c, 0x53df, 0x00de, 0x080c, 0xa072, 0x1170,
++ 0x00d6, 0x6018, 0x2068, 0x6890, 0x00de, 0xa005, 0x0138, 0x2001,
++ 0x0006, 0x080c, 0x5291, 0x080c, 0x9767, 0x0020, 0x080c, 0x9c09,
++ 0x080c, 0x95e3, 0x0005, 0x6848, 0xa086, 0x0005, 0x1108, 0x0009,
++ 0x0005, 0x6850, 0xc0ad, 0x6852, 0x0005, 0x00e6, 0x0126, 0x2071,
++ 0xc600, 0x2091, 0x8000, 0x7548, 0xa582, 0x0001, 0x0608, 0x704c,
++ 0x2060, 0x6000, 0xa086, 0x0000, 0x0148, 0xace0, 0x0018, 0x705c,
++ 0xac02, 0x1208, 0x0cb0, 0x2061, 0xce00, 0x0c98, 0x6003, 0x0008,
++ 0x8529, 0x754a, 0xaca8, 0x0018, 0x705c, 0xa502, 0x1230, 0x754e,
++ 0xa085, 0x0001, 0x012e, 0x00ee, 0x0005, 0x704f, 0xce00, 0x0cc0,
++ 0xa006, 0x0cc0, 0x00e6, 0x2071, 0xcc8c, 0x7014, 0xd0e4, 0x0150,
++ 0x6013, 0x0000, 0x6003, 0x0001, 0x6007, 0x0050, 0x080c, 0x7999,
++ 0x080c, 0x7e94, 0x00ee, 0x0005, 0x00c6, 0x00f6, 0x2c78, 0x080c,
++ 0x56c3, 0x00fe, 0x0120, 0x601c, 0xa084, 0x000f, 0x0013, 0x00ce,
++ 0x0005, 0xaa35, 0xaf64, 0xaf67, 0xaf6a, 0xc1cf, 0xc1ea, 0xc1ed,
++ 0xaa35, 0xaa35, 0x080c, 0x1519, 0xe000, 0xe000, 0x0005, 0xe000,
++ 0xe000, 0x0005, 0x0009, 0x0005, 0x00f6, 0x2c78, 0x080c, 0x56c3,
++ 0x0538, 0x080c, 0x958d, 0x1128, 0x2001, 0xc8ff, 0x2004, 0x783e,
++ 0x00f8, 0x7818, 0x601a, 0x080c, 0xb05e, 0x781c, 0xa086, 0x0003,
++ 0x0128, 0x7808, 0x6036, 0x2f00, 0x603a, 0x0020, 0x7808, 0x603a,
++ 0x2f00, 0x6036, 0x602a, 0x601f, 0x0001, 0x6007, 0x0035, 0x6003,
++ 0x0001, 0x7950, 0x6152, 0x080c, 0x7999, 0x080c, 0x7e94, 0x2f60,
++ 0x00fe, 0x0005, 0x0016, 0x00f6, 0x682c, 0x6032, 0xa08e, 0x0001,
++ 0x0138, 0xa086, 0x0005, 0x0140, 0xa006, 0x602a, 0x602e, 0x00a0,
++ 0x6820, 0xc0f4, 0xc0d5, 0x6822, 0x6810, 0x2078, 0x787c, 0x6938,
++ 0xa102, 0x7880, 0x6934, 0xa103, 0x1e78, 0x6834, 0x602a, 0x6838,
++ 0xa084, 0xfffc, 0x683a, 0x602e, 0x2d00, 0x6036, 0x6808, 0x603a,
++ 0x6918, 0x611a, 0x6950, 0x6152, 0x601f, 0x0001, 0x6007, 0x0039,
++ 0x6003, 0x0001, 0x080c, 0x7999, 0x6803, 0x0002, 0x00fe, 0x001e,
++ 0x0005, 0x00f6, 0x2c78, 0x080c, 0x56c3, 0x1118, 0xa085, 0x0001,
++ 0x0070, 0x6020, 0xd0f4, 0x1150, 0xc0f5, 0x6022, 0x6010, 0x2078,
++ 0x7828, 0x603a, 0x782c, 0x6036, 0x080c, 0x1953, 0xa006, 0x00fe,
++ 0x0005, 0x0006, 0x0016, 0x6004, 0xa08e, 0x0034, 0x01b8, 0xa08e,
++ 0x0035, 0x01a0, 0xa08e, 0x0036, 0x0188, 0xa08e, 0x0037, 0x0170,
++ 0xa08e, 0x0038, 0x0158, 0xa08e, 0x0039, 0x0140, 0xa08e, 0x003a,
++ 0x0128, 0xa08e, 0x003b, 0x0110, 0xa085, 0x0001, 0x001e, 0x000e,
++ 0x0005, 0x0006, 0x0016, 0x0026, 0x0036, 0x00e6, 0x2001, 0xc8f9,
++ 0x200c, 0x8000, 0x2014, 0x2001, 0x0032, 0x080c, 0x783f, 0x2001,
++ 0xc8fd, 0x82ff, 0x1110, 0x2011, 0x0014, 0x2202, 0x2001, 0xc8fb,
++ 0x200c, 0x8000, 0x2014, 0x2071, 0xc8d5, 0x711a, 0x721e, 0x2001,
++ 0x0064, 0x080c, 0x783f, 0x2001, 0xc8fe, 0x82ff, 0x1110, 0x2011,
++ 0x0014, 0x2202, 0x2009, 0xc8ff, 0xa280, 0x000a, 0x200a, 0x080c,
++ 0x572c, 0x00ee, 0x003e, 0x002e, 0x001e, 0x000e, 0x0005, 0x0006,
++ 0x00e6, 0x2001, 0xc8fd, 0x2003, 0x0028, 0x2001, 0xc8fe, 0x2003,
++ 0x0014, 0x2071, 0xc8d5, 0x701b, 0x0000, 0x701f, 0x07d0, 0x2001,
++ 0xc8ff, 0x2003, 0x001e, 0x00ee, 0x000e, 0x0005, 0x00d6, 0x6054,
++ 0xa06d, 0x0110, 0x080c, 0x1619, 0x00de, 0x0005, 0x0005, 0x00c6,
++ 0x0126, 0x2091, 0x8000, 0x00c6, 0x080c, 0x958d, 0x001e, 0x0178,
++ 0x611a, 0x0ca1, 0x601f, 0x0001, 0x2d00, 0x6012, 0x2009, 0x0033,
++ 0x080c, 0x9613, 0xa085, 0x0001, 0x012e, 0x00ce, 0x0005, 0xa006,
++ 0x0cd8, 0x00d6, 0x00e6, 0x00f6, 0x2071, 0xc600, 0xa186, 0x0015,
++ 0x1500, 0x7084, 0xa086, 0x0018, 0x11e0, 0x6010, 0x2068, 0x6a3c,
++ 0xd2e4, 0x1160, 0x2c78, 0x080c, 0x80af, 0x01d8, 0x7070, 0x6a50,
++ 0xa206, 0x1160, 0x7074, 0x6a54, 0xa206, 0x1140, 0x6218, 0xa290,
++ 0x0028, 0x2214, 0x2009, 0x0000, 0x080c, 0x2e8b, 0x080c, 0x9767,
++ 0x0020, 0x080c, 0x9c09, 0x080c, 0x95e3, 0x00fe, 0x00ee, 0x00de,
++ 0x0005, 0x7054, 0x6a54, 0xa206, 0x0d48, 0x0c80, 0x00c6, 0x0126,
++ 0x2091, 0x8000, 0x00c6, 0x080c, 0x958d, 0x001e, 0x0180, 0x611a,
++ 0x080c, 0xb05e, 0x601f, 0x0001, 0x2d00, 0x6012, 0x2009, 0x0043,
++ 0x080c, 0x9613, 0xa085, 0x0001, 0x012e, 0x00ce, 0x0005, 0xa006,
++ 0x0cd8, 0x00d6, 0x00e6, 0x00f6, 0x2071, 0xc600, 0xa186, 0x0015,
++ 0x11c0, 0x7084, 0xa086, 0x0004, 0x11a0, 0x6010, 0xa0e8, 0x000f,
++ 0x2c78, 0x080c, 0x80af, 0x01a8, 0x7070, 0x6a08, 0xa206, 0x1130,
++ 0x7074, 0x6a0c, 0xa206, 0x1110, 0x080c, 0x2e46, 0x080c, 0x9767,
++ 0x0020, 0x080c, 0x9c09, 0x080c, 0x95e3, 0x00fe, 0x00ee, 0x00de,
++ 0x0005, 0x7054, 0x6a0c, 0xa206, 0x0d78, 0x0c80, 0x0016, 0x0026,
++ 0x684c, 0xd0ac, 0x0178, 0x6914, 0x6a10, 0x2100, 0xa205, 0x0150,
++ 0x6860, 0xa106, 0x1118, 0x685c, 0xa206, 0x0120, 0x6962, 0x6a5e,
++ 0xa085, 0x0001, 0x002e, 0x001e, 0x0005, 0x00d6, 0x0036, 0x6310,
++ 0x2368, 0x684a, 0x6952, 0xa29e, 0x4000, 0x11a0, 0x00c6, 0x6318,
++ 0x2360, 0x2009, 0x0000, 0x6838, 0xd0f4, 0x1140, 0x080c, 0x55de,
++ 0x1108, 0xc185, 0x6000, 0xd0bc, 0x0108, 0xc18d, 0x6a66, 0x696a,
++ 0x00ce, 0x0080, 0x6a66, 0x3918, 0xa398, 0x0006, 0x231c, 0x686b,
++ 0x0004, 0x6b72, 0x00c6, 0x6318, 0x2360, 0x6004, 0xa084, 0x00ff,
++ 0x686e, 0x00ce, 0x080c, 0x580a, 0x6013, 0x0000, 0x003e, 0x00de,
++ 0x0005, 0x00c6, 0x0026, 0x0016, 0xa186, 0x0035, 0x0110, 0x6a34,
++ 0x0008, 0x6a28, 0x080c, 0xac81, 0x01f0, 0x2260, 0x611c, 0xa186,
++ 0x0003, 0x0118, 0xa186, 0x0006, 0x1190, 0x6834, 0xa206, 0x0140,
++ 0x6838, 0xa206, 0x1160, 0x6108, 0x6834, 0xa106, 0x1140, 0x0020,
++ 0x6008, 0x6938, 0xa106, 0x1118, 0x6018, 0x6918, 0xa106, 0x001e,
++ 0x002e, 0x00ce, 0x0005, 0xa085, 0x0001, 0x0cc8, 0x6944, 0xd1cc,
++ 0x0198, 0xa18c, 0x00ff, 0xa18e, 0x0002, 0x1170, 0xad88, 0x001e,
++ 0x210c, 0xa18c, 0x0f00, 0x810f, 0xa18e, 0x0001, 0x1128, 0x6810,
++ 0x6914, 0xa115, 0x190c, 0xa4ba, 0x0005, 0x080c, 0x95e3, 0x0804,
++ 0x7e94, 0x0066, 0x6000, 0xa0b2, 0x0010, 0x1a0c, 0x1519, 0x0013,
++ 0x006e, 0x0005, 0xb1a2, 0xb6b9, 0xb7e1, 0xb1a2, 0xb1a2, 0xb1a2,
++ 0xb1a2, 0xb1a2, 0xb1da, 0xb865, 0xb1a2, 0xb1a2, 0xb1a2, 0xb1a2,
++ 0xb1a2, 0xb1a2, 0x080c, 0x1519, 0x0066, 0x6000, 0xa0b2, 0x0010,
++ 0x1a0c, 0x1519, 0x0013, 0x006e, 0x0005, 0xb1bd, 0xbcec, 0xb1bd,
++ 0xb1bd, 0xb1bd, 0xb1bd, 0xb1bd, 0xb1bd, 0xbcae, 0xbd34, 0xb1bd,
++ 0xc314, 0xc344, 0xc314, 0xc344, 0xb1bd, 0x080c, 0x1519, 0x0066,
++ 0x6000, 0xa0b2, 0x0010, 0x1a0c, 0x1519, 0x0013, 0x006e, 0x0005,
++ 0xb1d8, 0xb9b5, 0xba82, 0xbaaf, 0xbb33, 0xb1d8, 0xbc20, 0xbbcb,
++ 0xb871, 0xbc84, 0xbc99, 0xb1d8, 0xb1d8, 0xb1d8, 0xb1d8, 0xb1d8,
++ 0x080c, 0x1519, 0xa1b2, 0x0080, 0x1a0c, 0x1519, 0x2100, 0xa1b2,
++ 0x0040, 0x1a04, 0xb5f1, 0x0002, 0xb224, 0xb3ef, 0xb224, 0xb224,
++ 0xb224, 0xb3f6, 0xb224, 0xb224, 0xb224, 0xb224, 0xb224, 0xb224,
++ 0xb224, 0xb224, 0xb224, 0xb224, 0xb224, 0xb224, 0xb224, 0xb224,
++ 0xb224, 0xb224, 0xb224, 0xb226, 0xb284, 0xb293, 0xb2e1, 0xb2ff,
++ 0xb37d, 0xb3dc, 0xb224, 0xb224, 0xb3f9, 0xb224, 0xb224, 0xb40c,
++ 0xb417, 0xb224, 0xb224, 0xb224, 0xb224, 0xb224, 0xb4a2, 0xb224,
++ 0xb224, 0xb4b5, 0xb224, 0xb224, 0xb46d, 0xb224, 0xb224, 0xb224,
++ 0xb4cd, 0xb224, 0xb224, 0xb224, 0xb547, 0xb224, 0xb224, 0xb224,
++ 0xb224, 0xb224, 0xb224, 0xb5b8, 0x080c, 0x1519, 0x080c, 0x570b,
++ 0x1150, 0x2001, 0xc635, 0x2004, 0xd0cc, 0x1128, 0xa084, 0x0009,
++ 0xa086, 0x0008, 0x1140, 0x6007, 0x0009, 0x602b, 0x0009, 0x6013,
++ 0x0000, 0x0804, 0xb3ea, 0x080c, 0x568d, 0x00e6, 0x00c6, 0x0036,
++ 0x0026, 0x0016, 0x6218, 0x2270, 0x72a0, 0x0026, 0x2019, 0x0029,
++ 0x080c, 0x7b16, 0x0076, 0x2039, 0x0000, 0x080c, 0x7a0e, 0x2c08,
++ 0x080c, 0xbef7, 0x007e, 0x001e, 0x2e60, 0x080c, 0x553e, 0x001e,
++ 0x002e, 0x003e, 0x00ce, 0x00ee, 0x6618, 0x00c6, 0x2660, 0x080c,
++ 0x534c, 0x00ce, 0xa6b0, 0x0001, 0x2634, 0xa684, 0x00ff, 0xa082,
++ 0x0006, 0x0278, 0x080c, 0xbe3b, 0x1904, 0xb2db, 0x080c, 0xbddb,
++ 0x1120, 0x6007, 0x0008, 0x0804, 0xb3ea, 0x6007, 0x0009, 0x0804,
++ 0xb3ea, 0x080c, 0xc023, 0x0128, 0x080c, 0xbe3b, 0x0d78, 0x0804,
++ 0xb2db, 0x6013, 0x1900, 0x0c88, 0x080c, 0x2f69, 0x1904, 0xb5ee,
++ 0x6106, 0x080c, 0xbd95, 0x6007, 0x0006, 0x0804, 0xb3ea, 0x6007,
++ 0x0007, 0x0804, 0xb3ea, 0x080c, 0xc378, 0x1904, 0xb5ee, 0x080c,
++ 0x2f69, 0x1904, 0xb5ee, 0x00d6, 0x6618, 0x2668, 0x6e04, 0xa684,
++ 0x00ff, 0xa082, 0x0006, 0x1220, 0x2001, 0x0001, 0x080c, 0x527f,
++ 0xa6b4, 0xff00, 0x8637, 0xa686, 0x0006, 0x0188, 0xa686, 0x0004,
++ 0x0170, 0x6e04, 0xa6b4, 0x00ff, 0xa686, 0x0006, 0x0140, 0xa686,
++ 0x0004, 0x0128, 0xa686, 0x0005, 0x0110, 0x00de, 0x00e0, 0x080c,
++ 0xbe99, 0x11a0, 0xa686, 0x0006, 0x1150, 0x0026, 0x6218, 0xa290,
++ 0x0028, 0x2214, 0x2009, 0x0000, 0x080c, 0x2e8b, 0x002e, 0x080c,
++ 0x53df, 0x6007, 0x000a, 0x00de, 0x0804, 0xb3ea, 0x6007, 0x000b,
++ 0x00de, 0x0804, 0xb3ea, 0x080c, 0x2e46, 0x6007, 0x0001, 0x0804,
++ 0xb3ea, 0x080c, 0xc378, 0x1904, 0xb5ee, 0x080c, 0x2f69, 0x1904,
++ 0xb5ee, 0x6618, 0x00d6, 0x2668, 0x6e04, 0x00de, 0xa686, 0x0707,
++ 0x0d50, 0x0026, 0x6218, 0xa290, 0x0028, 0x2214, 0x2009, 0x0000,
++ 0x080c, 0x2e8b, 0x002e, 0x6007, 0x000c, 0x0804, 0xb3ea, 0x080c,
++ 0x570b, 0x1140, 0x2001, 0xc635, 0x2004, 0xa084, 0x0009, 0xa086,
++ 0x0008, 0x1110, 0x0804, 0xb233, 0x080c, 0x568d, 0x6618, 0xa6b0,
++ 0x0001, 0x2634, 0xa684, 0x00ff, 0xa082, 0x0006, 0x06e8, 0x1138,
++ 0x0026, 0x2001, 0x0006, 0x080c, 0x52be, 0x002e, 0x0050, 0xa6b4,
++ 0xff00, 0x8637, 0xa686, 0x0004, 0x0120, 0xa686, 0x0006, 0x1904,
++ 0xb2db, 0x080c, 0xbea6, 0x1120, 0x6007, 0x000e, 0x0804, 0xb3ea,
++ 0x0046, 0x6418, 0xa4a0, 0x0028, 0x2424, 0xa4a4, 0x00ff, 0x8427,
++ 0x0046, 0x080c, 0x2e46, 0x004e, 0x0016, 0xa006, 0x2009, 0xc653,
++ 0x210c, 0xd1a4, 0x0158, 0x2009, 0x0029, 0x080c, 0xc190, 0x6018,
++ 0x00d6, 0x2068, 0x6800, 0xc0e5, 0x6802, 0x00de, 0x001e, 0x004e,
++ 0x6007, 0x0001, 0x0804, 0xb3ea, 0x2001, 0x0001, 0x080c, 0x527f,
++ 0x0156, 0x0016, 0x0026, 0x0036, 0x20a9, 0x0004, 0x2019, 0xc605,
++ 0x2011, 0xcc90, 0x080c, 0xa103, 0x003e, 0x002e, 0x001e, 0x015e,
++ 0xa005, 0x0168, 0xa6b4, 0xff00, 0x8637, 0xa682, 0x0004, 0x0a04,
++ 0xb2db, 0xa682, 0x0007, 0x0a04, 0xb329, 0x0804, 0xb2db, 0x6013,
++ 0x1900, 0x6007, 0x0009, 0x0804, 0xb3ea, 0x080c, 0x570b, 0x1140,
++ 0x2001, 0xc635, 0x2004, 0xa084, 0x0009, 0xa086, 0x0008, 0x1110,
++ 0x0804, 0xb233, 0x080c, 0x568d, 0x6618, 0xa6b0, 0x0001, 0x2634,
++ 0xa684, 0x00ff, 0xa082, 0x0006, 0x06b8, 0xa6b4, 0xff00, 0x8637,
++ 0xa686, 0x0004, 0x0120, 0xa686, 0x0006, 0x1904, 0xb2db, 0x080c,
++ 0xbece, 0x1138, 0x080c, 0xbddb, 0x1120, 0x6007, 0x0010, 0x0804,
++ 0xb3ea, 0x0046, 0x6418, 0xa4a0, 0x0028, 0x2424, 0xa4a4, 0x00ff,
++ 0x8427, 0x0046, 0x080c, 0x2e46, 0x004e, 0x0016, 0xa006, 0x2009,
++ 0xc653, 0x210c, 0xd1a4, 0x0158, 0x2009, 0x0029, 0x080c, 0xc190,
++ 0x6018, 0x00d6, 0x2068, 0x6800, 0xc0e5, 0x6802, 0x00de, 0x001e,
++ 0x004e, 0x6007, 0x0001, 0x00f0, 0x080c, 0xc023, 0x0140, 0xa6b4,
++ 0xff00, 0x8637, 0xa686, 0x0006, 0x0950, 0x0804, 0xb2db, 0x6013,
++ 0x1900, 0x6007, 0x0009, 0x0070, 0x080c, 0x2f69, 0x1904, 0xb5ee,
++ 0x080c, 0xc378, 0x1904, 0xb5ee, 0x080c, 0xb652, 0x1904, 0xb2db,
++ 0x6007, 0x0012, 0x6003, 0x0001, 0x080c, 0x79df, 0x0005, 0x6007,
++ 0x0001, 0x6003, 0x0001, 0x080c, 0x79df, 0x0cc0, 0x6007, 0x0005,
++ 0x0cc0, 0x080c, 0xc378, 0x1904, 0xb5ee, 0x080c, 0x2f69, 0x1904,
++ 0xb5ee, 0x080c, 0xb652, 0x1904, 0xb2db, 0x6007, 0x0020, 0x6003,
++ 0x0001, 0x080c, 0x79df, 0x0005, 0x080c, 0x2f69, 0x1904, 0xb5ee,
++ 0x6007, 0x0023, 0x6003, 0x0001, 0x080c, 0x79df, 0x0005, 0x080c,
++ 0xc378, 0x1904, 0xb5ee, 0x080c, 0x2f69, 0x1904, 0xb5ee, 0x080c,
++ 0xb652, 0x1904, 0xb2db, 0x0016, 0x0026, 0x2011, 0xcc91, 0x2214,
++ 0xa286, 0xffff, 0x0190, 0x2c08, 0x080c, 0xac81, 0x01e0, 0x2260,
++ 0x2011, 0xcc90, 0x2214, 0x6008, 0xa206, 0x11a8, 0x6018, 0xa190,
++ 0x0006, 0x2214, 0xa206, 0x01e8, 0x0070, 0x2011, 0xcc90, 0x2214,
++ 0x2c08, 0xa006, 0x080c, 0xc162, 0x11a0, 0x2011, 0xcc91, 0x2214,
++ 0xa286, 0xffff, 0x01c0, 0x2160, 0x6007, 0x0026, 0x6013, 0x1700,
++ 0x2011, 0xcc89, 0x2214, 0xa296, 0xffff, 0x1180, 0x6007, 0x0025,
++ 0x0068, 0x601c, 0xa086, 0x0007, 0x1d70, 0x6004, 0xa086, 0x0024,
++ 0x1110, 0x080c, 0x95e3, 0x2160, 0x6007, 0x0025, 0x6003, 0x0001,
++ 0x080c, 0x79df, 0x002e, 0x001e, 0x0005, 0x2001, 0x0001, 0x080c,
++ 0x527f, 0x0156, 0x0016, 0x0026, 0x0036, 0x20a9, 0x0004, 0x2019,
++ 0xc605, 0x2011, 0xcc96, 0x080c, 0xa103, 0x003e, 0x002e, 0x001e,
++ 0x015e, 0x0120, 0x6007, 0x0031, 0x0804, 0xb3ea, 0x080c, 0x9df5,
++ 0x080c, 0x5f22, 0x11b0, 0x0006, 0x0026, 0x0036, 0x080c, 0x5f3e,
++ 0x1158, 0x2001, 0xc8e6, 0x2003, 0x0001, 0x2001, 0xc600, 0x2003,
++ 0x0001, 0x080c, 0x5e5a, 0x0010, 0x080c, 0x5ef9, 0x003e, 0x002e,
++ 0x000e, 0x0005, 0x080c, 0x2f69, 0x1904, 0xb5ee, 0x080c, 0xb652,
++ 0x1904, 0xb2db, 0x6106, 0x080c, 0xb66e, 0x6007, 0x002b, 0x0804,
++ 0xb3ea, 0x6007, 0x002c, 0x0804, 0xb3ea, 0x080c, 0xc378, 0x1904,
++ 0xb5ee, 0x080c, 0x2f69, 0x1904, 0xb5ee, 0x080c, 0xb652, 0x1904,
++ 0xb2db, 0x6106, 0x080c, 0xb672, 0x1120, 0x6007, 0x002e, 0x0804,
++ 0xb3ea, 0x6007, 0x002f, 0x0804, 0xb3ea, 0x080c, 0x2f69, 0x1904,
++ 0xb5ee, 0x00e6, 0x00d6, 0x00c6, 0x6018, 0xa080, 0x0001, 0x200c,
++ 0xa184, 0x00ff, 0xa086, 0x0006, 0x0158, 0xa184, 0xff00, 0x8007,
++ 0xa086, 0x0006, 0x0128, 0x00ce, 0x00de, 0x00ee, 0x0804, 0xb3ef,
++ 0x2001, 0xc672, 0x2004, 0xd0e4, 0x0904, 0xb544, 0x2071, 0xcc8c,
++ 0x7010, 0x6036, 0x7014, 0x603a, 0x7108, 0x720c, 0x2001, 0xc653,
++ 0x2004, 0xd0a4, 0x0140, 0x6018, 0x2068, 0x6810, 0xa106, 0x1118,
++ 0x6814, 0xa206, 0x01f8, 0x2001, 0xc653, 0x2004, 0xd0ac, 0x1590,
++ 0x2069, 0xc600, 0x6874, 0xa206, 0x1568, 0x6870, 0xa106, 0x1550,
++ 0x7210, 0x080c, 0xac81, 0x0558, 0x080c, 0xc1fc, 0x0540, 0x622a,
++ 0x6007, 0x0036, 0x6003, 0x0001, 0x080c, 0x7999, 0x00ce, 0x00de,
++ 0x00ee, 0x0005, 0x7214, 0xa286, 0xffff, 0x0150, 0x080c, 0xac81,
++ 0x01b0, 0xa280, 0x0002, 0x2004, 0x7110, 0xa106, 0x1180, 0x0c08,
++ 0x7210, 0x2c08, 0xa085, 0x0001, 0x080c, 0xc162, 0x2c10, 0x2160,
++ 0x0130, 0x08b8, 0x6007, 0x0037, 0x6013, 0x1500, 0x08d8, 0x6007,
++ 0x0037, 0x6013, 0x1700, 0x08b0, 0x6007, 0x0012, 0x0898, 0x080c,
++ 0x2f69, 0x1904, 0xb5ee, 0x6018, 0xa080, 0x0001, 0x2004, 0xa084,
++ 0xff00, 0x8007, 0xa086, 0x0006, 0x1904, 0xb3ef, 0x00e6, 0x00d6,
++ 0x00c6, 0x2001, 0xc672, 0x2004, 0xd0e4, 0x0904, 0xb5b0, 0x2069,
++ 0xc600, 0x2071, 0xcc8c, 0x7008, 0x6036, 0x720c, 0x623a, 0xa286,
++ 0xffff, 0x1150, 0x7208, 0x00c6, 0x2c08, 0xa085, 0x0001, 0x080c,
++ 0xc162, 0x2c10, 0x00ce, 0x0588, 0x080c, 0xac81, 0x0570, 0x00c6,
++ 0x0026, 0x2260, 0x080c, 0xa954, 0x002e, 0x00ce, 0x7118, 0xa18c,
++ 0xff00, 0x810f, 0xa186, 0x0001, 0x0158, 0xa186, 0x0005, 0x0118,
++ 0xa186, 0x0007, 0x1178, 0xa280, 0x0004, 0x2004, 0xa005, 0x0150,
++ 0x0056, 0x7510, 0x7614, 0x080c, 0xc213, 0x005e, 0x00ce, 0x00de,
++ 0x00ee, 0x0005, 0x6007, 0x003b, 0x602b, 0x0009, 0x6013, 0x2a00,
++ 0x6003, 0x0001, 0x080c, 0x7999, 0x0c88, 0x6007, 0x003b, 0x602b,
++ 0x0009, 0x6013, 0x1700, 0x6003, 0x0001, 0x080c, 0x7999, 0x0c30,
++ 0x6007, 0x003b, 0x602b, 0x000b, 0x6013, 0x0000, 0x0804, 0xb51a,
++ 0x00e6, 0x0026, 0x080c, 0x570b, 0x0558, 0x080c, 0x568d, 0x080c,
++ 0xc3f3, 0x1520, 0x2071, 0xc600, 0x70d4, 0xc085, 0x70d6, 0x00f6,
++ 0x2079, 0x0100, 0x72a0, 0xa284, 0x00ff, 0x7072, 0x78e6, 0xa284,
++ 0xff00, 0x7274, 0xa205, 0x7076, 0x78ea, 0x00fe, 0x70df, 0x0000,
++ 0x2001, 0xc653, 0x2004, 0xd0a4, 0x0120, 0x2011, 0xc940, 0x2013,
++ 0x07d0, 0xd0ac, 0x1128, 0x080c, 0x2c62, 0x0010, 0x080c, 0xc41f,
++ 0x002e, 0x00ee, 0x080c, 0x95e3, 0x0804, 0xb3ee, 0x080c, 0x95e3,
++ 0x0005, 0x2600, 0x0002, 0xb5fc, 0xb630, 0xb641, 0xb5fc, 0xb5fc,
++ 0xb5fe, 0xb617, 0xb5fc, 0xb5fc, 0x080c, 0x1519, 0x080c, 0xc378,
++ 0x1d68, 0x080c, 0x2f69, 0x1d50, 0x080c, 0xb652, 0x1138, 0x6007,
++ 0x0045, 0x6003, 0x0001, 0x080c, 0x79df, 0x0005, 0x080c, 0x2e46,
++ 0x6007, 0x0001, 0x6003, 0x0001, 0x080c, 0x79df, 0x0005, 0x080c,
++ 0x2f69, 0x19a0, 0x080c, 0x768f, 0x1160, 0x2e00, 0xa080, 0x0010,
++ 0x2004, 0x8007, 0xd084, 0x0110, 0x080c, 0xc428, 0x080c, 0x95e3,
++ 0x0005, 0x2009, 0x0046, 0x080c, 0xc44e, 0x080c, 0x95e3, 0x0005,
++ 0x080c, 0x2f69, 0x1904, 0xb5ee, 0x2009, 0x0041, 0x080c, 0xc44e,
++ 0x6007, 0x0047, 0x6003, 0x0001, 0x080c, 0x79df, 0x080c, 0x7e94,
++ 0x0005, 0x080c, 0x2f69, 0x1904, 0xb5ee, 0x2009, 0x0042, 0x080c,
++ 0xc44e, 0x6007, 0x0047, 0x6003, 0x0001, 0x080c, 0x79df, 0x080c,
++ 0x7e94, 0x0005, 0x00d6, 0x0066, 0x6618, 0x2668, 0x6e04, 0xa6b4,
++ 0xff00, 0x8637, 0xa686, 0x0006, 0x0170, 0xa686, 0x0004, 0x0158,
++ 0x6e04, 0xa6b4, 0x00ff, 0xa686, 0x0006, 0x0128, 0xa686, 0x0004,
++ 0x0110, 0xa085, 0x0001, 0x006e, 0x00de, 0x0005, 0x00d6, 0x0449,
++ 0x00de, 0x0005, 0x00d6, 0x0491, 0x11f0, 0x680c, 0xa08c, 0xff00,
++ 0x6820, 0xa084, 0x00ff, 0xa115, 0x6212, 0x6824, 0x602a, 0xd1e4,
++ 0x0118, 0x2009, 0x0001, 0x0060, 0xd1ec, 0x0168, 0x6920, 0xa18c,
++ 0x00ff, 0x6824, 0x080c, 0x29c7, 0x1130, 0x2110, 0x2009, 0x0000,
++ 0x080c, 0x2e8b, 0x0018, 0xa085, 0x0001, 0x0008, 0xa006, 0x00de,
++ 0x0005, 0x2069, 0xcc8d, 0x6800, 0xa082, 0x0010, 0x1228, 0x6013,
++ 0x0000, 0xa085, 0x0001, 0x0008, 0xa006, 0x0005, 0x6013, 0x0000,
++ 0x2069, 0xcc8c, 0x6808, 0xa084, 0xff00, 0xa086, 0x0800, 0x1140,
++ 0x6800, 0xa084, 0x00ff, 0xa08e, 0x0014, 0x0110, 0xa08e, 0x0010,
++ 0x0005, 0x6004, 0xa0b2, 0x0080, 0x1a0c, 0x1519, 0xa1b6, 0x0013,
++ 0x1130, 0x2008, 0xa1b2, 0x0040, 0x1a04, 0xb7bb, 0x0092, 0xa1b6,
++ 0x0027, 0x0120, 0xa1b6, 0x0014, 0x190c, 0x1519, 0x2001, 0x0007,
++ 0x080c, 0x52be, 0x080c, 0x7db1, 0x080c, 0xae54, 0x080c, 0x7e94,
++ 0x0005, 0xb719, 0xb71b, 0xb719, 0xb719, 0xb719, 0xb71b, 0xb72d,
++ 0xb7b4, 0xb77d, 0xb7b4, 0xb790, 0xb7b4, 0xb72d, 0xb7b4, 0xb7ac,
++ 0xb7b4, 0xb7ac, 0xb7b4, 0xb7b4, 0xb719, 0xb719, 0xb719, 0xb719,
++ 0xb719, 0xb719, 0xb719, 0xb719, 0xb719, 0xb719, 0xb719, 0xb71b,
++ 0xb719, 0xb7b4, 0xb719, 0xb719, 0xb7b4, 0xb719, 0xb7b1, 0xb7b4,
++ 0xb719, 0xb719, 0xb719, 0xb719, 0xb7b4, 0xb7b4, 0xb719, 0xb7b4,
++ 0xb7b4, 0xb719, 0xb727, 0xb719, 0xb719, 0xb719, 0xb719, 0xb7b0,
++ 0xb7b4, 0xb719, 0xb719, 0xb7b4, 0xb7b4, 0xb719, 0xb719, 0xb719,
++ 0xb719, 0x080c, 0x1519, 0x080c, 0x7db1, 0x2001, 0xc8fd, 0x2004,
++ 0x6016, 0x6003, 0x0002, 0x080c, 0x7e94, 0x0804, 0xb7ba, 0x2001,
++ 0x0000, 0x080c, 0x527f, 0x0804, 0xb7b4, 0x00f6, 0x2079, 0xc652,
++ 0x7804, 0x00fe, 0xd0ac, 0x1904, 0xb7b4, 0x2001, 0x0000, 0x080c,
++ 0x527f, 0x6018, 0xa080, 0x0004, 0x2004, 0xa086, 0x00ff, 0x1140,
++ 0x00f6, 0x2079, 0xc600, 0x7898, 0x8000, 0x789a, 0x00fe, 0x00e0,
++ 0x00c6, 0x6018, 0x2060, 0x6000, 0xd0f4, 0x1140, 0x6010, 0xa005,
++ 0x0128, 0x00ce, 0x080c, 0x40ef, 0x0804, 0xb7b4, 0x00ce, 0x2001,
++ 0xc600, 0x2004, 0xa086, 0x0002, 0x1138, 0x00f6, 0x2079, 0xc600,
++ 0x7898, 0x8000, 0x789a, 0x00fe, 0x2001, 0x0002, 0x080c, 0x5291,
++ 0x080c, 0x7db1, 0x601f, 0x0001, 0x6003, 0x0001, 0x6007, 0x0002,
++ 0x080c, 0x79df, 0x080c, 0x7e94, 0x00c6, 0x6118, 0x2160, 0x2009,
++ 0x0001, 0x080c, 0x6fb9, 0x00ce, 0x04e8, 0x6618, 0x00d6, 0x2668,
++ 0x6e04, 0x00de, 0xa6b4, 0xff00, 0x8637, 0xa686, 0x0006, 0x0560,
++ 0xa686, 0x0004, 0x0548, 0x080c, 0x7669, 0x2001, 0x0004, 0x0410,
++ 0x2001, 0xc600, 0x2004, 0xa086, 0x0003, 0x1110, 0x080c, 0x40ef,
++ 0x2001, 0x0006, 0x04a1, 0x6618, 0x00d6, 0x2668, 0x6e04, 0x00de,
++ 0xa6b4, 0xff00, 0x8637, 0xa686, 0x0006, 0x0170, 0x2001, 0x0006,
++ 0x0048, 0x2001, 0x0004, 0x0030, 0x2001, 0x0006, 0x0401, 0x0020,
++ 0x0018, 0x0010, 0x080c, 0x52be, 0x080c, 0x7db1, 0x080c, 0x95e3,
++ 0x080c, 0x7e94, 0x0005, 0x2600, 0x0002, 0xb7c6, 0xb7c6, 0xb7c6,
++ 0xb7c6, 0xb7c6, 0xb7c8, 0xb7c6, 0xb7c8, 0xb7c6, 0x080c, 0x1519,
++ 0x080c, 0x7db1, 0x080c, 0x95e3, 0x080c, 0x7e94, 0x0005, 0x0016,
++ 0x00d6, 0x6118, 0x2168, 0x6900, 0xd184, 0x0140, 0x080c, 0x5291,
++ 0x2001, 0x0000, 0x080c, 0x527f, 0x080c, 0x2e6c, 0x00de, 0x001e,
++ 0x0005, 0x00d6, 0x6618, 0x2668, 0x6804, 0xa084, 0xff00, 0x8007,
++ 0x00de, 0xa0b2, 0x000c, 0x1a0c, 0x1519, 0xa1b6, 0x0015, 0x1110,
++ 0x003b, 0x0028, 0xa1b6, 0x0016, 0x190c, 0x1519, 0x006b, 0x0005,
++ 0x9cda, 0x9cda, 0x9cda, 0x9cda, 0x9cda, 0x9cda, 0xb851, 0xb810,
++ 0x9cda, 0x9cda, 0x9cda, 0x9cda, 0x9cda, 0x9cda, 0x9cda, 0x9cda,
++ 0x9cda, 0x9cda, 0xb851, 0xb858, 0x9cda, 0x9cda, 0x9cda, 0x9cda,
++ 0x00f6, 0x2079, 0xc652, 0x7804, 0xd0ac, 0x11e0, 0x6018, 0xa07d,
++ 0x01c8, 0x7800, 0xd0f4, 0x1118, 0x7810, 0xa005, 0x1198, 0x2001,
++ 0x0000, 0x080c, 0x527f, 0x2001, 0x0002, 0x080c, 0x5291, 0x601f,
++ 0x0001, 0x6003, 0x0001, 0x6007, 0x0002, 0x080c, 0x79df, 0x080c,
++ 0x7e94, 0x00e8, 0x2011, 0xcc83, 0x2204, 0x8211, 0x220c, 0x080c,
++ 0x29c7, 0x11a8, 0x00c6, 0x080c, 0x533d, 0x0120, 0x00ce, 0x080c,
++ 0x95e3, 0x0068, 0x6010, 0x0006, 0x6014, 0x0006, 0x080c, 0x4f47,
++ 0x000e, 0x6016, 0x000e, 0x6012, 0x00ce, 0x080c, 0x95e3, 0x00fe,
++ 0x0005, 0x6604, 0xa6b6, 0x001e, 0x1110, 0x080c, 0x95e3, 0x0005,
++ 0x080c, 0x9fb6, 0x1138, 0x6003, 0x0001, 0x6007, 0x0001, 0x080c,
++ 0x79df, 0x0010, 0x080c, 0x95e3, 0x0005, 0x6004, 0xa08a, 0x0080,
++ 0x1a0c, 0x1519, 0x080c, 0x7db1, 0x080c, 0xae54, 0x080c, 0x7e94,
++ 0x0005, 0xa182, 0x0040, 0x0002, 0xb887, 0xb887, 0xb887, 0xb887,
++ 0xb889, 0xb887, 0xb887, 0xb887, 0xb887, 0xb887, 0xb887, 0xb887,
++ 0xb887, 0xb887, 0xb887, 0xb887, 0xb887, 0xb887, 0xb887, 0x080c,
++ 0x1519, 0x00d6, 0x00e6, 0x00f6, 0x0156, 0x0046, 0x0026, 0x6218,
++ 0xa280, 0x002f, 0x2004, 0xa005, 0x0120, 0x2021, 0x0000, 0x080c,
++ 0xc3c4, 0x6106, 0x2071, 0xcc80, 0x7444, 0xa4a4, 0xff00, 0x0904,
++ 0xb8ed, 0xa486, 0x2000, 0x1130, 0x2009, 0x0001, 0x2011, 0x0200,
++ 0x080c, 0x712e, 0x080c, 0x1602, 0x090c, 0x1519, 0x6003, 0x0007,
++ 0x2d00, 0x6837, 0x010d, 0x6803, 0x0000, 0x683b, 0x0000, 0x6c5a,
++ 0x2c00, 0x685e, 0x6008, 0x68b2, 0x6018, 0x2078, 0x78a0, 0x8007,
++ 0x7130, 0x694a, 0x0016, 0xa084, 0xff00, 0x6846, 0x684f, 0x0000,
++ 0x6853, 0x0000, 0x6857, 0x0036, 0x080c, 0x580a, 0x001e, 0xa486,
++ 0x2000, 0x1130, 0x2019, 0x0017, 0x080c, 0xc10d, 0x0804, 0xb94a,
++ 0xa486, 0x0400, 0x1130, 0x2019, 0x0002, 0x080c, 0xc0bf, 0x0804,
++ 0xb94a, 0xa486, 0x0200, 0x1110, 0x080c, 0xc0a4, 0xa486, 0x1000,
++ 0x1110, 0x080c, 0xc0f2, 0x0804, 0xb94a, 0x2069, 0xc9bc, 0x6a00,
++ 0xd284, 0x0904, 0xb9b1, 0xa284, 0x0300, 0x1904, 0xb9aa, 0x6804,
++ 0xa005, 0x0904, 0xb992, 0x2d78, 0x6003, 0x0007, 0x080c, 0x15e5,
++ 0x0904, 0xb951, 0x7800, 0xd08c, 0x1118, 0x7804, 0x8001, 0x7806,
++ 0x6013, 0x0000, 0x6803, 0x0000, 0x6837, 0x0116, 0x683b, 0x0000,
++ 0x6008, 0x68b2, 0x2c00, 0x684a, 0x6018, 0x2078, 0x78a0, 0x8007,
++ 0x7130, 0x6986, 0x6846, 0x7928, 0x698a, 0x792c, 0x698e, 0x7930,
++ 0x6992, 0x7934, 0x6996, 0x6853, 0x003d, 0x7244, 0xa294, 0x0003,
++ 0xa286, 0x0002, 0x1118, 0x684f, 0x0040, 0x0040, 0xa286, 0x0001,
++ 0x1118, 0x684f, 0x0080, 0x0010, 0x684f, 0x0000, 0x20a9, 0x000a,
++ 0x2001, 0xcc90, 0xad90, 0x0015, 0x200c, 0x810f, 0x2112, 0x8000,
++ 0x8210, 0x1f04, 0xb93c, 0x200c, 0x6982, 0x8000, 0x200c, 0x697e,
++ 0x080c, 0x580a, 0x002e, 0x004e, 0x015e, 0x00fe, 0x00ee, 0x00de,
++ 0x0005, 0x2001, 0xc60e, 0x2004, 0xd084, 0x0120, 0x080c, 0x1602,
++ 0x1904, 0xb902, 0x6013, 0x0100, 0x6003, 0x0001, 0x6007, 0x0041,
++ 0x080c, 0x7999, 0x080c, 0x7e94, 0x0c28, 0x2069, 0xcc92, 0x2d04,
++ 0xa084, 0xff00, 0xa086, 0x1200, 0x11a8, 0x2069, 0xcc80, 0x686c,
++ 0xa084, 0x00ff, 0x0016, 0x6110, 0xa18c, 0x0700, 0xa10d, 0x6112,
++ 0x001e, 0x6003, 0x0001, 0x6007, 0x0043, 0x080c, 0x7999, 0x080c,
++ 0x7e94, 0x0840, 0x6868, 0x602a, 0x686c, 0x602e, 0x6013, 0x0200,
++ 0x6003, 0x0001, 0x6007, 0x0041, 0x080c, 0x7999, 0x080c, 0x7e94,
++ 0x0804, 0xb94a, 0x2001, 0xc60d, 0x2004, 0xd0ec, 0x0120, 0x2011,
++ 0x8049, 0x080c, 0x407d, 0x6013, 0x0300, 0x0010, 0x6013, 0x0100,
++ 0x6003, 0x0001, 0x6007, 0x0041, 0x080c, 0x7999, 0x080c, 0x7e94,
++ 0x0804, 0xb94a, 0x6013, 0x0500, 0x0c98, 0x6013, 0x0600, 0x0804,
++ 0xb965, 0x6013, 0x0200, 0x0804, 0xb965, 0xa186, 0x0013, 0x1170,
++ 0x6004, 0xa08a, 0x0040, 0x0a0c, 0x1519, 0xa08a, 0x0053, 0x1a0c,
++ 0x1519, 0xa082, 0x0040, 0x2008, 0x0804, 0xba3f, 0xa186, 0x0051,
++ 0x0138, 0xa186, 0x0047, 0x11d8, 0x6004, 0xa086, 0x0041, 0x0518,
++ 0x2001, 0x0109, 0x2004, 0xd084, 0x01f0, 0x0126, 0x2091, 0x2800,
++ 0x0006, 0x0016, 0x0026, 0x080c, 0x7873, 0x002e, 0x001e, 0x000e,
++ 0x012e, 0x6000, 0xa086, 0x0002, 0x1170, 0x0804, 0xba82, 0xa186,
++ 0x0027, 0x0120, 0xa186, 0x0014, 0x190c, 0x1519, 0x6004, 0xa082,
++ 0x0040, 0x2008, 0x001a, 0x080c, 0x962a, 0x0005, 0xba09, 0xba0b,
++ 0xba0b, 0xba2f, 0xba09, 0xba09, 0xba09, 0xba09, 0xba09, 0xba09,
++ 0xba09, 0xba09, 0xba09, 0xba09, 0xba09, 0xba09, 0xba09, 0xba09,
++ 0xba09, 0x080c, 0x1519, 0x080c, 0x7db1, 0x080c, 0x7e94, 0x0036,
++ 0x00d6, 0x6010, 0xa06d, 0x01c0, 0xad84, 0xf000, 0x01a8, 0x6003,
++ 0x0002, 0x6018, 0x2004, 0xd0bc, 0x1178, 0x2019, 0x0004, 0x080c,
++ 0xc141, 0x6013, 0x0000, 0x6014, 0xa005, 0x1120, 0x2001, 0xc8fe,
++ 0x2004, 0x6016, 0x6003, 0x0007, 0x00de, 0x003e, 0x0005, 0x00d6,
++ 0x080c, 0x7db1, 0x080c, 0x7e94, 0x080c, 0xac91, 0x0120, 0x6010,
++ 0x2068, 0x080c, 0x1619, 0x080c, 0xae54, 0x00de, 0x0005, 0x0002,
++ 0xba53, 0xba70, 0xba5c, 0xba7c, 0xba53, 0xba53, 0xba53, 0xba53,
++ 0xba53, 0xba53, 0xba53, 0xba53, 0xba53, 0xba53, 0xba53, 0xba53,
++ 0xba53, 0xba53, 0xba53, 0x080c, 0x1519, 0x6010, 0xa088, 0x0013,
++ 0x2104, 0xa085, 0x0400, 0x200a, 0x080c, 0x7db1, 0x6010, 0xa080,
++ 0x0013, 0x2004, 0xd0b4, 0x0138, 0x6003, 0x0007, 0x2009, 0x0043,
++ 0x080c, 0x9613, 0x0010, 0x6003, 0x0002, 0x080c, 0x7e94, 0x0005,
++ 0x080c, 0x7db1, 0x080c, 0xc37f, 0x1120, 0x080c, 0x7103, 0x080c,
++ 0x95e3, 0x080c, 0x7e94, 0x0005, 0x080c, 0x7db1, 0x2009, 0x0041,
++ 0x0804, 0xbbcb, 0xa182, 0x0040, 0x0002, 0xba98, 0xba9a, 0xba98,
++ 0xba98, 0xba98, 0xba98, 0xba98, 0xba9b, 0xba98, 0xba98, 0xba98,
++ 0xba98, 0xba98, 0xba98, 0xba98, 0xba98, 0xba98, 0xbaa6, 0xba98,
++ 0x080c, 0x1519, 0x0005, 0x6003, 0x0004, 0x6110, 0x20e1, 0x0005,
++ 0x3d18, 0x3e20, 0x2c10, 0x080c, 0x1870, 0x0005, 0x00d6, 0x080c,
++ 0x7103, 0x00de, 0x080c, 0xc3e2, 0x080c, 0x95e3, 0x0005, 0xa182,
++ 0x0040, 0x0002, 0xbac5, 0xbac5, 0xbac5, 0xbac5, 0xbac5, 0xbac5,
++ 0xbac5, 0xbac7, 0xbac5, 0xbaca, 0xbb03, 0xbac5, 0xbac5, 0xbac5,
++ 0xbac5, 0xbb03, 0xbac5, 0xbac5, 0xbac5, 0x080c, 0x1519, 0x080c,
++ 0x962a, 0x0005, 0x2001, 0xc672, 0x2004, 0xd0e4, 0x0158, 0x2001,
++ 0x0100, 0x2004, 0xa082, 0x0005, 0x0228, 0x2001, 0x011f, 0x2004,
++ 0x6036, 0x0010, 0x6037, 0x0000, 0x080c, 0x7e47, 0x080c, 0x7f6e,
++ 0x6010, 0x00d6, 0x2068, 0x684c, 0xd0fc, 0x0150, 0xa08c, 0x0003,
++ 0xa18e, 0x0002, 0x0168, 0x2009, 0x0041, 0x00de, 0x0804, 0xbbcb,
++ 0x6003, 0x0007, 0x6017, 0x0000, 0x080c, 0x7103, 0x00de, 0x0005,
++ 0x080c, 0xc37f, 0x0110, 0x00de, 0x0005, 0x080c, 0x7103, 0x080c,
++ 0x95e3, 0x00de, 0x0ca0, 0x0036, 0x080c, 0x7e47, 0x080c, 0x7f6e,
++ 0x6010, 0x00d6, 0x2068, 0x6018, 0x2004, 0xd0bc, 0x0188, 0x684c,
++ 0xa084, 0x0003, 0xa086, 0x0002, 0x0140, 0x687c, 0x632c, 0xa31a,
++ 0x632e, 0x6880, 0x6328, 0xa31b, 0x632a, 0x6003, 0x0002, 0x0080,
++ 0x2019, 0x0004, 0x080c, 0xc141, 0x6014, 0xa005, 0x1128, 0x2001,
++ 0xc8fe, 0x2004, 0x8003, 0x6016, 0x6013, 0x0000, 0x6003, 0x0007,
++ 0x00de, 0x003e, 0x0005, 0xa186, 0x0013, 0x1150, 0x6004, 0xa086,
++ 0x0042, 0x190c, 0x1519, 0x080c, 0x7db1, 0x080c, 0x7e94, 0x0005,
++ 0xa186, 0x0027, 0x0118, 0xa186, 0x0014, 0x1180, 0x6004, 0xa086,
++ 0x0042, 0x190c, 0x1519, 0x2001, 0x0007, 0x080c, 0x52be, 0x080c,
++ 0x7db1, 0x080c, 0xae54, 0x080c, 0x7e94, 0x0005, 0xa182, 0x0040,
++ 0x0002, 0xbb6c, 0xbb6c, 0xbb6c, 0xbb6c, 0xbb6c, 0xbb6c, 0xbb6c,
++ 0xbb6e, 0xbb7a, 0xbb6c, 0xbb6c, 0xbb6c, 0xbb6c, 0xbb6c, 0xbb6c,
++ 0xbb6c, 0xbb6c, 0xbb6c, 0xbb6c, 0x080c, 0x1519, 0x0036, 0x0046,
++ 0x20e1, 0x0005, 0x3d18, 0x3e20, 0x2c10, 0x080c, 0x1870, 0x004e,
++ 0x003e, 0x0005, 0x6010, 0x00d6, 0x2068, 0x6810, 0x6a14, 0x0006,
++ 0x0046, 0x0056, 0x6c7c, 0xa422, 0x6d80, 0x2200, 0xa52b, 0x602c,
++ 0xa420, 0x642e, 0x6028, 0xa529, 0x652a, 0x005e, 0x004e, 0x000e,
++ 0xa20d, 0x1178, 0x684c, 0xd0fc, 0x0120, 0x2009, 0x0041, 0x00de,
++ 0x0490, 0x6003, 0x0007, 0x6017, 0x0000, 0x080c, 0x7103, 0x00de,
++ 0x0005, 0x0006, 0x00f6, 0x2c78, 0x080c, 0x56c3, 0x00fe, 0x000e,
++ 0x0120, 0x6003, 0x0002, 0x00de, 0x0005, 0x2009, 0xc60d, 0x210c,
++ 0xd19c, 0x0118, 0x6003, 0x0007, 0x0010, 0x6003, 0x0006, 0x0021,
++ 0x080c, 0x7105, 0x00de, 0x0005, 0xd2fc, 0x0140, 0x8002, 0x8000,
++ 0x8212, 0xa291, 0x0000, 0x2009, 0x0009, 0x0010, 0x2009, 0x0015,
++ 0x6a6a, 0x6866, 0x0005, 0xa182, 0x0040, 0x0208, 0x0062, 0xa186,
++ 0x0013, 0x0120, 0xa186, 0x0014, 0x190c, 0x1519, 0x6020, 0xd0dc,
++ 0x090c, 0x1519, 0x0005, 0xbbee, 0xbbf5, 0xbc01, 0xbc0d, 0xbbee,
++ 0xbbee, 0xbbee, 0xbc1c, 0xbbee, 0xbbf0, 0xbbf0, 0xbbee, 0xbbee,
++ 0xbbee, 0xbbee, 0xbbf0, 0xbbee, 0xbbf0, 0xbbee, 0x080c, 0x1519,
++ 0x6020, 0xd0dc, 0x090c, 0x1519, 0x0005, 0x6003, 0x0001, 0x6106,
++ 0x080c, 0x7999, 0x0126, 0x2091, 0x8000, 0x080c, 0x7e94, 0x012e,
++ 0x0005, 0x6003, 0x0001, 0x6106, 0x080c, 0x7999, 0x0126, 0x2091,
++ 0x8000, 0x080c, 0x7e94, 0x012e, 0x0005, 0x6003, 0x0003, 0x6106,
++ 0x2c10, 0x080c, 0x2068, 0x0126, 0x2091, 0x8000, 0x080c, 0x79fc,
++ 0x080c, 0x7f6e, 0x012e, 0x0005, 0xa016, 0x080c, 0x1870, 0x0005,
++ 0x0126, 0x2091, 0x8000, 0x0036, 0x00d6, 0xa182, 0x0040, 0x0023,
++ 0x00de, 0x003e, 0x012e, 0x0005, 0xbc3c, 0xbc3e, 0xbc50, 0xbc6b,
++ 0xbc3c, 0xbc3c, 0xbc3c, 0xbc80, 0xbc3c, 0xbc3c, 0xbc3c, 0xbc3c,
++ 0xbc3c, 0xbc3c, 0xbc3c, 0xbc3c, 0x080c, 0x1519, 0x6010, 0x2068,
++ 0x684c, 0xd0fc, 0x01f8, 0xa09c, 0x0003, 0xa39e, 0x0003, 0x01d0,
++ 0x6003, 0x0001, 0x6106, 0x080c, 0x7999, 0x080c, 0x7e94, 0x0498,
++ 0x6010, 0x2068, 0x684c, 0xd0fc, 0x0168, 0xa09c, 0x0003, 0xa39e,
++ 0x0003, 0x0140, 0x6003, 0x0001, 0x6106, 0x080c, 0x7999, 0x080c,
++ 0x7e94, 0x0408, 0x6013, 0x0000, 0x6017, 0x0000, 0x2019, 0x0004,
++ 0x080c, 0xc141, 0x00c0, 0x6010, 0x2068, 0x684c, 0xd0fc, 0x0d90,
++ 0xa09c, 0x0003, 0xa39e, 0x0003, 0x0d68, 0x6003, 0x0003, 0x6106,
++ 0x2c10, 0x080c, 0x2068, 0x080c, 0x79fc, 0x080c, 0x7f6e, 0x0018,
++ 0xa016, 0x080c, 0x1870, 0x0005, 0x080c, 0x7db1, 0x6110, 0x81ff,
++ 0x0158, 0x00d6, 0x2168, 0x080c, 0xc4d7, 0x0036, 0x2019, 0x0029,
++ 0x080c, 0xc141, 0x003e, 0x00de, 0x080c, 0xae54, 0x080c, 0x7e94,
++ 0x0005, 0x080c, 0x7e47, 0x6110, 0x81ff, 0x0158, 0x00d6, 0x2168,
++ 0x080c, 0xc4d7, 0x0036, 0x2019, 0x0029, 0x080c, 0xc141, 0x003e,
++ 0x00de, 0x080c, 0xae54, 0x080c, 0x7f6e, 0x0005, 0xa182, 0x0085,
++ 0x0002, 0xbcba, 0xbcb8, 0xbcb8, 0xbcc6, 0xbcb8, 0xbcb8, 0xbcb8,
++ 0x080c, 0x1519, 0x6003, 0x000b, 0x6106, 0x080c, 0x7999, 0x0126,
++ 0x2091, 0x8000, 0x080c, 0x7e94, 0x012e, 0x0005, 0x0026, 0x00e6,
++ 0x080c, 0xc378, 0x0118, 0x080c, 0x95e3, 0x00d8, 0x2071, 0xcc80,
++ 0x7224, 0x6212, 0x7220, 0x080c, 0xbfef, 0x0118, 0x6007, 0x0086,
++ 0x0040, 0x6007, 0x0087, 0x7224, 0xa296, 0xffff, 0x1110, 0x6007,
++ 0x0086, 0x6003, 0x0001, 0x080c, 0x7999, 0x080c, 0x7e94, 0x080c,
++ 0x7f6e, 0x00ee, 0x002e, 0x0005, 0xa186, 0x0013, 0x1160, 0x6004,
++ 0xa08a, 0x0085, 0x0a0c, 0x1519, 0xa08a, 0x008c, 0x1a0c, 0x1519,
++ 0xa082, 0x0085, 0x00a2, 0xa186, 0x0027, 0x0130, 0xa186, 0x0014,
++ 0x0118, 0x080c, 0x962a, 0x0050, 0x2001, 0x0007, 0x080c, 0x52be,
++ 0x080c, 0x7db1, 0x080c, 0xae54, 0x080c, 0x7e94, 0x0005, 0xbd16,
++ 0xbd18, 0xbd18, 0xbd16, 0xbd16, 0xbd16, 0xbd16, 0x080c, 0x1519,
++ 0x080c, 0x7db1, 0x080c, 0xae54, 0x080c, 0x7e94, 0x0005, 0xa182,
++ 0x0085, 0x0a0c, 0x1519, 0xa182, 0x008c, 0x1a0c, 0x1519, 0xa182,
++ 0x0085, 0x0002, 0xbd31, 0xbd31, 0xbd31, 0xbd33, 0xbd31, 0xbd31,
++ 0xbd31, 0x080c, 0x1519, 0x0005, 0xa186, 0x0013, 0x0148, 0xa186,
++ 0x0014, 0x0130, 0xa186, 0x0027, 0x0118, 0x080c, 0x962a, 0x0030,
++ 0x080c, 0x7db1, 0x080c, 0xae54, 0x080c, 0x7e94, 0x0005, 0x0036,
++ 0x080c, 0xc3e2, 0x603f, 0x0000, 0x2019, 0x000b, 0x0031, 0x601f,
++ 0x0006, 0x6003, 0x0007, 0x003e, 0x0005, 0x0126, 0x0036, 0x2091,
++ 0x8000, 0x0086, 0x2c40, 0x0096, 0x2049, 0x0000, 0x080c, 0x8fc9,
++ 0x009e, 0x008e, 0x1578, 0x0076, 0x2c38, 0x080c, 0x906f, 0x007e,
++ 0x1548, 0x6000, 0xa086, 0x0000, 0x0528, 0x601c, 0xa086, 0x0007,
++ 0x0508, 0x00d6, 0x6000, 0xa086, 0x0004, 0x1150, 0x080c, 0xc3e2,
++ 0x601f, 0x0007, 0x2001, 0xc8fd, 0x2004, 0x6016, 0x080c, 0x1953,
++ 0x6010, 0x2068, 0x080c, 0xac91, 0x0110, 0x080c, 0xc141, 0x00de,
++ 0x6013, 0x0000, 0x080c, 0xc3e2, 0x601f, 0x0007, 0x2001, 0xc8fd,
++ 0x2004, 0x6016, 0x003e, 0x012e, 0x0005, 0x00f6, 0x00c6, 0x0036,
++ 0x0156, 0x2079, 0xcc80, 0x7938, 0x783c, 0x080c, 0x29c7, 0x15b0,
++ 0x0016, 0x00c6, 0x080c, 0x533d, 0x1578, 0x001e, 0x002e, 0x0026,
++ 0x0016, 0x2019, 0x0029, 0x080c, 0x9132, 0x080c, 0x7b16, 0x0076,
++ 0x2039, 0x0000, 0x080c, 0x7a0e, 0x007e, 0x001e, 0x0076, 0x2039,
++ 0x0000, 0x080c, 0xbef7, 0x007e, 0x080c, 0x553e, 0x0026, 0x6204,
++ 0xa294, 0xff00, 0x8217, 0xa286, 0x0006, 0x0118, 0xa286, 0x0004,
++ 0x1118, 0x62a0, 0x080c, 0x2eff, 0x002e, 0x001e, 0x080c, 0x4f47,
++ 0x6612, 0x6516, 0xa006, 0x0010, 0x00ce, 0x001e, 0x015e, 0x003e,
++ 0x00ce, 0x00fe, 0x0005, 0x00c6, 0x00d6, 0x00e6, 0x0016, 0x2009,
++ 0xc621, 0x2104, 0xa086, 0x0074, 0x1904, 0xbe30, 0x2069, 0xcc8e,
++ 0x690c, 0xa182, 0x0100, 0x06c0, 0x6908, 0xa184, 0x8000, 0x05e8,
++ 0x2001, 0xc8e5, 0x2004, 0xa005, 0x1160, 0x6018, 0x2070, 0x7010,
++ 0xa084, 0x00ff, 0x0118, 0x7000, 0xd0f4, 0x0118, 0xa184, 0x0800,
++ 0x0560, 0x6910, 0xa18a, 0x0001, 0x0610, 0x6914, 0x2069, 0xccae,
++ 0x6904, 0x81ff, 0x1198, 0x690c, 0xa182, 0x0100, 0x02a8, 0x6908,
++ 0x81ff, 0x1178, 0x6910, 0xa18a, 0x0001, 0x0288, 0x6918, 0xa18a,
++ 0x0001, 0x0298, 0x00d0, 0x6013, 0x0100, 0x00a0, 0x6013, 0x0300,
++ 0x0088, 0x6013, 0x0500, 0x0070, 0x6013, 0x0700, 0x0058, 0x6013,
++ 0x0900, 0x0040, 0x6013, 0x0b00, 0x0028, 0x6013, 0x0f00, 0x0010,
++ 0x6013, 0x2d00, 0xa085, 0x0001, 0x0008, 0xa006, 0x001e, 0x00ee,
++ 0x00de, 0x00ce, 0x0005, 0x00c6, 0x00d6, 0x0026, 0x0036, 0x0156,
++ 0x6218, 0x2268, 0x6b04, 0xa394, 0x00ff, 0xa286, 0x0006, 0x0190,
++ 0xa286, 0x0004, 0x0178, 0xa394, 0xff00, 0x8217, 0xa286, 0x0006,
++ 0x0148, 0xa286, 0x0004, 0x0130, 0x00c6, 0x2d60, 0x080c, 0x534c,
++ 0x00ce, 0x04c0, 0x2011, 0xcc96, 0xad98, 0x000a, 0x20a9, 0x0004,
++ 0x080c, 0xa103, 0x1580, 0x2011, 0xcc9a, 0xad98, 0x0006, 0x20a9,
++ 0x0004, 0x080c, 0xa103, 0x1538, 0x0046, 0x0016, 0x6aa0, 0xa294,
++ 0x00ff, 0x8227, 0xa006, 0x2009, 0xc653, 0x210c, 0xd1a4, 0x0138,
++ 0x2009, 0x0029, 0x080c, 0xc190, 0x6800, 0xc0e5, 0x6802, 0x2019,
++ 0x0029, 0x080c, 0x7b16, 0x0076, 0x2039, 0x0000, 0x080c, 0x7a0e,
++ 0x2c08, 0x080c, 0xbef7, 0x007e, 0x2001, 0x0007, 0x080c, 0x52be,
++ 0x001e, 0x004e, 0xa006, 0x015e, 0x003e, 0x002e, 0x00de, 0x00ce,
++ 0x0005, 0x00d6, 0x2069, 0xcc8e, 0x6800, 0xa086, 0x0800, 0x0118,
++ 0x6013, 0x0000, 0x0008, 0xa006, 0x00de, 0x0005, 0x00c6, 0x00f6,
++ 0x0016, 0x0026, 0x0036, 0x0156, 0x2079, 0xcc8c, 0x7930, 0x7834,
++ 0x080c, 0x29c7, 0x11a0, 0x080c, 0x533d, 0x1188, 0x2011, 0xcc90,
++ 0xac98, 0x000a, 0x20a9, 0x0004, 0x080c, 0xa103, 0x1140, 0x2011,
++ 0xcc94, 0xac98, 0x0006, 0x20a9, 0x0004, 0x080c, 0xa103, 0x015e,
++ 0x003e, 0x002e, 0x001e, 0x00fe, 0x00ce, 0x0005, 0x00c6, 0x0006,
++ 0x0016, 0x0026, 0x0036, 0x0156, 0x2011, 0xcc83, 0x2204, 0x8211,
++ 0x220c, 0x080c, 0x29c7, 0x11a0, 0x080c, 0x533d, 0x1188, 0x2011,
++ 0xcc96, 0xac98, 0x000a, 0x20a9, 0x0004, 0x080c, 0xa103, 0x1140,
++ 0x2011, 0xcc9a, 0xac98, 0x0006, 0x20a9, 0x0004, 0x080c, 0xa103,
++ 0x015e, 0x003e, 0x002e, 0x001e, 0x000e, 0x00ce, 0x0005, 0x00e6,
++ 0x00c6, 0x0086, 0x0076, 0x0066, 0x0056, 0x0046, 0x0026, 0x0126,
++ 0x2091, 0x8000, 0x2740, 0x2029, 0xc930, 0x252c, 0x2021, 0xc936,
++ 0x2424, 0x2061, 0xce00, 0x2071, 0xc600, 0x7648, 0x7068, 0x81ff,
++ 0x0150, 0x0006, 0xa186, 0xca3c, 0x000e, 0x0128, 0x8001, 0xa602,
++ 0x1a04, 0xbf78, 0x0018, 0xa606, 0x0904, 0xbf78, 0x2100, 0xac06,
++ 0x0904, 0xbf6f, 0x080c, 0xc1b8, 0x0904, 0xbf6f, 0x671c, 0xa786,
++ 0x0001, 0x0904, 0xbfc1, 0xa786, 0x0004, 0x0904, 0xbfc1, 0xa786,
++ 0x0007, 0x05e8, 0x2500, 0xac06, 0x05d0, 0x2400, 0xac06, 0x05b8,
++ 0x080c, 0xc1c8, 0x15a0, 0x88ff, 0x0118, 0x6050, 0xa906, 0x1578,
++ 0x00d6, 0x6000, 0xa086, 0x0004, 0x1120, 0x0016, 0x080c, 0x1953,
++ 0x001e, 0xa786, 0x0008, 0x1148, 0x080c, 0xae8f, 0x1130, 0x080c,
++ 0x9c09, 0x00de, 0x080c, 0xae54, 0x00d0, 0x6010, 0x2068, 0x080c,
++ 0xac91, 0x0190, 0xa786, 0x0003, 0x1528, 0x6837, 0x0103, 0x6b4a,
++ 0x6847, 0x0000, 0x080c, 0xc4d7, 0x0016, 0x080c, 0xaf03, 0x080c,
++ 0x580a, 0x001e, 0x080c, 0xae48, 0x00de, 0x080c, 0xae54, 0xace0,
++ 0x0018, 0x2001, 0xc617, 0x2004, 0xac02, 0x1210, 0x0804, 0xbf0b,
++ 0x012e, 0x002e, 0x004e, 0x005e, 0x006e, 0x007e, 0x008e, 0x00ce,
++ 0x00ee, 0x0005, 0xa786, 0x0006, 0x1150, 0xa386, 0x0005, 0x0128,
++ 0x080c, 0xc4d7, 0x080c, 0xc141, 0x08f8, 0x00de, 0x0c00, 0xa786,
++ 0x0009, 0x1548, 0x6000, 0xa086, 0x0004, 0x1128, 0x00c6, 0x080c,
++ 0x761a, 0x00ce, 0x00e8, 0x6000, 0xa086, 0x0003, 0x11c8, 0x080c,
++ 0x7e47, 0x00e6, 0x00d6, 0x6110, 0x2168, 0x080c, 0xac91, 0x0140,
++ 0x6018, 0x2070, 0x70b3, 0x0000, 0x70b7, 0x0000, 0x080c, 0x580a,
++ 0x00de, 0x00ee, 0x00c6, 0x080c, 0x95e3, 0x00ce, 0x080c, 0x7f6e,
++ 0x00de, 0x0804, 0xbf6f, 0xa786, 0x000a, 0x0904, 0xbf5f, 0x0804,
++ 0xbf5d, 0x080c, 0xc1c8, 0x1904, 0xbf6f, 0x81ff, 0x0904, 0xbf6f,
++ 0xa180, 0x0001, 0x2004, 0xa086, 0x0018, 0x0138, 0xa180, 0x0001,
++ 0x2004, 0xa086, 0x002d, 0x1904, 0xbf6f, 0x6000, 0xa086, 0x0002,
++ 0x1904, 0xbf6f, 0x080c, 0xae7e, 0x0138, 0x080c, 0xae8f, 0x1904,
++ 0xbf6f, 0x080c, 0x9c09, 0x0038, 0x080c, 0x2e6c, 0x080c, 0xae8f,
++ 0x1110, 0x080c, 0x9c09, 0x080c, 0xae54, 0x0804, 0xbf6f, 0x00c6,
++ 0x00e6, 0x0016, 0x2c08, 0x2170, 0xa006, 0x080c, 0xc162, 0x001e,
++ 0x0120, 0x601c, 0xa084, 0x000f, 0x001b, 0x00ee, 0x00ce, 0x0005,
++ 0xc008, 0xc008, 0xc008, 0xc008, 0xc008, 0xc008, 0xc00a, 0xc008,
++ 0xa006, 0x0005, 0x0046, 0x0016, 0x7018, 0xa080, 0x0028, 0x2024,
++ 0xa4a4, 0x00ff, 0x8427, 0x2c00, 0x2009, 0x0020, 0x080c, 0xc190,
++ 0x001e, 0x004e, 0x0036, 0x2019, 0x0002, 0x080c, 0xbd55, 0x003e,
++ 0xa085, 0x0001, 0x0005, 0x2001, 0x0001, 0x080c, 0x527f, 0x0156,
++ 0x0016, 0x0026, 0x0036, 0x20a9, 0x0004, 0x2019, 0xc605, 0x2011,
++ 0xcc96, 0x080c, 0xa103, 0x003e, 0x002e, 0x001e, 0x015e, 0xa005,
++ 0x0005, 0x00f6, 0x00e6, 0x00c6, 0x0086, 0x0076, 0x0066, 0x0026,
++ 0x0126, 0x2091, 0x8000, 0x2740, 0x2061, 0xce00, 0x2079, 0x0001,
++ 0x8fff, 0x0904, 0xc097, 0x2071, 0xc600, 0x7648, 0x7068, 0x8001,
++ 0xa602, 0x1a04, 0xc097, 0x88ff, 0x0128, 0x2800, 0xac06, 0x15b0,
++ 0x2079, 0x0000, 0x080c, 0xc1b8, 0x0588, 0x2400, 0xac06, 0x0570,
++ 0x671c, 0xa786, 0x0006, 0x1550, 0xa786, 0x0007, 0x0538, 0x88ff,
++ 0x1140, 0x6018, 0xa206, 0x1510, 0x85ff, 0x0118, 0x6050, 0xa106,
++ 0x11e8, 0x00d6, 0x6000, 0xa086, 0x0004, 0x1150, 0x080c, 0xc3e2,
++ 0x601f, 0x0007, 0x2001, 0xc8fd, 0x2004, 0x6016, 0x080c, 0x1953,
++ 0x6010, 0x2068, 0x080c, 0xac91, 0x0120, 0x0046, 0x080c, 0xc141,
++ 0x004e, 0x00de, 0x080c, 0xae54, 0x88ff, 0x1198, 0xace0, 0x0018,
++ 0x2001, 0xc617, 0x2004, 0xac02, 0x1210, 0x0804, 0xc048, 0xa006,
++ 0x012e, 0x002e, 0x006e, 0x007e, 0x008e, 0x00ce, 0x00ee, 0x00fe,
++ 0x0005, 0xa8c5, 0x0001, 0x0ca0, 0x0076, 0x0056, 0x0086, 0x2041,
++ 0x0000, 0x2029, 0x0001, 0x2c20, 0x2019, 0x0002, 0x6218, 0x0096,
++ 0x2049, 0x0000, 0x080c, 0x8fc9, 0x009e, 0x008e, 0x2039, 0x0000,
++ 0x080c, 0x906f, 0x080c, 0xc039, 0x005e, 0x007e, 0x0005, 0x0026,
++ 0x0046, 0x0056, 0x0076, 0x00c6, 0x0156, 0x2c20, 0x2128, 0x20a9,
++ 0x007f, 0x2009, 0x0000, 0x0016, 0x0036, 0x080c, 0x533d, 0x11b0,
++ 0x2c10, 0x0056, 0x0086, 0x2041, 0x0000, 0x2508, 0x2029, 0x0001,
++ 0x0096, 0x2049, 0x0000, 0x080c, 0x8fc9, 0x009e, 0x008e, 0x2039,
++ 0x0000, 0x080c, 0x906f, 0x080c, 0xc039, 0x005e, 0x003e, 0x001e,
++ 0x8108, 0x1f04, 0xc0cb, 0x015e, 0x00ce, 0x007e, 0x005e, 0x004e,
++ 0x002e, 0x0005, 0x0076, 0x0056, 0x6218, 0x0086, 0x2041, 0x0000,
++ 0x2029, 0x0001, 0x2019, 0x0048, 0x0096, 0x2049, 0x0000, 0x080c,
++ 0x8fc9, 0x009e, 0x008e, 0x2039, 0x0000, 0x080c, 0x906f, 0x2c20,
++ 0x080c, 0xc039, 0x005e, 0x007e, 0x0005, 0x0026, 0x0046, 0x0056,
++ 0x0076, 0x00c6, 0x0156, 0x2c20, 0x20a9, 0x007f, 0x2009, 0x0000,
++ 0x0016, 0x0036, 0x080c, 0x533d, 0x11c0, 0x2c10, 0x0086, 0x2041,
++ 0x0000, 0x2828, 0x0046, 0x2021, 0x0001, 0x080c, 0xc3c4, 0x004e,
++ 0x0096, 0x2049, 0x0000, 0x080c, 0x8fc9, 0x009e, 0x008e, 0x2039,
++ 0x0000, 0x080c, 0x906f, 0x080c, 0xc039, 0x003e, 0x001e, 0x8108,
++ 0x1f04, 0xc118, 0x015e, 0x00ce, 0x007e, 0x005e, 0x004e, 0x002e,
++ 0x0005, 0x0016, 0x00f6, 0x3800, 0xd08c, 0x0130, 0xad82, 0x1000,
++ 0x02b0, 0xad82, 0xc600, 0x0230, 0xad82, 0xfe00, 0x0280, 0xad82,
++ 0xffff, 0x1268, 0x6800, 0xa07d, 0x0138, 0x6803, 0x0000, 0x6b52,
++ 0x080c, 0x580a, 0x2f68, 0x0cb0, 0x6b52, 0x080c, 0x580a, 0x00fe,
++ 0x001e, 0x0005, 0x00e6, 0x0046, 0x0036, 0x2061, 0xce00, 0xa005,
++ 0x1138, 0x2071, 0xc600, 0x7448, 0x7068, 0x8001, 0xa402, 0x12d8,
++ 0x2100, 0xac06, 0x0168, 0x6000, 0xa086, 0x0000, 0x0148, 0x6008,
++ 0xa206, 0x1130, 0x6018, 0xa1a0, 0x0006, 0x2424, 0xa406, 0x0140,
++ 0xace0, 0x0018, 0x2001, 0xc617, 0x2004, 0xac02, 0x1220, 0x0c40,
++ 0xa085, 0x0001, 0x0008, 0xa006, 0x003e, 0x004e, 0x00ee, 0x0005,
++ 0x00d6, 0x0006, 0x080c, 0x1602, 0x000e, 0x090c, 0x1519, 0x6837,
++ 0x010d, 0x685e, 0x0026, 0x2010, 0x080c, 0xac81, 0x2001, 0x0000,
++ 0x0120, 0x2200, 0xa080, 0x0014, 0x2004, 0x002e, 0x684a, 0x6956,
++ 0x6c46, 0x684f, 0x0000, 0x2001, 0xc905, 0x2004, 0x6852, 0xa006,
++ 0x68b2, 0x6802, 0x683a, 0x685a, 0x080c, 0x580a, 0x00de, 0x0005,
++ 0x6700, 0xa786, 0x0000, 0x0158, 0xa786, 0x0001, 0x0140, 0xa786,
++ 0x000a, 0x0128, 0xa786, 0x0009, 0x0110, 0xa085, 0x0001, 0x0005,
++ 0x00e6, 0x6018, 0x2070, 0x70a0, 0xa206, 0x00ee, 0x0005, 0x0016,
++ 0x6004, 0xa08e, 0x001e, 0x11a0, 0x8007, 0x6130, 0xa18c, 0x00ff,
++ 0xa105, 0x6032, 0x6007, 0x0085, 0x6003, 0x000b, 0x601f, 0x0005,
++ 0x2001, 0xc8fe, 0x2004, 0x6016, 0x080c, 0x7999, 0x080c, 0x7e94,
++ 0x001e, 0x0005, 0xe000, 0xe000, 0x0005, 0x6020, 0xd0e4, 0x0158,
++ 0xd0cc, 0x0118, 0x080c, 0xaf6c, 0x0030, 0x080c, 0xc3e2, 0x080c,
++ 0x7103, 0x080c, 0x95e3, 0x0005, 0xa280, 0x0007, 0x2004, 0xa084,
++ 0x000f, 0x0002, 0xc20b, 0xc20b, 0xc20b, 0xc210, 0xc20b, 0xc20d,
++ 0xc20d, 0xc20b, 0xc20d, 0xa006, 0x0005, 0x00c6, 0x2260, 0x00ce,
++ 0xa085, 0x0001, 0x0005, 0xa280, 0x0007, 0x2004, 0xa084, 0x000f,
++ 0x0002, 0xc222, 0xc222, 0xc222, 0xc222, 0xc222, 0xc222, 0xc22d,
++ 0xc222, 0xc222, 0x6007, 0x003b, 0x602b, 0x0009, 0x6013, 0x2a00,
++ 0x6003, 0x0001, 0x080c, 0x7999, 0x0005, 0x00c6, 0x2260, 0x080c,
++ 0xc3e2, 0x603f, 0x0000, 0x6020, 0xc0f4, 0xc0cc, 0x6022, 0x6037,
++ 0x0000, 0x00ce, 0x00d6, 0x2268, 0xa186, 0x0007, 0x1904, 0xc288,
++ 0x6810, 0xa005, 0x0138, 0xa080, 0x0013, 0x2004, 0xd0fc, 0x1110,
++ 0x00de, 0x08c0, 0x6007, 0x003a, 0x6003, 0x0001, 0x080c, 0x7999,
++ 0x080c, 0x7e94, 0x00c6, 0x2d60, 0x6100, 0xa186, 0x0002, 0x1904,
++ 0xc311, 0x6010, 0xa005, 0x1138, 0x6000, 0xa086, 0x0007, 0x190c,
++ 0x1519, 0x0804, 0xc311, 0xa08c, 0xf000, 0x1130, 0x0028, 0x2068,
++ 0x6800, 0xa005, 0x1de0, 0x2d00, 0xa080, 0x0013, 0x2004, 0xa084,
++ 0x0003, 0xa086, 0x0002, 0x1180, 0x6010, 0x2068, 0x684c, 0xc0dc,
++ 0xc0f4, 0x684e, 0x6850, 0xc0f4, 0xc0fc, 0x6852, 0x2009, 0x0043,
++ 0x080c, 0xbbcb, 0x0804, 0xc311, 0x2009, 0x0041, 0x0804, 0xc30b,
++ 0xa186, 0x0005, 0x15f0, 0x6810, 0xa080, 0x0013, 0x2004, 0xd0bc,
++ 0x1118, 0x00de, 0x0804, 0xc222, 0xd0b4, 0x0128, 0xd0fc, 0x090c,
++ 0x1519, 0x0804, 0xc240, 0x6007, 0x003a, 0x6003, 0x0001, 0x080c,
++ 0x7999, 0x080c, 0x7e94, 0x00c6, 0x2d60, 0x6100, 0xa186, 0x0002,
++ 0x0120, 0xa186, 0x0004, 0x1904, 0xc311, 0x2071, 0xc96a, 0x7000,
++ 0xa086, 0x0003, 0x1128, 0x7004, 0xac06, 0x1110, 0x7003, 0x0000,
++ 0x6810, 0xa080, 0x0013, 0x200c, 0xc1f4, 0xc1dc, 0x2102, 0x8000,
++ 0x200c, 0xc1f4, 0xc1fc, 0xc1bc, 0x2102, 0x2009, 0x0042, 0x0804,
++ 0xc30b, 0x0036, 0x00d6, 0x00d6, 0x080c, 0x1602, 0x003e, 0x090c,
++ 0x1519, 0x6837, 0x010d, 0x6803, 0x0000, 0x683b, 0x0000, 0x685b,
++ 0x0000, 0x6b5e, 0x6857, 0x0045, 0x2c00, 0x6862, 0x6034, 0x6872,
++ 0x2360, 0x6020, 0xc0dd, 0x6022, 0x6018, 0xa080, 0x0028, 0x2004,
++ 0xa084, 0x00ff, 0x8007, 0x6350, 0x6b4a, 0x6846, 0x684f, 0x0000,
++ 0x6853, 0x0000, 0x6d6a, 0x6e66, 0x686f, 0x0001, 0x080c, 0x580a,
++ 0x2019, 0x0045, 0x6008, 0x2068, 0x080c, 0xbd55, 0x2d00, 0x600a,
++ 0x601f, 0x0006, 0x6003, 0x0007, 0x6017, 0x0000, 0x603f, 0x0000,
++ 0x00de, 0x003e, 0x0038, 0x603f, 0x0000, 0x6003, 0x0007, 0x080c,
++ 0xbbcb, 0x00ce, 0x00de, 0x0005, 0xa186, 0x0013, 0x1128, 0x6004,
++ 0xa082, 0x0085, 0x2008, 0x00c2, 0xa186, 0x0027, 0x1178, 0x080c,
++ 0x7db1, 0x0036, 0x00d6, 0x6010, 0x2068, 0x2019, 0x0004, 0x080c,
++ 0xc141, 0x00de, 0x003e, 0x080c, 0x7e94, 0x0005, 0xa186, 0x0014,
++ 0x0d70, 0x080c, 0x962a, 0x0005, 0xc33d, 0xc33b, 0xc33b, 0xc33b,
++ 0xc33b, 0xc33b, 0xc33d, 0x080c, 0x1519, 0x080c, 0x7db1, 0x6003,
++ 0x000c, 0x080c, 0x7e94, 0x0005, 0xa182, 0x008c, 0x1220, 0xa182,
++ 0x0085, 0x0208, 0x001a, 0x080c, 0x962a, 0x0005, 0xc355, 0xc355,
++ 0xc355, 0xc355, 0xc357, 0xc375, 0xc355, 0x080c, 0x1519, 0x00d6,
++ 0x2c68, 0x080c, 0x958d, 0x01a0, 0x6003, 0x0001, 0x6007, 0x001e,
++ 0x2009, 0xcc8e, 0x210c, 0x6136, 0x2009, 0xcc8f, 0x210c, 0x613a,
++ 0x600b, 0xffff, 0x6918, 0x611a, 0x601f, 0x0004, 0x080c, 0x7999,
++ 0x2d60, 0x080c, 0x95e3, 0x00de, 0x0005, 0x080c, 0x95e3, 0x0005,
++ 0x00e6, 0x6018, 0x2070, 0x7000, 0xd0ec, 0x00ee, 0x0005, 0x6010,
++ 0xa08c, 0xf000, 0x0904, 0xc3c3, 0xa080, 0x0013, 0x200c, 0xd1ec,
++ 0x05d0, 0x2001, 0xc672, 0x2004, 0xd0ec, 0x05a8, 0x6003, 0x0002,
++ 0x6020, 0xc0e5, 0x6022, 0xd1ac, 0x0180, 0x00f6, 0x2c78, 0x080c,
++ 0x56bf, 0x00fe, 0x0150, 0x2001, 0xc8ff, 0x2004, 0x603e, 0x2009,
++ 0xc672, 0x210c, 0xd1f4, 0x11e8, 0x0080, 0x2009, 0xc672, 0x210c,
++ 0xd1f4, 0x0128, 0x6020, 0xc0e4, 0x6022, 0xa006, 0x00a0, 0x2001,
++ 0xc8ff, 0x200c, 0x8103, 0xa100, 0x603e, 0x6018, 0xa088, 0x002f,
++ 0x2104, 0xa005, 0x0118, 0xa088, 0x0003, 0x0cd0, 0x2c0a, 0x600f,
++ 0x0000, 0xa085, 0x0001, 0x0005, 0x0016, 0x00c6, 0x00e6, 0x6150,
++ 0xa2f0, 0x002f, 0x2e04, 0x2060, 0x8cff, 0x0180, 0x84ff, 0x1118,
++ 0x6050, 0xa106, 0x1138, 0x600c, 0x2072, 0x080c, 0x7103, 0x080c,
++ 0x95e3, 0x0010, 0xacf0, 0x0003, 0x2e64, 0x0c70, 0x00ee, 0x00ce,
++ 0x001e, 0x0005, 0x00d6, 0x6018, 0xa0e8, 0x002f, 0x2d04, 0xa005,
++ 0x0140, 0xac06, 0x0120, 0x2d04, 0xa0e8, 0x0003, 0x0cb8, 0x600c,
++ 0x206a, 0x00de, 0x0005, 0x0026, 0x0036, 0x0156, 0x2011, 0xc628,
++ 0x2204, 0xa084, 0x00ff, 0x2019, 0xcc8e, 0x2334, 0xa636, 0x11d8,
++ 0x8318, 0x2334, 0x2204, 0xa084, 0xff00, 0xa636, 0x11a0, 0x2011,
++ 0xcc90, 0x6018, 0xa098, 0x000a, 0x20a9, 0x0004, 0x080c, 0xa103,
++ 0x1150, 0x2011, 0xcc94, 0x6018, 0xa098, 0x0006, 0x20a9, 0x0004,
++ 0x080c, 0xa103, 0x1100, 0x015e, 0x003e, 0x002e, 0x0005, 0x00e6,
++ 0x2071, 0xc600, 0x080c, 0x4f02, 0x080c, 0x2c62, 0x00ee, 0x0005,
++ 0x00d6, 0x080c, 0x15e5, 0x0500, 0x2d10, 0xa290, 0x000d, 0x2013,
++ 0x0134, 0x8210, 0x2013, 0x0000, 0x8210, 0x703c, 0x2012, 0x8210,
++ 0x7038, 0x2012, 0x8210, 0x2218, 0x7048, 0x2012, 0x8210, 0x704c,
++ 0x2012, 0x8210, 0x7050, 0x2012, 0x8210, 0x7054, 0x2012, 0x2300,
++ 0x080c, 0x3e8f, 0x080c, 0x580a, 0x00de, 0x0005, 0x00d6, 0x0026,
++ 0x080c, 0x1602, 0x090c, 0x1519, 0xad90, 0x000e, 0x20a9, 0x000c,
++ 0x22a0, 0xa016, 0x42a4, 0xa186, 0x0046, 0x1118, 0x6837, 0x0136,
++ 0x0038, 0x6837, 0x0138, 0xa186, 0x0041, 0x0110, 0x684b, 0x0001,
++ 0x7038, 0xa084, 0xff00, 0x7240, 0xa294, 0xff00, 0x8007, 0xa215,
++ 0x6a6a, 0xa186, 0x0046, 0x1168, 0x7038, 0xa084, 0x00ff, 0x723c,
++ 0xa294, 0xff00, 0xa215, 0x6a6e, 0x723c, 0xa294, 0x00ff, 0x6a72,
++ 0x0060, 0x7040, 0xa084, 0x00ff, 0x7244, 0xa294, 0xff00, 0xa215,
++ 0x6a6e, 0x7244, 0xa294, 0x00ff, 0x6a72, 0xa186, 0x0046, 0x1118,
++ 0xae90, 0x0012, 0x0010, 0xae90, 0x001a, 0x2204, 0x8007, 0x6876,
++ 0x8210, 0x2204, 0x8007, 0x687a, 0x8210, 0x2204, 0x8007, 0x687e,
++ 0x8210, 0x2204, 0x8007, 0x6882, 0x8210, 0xa186, 0x0046, 0x1118,
++ 0xae90, 0x0016, 0x0010, 0xae90, 0x001e, 0x2204, 0x8007, 0x6886,
++ 0x8210, 0x2204, 0x8007, 0x688a, 0x8210, 0x2204, 0x8007, 0x688e,
++ 0x8210, 0x2204, 0x8007, 0x6892, 0x8210, 0xa186, 0x0046, 0x1118,
++ 0xae90, 0x0022, 0x0010, 0xae90, 0x002a, 0x00d6, 0xade8, 0x0025,
++ 0x20a9, 0x0008, 0x2204, 0x8007, 0x206a, 0x8210, 0x8d68, 0x1f04,
++ 0xc4ca, 0x00de, 0x002e, 0x080c, 0x580a, 0x00de, 0x0005, 0x00e6,
++ 0x6018, 0x2070, 0x7000, 0xd0fc, 0x0108, 0x0011, 0x00ee, 0x0005,
++ 0x6850, 0xc0e5, 0x6852, 0x0005, 0x00e6, 0x00c6, 0x0076, 0x0066,
++ 0x0056, 0x0046, 0x0026, 0x0016, 0x0126, 0x2091, 0x8000, 0x2029,
++ 0xc930, 0x252c, 0x2021, 0xc936, 0x2424, 0x2061, 0xce00, 0x2071,
++ 0xc600, 0x7648, 0x7068, 0xa606, 0x0578, 0x671c, 0xa786, 0x0001,
++ 0x0118, 0xa786, 0x0008, 0x1500, 0x2500, 0xac06, 0x01e8, 0x2400,
++ 0xac06, 0x01d0, 0x080c, 0xc1b8, 0x01b8, 0x080c, 0xc1c8, 0x11a0,
++ 0x6000, 0xa086, 0x0004, 0x1120, 0x0016, 0x080c, 0x1953, 0x001e,
++ 0x080c, 0xae7e, 0x1110, 0x080c, 0x2e6c, 0x080c, 0xae8f, 0x1110,
++ 0x080c, 0x9c09, 0x080c, 0xae54, 0xace0, 0x0018, 0x2001, 0xc617,
++ 0x2004, 0xac02, 0x1208, 0x0858, 0x012e, 0x001e, 0x002e, 0x004e,
++ 0x005e, 0x006e, 0x007e, 0x00ce, 0x00ee, 0x0005, 0x0126, 0x0006,
++ 0x00e6, 0x0016, 0x2091, 0x8000, 0x2071, 0xc640, 0xd5a4, 0x0118,
++ 0x7034, 0x8000, 0x7036, 0xd5b4, 0x0118, 0x7030, 0x8000, 0x7032,
++ 0xd5ac, 0x0178, 0x2500, 0xa084, 0x0007, 0xa08e, 0x0003, 0x0148,
++ 0xa08e, 0x0004, 0x0130, 0xa08e, 0x0005, 0x0118, 0x2071, 0xc64a,
++ 0x04c9, 0x001e, 0x00ee, 0x000e, 0x012e, 0x0005, 0x0126, 0x0006,
++ 0x00e6, 0x0016, 0x2091, 0x8000, 0x2071, 0xc640, 0xd5a4, 0x0118,
++ 0x7034, 0x8000, 0x7036, 0xd5b4, 0x0118, 0x7030, 0x8000, 0x7032,
++ 0xd5ac, 0x0178, 0x2500, 0xa084, 0x0007, 0xa08e, 0x0003, 0x0148,
++ 0xa08e, 0x0004, 0x0130, 0xa08e, 0x0005, 0x0118, 0x2071, 0xc64a,
++ 0x0089, 0x001e, 0x00ee, 0x000e, 0x012e, 0x0005, 0x0126, 0x0006,
++ 0x00e6, 0x2091, 0x8000, 0x2071, 0xc642, 0x0021, 0x00ee, 0x000e,
++ 0x012e, 0x0005, 0x2e04, 0x8000, 0x2072, 0x1220, 0x8e70, 0x2e04,
++ 0x8000, 0x2072, 0x0005, 0x00e6, 0x2071, 0xc640, 0x0c99, 0x00ee,
++ 0x0005, 0x00e6, 0x2071, 0xc644, 0x0c69, 0x00ee, 0x0005, 0x0126,
++ 0x0006, 0x00e6, 0x2091, 0x8000, 0x2071, 0xc640, 0x7044, 0x8000,
++ 0x7046, 0x00ee, 0x000e, 0x012e, 0x0005, 0x0001, 0x0002, 0x0004,
++ 0x0008, 0x0010, 0x0020, 0x0040, 0x0080, 0x0100, 0x0200, 0x0400,
++ 0x0800, 0x1000, 0x2000, 0x4000, 0x8000, 0xb0c4
++};
++#ifdef UNIQUE_FW_NAME
++unsigned short fw2200ip_length01 = 0xb5c6;
++#else
++unsigned short risc_code_length01 = 0xb5c6;
++#endif
++
+--- /dev/null Thu Apr 11 07:25:15 2002
++++ linux-2.5.73-n9560/drivers/scsi/qla2xxx/ql2300tpx_fw.c Thu Jul 3 15:34:42 2003
+@@ -0,0 +1,6494 @@
++/**************************************************************************
++ * QLOGIC LINUX SOFTWARE
++ *
++ * QLogic ISP2x00 device driver for Linux 2.5.x
++ * Copyright (C) 2003 Qlogic Corporation
++ * (www.qlogic.com)
++ *
++ * This program is free software; you can redistribute it and/or modify it
++ * under the terms of the GNU General Public License as published by the
++ * Free Software Foundation; either version 2, or (at your option) any
++ * later version.
++ *
++ * This program is distributed in the hope that it will be useful, but
++ * WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ * General Public License for more details.
++ *
++ *************************************************************************/
++/*
++ * Firmware Version 3.02.10 (14:20 Apr 17, 2003)
++ */
++
++#ifdef UNIQUE_FW_NAME
++unsigned short fw2300tpx_version = 3*1024+2;
++#else
++unsigned short risc_code_version = 3*1024+2;
++#endif
++
++#ifdef UNIQUE_FW_NAME
++unsigned char fw2300tpx_version_str[] = {3, 2,10};
++#else
++unsigned char firmware_version[] = {3, 2,10};
++#endif
++
++#ifdef UNIQUE_FW_NAME
++#define fw2300tpx_VERSION_STRING "3.02.10"
++#else
++#define FW_VERSION_STRING "3.02.10"
++#endif
++
++#ifdef UNIQUE_FW_NAME
++unsigned short fw2300tpx_addr01 = 0x0800 ;
++#else
++unsigned short risc_code_addr01 = 0x0800 ;
++#endif
++
++#ifdef UNIQUE_FW_NAME
++unsigned short fw2300tpx_code01[] = {
++#else
++unsigned short risc_code01[] = {
++#endif
++ 0x0470, 0x0000, 0x0000, 0xc920, 0x0000, 0x0003, 0x0002, 0x000a,
++ 0x0117, 0x2043, 0x4f50, 0x5952, 0x4947, 0x4854, 0x2032, 0x3030,
++ 0x3120, 0x514c, 0x4f47, 0x4943, 0x2043, 0x4f52, 0x504f, 0x5241,
++ 0x5449, 0x4f4e, 0x2049, 0x5350, 0x3233, 0x3030, 0x2046, 0x6972,
++ 0x6d77, 0x6172, 0x6520, 0x2056, 0x6572, 0x7369, 0x6f6e, 0x2030,
++ 0x332e, 0x3032, 0x2e31, 0x3020, 0x2020, 0x2020, 0x2400, 0x20a9,
++ 0x000f, 0x2001, 0x0000, 0x400f, 0x2091, 0x2200, 0x20a9, 0x000f,
++ 0x2001, 0x0000, 0x400f, 0x2091, 0x2400, 0x20a9, 0x000f, 0x2001,
++ 0x0000, 0x400f, 0x2091, 0x2600, 0x20a9, 0x000f, 0x2001, 0x0000,
++ 0x400f, 0x2091, 0x2800, 0x20a9, 0x000f, 0x2001, 0x0000, 0x400f,
++ 0x2091, 0x2a00, 0x20a9, 0x000f, 0x2001, 0x0000, 0x400f, 0x2091,
++ 0x2c00, 0x20a9, 0x000f, 0x2001, 0x0000, 0x400f, 0x2091, 0x2e00,
++ 0x20a9, 0x000f, 0x2001, 0x0000, 0x400f, 0x2091, 0x2000, 0x2001,
++ 0x0000, 0x20c1, 0x0004, 0x2001, 0x017f, 0x2003, 0x0000, 0x20c9,
++ 0x1bff, 0x2059, 0x0000, 0x2b78, 0x7883, 0x0004, 0x2089, 0x28b1,
++ 0x2051, 0x1800, 0x2a70, 0x20e1, 0x0001, 0x20e9, 0x0001, 0x2029,
++ 0x4d00, 0x2031, 0xffff, 0x2039, 0x4cd0, 0x2021, 0x0200, 0x20e9,
++ 0x0001, 0x20a1, 0x0000, 0x20a9, 0x0800, 0x900e, 0x4104, 0x20e9,
++ 0x0001, 0x20a1, 0x1000, 0x900e, 0x2001, 0x0cc0, 0x9084, 0x0fff,
++ 0x20a8, 0x4104, 0x2001, 0x0000, 0x9086, 0x0000, 0x0120, 0x21a8,
++ 0x4104, 0x8001, 0x1de0, 0x7566, 0x766a, 0x7762, 0x746e, 0x7472,
++ 0x00e6, 0x2071, 0x1a8a, 0x2472, 0x00ee, 0x20a1, 0x1cd0, 0x7168,
++ 0x810d, 0x810d, 0x810d, 0x810d, 0x918c, 0x000f, 0x2001, 0x0001,
++ 0x9112, 0x900e, 0x21a8, 0x4104, 0x8211, 0x1de0, 0x7168, 0x3400,
++ 0x8001, 0x9102, 0x0120, 0x0218, 0x20a8, 0x900e, 0x4104, 0x2009,
++ 0x1800, 0x810d, 0x810d, 0x810d, 0x810d, 0x810d, 0x918c, 0x001f,
++ 0x2001, 0x0001, 0x9112, 0x20e9, 0x0001, 0x20a1, 0x0800, 0x900e,
++ 0x20a9, 0x0800, 0x4104, 0x8211, 0x1dd8, 0x080c, 0x0ec6, 0x080c,
++ 0x56e7, 0x080c, 0x94ea, 0x080c, 0x107b, 0x080c, 0x1245, 0x080c,
++ 0x18ae, 0x080c, 0x0d1d, 0x080c, 0x1000, 0x080c, 0x2f6e, 0x080c,
++ 0x6b54, 0x080c, 0x5f51, 0x080c, 0x774d, 0x080c, 0x20b6, 0x080c,
++ 0x7a7b, 0x080c, 0x7190, 0x080c, 0x1ef3, 0x080c, 0x2027, 0x080c,
++ 0x20ab, 0x2091, 0x3009, 0x7883, 0x0000, 0x1004, 0x091d, 0x7880,
++ 0x9086, 0x0002, 0x1190, 0x7883, 0x4000, 0x7837, 0x4000, 0x7833,
++ 0x0010, 0x0e04, 0x0911, 0x2091, 0x5000, 0x2091, 0x4080, 0x2001,
++ 0x0089, 0x2004, 0xd084, 0x190c, 0x113e, 0x2071, 0x1800, 0x7003,
++ 0x0000, 0x2071, 0x1800, 0x7000, 0x908e, 0x0003, 0x1168, 0x080c,
++ 0x44bf, 0x080c, 0x2f92, 0x080c, 0x6bc5, 0x080c, 0x63e8, 0x080c,
++ 0x7778, 0x080c, 0x2849, 0x0c68, 0x000b, 0x0c88, 0x0940, 0x0941,
++ 0x0ab2, 0x093e, 0x0b69, 0x0d14, 0x0d14, 0x0d14, 0x080c, 0x0d84,
++ 0x0005, 0x0126, 0x00f6, 0x2091, 0x8000, 0x7000, 0x9086, 0x0001,
++ 0x1904, 0x0a90, 0x080c, 0x0e2c, 0x080c, 0x6877, 0x0150, 0x080c,
++ 0x689a, 0x1580, 0x2079, 0x0100, 0x7828, 0x9085, 0x1800, 0x782a,
++ 0x0448, 0x080c, 0x67be, 0x7000, 0x9086, 0x0001, 0x1904, 0x0a90,
++ 0x7090, 0x9086, 0x0028, 0x1904, 0x0a90, 0x2001, 0x0161, 0x2003,
++ 0x0001, 0x2079, 0x0100, 0x7827, 0xffff, 0x7a28, 0x9295, 0x5e2f,
++ 0x7a2a, 0x2011, 0x6739, 0x080c, 0x781a, 0x2011, 0x672c, 0x080c,
++ 0x78e7, 0x2011, 0x554d, 0x080c, 0x781a, 0x2011, 0x8030, 0x901e,
++ 0x738e, 0x0460, 0x080c, 0x4e04, 0x2079, 0x0100, 0x7844, 0x9005,
++ 0x1904, 0x0a90, 0x2011, 0x554d, 0x080c, 0x781a, 0x2001, 0x0265,
++ 0x2001, 0x0205, 0x2003, 0x0000, 0x7840, 0x9084, 0xfffb, 0x7842,
++ 0x2001, 0x1973, 0x2004, 0x9005, 0x1140, 0x00c6, 0x2061, 0x0100,
++ 0x080c, 0x568f, 0x00ce, 0x0804, 0x0a90, 0x780f, 0x006b, 0x7a28,
++ 0x9295, 0x5e2f, 0x7a2a, 0x2011, 0x8010, 0x73d4, 0x2001, 0x1974,
++ 0x2003, 0x0001, 0x080c, 0x2718, 0x080c, 0x447f, 0x7240, 0xc284,
++ 0x7242, 0x2001, 0x180c, 0x200c, 0xc1ac, 0xc1cc, 0x2102, 0x080c,
++ 0x8d36, 0x2011, 0x0004, 0x080c, 0xb0b9, 0x080c, 0x5e30, 0x080c,
++ 0x6877, 0x1120, 0x080c, 0x275c, 0x02e0, 0x0400, 0x080c, 0x5696,
++ 0x0140, 0x708f, 0x0001, 0x70cf, 0x0000, 0x080c, 0x4fc7, 0x0804,
++ 0x0a90, 0x080c, 0x4dea, 0xd094, 0x0188, 0x2011, 0x180c, 0x2204,
++ 0xc0cd, 0x2012, 0x080c, 0x4dee, 0xd0d4, 0x1118, 0x080c, 0x275c,
++ 0x1270, 0x2011, 0x180c, 0x2204, 0xc0bc, 0x00a8, 0x080c, 0x4dee,
++ 0xd0d4, 0x1db8, 0x2011, 0x180c, 0x2204, 0xc0bd, 0x0060, 0x2011,
++ 0x180c, 0x2204, 0xc0bd, 0x2012, 0x080c, 0x5f25, 0x1128, 0xd0a4,
++ 0x0118, 0x2204, 0xc0fd, 0x2012, 0x080c, 0x5eeb, 0x0120, 0x7a0c,
++ 0xc2b4, 0x7a0e, 0x00a8, 0x7077, 0x0000, 0x080c, 0x6877, 0x1130,
++ 0x70a8, 0x9005, 0x1168, 0x080c, 0xb4bd, 0x0050, 0x080c, 0xb4bd,
++ 0x70d8, 0xd09c, 0x1128, 0x70a8, 0x9005, 0x0110, 0x080c, 0x5677,
++ 0x70e3, 0x0000, 0x70df, 0x0000, 0x709f, 0x0000, 0x72d8, 0x080c,
++ 0x6877, 0x1170, 0x9016, 0x0016, 0x080c, 0x2515, 0x2019, 0x193c,
++ 0x211a, 0x001e, 0x7057, 0xffff, 0x705b, 0x00ef, 0x707b, 0x0000,
++ 0x2079, 0x1852, 0x7804, 0xd0ac, 0x0108, 0xc295, 0x72da, 0x080c,
++ 0x6877, 0x0118, 0x9296, 0x0004, 0x0548, 0x2011, 0x0001, 0x080c,
++ 0xb0b9, 0x70a3, 0x0000, 0x70a7, 0xffff, 0x7003, 0x0002, 0x2079,
++ 0x0100, 0x7827, 0x0003, 0x7828, 0x9085, 0x0003, 0x782a, 0x00fe,
++ 0x080c, 0x2b1e, 0x2011, 0x0005, 0x080c, 0x8e99, 0x080c, 0x8125,
++ 0x080c, 0x6877, 0x0148, 0x00c6, 0x2061, 0x0100, 0x0016, 0x080c,
++ 0x2515, 0x61e2, 0x001e, 0x00ce, 0x012e, 0x0420, 0x70a3, 0x0000,
++ 0x70a7, 0xffff, 0x7003, 0x0002, 0x00f6, 0x2079, 0x0100, 0x7827,
++ 0x0003, 0x7828, 0x9085, 0x0003, 0x782a, 0x00fe, 0x2011, 0x0005,
++ 0x080c, 0x8e99, 0x080c, 0x8125, 0x080c, 0x6877, 0x0148, 0x00c6,
++ 0x2061, 0x0100, 0x0016, 0x080c, 0x2515, 0x61e2, 0x001e, 0x00ce,
++ 0x00fe, 0x012e, 0x0005, 0x00c6, 0x080c, 0x6877, 0x1118, 0x20a9,
++ 0x0800, 0x0010, 0x20a9, 0x0782, 0x080c, 0x6877, 0x1110, 0x900e,
++ 0x0010, 0x2009, 0x007e, 0x080c, 0x2e11, 0x8108, 0x1f04, 0x0aa3,
++ 0x7077, 0x0000, 0x7078, 0x9084, 0x00ff, 0x707a, 0x70ab, 0x0000,
++ 0x00ce, 0x0005, 0x00b6, 0x0126, 0x2091, 0x8000, 0x7000, 0x9086,
++ 0x0002, 0x1904, 0x0b66, 0x70a4, 0x9086, 0xffff, 0x0130, 0x080c,
++ 0x2b1e, 0x080c, 0x8125, 0x0804, 0x0b66, 0x70d8, 0xd0ac, 0x1110,
++ 0xd09c, 0x0540, 0xd084, 0x0530, 0x0006, 0x2001, 0x0103, 0x2003,
++ 0x002b, 0x000e, 0xd08c, 0x01f0, 0x70dc, 0x9086, 0xffff, 0x01b0,
++ 0x080c, 0x2c86, 0x080c, 0x8125, 0x70d8, 0xd094, 0x1904, 0x0b66,
++ 0x2011, 0x0001, 0x080c, 0xb759, 0x0110, 0x2011, 0x0003, 0x901e,
++ 0x080c, 0x2cc0, 0x080c, 0x8125, 0x0804, 0x0b66, 0x70e0, 0x9005,
++ 0x1904, 0x0b66, 0x70a0, 0x9005, 0x1904, 0x0b66, 0x70d8, 0xd0a4,
++ 0x0118, 0xd0b4, 0x0904, 0x0b66, 0x080c, 0x5eeb, 0x1904, 0x0b66,
++ 0x080c, 0x5f3e, 0x1904, 0x0b66, 0x080c, 0x5f25, 0x01c0, 0x0156,
++ 0x00c6, 0x20a9, 0x007f, 0x900e, 0x0016, 0x080c, 0x5c0d, 0x1118,
++ 0xb800, 0xd0ec, 0x1138, 0x001e, 0x8108, 0x1f04, 0x0b0c, 0x00ce,
++ 0x015e, 0x0028, 0x001e, 0x00ce, 0x015e, 0x0804, 0x0b66, 0x0006,
++ 0x2001, 0x0103, 0x2003, 0x006b, 0x000e, 0x2011, 0x1980, 0x080c,
++ 0x0f36, 0x2011, 0x199a, 0x080c, 0x0f36, 0x7030, 0xc08c, 0x7032,
++ 0x7003, 0x0003, 0x70a7, 0xffff, 0x080c, 0x0e0e, 0x9006, 0x080c,
++ 0x23a6, 0x0036, 0x0046, 0x2019, 0xffff, 0x2021, 0x0006, 0x080c,
++ 0x44f9, 0x004e, 0x003e, 0x00f6, 0x2079, 0x0100, 0x080c, 0x689a,
++ 0x0150, 0x080c, 0x6877, 0x7828, 0x0118, 0x9084, 0xe1ff, 0x0010,
++ 0x9084, 0xffdf, 0x782a, 0x00fe, 0x2001, 0x19b5, 0x2004, 0x9086,
++ 0x0005, 0x1120, 0x2011, 0x0000, 0x080c, 0x8e99, 0x2011, 0x0000,
++ 0x080c, 0x8ea3, 0x080c, 0x8125, 0x080c, 0x820b, 0x012e, 0x00be,
++ 0x0005, 0x0016, 0x0046, 0x00f6, 0x0126, 0x2091, 0x8000, 0x2079,
++ 0x0100, 0x7904, 0x918c, 0xfffd, 0x7906, 0x2009, 0x00f7, 0x080c,
++ 0x5660, 0x7940, 0x918c, 0x0010, 0x7942, 0x7924, 0xd1b4, 0x0110,
++ 0x7827, 0x0040, 0xd19c, 0x0110, 0x7827, 0x0008, 0x0006, 0x0036,
++ 0x0156, 0x7954, 0xd1ac, 0x1904, 0x0bf6, 0x2001, 0x1974, 0x2004,
++ 0x9005, 0x1518, 0x080c, 0x27d7, 0x1148, 0x2001, 0x0001, 0x080c,
++ 0x2747, 0x2001, 0x0001, 0x080c, 0x272a, 0x00b8, 0x080c, 0x27df,
++ 0x1138, 0x9006, 0x080c, 0x2747, 0x9006, 0x080c, 0x272a, 0x0068,
++ 0x080c, 0x27e7, 0x1d50, 0x2001, 0x1965, 0x2004, 0xd0fc, 0x0108,
++ 0x0020, 0x080c, 0x2541, 0x0804, 0x0cd6, 0x080c, 0x6888, 0x0148,
++ 0x080c, 0x689a, 0x1118, 0x080c, 0x6b4f, 0x0050, 0x080c, 0x687f,
++ 0x0dd0, 0x080c, 0x6b4a, 0x080c, 0x6b40, 0x080c, 0x67be, 0x0058,
++ 0x080c, 0x6877, 0x0140, 0x2009, 0x00f8, 0x080c, 0x5660, 0x7843,
++ 0x0090, 0x7843, 0x0010, 0x20a9, 0x09c4, 0x7820, 0xd09c, 0x1138,
++ 0x080c, 0x6877, 0x0138, 0x7824, 0xd0ac, 0x1904, 0x0cdb, 0x1f04,
++ 0x0bd5, 0x0070, 0x7824, 0x080c, 0x6891, 0x0118, 0xd0ac, 0x1904,
++ 0x0cdb, 0x9084, 0x1800, 0x0d98, 0x7003, 0x0001, 0x0804, 0x0cdb,
++ 0x2001, 0x0001, 0x080c, 0x23a6, 0x0804, 0x0cee, 0x2001, 0x1974,
++ 0x2004, 0x9005, 0x1518, 0x080c, 0x27d7, 0x1148, 0x2001, 0x0001,
++ 0x080c, 0x2747, 0x2001, 0x0001, 0x080c, 0x272a, 0x00b8, 0x080c,
++ 0x27df, 0x1138, 0x9006, 0x080c, 0x2747, 0x9006, 0x080c, 0x272a,
++ 0x0068, 0x080c, 0x27e7, 0x1d50, 0x2001, 0x1965, 0x2004, 0xd0fc,
++ 0x0108, 0x0020, 0x080c, 0x2541, 0x0804, 0x0cd6, 0x7850, 0x9085,
++ 0x0040, 0x7852, 0x7938, 0x7850, 0x9084, 0xfbcf, 0x7852, 0x080c,
++ 0x27ef, 0x9085, 0x2000, 0x7852, 0x793a, 0x20a9, 0x0046, 0x1d04,
++ 0x0c2f, 0x080c, 0x78c7, 0x1f04, 0x0c2f, 0x7850, 0x9085, 0x0400,
++ 0x9084, 0xdfbf, 0x7852, 0x793a, 0x080c, 0x6888, 0x0148, 0x080c,
++ 0x689a, 0x1118, 0x080c, 0x6b4f, 0x0050, 0x080c, 0x687f, 0x0dd0,
++ 0x080c, 0x6b4a, 0x080c, 0x6b40, 0x080c, 0x67be, 0x0020, 0x2009,
++ 0x00f8, 0x080c, 0x5660, 0x20a9, 0x0028, 0xa001, 0x1f04, 0x0c55,
++ 0x7850, 0x9085, 0x1400, 0x7852, 0x080c, 0x6877, 0x0120, 0x7843,
++ 0x0090, 0x7843, 0x0010, 0x2021, 0xe678, 0x2019, 0xea60, 0x080c,
++ 0x0d15, 0x7820, 0xd09c, 0x1588, 0x080c, 0x6877, 0x0904, 0x0cbb,
++ 0x7824, 0xd0ac, 0x1904, 0x0cdb, 0x080c, 0x689a, 0x1530, 0x0046,
++ 0x2021, 0x0320, 0x8421, 0x1df0, 0x004e, 0x7827, 0x1800, 0x080c,
++ 0x27ef, 0x7824, 0x9084, 0x1800, 0x1168, 0x9484, 0x0fff, 0x1140,
++ 0x2001, 0x180f, 0x2004, 0x9084, 0x9000, 0x0110, 0x080c, 0x0cfc,
++ 0x8421, 0x1158, 0x1d04, 0x0c96, 0x080c, 0x78c7, 0x080c, 0x6b4a,
++ 0x080c, 0x6b40, 0x7003, 0x0001, 0x04f0, 0x8319, 0x1940, 0x1d04,
++ 0x0ca3, 0x080c, 0x78c7, 0x2009, 0x1968, 0x2104, 0x9005, 0x0118,
++ 0x8001, 0x200a, 0x1178, 0x200b, 0x000a, 0x7827, 0x0048, 0x20a9,
++ 0x0002, 0x080c, 0x27d0, 0x7924, 0x080c, 0x27ef, 0xd19c, 0x0110,
++ 0x080c, 0x2718, 0x00d8, 0x080c, 0x6888, 0x1140, 0x94a2, 0x03e8,
++ 0x1128, 0x080c, 0x6853, 0x7003, 0x0001, 0x00a8, 0x7827, 0x1800,
++ 0x080c, 0x27ef, 0x7824, 0x080c, 0x6891, 0x0110, 0xd0ac, 0x1158,
++ 0x9084, 0x1800, 0x0950, 0x7003, 0x0001, 0x0028, 0x2001, 0x0001,
++ 0x080c, 0x23a6, 0x0078, 0x2009, 0x180c, 0x210c, 0xd19c, 0x1120,
++ 0x7904, 0x918d, 0x0002, 0x7906, 0x7827, 0x0048, 0x7828, 0x9085,
++ 0x0028, 0x782a, 0x7850, 0x9085, 0x0400, 0x7852, 0x2001, 0x1974,
++ 0x2003, 0x0000, 0x9006, 0x78f2, 0x015e, 0x003e, 0x000e, 0x012e,
++ 0x00fe, 0x004e, 0x001e, 0x0005, 0x0006, 0x0016, 0x0036, 0x0046,
++ 0x00b6, 0x00c6, 0x00d6, 0x00e6, 0x00f6, 0x0156, 0x080c, 0x2f92,
++ 0x0061, 0x015e, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x00be, 0x004e,
++ 0x003e, 0x001e, 0x000e, 0x0005, 0x0005, 0x080c, 0xb759, 0x0120,
++ 0x1d04, 0x0d1c, 0x080c, 0x78c7, 0x0005, 0x2a70, 0x2061, 0x1978,
++ 0x2063, 0x0003, 0x6007, 0x0002, 0x600b, 0x000a, 0x600f, 0x0117,
++ 0x2001, 0x194b, 0x900e, 0x2102, 0x718e, 0x2001, 0x0100, 0x2004,
++ 0x9082, 0x0002, 0x0218, 0x7057, 0xffff, 0x0008, 0x7156, 0x705f,
++ 0xffff, 0x7176, 0x717a, 0x080c, 0xb4bd, 0x70ef, 0x00c0, 0x2061,
++ 0x193b, 0x6003, 0x0909, 0x6106, 0x600b, 0x8800, 0x600f, 0x0200,
++ 0x6013, 0x00ff, 0x6017, 0x000f, 0x611a, 0x601f, 0x07d0, 0x2061,
++ 0x1943, 0x6003, 0x8000, 0x6106, 0x610a, 0x600f, 0x0200, 0x6013,
++ 0x00ff, 0x6116, 0x601b, 0x0001, 0x611e, 0x2061, 0x1956, 0x6003,
++ 0x514c, 0x6007, 0x4f47, 0x600b, 0x4943, 0x600f, 0x2020, 0x2001,
++ 0x182a, 0x2102, 0x0005, 0x9016, 0x080c, 0x5c0d, 0x1178, 0xb804,
++ 0x90c4, 0x00ff, 0x98c6, 0x0006, 0x0128, 0x90c4, 0xff00, 0x98c6,
++ 0x0600, 0x1120, 0x9186, 0x0080, 0x0108, 0x8210, 0x8108, 0x9186,
++ 0x0800, 0x1d50, 0x2208, 0x0005, 0x2091, 0x8000, 0x0e04, 0x0d86,
++ 0x0006, 0x0016, 0x2001, 0x8002, 0x0006, 0x2079, 0x0000, 0x000e,
++ 0x7882, 0x7836, 0x001e, 0x798e, 0x000e, 0x788a, 0x000e, 0x7886,
++ 0x3900, 0x789a, 0x7833, 0x0012, 0x2091, 0x5000, 0x0156, 0x00d6,
++ 0x0036, 0x0026, 0x2079, 0x0300, 0x2069, 0x1a65, 0x7a18, 0x226a,
++ 0x8d68, 0x7a1c, 0x226a, 0x782c, 0x2019, 0x1a72, 0x201a, 0x2019,
++ 0x1a75, 0x9016, 0x7808, 0xd09c, 0x0168, 0x7820, 0x201a, 0x8210,
++ 0x8318, 0x9386, 0x1a8a, 0x0108, 0x0ca8, 0x7808, 0xd09c, 0x0110,
++ 0x2011, 0xdead, 0x2019, 0x1a73, 0x782c, 0x201a, 0x8318, 0x221a,
++ 0x7803, 0x0000, 0x2069, 0x1a45, 0x901e, 0x20a9, 0x0020, 0x7b26,
++ 0x7a28, 0x226a, 0x8d68, 0x8318, 0x1f04, 0x0dcf, 0x002e, 0x003e,
++ 0x00de, 0x015e, 0x2079, 0x1800, 0x7803, 0x0005, 0x2091, 0x4080,
++ 0x2001, 0x0089, 0x2004, 0xd084, 0x0180, 0x2001, 0x19e7, 0x2004,
++ 0x9005, 0x0128, 0x2001, 0x008b, 0x2004, 0xd0fc, 0x0dd8, 0x2001,
++ 0x008a, 0x2003, 0x0002, 0x2003, 0x1001, 0x080c, 0x4df9, 0x1108,
++ 0x0011, 0x0cd8, 0x0005, 0x0026, 0x0126, 0x2011, 0x0080, 0x080c,
++ 0x0e8d, 0x20a9, 0x0900, 0x080c, 0x0eae, 0x2011, 0x0040, 0x080c,
++ 0x0e8d, 0x20a9, 0x0900, 0x080c, 0x0eae, 0x0c78, 0x0026, 0x080c,
++ 0x0e9a, 0x1118, 0x2011, 0x0040, 0x0098, 0x2011, 0x010e, 0x2214,
++ 0x9294, 0x0007, 0x9296, 0x0007, 0x0118, 0x2011, 0xa880, 0x0010,
++ 0x2011, 0x6840, 0xd0e4, 0x70f3, 0x0000, 0x1128, 0x70f3, 0x0fa0,
++ 0x080c, 0x0e9f, 0x002e, 0x0005, 0x0026, 0x080c, 0x0e9a, 0x0128,
++ 0xd0a4, 0x1138, 0x2011, 0xcdd5, 0x0010, 0x2011, 0x0080, 0x080c,
++ 0x0e9f, 0x002e, 0x0005, 0x0026, 0x70f3, 0x0000, 0x080c, 0x0e9a,
++ 0x1148, 0x080c, 0x27e7, 0x1118, 0x2011, 0x8484, 0x0058, 0x2011,
++ 0x8282, 0x0040, 0x080c, 0x27e7, 0x1118, 0x2011, 0xcdc5, 0x0010,
++ 0x2011, 0xcac2, 0x080c, 0x0e9f, 0x002e, 0x0005, 0x00e6, 0x0006,
++ 0x2071, 0x1800, 0xd0b4, 0x70ec, 0x1148, 0xc0e4, 0x0080, 0x70ee,
++ 0x0026, 0x9094, 0x00c0, 0x0449, 0x002e, 0x0048, 0x0006, 0x3b00,
++ 0x9084, 0xff3f, 0x20d8, 0x000e, 0x70f3, 0x0000, 0xc0e5, 0x0079,
++ 0x000e, 0x00ee, 0x0005, 0x00e6, 0x2071, 0x1800, 0xd0e4, 0x70ec,
++ 0x1110, 0xc0dc, 0x0008, 0xc0dd, 0x0011, 0x00ee, 0x0005, 0x70ee,
++ 0x7000, 0x9084, 0x0007, 0x000b, 0x0005, 0x0e55, 0x0e2c, 0x0e2c,
++ 0x0e0e, 0x0e3b, 0x0e2c, 0x0e2c, 0x0e3b, 0x0016, 0x3b08, 0x3a00,
++ 0x9104, 0x918d, 0x00c0, 0x21d8, 0x9084, 0xff3f, 0x9205, 0x20d0,
++ 0x001e, 0x0005, 0x2001, 0x183b, 0x2004, 0xd0dc, 0x0005, 0x9e86,
++ 0x1800, 0x190c, 0x0d84, 0x70ec, 0xd0e4, 0x0108, 0xc2e5, 0x72ee,
++ 0xd0e4, 0x1118, 0x9294, 0x00c0, 0x0c01, 0x0005, 0x1d04, 0x0eae,
++ 0x2091, 0x6000, 0x1f04, 0x0eae, 0x0005, 0x890e, 0x810e, 0x810f,
++ 0x9194, 0x003f, 0x918c, 0xffc0, 0x0005, 0x0006, 0x2200, 0x914d,
++ 0x894f, 0x894d, 0x894d, 0x000e, 0x000e, 0x0005, 0x01d6, 0x0146,
++ 0x0036, 0x0096, 0x2061, 0x1882, 0x600b, 0x0000, 0x600f, 0x0000,
++ 0x6003, 0x0000, 0x6007, 0x0000, 0x2009, 0xffc0, 0x2105, 0x0006,
++ 0x2001, 0xaaaa, 0x200f, 0x2019, 0x5555, 0x9016, 0x2049, 0x0bff,
++ 0xab02, 0xa001, 0xa001, 0xa800, 0x9306, 0x1138, 0x2105, 0x9306,
++ 0x0120, 0x8210, 0x99c8, 0x0400, 0x0c98, 0x000e, 0x200f, 0x2001,
++ 0x1892, 0x928a, 0x000e, 0x1638, 0x928a, 0x0006, 0x2011, 0x0006,
++ 0x1210, 0x2011, 0x0000, 0x2202, 0x9006, 0x2008, 0x82ff, 0x01b0,
++ 0x8200, 0x600a, 0x600f, 0xffff, 0x6003, 0x0002, 0x6007, 0x0000,
++ 0x0026, 0x2019, 0x0010, 0x9280, 0x0001, 0x20e8, 0x21a0, 0x21a8,
++ 0x4104, 0x8319, 0x1de0, 0x8211, 0x1da0, 0x002e, 0x009e, 0x003e,
++ 0x014e, 0x01de, 0x0005, 0x2011, 0x000e, 0x08e8, 0x0016, 0x0026,
++ 0x0096, 0x3348, 0x080c, 0x0eb5, 0x2100, 0x9300, 0x2098, 0x22e0,
++ 0x009e, 0x002e, 0x001e, 0x0036, 0x3518, 0x20a9, 0x0001, 0x4002,
++ 0x8007, 0x4004, 0x8319, 0x1dd8, 0x003e, 0x0005, 0x20e9, 0x0001,
++ 0x71b0, 0x81ff, 0x11c0, 0x9006, 0x2009, 0x0200, 0x20a9, 0x0002,
++ 0x9298, 0x0018, 0x23a0, 0x4001, 0x2009, 0x0700, 0x20a9, 0x0002,
++ 0x9298, 0x0008, 0x23a0, 0x4001, 0x7074, 0x8007, 0x7178, 0x810f,
++ 0x20a9, 0x0002, 0x4001, 0x9298, 0x000c, 0x23a0, 0x900e, 0x080c,
++ 0x0d6b, 0x2001, 0x0000, 0x810f, 0x20a9, 0x0002, 0x4001, 0x0005,
++ 0x89ff, 0x0140, 0xa804, 0xa807, 0x0000, 0x0006, 0x080c, 0x0fe0,
++ 0x009e, 0x0cb0, 0x0005, 0x00e6, 0x2071, 0x1800, 0x080c, 0x1057,
++ 0x090c, 0x0d84, 0x00ee, 0x0005, 0x0086, 0x00e6, 0x0006, 0x0026,
++ 0x0036, 0x0126, 0x2091, 0x8000, 0x00c9, 0x2071, 0x1800, 0x73bc,
++ 0x702c, 0x9016, 0x9045, 0x0158, 0x8210, 0x9906, 0x090c, 0x0d84,
++ 0x2300, 0x9202, 0x0120, 0x1a0c, 0x0d84, 0xa000, 0x0c98, 0x012e,
++ 0x003e, 0x002e, 0x000e, 0x00ee, 0x008e, 0x0005, 0x0086, 0x00e6,
++ 0x0006, 0x0126, 0x2091, 0x8000, 0x2071, 0x1904, 0x7010, 0x9005,
++ 0x0140, 0x7018, 0x9045, 0x0128, 0x9906, 0x090c, 0x0d84, 0xa000,
++ 0x0cc8, 0x012e, 0x000e, 0x00ee, 0x008e, 0x0005, 0x00e6, 0x2071,
++ 0x1800, 0x0126, 0x2091, 0x8000, 0x70bc, 0x8001, 0x0270, 0x70be,
++ 0x702c, 0x2048, 0x9085, 0x0001, 0xa800, 0x702e, 0xa803, 0x0000,
++ 0xa807, 0x0000, 0x012e, 0x00ee, 0x0005, 0x904e, 0x0cd8, 0x00e6,
++ 0x0126, 0x2091, 0x8000, 0x2071, 0x1800, 0x70bc, 0x90ca, 0x0040,
++ 0x0268, 0x8001, 0x70be, 0x702c, 0x2048, 0xa800, 0x702e, 0xa803,
++ 0x0000, 0xa807, 0x0000, 0x012e, 0x00ee, 0x0005, 0x904e, 0x0cd8,
++ 0x00e6, 0x0126, 0x2091, 0x8000, 0x0016, 0x890e, 0x810e, 0x810f,
++ 0x9184, 0x003f, 0xa862, 0x9184, 0xffc0, 0xa85e, 0x001e, 0x0020,
++ 0x00e6, 0x0126, 0x2091, 0x8000, 0x2071, 0x1800, 0x702c, 0xa802,
++ 0x2900, 0x702e, 0x70bc, 0x8000, 0x70be, 0x012e, 0x00ee, 0x0005,
++ 0x2071, 0x1800, 0x9026, 0x2009, 0x0000, 0x2049, 0x0400, 0x2900,
++ 0x702e, 0x8940, 0x2800, 0xa802, 0xa95e, 0xa863, 0x0001, 0x8420,
++ 0x9886, 0x0440, 0x0120, 0x2848, 0x9188, 0x0040, 0x0c90, 0x2071,
++ 0x1882, 0x7000, 0x9005, 0x11a0, 0x2001, 0x0534, 0xa802, 0x2048,
++ 0x2009, 0x4d00, 0x8940, 0x2800, 0xa802, 0xa95e, 0xa863, 0x0001,
++ 0x8420, 0x9886, 0x0800, 0x0120, 0x2848, 0x9188, 0x0040, 0x0c90,
++ 0x2071, 0x1882, 0x7104, 0x7200, 0x82ff, 0x01d0, 0x7308, 0x8318,
++ 0x831f, 0x831b, 0x831b, 0x7312, 0x8319, 0x2001, 0x0800, 0xa802,
++ 0x2048, 0x8900, 0xa802, 0x2040, 0xa95e, 0xaa62, 0x8420, 0x2300,
++ 0x9906, 0x0130, 0x2848, 0x9188, 0x0040, 0x9291, 0x0000, 0x0c88,
++ 0xa803, 0x0000, 0x2071, 0x1800, 0x74ba, 0x74be, 0x0005, 0x00e6,
++ 0x0016, 0x9984, 0xfc00, 0x01e8, 0x908c, 0xf800, 0x1168, 0x9982,
++ 0x0400, 0x02b8, 0x9982, 0x0440, 0x0278, 0x9982, 0x0534, 0x0288,
++ 0x9982, 0x0800, 0x1270, 0x0040, 0x9982, 0x0800, 0x0250, 0x2071,
++ 0x1882, 0x7010, 0x9902, 0x1228, 0x9085, 0x0001, 0x001e, 0x00ee,
++ 0x0005, 0x9006, 0x0cd8, 0x00e6, 0x2071, 0x19e6, 0x7007, 0x0000,
++ 0x9006, 0x701e, 0x7022, 0x7002, 0x2071, 0x0000, 0x7010, 0x9085,
++ 0x8004, 0x7012, 0x00ee, 0x0005, 0x0126, 0x2091, 0x8000, 0x00e6,
++ 0xa06f, 0x0000, 0x2071, 0x19e6, 0x701c, 0x9088, 0x19f0, 0x280a,
++ 0x8000, 0x9084, 0x003f, 0x701e, 0x7120, 0x9106, 0x090c, 0x0d84,
++ 0x7004, 0x9005, 0x1128, 0x00f6, 0x2079, 0x0080, 0x00a9, 0x00fe,
++ 0x00ee, 0x012e, 0x0005, 0x0126, 0x2091, 0x8000, 0x00e6, 0x2071,
++ 0x19e6, 0x7004, 0x9005, 0x1128, 0x00f6, 0x2079, 0x0080, 0x0021,
++ 0x00fe, 0x00ee, 0x012e, 0x0005, 0x7004, 0x9086, 0x0000, 0x1110,
++ 0x7007, 0x0006, 0x7000, 0x0002, 0x10ce, 0x10cc, 0x10cc, 0x10cc,
++ 0x1234, 0x1234, 0x1234, 0x1234, 0x080c, 0x0d84, 0x701c, 0x7120,
++ 0x9106, 0x1148, 0x792c, 0x9184, 0x0001, 0x1120, 0xd1fc, 0x1110,
++ 0x7007, 0x0000, 0x0005, 0x0096, 0x9180, 0x19f0, 0x2004, 0x700a,
++ 0x2048, 0x8108, 0x918c, 0x003f, 0x7122, 0x782b, 0x0026, 0xa88c,
++ 0x7802, 0xa890, 0x7806, 0xa894, 0x780a, 0xa898, 0x780e, 0xa878,
++ 0x700e, 0xa870, 0x7016, 0xa874, 0x701a, 0xa868, 0x009e, 0xd084,
++ 0x0120, 0x7007, 0x0001, 0x0029, 0x0005, 0x7007, 0x0002, 0x00b1,
++ 0x0005, 0x0016, 0x0026, 0x710c, 0x2011, 0x0040, 0x9182, 0x0040,
++ 0x1210, 0x2110, 0x9006, 0x700e, 0x7212, 0x8203, 0x7812, 0x782b,
++ 0x0020, 0x782b, 0x0041, 0x002e, 0x001e, 0x0005, 0x0016, 0x0026,
++ 0x0136, 0x0146, 0x0156, 0x7014, 0x20e0, 0x7018, 0x2098, 0x20e9,
++ 0x0000, 0x20a1, 0x0088, 0x782b, 0x0026, 0x710c, 0x2011, 0x0040,
++ 0x9182, 0x0040, 0x1210, 0x2110, 0x9006, 0x700e, 0x22a8, 0x4006,
++ 0x8203, 0x7812, 0x782b, 0x0020, 0x3300, 0x701a, 0x782b, 0x0001,
++ 0x015e, 0x014e, 0x013e, 0x002e, 0x001e, 0x0005, 0x2009, 0x19e6,
++ 0x2104, 0xc095, 0x200a, 0x080c, 0x10ab, 0x0005, 0x0016, 0x00e6,
++ 0x2071, 0x19e6, 0x00f6, 0x2079, 0x0080, 0x792c, 0x782b, 0x0002,
++ 0xd1fc, 0x0120, 0x918c, 0x0700, 0x7004, 0x0023, 0x00fe, 0x00ee,
++ 0x001e, 0x0005, 0x10bc, 0x1161, 0x1195, 0x0d84, 0x0d84, 0x1240,
++ 0x0d84, 0x918c, 0x0700, 0x1550, 0x0136, 0x0146, 0x0156, 0x7014,
++ 0x20e8, 0x7018, 0x20a0, 0x20e1, 0x0000, 0x2099, 0x0088, 0x782b,
++ 0x0040, 0x7010, 0x20a8, 0x4005, 0x3400, 0x701a, 0x015e, 0x014e,
++ 0x013e, 0x700c, 0x9005, 0x0578, 0x7800, 0x7802, 0x7804, 0x7806,
++ 0x080c, 0x1101, 0x0005, 0x7008, 0x0096, 0x2048, 0xa86f, 0x0100,
++ 0x009e, 0x7007, 0x0000, 0x080c, 0x10bc, 0x0005, 0x7008, 0x0096,
++ 0x2048, 0xa86f, 0x0200, 0x009e, 0x0ca0, 0x918c, 0x0700, 0x1150,
++ 0x700c, 0x9005, 0x0180, 0x7800, 0x7802, 0x7804, 0x7806, 0x080c,
++ 0x1116, 0x0005, 0x7008, 0x0096, 0x2048, 0xa86f, 0x0200, 0x009e,
++ 0x7007, 0x0000, 0x0080, 0x0096, 0x7008, 0x2048, 0x7800, 0xa88e,
++ 0x7804, 0xa892, 0x7808, 0xa896, 0x780c, 0xa89a, 0xa86f, 0x0100,
++ 0x009e, 0x7007, 0x0000, 0x0096, 0x00d6, 0x7008, 0x2048, 0x2001,
++ 0x18ad, 0x2004, 0x9906, 0x1128, 0xa89c, 0x080f, 0x00de, 0x009e,
++ 0x00a0, 0x00de, 0x009e, 0x0096, 0x00d6, 0x7008, 0x2048, 0x0081,
++ 0x0150, 0xa89c, 0x0086, 0x2940, 0x080f, 0x008e, 0x00de, 0x009e,
++ 0x080c, 0x10ab, 0x0005, 0x00de, 0x009e, 0x080c, 0x10ab, 0x0005,
++ 0xa8a8, 0xd08c, 0x0005, 0x0096, 0xa0a0, 0x904d, 0x090c, 0x0d84,
++ 0xa06c, 0x908e, 0x0100, 0x0130, 0xa87b, 0x0030, 0xa883, 0x0000,
++ 0xa897, 0x4002, 0x080c, 0x619c, 0xa09f, 0x0000, 0xa0a3, 0x0000,
++ 0x2848, 0x080c, 0x0fe0, 0x009e, 0x0005, 0x00a6, 0xa0a0, 0x904d,
++ 0x090c, 0x0d84, 0xa06c, 0x908e, 0x0100, 0x0128, 0xa87b, 0x0001,
++ 0xa883, 0x0000, 0x00c0, 0xa80c, 0x2050, 0xb004, 0x9005, 0x0198,
++ 0xa80e, 0x2050, 0x8006, 0x8006, 0x8007, 0x908c, 0x003f, 0x9084,
++ 0xffc0, 0x9080, 0x0002, 0xa076, 0xa172, 0xb000, 0xa07a, 0x2810,
++ 0x080c, 0x108c, 0x0078, 0xa97c, 0xa894, 0x0016, 0x0006, 0x080c,
++ 0x619c, 0x000e, 0x001e, 0xd1f4, 0x0128, 0x00c6, 0x2060, 0x080c,
++ 0x9554, 0x00ce, 0x00ae, 0x0005, 0x0126, 0x2091, 0x8000, 0x782b,
++ 0x1001, 0x7007, 0x0005, 0x7000, 0xc094, 0x7002, 0x012e, 0x0005,
++ 0x7007, 0x0000, 0x080c, 0x10bc, 0x0005, 0x0126, 0x2091, 0x2200,
++ 0x2079, 0x0300, 0x2071, 0x1a30, 0x7003, 0x0000, 0x78bf, 0x00f6,
++ 0x00c1, 0x7803, 0x0003, 0x780f, 0x0000, 0x20a9, 0x01ec, 0x2061,
++ 0xcd39, 0x2c0d, 0x7912, 0xe104, 0x9ce0, 0x0002, 0x7916, 0x1f04,
++ 0x1259, 0x7807, 0x0001, 0x7803, 0x0000, 0x7803, 0x0001, 0x012e,
++ 0x0005, 0x00c6, 0x7803, 0x0000, 0x7808, 0xd09c, 0x0110, 0x7820,
++ 0x0cd8, 0x2001, 0x1a31, 0x2003, 0x0000, 0x78ab, 0x0004, 0x78ac,
++ 0xd0ac, 0x1de8, 0x78ab, 0x0002, 0x7807, 0x0001, 0x7827, 0x0030,
++ 0x782b, 0x0400, 0x7827, 0x0031, 0x782b, 0x1a45, 0x781f, 0xff00,
++ 0x781b, 0xff00, 0x2001, 0x0200, 0x2004, 0xd0dc, 0x0110, 0x781f,
++ 0x0303, 0x2061, 0x1a45, 0x602f, 0x1cd0, 0x2001, 0x1818, 0x2004,
++ 0x9082, 0x1cd0, 0x6032, 0x603b, 0x1cdd, 0x00ce, 0x0005, 0x0126,
++ 0x2091, 0x2200, 0x7808, 0xd09c, 0x0158, 0x7820, 0x908c, 0xf000,
++ 0x1588, 0x908a, 0x0021, 0x1a0c, 0x0d84, 0x0043, 0x012e, 0x0005,
++ 0x9084, 0x0070, 0x190c, 0x0d84, 0x012e, 0x0005, 0x12d8, 0x12d8,
++ 0x12e1, 0x12e6, 0x12ea, 0x12ef, 0x1317, 0x131b, 0x1329, 0x132d,
++ 0x12d8, 0x13b6, 0x13ba, 0x141a, 0x12d8, 0x12d8, 0x12d8, 0x12d8,
++ 0x12d8, 0x12d8, 0x12d8, 0x12d8, 0x12d8, 0x12d8, 0x12d8, 0x12d8,
++ 0x12d8, 0x12f1, 0x12d8, 0x12d8, 0x12d8, 0x12d8, 0x12d8, 0x12d8,
++ 0x080c, 0x0d84, 0x2009, 0x0048, 0x2060, 0x080c, 0x95ce, 0x012e,
++ 0x0005, 0x7004, 0xc085, 0xc0b5, 0x7006, 0x0005, 0x7004, 0xc085,
++ 0x7006, 0x0005, 0x080c, 0x1421, 0x080c, 0x14c5, 0x0005, 0x080c,
++ 0x0d84, 0x080c, 0x1421, 0x2060, 0x6014, 0x0096, 0x2048, 0xa83b,
++ 0xffff, 0x009e, 0x2009, 0x0048, 0x080c, 0x95ce, 0x2001, 0x015d,
++ 0x2003, 0x0000, 0x2009, 0x03e8, 0x8109, 0x0160, 0x2001, 0x0201,
++ 0x2004, 0x9005, 0x0dc8, 0x2001, 0x0218, 0x2004, 0xd0ec, 0x1110,
++ 0x080c, 0x1426, 0x2001, 0x0307, 0x2003, 0x8000, 0x0005, 0x7004,
++ 0xc095, 0x7006, 0x0005, 0x080c, 0x1421, 0x2060, 0x6014, 0x0096,
++ 0x2048, 0xa83b, 0xffff, 0x009e, 0x2009, 0x0048, 0x080c, 0x95ce,
++ 0x0005, 0x080c, 0x1421, 0x080c, 0x0d84, 0x080c, 0x1421, 0x080c,
++ 0x13a1, 0x7827, 0x0018, 0x79ac, 0xd1dc, 0x0540, 0x7827, 0x0015,
++ 0x7828, 0x782b, 0x0000, 0x9065, 0x0138, 0x2001, 0x020d, 0x2003,
++ 0x0050, 0x2003, 0x0020, 0x0400, 0x7004, 0x9005, 0x1180, 0x78ab,
++ 0x0004, 0x7827, 0x0018, 0x782b, 0x0000, 0xd1bc, 0x090c, 0x0d84,
++ 0x2001, 0x020d, 0x2003, 0x0050, 0x2003, 0x0020, 0x0478, 0x78ab,
++ 0x0004, 0x7803, 0x0001, 0x080c, 0x13ba, 0x0005, 0x7828, 0x782b,
++ 0x0000, 0x9065, 0x090c, 0x0d84, 0x6014, 0x2048, 0x78ab, 0x0004,
++ 0x918c, 0x0700, 0x0198, 0x080c, 0x724d, 0x080c, 0x1827, 0x080c,
++ 0xb0ad, 0x0158, 0xa9ac, 0xa936, 0xa9b0, 0xa93a, 0xa83f, 0xffff,
++ 0xa843, 0xffff, 0xa880, 0xc0bd, 0xa882, 0x0005, 0x6010, 0x00b6,
++ 0x2058, 0xb800, 0x00be, 0xd0bc, 0x190c, 0xb456, 0x2029, 0x00c8,
++ 0x8529, 0x0128, 0x2001, 0x0201, 0x2004, 0x9005, 0x0dc8, 0x7dbc,
++ 0x080c, 0xcce2, 0xd5a4, 0x1118, 0x080c, 0x1426, 0x0005, 0x080c,
++ 0x724d, 0x080c, 0x1827, 0x0005, 0x781f, 0x0300, 0x7803, 0x0001,
++ 0x0005, 0x0016, 0x0066, 0x0076, 0x00f6, 0x2079, 0x0300, 0x7908,
++ 0x918c, 0x0007, 0x9186, 0x0003, 0x0120, 0x2001, 0x0016, 0x080c,
++ 0x1492, 0x00fe, 0x007e, 0x006e, 0x001e, 0x0005, 0x7004, 0xc09d,
++ 0x7006, 0x0005, 0x7104, 0x9184, 0x0004, 0x190c, 0x0d84, 0xd184,
++ 0x1189, 0xd19c, 0x0158, 0xc19c, 0x7106, 0x2001, 0x020d, 0x2003,
++ 0x0050, 0x2003, 0x0020, 0x080c, 0x1426, 0x0005, 0x81ff, 0x190c,
++ 0x0d84, 0x0005, 0xc184, 0xd1b4, 0xc1b4, 0x7106, 0x0016, 0x00e6,
++ 0x15c8, 0x2071, 0x0200, 0x080c, 0x14b9, 0x6014, 0x9005, 0x0590,
++ 0x0096, 0x2048, 0xa864, 0x009e, 0x9084, 0x00ff, 0x908e, 0x0029,
++ 0x0148, 0x908e, 0x0048, 0x1530, 0x00f6, 0x2c78, 0x080c, 0x150d,
++ 0x00fe, 0x00a8, 0x00f6, 0x2c78, 0x080c, 0x163f, 0x00fe, 0x2009,
++ 0x01f4, 0x8109, 0x0160, 0x2001, 0x0201, 0x2004, 0x9005, 0x0dc8,
++ 0x2001, 0x0218, 0x2004, 0xd0ec, 0x1110, 0x0401, 0x0040, 0x2001,
++ 0x020d, 0x2003, 0x0020, 0x080c, 0x1269, 0x7803, 0x0001, 0x00ee,
++ 0x001e, 0x0005, 0x2001, 0x020d, 0x2003, 0x0050, 0x2003, 0x0020,
++ 0x0069, 0x0ca8, 0x0031, 0x2060, 0x2009, 0x0053, 0x080c, 0x95ce,
++ 0x0005, 0x7808, 0xd09c, 0x0de8, 0x7820, 0x0005, 0x080c, 0x13a1,
++ 0x00d6, 0x2069, 0x0200, 0x2009, 0x01f4, 0x8109, 0x0508, 0x6804,
++ 0x9005, 0x0dd8, 0x2001, 0x015d, 0x2003, 0x0000, 0x79bc, 0xd1a4,
++ 0x1520, 0x79b8, 0x918c, 0x0fff, 0x0178, 0x9182, 0x0841, 0x1260,
++ 0x9188, 0x0007, 0x918c, 0x0ff8, 0x810c, 0x810c, 0x810c, 0x04e1,
++ 0x6827, 0x0001, 0x8109, 0x1dd8, 0x04b9, 0x6827, 0x0002, 0x04a1,
++ 0x6804, 0x9005, 0x1130, 0x682c, 0xd0e4, 0x11e0, 0x6804, 0x9005,
++ 0x0de8, 0x79b8, 0xd1ec, 0x1130, 0x08c8, 0x080c, 0x724d, 0x080c,
++ 0x1827, 0x0070, 0x7827, 0x0015, 0x782b, 0x0000, 0x2001, 0x020d,
++ 0x2003, 0x0020, 0x2001, 0x0307, 0x2003, 0x0300, 0x7803, 0x0001,
++ 0x00de, 0x0005, 0x682c, 0x9084, 0x5400, 0x9086, 0x5400, 0x0d50,
++ 0x7827, 0x0015, 0x782b, 0x0000, 0x7803, 0x0001, 0x6800, 0x9085,
++ 0x1800, 0x6802, 0x00de, 0x0005, 0x6824, 0x9084, 0x0003, 0x1de0,
++ 0x0005, 0x2001, 0x0030, 0x2c08, 0x621c, 0x0021, 0x7830, 0x9086,
++ 0x0041, 0x0005, 0x00f6, 0x2079, 0x0300, 0x0006, 0x7808, 0xd09c,
++ 0x0140, 0x0016, 0x0026, 0x00c6, 0x080c, 0x129f, 0x00ce, 0x002e,
++ 0x001e, 0x000e, 0x0006, 0x7832, 0x7936, 0x7a3a, 0x781b, 0x8080,
++ 0x2009, 0xff00, 0x8109, 0x0130, 0x7818, 0xd0bc, 0x1dd8, 0x000e,
++ 0x00fe, 0x0005, 0x000e, 0x792c, 0x3900, 0x8000, 0x2004, 0x080c,
++ 0x0d84, 0x7037, 0x0001, 0x7150, 0x7037, 0x0002, 0x7050, 0x2060,
++ 0xd1bc, 0x1110, 0x7054, 0x2060, 0x0005, 0x00e6, 0x0016, 0x2071,
++ 0x0200, 0x0c79, 0x7358, 0x745c, 0x6014, 0x905d, 0x0598, 0x2b48,
++ 0x6010, 0x00b6, 0x2058, 0xb800, 0x00be, 0xd0bc, 0x190c, 0xb431,
++ 0xab42, 0xac3e, 0x2001, 0x1874, 0x2004, 0xd0b4, 0x1170, 0x601c,
++ 0xd0e4, 0x1158, 0x6010, 0x00b6, 0x2058, 0xb800, 0x00be, 0xd0bc,
++ 0x1120, 0xa83b, 0x7fff, 0xa837, 0xffff, 0x080c, 0x1cfd, 0x1190,
++ 0x080c, 0x168e, 0x2a00, 0xa816, 0x0130, 0x2800, 0xa80e, 0x2c05,
++ 0xa80a, 0x2c00, 0xa812, 0x7037, 0x0020, 0x781f, 0x0300, 0x001e,
++ 0x00ee, 0x0005, 0x7037, 0x0050, 0x7037, 0x0020, 0x001e, 0x00ee,
++ 0x080c, 0x1426, 0x0005, 0x080c, 0x0d84, 0x2ff0, 0x0126, 0x2091,
++ 0x2200, 0x3e60, 0x6014, 0x2048, 0x2940, 0x903e, 0x2730, 0xa864,
++ 0x2068, 0xa81a, 0x9d84, 0x000f, 0x9088, 0x1cdd, 0x2165, 0x0002,
++ 0x1537, 0x1584, 0x1537, 0x1537, 0x1537, 0x1566, 0x1537, 0x153b,
++ 0x1530, 0x157b, 0x1537, 0x1537, 0x1537, 0x1537, 0x154f, 0x1545,
++ 0xa964, 0x918c, 0x00ff, 0x918e, 0x0048, 0x0904, 0x157b, 0x9085,
++ 0x0001, 0x0804, 0x1637, 0xa87c, 0xd0bc, 0x0dc8, 0xa890, 0xa842,
++ 0xa88c, 0xa83e, 0xa888, 0x0804, 0x158b, 0xa87c, 0xd0bc, 0x0d78,
++ 0xa890, 0xa842, 0xa88c, 0xa83e, 0xa888, 0x0804, 0x15da, 0xa87c,
++ 0xd0bc, 0x0d28, 0xa890, 0xa842, 0xa88c, 0xa83e, 0xa804, 0x9045,
++ 0x090c, 0x0d84, 0xa164, 0xa91a, 0x91ec, 0x000f, 0x9d80, 0x1cdd,
++ 0x2065, 0xa888, 0xd19c, 0x1904, 0x15da, 0x0428, 0xa87c, 0xd0ac,
++ 0x0970, 0xa804, 0x9045, 0x090c, 0x0d84, 0xa164, 0xa91a, 0x91ec,
++ 0x000f, 0x9d80, 0x1cdd, 0x2065, 0x9006, 0xa842, 0xa83e, 0xd19c,
++ 0x1904, 0x15da, 0x0080, 0xa87c, 0xd0ac, 0x0904, 0x1537, 0x9006,
++ 0xa842, 0xa83e, 0x0804, 0x15da, 0xa87c, 0xd0ac, 0x0904, 0x1537,
++ 0x9006, 0xa842, 0xa83e, 0x2c05, 0x908a, 0x0036, 0x1a0c, 0x0d84,
++ 0x9082, 0x001b, 0x0002, 0x15ae, 0x15ae, 0x15b0, 0x15ae, 0x15ae,
++ 0x15ae, 0x15b6, 0x15ae, 0x15ae, 0x15ae, 0x15bc, 0x15ae, 0x15ae,
++ 0x15ae, 0x15c2, 0x15ae, 0x15ae, 0x15ae, 0x15c8, 0x15ae, 0x15ae,
++ 0x15ae, 0x15ce, 0x15ae, 0x15ae, 0x15ae, 0x15d4, 0x080c, 0x0d84,
++ 0xa574, 0xa478, 0xa37c, 0xa280, 0x0804, 0x161f, 0xa584, 0xa488,
++ 0xa38c, 0xa290, 0x0804, 0x161f, 0xa594, 0xa498, 0xa39c, 0xa2a0,
++ 0x0804, 0x161f, 0xa5a4, 0xa4a8, 0xa3ac, 0xa2b0, 0x0804, 0x161f,
++ 0xa5b4, 0xa4b8, 0xa3bc, 0xa2c0, 0x0804, 0x161f, 0xa5c4, 0xa4c8,
++ 0xa3cc, 0xa2d0, 0x0804, 0x161f, 0xa5d4, 0xa4d8, 0xa3dc, 0xa2e0,
++ 0x0804, 0x161f, 0x2c05, 0x908a, 0x0034, 0x1a0c, 0x0d84, 0x9082,
++ 0x001b, 0x0002, 0x15fd, 0x15fb, 0x15fb, 0x15fb, 0x15fb, 0x15fb,
++ 0x1604, 0x15fb, 0x15fb, 0x15fb, 0x15fb, 0x15fb, 0x160b, 0x15fb,
++ 0x15fb, 0x15fb, 0x15fb, 0x15fb, 0x1612, 0x15fb, 0x15fb, 0x15fb,
++ 0x15fb, 0x15fb, 0x1619, 0x080c, 0x0d84, 0xa56c, 0xa470, 0xa774,
++ 0xa678, 0xa37c, 0xa280, 0x00d8, 0xa584, 0xa488, 0xa78c, 0xa690,
++ 0xa394, 0xa298, 0x00a0, 0xa59c, 0xa4a0, 0xa7a4, 0xa6a8, 0xa3ac,
++ 0xa2b0, 0x0068, 0xa5b4, 0xa4b8, 0xa7bc, 0xa6c0, 0xa3c4, 0xa2c8,
++ 0x0030, 0xa5cc, 0xa4d0, 0xa7d4, 0xa6d8, 0xa3dc, 0xa2e0, 0xab2e,
++ 0xaa32, 0xad1e, 0xac22, 0xaf26, 0xae2a, 0xa988, 0x8c60, 0x2c1d,
++ 0xa8ac, 0xaab0, 0xa836, 0xaa3a, 0x8109, 0xa916, 0x1150, 0x3e60,
++ 0x601c, 0xc085, 0x601e, 0xa87c, 0xc0dd, 0xa87e, 0x9006, 0x012e,
++ 0x0005, 0x2800, 0xa80e, 0xab0a, 0x2c00, 0xa812, 0x0c80, 0x2ff0,
++ 0x0126, 0x2091, 0x2200, 0x3e60, 0x6014, 0x2048, 0x2940, 0xa80e,
++ 0x2061, 0x1cd8, 0xa80b, 0x1cd8, 0x2c05, 0xa812, 0xa964, 0xa91a,
++ 0xa87c, 0xd0ac, 0x090c, 0x0d84, 0x9006, 0xa842, 0xa83e, 0x2c05,
++ 0x908a, 0x0034, 0x1a0c, 0x0d84, 0xadcc, 0xacd0, 0xafd4, 0xaed8,
++ 0xabdc, 0xaae0, 0xab2e, 0xaa32, 0xad1e, 0xac22, 0xaf26, 0xae2a,
++ 0xa8ac, 0xaab0, 0xa836, 0xaa3a, 0xa988, 0x918a, 0x0002, 0xa916,
++ 0x1150, 0x3e60, 0x601c, 0xc085, 0x601e, 0xa87c, 0xc0dd, 0xa87e,
++ 0x9006, 0x012e, 0x0005, 0xa804, 0x9045, 0x090c, 0x0d84, 0xa80e,
++ 0xa064, 0xa81a, 0x9084, 0x000f, 0x9080, 0x1cdd, 0x2015, 0x82ff,
++ 0x090c, 0x0d84, 0xaa0a, 0x2205, 0xa812, 0x0c18, 0x903e, 0x2730,
++ 0xa880, 0xd0fc, 0x1190, 0x2d00, 0x0002, 0x1783, 0x16e5, 0x16e5,
++ 0x1783, 0x1783, 0x177d, 0x1783, 0x16e5, 0x1783, 0x1734, 0x1734,
++ 0x1783, 0x1783, 0x1783, 0x177a, 0x1734, 0xc0fc, 0xa882, 0xab2c,
++ 0xaa30, 0xad1c, 0xac20, 0xdd9c, 0x0904, 0x1785, 0x2c05, 0x908a,
++ 0x0034, 0x1a0c, 0x0d84, 0x9082, 0x001b, 0x0002, 0x16d1, 0x16cf,
++ 0x16cf, 0x16cf, 0x16cf, 0x16cf, 0x16d5, 0x16cf, 0x16cf, 0x16cf,
++ 0x16cf, 0x16cf, 0x16d9, 0x16cf, 0x16cf, 0x16cf, 0x16cf, 0x16cf,
++ 0x16dd, 0x16cf, 0x16cf, 0x16cf, 0x16cf, 0x16cf, 0x16e1, 0x080c,
++ 0x0d84, 0xa774, 0xa678, 0x0804, 0x1785, 0xa78c, 0xa690, 0x0804,
++ 0x1785, 0xa7a4, 0xa6a8, 0x0804, 0x1785, 0xa7bc, 0xa6c0, 0x0804,
++ 0x1785, 0xa7d4, 0xa6d8, 0x0804, 0x1785, 0x2c05, 0x908a, 0x0036,
++ 0x1a0c, 0x0d84, 0x9082, 0x001b, 0x0002, 0x1708, 0x1708, 0x170a,
++ 0x1708, 0x1708, 0x1708, 0x1710, 0x1708, 0x1708, 0x1708, 0x1716,
++ 0x1708, 0x1708, 0x1708, 0x171c, 0x1708, 0x1708, 0x1708, 0x1722,
++ 0x1708, 0x1708, 0x1708, 0x1728, 0x1708, 0x1708, 0x1708, 0x172e,
++ 0x080c, 0x0d84, 0xa574, 0xa478, 0xa37c, 0xa280, 0x0804, 0x1785,
++ 0xa584, 0xa488, 0xa38c, 0xa290, 0x0804, 0x1785, 0xa594, 0xa498,
++ 0xa39c, 0xa2a0, 0x0804, 0x1785, 0xa5a4, 0xa4a8, 0xa3ac, 0xa2b0,
++ 0x0804, 0x1785, 0xa5b4, 0xa4b8, 0xa3bc, 0xa2c0, 0x0804, 0x1785,
++ 0xa5c4, 0xa4c8, 0xa3cc, 0xa2d0, 0x0804, 0x1785, 0xa5d4, 0xa4d8,
++ 0xa3dc, 0xa2e0, 0x0804, 0x1785, 0x2c05, 0x908a, 0x0034, 0x1a0c,
++ 0x0d84, 0x9082, 0x001b, 0x0002, 0x1757, 0x1755, 0x1755, 0x1755,
++ 0x1755, 0x1755, 0x175e, 0x1755, 0x1755, 0x1755, 0x1755, 0x1755,
++ 0x1765, 0x1755, 0x1755, 0x1755, 0x1755, 0x1755, 0x176c, 0x1755,
++ 0x1755, 0x1755, 0x1755, 0x1755, 0x1773, 0x080c, 0x0d84, 0xa56c,
++ 0xa470, 0xa774, 0xa678, 0xa37c, 0xa280, 0x0438, 0xa584, 0xa488,
++ 0xa78c, 0xa690, 0xa394, 0xa298, 0x0400, 0xa59c, 0xa4a0, 0xa7a4,
++ 0xa6a8, 0xa3ac, 0xa2b0, 0x00c8, 0xa5b4, 0xa4b8, 0xa7bc, 0xa6c0,
++ 0xa3c4, 0xa2c8, 0x0090, 0xa5cc, 0xa4d0, 0xa7d4, 0xa6d8, 0xa3dc,
++ 0xa2e0, 0x0058, 0x9d86, 0x000e, 0x1130, 0x080c, 0x1c9b, 0x1904,
++ 0x168e, 0x900e, 0x0050, 0x080c, 0x0d84, 0xab2e, 0xaa32, 0xad1e,
++ 0xac22, 0xaf26, 0xae2a, 0x080c, 0x1c9b, 0x0005, 0x6014, 0x2048,
++ 0x6118, 0x810c, 0x810c, 0x810c, 0x81ff, 0x1118, 0xa887, 0x0001,
++ 0x0008, 0xa986, 0x601b, 0x0002, 0xa974, 0xd1dc, 0x1108, 0x0005,
++ 0xa934, 0xa88c, 0x9106, 0x1158, 0xa938, 0xa890, 0x9106, 0x1138,
++ 0x601c, 0xc084, 0x601e, 0x2009, 0x0048, 0x0804, 0x95ce, 0x0005,
++ 0x0126, 0x00c6, 0x2091, 0x2200, 0x00ce, 0x7908, 0x918c, 0x0007,
++ 0x9186, 0x0000, 0x0904, 0x181c, 0x9186, 0x0003, 0x0904, 0x181c,
++ 0x6020, 0x6023, 0x0000, 0x0006, 0x2031, 0x0190, 0x00c6, 0x7808,
++ 0xd09c, 0x190c, 0x129f, 0x00ce, 0x2001, 0x0038, 0x2c08, 0x621c,
++ 0x080c, 0x1492, 0x7930, 0x9186, 0x0040, 0x0904, 0x1818, 0x9186,
++ 0x0042, 0x190c, 0x0d84, 0x2001, 0x001e, 0x8001, 0x1df0, 0x8631,
++ 0x1d28, 0x080c, 0x1876, 0x0026, 0x0056, 0x2001, 0x00d2, 0x8001,
++ 0x1df0, 0x2031, 0x2000, 0x8631, 0x1148, 0x080c, 0x724d, 0x04b9,
++ 0x601c, 0xc084, 0x601e, 0x005e, 0x002e, 0x0410, 0x2001, 0x020b,
++ 0x2004, 0xd0e4, 0x0d80, 0x2001, 0x015d, 0x2003, 0x0000, 0x78ab,
++ 0x0004, 0x2001, 0x0200, 0x200c, 0x918d, 0x1800, 0x2102, 0x080c,
++ 0x1269, 0x601c, 0xc084, 0x601e, 0x7803, 0x0000, 0x7803, 0x0001,
++ 0x005e, 0x002e, 0x2001, 0x0160, 0x2502, 0x2001, 0x0138, 0x2202,
++ 0x000e, 0x6022, 0x012e, 0x0005, 0x601c, 0xc084, 0x601e, 0x7827,
++ 0x0015, 0x7828, 0x9c06, 0x1db0, 0x782b, 0x0000, 0x0c98, 0x00f6,
++ 0x2079, 0x0300, 0x7803, 0x0000, 0x78ab, 0x0004, 0x00fe, 0x080c,
++ 0x6877, 0x11b0, 0x2001, 0x0138, 0x2003, 0x0000, 0x2001, 0x0160,
++ 0x2003, 0x0000, 0x2011, 0x012c, 0xa001, 0xa001, 0x8211, 0x1de0,
++ 0x0081, 0x0066, 0x2031, 0x0000, 0x080c, 0x691e, 0x006e, 0x0005,
++ 0x0469, 0x0039, 0x2001, 0x0160, 0x2502, 0x2001, 0x0138, 0x2202,
++ 0x0005, 0x00e6, 0x2071, 0x0200, 0x080c, 0x27fb, 0x2009, 0x003c,
++ 0x080c, 0x2014, 0x2001, 0x015d, 0x2003, 0x0000, 0x7000, 0x9084,
++ 0x003c, 0x1de0, 0x70a0, 0x70a2, 0x7098, 0x709a, 0x709c, 0x709e,
++ 0x2001, 0x020d, 0x2003, 0x0020, 0x00f6, 0x2079, 0x0300, 0x080c,
++ 0x1269, 0x7803, 0x0001, 0x00fe, 0x00ee, 0x0005, 0x2001, 0x0138,
++ 0x2014, 0x2003, 0x0000, 0x2001, 0x0160, 0x202c, 0x2003, 0x0000,
++ 0x080c, 0x6877, 0x1108, 0x0005, 0x2021, 0x0260, 0x2001, 0x0141,
++ 0x201c, 0xd3dc, 0x1168, 0x2001, 0x0109, 0x201c, 0x939c, 0x0048,
++ 0x1160, 0x2001, 0x0111, 0x201c, 0x83ff, 0x1110, 0x8421, 0x1d70,
++ 0x2001, 0x015d, 0x2003, 0x0000, 0x0005, 0x0046, 0x2021, 0x0019,
++ 0x2003, 0x0048, 0xa001, 0xa001, 0x201c, 0x939c, 0x0048, 0x0120,
++ 0x8421, 0x1db0, 0x004e, 0x0c60, 0x004e, 0x0c40, 0x0126, 0x2091,
++ 0x2400, 0x2071, 0x1a33, 0x2079, 0x0090, 0x012e, 0x0005, 0x9280,
++ 0x0005, 0x2004, 0x2048, 0xa97c, 0xd1dc, 0x1904, 0x1932, 0xa964,
++ 0x9184, 0x0007, 0x0002, 0x18cb, 0x191d, 0x18d2, 0x18d2, 0x18d2,
++ 0x1905, 0x18e5, 0x18d4, 0x2100, 0x9084, 0x00ff, 0x9086, 0x0048,
++ 0x0904, 0x191d, 0x080c, 0x0d84, 0xa87c, 0xd0b4, 0x0904, 0x1ae4,
++ 0xa890, 0xa842, 0xa83a, 0xa88c, 0xa83e, 0xa836, 0xa8ac, 0xa846,
++ 0xa8b0, 0xa84a, 0xa988, 0x0804, 0x1925, 0xa864, 0x9084, 0x00ff,
++ 0x9086, 0x001e, 0x1d38, 0xa87c, 0xd0b4, 0x0904, 0x1ae4, 0xa890,
++ 0xa842, 0xa83a, 0xa88c, 0xa83e, 0xa836, 0xa8ac, 0xa846, 0xa8b0,
++ 0xa84a, 0xa804, 0xa85a, 0x2040, 0xa064, 0x9084, 0x000f, 0x9080,
++ 0x1cdd, 0x2005, 0xa812, 0xa988, 0x0448, 0x918c, 0x00ff, 0x9186,
++ 0x0015, 0x1540, 0xa87c, 0xd0b4, 0x0904, 0x1ae4, 0xa804, 0xa85a,
++ 0x2040, 0xa064, 0x9084, 0x000f, 0x9080, 0x1cdd, 0x2005, 0xa812,
++ 0xa988, 0x9006, 0xa842, 0xa83e, 0x0088, 0xa87c, 0xd0b4, 0x0904,
++ 0x1ae4, 0xa988, 0x9006, 0xa842, 0xa83e, 0x2900, 0xa85a, 0xa864,
++ 0x9084, 0x000f, 0x9080, 0x1cdd, 0x2005, 0xa812, 0xa916, 0xa87c,
++ 0xc0dd, 0xa87e, 0x0005, 0x00f6, 0x2079, 0x0090, 0x782c, 0xd0fc,
++ 0x190c, 0x1b25, 0x00e6, 0x2071, 0x1a33, 0x7000, 0x9005, 0x1904,
++ 0x198c, 0x7206, 0x9280, 0x0005, 0x204c, 0x9280, 0x0004, 0x2004,
++ 0x782b, 0x0004, 0x00f6, 0x2079, 0x0200, 0x7803, 0x0040, 0x00fe,
++ 0x00b6, 0x2058, 0xb86c, 0x7836, 0xb890, 0x00be, 0x00f6, 0x2079,
++ 0x0200, 0x7803, 0x0040, 0xa001, 0xa001, 0xa001, 0xa001, 0xa001,
++ 0xa001, 0x781a, 0x2079, 0x0100, 0x8004, 0x78d6, 0x00fe, 0xa814,
++ 0x2050, 0xa858, 0x2040, 0xa810, 0x2060, 0xa064, 0x90ec, 0x000f,
++ 0xa944, 0x791a, 0x7116, 0xa848, 0x781e, 0x701a, 0x9006, 0x700e,
++ 0x7012, 0x7004, 0xa940, 0xa838, 0x9106, 0x1188, 0xa93c, 0xa834,
++ 0x9106, 0x1168, 0x8aff, 0x01a8, 0x0126, 0x2091, 0x8000, 0x00a1,
++ 0x0108, 0x0091, 0x012e, 0x9006, 0x00ee, 0x00fe, 0x0005, 0x0036,
++ 0x0046, 0xab38, 0xac34, 0x080c, 0x1cfd, 0x004e, 0x003e, 0x0d50,
++ 0x0c98, 0x9085, 0x0001, 0x0c80, 0x0076, 0x0066, 0x0056, 0x0046,
++ 0x0036, 0x0026, 0x8aff, 0x0904, 0x1add, 0x700c, 0x7214, 0x923a,
++ 0x7010, 0x7218, 0x9203, 0x0a04, 0x1adc, 0x9705, 0x0904, 0x1adc,
++ 0x903e, 0x2730, 0xa880, 0xd0fc, 0x1190, 0x2d00, 0x0002, 0x1ac0,
++ 0x1a07, 0x1a07, 0x1ac0, 0x1ac0, 0x1aa3, 0x1ac0, 0x1a07, 0x1aa9,
++ 0x1a56, 0x1a56, 0x1ac0, 0x1ac0, 0x1ac0, 0x1a9d, 0x1a56, 0xc0fc,
++ 0xa882, 0xab2c, 0xaa30, 0xad1c, 0xac20, 0xdd9c, 0x0904, 0x1ac2,
++ 0x2c05, 0x908a, 0x0034, 0x1a0c, 0x0d84, 0x9082, 0x001b, 0x0002,
++ 0x19f3, 0x19f1, 0x19f1, 0x19f1, 0x19f1, 0x19f1, 0x19f7, 0x19f1,
++ 0x19f1, 0x19f1, 0x19f1, 0x19f1, 0x19fb, 0x19f1, 0x19f1, 0x19f1,
++ 0x19f1, 0x19f1, 0x19ff, 0x19f1, 0x19f1, 0x19f1, 0x19f1, 0x19f1,
++ 0x1a03, 0x080c, 0x0d84, 0xa774, 0xa678, 0x0804, 0x1ac2, 0xa78c,
++ 0xa690, 0x0804, 0x1ac2, 0xa7a4, 0xa6a8, 0x0804, 0x1ac2, 0xa7bc,
++ 0xa6c0, 0x0804, 0x1ac2, 0xa7d4, 0xa6d8, 0x0804, 0x1ac2, 0x2c05,
++ 0x908a, 0x0036, 0x1a0c, 0x0d84, 0x9082, 0x001b, 0x0002, 0x1a2a,
++ 0x1a2a, 0x1a2c, 0x1a2a, 0x1a2a, 0x1a2a, 0x1a32, 0x1a2a, 0x1a2a,
++ 0x1a2a, 0x1a38, 0x1a2a, 0x1a2a, 0x1a2a, 0x1a3e, 0x1a2a, 0x1a2a,
++ 0x1a2a, 0x1a44, 0x1a2a, 0x1a2a, 0x1a2a, 0x1a4a, 0x1a2a, 0x1a2a,
++ 0x1a2a, 0x1a50, 0x080c, 0x0d84, 0xa574, 0xa478, 0xa37c, 0xa280,
++ 0x0804, 0x1ac2, 0xa584, 0xa488, 0xa38c, 0xa290, 0x0804, 0x1ac2,
++ 0xa594, 0xa498, 0xa39c, 0xa2a0, 0x0804, 0x1ac2, 0xa5a4, 0xa4a8,
++ 0xa3ac, 0xa2b0, 0x0804, 0x1ac2, 0xa5b4, 0xa4b8, 0xa3bc, 0xa2c0,
++ 0x0804, 0x1ac2, 0xa5c4, 0xa4c8, 0xa3cc, 0xa2d0, 0x0804, 0x1ac2,
++ 0xa5d4, 0xa4d8, 0xa3dc, 0xa2e0, 0x0804, 0x1ac2, 0x2c05, 0x908a,
++ 0x0034, 0x1a0c, 0x0d84, 0x9082, 0x001b, 0x0002, 0x1a79, 0x1a77,
++ 0x1a77, 0x1a77, 0x1a77, 0x1a77, 0x1a81, 0x1a77, 0x1a77, 0x1a77,
++ 0x1a77, 0x1a77, 0x1a88, 0x1a77, 0x1a77, 0x1a77, 0x1a77, 0x1a77,
++ 0x1a8f, 0x1a77, 0x1a77, 0x1a77, 0x1a77, 0x1a77, 0x1a96, 0x080c,
++ 0x0d84, 0xa56c, 0xa470, 0xa774, 0xa678, 0xa37c, 0xa280, 0x0804,
++ 0x1ac2, 0xa584, 0xa488, 0xa78c, 0xa690, 0xa394, 0xa298, 0x04d0,
++ 0xa59c, 0xa4a0, 0xa7a4, 0xa6a8, 0xa3ac, 0xa2b0, 0x0498, 0xa5b4,
++ 0xa4b8, 0xa7bc, 0xa6c0, 0xa3c4, 0xa2c8, 0x0460, 0xa5cc, 0xa4d0,
++ 0xa7d4, 0xa6d8, 0xa3dc, 0xa2e0, 0x0428, 0xa864, 0x9084, 0x00ff,
++ 0x9086, 0x001e, 0x11e8, 0x080c, 0x1c9b, 0x1904, 0x19a2, 0x900e,
++ 0x04a0, 0xa864, 0x9084, 0x00ff, 0x9086, 0x0048, 0x190c, 0x0d84,
++ 0x00c6, 0x7004, 0x2060, 0x6004, 0x9086, 0x0043, 0x00ce, 0x0904,
++ 0x1a56, 0xab9c, 0x9016, 0xad8c, 0xac90, 0xaf94, 0xae98, 0x0010,
++ 0x080c, 0x0d84, 0x7b12, 0x7a16, 0x7d02, 0x7c06, 0x7f0a, 0x7e0e,
++ 0x782b, 0x0001, 0x7000, 0x8000, 0x7002, 0xa83c, 0x9300, 0xa83e,
++ 0xa840, 0x9201, 0xa842, 0x700c, 0x9300, 0x700e, 0x7010, 0x9201,
++ 0x7012, 0x080c, 0x1c9b, 0x0008, 0x9006, 0x002e, 0x003e, 0x004e,
++ 0x005e, 0x006e, 0x007e, 0x0005, 0x080c, 0x0d84, 0x0026, 0x2001,
++ 0x0105, 0x2003, 0x0010, 0x782b, 0x0004, 0x7003, 0x0000, 0x7004,
++ 0x2060, 0x6014, 0x2048, 0x080c, 0xb0ad, 0x0118, 0xa880, 0xc0bd,
++ 0xa882, 0x6020, 0x9086, 0x0006, 0x1180, 0x2061, 0x0100, 0x62c8,
++ 0x2001, 0x00fa, 0x8001, 0x1df0, 0x60c8, 0x9206, 0x1dc0, 0x60c4,
++ 0xa89a, 0x60c8, 0xa896, 0x7004, 0x2060, 0x00c6, 0x080c, 0xad1e,
++ 0x00ce, 0x2001, 0x19c3, 0x2004, 0x9c06, 0x1160, 0x2009, 0x0040,
++ 0x080c, 0x2014, 0x080c, 0x901f, 0x2011, 0x0000, 0x080c, 0x8ea3,
++ 0x080c, 0x820b, 0x002e, 0x0804, 0x1c4d, 0x0126, 0x2091, 0x2400,
++ 0xa858, 0x2040, 0x792c, 0x782b, 0x0002, 0x9184, 0x0700, 0x1904,
++ 0x1ae6, 0x7000, 0x0002, 0x1c4d, 0x1b37, 0x1ba0, 0x1c4b, 0x8001,
++ 0x7002, 0xd19c, 0x1150, 0x8aff, 0x0590, 0x080c, 0x199c, 0x0904,
++ 0x1c4d, 0x080c, 0x199c, 0x0804, 0x1c4d, 0x782b, 0x0004, 0xd194,
++ 0x0148, 0xa880, 0xc0fc, 0xa882, 0x8aff, 0x11b8, 0xa87c, 0xc0f5,
++ 0xa87e, 0x0098, 0xab3c, 0xaa40, 0x7810, 0xa82e, 0x931a, 0x7814,
++ 0xa832, 0x9213, 0x7800, 0xa81e, 0x7804, 0xa822, 0xab3e, 0xaa42,
++ 0x080c, 0x1cb3, 0xa880, 0xc0fd, 0xa882, 0x2a00, 0xa816, 0x2800,
++ 0xa85a, 0x2c00, 0xa812, 0x7003, 0x0000, 0x0804, 0x1c4d, 0x00f6,
++ 0x0026, 0x781c, 0x0006, 0x7818, 0x0006, 0x2079, 0x0100, 0x7a14,
++ 0x9284, 0x1984, 0x9085, 0x0012, 0x7816, 0x0036, 0x2019, 0x1000,
++ 0x8319, 0x090c, 0x0d84, 0x7820, 0xd0bc, 0x1dd0, 0x003e, 0x79c8,
++ 0x000e, 0x9102, 0x001e, 0x0006, 0x0016, 0x79c4, 0x000e, 0x9103,
++ 0x78c6, 0x000e, 0x78ca, 0x9284, 0x1984, 0x9085, 0x0012, 0x7816,
++ 0x002e, 0x00fe, 0x782b, 0x0008, 0x7003, 0x0000, 0x0804, 0x1c4d,
++ 0x8001, 0x7002, 0xd194, 0x0170, 0x782c, 0xd0fc, 0x1904, 0x1b2a,
++ 0xd19c, 0x1904, 0x1c49, 0x8aff, 0x0904, 0x1c4d, 0x080c, 0x199c,
++ 0x0804, 0x1c4d, 0xab3c, 0xaa40, 0x080c, 0x1cb3, 0xdd9c, 0x1904,
++ 0x1c08, 0x2c05, 0x908a, 0x0036, 0x1a0c, 0x0d84, 0x9082, 0x001b,
++ 0x0002, 0x1bdc, 0x1bdc, 0x1bde, 0x1bdc, 0x1bdc, 0x1bdc, 0x1be4,
++ 0x1bdc, 0x1bdc, 0x1bdc, 0x1bea, 0x1bdc, 0x1bdc, 0x1bdc, 0x1bf0,
++ 0x1bdc, 0x1bdc, 0x1bdc, 0x1bf6, 0x1bdc, 0x1bdc, 0x1bdc, 0x1bfc,
++ 0x1bdc, 0x1bdc, 0x1bdc, 0x1c02, 0x080c, 0x0d84, 0xa07c, 0x931a,
++ 0xa080, 0x9213, 0x0804, 0x1b54, 0xa08c, 0x931a, 0xa090, 0x9213,
++ 0x0804, 0x1b54, 0xa09c, 0x931a, 0xa0a0, 0x9213, 0x0804, 0x1b54,
++ 0xa0ac, 0x931a, 0xa0b0, 0x9213, 0x0804, 0x1b54, 0xa0bc, 0x931a,
++ 0xa0c0, 0x9213, 0x0804, 0x1b54, 0xa0cc, 0x931a, 0xa0d0, 0x9213,
++ 0x0804, 0x1b54, 0xa0dc, 0x931a, 0xa0e0, 0x9213, 0x0804, 0x1b54,
++ 0x2c05, 0x908a, 0x0034, 0x1a0c, 0x0d84, 0x9082, 0x001b, 0x0002,
++ 0x1c2b, 0x1c29, 0x1c29, 0x1c29, 0x1c29, 0x1c29, 0x1c31, 0x1c29,
++ 0x1c29, 0x1c29, 0x1c29, 0x1c29, 0x1c37, 0x1c29, 0x1c29, 0x1c29,
++ 0x1c29, 0x1c29, 0x1c3d, 0x1c29, 0x1c29, 0x1c29, 0x1c29, 0x1c29,
++ 0x1c43, 0x080c, 0x0d84, 0xa07c, 0x931a, 0xa080, 0x9213, 0x0804,
++ 0x1b54, 0xa094, 0x931a, 0xa098, 0x9213, 0x0804, 0x1b54, 0xa0ac,
++ 0x931a, 0xa0b0, 0x9213, 0x0804, 0x1b54, 0xa0c4, 0x931a, 0xa0c8,
++ 0x9213, 0x0804, 0x1b54, 0xa0dc, 0x931a, 0xa0e0, 0x9213, 0x0804,
++ 0x1b54, 0x0804, 0x1b52, 0x080c, 0x0d84, 0x012e, 0x0005, 0x00f6,
++ 0x00e6, 0x2071, 0x1a33, 0x7000, 0x9086, 0x0000, 0x0904, 0x1c98,
++ 0x2079, 0x0090, 0x2009, 0x0207, 0x210c, 0xd194, 0x01b8, 0x2009,
++ 0x020c, 0x210c, 0x9184, 0x0003, 0x0188, 0x080c, 0xcd2b, 0x2001,
++ 0x0133, 0x2004, 0x9005, 0x090c, 0x0d84, 0x0016, 0x2009, 0x0040,
++ 0x080c, 0x2014, 0x001e, 0x2001, 0x020c, 0x2102, 0x2009, 0x0206,
++ 0x2104, 0x2009, 0x0203, 0x210c, 0x9106, 0x1120, 0x2009, 0x0040,
++ 0x080c, 0x2014, 0x782c, 0xd0fc, 0x09a8, 0x080c, 0x1b25, 0x7000,
++ 0x9086, 0x0000, 0x1978, 0x782b, 0x0004, 0x782c, 0xd0ac, 0x1de8,
++ 0x2009, 0x0040, 0x080c, 0x2014, 0x782b, 0x0002, 0x7003, 0x0000,
++ 0x00ee, 0x00fe, 0x0005, 0x8c60, 0x2c05, 0x9005, 0x0110, 0x8a51,
++ 0x0005, 0xa004, 0x9005, 0x0168, 0xa85a, 0x2040, 0xa064, 0x9084,
++ 0x000f, 0x9080, 0x1cdd, 0x2065, 0x8cff, 0x090c, 0x0d84, 0x8a51,
++ 0x0005, 0x2050, 0x0005, 0x8a50, 0x8c61, 0x2c05, 0x9005, 0x1190,
++ 0x2800, 0x9906, 0x0120, 0xa000, 0x9005, 0x1108, 0x2900, 0x2040,
++ 0xa85a, 0xa064, 0x9084, 0x000f, 0x9080, 0x1ced, 0x2065, 0x8cff,
++ 0x090c, 0x0d84, 0x0005, 0x0000, 0x001d, 0x0021, 0x0025, 0x0029,
++ 0x002d, 0x0031, 0x0035, 0x0000, 0x001b, 0x0021, 0x0027, 0x002d,
++ 0x0033, 0x0000, 0x0000, 0x0023, 0x0000, 0x0000, 0x1cd0, 0x1ccc,
++ 0x0000, 0x0000, 0x1cda, 0x0000, 0x1cd0, 0x1cd7, 0x1cd7, 0x1cd4,
++ 0x0000, 0x0000, 0x0000, 0x1cda, 0x1cd7, 0x0000, 0x1cd2, 0x1cd2,
++ 0x0000, 0x0000, 0x1cda, 0x0000, 0x1cd2, 0x1cd8, 0x1cd8, 0x1cd8,
++ 0x0000, 0x0000, 0x0000, 0x1cda, 0x1cd8, 0x00c6, 0x00d6, 0x0086,
++ 0xab42, 0xac3e, 0xa888, 0x9055, 0x0904, 0x1ed4, 0x2940, 0xa064,
++ 0x90ec, 0x000f, 0x9de0, 0x1cdd, 0x9d86, 0x0007, 0x0130, 0x9d86,
++ 0x000e, 0x0118, 0x9d86, 0x000f, 0x1120, 0xa08c, 0x9422, 0xa090,
++ 0x931b, 0x2c05, 0x9065, 0x1140, 0x0310, 0x0804, 0x1ed4, 0xa004,
++ 0x9045, 0x0904, 0x1ed4, 0x0c18, 0x2c05, 0x9005, 0x0904, 0x1dbc,
++ 0xdd9c, 0x1904, 0x1d78, 0x908a, 0x0036, 0x1a0c, 0x0d84, 0x9082,
++ 0x001b, 0x0002, 0x1d4d, 0x1d4d, 0x1d4f, 0x1d4d, 0x1d4d, 0x1d4d,
++ 0x1d55, 0x1d4d, 0x1d4d, 0x1d4d, 0x1d5b, 0x1d4d, 0x1d4d, 0x1d4d,
++ 0x1d61, 0x1d4d, 0x1d4d, 0x1d4d, 0x1d67, 0x1d4d, 0x1d4d, 0x1d4d,
++ 0x1d6d, 0x1d4d, 0x1d4d, 0x1d4d, 0x1d73, 0x080c, 0x0d84, 0xa07c,
++ 0x9422, 0xa080, 0x931b, 0x0804, 0x1db2, 0xa08c, 0x9422, 0xa090,
++ 0x931b, 0x0804, 0x1db2, 0xa09c, 0x9422, 0xa0a0, 0x931b, 0x0804,
++ 0x1db2, 0xa0ac, 0x9422, 0xa0b0, 0x931b, 0x0804, 0x1db2, 0xa0bc,
++ 0x9422, 0xa0c0, 0x931b, 0x0804, 0x1db2, 0xa0cc, 0x9422, 0xa0d0,
++ 0x931b, 0x0804, 0x1db2, 0xa0dc, 0x9422, 0xa0e0, 0x931b, 0x04d0,
++ 0x908a, 0x0034, 0x1a0c, 0x0d84, 0x9082, 0x001b, 0x0002, 0x1d9a,
++ 0x1d98, 0x1d98, 0x1d98, 0x1d98, 0x1d98, 0x1d9f, 0x1d98, 0x1d98,
++ 0x1d98, 0x1d98, 0x1d98, 0x1da4, 0x1d98, 0x1d98, 0x1d98, 0x1d98,
++ 0x1d98, 0x1da9, 0x1d98, 0x1d98, 0x1d98, 0x1d98, 0x1d98, 0x1dae,
++ 0x080c, 0x0d84, 0xa07c, 0x9422, 0xa080, 0x931b, 0x0098, 0xa094,
++ 0x9422, 0xa098, 0x931b, 0x0070, 0xa0ac, 0x9422, 0xa0b0, 0x931b,
++ 0x0048, 0xa0c4, 0x9422, 0xa0c8, 0x931b, 0x0020, 0xa0dc, 0x9422,
++ 0xa0e0, 0x931b, 0x0630, 0x2300, 0x9405, 0x0160, 0x8a51, 0x0904,
++ 0x1ed4, 0x8c60, 0x0804, 0x1d24, 0xa004, 0x9045, 0x0904, 0x1ed4,
++ 0x0804, 0x1d07, 0x8a51, 0x0904, 0x1ed4, 0x8c60, 0x2c05, 0x9005,
++ 0x1158, 0xa004, 0x9045, 0x0904, 0x1ed4, 0xa064, 0x90ec, 0x000f,
++ 0x9de0, 0x1cdd, 0x2c05, 0x2060, 0xa880, 0xc0fc, 0xa882, 0x0804,
++ 0x1ec9, 0x2c05, 0x8422, 0x8420, 0x831a, 0x9399, 0x0000, 0xac2e,
++ 0xab32, 0xdd9c, 0x1904, 0x1e66, 0x9082, 0x001b, 0x0002, 0x1e02,
++ 0x1e02, 0x1e04, 0x1e02, 0x1e02, 0x1e02, 0x1e12, 0x1e02, 0x1e02,
++ 0x1e02, 0x1e20, 0x1e02, 0x1e02, 0x1e02, 0x1e2e, 0x1e02, 0x1e02,
++ 0x1e02, 0x1e3c, 0x1e02, 0x1e02, 0x1e02, 0x1e4a, 0x1e02, 0x1e02,
++ 0x1e02, 0x1e58, 0x080c, 0x0d84, 0xa17c, 0x2400, 0x9122, 0xa180,
++ 0x2300, 0x911b, 0x0a0c, 0x0d84, 0xa074, 0x9420, 0xa078, 0x9319,
++ 0x0804, 0x1ec4, 0xa18c, 0x2400, 0x9122, 0xa190, 0x2300, 0x911b,
++ 0x0a0c, 0x0d84, 0xa084, 0x9420, 0xa088, 0x9319, 0x0804, 0x1ec4,
++ 0xa19c, 0x2400, 0x9122, 0xa1a0, 0x2300, 0x911b, 0x0a0c, 0x0d84,
++ 0xa094, 0x9420, 0xa098, 0x9319, 0x0804, 0x1ec4, 0xa1ac, 0x2400,
++ 0x9122, 0xa1b0, 0x2300, 0x911b, 0x0a0c, 0x0d84, 0xa0a4, 0x9420,
++ 0xa0a8, 0x9319, 0x0804, 0x1ec4, 0xa1bc, 0x2400, 0x9122, 0xa1c0,
++ 0x2300, 0x911b, 0x0a0c, 0x0d84, 0xa0b4, 0x9420, 0xa0b8, 0x9319,
++ 0x0804, 0x1ec4, 0xa1cc, 0x2400, 0x9122, 0xa1d0, 0x2300, 0x911b,
++ 0x0a0c, 0x0d84, 0xa0c4, 0x9420, 0xa0c8, 0x9319, 0x0804, 0x1ec4,
++ 0xa1dc, 0x2400, 0x9122, 0xa1e0, 0x2300, 0x911b, 0x0a0c, 0x0d84,
++ 0xa0d4, 0x9420, 0xa0d8, 0x9319, 0x0804, 0x1ec4, 0x9082, 0x001b,
++ 0x0002, 0x1e84, 0x1e82, 0x1e82, 0x1e82, 0x1e82, 0x1e82, 0x1e91,
++ 0x1e82, 0x1e82, 0x1e82, 0x1e82, 0x1e82, 0x1e9e, 0x1e82, 0x1e82,
++ 0x1e82, 0x1e82, 0x1e82, 0x1eab, 0x1e82, 0x1e82, 0x1e82, 0x1e82,
++ 0x1e82, 0x1eb8, 0x080c, 0x0d84, 0xa17c, 0x2400, 0x9122, 0xa180,
++ 0x2300, 0x911b, 0x0a0c, 0x0d84, 0xa06c, 0x9420, 0xa070, 0x9319,
++ 0x0498, 0xa194, 0x2400, 0x9122, 0xa198, 0x2300, 0x911b, 0x0a0c,
++ 0x0d84, 0xa084, 0x9420, 0xa088, 0x9319, 0x0430, 0xa1ac, 0x2400,
++ 0x9122, 0xa1b0, 0x2300, 0x911b, 0x0a0c, 0x0d84, 0xa09c, 0x9420,
++ 0xa0a0, 0x9319, 0x00c8, 0xa1c4, 0x2400, 0x9122, 0xa1c8, 0x2300,
++ 0x911b, 0x0a0c, 0x0d84, 0xa0b4, 0x9420, 0xa0b8, 0x9319, 0x0060,
++ 0xa1dc, 0x2400, 0x9122, 0xa1e0, 0x2300, 0x911b, 0x0a0c, 0x0d84,
++ 0xa0cc, 0x9420, 0xa0d0, 0x9319, 0xac1e, 0xab22, 0xa880, 0xc0fd,
++ 0xa882, 0x2800, 0xa85a, 0x2c00, 0xa812, 0x2a00, 0xa816, 0x000e,
++ 0x000e, 0x000e, 0x9006, 0x0028, 0x008e, 0x00de, 0x00ce, 0x9085,
++ 0x0001, 0x0005, 0x2001, 0x0005, 0x2004, 0x9084, 0x0007, 0x0002,
++ 0x1ef2, 0x1b25, 0x1ef2, 0x1ee8, 0x1eeb, 0x1eee, 0x1eeb, 0x1eee,
++ 0x080c, 0x1b25, 0x0005, 0x080c, 0x1146, 0x0005, 0x080c, 0x1b25,
++ 0x080c, 0x1146, 0x0005, 0x0126, 0x2091, 0x2600, 0x2079, 0x0200,
++ 0x2071, 0x0260, 0x2069, 0x1800, 0x7817, 0x0000, 0x789b, 0x0814,
++ 0x78a3, 0x0406, 0x789f, 0x0410, 0x2009, 0x013b, 0x200b, 0x0400,
++ 0x781b, 0x0002, 0x783b, 0x001f, 0x7837, 0x0020, 0x7803, 0x1600,
++ 0x012e, 0x0005, 0x2091, 0x2600, 0x781c, 0xd0a4, 0x190c, 0x2011,
++ 0x7900, 0xd1dc, 0x1118, 0x9084, 0x0006, 0x001a, 0x9084, 0x000e,
++ 0x0002, 0x1f39, 0x1f31, 0x71ab, 0x1f31, 0x1f33, 0x1f33, 0x1f33,
++ 0x1f33, 0x7191, 0x1f31, 0x1f35, 0x1f31, 0x1f33, 0x1f31, 0x1f33,
++ 0x1f31, 0x080c, 0x0d84, 0x0031, 0x0020, 0x080c, 0x7191, 0x080c,
++ 0x71ab, 0x0005, 0x0006, 0x0016, 0x0026, 0x080c, 0xcd2b, 0x7930,
++ 0x9184, 0x0003, 0x01c0, 0x2001, 0x19c3, 0x2004, 0x9005, 0x0170,
++ 0x2001, 0x0133, 0x2004, 0x9005, 0x090c, 0x0d84, 0x00c6, 0x2001,
++ 0x19c3, 0x2064, 0x080c, 0xad1e, 0x00ce, 0x00f8, 0x2009, 0x0040,
++ 0x080c, 0x2014, 0x00d0, 0x9184, 0x0014, 0x01a0, 0x6a00, 0x9286,
++ 0x0003, 0x0160, 0x080c, 0x6877, 0x1138, 0x080c, 0x6b40, 0x080c,
++ 0x56d9, 0x080c, 0x67be, 0x0010, 0x080c, 0x55a0, 0x080c, 0x7243,
++ 0x0041, 0x0018, 0x9184, 0x9540, 0x1dc8, 0x002e, 0x001e, 0x000e,
++ 0x0005, 0x00e6, 0x0036, 0x0046, 0x0056, 0x2071, 0x1a30, 0x080c,
++ 0x1827, 0x005e, 0x004e, 0x003e, 0x00ee, 0x0005, 0x0126, 0x2091,
++ 0x2e00, 0x2071, 0x1800, 0x7128, 0x2001, 0x193e, 0x2102, 0x2001,
++ 0x1946, 0x2102, 0x2001, 0x013b, 0x2102, 0x2079, 0x0200, 0x2001,
++ 0x0201, 0x789e, 0x78a3, 0x0200, 0x9198, 0x0007, 0x831c, 0x831c,
++ 0x831c, 0x9398, 0x0005, 0x2320, 0x9182, 0x0204, 0x1230, 0x2011,
++ 0x0008, 0x8423, 0x8423, 0x8423, 0x0488, 0x9182, 0x024c, 0x1240,
++ 0x2011, 0x0007, 0x8403, 0x8003, 0x9400, 0x9400, 0x9420, 0x0430,
++ 0x9182, 0x02bc, 0x1238, 0x2011, 0x0006, 0x8403, 0x8003, 0x9400,
++ 0x9420, 0x00e0, 0x9182, 0x034c, 0x1230, 0x2011, 0x0005, 0x8403,
++ 0x8003, 0x9420, 0x0098, 0x9182, 0x042c, 0x1228, 0x2011, 0x0004,
++ 0x8423, 0x8423, 0x0058, 0x9182, 0x059c, 0x1228, 0x2011, 0x0003,
++ 0x8403, 0x9420, 0x0018, 0x2011, 0x0002, 0x8423, 0x9482, 0x0228,
++ 0x8002, 0x8020, 0x8301, 0x9402, 0x0110, 0x0208, 0x8321, 0x8217,
++ 0x8203, 0x9405, 0x789a, 0x012e, 0x0005, 0x0006, 0x00d6, 0x2069,
++ 0x0200, 0x6814, 0x9084, 0xffc0, 0x910d, 0x6916, 0x00de, 0x000e,
++ 0x0005, 0x00d6, 0x2069, 0x0200, 0x9005, 0x6810, 0x0110, 0xc0a5,
++ 0x0008, 0xc0a4, 0x6812, 0x00de, 0x0005, 0x0006, 0x00d6, 0x2069,
++ 0x0200, 0x6810, 0x9084, 0xfff8, 0x910d, 0x6912, 0x00de, 0x000e,
++ 0x0005, 0x7938, 0x080c, 0x0d84, 0x00f6, 0x2079, 0x0200, 0x7902,
++ 0xa001, 0xa001, 0xa001, 0xa001, 0xa001, 0xa001, 0x7902, 0xa001,
++ 0xa001, 0xa001, 0xa001, 0xa001, 0xa001, 0x00fe, 0x0005, 0x0126,
++ 0x2091, 0x2800, 0x2061, 0x0100, 0x2071, 0x1800, 0x2009, 0x0000,
++ 0x080c, 0x27f5, 0x080c, 0x2718, 0x6054, 0x8004, 0x8004, 0x8004,
++ 0x8004, 0x9084, 0x000c, 0x6150, 0x918c, 0xfff3, 0x9105, 0x6052,
++ 0x6050, 0x9084, 0xfbff, 0x9085, 0x2000, 0x6052, 0x2009, 0x196a,
++ 0x2011, 0x196b, 0x6358, 0x939c, 0x38f0, 0x2320, 0x080c, 0x275c,
++ 0x1238, 0x939d, 0x4003, 0x94a5, 0x8603, 0x230a, 0x2412, 0x0030,
++ 0x939d, 0x0203, 0x94a5, 0x8603, 0x230a, 0x2412, 0x9006, 0x080c,
++ 0x2747, 0x9006, 0x080c, 0x272a, 0x20a9, 0x0012, 0x1d04, 0x2066,
++ 0x2091, 0x6000, 0x1f04, 0x2066, 0x602f, 0x0100, 0x602f, 0x0000,
++ 0x6050, 0x9085, 0x0400, 0x9084, 0xdfff, 0x6052, 0x6024, 0x6026,
++ 0x080c, 0x2436, 0x2009, 0x00ef, 0x6132, 0x6136, 0x080c, 0x2446,
++ 0x60e7, 0x0000, 0x61ea, 0x60e3, 0x0008, 0x604b, 0xf7f7, 0x6043,
++ 0x0000, 0x602f, 0x0080, 0x602f, 0x0000, 0x6007, 0x049f, 0x60bb,
++ 0x0000, 0x20a9, 0x0018, 0x60bf, 0x0000, 0x1f04, 0x2093, 0x60bb,
++ 0x0000, 0x60bf, 0x0108, 0x60bf, 0x0012, 0x60bf, 0x0320, 0x60bf,
++ 0x0018, 0x601b, 0x00f0, 0x601f, 0x001e, 0x600f, 0x006b, 0x602b,
++ 0x402f, 0x012e, 0x0005, 0x00f6, 0x2079, 0x0140, 0x78c3, 0x0080,
++ 0x78c3, 0x0083, 0x78c3, 0x0000, 0x00fe, 0x0005, 0x2001, 0x1834,
++ 0x2003, 0x0000, 0x2001, 0x1833, 0x2003, 0x0001, 0x0005, 0x0126,
++ 0x2091, 0x2800, 0x0006, 0x0016, 0x0026, 0x6124, 0x9184, 0x5e2c,
++ 0x1118, 0x9184, 0x0007, 0x002a, 0x9195, 0x0004, 0x9284, 0x0007,
++ 0x0002, 0x20f3, 0x20d9, 0x20dc, 0x20df, 0x20e4, 0x20e6, 0x20ea,
++ 0x20ee, 0x080c, 0x7ab7, 0x00b8, 0x080c, 0x7b8a, 0x00a0, 0x080c,
++ 0x7b8a, 0x080c, 0x7ab7, 0x0078, 0x0099, 0x0068, 0x080c, 0x7ab7,
++ 0x0079, 0x0048, 0x080c, 0x7b8a, 0x0059, 0x0028, 0x080c, 0x7b8a,
++ 0x080c, 0x7ab7, 0x0029, 0x002e, 0x001e, 0x000e, 0x012e, 0x0005,
++ 0x00a6, 0x6124, 0x6028, 0xd09c, 0x0118, 0xd19c, 0x1904, 0x232f,
++ 0xd1f4, 0x0110, 0x080c, 0x0d84, 0x080c, 0x6877, 0x05a0, 0x7000,
++ 0x9086, 0x0003, 0x01f0, 0x6024, 0x9084, 0x1800, 0x01d0, 0x080c,
++ 0x689a, 0x0118, 0x080c, 0x6888, 0x11a0, 0x6027, 0x0020, 0x6043,
++ 0x0000, 0x709c, 0x9005, 0x1150, 0x709f, 0x0001, 0x00d6, 0x2069,
++ 0x0140, 0x080c, 0x68d0, 0x00de, 0x1904, 0x2332, 0x080c, 0x6b4a,
++ 0x0428, 0x080c, 0x689a, 0x1590, 0x6024, 0x9084, 0x1800, 0x1108,
++ 0x0468, 0x080c, 0x6b4a, 0x080c, 0x6b40, 0x080c, 0x56d9, 0x080c,
++ 0x67be, 0x0804, 0x232f, 0xd1ac, 0x1508, 0x6024, 0xd0dc, 0x1170,
++ 0xd0e4, 0x1178, 0xd0d4, 0x1190, 0xd0cc, 0x0130, 0x7090, 0x9086,
++ 0x0028, 0x1110, 0x080c, 0x6a2d, 0x0804, 0x232f, 0x080c, 0x6b45,
++ 0x0048, 0x2001, 0x194c, 0x2003, 0x0002, 0x0020, 0x080c, 0x69a3,
++ 0x0804, 0x232f, 0x080c, 0x6ac8, 0x0804, 0x232f, 0xd1ac, 0x0904,
++ 0x224f, 0x080c, 0x6877, 0x11c0, 0x6027, 0x0020, 0x0006, 0x0026,
++ 0x0036, 0x080c, 0x6891, 0x1158, 0x080c, 0x6b40, 0x080c, 0x56d9,
++ 0x080c, 0x67be, 0x003e, 0x002e, 0x000e, 0x00ae, 0x0005, 0x003e,
++ 0x002e, 0x000e, 0x080c, 0x6853, 0x0016, 0x0046, 0x00c6, 0x644c,
++ 0x9486, 0xf0f0, 0x1138, 0x2061, 0x0100, 0x644a, 0x6043, 0x0090,
++ 0x6043, 0x0010, 0x74d6, 0x948c, 0xff00, 0x7034, 0xd084, 0x0178,
++ 0x9186, 0xf800, 0x1160, 0x7040, 0xd084, 0x1148, 0xc085, 0x7042,
++ 0x0036, 0x2418, 0x2011, 0x8016, 0x080c, 0x447f, 0x003e, 0x080c,
++ 0xb752, 0x1904, 0x222c, 0x9196, 0xff00, 0x05a8, 0x7058, 0x9084,
++ 0x00ff, 0x810f, 0x81ff, 0x0110, 0x9116, 0x0568, 0x7130, 0xd184,
++ 0x1550, 0x080c, 0x2e69, 0x0128, 0xc18d, 0x7132, 0x080c, 0x5f25,
++ 0x1510, 0x6240, 0x9294, 0x0010, 0x0130, 0x6248, 0x9294, 0xff00,
++ 0x9296, 0xff00, 0x01c0, 0x7030, 0xd08c, 0x0904, 0x222c, 0x7034,
++ 0xd08c, 0x1140, 0x2001, 0x180c, 0x200c, 0xd1ac, 0x1904, 0x222c,
++ 0xc1ad, 0x2102, 0x0036, 0x73d4, 0x2011, 0x8013, 0x080c, 0x447f,
++ 0x003e, 0x0804, 0x222c, 0x7034, 0xd08c, 0x1140, 0x2001, 0x180c,
++ 0x200c, 0xd1ac, 0x1904, 0x222c, 0xc1ad, 0x2102, 0x0036, 0x73d4,
++ 0x2011, 0x8013, 0x080c, 0x447f, 0x003e, 0x7130, 0xc185, 0x7132,
++ 0x2011, 0x1853, 0x220c, 0xd1a4, 0x01f0, 0x0016, 0x2009, 0x0001,
++ 0x2011, 0x0100, 0x080c, 0x7a0a, 0x2019, 0x000e, 0x00c6, 0x2061,
++ 0x0000, 0x080c, 0xc941, 0x00ce, 0x9484, 0x00ff, 0x9080, 0x2e6e,
++ 0x200d, 0x918c, 0xff00, 0x810f, 0x2120, 0x9006, 0x2009, 0x000e,
++ 0x080c, 0xc9c5, 0x001e, 0xd1ac, 0x1140, 0x0016, 0x900e, 0x2019,
++ 0x0004, 0x080c, 0x2ce5, 0x001e, 0x0078, 0x0156, 0x00b6, 0x20a9,
++ 0x007f, 0x900e, 0x080c, 0x5c0d, 0x1110, 0x080c, 0x56f3, 0x8108,
++ 0x1f04, 0x2222, 0x00be, 0x015e, 0x00ce, 0x004e, 0x080c, 0x94da,
++ 0x60e3, 0x0000, 0x001e, 0x2001, 0x1800, 0x2014, 0x9296, 0x0004,
++ 0x1170, 0xd19c, 0x11a0, 0x2011, 0x180c, 0x2214, 0xd29c, 0x1120,
++ 0x6204, 0x9295, 0x0002, 0x6206, 0x6228, 0xc29d, 0x622a, 0x2003,
++ 0x0001, 0x2001, 0x1824, 0x2003, 0x0000, 0x6027, 0x0020, 0xd194,
++ 0x0904, 0x232f, 0x0016, 0x6220, 0xd2b4, 0x0904, 0x22db, 0x080c,
++ 0x7893, 0x080c, 0x8b50, 0x6027, 0x0004, 0x00f6, 0x2019, 0x19bd,
++ 0x2304, 0x907d, 0x0904, 0x22ac, 0x7804, 0x9086, 0x0032, 0x1904,
++ 0x22ac, 0x00d6, 0x00c6, 0x00e6, 0x0096, 0x2069, 0x0140, 0x7814,
++ 0x685e, 0x7808, 0x685a, 0x6043, 0x0002, 0x2001, 0x0003, 0x8001,
++ 0x1df0, 0x6043, 0x0000, 0x2001, 0x003c, 0x8001, 0x1df0, 0x2001,
++ 0x1000, 0x080c, 0x28a5, 0x9006, 0x080c, 0x28a5, 0x2001, 0x001e,
++ 0x8001, 0x0240, 0x20a9, 0x0009, 0x080c, 0x27d0, 0x6904, 0xd1dc,
++ 0x1140, 0x0cb0, 0x2001, 0x0100, 0x080c, 0x28a5, 0x9006, 0x080c,
++ 0x28a5, 0x080c, 0x8026, 0x080c, 0x8125, 0x7814, 0x2048, 0xa867,
++ 0x0103, 0x2f60, 0x080c, 0x9554, 0x009e, 0x00ee, 0x00ce, 0x00de,
++ 0x00fe, 0x001e, 0x00ae, 0x0005, 0x00fe, 0x00d6, 0x2069, 0x0140,
++ 0x6804, 0x9084, 0x4000, 0x0138, 0x2001, 0x1000, 0x080c, 0x28a5,
++ 0x9006, 0x080c, 0x28a5, 0x00de, 0x00c6, 0x2061, 0x19b4, 0x6028,
++ 0x909a, 0x00c8, 0x1238, 0x8000, 0x602a, 0x00ce, 0x080c, 0x8b2c,
++ 0x0804, 0x232e, 0x2061, 0x0100, 0x62c0, 0x080c, 0x9367, 0x2019,
++ 0x19bd, 0x2304, 0x9065, 0x0120, 0x2009, 0x0027, 0x080c, 0x95ce,
++ 0x00ce, 0x0804, 0x232e, 0xd2bc, 0x05f0, 0x080c, 0x78a0, 0x6014,
++ 0x9084, 0x1984, 0x9085, 0x0010, 0x6016, 0x6027, 0x0004, 0x00d6,
++ 0x2069, 0x0140, 0x6804, 0x9084, 0x4000, 0x0138, 0x2001, 0x1000,
++ 0x080c, 0x28a5, 0x9006, 0x080c, 0x28a5, 0x00de, 0x00c6, 0x2061,
++ 0x19b4, 0x6044, 0x909a, 0x00c8, 0x1608, 0x8000, 0x6046, 0x603c,
++ 0x00ce, 0x9005, 0x0558, 0x2009, 0x07d0, 0x080c, 0x7898, 0x9080,
++ 0x0008, 0x2004, 0x9086, 0x0006, 0x1138, 0x6114, 0x918c, 0x1984,
++ 0x918d, 0x0012, 0x6116, 0x00d0, 0x6114, 0x918c, 0x1984, 0x918d,
++ 0x0016, 0x6116, 0x0098, 0x6027, 0x0004, 0x0080, 0x0036, 0x2019,
++ 0x0001, 0x080c, 0x8dfe, 0x003e, 0x2019, 0x19c3, 0x2304, 0x9065,
++ 0x0120, 0x2009, 0x004f, 0x080c, 0x95ce, 0x00ce, 0x001e, 0xd19c,
++ 0x0904, 0x23a1, 0x7034, 0xd0ac, 0x1904, 0x2376, 0x0016, 0x0156,
++ 0x6027, 0x0008, 0x6050, 0x9085, 0x0040, 0x6052, 0x6050, 0x9084,
++ 0xfbcf, 0x6052, 0x080c, 0x27ef, 0x9085, 0x2000, 0x6052, 0x20a9,
++ 0x0012, 0x1d04, 0x2349, 0x080c, 0x78c7, 0x1f04, 0x2349, 0x6050,
++ 0x9085, 0x0400, 0x9084, 0xdfbf, 0x6052, 0x20a9, 0x0028, 0xa001,
++ 0x1f04, 0x2357, 0x6150, 0x9185, 0x1400, 0x6052, 0x20a9, 0x0366,
++ 0x1d04, 0x2360, 0x080c, 0x78c7, 0x6020, 0xd09c, 0x1130, 0x015e,
++ 0x6152, 0x001e, 0x6027, 0x0008, 0x04a0, 0x080c, 0x27b7, 0x1f04,
++ 0x2360, 0x015e, 0x6152, 0x001e, 0x6027, 0x0008, 0x0016, 0x6028,
++ 0xc09c, 0x602a, 0x080c, 0x94da, 0x60e3, 0x0000, 0x080c, 0xcd0a,
++ 0x080c, 0xcd25, 0x080c, 0x4dee, 0xd0fc, 0x1138, 0x080c, 0xb752,
++ 0x1120, 0x9085, 0x0001, 0x080c, 0x68c0, 0x9006, 0x080c, 0x28a5,
++ 0x2009, 0x0002, 0x080c, 0x27f5, 0x00e6, 0x2071, 0x1800, 0x7003,
++ 0x0004, 0x080c, 0x0e3b, 0x00ee, 0x6027, 0x0008, 0x080c, 0x0b69,
++ 0x001e, 0x918c, 0xffd0, 0x6126, 0x00ae, 0x0005, 0x0006, 0x0016,
++ 0x0026, 0x0036, 0x00e6, 0x00f6, 0x0126, 0x2091, 0x8000, 0x2071,
++ 0x1800, 0x71cc, 0x70ce, 0x9116, 0x0904, 0x23f5, 0x81ff, 0x01a0,
++ 0x2009, 0x0000, 0x080c, 0x27f5, 0x2011, 0x8011, 0x2019, 0x010e,
++ 0x231c, 0x939e, 0x0007, 0x1118, 0x2019, 0x0001, 0x0010, 0x2019,
++ 0x0000, 0x080c, 0x447f, 0x0448, 0x2001, 0x1975, 0x200c, 0x81ff,
++ 0x1140, 0x2001, 0x0109, 0x2004, 0xd0b4, 0x0118, 0x2019, 0x0003,
++ 0x0008, 0x2118, 0x2011, 0x8012, 0x080c, 0x447f, 0x080c, 0x0e3b,
++ 0x080c, 0x4dee, 0xd0fc, 0x1188, 0x080c, 0xb752, 0x1170, 0x00c6,
++ 0x080c, 0x2491, 0x080c, 0x8d36, 0x2061, 0x0100, 0x2019, 0x0028,
++ 0x2009, 0x0002, 0x080c, 0x2ce5, 0x00ce, 0x012e, 0x00fe, 0x00ee,
++ 0x003e, 0x002e, 0x001e, 0x000e, 0x0005, 0x2028, 0x918c, 0x00ff,
++ 0x2130, 0x9094, 0xff00, 0x11f0, 0x2011, 0x1836, 0x2214, 0xd2ac,
++ 0x11c8, 0x81ff, 0x01e8, 0x2011, 0x181d, 0x2204, 0x9106, 0x1190,
++ 0x2011, 0x181e, 0x2214, 0x9294, 0xff00, 0x9584, 0xff00, 0x9206,
++ 0x1148, 0x2011, 0x181e, 0x2214, 0x9294, 0x00ff, 0x9584, 0x00ff,
++ 0x9206, 0x1120, 0x2500, 0x080c, 0x745f, 0x0048, 0x9584, 0x00ff,
++ 0x9080, 0x2e6e, 0x200d, 0x918c, 0xff00, 0x810f, 0x9006, 0x0005,
++ 0x9080, 0x2e6e, 0x200d, 0x918c, 0x00ff, 0x0005, 0x00d6, 0x2069,
++ 0x0140, 0x2001, 0x1816, 0x2003, 0x00ef, 0x20a9, 0x0010, 0x9006,
++ 0x6852, 0x6856, 0x1f04, 0x2441, 0x00de, 0x0005, 0x0006, 0x00d6,
++ 0x0026, 0x2069, 0x0140, 0x2001, 0x1816, 0x2102, 0x8114, 0x8214,
++ 0x8214, 0x8214, 0x20a9, 0x0010, 0x6853, 0x0000, 0x9006, 0x82ff,
++ 0x1128, 0x9184, 0x000f, 0x9080, 0xd10f, 0x2005, 0x6856, 0x8211,
++ 0x1f04, 0x2456, 0x002e, 0x00de, 0x000e, 0x0005, 0x00c6, 0x2061,
++ 0x1800, 0x6030, 0x0110, 0xc09d, 0x0008, 0xc09c, 0x6032, 0x00ce,
++ 0x0005, 0x0156, 0x00d6, 0x0026, 0x0016, 0x0006, 0x2069, 0x0140,
++ 0x6980, 0x9116, 0x0180, 0x9112, 0x1230, 0x8212, 0x8210, 0x22a8,
++ 0x2001, 0x0402, 0x0018, 0x22a8, 0x2001, 0x0404, 0x680e, 0x1f04,
++ 0x2486, 0x680f, 0x0000, 0x000e, 0x001e, 0x002e, 0x00de, 0x015e,
++ 0x0005, 0x080c, 0x4dea, 0xd0c4, 0x0150, 0xd0a4, 0x0140, 0x9006,
++ 0x0046, 0x2020, 0x2009, 0x002e, 0x080c, 0xc9c5, 0x004e, 0x0005,
++ 0x00f6, 0x0016, 0x0026, 0x2079, 0x0140, 0x78c4, 0xd0dc, 0x0904,
++ 0x24fd, 0x080c, 0x275c, 0x0660, 0x9084, 0x0700, 0x908e, 0x0600,
++ 0x1120, 0x2011, 0x4000, 0x900e, 0x0458, 0x908e, 0x0500, 0x1120,
++ 0x2011, 0x8000, 0x900e, 0x0420, 0x908e, 0x0400, 0x1120, 0x9016,
++ 0x2009, 0x0001, 0x00e8, 0x908e, 0x0300, 0x1120, 0x9016, 0x2009,
++ 0x0002, 0x00b0, 0x908e, 0x0200, 0x1120, 0x9016, 0x2009, 0x0004,
++ 0x0078, 0x908e, 0x0100, 0x1548, 0x9016, 0x2009, 0x0008, 0x0040,
++ 0x9084, 0x0700, 0x908e, 0x0300, 0x1500, 0x2011, 0x0030, 0x0058,
++ 0x2300, 0x9080, 0x0020, 0x2018, 0x080c, 0x7a4b, 0x928c, 0xff00,
++ 0x0110, 0x2011, 0x00ff, 0x2200, 0x8007, 0x9085, 0x004c, 0x78c2,
++ 0x2009, 0x0138, 0x220a, 0x080c, 0x6877, 0x1118, 0x2009, 0x193c,
++ 0x220a, 0x002e, 0x001e, 0x00fe, 0x0005, 0x78c3, 0x0000, 0x0cc8,
++ 0x0126, 0x2091, 0x2800, 0x0006, 0x0016, 0x0026, 0x2001, 0x0170,
++ 0x200c, 0x8000, 0x2014, 0x9184, 0x0003, 0x0110, 0x080c, 0x0d84,
++ 0x002e, 0x001e, 0x000e, 0x012e, 0x0005, 0x2001, 0x0171, 0x2004,
++ 0xd0dc, 0x0168, 0x2001, 0x0170, 0x200c, 0x918c, 0x00ff, 0x918e,
++ 0x004c, 0x1128, 0x200c, 0x918c, 0xff00, 0x810f, 0x0005, 0x900e,
++ 0x2001, 0x0227, 0x2004, 0x8007, 0x9084, 0x00ff, 0x8004, 0x9108,
++ 0x2001, 0x0226, 0x2004, 0x8007, 0x9084, 0x00ff, 0x8004, 0x9108,
++ 0x0005, 0x0018, 0x000c, 0x0018, 0x0020, 0x1000, 0x0800, 0x1000,
++ 0x1800, 0x0156, 0x0006, 0x0016, 0x0026, 0x00e6, 0x2001, 0x195d,
++ 0x2004, 0x908a, 0x0007, 0x1a0c, 0x0d84, 0x0033, 0x00ee, 0x002e,
++ 0x001e, 0x000e, 0x015e, 0x0005, 0x255b, 0x2579, 0x259d, 0x259f,
++ 0x25c8, 0x25ca, 0x25cc, 0x2001, 0x0001, 0x080c, 0x23a6, 0x080c,
++ 0x27b2, 0x2001, 0x195f, 0x2003, 0x0000, 0x7828, 0x9084, 0xe1d7,
++ 0x782a, 0x9006, 0x20a9, 0x0009, 0x080c, 0x2770, 0x2001, 0x195d,
++ 0x2003, 0x0006, 0x2009, 0x001e, 0x2011, 0x25cd, 0x080c, 0x78a5,
++ 0x0005, 0x2009, 0x1962, 0x200b, 0x0000, 0x2001, 0x1967, 0x2003,
++ 0x0036, 0x2001, 0x1966, 0x2003, 0x002a, 0x2001, 0x195f, 0x2003,
++ 0x0001, 0x9006, 0x080c, 0x272a, 0x2001, 0xffff, 0x20a9, 0x0009,
++ 0x080c, 0x2770, 0x2001, 0x195d, 0x2003, 0x0006, 0x2009, 0x001e,
++ 0x2011, 0x25cd, 0x080c, 0x78a5, 0x0005, 0x080c, 0x0d84, 0x2001,
++ 0x1967, 0x2003, 0x0036, 0x2001, 0x195f, 0x2003, 0x0003, 0x7a38,
++ 0x9294, 0x0005, 0x9296, 0x0004, 0x0110, 0x9006, 0x0010, 0x2001,
++ 0x0001, 0x080c, 0x272a, 0x2001, 0x1963, 0x2003, 0x0000, 0x2001,
++ 0xffff, 0x20a9, 0x0009, 0x080c, 0x2770, 0x2001, 0x195d, 0x2003,
++ 0x0006, 0x2009, 0x001e, 0x2011, 0x25cd, 0x080c, 0x78a5, 0x0005,
++ 0x080c, 0x0d84, 0x080c, 0x0d84, 0x0005, 0x0006, 0x0016, 0x0026,
++ 0x00e6, 0x00f6, 0x0156, 0x0126, 0x2091, 0x8000, 0x2079, 0x0100,
++ 0x2001, 0x195f, 0x2004, 0x908a, 0x0007, 0x1a0c, 0x0d84, 0x0043,
++ 0x012e, 0x015e, 0x00fe, 0x00ee, 0x002e, 0x001e, 0x000e, 0x0005,
++ 0x25ef, 0x260f, 0x264f, 0x267f, 0x26a3, 0x26b3, 0x26b5, 0x080c,
++ 0x2764, 0x11b0, 0x7850, 0x9084, 0xefff, 0x7852, 0x2009, 0x1965,
++ 0x2104, 0x7a38, 0x9294, 0x0005, 0x9296, 0x0004, 0x0110, 0xc08d,
++ 0x0008, 0xc085, 0x200a, 0x2001, 0x195d, 0x2003, 0x0001, 0x0030,
++ 0x080c, 0x26d9, 0x2001, 0xffff, 0x080c, 0x256a, 0x0005, 0x080c,
++ 0x26b7, 0x05e0, 0x2009, 0x1966, 0x2104, 0x8001, 0x200a, 0x080c,
++ 0x2764, 0x1178, 0x7850, 0x9084, 0xefff, 0x7852, 0x7a38, 0x9294,
++ 0x0005, 0x9296, 0x0005, 0x0518, 0x2009, 0x1965, 0x2104, 0xc085,
++ 0x200a, 0x2009, 0x1962, 0x2104, 0x8000, 0x200a, 0x9086, 0x0005,
++ 0x0118, 0x080c, 0x26bf, 0x00c0, 0x200b, 0x0000, 0x7a38, 0x9294,
++ 0x0006, 0x9296, 0x0004, 0x0110, 0x9006, 0x0010, 0x2001, 0x0001,
++ 0x080c, 0x2747, 0x2001, 0x195f, 0x2003, 0x0002, 0x0028, 0x2001,
++ 0x195d, 0x2003, 0x0003, 0x0010, 0x080c, 0x258c, 0x0005, 0x080c,
++ 0x26b7, 0x0560, 0x2009, 0x1966, 0x2104, 0x8001, 0x200a, 0x080c,
++ 0x2764, 0x1168, 0x7850, 0x9084, 0xefff, 0x7852, 0x2001, 0x195d,
++ 0x2003, 0x0003, 0x2001, 0x195e, 0x2003, 0x0000, 0x00b8, 0x2009,
++ 0x1966, 0x2104, 0x9005, 0x1118, 0x080c, 0x26fc, 0x0010, 0x080c,
++ 0x26cc, 0x080c, 0x26bf, 0x2009, 0x1962, 0x200b, 0x0000, 0x2001,
++ 0x195f, 0x2003, 0x0001, 0x080c, 0x258c, 0x0000, 0x0005, 0x04b9,
++ 0x0508, 0x080c, 0x2764, 0x11b8, 0x7850, 0x9084, 0xefff, 0x7852,
++ 0x2009, 0x1963, 0x2104, 0x8000, 0x200a, 0x9086, 0x0007, 0x0108,
++ 0x0078, 0x2001, 0x1968, 0x2003, 0x000a, 0x2009, 0x1965, 0x2104,
++ 0xc0fd, 0x200a, 0x0038, 0x0419, 0x2001, 0x195f, 0x2003, 0x0004,
++ 0x080c, 0x25b7, 0x0005, 0x0099, 0x0168, 0x080c, 0x2764, 0x1138,
++ 0x7850, 0x9084, 0xefff, 0x7852, 0x080c, 0x25a3, 0x0018, 0x0079,
++ 0x080c, 0x25b7, 0x0005, 0x080c, 0x0d84, 0x080c, 0x0d84, 0x2009,
++ 0x1967, 0x2104, 0x8001, 0x200a, 0x090c, 0x2718, 0x0005, 0x7a38,
++ 0x9294, 0x0005, 0x9296, 0x0005, 0x0110, 0x9006, 0x0010, 0x2001,
++ 0x0001, 0x080c, 0x2747, 0x0005, 0x7a38, 0x9294, 0x0006, 0x9296,
++ 0x0006, 0x0110, 0x9006, 0x0010, 0x2001, 0x0001, 0x080c, 0x272a,
++ 0x0005, 0x2009, 0x1962, 0x2104, 0x8000, 0x200a, 0x9086, 0x0005,
++ 0x0108, 0x0068, 0x200b, 0x0000, 0x7a38, 0x9294, 0x0006, 0x9296,
++ 0x0006, 0x0110, 0x9006, 0x0010, 0x2001, 0x0001, 0x04d9, 0x7a38,
++ 0x9294, 0x0005, 0x9296, 0x0005, 0x0110, 0x9006, 0x0010, 0x2001,
++ 0x0001, 0x080c, 0x2747, 0x0005, 0x0086, 0x2001, 0x1965, 0x2004,
++ 0x9084, 0x7fff, 0x090c, 0x0d84, 0x2009, 0x1964, 0x2144, 0x8846,
++ 0x280a, 0x9844, 0x0dd8, 0xd08c, 0x1120, 0xd084, 0x1120, 0x080c,
++ 0x0d84, 0x9006, 0x0010, 0x2001, 0x0001, 0x00a1, 0x008e, 0x0005,
++ 0x0006, 0x0156, 0x2001, 0x195d, 0x20a9, 0x0009, 0x2003, 0x0000,
++ 0x8000, 0x1f04, 0x271e, 0x2001, 0x1964, 0x2003, 0x8000, 0x015e,
++ 0x000e, 0x0005, 0x00f6, 0x2079, 0x0100, 0x9085, 0x0000, 0x0158,
++ 0x7838, 0x9084, 0xfff9, 0x9085, 0x0004, 0x783a, 0x2009, 0x196a,
++ 0x210c, 0x795a, 0x0050, 0x7838, 0x9084, 0xfffb, 0x9085, 0x0006,
++ 0x783a, 0x2009, 0x196b, 0x210c, 0x795a, 0x00fe, 0x0005, 0x00f6,
++ 0x2079, 0x0100, 0x9085, 0x0000, 0x0138, 0x7838, 0x9084, 0xfffa,
++ 0x9085, 0x0004, 0x783a, 0x0030, 0x7838, 0x9084, 0xfffb, 0x9085,
++ 0x0005, 0x783a, 0x00fe, 0x0005, 0x0006, 0x2001, 0x0100, 0x2004,
++ 0x9082, 0x0007, 0x000e, 0x0005, 0x0156, 0x20a9, 0x0064, 0x7820,
++ 0x080c, 0x27ef, 0xd09c, 0x1110, 0x1f04, 0x2767, 0x015e, 0x0005,
++ 0x0126, 0x0016, 0x0006, 0x2091, 0x8000, 0x7850, 0x9085, 0x0040,
++ 0x7852, 0x7850, 0x9084, 0xfbcf, 0x7852, 0x080c, 0x27ef, 0x9085,
++ 0x2000, 0x7852, 0x000e, 0x2008, 0x9186, 0x0000, 0x1118, 0x783b,
++ 0x0007, 0x0090, 0x9186, 0x0001, 0x1118, 0x783b, 0x0006, 0x0060,
++ 0x9186, 0x0002, 0x1118, 0x783b, 0x0005, 0x0030, 0x9186, 0x0003,
++ 0x1118, 0x783b, 0x0004, 0x0000, 0x0006, 0x1d04, 0x279d, 0x080c,
++ 0x78c7, 0x1f04, 0x279d, 0x7850, 0x9085, 0x0400, 0x9084, 0xdfbf,
++ 0x7852, 0x080c, 0x27ef, 0x9085, 0x1000, 0x7852, 0x000e, 0x001e,
++ 0x012e, 0x0005, 0x7850, 0x9084, 0xffcf, 0x7852, 0x0005, 0x0006,
++ 0x0156, 0x00f6, 0x2079, 0x0100, 0x20a9, 0x000a, 0x7854, 0xd0ac,
++ 0x1130, 0x7820, 0xd0e4, 0x1140, 0x1f04, 0x27c1, 0x0028, 0x7854,
++ 0xd08c, 0x1110, 0x1f04, 0x27c7, 0x00fe, 0x015e, 0x000e, 0x0005,
++ 0x1d04, 0x27d0, 0x080c, 0x78c7, 0x1f04, 0x27d0, 0x0005, 0x0006,
++ 0x2001, 0x1969, 0x2004, 0x9086, 0x0000, 0x000e, 0x0005, 0x0006,
++ 0x2001, 0x1969, 0x2004, 0x9086, 0x0001, 0x000e, 0x0005, 0x0006,
++ 0x2001, 0x1969, 0x2004, 0x9086, 0x0002, 0x000e, 0x0005, 0xa001,
++ 0xa001, 0xa001, 0xa001, 0xa001, 0x0005, 0x0006, 0x2001, 0x1975,
++ 0x2102, 0x000e, 0x0005, 0x2009, 0x0171, 0x2104, 0xd0dc, 0x0140,
++ 0x2009, 0x0170, 0x2104, 0x200b, 0x0080, 0xa001, 0xa001, 0x200a,
++ 0x0005, 0x0036, 0x0046, 0x2001, 0x0141, 0x200c, 0x918c, 0xff00,
++ 0x9186, 0x2000, 0x0118, 0x9186, 0x0100, 0x1580, 0x2009, 0x017f,
++ 0x200b, 0x00a2, 0x2019, 0x0160, 0x2324, 0x2011, 0x0003, 0x2009,
++ 0x0169, 0x2104, 0xa001, 0x210c, 0x910e, 0x1dc8, 0x9084, 0x0007,
++ 0x9086, 0x0003, 0x11b8, 0x2304, 0x9402, 0x02a0, 0x1d68, 0x8211,
++ 0x1d70, 0x84ff, 0x0170, 0x2001, 0x0141, 0x200c, 0x918c, 0xff00,
++ 0x9186, 0x0100, 0x0130, 0x2009, 0x180c, 0x2104, 0xc0dd, 0x200a,
++ 0x0008, 0x0419, 0x2001, 0x017f, 0x2003, 0x0000, 0x004e, 0x003e,
++ 0x0005, 0x2001, 0x180c, 0x2004, 0xd0dc, 0x01b0, 0x2001, 0x0160,
++ 0x2004, 0x9005, 0x0140, 0x2001, 0x0141, 0x2004, 0x9084, 0xff00,
++ 0x9086, 0x0100, 0x1148, 0x0126, 0x2091, 0x8000, 0x0016, 0x0026,
++ 0x0021, 0x002e, 0x001e, 0x012e, 0x0005, 0x00c6, 0x2061, 0x0100,
++ 0x6014, 0x0006, 0x2001, 0x0161, 0x2003, 0x0000, 0x6017, 0x0018,
++ 0xa001, 0xa001, 0x602f, 0x0008, 0x6104, 0x918e, 0x0010, 0x6106,
++ 0x918e, 0x0010, 0x6106, 0x6017, 0x0040, 0x2001, 0x1000, 0x0429,
++ 0x9006, 0x0419, 0x001e, 0x9184, 0x0003, 0x01c0, 0x0036, 0x2019,
++ 0x0141, 0x2304, 0x9084, 0xff00, 0x9086, 0x0800, 0x1dd0, 0x919c,
++ 0xffe4, 0x9184, 0x0001, 0x0118, 0x9385, 0x0009, 0x6016, 0x9184,
++ 0x0002, 0x0118, 0x9385, 0x0012, 0x6016, 0x003e, 0x2001, 0x180c,
++ 0x200c, 0xc1dc, 0x2102, 0x00ce, 0x0005, 0x0016, 0x0026, 0x2009,
++ 0x0140, 0x2114, 0x9294, 0x0001, 0x9215, 0x220a, 0x002e, 0x001e,
++ 0x0005, 0x2b1d, 0x2b1d, 0x2941, 0x2941, 0x294d, 0x294d, 0x2959,
++ 0x2959, 0x2967, 0x2967, 0x2973, 0x2973, 0x2981, 0x2981, 0x298f,
++ 0x298f, 0x29a1, 0x29a1, 0x29ad, 0x29ad, 0x29bb, 0x29bb, 0x29d9,
++ 0x29d9, 0x29f9, 0x29f9, 0x29c9, 0x29c9, 0x29e9, 0x29e9, 0x2a07,
++ 0x2a07, 0x299f, 0x299f, 0x299f, 0x299f, 0x299f, 0x299f, 0x299f,
++ 0x299f, 0x299f, 0x299f, 0x299f, 0x299f, 0x299f, 0x299f, 0x299f,
++ 0x299f, 0x299f, 0x299f, 0x299f, 0x299f, 0x299f, 0x299f, 0x299f,
++ 0x299f, 0x299f, 0x299f, 0x299f, 0x299f, 0x299f, 0x299f, 0x299f,
++ 0x299f, 0x2a19, 0x2a19, 0x2a25, 0x2a25, 0x2a33, 0x2a33, 0x2a41,
++ 0x2a41, 0x2a51, 0x2a51, 0x2a5f, 0x2a5f, 0x2a6f, 0x2a6f, 0x2a7f,
++ 0x2a7f, 0x2a91, 0x2a91, 0x2a9f, 0x2a9f, 0x2aaf, 0x2aaf, 0x2ad1,
++ 0x2ad1, 0x2af3, 0x2af3, 0x2abf, 0x2abf, 0x2ae2, 0x2ae2, 0x2b02,
++ 0x2b02, 0x299f, 0x299f, 0x299f, 0x299f, 0x299f, 0x299f, 0x299f,
++ 0x299f, 0x299f, 0x299f, 0x299f, 0x299f, 0x299f, 0x299f, 0x299f,
++ 0x299f, 0x299f, 0x299f, 0x299f, 0x299f, 0x299f, 0x299f, 0x299f,
++ 0x299f, 0x299f, 0x299f, 0x299f, 0x299f, 0x299f, 0x299f, 0x299f,
++ 0x299f, 0x299f, 0x299f, 0x299f, 0x299f, 0x299f, 0x299f, 0x299f,
++ 0x299f, 0x299f, 0x299f, 0x299f, 0x299f, 0x299f, 0x299f, 0x299f,
++ 0x299f, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146,
++ 0x0156, 0x080c, 0x20bf, 0x0804, 0x2b15, 0x0106, 0x0006, 0x0126,
++ 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x1eda, 0x0804,
++ 0x2b15, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146,
++ 0x0156, 0x080c, 0x1eda, 0x080c, 0x20bf, 0x0804, 0x2b15, 0x0106,
++ 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c,
++ 0x1f12, 0x0804, 0x2b15, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6,
++ 0x0136, 0x0146, 0x0156, 0x080c, 0x20bf, 0x080c, 0x1f12, 0x0804,
++ 0x2b15, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146,
++ 0x0156, 0x080c, 0x1eda, 0x080c, 0x1f12, 0x0804, 0x2b15, 0x0106,
++ 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c,
++ 0x1eda, 0x080c, 0x20bf, 0x080c, 0x1f12, 0x0804, 0x2b15, 0xa001,
++ 0x0cf0, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146,
++ 0x0156, 0x080c, 0x129f, 0x0804, 0x2b15, 0x0106, 0x0006, 0x0126,
++ 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x20bf, 0x080c,
++ 0x129f, 0x0804, 0x2b15, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6,
++ 0x0136, 0x0146, 0x0156, 0x080c, 0x1eda, 0x080c, 0x129f, 0x0804,
++ 0x2b15, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146,
++ 0x0156, 0x080c, 0x20bf, 0x080c, 0x129f, 0x080c, 0x1f12, 0x0804,
++ 0x2b15, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146,
++ 0x0156, 0x080c, 0x1eda, 0x080c, 0x20bf, 0x080c, 0x129f, 0x0804,
++ 0x2b15, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146,
++ 0x0156, 0x080c, 0x1eda, 0x080c, 0x129f, 0x080c, 0x1f12, 0x0804,
++ 0x2b15, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146,
++ 0x0156, 0x080c, 0x129f, 0x080c, 0x1f12, 0x0804, 0x2b15, 0x0106,
++ 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c,
++ 0x1eda, 0x080c, 0x20bf, 0x080c, 0x129f, 0x080c, 0x1f12, 0x0804,
++ 0x2b15, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146,
++ 0x0156, 0x080c, 0x2500, 0x0804, 0x2b15, 0x0106, 0x0006, 0x0126,
++ 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x2500, 0x080c,
++ 0x20bf, 0x0804, 0x2b15, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6,
++ 0x0136, 0x0146, 0x0156, 0x080c, 0x2500, 0x080c, 0x1eda, 0x0804,
++ 0x2b15, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146,
++ 0x0156, 0x080c, 0x2500, 0x080c, 0x1eda, 0x080c, 0x20bf, 0x0804,
++ 0x2b15, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146,
++ 0x0156, 0x080c, 0x2500, 0x080c, 0x1f12, 0x0804, 0x2b15, 0x0106,
++ 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c,
++ 0x2500, 0x080c, 0x20bf, 0x080c, 0x1f12, 0x0804, 0x2b15, 0x0106,
++ 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c,
++ 0x2500, 0x080c, 0x1eda, 0x080c, 0x1f12, 0x0804, 0x2b15, 0x0106,
++ 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c,
++ 0x2500, 0x080c, 0x1eda, 0x080c, 0x20bf, 0x080c, 0x1f12, 0x0804,
++ 0x2b15, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146,
++ 0x0156, 0x080c, 0x2500, 0x080c, 0x129f, 0x0804, 0x2b15, 0x0106,
++ 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c,
++ 0x2500, 0x080c, 0x20bf, 0x080c, 0x129f, 0x0804, 0x2b15, 0x0106,
++ 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c,
++ 0x2500, 0x080c, 0x1eda, 0x080c, 0x129f, 0x0804, 0x2b15, 0x0106,
++ 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c,
++ 0x2500, 0x080c, 0x20bf, 0x080c, 0x129f, 0x080c, 0x1f12, 0x0804,
++ 0x2b15, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146,
++ 0x0156, 0x080c, 0x2500, 0x080c, 0x1eda, 0x080c, 0x20bf, 0x080c,
++ 0x129f, 0x0498, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136,
++ 0x0146, 0x0156, 0x080c, 0x2500, 0x080c, 0x1eda, 0x080c, 0x129f,
++ 0x080c, 0x1f12, 0x0410, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6,
++ 0x0136, 0x0146, 0x0156, 0x080c, 0x2500, 0x080c, 0x129f, 0x080c,
++ 0x1f12, 0x0098, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136,
++ 0x0146, 0x0156, 0x080c, 0x2500, 0x080c, 0x1eda, 0x080c, 0x20bf,
++ 0x080c, 0x129f, 0x080c, 0x1f12, 0x0000, 0x015e, 0x014e, 0x013e,
++ 0x01de, 0x01ce, 0x012e, 0x000e, 0x010e, 0x000d, 0x00b6, 0x00c6,
++ 0x0026, 0x0046, 0x9026, 0x080c, 0x5eeb, 0x1904, 0x2c03, 0x72d8,
++ 0x2001, 0x194b, 0x2004, 0x9005, 0x1110, 0xd29c, 0x0148, 0xd284,
++ 0x1138, 0xd2bc, 0x1904, 0x2c03, 0x080c, 0x2c08, 0x0804, 0x2c03,
++ 0xd2cc, 0x1904, 0x2c03, 0x080c, 0x6877, 0x1120, 0x70a7, 0xffff,
++ 0x0804, 0x2c03, 0xd294, 0x0120, 0x70a7, 0xffff, 0x0804, 0x2c03,
++ 0x080c, 0x2e64, 0x0140, 0x080c, 0xb759, 0x1904, 0x2ba4, 0x70a7,
++ 0xffff, 0x0804, 0x2c03, 0x2001, 0x1816, 0x203c, 0x728c, 0xd284,
++ 0x0904, 0x2ba4, 0xd28c, 0x1904, 0x2ba4, 0x0036, 0x73a4, 0x938e,
++ 0xffff, 0x1110, 0x2019, 0x0001, 0x8314, 0x92e0, 0x1c80, 0x2c04,
++ 0x938c, 0x0001, 0x0120, 0x9084, 0xff00, 0x8007, 0x0010, 0x9084,
++ 0x00ff, 0x970e, 0x0540, 0x908e, 0x0000, 0x0528, 0x908e, 0x00ff,
++ 0x1150, 0x7230, 0xd284, 0x1518, 0x728c, 0xc28d, 0x728e, 0x70a7,
++ 0xffff, 0x003e, 0x0408, 0x900e, 0x080c, 0x23fd, 0x080c, 0x5bb0,
++ 0x11a0, 0x080c, 0x5f2d, 0x1150, 0x7030, 0xd08c, 0x0118, 0xb800,
++ 0xd0bc, 0x0120, 0x080c, 0x2c1f, 0x0140, 0x0028, 0x080c, 0x2d5b,
++ 0x080c, 0x2c4b, 0x0110, 0x8318, 0x0838, 0x73a6, 0x0010, 0x70a7,
++ 0xffff, 0x003e, 0x0804, 0x2c03, 0x9780, 0x2e6e, 0x203d, 0x97bc,
++ 0xff00, 0x873f, 0x2041, 0x007e, 0x70a4, 0x9096, 0xffff, 0x1118,
++ 0x900e, 0x28a8, 0x0050, 0x9812, 0x0220, 0x2008, 0x9802, 0x20a8,
++ 0x0020, 0x70a7, 0xffff, 0x0804, 0x2c03, 0x2700, 0x0156, 0x0016,
++ 0x9106, 0x05b0, 0xc484, 0x080c, 0x5c0d, 0x0138, 0x080c, 0xb759,
++ 0x1578, 0x080c, 0x5bb0, 0x15a0, 0x0008, 0xc485, 0x080c, 0x5f2d,
++ 0x1130, 0x7030, 0xd08c, 0x01f8, 0xb800, 0xd0bc, 0x11e0, 0x728c,
++ 0xd28c, 0x0180, 0x080c, 0x5f2d, 0x9082, 0x0006, 0x02c8, 0xd484,
++ 0x1118, 0x080c, 0x5bd1, 0x0028, 0x080c, 0x2de6, 0x0188, 0x080c,
++ 0x2e11, 0x0070, 0x080c, 0x2d5b, 0x080c, 0xb759, 0x1148, 0x080c,
++ 0x2c4b, 0x0170, 0x0028, 0x080c, 0x2de6, 0x0110, 0x0441, 0x0140,
++ 0x001e, 0x8108, 0x015e, 0x1f04, 0x2bbd, 0x70a7, 0xffff, 0x0018,
++ 0x001e, 0x015e, 0x71a6, 0x004e, 0x002e, 0x00ce, 0x00be, 0x0005,
++ 0x00c6, 0x0016, 0x70a7, 0x0001, 0x2009, 0x007e, 0x080c, 0x5bb0,
++ 0x1158, 0xb813, 0x00ff, 0xb817, 0xfffe, 0x080c, 0x2d5b, 0x0499,
++ 0x0118, 0x70d8, 0xc0bd, 0x70da, 0x001e, 0x00ce, 0x0005, 0x0016,
++ 0x0076, 0x00d6, 0x00c6, 0x2001, 0x1857, 0x2004, 0x9084, 0x00ff,
++ 0xb842, 0x080c, 0x95a1, 0x01d0, 0x2b00, 0x6012, 0x080c, 0xb4e6,
++ 0x6023, 0x0001, 0x9006, 0x080c, 0x5b4d, 0x2001, 0x0000, 0x080c,
++ 0x5b61, 0x0126, 0x2091, 0x8000, 0x70a0, 0x8000, 0x70a2, 0x012e,
++ 0x2009, 0x0004, 0x080c, 0x95ce, 0x9085, 0x0001, 0x00ce, 0x00de,
++ 0x007e, 0x001e, 0x0005, 0x0016, 0x0076, 0x00d6, 0x00c6, 0x2001,
++ 0x1857, 0x2004, 0x9084, 0x00ff, 0xb842, 0x080c, 0x95a1, 0x0548,
++ 0x2b00, 0x6012, 0xb800, 0xc0c4, 0xb802, 0xb8a0, 0x9086, 0x007e,
++ 0x0140, 0xb804, 0x9084, 0x00ff, 0x9086, 0x0006, 0x1110, 0x080c,
++ 0x2d1a, 0x080c, 0xb4e6, 0x6023, 0x0001, 0x9006, 0x080c, 0x5b4d,
++ 0x2001, 0x0002, 0x080c, 0x5b61, 0x0126, 0x2091, 0x8000, 0x70a0,
++ 0x8000, 0x70a2, 0x012e, 0x2009, 0x0002, 0x080c, 0x95ce, 0x9085,
++ 0x0001, 0x00ce, 0x00de, 0x007e, 0x001e, 0x0005, 0x00b6, 0x00c6,
++ 0x0026, 0x2009, 0x0080, 0x080c, 0x5bb0, 0x1140, 0xb813, 0x00ff,
++ 0xb817, 0xfffc, 0x0039, 0x0110, 0x70df, 0xffff, 0x002e, 0x00ce,
++ 0x00be, 0x0005, 0x0016, 0x0076, 0x00d6, 0x00c6, 0x080c, 0x94fe,
++ 0x01d0, 0x2b00, 0x6012, 0x080c, 0xb4e6, 0x6023, 0x0001, 0x9006,
++ 0x080c, 0x5b4d, 0x2001, 0x0002, 0x080c, 0x5b61, 0x0126, 0x2091,
++ 0x8000, 0x70e0, 0x8000, 0x70e2, 0x012e, 0x2009, 0x0002, 0x080c,
++ 0x95ce, 0x9085, 0x0001, 0x00ce, 0x00de, 0x007e, 0x001e, 0x0005,
++ 0x00c6, 0x00d6, 0x0126, 0x2091, 0x8000, 0x2009, 0x007f, 0x080c,
++ 0x5bb0, 0x11b8, 0xb813, 0x00ff, 0xb817, 0xfffd, 0xb8bf, 0x0004,
++ 0x080c, 0x94fe, 0x0170, 0x2b00, 0x6012, 0x6316, 0x6023, 0x0001,
++ 0x620a, 0x080c, 0xb4e6, 0x2009, 0x0022, 0x080c, 0x95ce, 0x9085,
++ 0x0001, 0x012e, 0x00de, 0x00ce, 0x0005, 0x00e6, 0x00c6, 0x0066,
++ 0x0036, 0x0026, 0x00b6, 0x21f0, 0x080c, 0x7d60, 0x080c, 0x7cef,
++ 0x080c, 0x93ac, 0x080c, 0xa3ab, 0x3e08, 0x2130, 0x81ff, 0x0120,
++ 0x20a9, 0x007e, 0x900e, 0x0018, 0x20a9, 0x007f, 0x900e, 0x0016,
++ 0x080c, 0x5c0d, 0x1140, 0x9686, 0x0002, 0x1118, 0xb800, 0xd0bc,
++ 0x1110, 0x080c, 0x56f3, 0x001e, 0x8108, 0x1f04, 0x2cff, 0x86ff,
++ 0x1110, 0x080c, 0x2e3e, 0x00be, 0x002e, 0x003e, 0x006e, 0x00ce,
++ 0x00ee, 0x0005, 0x00e6, 0x00c6, 0x0036, 0x0026, 0x0016, 0x00b6,
++ 0x6210, 0x2258, 0xbaa0, 0x0026, 0x2019, 0x0029, 0x080c, 0x7d55,
++ 0x0076, 0x2039, 0x0000, 0x080c, 0x7c4d, 0x2c08, 0x080c, 0xc73e,
++ 0x007e, 0x001e, 0xba10, 0xbb14, 0x080c, 0x56f3, 0xba12, 0xbb16,
++ 0x00be, 0x001e, 0x002e, 0x003e, 0x00ce, 0x00ee, 0x0005, 0x00e6,
++ 0x0006, 0x00b6, 0x6010, 0x2058, 0xb8a0, 0x00be, 0x9086, 0x0080,
++ 0x0150, 0x2071, 0x1800, 0x70a0, 0x9005, 0x0110, 0x8001, 0x70a2,
++ 0x000e, 0x00ee, 0x0005, 0x2071, 0x1800, 0x70e0, 0x9005, 0x0dc0,
++ 0x8001, 0x70e2, 0x0ca8, 0xb800, 0xc08c, 0xb802, 0x0005, 0x00f6,
++ 0x00e6, 0x00c6, 0x0036, 0x0026, 0x0016, 0x0156, 0x2178, 0x81ff,
++ 0x1118, 0x20a9, 0x0001, 0x0088, 0x080c, 0x4dea, 0xd0c4, 0x0150,
++ 0xd0a4, 0x0140, 0x9006, 0x0046, 0x2020, 0x2009, 0x002d, 0x080c,
++ 0xc9c5, 0x004e, 0x20a9, 0x0800, 0x9016, 0x0026, 0x928e, 0x007e,
++ 0x0904, 0x2dc7, 0x928e, 0x007f, 0x0904, 0x2dc7, 0x928e, 0x0080,
++ 0x05f0, 0x9288, 0x1000, 0x210c, 0x81ff, 0x05c8, 0x8fff, 0x1148,
++ 0x2001, 0x195b, 0x0006, 0x2003, 0x0001, 0x04e9, 0x000e, 0x2003,
++ 0x0000, 0x00b6, 0x00c6, 0x2158, 0x2001, 0x0001, 0x080c, 0x5ef7,
++ 0x00ce, 0x00be, 0x2019, 0x0029, 0x080c, 0x7d55, 0x0076, 0x2039,
++ 0x0000, 0x080c, 0x7c4d, 0x00b6, 0x00c6, 0x0026, 0x2158, 0xba04,
++ 0x9294, 0x00ff, 0x9286, 0x0006, 0x1118, 0xb807, 0x0404, 0x0028,
++ 0x2001, 0x0004, 0x8007, 0x9215, 0xba06, 0x002e, 0x00ce, 0x00be,
++ 0x0016, 0x2c08, 0x080c, 0xc73e, 0x001e, 0x007e, 0x2160, 0x002e,
++ 0x8210, 0x1f04, 0x2d7d, 0x015e, 0x001e, 0x002e, 0x003e, 0x00ce,
++ 0x00ee, 0x00fe, 0x0005, 0x0046, 0x0026, 0x0016, 0x080c, 0x4dea,
++ 0xd0c4, 0x0140, 0xd0a4, 0x0130, 0x9006, 0x2220, 0x2009, 0x0029,
++ 0x080c, 0xc9c5, 0x001e, 0x002e, 0x004e, 0x0005, 0x0016, 0x0026,
++ 0x0036, 0x00c6, 0x728c, 0x82ff, 0x01e8, 0x080c, 0x5f25, 0x11d0,
++ 0x2100, 0x080c, 0x2430, 0x81ff, 0x01b8, 0x2019, 0x0001, 0x8314,
++ 0x92e0, 0x1c80, 0x2c04, 0xd384, 0x0120, 0x9084, 0xff00, 0x8007,
++ 0x0010, 0x9084, 0x00ff, 0x9116, 0x0138, 0x9096, 0x00ff, 0x0110,
++ 0x8318, 0x0c68, 0x9085, 0x0001, 0x00ce, 0x003e, 0x002e, 0x001e,
++ 0x0005, 0x0016, 0x00c6, 0x0126, 0x2091, 0x8000, 0x0036, 0x2019,
++ 0x0029, 0x00a9, 0x003e, 0x9180, 0x1000, 0x2004, 0x9065, 0x0158,
++ 0x0016, 0x00c6, 0x2061, 0x1a72, 0x001e, 0x6112, 0x080c, 0x2d1a,
++ 0x001e, 0x080c, 0x5bd1, 0x012e, 0x00ce, 0x001e, 0x0005, 0x0016,
++ 0x0026, 0x2110, 0x080c, 0x905b, 0x080c, 0xcc7a, 0x002e, 0x001e,
++ 0x0005, 0x2001, 0x1836, 0x2004, 0xd0cc, 0x0005, 0x00c6, 0x080c,
++ 0x6877, 0x1118, 0x20a9, 0x0800, 0x0010, 0x20a9, 0x0782, 0x080c,
++ 0x6877, 0x1110, 0x900e, 0x0010, 0x2009, 0x007e, 0x9180, 0x1000,
++ 0x2004, 0x9065, 0x0110, 0x080c, 0x5bd1, 0x8108, 0x1f04, 0x2e4e,
++ 0x2061, 0x1800, 0x6077, 0x0000, 0x6078, 0x9084, 0x00ff, 0x607a,
++ 0x60ab, 0x0000, 0x00ce, 0x0005, 0x2001, 0x1874, 0x2004, 0xd0bc,
++ 0x0005, 0x2011, 0x1853, 0x2214, 0xd2ec, 0x0005, 0x7eef, 0x7de8,
++ 0x7ce4, 0x80e2, 0x7be1, 0x80e0, 0x80dc, 0x80da, 0x7ad9, 0x80d6,
++ 0x80d5, 0x80d4, 0x80d3, 0x80d2, 0x80d1, 0x79ce, 0x78cd, 0x80cc,
++ 0x80cb, 0x80ca, 0x80c9, 0x80c7, 0x80c6, 0x77c5, 0x76c3, 0x80bc,
++ 0x80ba, 0x75b9, 0x80b6, 0x74b5, 0x73b4, 0x72b3, 0x80b2, 0x80b1,
++ 0x80ae, 0x71ad, 0x80ac, 0x70ab, 0x6faa, 0x6ea9, 0x80a7, 0x6da6,
++ 0x6ca5, 0x6ba3, 0x6a9f, 0x699e, 0x689d, 0x809b, 0x8098, 0x6797,
++ 0x6690, 0x658f, 0x6488, 0x6384, 0x6282, 0x8081, 0x8080, 0x617c,
++ 0x607a, 0x8079, 0x5f76, 0x8075, 0x8074, 0x8073, 0x8072, 0x8071,
++ 0x806e, 0x5e6d, 0x806c, 0x5d6b, 0x5c6a, 0x5b69, 0x8067, 0x5a66,
++ 0x5965, 0x5863, 0x575c, 0x565a, 0x5559, 0x8056, 0x8055, 0x5454,
++ 0x5353, 0x5252, 0x5151, 0x504e, 0x4f4d, 0x804c, 0x804b, 0x4e4a,
++ 0x4d49, 0x8047, 0x4c46, 0x8045, 0x8043, 0x803c, 0x803a, 0x8039,
++ 0x8036, 0x4b35, 0x8034, 0x4a33, 0x4932, 0x4831, 0x802e, 0x472d,
++ 0x462c, 0x452b, 0x442a, 0x4329, 0x4227, 0x8026, 0x8025, 0x4123,
++ 0x401f, 0x3f1e, 0x3e1d, 0x3d1b, 0x3c18, 0x8017, 0x8010, 0x3b0f,
++ 0x3a08, 0x8004, 0x3902, 0x8001, 0x8000, 0x8000, 0x3800, 0x3700,
++ 0x3600, 0x8000, 0x3500, 0x8000, 0x8000, 0x8000, 0x3400, 0x8000,
++ 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x3300, 0x3200, 0x8000,
++ 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x3100, 0x3000, 0x8000,
++ 0x8000, 0x2f00, 0x8000, 0x2e00, 0x2d00, 0x2c00, 0x8000, 0x8000,
++ 0x8000, 0x2b00, 0x8000, 0x2a00, 0x2900, 0x2800, 0x8000, 0x2700,
++ 0x2600, 0x2500, 0x2400, 0x2300, 0x2200, 0x8000, 0x8000, 0x2100,
++ 0x2000, 0x1f00, 0x1e00, 0x1d00, 0x1c00, 0x8000, 0x8000, 0x1b00,
++ 0x1a00, 0x8000, 0x1900, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000,
++ 0x8000, 0x1800, 0x8000, 0x1700, 0x1600, 0x1500, 0x8000, 0x1400,
++ 0x1300, 0x1200, 0x1100, 0x1000, 0x0f00, 0x8000, 0x8000, 0x0e00,
++ 0x0d00, 0x0c00, 0x0b00, 0x0a00, 0x0900, 0x8000, 0x8000, 0x0800,
++ 0x0700, 0x8000, 0x0600, 0x8000, 0x8000, 0x8000, 0x0500, 0x0400,
++ 0x0300, 0x8000, 0x0200, 0x8000, 0x8000, 0x8000, 0x0100, 0x8000,
++ 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x0000, 0x8000, 0x8000,
++ 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000,
++ 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x2071, 0x1893,
++ 0x7003, 0x0002, 0x9006, 0x7012, 0x7016, 0x7046, 0x704a, 0x7037,
++ 0x18ae, 0x703b, 0x18ae, 0x7007, 0x0001, 0x080c, 0x0fc7, 0x090c,
++ 0x0d84, 0x2900, 0x7066, 0xa867, 0x0002, 0xa8ab, 0xdcb0, 0x080c,
++ 0x0fc7, 0x090c, 0x0d84, 0x2900, 0x706a, 0xa867, 0x0002, 0xa8ab,
++ 0xdcb0, 0x0005, 0x2071, 0x1893, 0x7004, 0x0002, 0x2f9a, 0x2f9b,
++ 0x2fa3, 0x2fb7, 0x0005, 0x1004, 0x2fa2, 0x0e04, 0x2fa2, 0x2079,
++ 0x0000, 0x0458, 0x0005, 0x2079, 0x0000, 0x2061, 0x18ac, 0x2c4c,
++ 0xa86c, 0x908e, 0x0100, 0x0128, 0x9086, 0x0200, 0x0904, 0x3089,
++ 0x0005, 0x7014, 0x2048, 0x2061, 0x1800, 0x7018, 0x0807, 0x7010,
++ 0x2048, 0xa864, 0x9094, 0x00ff, 0x9296, 0x0029, 0x1120, 0xaa78,
++ 0xd2fc, 0x0128, 0x0005, 0x9086, 0x0103, 0x0108, 0x0005, 0x2079,
++ 0x0000, 0x2061, 0x1800, 0x7018, 0x0807, 0x2061, 0x1800, 0x7880,
++ 0x908a, 0x0040, 0x1210, 0x61cc, 0x0042, 0x2100, 0x908a, 0x003f,
++ 0x1a04, 0x3086, 0x61cc, 0x0804, 0x301d, 0x305f, 0x3095, 0x309f,
++ 0x30a3, 0x30ad, 0x30b3, 0x30b7, 0x30c7, 0x30ca, 0x30d4, 0x30d9,
++ 0x30de, 0x30e9, 0x30f4, 0x3103, 0x3112, 0x3120, 0x3137, 0x3152,
++ 0x31f2, 0x31f7, 0x3235, 0x32dd, 0x32ee, 0x3311, 0x3086, 0x3086,
++ 0x3086, 0x3349, 0x3367, 0x3370, 0x339f, 0x33a5, 0x3086, 0x33dd,
++ 0x3086, 0x3086, 0x3086, 0x3086, 0x3086, 0x33e8, 0x33f1, 0x33f9,
++ 0x3086, 0x3086, 0x3086, 0x3086, 0x3086, 0x3086, 0x3086, 0x33fb,
++ 0x3086, 0x3086, 0x3086, 0x3086, 0x3086, 0x3418, 0x3475, 0x3086,
++ 0x3086, 0x3086, 0x3086, 0x3086, 0x3086, 0x0002, 0x349f, 0x34a2,
++ 0x3502, 0x351b, 0x354b, 0x37ed, 0x3086, 0x49c6, 0x3086, 0x3086,
++ 0x3086, 0x3086, 0x3086, 0x3086, 0x3086, 0x3086, 0x30d4, 0x30d9,
++ 0x3cbf, 0x3086, 0x3cd6, 0x4a55, 0x4aa5, 0x4ba8, 0x3086, 0x4c0a,
++ 0x4c46, 0x4c77, 0x4d79, 0x4ca4, 0x4cfb, 0x3086, 0x3cda, 0x3ea6,
++ 0x3ebc, 0x3ed8, 0x3f3d, 0x3fb1, 0x3fd1, 0x403b, 0x404c, 0x405d,
++ 0x4060, 0x4085, 0x40f9, 0x415b, 0x4163, 0x428b, 0x43b4, 0x43dd,
++ 0x4504, 0x4522, 0x452e, 0x45d0, 0x46a0, 0x3086, 0x3086, 0x3086,
++ 0x3086, 0x4706, 0x4721, 0x48ac, 0x4982, 0x7148, 0x0000, 0x2021,
++ 0x4000, 0x080c, 0x445b, 0x0126, 0x2091, 0x8000, 0x0e04, 0x3069,
++ 0x0010, 0x012e, 0x0cc0, 0x7c36, 0x9486, 0x4000, 0x0118, 0x7833,
++ 0x0011, 0x0010, 0x7833, 0x0010, 0x7c82, 0x7986, 0x7a8a, 0x7b8e,
++ 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x113e,
++ 0x7007, 0x0001, 0x2091, 0x5000, 0x012e, 0x0005, 0x2021, 0x4001,
++ 0x08c0, 0x2021, 0x4002, 0x08a8, 0x2021, 0x4003, 0x0890, 0x2021,
++ 0x4005, 0x0878, 0x2021, 0x4006, 0x0860, 0x2039, 0x0001, 0x902e,
++ 0x2520, 0x7b88, 0x7a8c, 0x7884, 0x7990, 0x0804, 0x4468, 0x7883,
++ 0x0004, 0x7884, 0x0807, 0x2039, 0x0001, 0x902e, 0x2520, 0x7b88,
++ 0x7a8c, 0x7884, 0x7990, 0x0804, 0x446b, 0x7984, 0x7888, 0x2114,
++ 0x200a, 0x0804, 0x305f, 0x7984, 0x2114, 0x0804, 0x305f, 0x20e1,
++ 0x0000, 0x2099, 0x0021, 0x20e9, 0x0000, 0x20a1, 0x0021, 0x20a9,
++ 0x001f, 0x4003, 0x7984, 0x7a88, 0x7b8c, 0x0804, 0x305f, 0x7884,
++ 0x2060, 0x04d8, 0x2009, 0x0003, 0x2011, 0x0002, 0x2019, 0x000a,
++ 0x789b, 0x0117, 0x0804, 0x305f, 0x2039, 0x0001, 0x7d98, 0x7c9c,
++ 0x0800, 0x2039, 0x0001, 0x7d98, 0x7c9c, 0x0848, 0x79a0, 0x9182,
++ 0x0040, 0x0210, 0x0804, 0x3092, 0x2138, 0x7d98, 0x7c9c, 0x0804,
++ 0x3099, 0x79a0, 0x9182, 0x0040, 0x0210, 0x0804, 0x3092, 0x2138,
++ 0x7d98, 0x7c9c, 0x0804, 0x30a7, 0x79a0, 0x9182, 0x0040, 0x0210,
++ 0x0804, 0x3092, 0x21e8, 0x7984, 0x7888, 0x20a9, 0x0001, 0x21a0,
++ 0x4004, 0x0804, 0x305f, 0x2061, 0x0800, 0xe10c, 0x9006, 0x2c15,
++ 0x9200, 0x8c60, 0x8109, 0x1dd8, 0x2010, 0x9005, 0x0904, 0x305f,
++ 0x0804, 0x308c, 0x79a0, 0x9182, 0x0040, 0x0210, 0x0804, 0x3092,
++ 0x21e0, 0x20a9, 0x0001, 0x7984, 0x2198, 0x4012, 0x0804, 0x305f,
++ 0x2069, 0x1852, 0x7884, 0x7990, 0x911a, 0x1a04, 0x3092, 0x8019,
++ 0x0904, 0x3092, 0x684a, 0x6942, 0x788c, 0x6852, 0x7888, 0x6856,
++ 0x9006, 0x685a, 0x685e, 0x080c, 0x6b71, 0x0804, 0x305f, 0x2069,
++ 0x1852, 0x7884, 0x7994, 0x911a, 0x1a04, 0x3092, 0x8019, 0x0904,
++ 0x3092, 0x684e, 0x6946, 0x788c, 0x6862, 0x7888, 0x6866, 0x9006,
++ 0x686a, 0x686e, 0x0126, 0x2091, 0x8000, 0x080c, 0x5f97, 0x012e,
++ 0x0804, 0x305f, 0x902e, 0x2520, 0x81ff, 0x1904, 0x308f, 0x7984,
++ 0x7b88, 0x7a8c, 0x20a9, 0x0005, 0x20e9, 0x0001, 0x20a1, 0x189a,
++ 0x4101, 0x080c, 0x441f, 0x0904, 0x308f, 0x2009, 0x0020, 0xa85c,
++ 0x9080, 0x0019, 0xaf60, 0x080c, 0x4468, 0x701b, 0x3170, 0x0005,
++ 0xa864, 0x2008, 0x9084, 0x00ff, 0x9096, 0x0011, 0x0168, 0x9096,
++ 0x0019, 0x0150, 0x9096, 0x0015, 0x0138, 0x9096, 0x0048, 0x0120,
++ 0x9096, 0x0029, 0x1904, 0x308f, 0x810f, 0x918c, 0x00ff, 0x0904,
++ 0x308f, 0x710e, 0x700c, 0x8001, 0x0548, 0x700e, 0x080c, 0x441f,
++ 0x0904, 0x308f, 0x2009, 0x0020, 0x7064, 0x2040, 0xa28c, 0xa390,
++ 0xa494, 0xa598, 0x9290, 0x0040, 0x9399, 0x0000, 0x94a1, 0x0000,
++ 0x95a9, 0x0000, 0xa85c, 0x9080, 0x0019, 0xaf60, 0x080c, 0x4468,
++ 0x701b, 0x31ab, 0x0005, 0xa864, 0x9084, 0x00ff, 0x9096, 0x0002,
++ 0x0120, 0x9096, 0x000a, 0x1904, 0x308f, 0x08a0, 0x7010, 0x2048,
++ 0xa868, 0xc0fd, 0xa86a, 0xa864, 0x9084, 0x00ff, 0x9096, 0x0029,
++ 0x1160, 0xc2fd, 0xaa7a, 0x080c, 0x57e4, 0x0150, 0x0126, 0x2091,
++ 0x8000, 0xa87a, 0xa982, 0x012e, 0x0050, 0x080c, 0x5ac6, 0x1128,
++ 0x7007, 0x0003, 0x701b, 0x31d7, 0x0005, 0x080c, 0x63d1, 0x0126,
++ 0x2091, 0x8000, 0x20a9, 0x0005, 0x20e1, 0x0001, 0x2099, 0x189a,
++ 0x400a, 0x2100, 0x9210, 0x9399, 0x0000, 0x94a1, 0x0000, 0x95a9,
++ 0x0000, 0xa85c, 0x9080, 0x0019, 0x2009, 0x0020, 0x012e, 0xaf60,
++ 0x0804, 0x446b, 0x61b4, 0x7884, 0x60b6, 0x0804, 0x305f, 0x2091,
++ 0x8000, 0x7837, 0x4000, 0x7833, 0x0010, 0x7883, 0x4000, 0x7887,
++ 0x4953, 0x788b, 0x5020, 0x788f, 0x2020, 0x2009, 0x017f, 0x2104,
++ 0x7892, 0x3f00, 0x7896, 0x2061, 0x0100, 0x6200, 0x2061, 0x0200,
++ 0x603c, 0x8007, 0x9205, 0x789a, 0x2009, 0x04fd, 0x2104, 0x789e,
++ 0x2091, 0x5000, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084,
++ 0x0180, 0x2001, 0x19e7, 0x2004, 0x9005, 0x0128, 0x2001, 0x008b,
++ 0x2004, 0xd0fc, 0x0dd8, 0x2001, 0x008a, 0x2003, 0x0002, 0x2003,
++ 0x1001, 0x2071, 0x0080, 0x0804, 0x0427, 0x81ff, 0x1904, 0x308f,
++ 0x7984, 0x080c, 0x5c0d, 0x1904, 0x3092, 0x7e98, 0x9684, 0x3fff,
++ 0x9082, 0x4000, 0x0210, 0x0804, 0x3092, 0x7c88, 0x7d8c, 0x080c,
++ 0x5d70, 0x080c, 0x5d3f, 0x0000, 0x1518, 0x2061, 0x1cd0, 0x0126,
++ 0x2091, 0x8000, 0x6000, 0x9086, 0x0000, 0x0148, 0x6014, 0x904d,
++ 0x0130, 0xa86c, 0x9406, 0x1118, 0xa870, 0x9506, 0x0150, 0x012e,
++ 0x9ce0, 0x0018, 0x2001, 0x1818, 0x2004, 0x9c02, 0x1a04, 0x308f,
++ 0x0c30, 0x080c, 0xad1e, 0x012e, 0x0904, 0x308f, 0x0804, 0x305f,
++ 0x900e, 0x2001, 0x0005, 0x080c, 0x63d1, 0x0126, 0x2091, 0x8000,
++ 0x080c, 0xb37a, 0x080c, 0x61a9, 0x012e, 0x0804, 0x305f, 0x00a6,
++ 0x2950, 0xb198, 0x080c, 0x5c0d, 0x1904, 0x32ca, 0xb6a4, 0x9684,
++ 0x3fff, 0x9082, 0x4000, 0x0208, 0x04e8, 0xb49c, 0xb5a0, 0x080c,
++ 0x5d70, 0x080c, 0x5d3f, 0x1520, 0x2061, 0x1cd0, 0x0126, 0x2091,
++ 0x8000, 0x6000, 0x9086, 0x0000, 0x0148, 0x6014, 0x904d, 0x0130,
++ 0xa86c, 0x9406, 0x1118, 0xa870, 0x9506, 0x0158, 0x012e, 0x9ce0,
++ 0x0018, 0x2001, 0x1818, 0x2004, 0x9c02, 0x2009, 0x000d, 0x12b0,
++ 0x0c28, 0x080c, 0xad1e, 0x012e, 0x2009, 0x0003, 0x0178, 0x00e0,
++ 0x900e, 0x2001, 0x0005, 0x080c, 0x63d1, 0x0126, 0x2091, 0x8000,
++ 0x080c, 0xb37a, 0x080c, 0x61a9, 0x012e, 0x0070, 0xb097, 0x4005,
++ 0xb19a, 0x0010, 0xb097, 0x4006, 0x900e, 0x9085, 0x0001, 0x2001,
++ 0x0030, 0x2a48, 0x00ae, 0x0005, 0xb097, 0x4000, 0x9006, 0x918d,
++ 0x0001, 0x2008, 0x2a48, 0x00ae, 0x0005, 0x81ff, 0x1904, 0x308f,
++ 0x080c, 0x4436, 0x0904, 0x3092, 0x080c, 0x5cd4, 0x0904, 0x308f,
++ 0x080c, 0x5d76, 0x0904, 0x308f, 0x0804, 0x3fc8, 0x81ff, 0x1904,
++ 0x308f, 0x080c, 0x4452, 0x0904, 0x3092, 0x080c, 0x5e04, 0x0904,
++ 0x308f, 0x2019, 0x0005, 0x79a8, 0x080c, 0x5d91, 0x0904, 0x308f,
++ 0x7888, 0x908a, 0x1000, 0x1a04, 0x3092, 0x8003, 0x800b, 0x810b,
++ 0x9108, 0x080c, 0x7826, 0x7984, 0xd184, 0x1904, 0x305f, 0x0804,
++ 0x3fc8, 0x0126, 0x2091, 0x8000, 0x81ff, 0x0118, 0x2009, 0x0001,
++ 0x0450, 0x2029, 0x07ff, 0x6454, 0x2400, 0x9506, 0x01f8, 0x2508,
++ 0x080c, 0x5c0d, 0x11d8, 0x080c, 0x5e04, 0x1128, 0x2009, 0x0002,
++ 0x62bc, 0x2518, 0x00c0, 0x2019, 0x0004, 0x900e, 0x080c, 0x5d91,
++ 0x1118, 0x2009, 0x0006, 0x0078, 0x7884, 0x908a, 0x1000, 0x1270,
++ 0x8003, 0x800b, 0x810b, 0x9108, 0x080c, 0x7826, 0x8529, 0x1ae0,
++ 0x012e, 0x0804, 0x305f, 0x012e, 0x0804, 0x308f, 0x012e, 0x0804,
++ 0x3092, 0x080c, 0x4436, 0x0904, 0x3092, 0x080c, 0x5cd4, 0x0904,
++ 0x308f, 0xbaa0, 0x2019, 0x0005, 0x00c6, 0x2061, 0x0000, 0x080c,
++ 0x7d55, 0x0076, 0x2039, 0x0000, 0x080c, 0x7c4d, 0x900e, 0x080c,
++ 0xc73e, 0x007e, 0x00ce, 0x080c, 0x5d70, 0x0804, 0x305f, 0x080c,
++ 0x4436, 0x0904, 0x3092, 0x080c, 0x5d70, 0x2208, 0x0804, 0x305f,
++ 0x0156, 0x00d6, 0x00e6, 0x2069, 0x1904, 0x6810, 0x6914, 0x910a,
++ 0x1208, 0x900e, 0x6816, 0x9016, 0x901e, 0x20a9, 0x007e, 0x2069,
++ 0x1000, 0x2d04, 0x905d, 0x0118, 0xb84c, 0x0059, 0x9210, 0x8d68,
++ 0x1f04, 0x3381, 0x2300, 0x9218, 0x00ee, 0x00de, 0x015e, 0x0804,
++ 0x305f, 0x00f6, 0x0016, 0x907d, 0x0138, 0x9006, 0x8000, 0x2f0c,
++ 0x81ff, 0x0110, 0x2178, 0x0cd0, 0x001e, 0x00fe, 0x0005, 0x2069,
++ 0x1904, 0x6910, 0x62b8, 0x0804, 0x305f, 0x81ff, 0x1904, 0x308f,
++ 0x6154, 0x9190, 0x2e6e, 0x2215, 0x9294, 0x00ff, 0x6374, 0x83ff,
++ 0x0108, 0x6278, 0x67d8, 0x97c4, 0x000a, 0x98c6, 0x000a, 0x1118,
++ 0x2031, 0x0001, 0x00f0, 0x97c4, 0x0022, 0x98c6, 0x0022, 0x1118,
++ 0x2031, 0x0003, 0x00b0, 0x97c4, 0x0012, 0x98c6, 0x0012, 0x1118,
++ 0x2031, 0x0002, 0x0070, 0x080c, 0x6877, 0x1118, 0x2031, 0x0004,
++ 0x0040, 0xd79c, 0x0120, 0x2009, 0x0005, 0x0804, 0x308f, 0x2031,
++ 0x0000, 0x7e9a, 0x7f9e, 0x0804, 0x305f, 0x6144, 0x6248, 0x2019,
++ 0x1953, 0x231c, 0x2001, 0x1954, 0x2004, 0x789a, 0x0804, 0x305f,
++ 0x0126, 0x2091, 0x8000, 0x6134, 0x6238, 0x633c, 0x012e, 0x0804,
++ 0x305f, 0x080c, 0x4452, 0x0904, 0x3092, 0xba44, 0xbb38, 0x0804,
++ 0x305f, 0x080c, 0x0d84, 0x6144, 0x6248, 0x7884, 0x6046, 0x7b88,
++ 0x634a, 0x2069, 0x1852, 0x831f, 0x9305, 0x6816, 0x788c, 0x2069,
++ 0x1953, 0x2d1c, 0x206a, 0x7e98, 0x9682, 0x0014, 0x1210, 0x2031,
++ 0x07d0, 0x2069, 0x1954, 0x2d04, 0x266a, 0x789a, 0x0804, 0x305f,
++ 0x0126, 0x2091, 0x8000, 0x6134, 0x7884, 0x6036, 0x910e, 0xd1b4,
++ 0x190c, 0x0e56, 0xd0c4, 0x01a8, 0x00d6, 0x78a8, 0x2009, 0x196a,
++ 0x200a, 0x78ac, 0x2011, 0x196b, 0x2012, 0x2069, 0x0100, 0x6838,
++ 0x9086, 0x0007, 0x1118, 0x2214, 0x6a5a, 0x0010, 0x210c, 0x695a,
++ 0x00de, 0x7884, 0x7888, 0x603a, 0x2011, 0x0114, 0x220c, 0x7888,
++ 0xd08c, 0x0118, 0x918d, 0x0080, 0x0010, 0x918c, 0xff7f, 0x2112,
++ 0x613c, 0x788c, 0x603e, 0x910e, 0xd1e4, 0x190c, 0x0e73, 0x603c,
++ 0xd0cc, 0x0120, 0x78b0, 0x2011, 0x0114, 0x2012, 0x012e, 0x0804,
++ 0x305f, 0x00f6, 0x2079, 0x1800, 0x7a34, 0xa898, 0x9084, 0xfebf,
++ 0x9215, 0xa89c, 0x9084, 0xfebf, 0x8002, 0x9214, 0x79ec, 0x7834,
++ 0x9084, 0x0140, 0x9215, 0x7a36, 0xa897, 0x4000, 0x900e, 0x9085,
++ 0x0001, 0x2001, 0x0000, 0x00fe, 0x0005, 0x7898, 0x9005, 0x01a8,
++ 0x7888, 0x9025, 0x0904, 0x3092, 0x788c, 0x902d, 0x0904, 0x3092,
++ 0x900e, 0x080c, 0x5c0d, 0x1120, 0xba44, 0xbb38, 0xbc46, 0xbd3a,
++ 0x9186, 0x07ff, 0x0190, 0x8108, 0x0ca0, 0x080c, 0x4452, 0x0904,
++ 0x3092, 0x7888, 0x900d, 0x0904, 0x3092, 0x788c, 0x9005, 0x0904,
++ 0x3092, 0xba44, 0xb946, 0xbb38, 0xb83a, 0x0804, 0x305f, 0x2011,
++ 0xbc09, 0x0010, 0x2011, 0xbc05, 0x080c, 0x4dfe, 0x1904, 0x308f,
++ 0x00c6, 0x2061, 0x0100, 0x7984, 0x9186, 0x00ff, 0x1130, 0x2001,
++ 0x1816, 0x2004, 0x9085, 0xff00, 0x0088, 0x9182, 0x007f, 0x16e8,
++ 0x9188, 0x2e6e, 0x210d, 0x918c, 0x00ff, 0x2001, 0x1816, 0x2004,
++ 0x0026, 0x9116, 0x002e, 0x0588, 0x810f, 0x9105, 0x0126, 0x2091,
++ 0x8000, 0x0006, 0x080c, 0x94fe, 0x000e, 0x0518, 0x6016, 0x600b,
++ 0xbc05, 0x7984, 0x00b6, 0x080c, 0x5bb0, 0x2b08, 0x00be, 0x1500,
++ 0x6112, 0x6023, 0x0001, 0x080c, 0x441f, 0x01d0, 0x9006, 0xa866,
++ 0x7007, 0x0003, 0xa832, 0xa868, 0xc0fd, 0xa86a, 0x701b, 0x34fb,
++ 0x2900, 0x6016, 0x2009, 0x0032, 0x080c, 0x95ce, 0x012e, 0x00ce,
++ 0x0005, 0x012e, 0x00ce, 0x0804, 0x308f, 0x00ce, 0x0804, 0x3092,
++ 0x080c, 0x9554, 0x0cb0, 0xa830, 0x9086, 0x0100, 0x0904, 0x308f,
++ 0x0804, 0x305f, 0x2061, 0x1a3d, 0x0126, 0x2091, 0x8000, 0x6000,
++ 0xd084, 0x0170, 0x6104, 0x6208, 0x2061, 0x1800, 0x634c, 0x606c,
++ 0x789a, 0x60bc, 0x789e, 0x60b8, 0x78aa, 0x012e, 0x0804, 0x305f,
++ 0x900e, 0x2110, 0x0c88, 0x81ff, 0x1904, 0x308f, 0x080c, 0x6877,
++ 0x0904, 0x308f, 0x0126, 0x2091, 0x8000, 0x624c, 0x606c, 0x9202,
++ 0x0248, 0x9085, 0x0001, 0x080c, 0x2466, 0x080c, 0x4fc7, 0x012e,
++ 0x0804, 0x305f, 0x012e, 0x0804, 0x3092, 0x0006, 0x0016, 0x00c6,
++ 0x00e6, 0x2001, 0x1976, 0x2070, 0x2061, 0x1852, 0x6008, 0x2072,
++ 0x900e, 0x2011, 0x1400, 0x080c, 0x7a4b, 0x7206, 0x00ee, 0x00ce,
++ 0x001e, 0x000e, 0x0005, 0x0126, 0x2091, 0x8000, 0x81ff, 0x0128,
++ 0x012e, 0x2021, 0x400b, 0x0804, 0x3061, 0x7884, 0xd0fc, 0x0148,
++ 0x2001, 0x002a, 0x2004, 0x9082, 0x00e1, 0x02a8, 0x012e, 0x0804,
++ 0x3092, 0x2001, 0x002a, 0x2004, 0x2069, 0x1852, 0x6908, 0x9102,
++ 0x1218, 0x012e, 0x0804, 0x3092, 0x614c, 0x606c, 0x9106, 0x0118,
++ 0x012e, 0x0804, 0x308f, 0x080c, 0x94d3, 0x0dd0, 0x7884, 0xd0fc,
++ 0x0904, 0x35ca, 0x00c6, 0x080c, 0x441f, 0x00ce, 0x0d88, 0xa867,
++ 0x0000, 0x7884, 0xa80a, 0x7898, 0xa80e, 0x789c, 0xa812, 0x2001,
++ 0x002e, 0x2004, 0xa81a, 0x2001, 0x002f, 0x2004, 0xa81e, 0x2001,
++ 0x0030, 0x2004, 0xa822, 0x2001, 0x0031, 0x2004, 0xa826, 0x2001,
++ 0x0034, 0x2004, 0xa82a, 0x2001, 0x0035, 0x2004, 0xa82e, 0x2001,
++ 0x002a, 0x2004, 0x9080, 0x0003, 0x9084, 0x00fc, 0x8004, 0xa816,
++ 0x080c, 0x3750, 0x0928, 0x7010, 0x2048, 0xad2c, 0xac28, 0xab1c,
++ 0xaa18, 0xa930, 0xa808, 0xd0b4, 0x1120, 0x2029, 0x0000, 0x2021,
++ 0x0000, 0x8906, 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0,
++ 0x9080, 0x001b, 0x080c, 0x4468, 0x701b, 0x368d, 0x701f, 0x0001,
++ 0x012e, 0x0005, 0x0046, 0x0086, 0x0096, 0x00a6, 0x00b6, 0x00c6,
++ 0x00d6, 0x00e6, 0x00f6, 0x080c, 0x3535, 0x2001, 0x196c, 0x2003,
++ 0x0000, 0x2021, 0x000a, 0x2061, 0x0100, 0x6104, 0x0016, 0x60bb,
++ 0x0000, 0x60bf, 0x32e1, 0x60bf, 0x0012, 0x080c, 0x37bf, 0x080c,
++ 0x377e, 0x00f6, 0x00e6, 0x0086, 0x2940, 0x2071, 0x1a33, 0x2079,
++ 0x0090, 0x00d6, 0x2069, 0x0000, 0x6884, 0xd0b4, 0x0140, 0x2001,
++ 0x0035, 0x2004, 0x780e, 0x2001, 0x0034, 0x2004, 0x780a, 0x00de,
++ 0x2011, 0x0001, 0x080c, 0x3b2b, 0x008e, 0x00ee, 0x00fe, 0x080c,
++ 0x3a61, 0x080c, 0x396a, 0x05b8, 0x2001, 0x020b, 0x2004, 0x9084,
++ 0x0140, 0x1db8, 0x080c, 0x3b7f, 0x00f6, 0x2079, 0x0300, 0x78bc,
++ 0x00fe, 0x908c, 0x0070, 0x1560, 0x2071, 0x0200, 0x7037, 0x0000,
++ 0x7050, 0x9084, 0xff00, 0x9086, 0x3200, 0x1510, 0x7037, 0x0001,
++ 0x7050, 0x9084, 0xff00, 0x9086, 0xe100, 0x11d0, 0x7037, 0x0000,
++ 0x7054, 0x7037, 0x0000, 0x715c, 0x9106, 0x1190, 0x2001, 0x181e,
++ 0x2004, 0x9106, 0x1168, 0x00c6, 0x2061, 0x0100, 0x6024, 0x9084,
++ 0x1e00, 0x00ce, 0x0138, 0x080c, 0x3974, 0x080c, 0x3779, 0x0058,
++ 0x080c, 0x3779, 0x080c, 0x3ac3, 0x080c, 0x3a57, 0x2001, 0x020b,
++ 0x2004, 0xd0e4, 0x0dd8, 0x2001, 0x032a, 0x2003, 0x0004, 0x2061,
++ 0x0100, 0x6027, 0x0002, 0x001e, 0x6106, 0x2011, 0x020d, 0x2013,
++ 0x0020, 0x60bb, 0x0000, 0x60bf, 0x0108, 0x60bf, 0x0012, 0x2001,
++ 0x0004, 0x200c, 0x918c, 0xfffd, 0x2102, 0x080c, 0x1245, 0x2009,
++ 0x0028, 0x080c, 0x2014, 0x2001, 0x0227, 0x200c, 0x2102, 0x00fe,
++ 0x00ee, 0x00de, 0x00ce, 0x00be, 0x00ae, 0x009e, 0x008e, 0x004e,
++ 0x2001, 0x196c, 0x2004, 0x9005, 0x1118, 0x012e, 0x0804, 0x305f,
++ 0x012e, 0x2021, 0x400c, 0x0804, 0x3061, 0x0016, 0x0026, 0x0036,
++ 0x0046, 0x0056, 0x0076, 0x0086, 0x0096, 0x00d6, 0x0156, 0x7010,
++ 0x2048, 0x701c, 0x20a8, 0x8000, 0x701e, 0xa804, 0x9005, 0x0904,
++ 0x36e9, 0x2048, 0x1f04, 0x369d, 0x7064, 0x2040, 0xa28c, 0xa390,
++ 0xa494, 0xa598, 0xa930, 0xa808, 0xd0b4, 0x1120, 0x2029, 0x0000,
++ 0x2021, 0x0000, 0x0096, 0x7010, 0x2048, 0xa864, 0x009e, 0x9086,
++ 0x0103, 0x0170, 0x8906, 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084,
++ 0xffc0, 0x9080, 0x001b, 0x080c, 0x4468, 0x701b, 0x368d, 0x00b0,
++ 0x8906, 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080,
++ 0x001b, 0x21a8, 0x27e0, 0x2098, 0x27e8, 0x20a0, 0x0006, 0x080c,
++ 0x0f2b, 0x000e, 0x080c, 0x446b, 0x701b, 0x368d, 0x015e, 0x00de,
++ 0x009e, 0x008e, 0x007e, 0x005e, 0x004e, 0x003e, 0x002e, 0x001e,
++ 0x0005, 0x7010, 0x2048, 0xa864, 0x9086, 0x0103, 0x1118, 0x701b,
++ 0x374e, 0x0450, 0x7010, 0x2048, 0xa868, 0xc0fd, 0xa86a, 0x2009,
++ 0x007f, 0x080c, 0x5bb0, 0x0110, 0x9006, 0x0030, 0xb813, 0x00ff,
++ 0xb817, 0xfffd, 0x080c, 0xb535, 0x015e, 0x00de, 0x009e, 0x008e,
++ 0x007e, 0x005e, 0x004e, 0x003e, 0x002e, 0x001e, 0x0904, 0x308f,
++ 0x0016, 0x0026, 0x0036, 0x0046, 0x0056, 0x0076, 0x0086, 0x0096,
++ 0x00d6, 0x0156, 0x701b, 0x3720, 0x7007, 0x0003, 0x0804, 0x36de,
++ 0x0076, 0xa830, 0x9086, 0x0100, 0x2021, 0x400c, 0x0904, 0x3061,
++ 0xad10, 0xac0c, 0xab24, 0xaa20, 0xa930, 0xa808, 0xd0b4, 0x1120,
++ 0x2029, 0x0000, 0x2021, 0x0000, 0x8906, 0x8006, 0x8007, 0x90bc,
++ 0x003f, 0x9084, 0xffc0, 0x9080, 0x001b, 0x21a8, 0x27e0, 0x2098,
++ 0x27e8, 0x20a0, 0x0006, 0x080c, 0x0f2b, 0x000e, 0x080c, 0x446b,
++ 0x007e, 0x701b, 0x368d, 0x701f, 0x0001, 0x0005, 0x0804, 0x305f,
++ 0x0156, 0x00c6, 0xa814, 0x908a, 0x001e, 0x0218, 0xa833, 0x001e,
++ 0x0010, 0xa832, 0x0078, 0x81ff, 0x0168, 0x0016, 0x080c, 0x441f,
++ 0x001e, 0x0130, 0xa800, 0x2040, 0xa008, 0xa80a, 0x2100, 0x0c58,
++ 0x9006, 0x0010, 0x9085, 0x0001, 0x00ce, 0x015e, 0x0005, 0x0006,
++ 0x00f6, 0x2079, 0x0000, 0x7880, 0x9086, 0x0044, 0x00fe, 0x000e,
++ 0x0005, 0x2001, 0x196c, 0x2003, 0x0001, 0x0005, 0x00f6, 0x00e6,
++ 0x00c6, 0x2061, 0x0200, 0x2001, 0x1977, 0x2004, 0x601a, 0x2061,
++ 0x0100, 0x2001, 0x1976, 0x2004, 0x60ce, 0x6104, 0xc1ac, 0x6106,
++ 0x080c, 0x441f, 0xa813, 0x0019, 0xa817, 0x0001, 0x2900, 0xa85a,
++ 0x2001, 0x002e, 0x2004, 0xa866, 0x2001, 0x002f, 0x2004, 0xa86a,
++ 0x2061, 0x0090, 0x2079, 0x0100, 0x2001, 0x1976, 0x2004, 0x6036,
++ 0x2009, 0x0040, 0x080c, 0x2014, 0x2001, 0x002a, 0x2004, 0x9084,
++ 0xfff8, 0xa86e, 0x601a, 0xa873, 0x0000, 0x601f, 0x0000, 0x78ca,
++ 0x9006, 0x600a, 0x600e, 0x00ce, 0x00ee, 0x00fe, 0x0005, 0x00e6,
++ 0x080c, 0x441f, 0x2940, 0xa013, 0x0019, 0xa017, 0x0001, 0x2800,
++ 0xa05a, 0x2001, 0x0030, 0x2004, 0xa866, 0x2001, 0x0031, 0x2004,
++ 0xa86a, 0x2001, 0x002a, 0x2004, 0x9084, 0xfff8, 0xa86e, 0xa873,
++ 0x0000, 0x2001, 0x032a, 0x2003, 0x0004, 0x2001, 0x0300, 0x2003,
++ 0x0000, 0x2001, 0x020d, 0x2003, 0x0000, 0x2001, 0x0004, 0x200c,
++ 0x918d, 0x0002, 0x2102, 0x00ee, 0x0005, 0x0126, 0x2091, 0x8000,
++ 0x81ff, 0x0148, 0x080c, 0x27e7, 0x1130, 0x9006, 0x080c, 0x2747,
++ 0x9006, 0x080c, 0x272a, 0x7884, 0x9084, 0x0007, 0x0002, 0x380a,
++ 0x3813, 0x381c, 0x3807, 0x3807, 0x3807, 0x3807, 0x3807, 0x012e,
++ 0x0804, 0x3092, 0x2009, 0x0114, 0x2104, 0x9085, 0x0800, 0x200a,
++ 0x080c, 0x39ba, 0x00c0, 0x2009, 0x0114, 0x2104, 0x9085, 0x4000,
++ 0x200a, 0x080c, 0x39ba, 0x0078, 0x080c, 0x6877, 0x1128, 0x012e,
++ 0x2009, 0x0016, 0x0804, 0x308f, 0x81ff, 0x0128, 0x012e, 0x2021,
++ 0x400b, 0x0804, 0x3061, 0x0086, 0x0096, 0x00a6, 0x00b6, 0x00c6,
++ 0x00d6, 0x00e6, 0x00f6, 0x080c, 0x3535, 0x2009, 0x0101, 0x210c,
++ 0x0016, 0x7ec8, 0x7dcc, 0x9006, 0x2068, 0x2060, 0x2058, 0x080c,
++ 0x3c52, 0x080c, 0x3bab, 0x903e, 0x2720, 0x00f6, 0x00e6, 0x0086,
++ 0x2940, 0x2071, 0x1a33, 0x2079, 0x0090, 0x00d6, 0x2069, 0x0000,
++ 0x6884, 0xd0b4, 0x0120, 0x68d4, 0x780e, 0x68d0, 0x780a, 0x00de,
++ 0x2011, 0x0001, 0x080c, 0x3b2b, 0x080c, 0x27ef, 0x080c, 0x27ef,
++ 0x080c, 0x27ef, 0x080c, 0x27ef, 0x080c, 0x3b2b, 0x008e, 0x00ee,
++ 0x00fe, 0x080c, 0x3a61, 0x2001, 0x020b, 0x2004, 0x9084, 0x0140,
++ 0x1dd0, 0x00f6, 0x2079, 0x0000, 0x7884, 0x00fe, 0xd0bc, 0x0178,
++ 0x2001, 0x0201, 0x200c, 0x81ff, 0x0150, 0x080c, 0x3a3f, 0x2d00,
++ 0x9c05, 0x9b05, 0x0120, 0x080c, 0x3974, 0x0804, 0x3921, 0x080c,
++ 0x3b7f, 0x080c, 0x3ac3, 0x080c, 0x3a22, 0x080c, 0x3a57, 0x00f6,
++ 0x2079, 0x0100, 0x7824, 0xd0ac, 0x0130, 0x8b58, 0x080c, 0x3974,
++ 0x00fe, 0x0804, 0x3921, 0x00fe, 0x080c, 0x396a, 0x1150, 0x8d68,
++ 0x2001, 0x0032, 0x2602, 0x2001, 0x0033, 0x2502, 0x080c, 0x3974,
++ 0x0080, 0x87ff, 0x0138, 0x2001, 0x0201, 0x2004, 0x9005, 0x1908,
++ 0x8739, 0x0038, 0x2001, 0x1a30, 0x2004, 0x9086, 0x0000, 0x1904,
++ 0x3871, 0x2001, 0x032f, 0x2003, 0x00f6, 0x8631, 0x1208, 0x8529,
++ 0x2500, 0x9605, 0x0904, 0x3921, 0x7884, 0xd0bc, 0x0128, 0x2d00,
++ 0x9c05, 0x9b05, 0x1904, 0x3921, 0xa013, 0x0019, 0x2001, 0x032a,
++ 0x2003, 0x0004, 0x7884, 0xd0ac, 0x1148, 0x2001, 0x1a30, 0x2003,
++ 0x0003, 0x2001, 0x032a, 0x2003, 0x0009, 0x0030, 0xa017, 0x0001,
++ 0x78b4, 0x9005, 0x0108, 0xa016, 0x2800, 0xa05a, 0x2009, 0x0040,
++ 0x080c, 0x2014, 0x2900, 0xa85a, 0xa813, 0x0019, 0x7884, 0xd0a4,
++ 0x1180, 0xa817, 0x0000, 0x00c6, 0x20a9, 0x0004, 0x2061, 0x0090,
++ 0x602b, 0x0008, 0x2001, 0x0203, 0x2004, 0x1f04, 0x38f8, 0x00ce,
++ 0x0030, 0xa817, 0x0001, 0x78b0, 0x9005, 0x0108, 0xa816, 0x00f6,
++ 0x00c6, 0x2079, 0x0100, 0x2061, 0x0090, 0x7827, 0x0002, 0x2001,
++ 0x002a, 0x2004, 0x9084, 0xfff8, 0x601a, 0x0006, 0x2001, 0x002b,
++ 0x2004, 0x601e, 0x78c6, 0x000e, 0x78ca, 0x00ce, 0x00fe, 0x0804,
++ 0x3845, 0x001e, 0x00c6, 0x2001, 0x032a, 0x2003, 0x0004, 0x2061,
++ 0x0100, 0x6027, 0x0002, 0x6106, 0x2011, 0x020d, 0x2013, 0x0020,
++ 0x2001, 0x0004, 0x200c, 0x918c, 0xfffd, 0x2102, 0x080c, 0x1245,
++ 0x7884, 0x9084, 0x0003, 0x9086, 0x0002, 0x01a0, 0x2009, 0x0028,
++ 0x080c, 0x2014, 0x2001, 0x0227, 0x200c, 0x2102, 0x6050, 0x9084,
++ 0xb7ef, 0x6052, 0x602f, 0x0000, 0x604b, 0xf7f7, 0x6043, 0x0090,
++ 0x6043, 0x0010, 0x00ce, 0x2d08, 0x2c10, 0x2b18, 0x2b00, 0x9c05,
++ 0x9d05, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x00be, 0x00ae, 0x009e,
++ 0x008e, 0x1118, 0x012e, 0x0804, 0x305f, 0x012e, 0x2021, 0x400c,
++ 0x0804, 0x3061, 0x9085, 0x0001, 0x1d04, 0x3973, 0x2091, 0x6000,
++ 0x8420, 0x9486, 0x0064, 0x0005, 0x2001, 0x0105, 0x2003, 0x0010,
++ 0x2001, 0x032a, 0x2003, 0x0004, 0x2001, 0x1a30, 0x2003, 0x0000,
++ 0x0051, 0x2009, 0x0048, 0x080c, 0x2014, 0x2001, 0x0227, 0x2024,
++ 0x2402, 0x9026, 0x0005, 0x00f6, 0x00e6, 0x2071, 0x1a33, 0x7000,
++ 0x9086, 0x0000, 0x0520, 0x2079, 0x0090, 0x2009, 0x0206, 0x2104,
++ 0x2009, 0x0203, 0x210c, 0x9106, 0x1120, 0x2009, 0x0040, 0x080c,
++ 0x2014, 0x782c, 0xd0fc, 0x0d88, 0x080c, 0x3b7f, 0x7000, 0x9086,
++ 0x0000, 0x1d58, 0x782b, 0x0004, 0x782c, 0xd0ac, 0x1de8, 0x2009,
++ 0x0040, 0x080c, 0x2014, 0x782b, 0x0002, 0x7003, 0x0000, 0x00ee,
++ 0x00fe, 0x0005, 0x00f6, 0x2079, 0x0100, 0x2001, 0x1816, 0x200c,
++ 0x7932, 0x7936, 0x080c, 0x2446, 0x7850, 0x9084, 0xfbff, 0x9085,
++ 0x0030, 0x7852, 0x2019, 0x01f4, 0x8319, 0x1df0, 0x9084, 0xffcf,
++ 0x9085, 0x2000, 0x7852, 0x20a9, 0x0046, 0x1d04, 0x39d5, 0x2091,
++ 0x6000, 0x1f04, 0x39d5, 0x7850, 0x9085, 0x0400, 0x9084, 0xdfff,
++ 0x7852, 0x2001, 0x0021, 0x2004, 0x9084, 0x0003, 0x9086, 0x0001,
++ 0x1120, 0x7850, 0x9084, 0xdfff, 0x7852, 0x784b, 0xf7f7, 0x7843,
++ 0x0090, 0x7843, 0x0010, 0x20a9, 0x0028, 0xa001, 0x1f04, 0x39f5,
++ 0x7850, 0x9085, 0x1400, 0x7852, 0x2019, 0x61a8, 0x7854, 0xa001,
++ 0xa001, 0xd08c, 0x1110, 0x8319, 0x1dc8, 0x7827, 0x0048, 0x7850,
++ 0x9085, 0x0400, 0x7852, 0x7843, 0x0040, 0x2019, 0x01f4, 0xa001,
++ 0xa001, 0x8319, 0x1de0, 0x2001, 0x0100, 0x080c, 0x28a5, 0x7827,
++ 0x0020, 0x7843, 0x0000, 0x9006, 0x080c, 0x28a5, 0x7827, 0x0048,
++ 0x00fe, 0x0005, 0x7884, 0xd0ac, 0x11c8, 0x00f6, 0x00e6, 0x2071,
++ 0x1a30, 0x2079, 0x0320, 0x2001, 0x0201, 0x2004, 0x9005, 0x0160,
++ 0x7000, 0x9086, 0x0000, 0x1140, 0x0051, 0xd0bc, 0x0108, 0x8738,
++ 0x7003, 0x0003, 0x782b, 0x0019, 0x00ee, 0x00fe, 0x0005, 0x00f6,
++ 0x2079, 0x0300, 0x78bc, 0x00fe, 0x908c, 0x0070, 0x0178, 0x2009,
++ 0x0032, 0x260a, 0x2009, 0x0033, 0x250a, 0xd0b4, 0x0108, 0x8c60,
++ 0xd0ac, 0x0108, 0x8d68, 0xd0a4, 0x0108, 0x8b58, 0x0005, 0x00f6,
++ 0x2079, 0x0200, 0x781c, 0xd084, 0x0110, 0x7837, 0x0050, 0x00fe,
++ 0x0005, 0x00e6, 0x2071, 0x0100, 0x2001, 0x1977, 0x2004, 0x70e2,
++ 0x080c, 0x376f, 0x1188, 0x2001, 0x181e, 0x2004, 0x2009, 0x181d,
++ 0x210c, 0x918c, 0x00ff, 0x706e, 0x716a, 0x7066, 0x918d, 0x3200,
++ 0x7162, 0x7073, 0xe109, 0x0080, 0x702c, 0x9085, 0x0002, 0x702e,
++ 0x2009, 0x1816, 0x210c, 0x716e, 0x7063, 0x0100, 0x7166, 0x719e,
++ 0x706b, 0x0000, 0x7073, 0x0809, 0x7077, 0x0008, 0x7078, 0x9080,
++ 0x0100, 0x707a, 0x7080, 0x8000, 0x7082, 0x7087, 0xaaaa, 0x9006,
++ 0x708a, 0x708e, 0x707e, 0x70d6, 0x70ab, 0x0036, 0x70af, 0x95d5,
++ 0x7014, 0x9084, 0x1984, 0x9085, 0x0012, 0x7016, 0x080c, 0x3b7f,
++ 0x00f6, 0x2071, 0x1a30, 0x2079, 0x0320, 0x00d6, 0x2069, 0x0000,
++ 0x6884, 0xd0b4, 0x0120, 0x689c, 0x780e, 0x6898, 0x780a, 0x00de,
++ 0x2011, 0x0011, 0x080c, 0x3b2b, 0x2011, 0x0001, 0x080c, 0x3b2b,
++ 0x00fe, 0x00ee, 0x0005, 0x00f6, 0x00e6, 0x2071, 0x1a30, 0x2079,
++ 0x0320, 0x792c, 0xd1fc, 0x0904, 0x3b28, 0x782b, 0x0002, 0x9026,
++ 0xd19c, 0x1904, 0x3b24, 0x7000, 0x0002, 0x3b28, 0x3ad9, 0x3b09,
++ 0x3b24, 0xd1bc, 0x1170, 0xd1dc, 0x1190, 0x8001, 0x7002, 0x2011,
++ 0x0001, 0x080c, 0x3b2b, 0x0904, 0x3b28, 0x080c, 0x3b2b, 0x0804,
++ 0x3b28, 0x00f6, 0x2079, 0x0300, 0x78bf, 0x0000, 0x00fe, 0x7810,
++ 0x7914, 0x782b, 0x0004, 0x7812, 0x7916, 0x2001, 0x0201, 0x200c,
++ 0x81ff, 0x0de8, 0x080c, 0x3a3f, 0x2009, 0x0001, 0x00f6, 0x2079,
++ 0x0300, 0x78b8, 0x00fe, 0xd0ec, 0x0110, 0x2009, 0x0011, 0x792a,
++ 0x00f8, 0x8001, 0x7002, 0x9184, 0x0880, 0x1140, 0x782c, 0xd0fc,
++ 0x1904, 0x3acd, 0x2011, 0x0001, 0x00b1, 0x0090, 0xa010, 0x9092,
++ 0x0004, 0x9086, 0x0015, 0x1120, 0xa000, 0xa05a, 0x2011, 0x0031,
++ 0xa212, 0xd1dc, 0x1960, 0x0828, 0x782b, 0x0004, 0x7003, 0x0000,
++ 0x00ee, 0x00fe, 0x0005, 0xa014, 0x9005, 0x0540, 0x8001, 0x0036,
++ 0x0096, 0xa016, 0xa058, 0x2048, 0xa010, 0x2009, 0x0025, 0x911a,
++ 0x831c, 0x831c, 0x938a, 0x0004, 0x1a0c, 0x0d84, 0x9398, 0x3b57,
++ 0x231d, 0x083f, 0x9080, 0x0004, 0x7a2a, 0x7100, 0x8108, 0x7102,
++ 0x009e, 0x003e, 0x908a, 0x0029, 0x1130, 0xa058, 0x2048, 0xa804,
++ 0xa05a, 0x2001, 0x0019, 0xa012, 0x9085, 0x0001, 0x0005, 0x3b76,
++ 0x3b6d, 0x3b64, 0x3b5b, 0xa964, 0x7902, 0xa968, 0x7906, 0xa96c,
++ 0x7912, 0xa970, 0x7916, 0x0005, 0xa974, 0x7902, 0xa978, 0x7906,
++ 0xa97c, 0x7912, 0xa980, 0x7916, 0x0005, 0xa984, 0x7902, 0xa988,
++ 0x7906, 0xa98c, 0x7912, 0xa990, 0x7916, 0x0005, 0xa994, 0x7902,
++ 0xa998, 0x7906, 0xa99c, 0x7912, 0xa9a0, 0x7916, 0x0005, 0x00f6,
++ 0x00e6, 0x0086, 0x2071, 0x1a33, 0x2079, 0x0090, 0x792c, 0xd1fc,
++ 0x01f0, 0x782b, 0x0002, 0x2940, 0x9026, 0x7000, 0x0002, 0x3ba7,
++ 0x3b92, 0x3b9e, 0x8001, 0x7002, 0xd19c, 0x1188, 0x2011, 0x0001,
++ 0x080c, 0x3b2b, 0x0160, 0x080c, 0x3b2b, 0x0048, 0x8001, 0x7002,
++ 0x782c, 0xd0fc, 0x1d30, 0x2011, 0x0001, 0x080c, 0x3b2b, 0x008e,
++ 0x00ee, 0x00fe, 0x0005, 0x00f6, 0x00e6, 0x00c6, 0x0086, 0x2061,
++ 0x0200, 0x2001, 0x1977, 0x2004, 0x601a, 0x2061, 0x0100, 0x2001,
++ 0x1976, 0x2004, 0x60ce, 0x6104, 0xc1ac, 0x6106, 0x2001, 0x002c,
++ 0x2004, 0x9005, 0x0518, 0x2038, 0x2001, 0x002e, 0x2024, 0x2001,
++ 0x002f, 0x201c, 0x080c, 0x441f, 0xa813, 0x0019, 0xaf16, 0x2900,
++ 0xa85a, 0x978a, 0x0007, 0x0220, 0x2138, 0x2009, 0x0007, 0x0010,
++ 0x2708, 0x903e, 0x0096, 0xa858, 0x2048, 0xa85c, 0x9080, 0x0019,
++ 0x009e, 0x04c1, 0x1d70, 0x2900, 0xa85a, 0x0080, 0x080c, 0x441f,
++ 0xa813, 0x0019, 0xa817, 0x0001, 0x2900, 0xa85a, 0x2001, 0x002e,
++ 0x2004, 0xa866, 0x2001, 0x002f, 0x2004, 0xa86a, 0x2061, 0x0090,
++ 0x2079, 0x0100, 0x2001, 0x1976, 0x2004, 0x6036, 0x2009, 0x0040,
++ 0x080c, 0x2014, 0x2001, 0x002a, 0x2004, 0x9084, 0xfff8, 0xa86e,
++ 0x601a, 0x0006, 0x2001, 0x002b, 0x2004, 0xa872, 0x601e, 0x78c6,
++ 0x000e, 0x78ca, 0x9006, 0x600a, 0x600e, 0x008e, 0x00ce, 0x00ee,
++ 0x00fe, 0x0005, 0x00e6, 0x2071, 0x0080, 0xaa60, 0x22e8, 0x20a0,
++ 0x20e1, 0x0000, 0x2099, 0x0088, 0x702b, 0x0026, 0x7402, 0x7306,
++ 0x9006, 0x700a, 0x700e, 0x810b, 0x810b, 0x21a8, 0x810b, 0x7112,
++ 0x702b, 0x0041, 0x702c, 0xd0fc, 0x0de8, 0x702b, 0x0002, 0x702b,
++ 0x0040, 0x4005, 0x7400, 0x7304, 0x87ff, 0x0190, 0x0086, 0x0096,
++ 0x2940, 0x0086, 0x080c, 0x441f, 0x008e, 0xa058, 0x00a6, 0x2050,
++ 0x2900, 0xb006, 0xa05a, 0x00ae, 0x009e, 0x008e, 0x9085, 0x0001,
++ 0x00ee, 0x0005, 0x00e6, 0x2001, 0x002d, 0x2004, 0x9005, 0x0528,
++ 0x2038, 0x2001, 0x0030, 0x2024, 0x2001, 0x0031, 0x201c, 0x080c,
++ 0x441f, 0x2940, 0xa813, 0x0019, 0xaf16, 0x2900, 0xa85a, 0x978a,
++ 0x0007, 0x0220, 0x2138, 0x2009, 0x0007, 0x0010, 0x2708, 0x903e,
++ 0x0096, 0xa858, 0x2048, 0xa85c, 0x9080, 0x0019, 0x009e, 0x080c,
++ 0x3c1a, 0x1d68, 0x2900, 0xa85a, 0x00d8, 0x080c, 0x441f, 0x2940,
++ 0xa013, 0x0019, 0xa017, 0x0001, 0x2800, 0xa05a, 0x2001, 0x0030,
++ 0x2004, 0xa066, 0x2001, 0x0031, 0x2004, 0xa06a, 0x2001, 0x002a,
++ 0x2004, 0x9084, 0xfff8, 0xa06e, 0x2001, 0x002b, 0x2004, 0xa072,
++ 0x2001, 0x032a, 0x2003, 0x0004, 0x7884, 0xd0ac, 0x1180, 0x2001,
++ 0x0101, 0x200c, 0x918d, 0x0200, 0x2102, 0xa017, 0x0000, 0x2001,
++ 0x1a30, 0x2003, 0x0003, 0x2001, 0x032a, 0x2003, 0x0009, 0x2001,
++ 0x0300, 0x2003, 0x0000, 0x2001, 0x020d, 0x2003, 0x0000, 0x2001,
++ 0x0004, 0x200c, 0x918d, 0x0002, 0x2102, 0x00ee, 0x0005, 0x0126,
++ 0x2091, 0x8000, 0x20a9, 0x0012, 0x2001, 0x1840, 0x20e9, 0x0001,
++ 0x20a0, 0x9006, 0x4004, 0x2009, 0x013c, 0x200a, 0x012e, 0x7880,
++ 0x9086, 0x0052, 0x0108, 0x0005, 0x0804, 0x305f, 0x7d98, 0x7c9c,
++ 0x0804, 0x3154, 0x080c, 0x6877, 0x0110, 0x080c, 0x569e, 0x2069,
++ 0x1852, 0x2d00, 0x2009, 0x0030, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98,
++ 0x2039, 0x0001, 0x080c, 0x4468, 0x701b, 0x3cef, 0x0005, 0x080c,
++ 0x4df9, 0x1130, 0x3b00, 0x3a08, 0xc194, 0xc095, 0x20d8, 0x21d0,
++ 0x2069, 0x1852, 0x6800, 0x9005, 0x0904, 0x3092, 0x6804, 0xd0ac,
++ 0x0118, 0xd0a4, 0x0904, 0x3092, 0xd094, 0x00c6, 0x2061, 0x0100,
++ 0x6104, 0x0138, 0x6200, 0x9292, 0x0005, 0x0218, 0x918c, 0xffdf,
++ 0x0010, 0x918d, 0x0020, 0x6106, 0x00ce, 0xd08c, 0x00c6, 0x2061,
++ 0x0100, 0x6104, 0x0118, 0x918d, 0x0010, 0x0010, 0x918c, 0xffef,
++ 0x6106, 0x00ce, 0xd084, 0x0158, 0x6a28, 0x928a, 0x007f, 0x1a04,
++ 0x3092, 0x9288, 0x2e6e, 0x210d, 0x918c, 0x00ff, 0x615e, 0xd0dc,
++ 0x0130, 0x6828, 0x908a, 0x007f, 0x1a04, 0x3092, 0x6056, 0x6888,
++ 0x9084, 0x0030, 0x8004, 0x8004, 0x8004, 0x8004, 0x0006, 0x2009,
++ 0x197e, 0x9080, 0x2539, 0x2005, 0x200a, 0x000e, 0x2009, 0x197f,
++ 0x9080, 0x253d, 0x2005, 0x200a, 0x6808, 0x908a, 0x0100, 0x0a04,
++ 0x3092, 0x908a, 0x0841, 0x1a04, 0x3092, 0x9084, 0x0007, 0x1904,
++ 0x3092, 0x680c, 0x9005, 0x0904, 0x3092, 0x6810, 0x9005, 0x0904,
++ 0x3092, 0x6848, 0x6940, 0x910a, 0x1a04, 0x3092, 0x8001, 0x0904,
++ 0x3092, 0x684c, 0x6944, 0x910a, 0x1a04, 0x3092, 0x8001, 0x0904,
++ 0x3092, 0x6980, 0xd1e4, 0x0140, 0x00c6, 0x2061, 0x0100, 0x6004,
++ 0x9085, 0x0100, 0x6006, 0x00ce, 0x2009, 0x194e, 0x200b, 0x0000,
++ 0x2001, 0x1874, 0x2004, 0xd0c4, 0x0140, 0x7884, 0x200a, 0x2009,
++ 0x017f, 0x200a, 0x3b00, 0xc085, 0x20d8, 0x6814, 0x908c, 0x00ff,
++ 0x6146, 0x8007, 0x9084, 0x00ff, 0x604a, 0x080c, 0x6b71, 0x080c,
++ 0x5f63, 0x080c, 0x5f97, 0x6808, 0x602a, 0x080c, 0x1f86, 0x2009,
++ 0x0170, 0x200b, 0x0080, 0xa001, 0xa001, 0x200b, 0x0000, 0x0036,
++ 0x6b08, 0x080c, 0x24a0, 0x003e, 0x6000, 0x9086, 0x0000, 0x1904,
++ 0x3e96, 0x6818, 0x691c, 0x6a20, 0x6b24, 0x8007, 0x810f, 0x8217,
++ 0x831f, 0x6016, 0x611a, 0x621e, 0x6322, 0x6c04, 0xd4f4, 0x0148,
++ 0x6830, 0x6934, 0x6a38, 0x6b3c, 0x8007, 0x810f, 0x8217, 0x831f,
++ 0x0010, 0x9084, 0xf0ff, 0x6006, 0x610a, 0x620e, 0x6312, 0x8007,
++ 0x810f, 0x8217, 0x831f, 0x20a9, 0x0004, 0x20a1, 0x1980, 0x20e9,
++ 0x0001, 0x4001, 0x20a9, 0x0004, 0x20a1, 0x199a, 0x20e9, 0x0001,
++ 0x4001, 0x080c, 0x791c, 0x00c6, 0x900e, 0x20a9, 0x0001, 0x6b70,
++ 0xd384, 0x0510, 0x0068, 0x2009, 0x0100, 0x210c, 0x918e, 0x0008,
++ 0x1110, 0x839d, 0x0010, 0x83f5, 0x3e18, 0x12b0, 0x3508, 0x8109,
++ 0x080c, 0x70f4, 0x6878, 0x6016, 0x6874, 0x2008, 0x9084, 0xff00,
++ 0x8007, 0x600a, 0x9184, 0x00ff, 0x6006, 0x8108, 0x1118, 0x6003,
++ 0x0003, 0x0010, 0x6003, 0x0001, 0x1f04, 0x3deb, 0x00ce, 0x00c6,
++ 0x2061, 0x1969, 0x6a88, 0x9284, 0xc000, 0x2010, 0x9286, 0x0000,
++ 0x1158, 0x2063, 0x0000, 0x2001, 0x0001, 0x080c, 0x2747, 0x2001,
++ 0x0001, 0x080c, 0x272a, 0x0088, 0x9286, 0x4000, 0x1148, 0x2063,
++ 0x0001, 0x9006, 0x080c, 0x2747, 0x9006, 0x080c, 0x272a, 0x0028,
++ 0x9286, 0x8000, 0x1d30, 0x2063, 0x0002, 0x00ce, 0x00e6, 0x2c70,
++ 0x080c, 0x0e3b, 0x00ee, 0x6888, 0xd0ec, 0x0130, 0x2011, 0x0114,
++ 0x2204, 0x9085, 0x0100, 0x2012, 0x6a80, 0x9284, 0x0030, 0x9086,
++ 0x0030, 0x1128, 0x9294, 0xffcf, 0x9295, 0x0020, 0x6a82, 0x2001,
++ 0x194b, 0x6a80, 0x9294, 0x0030, 0x928e, 0x0000, 0x0170, 0x928e,
++ 0x0010, 0x0118, 0x928e, 0x0020, 0x0140, 0x2003, 0xaaaa, 0x080c,
++ 0x2515, 0x2001, 0x193c, 0x2102, 0x0008, 0x2102, 0x00c6, 0x2061,
++ 0x0100, 0x602f, 0x0040, 0x602f, 0x0000, 0x00ce, 0x080c, 0x6877,
++ 0x0128, 0x080c, 0x46fa, 0x0110, 0x080c, 0x2466, 0x60d0, 0x9005,
++ 0x01c0, 0x6003, 0x0001, 0x2009, 0x3e7e, 0x00d0, 0x080c, 0x6877,
++ 0x1168, 0x2011, 0x6739, 0x080c, 0x781a, 0x2011, 0x672c, 0x080c,
++ 0x78e7, 0x080c, 0x6b45, 0x080c, 0x67be, 0x0040, 0x080c, 0x55a0,
++ 0x0028, 0x6003, 0x0004, 0x2009, 0x3e96, 0x0010, 0x0804, 0x305f,
++ 0x2001, 0x0170, 0x2004, 0x9084, 0x00ff, 0x9086, 0x004c, 0x1118,
++ 0x2091, 0x30bd, 0x0817, 0x2091, 0x303d, 0x0817, 0x6000, 0x9086,
++ 0x0000, 0x0904, 0x308f, 0x2069, 0x1852, 0x7890, 0x6842, 0x7894,
++ 0x6846, 0x2d00, 0x2009, 0x0030, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98,
++ 0x2039, 0x0001, 0x0804, 0x446b, 0x9006, 0x080c, 0x2466, 0x81ff,
++ 0x1904, 0x308f, 0x080c, 0x6877, 0x1168, 0x080c, 0x6b40, 0x080c,
++ 0x56d9, 0x080c, 0x2e69, 0x0118, 0x6130, 0xc18d, 0x6132, 0x080c,
++ 0x67be, 0x0020, 0x080c, 0x569e, 0x080c, 0x55a0, 0x0804, 0x305f,
++ 0x81ff, 0x1904, 0x308f, 0x080c, 0x6877, 0x1110, 0x0804, 0x308f,
++ 0x618c, 0x81ff, 0x01a8, 0x704b, 0x0000, 0x2001, 0x1c80, 0x2009,
++ 0x0040, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0x0126, 0x2091, 0x8000,
++ 0x2039, 0x0001, 0x080c, 0x446b, 0x701b, 0x305d, 0x012e, 0x0005,
++ 0x704b, 0x0001, 0x00d6, 0x2069, 0x1c80, 0x20a9, 0x0040, 0x20e9,
++ 0x0001, 0x20a1, 0x1c80, 0x2019, 0xffff, 0x4304, 0x6554, 0x9588,
++ 0x2e6e, 0x210d, 0x918c, 0x00ff, 0x216a, 0x900e, 0x2011, 0x0002,
++ 0x2100, 0x9506, 0x01a8, 0x080c, 0x5c0d, 0x1190, 0xb814, 0x821c,
++ 0x0238, 0x9398, 0x1c80, 0x9085, 0xff00, 0x8007, 0x201a, 0x0038,
++ 0x9398, 0x1c80, 0x2324, 0x94a4, 0xff00, 0x9405, 0x201a, 0x8210,
++ 0x8108, 0x9182, 0x0080, 0x1208, 0x0c18, 0x8201, 0x8007, 0x2d0c,
++ 0x9105, 0x206a, 0x00de, 0x20a9, 0x0040, 0x20a1, 0x1c80, 0x2099,
++ 0x1c80, 0x080c, 0x5634, 0x0804, 0x3ee5, 0x080c, 0x4452, 0x0904,
++ 0x3092, 0x080c, 0x441f, 0x1120, 0x2009, 0x0002, 0x0804, 0x308f,
++ 0x080c, 0x4dea, 0xd0b4, 0x0558, 0x7884, 0x908e, 0x007e, 0x0538,
++ 0x908e, 0x007f, 0x0520, 0x908e, 0x0080, 0x0508, 0x080c, 0x2e64,
++ 0x1148, 0xb800, 0xd08c, 0x11d8, 0xb804, 0x9084, 0x00ff, 0x9086,
++ 0x0006, 0x11a8, 0xa867, 0x0000, 0xa868, 0xc0fd, 0xa86a, 0x080c,
++ 0xb258, 0x1120, 0x2009, 0x0003, 0x0804, 0x308f, 0x7007, 0x0003,
++ 0x701b, 0x3f73, 0x0005, 0x080c, 0x4452, 0x0904, 0x3092, 0x20a9,
++ 0x002b, 0xb8b4, 0x20e0, 0xb8b8, 0x2098, 0xa860, 0x20e8, 0xa85c,
++ 0x9080, 0x0002, 0x20a0, 0x4003, 0x20a9, 0x0008, 0x9080, 0x0006,
++ 0x20a0, 0xb8b4, 0x20e0, 0xb8b8, 0x9080, 0x0006, 0x2098, 0x080c,
++ 0x0f2b, 0x0070, 0x20a9, 0x0004, 0xa85c, 0x9080, 0x000a, 0x20a0,
++ 0xb8b4, 0x20e0, 0xb8b8, 0x9080, 0x000a, 0x2098, 0x080c, 0x0f2b,
++ 0x8906, 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080,
++ 0x0002, 0x2009, 0x002b, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0x0804,
++ 0x446b, 0x81ff, 0x1904, 0x308f, 0x080c, 0x4436, 0x0904, 0x3092,
++ 0x080c, 0x5d7f, 0x0904, 0x308f, 0x0058, 0xa878, 0x9005, 0x0120,
++ 0x2009, 0x0004, 0x0804, 0x308f, 0xa974, 0xaa94, 0x0804, 0x305f,
++ 0x080c, 0x4df2, 0x0904, 0x305f, 0x701b, 0x3fbd, 0x7007, 0x0003,
++ 0x0005, 0x81ff, 0x1904, 0x308f, 0x7888, 0x908a, 0x1000, 0x1a04,
++ 0x3092, 0x080c, 0x4452, 0x0904, 0x3092, 0x080c, 0x5e04, 0x0904,
++ 0x308f, 0x2019, 0x0004, 0x900e, 0x080c, 0x5d91, 0x0904, 0x308f,
++ 0x7984, 0x7a88, 0x0499, 0x08e0, 0xa89c, 0x908a, 0x1000, 0x12c8,
++ 0x080c, 0x4450, 0x01b0, 0x080c, 0x5e04, 0x2009, 0x0002, 0x0168,
++ 0x2009, 0x0002, 0x2019, 0x0004, 0x080c, 0x5d91, 0x2009, 0x0003,
++ 0x0120, 0xa998, 0xaa9c, 0x00d1, 0x0060, 0xa897, 0x4005, 0xa99a,
++ 0x0010, 0xa897, 0x4006, 0x900e, 0x9085, 0x0001, 0x2001, 0x0030,
++ 0x0005, 0xa897, 0x4000, 0x080c, 0x4df2, 0x0110, 0x9006, 0x0018,
++ 0x900e, 0x9085, 0x0001, 0x2001, 0x0000, 0x0005, 0x9186, 0x00ff,
++ 0x0110, 0x0071, 0x0060, 0x2029, 0x007e, 0x2061, 0x1800, 0x6454,
++ 0x2400, 0x9506, 0x0110, 0x2508, 0x0019, 0x8529, 0x1ec8, 0x0005,
++ 0x080c, 0x5c0d, 0x1138, 0x2200, 0x8003, 0x800b, 0x810b, 0x9108,
++ 0x080c, 0x7826, 0x0005, 0x81ff, 0x1904, 0x308f, 0x080c, 0x4436,
++ 0x0904, 0x3092, 0x080c, 0x5cd4, 0x0904, 0x308f, 0x080c, 0x5d88,
++ 0x0904, 0x308f, 0x0804, 0x3fc8, 0x81ff, 0x1904, 0x308f, 0x080c,
++ 0x4436, 0x0904, 0x3092, 0x080c, 0x5cd4, 0x0904, 0x308f, 0x080c,
++ 0x5d76, 0x0904, 0x308f, 0x0804, 0x3fc8, 0x6100, 0x0804, 0x305f,
++ 0x080c, 0x4452, 0x0904, 0x3092, 0x080c, 0x4dfe, 0x1904, 0x308f,
++ 0x79a8, 0xd184, 0x1158, 0xb834, 0x8007, 0x789e, 0xb830, 0x8007,
++ 0x789a, 0xbb2c, 0x831f, 0xba28, 0x8217, 0x0050, 0xb824, 0x8007,
++ 0x789e, 0xb820, 0x8007, 0x789a, 0xbb1c, 0x831f, 0xba18, 0x8217,
++ 0xb900, 0x918c, 0x0200, 0x0804, 0x305f, 0x78a8, 0x909c, 0x0003,
++ 0xd0b4, 0x1150, 0x939a, 0x0003, 0x1a04, 0x308f, 0x6254, 0x9294,
++ 0x00ff, 0x7884, 0x9206, 0x1560, 0x2031, 0x1848, 0x2009, 0x013c,
++ 0x2136, 0x2001, 0x1840, 0x2009, 0x000c, 0x7a8c, 0x7b88, 0x7c9c,
++ 0x7d98, 0x2039, 0x0001, 0x0006, 0x78a8, 0x9084, 0x0080, 0x1118,
++ 0x000e, 0x0804, 0x446b, 0x000e, 0x2031, 0x0000, 0x2061, 0x18ac,
++ 0x2c44, 0xa66a, 0xa17a, 0xa772, 0xa076, 0xa28e, 0xa392, 0xa496,
++ 0xa59a, 0x080c, 0x108c, 0x7007, 0x0002, 0x701b, 0x40df, 0x0005,
++ 0x81ff, 0x1904, 0x308f, 0x080c, 0x4452, 0x0904, 0x3092, 0x080c,
++ 0x5f2d, 0x1904, 0x308f, 0x00c6, 0x080c, 0x441f, 0x00ce, 0x0904,
++ 0x308f, 0xa867, 0x0000, 0xa868, 0xc0fd, 0xa86a, 0x080c, 0xb1fe,
++ 0x0904, 0x308f, 0x7007, 0x0003, 0x701b, 0x40e3, 0x0005, 0x080c,
++ 0x3cbf, 0x0804, 0x305f, 0xa830, 0x9086, 0x0100, 0x0904, 0x308f,
++ 0x8906, 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080,
++ 0x001b, 0x2009, 0x000c, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0x0804,
++ 0x446b, 0x9006, 0x080c, 0x2466, 0x78a8, 0x9084, 0x00ff, 0x9086,
++ 0x00ff, 0x0118, 0x81ff, 0x1904, 0x308f, 0x080c, 0x6877, 0x0110,
++ 0x080c, 0x569e, 0x7888, 0x908a, 0x1000, 0x1a04, 0x3092, 0x7984,
++ 0x9186, 0x00ff, 0x0138, 0x9182, 0x007f, 0x1a04, 0x3092, 0x2100,
++ 0x080c, 0x2430, 0x0026, 0x00c6, 0x0126, 0x2091, 0x8000, 0x2061,
++ 0x19c7, 0x601b, 0x0000, 0x601f, 0x0000, 0x080c, 0x6877, 0x1158,
++ 0x080c, 0x6b40, 0x080c, 0x56d9, 0x9085, 0x0001, 0x080c, 0x68c0,
++ 0x080c, 0x67be, 0x00d0, 0x080c, 0x94da, 0x2061, 0x0100, 0x2001,
++ 0x1816, 0x2004, 0x9084, 0x00ff, 0x810f, 0x9105, 0x604a, 0x6043,
++ 0x0090, 0x6043, 0x0010, 0x2009, 0x1966, 0x200b, 0x0000, 0x2009,
++ 0x002d, 0x2011, 0x55ca, 0x080c, 0x78a5, 0x7984, 0x080c, 0x6877,
++ 0x1110, 0x2009, 0x00ff, 0x7a88, 0x080c, 0x401e, 0x012e, 0x00ce,
++ 0x002e, 0x0804, 0x305f, 0x7984, 0x080c, 0x5bb0, 0x2b08, 0x1904,
++ 0x3092, 0x0804, 0x305f, 0x81ff, 0x0120, 0x2009, 0x0001, 0x0804,
++ 0x308f, 0x60d8, 0xd0ac, 0x1130, 0xd09c, 0x1120, 0x2009, 0x0005,
++ 0x0804, 0x308f, 0x080c, 0x441f, 0x1120, 0x2009, 0x0002, 0x0804,
++ 0x308f, 0x7984, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0xa85c, 0x9080,
++ 0x0019, 0x7026, 0xaf60, 0x7732, 0x080c, 0x4468, 0x701b, 0x4189,
++ 0x0005, 0x2009, 0x0080, 0x080c, 0x5c0d, 0x1118, 0x080c, 0x5f2d,
++ 0x0120, 0x2021, 0x400a, 0x0804, 0x3061, 0x00d6, 0x0096, 0xa964,
++ 0xaa6c, 0xab70, 0xac74, 0xad78, 0xae7c, 0xa884, 0x90be, 0x0100,
++ 0x0904, 0x4222, 0x90be, 0x0112, 0x0904, 0x4222, 0x90be, 0x0113,
++ 0x0904, 0x4222, 0x90be, 0x0114, 0x0904, 0x4222, 0x90be, 0x0117,
++ 0x0904, 0x4222, 0x90be, 0x011a, 0x0904, 0x4222, 0x90be, 0x011c,
++ 0x0904, 0x4222, 0x90be, 0x0121, 0x0904, 0x4209, 0x90be, 0x0131,
++ 0x0904, 0x4209, 0x90be, 0x0171, 0x0904, 0x4222, 0x90be, 0x0173,
++ 0x0904, 0x4222, 0x90be, 0x01a1, 0x1128, 0xa894, 0x8007, 0xa896,
++ 0x0804, 0x422d, 0x90be, 0x0212, 0x0904, 0x4216, 0x90be, 0x0213,
++ 0x05e8, 0x90be, 0x0214, 0x0500, 0x90be, 0x0217, 0x0188, 0x90be,
++ 0x021a, 0x1120, 0xa89c, 0x8007, 0xa89e, 0x04e0, 0x90be, 0x021f,
++ 0x05c8, 0x90be, 0x0300, 0x05b0, 0x009e, 0x00de, 0x0804, 0x3092,
++ 0x7024, 0x9080, 0x0010, 0x2098, 0x20a0, 0x7030, 0x20e0, 0x20e8,
++ 0x20a9, 0x0007, 0x080c, 0x426b, 0x7024, 0x9080, 0x000e, 0x2098,
++ 0x20a0, 0x7030, 0x20e0, 0x20e8, 0x20a9, 0x0001, 0x080c, 0x426b,
++ 0x00c8, 0x7024, 0x9080, 0x000c, 0x2098, 0x20a0, 0x7030, 0x20e0,
++ 0x20e8, 0x20a9, 0x0001, 0x080c, 0x4278, 0x00b8, 0x7024, 0x9080,
++ 0x000e, 0x2098, 0x20a0, 0x7030, 0x20e0, 0x20e8, 0x20a9, 0x0001,
++ 0x080c, 0x4278, 0x7024, 0x9080, 0x000c, 0x2098, 0x20a0, 0x7030,
++ 0x20e0, 0x20e8, 0x20a9, 0x0001, 0x04f1, 0x00c6, 0x080c, 0x441f,
++ 0x0550, 0xa868, 0xc0fd, 0xa86a, 0xa867, 0x0119, 0x9006, 0xa882,
++ 0xa87f, 0x0020, 0xa88b, 0x0001, 0x810b, 0xa9ae, 0xa8b2, 0xaab6,
++ 0xabba, 0xacbe, 0xadc2, 0xa9c6, 0xa8ca, 0x00ce, 0x009e, 0x00de,
++ 0xa866, 0xa822, 0xa868, 0xc0fd, 0xa86a, 0xa804, 0x2048, 0x080c,
++ 0xb219, 0x1120, 0x2009, 0x0003, 0x0804, 0x308f, 0x7007, 0x0003,
++ 0x701b, 0x4262, 0x0005, 0x00ce, 0x009e, 0x00de, 0x2009, 0x0002,
++ 0x0804, 0x308f, 0xa820, 0x9086, 0x8001, 0x1904, 0x305f, 0x2009,
++ 0x0004, 0x0804, 0x308f, 0x0016, 0x0026, 0x3510, 0x20a9, 0x0002,
++ 0x4002, 0x4104, 0x4004, 0x8211, 0x1dc8, 0x002e, 0x001e, 0x0005,
++ 0x0016, 0x0026, 0x0036, 0x0046, 0x3520, 0x20a9, 0x0004, 0x4002,
++ 0x4304, 0x4204, 0x4104, 0x4004, 0x8421, 0x1db8, 0x004e, 0x003e,
++ 0x002e, 0x001e, 0x0005, 0x81ff, 0x0120, 0x2009, 0x0001, 0x0804,
++ 0x308f, 0x60d8, 0xd0ac, 0x1130, 0xd09c, 0x1120, 0x2009, 0x0005,
++ 0x0804, 0x308f, 0x7984, 0x78a8, 0x2040, 0x080c, 0x94d3, 0x1120,
++ 0x9182, 0x007f, 0x0a04, 0x3092, 0x9186, 0x00ff, 0x0904, 0x3092,
++ 0x9182, 0x0800, 0x1a04, 0x3092, 0x7a8c, 0x7b88, 0x6074, 0x9306,
++ 0x1140, 0x6078, 0x924e, 0x0904, 0x3092, 0x99cc, 0xff00, 0x0904,
++ 0x3092, 0x080c, 0x435a, 0x0538, 0x90c6, 0x4000, 0x1170, 0x00c6,
++ 0x0006, 0x900e, 0x080c, 0x5e2d, 0x1108, 0xc185, 0xb800, 0xd0bc,
++ 0x0108, 0xc18d, 0x000e, 0x00ce, 0x0098, 0x90c6, 0x4007, 0x1110,
++ 0x2408, 0x0070, 0x90c6, 0x4008, 0x1118, 0x2708, 0x2610, 0x0040,
++ 0x90c6, 0x4009, 0x1108, 0x0020, 0x2001, 0x4005, 0x2009, 0x000a,
++ 0x2020, 0x0804, 0x3061, 0x2b00, 0x7022, 0x0016, 0x00b6, 0x00c6,
++ 0x00e6, 0x2c70, 0x080c, 0x95a1, 0x0904, 0x4330, 0x2b00, 0x6012,
++ 0x080c, 0xb4e6, 0x2e58, 0x00ee, 0x00e6, 0x00c6, 0x080c, 0x441f,
++ 0x00ce, 0x2b70, 0x1150, 0x080c, 0x9554, 0x00ee, 0x00ce, 0x00be,
++ 0x001e, 0x2009, 0x0002, 0x0804, 0x308f, 0x900e, 0xa966, 0xa96a,
++ 0x2900, 0x6016, 0xa932, 0xa868, 0xc0fd, 0xd88c, 0x0108, 0xc0f5,
++ 0xa86a, 0x0126, 0x2091, 0x8000, 0x080c, 0x2d1a, 0x012e, 0x6023,
++ 0x0001, 0x9006, 0x080c, 0x5b4d, 0x2001, 0x0002, 0x080c, 0x5b61,
++ 0x2009, 0x0002, 0x080c, 0x95ce, 0x78a8, 0xd094, 0x0138, 0x00ee,
++ 0x7020, 0x00e6, 0x2058, 0xb8bc, 0xc08d, 0xb8be, 0x9085, 0x0001,
++ 0x00ee, 0x00ce, 0x00be, 0x001e, 0x1120, 0x2009, 0x0003, 0x0804,
++ 0x308f, 0x7007, 0x0003, 0x701b, 0x433e, 0x0005, 0xa830, 0x9086,
++ 0x0100, 0x7020, 0x2058, 0x1138, 0x2009, 0x0004, 0xba04, 0x9294,
++ 0x00ff, 0x0804, 0x4d49, 0x900e, 0xa868, 0xd0f4, 0x1904, 0x305f,
++ 0x080c, 0x5e2d, 0x1108, 0xc185, 0xb800, 0xd0bc, 0x0108, 0xc18d,
++ 0x0804, 0x305f, 0x00e6, 0x00d6, 0x2029, 0x0000, 0x080c, 0x94d3,
++ 0x0138, 0x2021, 0x0000, 0x20a9, 0x0800, 0x2071, 0x1000, 0x0030,
++ 0x2021, 0x0080, 0x20a9, 0x0780, 0x2071, 0x1080, 0x2e04, 0x9005,
++ 0x1130, 0x2100, 0x9406, 0x1550, 0x2428, 0xc5fd, 0x0438, 0x2058,
++ 0xbf10, 0x2700, 0x9306, 0x11a0, 0xbe14, 0x2600, 0x9206, 0x1180,
++ 0x2400, 0x9106, 0x1150, 0xd884, 0x0550, 0xd894, 0x1540, 0x080c,
++ 0x5f2d, 0x1528, 0x2001, 0x4000, 0x0418, 0x2001, 0x4007, 0x0400,
++ 0x2400, 0x9106, 0x1158, 0xbe14, 0x87ff, 0x1128, 0x86ff, 0x09e0,
++ 0x080c, 0x94d3, 0x19c8, 0x2001, 0x4008, 0x0090, 0x8420, 0x8e70,
++ 0x1f04, 0x436e, 0x85ff, 0x1130, 0x2001, 0x4009, 0x0048, 0x2001,
++ 0x0001, 0x0030, 0x080c, 0x5bb0, 0x1dd0, 0xbb12, 0xba16, 0x9006,
++ 0x9005, 0x00de, 0x00ee, 0x0005, 0x81ff, 0x1904, 0x308f, 0x080c,
++ 0x441f, 0x0904, 0x308f, 0xa867, 0x0000, 0xa868, 0xc0fd, 0xa86a,
++ 0x7884, 0x9005, 0x0904, 0x3092, 0x9096, 0x00ff, 0x0120, 0x9092,
++ 0x0004, 0x1a04, 0x3092, 0x2010, 0x2918, 0x080c, 0x2cc0, 0x0904,
++ 0x308f, 0x7007, 0x0003, 0x701b, 0x43d6, 0x0005, 0xa830, 0x9086,
++ 0x0100, 0x0904, 0x308f, 0x0804, 0x305f, 0x7984, 0x080c, 0x94d3,
++ 0x1120, 0x9182, 0x0080, 0x0a04, 0x3092, 0x9186, 0x00ff, 0x0904,
++ 0x3092, 0x9182, 0x0800, 0x1a04, 0x3092, 0x2001, 0x9000, 0x080c,
++ 0x4da2, 0x1904, 0x308f, 0x0804, 0x305f, 0xa998, 0x080c, 0x94d3,
++ 0x1118, 0x9182, 0x0080, 0x0280, 0x9186, 0x00ff, 0x0168, 0x9182,
++ 0x0800, 0x1250, 0x2001, 0x9000, 0x080c, 0x4da2, 0x11a8, 0x0060,
++ 0xa897, 0x4005, 0xa99a, 0x0010, 0xa897, 0x4006, 0x900e, 0x9085,
++ 0x0001, 0x2001, 0x0030, 0x0005, 0xa897, 0x4000, 0x900e, 0x9085,
++ 0x0001, 0x2001, 0x0000, 0x0005, 0x2009, 0x000a, 0x0c48, 0x080c,
++ 0x0fae, 0x0198, 0x9006, 0xa802, 0x7010, 0x9005, 0x1120, 0x2900,
++ 0x7012, 0x7016, 0x0040, 0x7014, 0xa802, 0x0086, 0x2040, 0x2900,
++ 0xa006, 0x7016, 0x008e, 0x9085, 0x0001, 0x0005, 0x7984, 0x080c,
++ 0x5c0d, 0x1130, 0x7e88, 0x9684, 0x3fff, 0x9082, 0x4000, 0x0208,
++ 0x905e, 0x8bff, 0x0005, 0xa998, 0x080c, 0x5c0d, 0x1130, 0xae9c,
++ 0x9684, 0x3fff, 0x9082, 0x4000, 0x0208, 0x905e, 0x8bff, 0x0005,
++ 0xae98, 0x0008, 0x7e84, 0x2608, 0x080c, 0x5c0d, 0x1108, 0x0008,
++ 0x905e, 0x8bff, 0x0005, 0x0016, 0x7110, 0x81ff, 0x0128, 0x2148,
++ 0xa904, 0x080c, 0x0fe0, 0x0cc8, 0x7112, 0x7116, 0x001e, 0x0005,
++ 0x2031, 0x0001, 0x0010, 0x2031, 0x0000, 0x2061, 0x18ac, 0x2c44,
++ 0xa66a, 0xa17a, 0xa772, 0xa076, 0xa28e, 0xa392, 0xa496, 0xa59a,
++ 0x080c, 0x108c, 0x7007, 0x0002, 0x701b, 0x305f, 0x0005, 0x00f6,
++ 0x0126, 0x2091, 0x8000, 0x2079, 0x0000, 0x2001, 0x18a4, 0x2004,
++ 0x9005, 0x1188, 0x0e04, 0x449b, 0x7a36, 0x7833, 0x0012, 0x7a82,
++ 0x7b86, 0x7c8a, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084,
++ 0x190c, 0x113e, 0x0408, 0x0016, 0x00c6, 0x00e6, 0x2071, 0x1893,
++ 0x7144, 0x9182, 0x0010, 0x0218, 0x7034, 0x2060, 0x0078, 0x7034,
++ 0x90e0, 0x0004, 0x9c82, 0x18ee, 0x0210, 0x2061, 0x18ae, 0x2c00,
++ 0x7036, 0x81ff, 0x1108, 0x703a, 0x8108, 0x7146, 0x2262, 0x6306,
++ 0x640a, 0x00ee, 0x00ce, 0x001e, 0x012e, 0x00fe, 0x0005, 0x00e6,
++ 0x2071, 0x1893, 0x7044, 0x9005, 0x0590, 0x0126, 0x2091, 0x8000,
++ 0x0e04, 0x44f6, 0x00f6, 0x2079, 0x0000, 0x00c6, 0x7038, 0x2060,
++ 0x2c04, 0x7836, 0x7833, 0x0012, 0x7882, 0x6004, 0x7886, 0x6008,
++ 0x788a, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c,
++ 0x113e, 0x7044, 0x8001, 0x7046, 0x9005, 0x1130, 0x7037, 0x18ae,
++ 0x703b, 0x18ae, 0x00ce, 0x0048, 0x9c80, 0x0004, 0x90fa, 0x18ee,
++ 0x0210, 0x2001, 0x18ae, 0x703a, 0x00ce, 0x00fe, 0x012e, 0x00ee,
++ 0x0005, 0x0026, 0x080c, 0x4dea, 0xd0c4, 0x0120, 0x2011, 0x8014,
++ 0x080c, 0x447f, 0x002e, 0x0005, 0x81ff, 0x1904, 0x308f, 0x0126,
++ 0x2091, 0x8000, 0x6030, 0xc08d, 0xc085, 0xc0ac, 0x6032, 0x080c,
++ 0x6877, 0x1158, 0x080c, 0x6b40, 0x080c, 0x56d9, 0x9085, 0x0001,
++ 0x080c, 0x68c0, 0x080c, 0x67be, 0x0010, 0x080c, 0x55a0, 0x012e,
++ 0x0804, 0x305f, 0x7884, 0x2008, 0x918c, 0xfffd, 0x1128, 0x61e4,
++ 0x910d, 0x61e6, 0x0804, 0x305f, 0x0804, 0x3092, 0x81ff, 0x1904,
++ 0x308f, 0x080c, 0x4dfe, 0x1904, 0x308f, 0x080c, 0x5f25, 0x1904,
++ 0x308f, 0x080c, 0x2e64, 0x0128, 0x7984, 0x080c, 0x5bb0, 0x1904,
++ 0x3092, 0x080c, 0x4452, 0x0904, 0x3092, 0x2b00, 0x7022, 0x080c,
++ 0x5f2d, 0x7888, 0x1170, 0x9084, 0x0005, 0x1158, 0x900e, 0x080c,
++ 0x5e2d, 0x1108, 0xc185, 0xb800, 0xd0bc, 0x0108, 0xc18d, 0x0804,
++ 0x305f, 0x080c, 0x441f, 0x0904, 0x308f, 0x9006, 0xa866, 0xa832,
++ 0xa868, 0xc0fd, 0xa86a, 0x080c, 0xb2a8, 0x0904, 0x308f, 0x7888,
++ 0xd094, 0x0118, 0xb8bc, 0xc08d, 0xb8be, 0x7007, 0x0003, 0x701b,
++ 0x45bd, 0x0005, 0x2061, 0x1800, 0x080c, 0x4dfe, 0x2009, 0x0007,
++ 0x1570, 0x080c, 0x5f25, 0x2009, 0x0008, 0x1548, 0x080c, 0x2e64,
++ 0x0120, 0xa998, 0x080c, 0x5bb0, 0x1530, 0x080c, 0x4450, 0x0518,
++ 0x080c, 0x5f2d, 0xa89c, 0x1168, 0x9084, 0x0005, 0x1150, 0x900e,
++ 0x080c, 0x5e2d, 0x1108, 0xc185, 0xb800, 0xd0bc, 0x0108, 0xc18d,
++ 0x00d0, 0xa868, 0xc0fc, 0xa86a, 0x080c, 0xb2a8, 0x11e0, 0xa89c,
++ 0xd094, 0x0118, 0xb8bc, 0xc08d, 0xb8be, 0x2009, 0x0003, 0xa897,
++ 0x4005, 0xa99a, 0x0010, 0xa897, 0x4006, 0x900e, 0x9085, 0x0001,
++ 0x2001, 0x0030, 0x0005, 0xa897, 0x4000, 0xa99a, 0x9006, 0x918d,
++ 0x0001, 0x2008, 0x0005, 0x9006, 0x0005, 0xa830, 0x9086, 0x0100,
++ 0x7020, 0x2058, 0x1110, 0x0804, 0x4d49, 0x900e, 0x080c, 0x5e2d,
++ 0x1108, 0xc185, 0xb800, 0xd0bc, 0x0108, 0xc18d, 0x0804, 0x305f,
++ 0x080c, 0x4dfe, 0x1904, 0x308f, 0x7f84, 0x7a8c, 0x7b88, 0x7c9c,
++ 0x7d98, 0x080c, 0x441f, 0x0904, 0x308f, 0x900e, 0x2130, 0x7122,
++ 0x712e, 0xa860, 0x20e8, 0x7032, 0xa85c, 0x9080, 0x0005, 0x7026,
++ 0x20a0, 0x080c, 0x5c0d, 0x1904, 0x464d, 0x080c, 0x5f2d, 0x0120,
++ 0x080c, 0x5f35, 0x1904, 0x464d, 0x080c, 0x5f25, 0x1130, 0x080c,
++ 0x5e2d, 0x1118, 0xd79c, 0x0904, 0x464d, 0xd794, 0x1110, 0xd784,
++ 0x01a8, 0xb8b4, 0x20e0, 0xb8b8, 0x9080, 0x0006, 0x2098, 0x3400,
++ 0xd794, 0x0160, 0x20a9, 0x0008, 0x4003, 0x2098, 0x20a0, 0x3d00,
++ 0x20e0, 0x20a9, 0x0002, 0x080c, 0x4278, 0x0048, 0x20a9, 0x0004,
++ 0x4003, 0x2098, 0x20a0, 0x3d00, 0x20e0, 0x080c, 0x4278, 0x4104,
++ 0xd794, 0x0528, 0xb8b4, 0x20e0, 0xb8b8, 0x2060, 0x9c80, 0x0000,
++ 0x2098, 0x20a9, 0x0002, 0x4003, 0x9c80, 0x0003, 0x2098, 0x20a9,
++ 0x0001, 0x4005, 0x9c80, 0x0004, 0x2098, 0x3400, 0x20a9, 0x0002,
++ 0x4003, 0x2098, 0x20a0, 0x3d00, 0x20e0, 0x080c, 0x426b, 0x9c80,
++ 0x0026, 0x2098, 0xb8b4, 0x20e0, 0x20a9, 0x0002, 0x4003, 0xd794,
++ 0x0110, 0x96b0, 0x000b, 0x96b0, 0x0005, 0x8108, 0x080c, 0x94d3,
++ 0x0118, 0x9186, 0x0800, 0x0040, 0xd78c, 0x0120, 0x9186, 0x0800,
++ 0x0170, 0x0018, 0x9186, 0x007e, 0x0150, 0xd794, 0x0118, 0x9686,
++ 0x0020, 0x0010, 0x9686, 0x0028, 0x0150, 0x0804, 0x45e9, 0x86ff,
++ 0x1120, 0x7120, 0x810b, 0x0804, 0x305f, 0x702f, 0x0001, 0x711e,
++ 0x7020, 0x9600, 0x7022, 0x772a, 0x2061, 0x18ac, 0x2c44, 0xa06b,
++ 0x0000, 0xa67a, 0x7030, 0xa072, 0x7024, 0xa076, 0xa28e, 0xa392,
++ 0xa496, 0xa59a, 0x080c, 0x108c, 0x7007, 0x0002, 0x701b, 0x4689,
++ 0x0005, 0x702c, 0x9005, 0x1180, 0x711c, 0x7024, 0x20a0, 0x7728,
++ 0x9036, 0x7030, 0x20e8, 0x2061, 0x18ac, 0x2c44, 0xa28c, 0xa390,
++ 0xa494, 0xa598, 0x0804, 0x45e9, 0x7120, 0x810b, 0x0804, 0x305f,
++ 0x2029, 0x007e, 0x7984, 0x7a88, 0x7b8c, 0x7c98, 0x9184, 0xff00,
++ 0x8007, 0x90e2, 0x0020, 0x0a04, 0x3092, 0x9502, 0x0a04, 0x3092,
++ 0x9184, 0x00ff, 0x90e2, 0x0020, 0x0a04, 0x3092, 0x9502, 0x0a04,
++ 0x3092, 0x9284, 0xff00, 0x8007, 0x90e2, 0x0020, 0x0a04, 0x3092,
++ 0x9502, 0x0a04, 0x3092, 0x9284, 0x00ff, 0x90e2, 0x0020, 0x0a04,
++ 0x3092, 0x9502, 0x0a04, 0x3092, 0x9384, 0xff00, 0x8007, 0x90e2,
++ 0x0020, 0x0a04, 0x3092, 0x9502, 0x0a04, 0x3092, 0x9384, 0x00ff,
++ 0x90e2, 0x0020, 0x0a04, 0x3092, 0x9502, 0x0a04, 0x3092, 0x9484,
++ 0xff00, 0x8007, 0x90e2, 0x0020, 0x0a04, 0x3092, 0x9502, 0x0a04,
++ 0x3092, 0x9484, 0x00ff, 0x90e2, 0x0020, 0x0a04, 0x3092, 0x9502,
++ 0x0a04, 0x3092, 0x2061, 0x1956, 0x6102, 0x6206, 0x630a, 0x640e,
++ 0x0804, 0x305f, 0x0006, 0x080c, 0x4dea, 0xd0cc, 0x000e, 0x0005,
++ 0x0006, 0x080c, 0x4dee, 0xd0bc, 0x000e, 0x0005, 0x616c, 0x7a84,
++ 0x6300, 0x82ff, 0x1118, 0x7986, 0x0804, 0x305f, 0x83ff, 0x1904,
++ 0x3092, 0x2001, 0xfff0, 0x9200, 0x1a04, 0x3092, 0x2019, 0xffff,
++ 0x6070, 0x9302, 0x9200, 0x0a04, 0x3092, 0x7986, 0x626e, 0x0804,
++ 0x305f, 0x080c, 0x4dfe, 0x1904, 0x308f, 0x7c88, 0x7d84, 0x7e98,
++ 0x7f8c, 0x080c, 0x441f, 0x0904, 0x308f, 0x900e, 0x901e, 0x7322,
++ 0x732e, 0xa860, 0x20e8, 0x7032, 0xa85c, 0x9080, 0x0003, 0x7026,
++ 0x20a0, 0x91d8, 0x1000, 0x2b5c, 0x8bff, 0x0178, 0x080c, 0x5f2d,
++ 0x0118, 0x080c, 0x5f35, 0x1148, 0x20a9, 0x0001, 0xb814, 0x4004,
++ 0xb810, 0x4004, 0x4104, 0x9398, 0x0003, 0x8108, 0x9182, 0x0800,
++ 0x0120, 0x9386, 0x003c, 0x0170, 0x0c20, 0x83ff, 0x1148, 0x7220,
++ 0x900e, 0x2001, 0x0003, 0x080c, 0x7a4b, 0x2208, 0x0804, 0x305f,
++ 0x702f, 0x0001, 0x711e, 0x7020, 0x9300, 0x7022, 0x2061, 0x18ac,
++ 0x2c44, 0xa06b, 0x0000, 0xa37a, 0x7024, 0xa076, 0x7030, 0xa072,
++ 0xa48e, 0xa592, 0xa696, 0xa79a, 0x080c, 0x108c, 0x7007, 0x0002,
++ 0x701b, 0x477b, 0x0005, 0x702c, 0x9005, 0x1178, 0x711c, 0x7024,
++ 0x20a0, 0x901e, 0x7030, 0x20e8, 0x2061, 0x18ac, 0x2c44, 0xa48c,
++ 0xa590, 0xa694, 0xa798, 0x0804, 0x4739, 0x7220, 0x900e, 0x2001,
++ 0x0003, 0x080c, 0x7a4b, 0x2208, 0x0804, 0x305f, 0x00f6, 0x00e6,
++ 0x080c, 0x4dfe, 0x2009, 0x0007, 0x1904, 0x480e, 0x2071, 0x1893,
++ 0x7458, 0x84ff, 0x2009, 0x000e, 0x1904, 0x480e, 0xac9c, 0xad98,
++ 0xaea4, 0xafa0, 0x0096, 0x080c, 0x0fc7, 0x2009, 0x0002, 0x0904,
++ 0x480e, 0x2900, 0x705a, 0x900e, 0x901e, 0x7352, 0x735e, 0xa860,
++ 0x7062, 0xa85c, 0x9080, 0x0003, 0x7056, 0x20a0, 0x91d8, 0x1000,
++ 0x2b5c, 0x8bff, 0x0178, 0x080c, 0x5f2d, 0x0118, 0x080c, 0x5f35,
++ 0x1148, 0xb814, 0x20a9, 0x0001, 0x4004, 0xb810, 0x4004, 0x4104,
++ 0x9398, 0x0003, 0x8108, 0x9182, 0x0800, 0x0120, 0x9386, 0x003c,
++ 0x01e8, 0x0c20, 0x83ff, 0x11c0, 0x7250, 0x900e, 0x2001, 0x0003,
++ 0x080c, 0x7a4b, 0x2208, 0x009e, 0xa897, 0x4000, 0xa99a, 0x7158,
++ 0x81ff, 0x090c, 0x0d84, 0x2148, 0x080c, 0x0fe0, 0x9006, 0x705a,
++ 0x918d, 0x0001, 0x2008, 0x0418, 0x705f, 0x0001, 0x714e, 0x7050,
++ 0x9300, 0x7052, 0x2061, 0x18ad, 0x2c44, 0xa37a, 0x7054, 0xa076,
++ 0x7060, 0xa072, 0xa48e, 0xa592, 0xa696, 0xa79a, 0xa09f, 0x481a,
++ 0x000e, 0xa0a2, 0x080c, 0x108c, 0x9006, 0x0048, 0x009e, 0xa897,
++ 0x4005, 0xa99a, 0x900e, 0x9085, 0x0001, 0x2001, 0x0030, 0x00ee,
++ 0x00fe, 0x0005, 0x00f6, 0xa0a0, 0x904d, 0x090c, 0x0d84, 0x00e6,
++ 0x2071, 0x1893, 0xa06c, 0x908e, 0x0100, 0x0138, 0xa87b, 0x0030,
++ 0xa883, 0x0000, 0xa897, 0x4002, 0x00d8, 0x705c, 0x9005, 0x1158,
++ 0x714c, 0x7054, 0x20a0, 0x901e, 0x7060, 0x20e8, 0xa48c, 0xa590,
++ 0xa694, 0xa798, 0x0428, 0xa87b, 0x0000, 0xa883, 0x0000, 0xa897,
++ 0x4000, 0x7250, 0x900e, 0x2001, 0x0003, 0x080c, 0x7a4b, 0xaa9a,
++ 0x7158, 0x81ff, 0x090c, 0x0d84, 0x2148, 0x080c, 0x0fe0, 0x705b,
++ 0x0000, 0xa0a0, 0x2048, 0x0126, 0x2091, 0x8000, 0x080c, 0x61a9,
++ 0x012e, 0xa09f, 0x0000, 0xa0a3, 0x0000, 0x00ee, 0x00fe, 0x0005,
++ 0x91d8, 0x1000, 0x2b5c, 0x8bff, 0x0178, 0x080c, 0x5f2d, 0x0118,
++ 0x080c, 0x5f35, 0x1148, 0xb814, 0x20a9, 0x0001, 0x4004, 0xb810,
++ 0x4004, 0x4104, 0x9398, 0x0003, 0x8108, 0x9182, 0x0800, 0x0120,
++ 0x9386, 0x003c, 0x0518, 0x0c20, 0x83ff, 0x11f0, 0x7150, 0x810c,
++ 0xa99a, 0xa897, 0x4000, 0x7158, 0x81ff, 0x090c, 0x0d84, 0x2148,
++ 0x080c, 0x0fe0, 0x9006, 0x705a, 0x918d, 0x0001, 0x2008, 0xa0a0,
++ 0x2048, 0x0126, 0x2091, 0x8000, 0x080c, 0x61a9, 0x012e, 0xa09f,
++ 0x0000, 0xa0a3, 0x0000, 0x0070, 0x705f, 0x0001, 0x714e, 0x7050,
++ 0x9300, 0x7052, 0xa37a, 0xa48e, 0xa592, 0xa696, 0xa79a, 0x080c,
++ 0x108c, 0x9006, 0x00ee, 0x0005, 0x81ff, 0x1904, 0x308f, 0x60d8,
++ 0xd0ac, 0x1118, 0xd09c, 0x0904, 0x308f, 0x080c, 0x441f, 0x0904,
++ 0x308f, 0x7984, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0xa85c, 0x9080,
++ 0x0019, 0xaf60, 0x080c, 0x4468, 0x701b, 0x48c7, 0x0005, 0x0096,
++ 0xa88c, 0x90be, 0x7000, 0x0148, 0x90be, 0x7100, 0x0130, 0x90be,
++ 0x7200, 0x0118, 0x009e, 0x0804, 0x3092, 0xa884, 0xa988, 0x080c,
++ 0x23fd, 0x1500, 0x080c, 0x5bb0, 0x11e8, 0x7122, 0xbe12, 0xbd16,
++ 0xae7c, 0x080c, 0x441f, 0x01b0, 0x080c, 0x441f, 0x0198, 0x009e,
++ 0xa867, 0x0000, 0xa868, 0xc0fd, 0xa86a, 0xa887, 0x0000, 0xa804,
++ 0x2048, 0x080c, 0xb239, 0x0904, 0x308f, 0x7007, 0x0003, 0x701b,
++ 0x48fd, 0x0005, 0x009e, 0x0804, 0x308f, 0x7120, 0x080c, 0x2e11,
++ 0xa884, 0x9086, 0x8001, 0x0904, 0x308f, 0x2900, 0x701e, 0xa804,
++ 0x2040, 0x0086, 0xa05c, 0x9080, 0x0002, 0x2098, 0x20a0, 0xa060,
++ 0x20e0, 0x20e8, 0x20a9, 0x002a, 0x080c, 0x0f2b, 0xaa6c, 0xab70,
++ 0xac74, 0xad78, 0x2061, 0x18ac, 0x2c44, 0xa06b, 0x0000, 0xae64,
++ 0xaf8c, 0x97c6, 0x7000, 0x1108, 0x0018, 0x97c6, 0x7100, 0x1190,
++ 0x96c2, 0x0004, 0x0a04, 0x3092, 0x2009, 0x0004, 0x009e, 0x8906,
++ 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080, 0x0002,
++ 0x0804, 0x446b, 0x97c6, 0x7200, 0x1904, 0x3092, 0x96c2, 0x0054,
++ 0x0a04, 0x3092, 0x009e, 0x2061, 0x18ac, 0x2c44, 0x8906, 0x8006,
++ 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080, 0x0002, 0xa076,
++ 0xa772, 0xa07b, 0x002a, 0xa28e, 0xa392, 0xa496, 0xa59a, 0x080c,
++ 0x108c, 0x7007, 0x0002, 0x701b, 0x495e, 0x0005, 0x701c, 0x2048,
++ 0xa804, 0x2048, 0xa804, 0x2048, 0x8906, 0x8006, 0x8007, 0x90bc,
++ 0x003f, 0x9084, 0xffc0, 0x9080, 0x0002, 0x2098, 0x20a0, 0x27e0,
++ 0x27e8, 0x20a9, 0x002a, 0x080c, 0x0f2b, 0x2100, 0x2238, 0x2061,
++ 0x18ac, 0x2c44, 0xa28c, 0xa390, 0xa494, 0xa598, 0x2009, 0x002a,
++ 0x0804, 0x446b, 0x81ff, 0x1904, 0x308f, 0x798c, 0x2001, 0x194d,
++ 0x2102, 0x080c, 0x4436, 0x0904, 0x3092, 0x080c, 0x5cd4, 0x0904,
++ 0x308f, 0x0126, 0x2091, 0x8000, 0x080c, 0x5d9a, 0x012e, 0x0904,
++ 0x308f, 0x0804, 0x3fc8, 0xa9a0, 0x2001, 0x194d, 0xc18d, 0x2102,
++ 0x080c, 0x4443, 0x0170, 0x080c, 0x5cd4, 0x2009, 0x0002, 0x0128,
++ 0x080c, 0x5d9a, 0x1170, 0x2009, 0x0003, 0xa897, 0x4005, 0xa99a,
++ 0x0010, 0xa897, 0x4006, 0x900e, 0x9085, 0x0001, 0x2001, 0x0030,
++ 0x0005, 0xa897, 0x4000, 0x080c, 0x4df2, 0x0110, 0x9006, 0x0018,
++ 0x900e, 0x9085, 0x0001, 0x2001, 0x0000, 0x0005, 0x78a8, 0xd08c,
++ 0x1118, 0xd084, 0x0904, 0x3f3d, 0x080c, 0x4452, 0x0904, 0x3092,
++ 0x080c, 0x441f, 0x1120, 0x2009, 0x0002, 0x0804, 0x308f, 0x080c,
++ 0x5f2d, 0x0130, 0x908e, 0x0004, 0x0118, 0x908e, 0x0005, 0x15a0,
++ 0x78a8, 0xd08c, 0x0120, 0xb800, 0xc08c, 0xb802, 0x0028, 0x080c,
++ 0x4dea, 0xd0b4, 0x0904, 0x3f77, 0x7884, 0x908e, 0x007e, 0x0904,
++ 0x3f77, 0x908e, 0x007f, 0x0904, 0x3f77, 0x908e, 0x0080, 0x0904,
++ 0x3f77, 0xb800, 0xd08c, 0x1904, 0x3f77, 0xa867, 0x0000, 0xa868,
++ 0xc0fd, 0xa86a, 0x080c, 0xb258, 0x1120, 0x2009, 0x0003, 0x0804,
++ 0x308f, 0x7007, 0x0003, 0x701b, 0x4a0e, 0x0005, 0x080c, 0x4452,
++ 0x0904, 0x3092, 0x0804, 0x3f77, 0x080c, 0x2e64, 0x0108, 0x0005,
++ 0x2009, 0x1833, 0x210c, 0x81ff, 0x0120, 0x2009, 0x0001, 0x0804,
++ 0x308f, 0x080c, 0x4dfe, 0x0120, 0x2009, 0x0007, 0x0804, 0x308f,
++ 0x080c, 0x5f25, 0x0120, 0x2009, 0x0008, 0x0804, 0x308f, 0xb89c,
++ 0xd0a4, 0x1118, 0xd0ac, 0x1904, 0x3f77, 0x9006, 0xa866, 0xa832,
++ 0xa868, 0xc0fd, 0xa86a, 0x080c, 0xb2a8, 0x1120, 0x2009, 0x0003,
++ 0x0804, 0x308f, 0x7007, 0x0003, 0x701b, 0x4a47, 0x0005, 0xa830,
++ 0x9086, 0x0100, 0x1120, 0x2009, 0x0004, 0x0804, 0x4d49, 0x080c,
++ 0x4452, 0x0904, 0x3092, 0x0804, 0x49e0, 0x81ff, 0x2009, 0x0001,
++ 0x1904, 0x308f, 0x080c, 0x4dfe, 0x2009, 0x0007, 0x1904, 0x308f,
++ 0x080c, 0x5f25, 0x2009, 0x0008, 0x1904, 0x308f, 0x080c, 0x4452,
++ 0x0904, 0x3092, 0x080c, 0x5f2d, 0x2009, 0x0009, 0x1904, 0x308f,
++ 0x080c, 0x441f, 0x2009, 0x0002, 0x0904, 0x308f, 0x9006, 0xa866,
++ 0xa832, 0xa868, 0xc0fd, 0xa86a, 0x7988, 0x9194, 0xff00, 0x918c,
++ 0x00ff, 0x9006, 0x82ff, 0x1128, 0xc0ed, 0xa952, 0x798c, 0xa956,
++ 0x0038, 0x928e, 0x0100, 0x1904, 0x3092, 0xc0e5, 0xa952, 0xa956,
++ 0xa83e, 0x080c, 0xb4e7, 0x2009, 0x0003, 0x0904, 0x308f, 0x7007,
++ 0x0003, 0x701b, 0x4a9c, 0x0005, 0xa830, 0x9086, 0x0100, 0x2009,
++ 0x0004, 0x0904, 0x308f, 0x0804, 0x305f, 0x7aa8, 0x9284, 0xc000,
++ 0x0148, 0xd2ec, 0x01a0, 0x080c, 0x4dfe, 0x1188, 0x2009, 0x0014,
++ 0x0804, 0x308f, 0xd2dc, 0x1568, 0x81ff, 0x2009, 0x0001, 0x1904,
++ 0x308f, 0x080c, 0x4dfe, 0x2009, 0x0007, 0x1904, 0x308f, 0xd2f4,
++ 0x0130, 0x9284, 0x5000, 0x080c, 0x4dc5, 0x0804, 0x305f, 0xd2fc,
++ 0x0158, 0x080c, 0x4452, 0x0904, 0x3092, 0x7984, 0x9284, 0x9000,
++ 0x080c, 0x4da2, 0x0804, 0x305f, 0x080c, 0x4452, 0x0904, 0x3092,
++ 0xb804, 0x9084, 0x00ff, 0x9086, 0x0006, 0x2009, 0x0009, 0x1904,
++ 0x4b85, 0x080c, 0x441f, 0x2009, 0x0002, 0x0904, 0x4b85, 0xa85c,
++ 0x9080, 0x001b, 0xaf60, 0x2009, 0x0008, 0x7a8c, 0x7b88, 0x7c9c,
++ 0x7d98, 0x080c, 0x4468, 0x701b, 0x4af6, 0x0005, 0xa86c, 0x9086,
++ 0x0500, 0x1138, 0xa870, 0x9005, 0x1120, 0xa874, 0x9084, 0xff00,
++ 0x0110, 0x1904, 0x3092, 0xa866, 0xa832, 0xa868, 0xc0fd, 0xa86a,
++ 0x080c, 0x4452, 0x1110, 0x0804, 0x3092, 0x2009, 0x0043, 0x080c,
++ 0xb54f, 0x2009, 0x0003, 0x0904, 0x4b85, 0x7007, 0x0003, 0x701b,
++ 0x4b1a, 0x0005, 0xa830, 0x9086, 0x0100, 0x2009, 0x0004, 0x0904,
++ 0x4b85, 0x7984, 0x7aa8, 0x9284, 0x1000, 0x080c, 0x4da2, 0x0804,
++ 0x305f, 0x00c6, 0xaab0, 0x9284, 0xc000, 0x0140, 0xd2ec, 0x0168,
++ 0x080c, 0x4dfe, 0x1150, 0x2009, 0x0014, 0x04f0, 0x2061, 0x1800,
++ 0x080c, 0x4dfe, 0x2009, 0x0007, 0x15b8, 0xd2f4, 0x0128, 0x9284,
++ 0x5000, 0x080c, 0x4dc5, 0x0050, 0xd2fc, 0x0178, 0x080c, 0x4450,
++ 0x0588, 0xa998, 0x9284, 0x9000, 0x080c, 0x4da2, 0xa87b, 0x0000,
++ 0xa883, 0x0000, 0xa897, 0x4000, 0x0438, 0x080c, 0x4450, 0x0510,
++ 0x080c, 0x5f2d, 0x2009, 0x0009, 0x11b8, 0xa8c4, 0x9086, 0x0500,
++ 0x11c8, 0xa8c8, 0x9005, 0x11b0, 0xa8cc, 0x9084, 0xff00, 0x1190,
++ 0x080c, 0x4450, 0x1108, 0x0070, 0x2009, 0x004b, 0x080c, 0xb54f,
++ 0x2009, 0x0003, 0x0108, 0x0078, 0x0429, 0x19c0, 0xa897, 0x4005,
++ 0xa99a, 0x0010, 0xa897, 0x4006, 0x900e, 0x9085, 0x0001, 0x2001,
++ 0x0030, 0x00ce, 0x0005, 0x9006, 0x0ce0, 0x7aa8, 0xd2dc, 0x0904,
++ 0x308f, 0x0016, 0x7984, 0x9284, 0x1000, 0xc0fd, 0x080c, 0x4da2,
++ 0x001e, 0x1904, 0x308f, 0x0804, 0x305f, 0x00f6, 0x2d78, 0x0011,
++ 0x00fe, 0x0005, 0xaab0, 0xd2dc, 0x0150, 0x0016, 0xa998, 0x9284,
++ 0x1000, 0xc0fd, 0x080c, 0x4da2, 0x001e, 0x9085, 0x0001, 0x0005,
++ 0x81ff, 0x0120, 0x2009, 0x0001, 0x0804, 0x308f, 0x080c, 0x4dfe,
++ 0x0120, 0x2009, 0x0007, 0x0804, 0x308f, 0x7984, 0x7ea8, 0x96b4,
++ 0x00ff, 0x080c, 0x5c0d, 0x1904, 0x3092, 0x9186, 0x007f, 0x0138,
++ 0x080c, 0x5f2d, 0x0120, 0x2009, 0x0009, 0x0804, 0x308f, 0x080c,
++ 0x441f, 0x1120, 0x2009, 0x0002, 0x0804, 0x308f, 0xa867, 0x0000,
++ 0xa868, 0xc0fd, 0xa86a, 0x2001, 0x0100, 0x8007, 0xa80a, 0x080c,
++ 0xb272, 0x1120, 0x2009, 0x0003, 0x0804, 0x308f, 0x7007, 0x0003,
++ 0x701b, 0x4be3, 0x0005, 0xa808, 0x8007, 0x9086, 0x0100, 0x1120,
++ 0x2009, 0x0004, 0x0804, 0x308f, 0xa8e0, 0xa866, 0xa810, 0x8007,
++ 0x9084, 0x00ff, 0x800c, 0xa814, 0x8007, 0x9084, 0x00ff, 0x8004,
++ 0x9080, 0x0002, 0x9108, 0x8906, 0x8006, 0x8007, 0x90bc, 0x003f,
++ 0x9084, 0xffc0, 0x9080, 0x0004, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98,
++ 0x0804, 0x446b, 0x080c, 0x441f, 0x1120, 0x2009, 0x0002, 0x0804,
++ 0x308f, 0x7984, 0x9194, 0xff00, 0x918c, 0x00ff, 0x8217, 0x82ff,
++ 0x1118, 0x701f, 0x1980, 0x0040, 0x92c6, 0x0001, 0x1118, 0x701f,
++ 0x199a, 0x0010, 0x0804, 0x3092, 0x2009, 0x001a, 0x7a8c, 0x7b88,
++ 0x7c9c, 0x7d98, 0xa85c, 0x9080, 0x0019, 0xaf60, 0x080c, 0x4468,
++ 0x701b, 0x4c33, 0x0005, 0x2001, 0x182c, 0x2003, 0x0001, 0xa85c,
++ 0x9080, 0x0019, 0x2098, 0xa860, 0x20e0, 0x20a9, 0x001a, 0x701c,
++ 0x20a0, 0x20e9, 0x0001, 0x4003, 0x0804, 0x305f, 0x080c, 0x441f,
++ 0x1120, 0x2009, 0x0002, 0x0804, 0x308f, 0x7984, 0x9194, 0xff00,
++ 0x918c, 0x00ff, 0x8217, 0x82ff, 0x1118, 0x2099, 0x1980, 0x0040,
++ 0x92c6, 0x0001, 0x1118, 0x2099, 0x199a, 0x0010, 0x0804, 0x3092,
++ 0xa85c, 0x9080, 0x0019, 0x20a0, 0xa860, 0x20e8, 0x20a9, 0x001a,
++ 0x20e1, 0x0001, 0x4003, 0x2009, 0x001a, 0x7a8c, 0x7b88, 0x7c9c,
++ 0x7d98, 0xa85c, 0x9080, 0x0019, 0xaf60, 0x0804, 0x446b, 0x7884,
++ 0x908a, 0x1000, 0x1a04, 0x3092, 0x0126, 0x2091, 0x8000, 0x8003,
++ 0x800b, 0x810b, 0x9108, 0x00c6, 0x2061, 0x19c7, 0x6146, 0x00ce,
++ 0x012e, 0x0804, 0x305f, 0x00c6, 0x080c, 0x6877, 0x1160, 0x080c,
++ 0x6b40, 0x080c, 0x56d9, 0x9085, 0x0001, 0x080c, 0x68c0, 0x080c,
++ 0x67be, 0x080c, 0x0d84, 0x2061, 0x1800, 0x6030, 0xc09d, 0x6032,
++ 0x080c, 0x55a0, 0x00ce, 0x0005, 0x00c6, 0x2001, 0x1800, 0x2004,
++ 0x908e, 0x0000, 0x0904, 0x308f, 0x7884, 0x9005, 0x0188, 0x7888,
++ 0x2061, 0x1969, 0x2c0c, 0x2062, 0x080c, 0x27d7, 0x01a0, 0x080c,
++ 0x27df, 0x0188, 0x080c, 0x27e7, 0x0170, 0x2162, 0x0804, 0x3092,
++ 0x2061, 0x0100, 0x6038, 0x9086, 0x0007, 0x1118, 0x2009, 0x0001,
++ 0x0010, 0x2009, 0x0000, 0x7884, 0x9086, 0x0002, 0x1548, 0x2061,
++ 0x0100, 0x6028, 0xc09c, 0x602a, 0x0026, 0x2011, 0x0003, 0x080c,
++ 0x8e99, 0x2011, 0x0002, 0x080c, 0x8ea3, 0x002e, 0x080c, 0x8d59,
++ 0x0036, 0x901e, 0x080c, 0x8dfe, 0x003e, 0x60e3, 0x0000, 0x080c,
++ 0xcd0a, 0x080c, 0xcd25, 0x9085, 0x0001, 0x080c, 0x68c0, 0x9006,
++ 0x080c, 0x28a5, 0x2001, 0x1800, 0x2003, 0x0004, 0x6027, 0x0008,
++ 0x00ce, 0x0804, 0x305f, 0x81ff, 0x0120, 0x2009, 0x0001, 0x0804,
++ 0x308f, 0x080c, 0x4dfe, 0x0120, 0x2009, 0x0007, 0x0804, 0x308f,
++ 0x7984, 0x7ea8, 0x96b4, 0x00ff, 0x080c, 0x5c0d, 0x1904, 0x3092,
++ 0x9186, 0x007f, 0x0138, 0x080c, 0x5f2d, 0x0120, 0x2009, 0x0009,
++ 0x0804, 0x308f, 0x080c, 0x441f, 0x1120, 0x2009, 0x0002, 0x0804,
++ 0x308f, 0xa867, 0x0000, 0xa868, 0xc0fd, 0xa86a, 0x080c, 0xb275,
++ 0x1120, 0x2009, 0x0003, 0x0804, 0x308f, 0x7007, 0x0003, 0x701b,
++ 0x4d32, 0x0005, 0xa830, 0x9086, 0x0100, 0x1120, 0x2009, 0x0004,
++ 0x0804, 0x308f, 0xa8e0, 0xa866, 0xa834, 0x8007, 0x800c, 0xa85c,
++ 0x9080, 0x000c, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0xaf60, 0x0804,
++ 0x446b, 0xa898, 0x9086, 0x000d, 0x1904, 0x308f, 0x2021, 0x4005,
++ 0x0126, 0x2091, 0x8000, 0x0e04, 0x4d56, 0x0010, 0x012e, 0x0cc0,
++ 0x7c36, 0x9486, 0x4000, 0x0118, 0x7833, 0x0011, 0x0010, 0x7833,
++ 0x0010, 0x7883, 0x4005, 0xa998, 0x7986, 0xa9a4, 0x799a, 0xa9a8,
++ 0x799e, 0x080c, 0x445b, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004,
++ 0xd084, 0x190c, 0x113e, 0x7007, 0x0001, 0x2091, 0x5000, 0x012e,
++ 0x0005, 0x0126, 0x2091, 0x8000, 0x00c6, 0x2061, 0x19c7, 0x7984,
++ 0x6156, 0x6152, 0x605b, 0x0000, 0x604f, 0x0009, 0x7898, 0x606e,
++ 0x789c, 0x606a, 0x7888, 0x6066, 0x788c, 0x6062, 0x2001, 0x19d5,
++ 0x2044, 0x2001, 0x19dd, 0xa076, 0xa060, 0xa072, 0xa07b, 0x0001,
++ 0xa07f, 0x0002, 0xa06b, 0x0000, 0xa09f, 0x0000, 0x00ce, 0x012e,
++ 0x0804, 0x305f, 0x0126, 0x2091, 0x8000, 0x00b6, 0x00c6, 0x90e4,
++ 0xc000, 0x0128, 0x0006, 0x080c, 0xb0e3, 0x000e, 0x1198, 0xd0e4,
++ 0x0160, 0x9180, 0x1000, 0x2004, 0x905d, 0x0160, 0x080c, 0x56f3,
++ 0x080c, 0x94d3, 0x0110, 0xb817, 0x0000, 0x9006, 0x00ce, 0x00be,
++ 0x012e, 0x0005, 0x9085, 0x0001, 0x0cc8, 0x0126, 0x2091, 0x8000,
++ 0x0156, 0x2010, 0x900e, 0x20a9, 0x0800, 0x0016, 0x9180, 0x1000,
++ 0x2004, 0x9005, 0x0180, 0x9186, 0x007e, 0x0168, 0x9186, 0x007f,
++ 0x0150, 0x9186, 0x0080, 0x0138, 0x9186, 0x00ff, 0x0120, 0x0026,
++ 0x2200, 0x0801, 0x002e, 0x001e, 0x8108, 0x1f04, 0x4dcd, 0x015e,
++ 0x012e, 0x0005, 0x2001, 0x1853, 0x2004, 0x0005, 0x2001, 0x1872,
++ 0x2004, 0x0005, 0x0006, 0x2001, 0x180f, 0x2004, 0xd0d4, 0x000e,
++ 0x0005, 0x2001, 0x180d, 0x2004, 0xd0b4, 0x0005, 0x2001, 0x1800,
++ 0x2004, 0x9086, 0x0003, 0x0005, 0x0126, 0x0156, 0x0136, 0x0146,
++ 0x01c6, 0x01d6, 0x00c6, 0x00d6, 0x00e6, 0x00f6, 0x2061, 0x0100,
++ 0x2069, 0x0200, 0x2071, 0x1800, 0x6044, 0xd0a4, 0x11e8, 0xd084,
++ 0x0118, 0x080c, 0x4fa3, 0x0068, 0xd08c, 0x0118, 0x080c, 0x4eb6,
++ 0x0040, 0xd094, 0x0118, 0x080c, 0x4e86, 0x0018, 0xd09c, 0x0108,
++ 0x0099, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x01de, 0x01ce, 0x014e,
++ 0x013e, 0x015e, 0x012e, 0x0005, 0x0016, 0x6128, 0xd19c, 0x1110,
++ 0xc19d, 0x612a, 0x001e, 0x0c68, 0x0006, 0x7090, 0x9005, 0x000e,
++ 0x0120, 0x7093, 0x0000, 0x708b, 0x0000, 0x624c, 0x9286, 0xf0f0,
++ 0x1150, 0x6048, 0x9086, 0xf0f0, 0x0130, 0x624a, 0x6043, 0x0090,
++ 0x6043, 0x0010, 0x0490, 0x9294, 0xff00, 0x9296, 0xf700, 0x0178,
++ 0x7134, 0xd1a4, 0x1160, 0x6240, 0x9295, 0x0100, 0x6242, 0x9294,
++ 0x0010, 0x0128, 0x2009, 0x00f7, 0x080c, 0x5660, 0x00f0, 0x6040,
++ 0x9084, 0x0010, 0x9085, 0x0140, 0x6042, 0x6043, 0x0000, 0x707f,
++ 0x0000, 0x709b, 0x0001, 0x70c3, 0x0000, 0x70db, 0x0000, 0x2009,
++ 0x1c80, 0x200b, 0x0000, 0x708f, 0x0000, 0x7083, 0x000f, 0x2009,
++ 0x000f, 0x2011, 0x5546, 0x080c, 0x78a5, 0x0005, 0x2001, 0x1874,
++ 0x2004, 0xd08c, 0x0110, 0x7057, 0xffff, 0x7080, 0x9005, 0x1528,
++ 0x2011, 0x5546, 0x080c, 0x781a, 0x6040, 0x9094, 0x0010, 0x9285,
++ 0x0020, 0x6042, 0x20a9, 0x00c8, 0x6044, 0xd08c, 0x1168, 0x1f04,
++ 0x4e9c, 0x6242, 0x7093, 0x0000, 0x6040, 0x9094, 0x0010, 0x9285,
++ 0x0080, 0x6042, 0x6242, 0x0048, 0x6242, 0x7093, 0x0000, 0x7087,
++ 0x0000, 0x9006, 0x080c, 0x56de, 0x0000, 0x0005, 0x7084, 0x908a,
++ 0x0003, 0x1a0c, 0x0d84, 0x000b, 0x0005, 0x4ec0, 0x4f07, 0x4fa2,
++ 0x00f6, 0x7087, 0x0001, 0x6803, 0x00fc, 0x20a9, 0x0004, 0x6800,
++ 0x9084, 0x00fc, 0x0120, 0x1f04, 0x4ec7, 0x080c, 0x0d84, 0x68a0,
++ 0x68a2, 0x689c, 0x689e, 0x6898, 0x689a, 0xa001, 0x6803, 0x1600,
++ 0x6837, 0x0020, 0x080c, 0x56ba, 0x2079, 0x1c00, 0x7833, 0x1101,
++ 0x7837, 0x0000, 0x20e1, 0x0001, 0x2099, 0x1805, 0x20e9, 0x0001,
++ 0x20a1, 0x1c0e, 0x20a9, 0x0004, 0x4003, 0x080c, 0x9363, 0x20e1,
++ 0x0001, 0x2099, 0x1c00, 0x20e9, 0x0000, 0x20a1, 0x0240, 0x20a9,
++ 0x0014, 0x4003, 0x60c3, 0x000c, 0x600f, 0x0000, 0x080c, 0x557c,
++ 0x00fe, 0x9006, 0x708a, 0x6043, 0x0008, 0x6042, 0x0005, 0x00f6,
++ 0x7088, 0x708b, 0x0000, 0x9025, 0x0904, 0x4f7f, 0x6020, 0xd0b4,
++ 0x1904, 0x4f7d, 0x7198, 0x81ff, 0x0904, 0x4f6b, 0x9486, 0x000c,
++ 0x1904, 0x4f78, 0x9480, 0x0018, 0x8004, 0x20a8, 0x080c, 0x56b3,
++ 0x2011, 0x0260, 0x2019, 0x1c00, 0x220c, 0x2304, 0x9106, 0x11e8,
++ 0x8210, 0x8318, 0x1f04, 0x4f24, 0x6043, 0x0004, 0x2061, 0x0140,
++ 0x605b, 0xbc94, 0x605f, 0xf0f0, 0x2061, 0x0100, 0x6043, 0x0006,
++ 0x7087, 0x0002, 0x7093, 0x0002, 0x2009, 0x07d0, 0x2011, 0x554d,
++ 0x080c, 0x78a5, 0x080c, 0x56ba, 0x04c0, 0x080c, 0x56b3, 0x2079,
++ 0x0260, 0x7930, 0x918e, 0x1101, 0x1558, 0x7834, 0x9005, 0x1540,
++ 0x7900, 0x918c, 0x00ff, 0x1118, 0x7804, 0x9005, 0x0190, 0x080c,
++ 0x56b3, 0x2011, 0x026e, 0x2019, 0x1805, 0x20a9, 0x0004, 0x220c,
++ 0x2304, 0x9102, 0x0230, 0x11a0, 0x8210, 0x8318, 0x1f04, 0x4f5f,
++ 0x0078, 0x709b, 0x0000, 0x080c, 0x56b3, 0x20e1, 0x0000, 0x2099,
++ 0x0260, 0x20e9, 0x0001, 0x20a1, 0x1c00, 0x20a9, 0x0014, 0x4003,
++ 0x6043, 0x0008, 0x6043, 0x0000, 0x0010, 0x00fe, 0x0005, 0x6040,
++ 0x9085, 0x0100, 0x6042, 0x6020, 0xd0b4, 0x1db8, 0x080c, 0x9363,
++ 0x20e1, 0x0001, 0x2099, 0x1c00, 0x20e9, 0x0000, 0x20a1, 0x0240,
++ 0x20a9, 0x0014, 0x4003, 0x60c3, 0x000c, 0x2011, 0x19be, 0x2013,
++ 0x0000, 0x708b, 0x0000, 0x60a3, 0x0056, 0x60a7, 0x9575, 0x080c,
++ 0x8b47, 0x08d8, 0x0005, 0x7090, 0x908a, 0x001d, 0x1a0c, 0x0d84,
++ 0x000b, 0x0005, 0x4fd4, 0x4fe7, 0x5010, 0x5030, 0x5056, 0x5085,
++ 0x50ab, 0x50e3, 0x5109, 0x5137, 0x5172, 0x51aa, 0x51c8, 0x51f3,
++ 0x5215, 0x5230, 0x523a, 0x526e, 0x5294, 0x52c3, 0x52e9, 0x5321,
++ 0x5365, 0x53a2, 0x53c3, 0x541c, 0x543e, 0x546c, 0x546c, 0x00c6,
++ 0x2061, 0x1800, 0x6003, 0x0007, 0x2061, 0x0100, 0x6004, 0x9084,
++ 0xfff9, 0x6006, 0x00ce, 0x0005, 0x2061, 0x0140, 0x605b, 0xbc94,
++ 0x605f, 0xf0f0, 0x2061, 0x0100, 0x6043, 0x0002, 0x7093, 0x0001,
++ 0x2009, 0x07d0, 0x2011, 0x554d, 0x080c, 0x78a5, 0x0005, 0x00f6,
++ 0x7088, 0x9086, 0x0014, 0x1510, 0x6042, 0x6020, 0xd0b4, 0x11f0,
++ 0x080c, 0x56b3, 0x2079, 0x0260, 0x7a30, 0x9296, 0x1102, 0x11a0,
++ 0x7834, 0x9005, 0x1188, 0x7a38, 0xd2fc, 0x0128, 0x70c0, 0x9005,
++ 0x1110, 0x70c3, 0x0001, 0x2011, 0x554d, 0x080c, 0x781a, 0x7093,
++ 0x0010, 0x080c, 0x523a, 0x0010, 0x708b, 0x0000, 0x00fe, 0x0005,
++ 0x00f6, 0x7093, 0x0003, 0x6043, 0x0004, 0x2011, 0x554d, 0x080c,
++ 0x781a, 0x080c, 0x5642, 0x2079, 0x0240, 0x7833, 0x1102, 0x7837,
++ 0x0000, 0x20a9, 0x0008, 0x9f88, 0x000e, 0x200b, 0x0000, 0x8108,
++ 0x1f04, 0x5025, 0x60c3, 0x0014, 0x080c, 0x557c, 0x00fe, 0x0005,
++ 0x00f6, 0x7088, 0x9005, 0x0500, 0x2011, 0x554d, 0x080c, 0x781a,
++ 0x9086, 0x0014, 0x11b8, 0x080c, 0x56b3, 0x2079, 0x0260, 0x7a30,
++ 0x9296, 0x1102, 0x1178, 0x7834, 0x9005, 0x1160, 0x7a38, 0xd2fc,
++ 0x0128, 0x70c0, 0x9005, 0x1110, 0x70c3, 0x0001, 0x7093, 0x0004,
++ 0x0029, 0x0010, 0x080c, 0x568f, 0x00fe, 0x0005, 0x00f6, 0x7093,
++ 0x0005, 0x080c, 0x5642, 0x2079, 0x0240, 0x7833, 0x1103, 0x7837,
++ 0x0000, 0x080c, 0x56b3, 0x080c, 0x5696, 0x1170, 0x707c, 0x9005,
++ 0x1158, 0x7154, 0x9186, 0xffff, 0x0138, 0x2011, 0x0008, 0x080c,
++ 0x54fa, 0x0168, 0x080c, 0x5677, 0x20a9, 0x0008, 0x20e1, 0x0000,
++ 0x2099, 0x026e, 0x20e9, 0x0000, 0x20a1, 0x024e, 0x4003, 0x60c3,
++ 0x0014, 0x080c, 0x557c, 0x00fe, 0x0005, 0x00f6, 0x7088, 0x9005,
++ 0x0500, 0x2011, 0x554d, 0x080c, 0x781a, 0x9086, 0x0014, 0x11b8,
++ 0x080c, 0x56b3, 0x2079, 0x0260, 0x7a30, 0x9296, 0x1103, 0x1178,
++ 0x7834, 0x9005, 0x1160, 0x7a38, 0xd2fc, 0x0128, 0x70c0, 0x9005,
++ 0x1110, 0x70c3, 0x0001, 0x7093, 0x0006, 0x0029, 0x0010, 0x080c,
++ 0x568f, 0x00fe, 0x0005, 0x00f6, 0x7093, 0x0007, 0x080c, 0x5642,
++ 0x2079, 0x0240, 0x7833, 0x1104, 0x7837, 0x0000, 0x080c, 0x56b3,
++ 0x080c, 0x5696, 0x11b8, 0x707c, 0x9005, 0x11a0, 0x715c, 0x9186,
++ 0xffff, 0x0180, 0x9180, 0x2e6e, 0x200d, 0x918c, 0xff00, 0x810f,
++ 0x2011, 0x0008, 0x080c, 0x54fa, 0x0180, 0x080c, 0x4700, 0x0110,
++ 0x080c, 0x2466, 0x20a9, 0x0008, 0x20e1, 0x0000, 0x2099, 0x026e,
++ 0x20e9, 0x0000, 0x20a1, 0x024e, 0x4003, 0x60c3, 0x0014, 0x080c,
++ 0x557c, 0x00fe, 0x0005, 0x00f6, 0x7088, 0x9005, 0x0500, 0x2011,
++ 0x554d, 0x080c, 0x781a, 0x9086, 0x0014, 0x11b8, 0x080c, 0x56b3,
++ 0x2079, 0x0260, 0x7a30, 0x9296, 0x1104, 0x1178, 0x7834, 0x9005,
++ 0x1160, 0x7a38, 0xd2fc, 0x0128, 0x70c0, 0x9005, 0x1110, 0x70c3,
++ 0x0001, 0x7093, 0x0008, 0x0029, 0x0010, 0x080c, 0x568f, 0x00fe,
++ 0x0005, 0x00f6, 0x7093, 0x0009, 0x080c, 0x5642, 0x2079, 0x0240,
++ 0x7833, 0x1105, 0x7837, 0x0100, 0x080c, 0x5696, 0x1150, 0x707c,
++ 0x9005, 0x1138, 0x080c, 0x546d, 0x1188, 0x9085, 0x0001, 0x080c,
++ 0x2466, 0x20a9, 0x0008, 0x080c, 0x56b3, 0x20e1, 0x0000, 0x2099,
++ 0x026e, 0x20e9, 0x0000, 0x20a1, 0x024e, 0x4003, 0x60c3, 0x0014,
++ 0x080c, 0x557c, 0x0010, 0x080c, 0x4fc7, 0x00fe, 0x0005, 0x00f6,
++ 0x7088, 0x9005, 0x05a8, 0x2011, 0x554d, 0x080c, 0x781a, 0x9086,
++ 0x0014, 0x1560, 0x080c, 0x56b3, 0x2079, 0x0260, 0x7a30, 0x9296,
++ 0x1105, 0x1520, 0x7834, 0x9084, 0x0100, 0x2011, 0x0100, 0x921e,
++ 0x1160, 0x7a38, 0xd2fc, 0x0128, 0x70c0, 0x9005, 0x1110, 0x70c3,
++ 0x0001, 0x7093, 0x000a, 0x00b1, 0x0098, 0x9005, 0x1178, 0x7a38,
++ 0xd2fc, 0x0128, 0x70c0, 0x9005, 0x1110, 0x70c3, 0x0001, 0x708f,
++ 0x0000, 0x7093, 0x000e, 0x080c, 0x5215, 0x0010, 0x080c, 0x568f,
++ 0x00fe, 0x0005, 0x00f6, 0x7093, 0x000b, 0x2011, 0x1c0e, 0x20e9,
++ 0x0001, 0x22a0, 0x20a9, 0x0040, 0x2019, 0xffff, 0x4304, 0x080c,
++ 0x5642, 0x2079, 0x0240, 0x7833, 0x1106, 0x7837, 0x0000, 0x080c,
++ 0x5696, 0x0118, 0x2013, 0x0000, 0x0020, 0x7058, 0x9085, 0x0100,
++ 0x2012, 0x20a9, 0x0040, 0x2009, 0x024e, 0x2011, 0x1c0e, 0x220e,
++ 0x8210, 0x8108, 0x9186, 0x0260, 0x1128, 0x6810, 0x8000, 0x6812,
++ 0x2009, 0x0240, 0x1f04, 0x5197, 0x60c3, 0x0084, 0x080c, 0x557c,
++ 0x00fe, 0x0005, 0x00f6, 0x7088, 0x9005, 0x01c0, 0x2011, 0x554d,
++ 0x080c, 0x781a, 0x9086, 0x0084, 0x1178, 0x080c, 0x56b3, 0x2079,
++ 0x0260, 0x7a30, 0x9296, 0x1106, 0x1138, 0x7834, 0x9005, 0x1120,
++ 0x7093, 0x000c, 0x0029, 0x0010, 0x080c, 0x568f, 0x00fe, 0x0005,
++ 0x00f6, 0x7093, 0x000d, 0x080c, 0x5642, 0x2079, 0x0240, 0x7833,
++ 0x1107, 0x7837, 0x0000, 0x080c, 0x56b3, 0x20a9, 0x0040, 0x2011,
++ 0x026e, 0x2009, 0x024e, 0x220e, 0x8210, 0x8108, 0x9186, 0x0260,
++ 0x1150, 0x6810, 0x8000, 0x6812, 0x2009, 0x0240, 0x6814, 0x8000,
++ 0x6816, 0x2011, 0x0260, 0x1f04, 0x51db, 0x60c3, 0x0084, 0x080c,
++ 0x557c, 0x00fe, 0x0005, 0x00f6, 0x7088, 0x9005, 0x01e0, 0x2011,
++ 0x554d, 0x080c, 0x781a, 0x9086, 0x0084, 0x1198, 0x080c, 0x56b3,
++ 0x2079, 0x0260, 0x7a30, 0x9296, 0x1107, 0x1158, 0x7834, 0x9005,
++ 0x1140, 0x708f, 0x0001, 0x080c, 0x5614, 0x7093, 0x000e, 0x0029,
++ 0x0010, 0x080c, 0x568f, 0x00fe, 0x0005, 0x918d, 0x0001, 0x080c,
++ 0x56de, 0x7093, 0x000f, 0x708b, 0x0000, 0x2061, 0x0140, 0x605b,
++ 0xbc85, 0x605f, 0xb5b5, 0x2061, 0x0100, 0x6043, 0x0005, 0x6043,
++ 0x0004, 0x2009, 0x07d0, 0x2011, 0x554d, 0x080c, 0x780e, 0x0005,
++ 0x7088, 0x9005, 0x0130, 0x2011, 0x554d, 0x080c, 0x781a, 0x7093,
++ 0x0000, 0x0005, 0x7093, 0x0011, 0x080c, 0x9363, 0x080c, 0x56b3,
++ 0x20e1, 0x0000, 0x2099, 0x0260, 0x20e9, 0x0000, 0x20a1, 0x0240,
++ 0x7488, 0x9480, 0x0018, 0x9080, 0x0007, 0x9084, 0x03f8, 0x8004,
++ 0x20a8, 0x4003, 0x080c, 0x5696, 0x11a0, 0x7174, 0x81ff, 0x0188,
++ 0x900e, 0x7078, 0x9084, 0x00ff, 0x0160, 0x080c, 0x23fd, 0x9186,
++ 0x007e, 0x0138, 0x9186, 0x0080, 0x0120, 0x2011, 0x0008, 0x080c,
++ 0x54fa, 0x60c3, 0x0014, 0x080c, 0x557c, 0x0005, 0x00f6, 0x7088,
++ 0x9005, 0x0500, 0x2011, 0x554d, 0x080c, 0x781a, 0x9086, 0x0014,
++ 0x11b8, 0x080c, 0x56b3, 0x2079, 0x0260, 0x7a30, 0x9296, 0x1103,
++ 0x1178, 0x7834, 0x9005, 0x1160, 0x7a38, 0xd2fc, 0x0128, 0x70c0,
++ 0x9005, 0x1110, 0x70c3, 0x0001, 0x7093, 0x0012, 0x0029, 0x0010,
++ 0x708b, 0x0000, 0x00fe, 0x0005, 0x00f6, 0x7093, 0x0013, 0x080c,
++ 0x5650, 0x2079, 0x0240, 0x7833, 0x1103, 0x7837, 0x0000, 0x080c,
++ 0x56b3, 0x080c, 0x5696, 0x1170, 0x707c, 0x9005, 0x1158, 0x7154,
++ 0x9186, 0xffff, 0x0138, 0x2011, 0x0008, 0x080c, 0x54fa, 0x0168,
++ 0x080c, 0x5677, 0x20a9, 0x0008, 0x20e1, 0x0000, 0x2099, 0x026e,
++ 0x20e9, 0x0000, 0x20a1, 0x024e, 0x4003, 0x60c3, 0x0014, 0x080c,
++ 0x557c, 0x00fe, 0x0005, 0x00f6, 0x7088, 0x9005, 0x0500, 0x2011,
++ 0x554d, 0x080c, 0x781a, 0x9086, 0x0014, 0x11b8, 0x080c, 0x56b3,
++ 0x2079, 0x0260, 0x7a30, 0x9296, 0x1104, 0x1178, 0x7834, 0x9005,
++ 0x1160, 0x7a38, 0xd2fc, 0x0128, 0x70c0, 0x9005, 0x1110, 0x70c3,
++ 0x0001, 0x7093, 0x0014, 0x0029, 0x0010, 0x708b, 0x0000, 0x00fe,
++ 0x0005, 0x00f6, 0x7093, 0x0015, 0x080c, 0x5650, 0x2079, 0x0240,
++ 0x7833, 0x1104, 0x7837, 0x0000, 0x080c, 0x56b3, 0x080c, 0x5696,
++ 0x11b8, 0x707c, 0x9005, 0x11a0, 0x715c, 0x9186, 0xffff, 0x0180,
++ 0x9180, 0x2e6e, 0x200d, 0x918c, 0xff00, 0x810f, 0x2011, 0x0008,
++ 0x080c, 0x54fa, 0x0180, 0x080c, 0x4700, 0x0110, 0x080c, 0x2466,
++ 0x20a9, 0x0008, 0x20e1, 0x0000, 0x2099, 0x026e, 0x20e9, 0x0000,
++ 0x20a1, 0x024e, 0x4003, 0x60c3, 0x0014, 0x080c, 0x557c, 0x00fe,
++ 0x0005, 0x00f6, 0x7088, 0x9005, 0x05f0, 0x2011, 0x554d, 0x080c,
++ 0x781a, 0x9086, 0x0014, 0x15a8, 0x080c, 0x56b3, 0x2079, 0x0260,
++ 0x7a30, 0x9296, 0x1105, 0x1568, 0x7834, 0x9084, 0x0100, 0x2011,
++ 0x0100, 0x921e, 0x1168, 0x9085, 0x0001, 0x080c, 0x56de, 0x7a38,
++ 0xd2fc, 0x0128, 0x70c0, 0x9005, 0x1110, 0x70c3, 0x0001, 0x0080,
++ 0x9005, 0x11b8, 0x7a38, 0xd2fc, 0x0128, 0x70c0, 0x9005, 0x1110,
++ 0x70c3, 0x0001, 0x9085, 0x0001, 0x080c, 0x56de, 0x708f, 0x0000,
++ 0x7a38, 0xd2f4, 0x0110, 0x70db, 0x0008, 0x7093, 0x0016, 0x0029,
++ 0x0010, 0x708b, 0x0000, 0x00fe, 0x0005, 0x080c, 0x9363, 0x080c,
++ 0x56b3, 0x20e1, 0x0000, 0x2099, 0x0260, 0x20e9, 0x0000, 0x20a1,
++ 0x0240, 0x20a9, 0x000e, 0x4003, 0x2011, 0x026d, 0x2204, 0x9084,
++ 0x0100, 0x2011, 0x024d, 0x2012, 0x2011, 0x026e, 0x7093, 0x0017,
++ 0x080c, 0x5696, 0x1150, 0x707c, 0x9005, 0x1138, 0x080c, 0x546d,
++ 0x1188, 0x9085, 0x0001, 0x080c, 0x2466, 0x20a9, 0x0008, 0x080c,
++ 0x56b3, 0x20e1, 0x0000, 0x2099, 0x026e, 0x20e9, 0x0000, 0x20a1,
++ 0x024e, 0x4003, 0x60c3, 0x0014, 0x080c, 0x557c, 0x0010, 0x080c,
++ 0x4fc7, 0x0005, 0x00f6, 0x7088, 0x9005, 0x01d8, 0x2011, 0x554d,
++ 0x080c, 0x781a, 0x9086, 0x0084, 0x1190, 0x080c, 0x56b3, 0x2079,
++ 0x0260, 0x7a30, 0x9296, 0x1106, 0x1150, 0x7834, 0x9005, 0x1138,
++ 0x9006, 0x080c, 0x56de, 0x7093, 0x0018, 0x0029, 0x0010, 0x708b,
++ 0x0000, 0x00fe, 0x0005, 0x00f6, 0x7093, 0x0019, 0x080c, 0x5650,
++ 0x2079, 0x0240, 0x7833, 0x1106, 0x7837, 0x0000, 0x080c, 0x56b3,
++ 0x2009, 0x026e, 0x2039, 0x1c0e, 0x20a9, 0x0040, 0x213e, 0x8738,
++ 0x8108, 0x9186, 0x0280, 0x1128, 0x6814, 0x8000, 0x6816, 0x2009,
++ 0x0260, 0x1f04, 0x53d6, 0x2039, 0x1c0e, 0x080c, 0x5696, 0x11e8,
++ 0x2728, 0x2514, 0x8207, 0x9084, 0x00ff, 0x8000, 0x2018, 0x9294,
++ 0x00ff, 0x8007, 0x9205, 0x202a, 0x7058, 0x2310, 0x8214, 0x92a0,
++ 0x1c0e, 0x2414, 0x938c, 0x0001, 0x0118, 0x9294, 0xff00, 0x0018,
++ 0x9294, 0x00ff, 0x8007, 0x9215, 0x2222, 0x20a9, 0x0040, 0x2009,
++ 0x024e, 0x270e, 0x8738, 0x8108, 0x9186, 0x0260, 0x1128, 0x6810,
++ 0x8000, 0x6812, 0x2009, 0x0240, 0x1f04, 0x5409, 0x60c3, 0x0084,
++ 0x080c, 0x557c, 0x00fe, 0x0005, 0x00f6, 0x7088, 0x9005, 0x01e0,
++ 0x2011, 0x554d, 0x080c, 0x781a, 0x9086, 0x0084, 0x1198, 0x080c,
++ 0x56b3, 0x2079, 0x0260, 0x7a30, 0x9296, 0x1107, 0x1158, 0x7834,
++ 0x9005, 0x1140, 0x708f, 0x0001, 0x080c, 0x5614, 0x7093, 0x001a,
++ 0x0029, 0x0010, 0x708b, 0x0000, 0x00fe, 0x0005, 0x9085, 0x0001,
++ 0x080c, 0x56de, 0x7093, 0x001b, 0x080c, 0x9363, 0x080c, 0x56b3,
++ 0x2011, 0x0260, 0x2009, 0x0240, 0x7488, 0x9480, 0x0018, 0x9080,
++ 0x0007, 0x9084, 0x03f8, 0x8004, 0x20a8, 0x220e, 0x8210, 0x8108,
++ 0x9186, 0x0260, 0x1150, 0x6810, 0x8000, 0x6812, 0x2009, 0x0240,
++ 0x6814, 0x8000, 0x6816, 0x2011, 0x0260, 0x1f04, 0x5455, 0x60c3,
++ 0x0084, 0x080c, 0x557c, 0x0005, 0x0005, 0x0086, 0x0096, 0x2029,
++ 0x1853, 0x252c, 0x20a9, 0x0008, 0x2041, 0x1c0e, 0x20e9, 0x0001,
++ 0x28a0, 0x080c, 0x56b3, 0x20e1, 0x0000, 0x2099, 0x026e, 0x4003,
++ 0x20a9, 0x0008, 0x2011, 0x0007, 0xd5d4, 0x0108, 0x9016, 0x2800,
++ 0x9200, 0x200c, 0x91a6, 0xffff, 0x1148, 0xd5d4, 0x0110, 0x8210,
++ 0x0008, 0x8211, 0x1f04, 0x5487, 0x0804, 0x54f6, 0x82ff, 0x1160,
++ 0xd5d4, 0x0120, 0x91a6, 0x3fff, 0x0d90, 0x0020, 0x91a6, 0x3fff,
++ 0x0904, 0x54f6, 0x918d, 0xc000, 0x20a9, 0x0010, 0x2019, 0x0001,
++ 0xd5d4, 0x0110, 0x2019, 0x0010, 0x2120, 0xd5d4, 0x0110, 0x8423,
++ 0x0008, 0x8424, 0x1240, 0xd5d4, 0x0110, 0x8319, 0x0008, 0x8318,
++ 0x1f04, 0x54ad, 0x04d8, 0x23a8, 0x2021, 0x0001, 0x8426, 0x8425,
++ 0x1f04, 0x54bf, 0x2328, 0x8529, 0x92be, 0x0007, 0x0158, 0x0006,
++ 0x2039, 0x0007, 0x2200, 0x973a, 0x000e, 0x27a8, 0x95a8, 0x0010,
++ 0x1f04, 0x54ce, 0x7556, 0x95c8, 0x2e6e, 0x292d, 0x95ac, 0x00ff,
++ 0x757a, 0x6532, 0x6536, 0x0016, 0x2508, 0x080c, 0x2446, 0x001e,
++ 0x60e7, 0x0000, 0x65ea, 0x2018, 0x2304, 0x9405, 0x201a, 0x707f,
++ 0x0001, 0x20e9, 0x0000, 0x20a1, 0x024e, 0x20e1, 0x0001, 0x2898,
++ 0x20a9, 0x0008, 0x4003, 0x9085, 0x0001, 0x0008, 0x9006, 0x009e,
++ 0x008e, 0x0005, 0x0156, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x22a8,
++ 0x20e1, 0x0000, 0x2099, 0x026e, 0x20e9, 0x0000, 0x2011, 0x024e,
++ 0x22a0, 0x4003, 0x014e, 0x013e, 0x01de, 0x01ce, 0x015e, 0x2118,
++ 0x9026, 0x2001, 0x0007, 0x939a, 0x0010, 0x0218, 0x8420, 0x8001,
++ 0x0cd0, 0x2118, 0x84ff, 0x0120, 0x939a, 0x0010, 0x8421, 0x1de0,
++ 0x2021, 0x0001, 0x83ff, 0x0118, 0x8423, 0x8319, 0x1de8, 0x9238,
++ 0x2029, 0x026e, 0x9528, 0x2504, 0x942c, 0x11b8, 0x9405, 0x203a,
++ 0x7156, 0x91a0, 0x2e6e, 0x242d, 0x95ac, 0x00ff, 0x757a, 0x6532,
++ 0x6536, 0x0016, 0x2508, 0x080c, 0x2446, 0x001e, 0x60e7, 0x0000,
++ 0x65ea, 0x707f, 0x0001, 0x9084, 0x0000, 0x0005, 0x00e6, 0x2071,
++ 0x1800, 0x7083, 0x0000, 0x00ee, 0x0005, 0x00e6, 0x00f6, 0x2079,
++ 0x0100, 0x2071, 0x0140, 0x080c, 0x5603, 0x080c, 0x8b50, 0x7004,
++ 0x9084, 0x4000, 0x0138, 0x2001, 0x1000, 0x080c, 0x28a5, 0x9006,
++ 0x080c, 0x28a5, 0x0126, 0x2091, 0x8000, 0x2071, 0x1824, 0x2073,
++ 0x0000, 0x7840, 0x0026, 0x0016, 0x2009, 0x00f7, 0x080c, 0x5660,
++ 0x001e, 0x9094, 0x0010, 0x9285, 0x0080, 0x7842, 0x7a42, 0x002e,
++ 0x012e, 0x00fe, 0x00ee, 0x0005, 0x0126, 0x2091, 0x8000, 0x2011,
++ 0x19be, 0x2013, 0x0000, 0x708b, 0x0000, 0x012e, 0x60a3, 0x0056,
++ 0x60a7, 0x9575, 0x080c, 0x8b47, 0x6144, 0xd184, 0x0120, 0x7190,
++ 0x918d, 0x2000, 0x0018, 0x7184, 0x918d, 0x1000, 0x2011, 0x1966,
++ 0x2112, 0x2009, 0x07d0, 0x2011, 0x554d, 0x080c, 0x78a5, 0x0005,
++ 0x0016, 0x0026, 0x00c6, 0x0126, 0x2091, 0x8000, 0x080c, 0x94da,
++ 0x2009, 0x00f7, 0x080c, 0x5660, 0x2061, 0x19c7, 0x900e, 0x611a,
++ 0x611e, 0x2061, 0x1800, 0x6003, 0x0001, 0x2061, 0x0100, 0x6043,
++ 0x0090, 0x6043, 0x0010, 0x2009, 0x1966, 0x200b, 0x0000, 0x2009,
++ 0x002d, 0x2011, 0x55ca, 0x080c, 0x780e, 0x012e, 0x00ce, 0x002e,
++ 0x001e, 0x0005, 0x00e6, 0x0006, 0x0126, 0x2091, 0x8000, 0x0499,
++ 0x2071, 0x0100, 0x080c, 0x8b50, 0x2071, 0x0140, 0x7004, 0x9084,
++ 0x4000, 0x0138, 0x2001, 0x1000, 0x080c, 0x28a5, 0x9006, 0x080c,
++ 0x28a5, 0x080c, 0x687f, 0x0188, 0x080c, 0x689a, 0x1170, 0x080c,
++ 0x6b4a, 0x0016, 0x080c, 0x2515, 0x2001, 0x193c, 0x2102, 0x001e,
++ 0x080c, 0x6b45, 0x080c, 0x67be, 0x0050, 0x2009, 0x0001, 0x080c,
++ 0x27f5, 0x2001, 0x0001, 0x080c, 0x23a6, 0x080c, 0x55a0, 0x012e,
++ 0x000e, 0x00ee, 0x0005, 0x2001, 0x180d, 0x2004, 0xd0bc, 0x0158,
++ 0x0026, 0x0036, 0x2011, 0x8017, 0x2001, 0x1966, 0x201c, 0x080c,
++ 0x447f, 0x003e, 0x002e, 0x0005, 0x20a9, 0x0012, 0x20e9, 0x0001,
++ 0x20a1, 0x1c80, 0x080c, 0x56b3, 0x20e9, 0x0000, 0x2099, 0x026e,
++ 0x0099, 0x20a9, 0x0020, 0x080c, 0x56ad, 0x2099, 0x0260, 0x20a1,
++ 0x1c92, 0x0051, 0x20a9, 0x000e, 0x080c, 0x56b0, 0x2099, 0x0260,
++ 0x20a1, 0x1cb2, 0x0009, 0x0005, 0x0016, 0x0026, 0x3410, 0x3308,
++ 0x2104, 0x8007, 0x2012, 0x8108, 0x8210, 0x1f04, 0x5638, 0x002e,
++ 0x001e, 0x0005, 0x080c, 0x9363, 0x20e1, 0x0001, 0x2099, 0x1c00,
++ 0x20e9, 0x0000, 0x20a1, 0x0240, 0x20a9, 0x000c, 0x4003, 0x0005,
++ 0x080c, 0x9363, 0x080c, 0x56b3, 0x20e1, 0x0000, 0x2099, 0x0260,
++ 0x20e9, 0x0000, 0x20a1, 0x0240, 0x20a9, 0x000c, 0x4003, 0x0005,
++ 0x00c6, 0x0006, 0x2061, 0x0100, 0x810f, 0x2001, 0x1833, 0x2004,
++ 0x9005, 0x1138, 0x2001, 0x1816, 0x2004, 0x9084, 0x00ff, 0x9105,
++ 0x0010, 0x9185, 0x00f7, 0x604a, 0x000e, 0x00ce, 0x0005, 0x0016,
++ 0x0046, 0x080c, 0x5f29, 0x0158, 0x9006, 0x2020, 0x2009, 0x002a,
++ 0x080c, 0xc9c5, 0x2001, 0x180c, 0x200c, 0xc195, 0x2102, 0x2019,
++ 0x002a, 0x900e, 0x080c, 0x2ce5, 0x004e, 0x001e, 0x0005, 0x080c,
++ 0x55a0, 0x7093, 0x0000, 0x708b, 0x0000, 0x0005, 0x0006, 0x2001,
++ 0x180c, 0x2004, 0xd09c, 0x0100, 0x000e, 0x0005, 0x0006, 0x0016,
++ 0x0126, 0x2091, 0x8000, 0x2001, 0x0101, 0x200c, 0x918d, 0x0006,
++ 0x2102, 0x012e, 0x001e, 0x000e, 0x0005, 0x2009, 0x0001, 0x0020,
++ 0x2009, 0x0002, 0x0008, 0x900e, 0x6814, 0x9084, 0xffc0, 0x910d,
++ 0x6916, 0x0005, 0x00f6, 0x0156, 0x0146, 0x01d6, 0x9006, 0x20a9,
++ 0x0080, 0x20e9, 0x0001, 0x20a1, 0x1c00, 0x4004, 0x2079, 0x1c00,
++ 0x7803, 0x2200, 0x7807, 0x00ef, 0x780f, 0x00ef, 0x7813, 0x0138,
++ 0x7823, 0xffff, 0x7827, 0xffff, 0x01de, 0x014e, 0x015e, 0x00fe,
++ 0x0005, 0x2001, 0x1800, 0x2003, 0x0001, 0x0005, 0x2001, 0x1973,
++ 0x0118, 0x2003, 0x0001, 0x0010, 0x2003, 0x0000, 0x0005, 0x0156,
++ 0x20a9, 0x0800, 0x2009, 0x1000, 0x9006, 0x200a, 0x8108, 0x1f04,
++ 0x56ed, 0x015e, 0x0005, 0x00d6, 0x0036, 0x0156, 0x0136, 0x0146,
++ 0x2069, 0x1852, 0x9006, 0xb802, 0xb8be, 0xb807, 0x0707, 0xb80a,
++ 0xb80e, 0xb812, 0x9198, 0x2e6e, 0x231d, 0x939c, 0x00ff, 0xbb16,
++ 0x0016, 0x0026, 0xb8b2, 0x080c, 0x94d3, 0x1120, 0x9192, 0x007e,
++ 0x1208, 0xbbb2, 0x20a9, 0x0004, 0xb8b4, 0x20e8, 0xb9b8, 0x9198,
++ 0x0006, 0x9006, 0x23a0, 0x4004, 0x20a9, 0x0004, 0x9198, 0x000a,
++ 0x23a0, 0x4004, 0x002e, 0x001e, 0xb83e, 0xb842, 0xb84e, 0xb852,
++ 0xb856, 0xb85a, 0xb85e, 0xb862, 0xb866, 0xb86a, 0xb86f, 0x0100,
++ 0xb872, 0xb876, 0xb87a, 0xb88a, 0xb88e, 0xb893, 0x0008, 0xb896,
++ 0xb89a, 0xb89e, 0xb8ae, 0xb9a2, 0x0096, 0xb8a4, 0x904d, 0x0110,
++ 0x080c, 0x0fe0, 0xb8a7, 0x0000, 0x009e, 0x9006, 0xb84a, 0x6810,
++ 0xb83a, 0x680c, 0xb846, 0x6814, 0x9084, 0x00ff, 0xb842, 0x014e,
++ 0x013e, 0x015e, 0x003e, 0x00de, 0x0005, 0x0126, 0x2091, 0x8000,
++ 0xa974, 0xae78, 0x9684, 0x3fff, 0x9082, 0x4000, 0x1a04, 0x57c2,
++ 0x9182, 0x0800, 0x1a04, 0x57c6, 0x2001, 0x180c, 0x2004, 0x9084,
++ 0x0003, 0x1904, 0x57cc, 0x9188, 0x1000, 0x2104, 0x905d, 0x0518,
++ 0xb804, 0x9084, 0x00ff, 0x908e, 0x0006, 0x1508, 0xb8a4, 0x900d,
++ 0x1904, 0x57de, 0xb850, 0x900d, 0x1148, 0xa802, 0x2900, 0xb852,
++ 0xb84e, 0x080c, 0x7be8, 0x9006, 0x012e, 0x0005, 0x00a6, 0x2150,
++ 0x2900, 0xb002, 0xa803, 0x0000, 0x00ae, 0xb852, 0x0c90, 0x2001,
++ 0x0005, 0x900e, 0x04b0, 0x2001, 0x0028, 0x900e, 0x0490, 0x9082,
++ 0x0006, 0x1288, 0x080c, 0x94d3, 0x1158, 0xb8a0, 0xd0bc, 0x1140,
++ 0xb900, 0xd1fc, 0x0998, 0x2001, 0x0029, 0x2009, 0x1000, 0x0408,
++ 0x2001, 0x0028, 0x00a8, 0x2009, 0x180c, 0x210c, 0xd18c, 0x0118,
++ 0x2001, 0x0004, 0x0068, 0xd184, 0x0118, 0x2001, 0x0004, 0x0040,
++ 0x2001, 0x0029, 0xb900, 0xd1fc, 0x0118, 0x2009, 0x1000, 0x0048,
++ 0x900e, 0x0038, 0x2001, 0x0029, 0x900e, 0x0018, 0x2001, 0x0029,
++ 0x900e, 0x9005, 0x012e, 0x0005, 0x2001, 0x180c, 0x2004, 0xd084,
++ 0x19d0, 0x9188, 0x1000, 0x2104, 0x905d, 0x09a8, 0x080c, 0x5f2d,
++ 0x1990, 0xb800, 0xd0c4, 0x0978, 0x0804, 0x5776, 0x080c, 0x5da9,
++ 0x0904, 0x578f, 0x0804, 0x577a, 0x00b6, 0x00e6, 0x0126, 0x2091,
++ 0x8000, 0xa974, 0x9182, 0x0800, 0x1a04, 0x583f, 0x9188, 0x1000,
++ 0x2104, 0x905d, 0x0528, 0xb8a0, 0x9086, 0x007f, 0x0130, 0x080c,
++ 0x5f35, 0x0118, 0x080c, 0x5f2d, 0x11f0, 0xa87c, 0xd0fc, 0x0138,
++ 0xa894, 0x9005, 0x0120, 0x2060, 0x2900, 0x6016, 0x0058, 0x080c,
++ 0x94fe, 0x05e0, 0x2b00, 0x6012, 0x2900, 0x6016, 0x600b, 0xffff,
++ 0x6023, 0x000a, 0x2009, 0x0003, 0x080c, 0x95ce, 0x9006, 0x0450,
++ 0x2001, 0x0028, 0x0430, 0x9082, 0x0006, 0x1288, 0x080c, 0x94d3,
++ 0x1158, 0xb8a0, 0xd0bc, 0x1140, 0xb900, 0xd1fc, 0x09b0, 0x2001,
++ 0x0029, 0x2009, 0x1000, 0x00a8, 0x2001, 0x0028, 0x0090, 0x2009,
++ 0x180c, 0x210c, 0xd18c, 0x0118, 0x2001, 0x0004, 0x0050, 0xd184,
++ 0x0118, 0x2001, 0x0004, 0x0028, 0x2001, 0x0029, 0x0010, 0x2001,
++ 0x0029, 0x9005, 0x012e, 0x00ee, 0x00be, 0x0005, 0x2001, 0x002c,
++ 0x0cc0, 0x00f6, 0x00b6, 0x0126, 0x2091, 0x8000, 0xa8e0, 0x9005,
++ 0x1550, 0xa8dc, 0x9082, 0x0101, 0x1630, 0xa8c8, 0x9005, 0x1518,
++ 0xa8c4, 0x9082, 0x0101, 0x12f8, 0xa974, 0x2079, 0x1800, 0x9182,
++ 0x0800, 0x12e8, 0x7830, 0x9084, 0x0003, 0x1130, 0xaa98, 0xab94,
++ 0xa878, 0x9084, 0x0007, 0x00ea, 0x7930, 0xd18c, 0x0118, 0x2001,
++ 0x0004, 0x0038, 0xd184, 0x0118, 0x2001, 0x0004, 0x0010, 0x2001,
++ 0x0029, 0x900e, 0x0038, 0x2001, 0x002c, 0x900e, 0x0018, 0x2001,
++ 0x0029, 0x900e, 0x9006, 0x0008, 0x9005, 0x012e, 0x00be, 0x00fe,
++ 0x0005, 0x58d5, 0x5891, 0x58a7, 0x58d5, 0x58d5, 0x58d5, 0x58d5,
++ 0x58d5, 0x2100, 0x9082, 0x007e, 0x1270, 0x080c, 0x5bb0, 0x0140,
++ 0xb810, 0x9306, 0x1904, 0x58dd, 0xb814, 0x9206, 0x15f0, 0x0028,
++ 0xbb12, 0xba16, 0x0010, 0x080c, 0x435a, 0x0150, 0x04b0, 0x080c,
++ 0x5c0d, 0x1598, 0xb810, 0x9306, 0x1580, 0xb814, 0x9206, 0x1568,
++ 0x080c, 0x94fe, 0x0530, 0x2b00, 0x6012, 0x080c, 0xb4e6, 0x2900,
++ 0x6016, 0x600b, 0xffff, 0x6023, 0x000a, 0xa878, 0x9086, 0x0001,
++ 0x1170, 0x080c, 0x2d1a, 0x9006, 0x080c, 0x5b4d, 0x2001, 0x0002,
++ 0x080c, 0x5b61, 0x2001, 0x0200, 0xb86e, 0xb893, 0x0002, 0x2009,
++ 0x0003, 0x080c, 0x95ce, 0x9006, 0x0068, 0x2001, 0x0001, 0x900e,
++ 0x0038, 0x2001, 0x002c, 0x900e, 0x0018, 0x2001, 0x0028, 0x900e,
++ 0x9005, 0x0000, 0x012e, 0x00be, 0x00fe, 0x0005, 0x00b6, 0x00f6,
++ 0x00e6, 0x0126, 0x2091, 0x8000, 0xa894, 0x90c6, 0x0015, 0x0904,
++ 0x5aa6, 0x90c6, 0x0056, 0x0904, 0x5aaa, 0x90c6, 0x0066, 0x0904,
++ 0x5aae, 0x90c6, 0x0071, 0x0904, 0x5ab2, 0x90c6, 0x0074, 0x0904,
++ 0x5ab6, 0x90c6, 0x007c, 0x0904, 0x5aba, 0x90c6, 0x007e, 0x0904,
++ 0x5abe, 0x90c6, 0x0037, 0x0904, 0x5ac2, 0x9016, 0x2079, 0x1800,
++ 0xa974, 0x9186, 0x00ff, 0x0904, 0x5aa1, 0x9182, 0x0800, 0x1a04,
++ 0x5aa1, 0x080c, 0x5c0d, 0x1190, 0xb804, 0x9084, 0x00ff, 0x9082,
++ 0x0006, 0x1260, 0xa894, 0x90c6, 0x006f, 0x0140, 0x080c, 0x94d3,
++ 0x1904, 0x5a8a, 0xb8a0, 0xd0bc, 0x1904, 0x5a8a, 0xa894, 0x90c6,
++ 0x006f, 0x0158, 0x90c6, 0x005e, 0x0904, 0x59e6, 0x90c6, 0x0064,
++ 0x0904, 0x5a12, 0x2008, 0x0804, 0x59a8, 0xa998, 0xa8b0, 0x2040,
++ 0x080c, 0x94d3, 0x1120, 0x9182, 0x007f, 0x0a04, 0x59a8, 0x9186,
++ 0x00ff, 0x0904, 0x59a8, 0x9182, 0x0800, 0x1a04, 0x59a8, 0xaaa0,
++ 0xab9c, 0x7874, 0x9306, 0x1188, 0x7878, 0x0096, 0x924e, 0x1128,
++ 0x2208, 0x2310, 0x009e, 0x0804, 0x59a8, 0x99cc, 0xff00, 0x009e,
++ 0x1120, 0x2208, 0x2310, 0x0804, 0x59a8, 0x080c, 0x435a, 0x0904,
++ 0x59b2, 0x900e, 0x9016, 0x90c6, 0x4000, 0x1558, 0x0006, 0x080c,
++ 0x5e2d, 0x1108, 0xc185, 0xb800, 0xd0bc, 0x0108, 0xc18d, 0x20a9,
++ 0x0004, 0xa860, 0x20e8, 0xa85c, 0x9080, 0x0031, 0x20a0, 0xb8b4,
++ 0x20e0, 0xb8b8, 0x9080, 0x0006, 0x2098, 0x080c, 0x0f2b, 0x20a9,
++ 0x0004, 0xa860, 0x20e8, 0xa85c, 0x9080, 0x0035, 0x20a0, 0xb8b4,
++ 0x20e0, 0xb8b8, 0x9080, 0x000a, 0x2098, 0x080c, 0x0f2b, 0x000e,
++ 0x0098, 0x90c6, 0x4007, 0x1110, 0x2408, 0x0070, 0x90c6, 0x4008,
++ 0x1118, 0x2708, 0x2610, 0x0040, 0x90c6, 0x4009, 0x1108, 0x0020,
++ 0x2001, 0x4005, 0x2009, 0x000a, 0xa896, 0xa99a, 0xaa9e, 0x2001,
++ 0x0030, 0x0470, 0x080c, 0x94fe, 0x1130, 0x2001, 0x4005, 0x2009,
++ 0x0003, 0x9016, 0x0c88, 0x2b00, 0x6012, 0x080c, 0xb4e6, 0x2900,
++ 0x6016, 0x6023, 0x0001, 0xa868, 0xd88c, 0x0108, 0xc0f5, 0xa86a,
++ 0x0126, 0x2091, 0x8000, 0x080c, 0x2d1a, 0x012e, 0x9006, 0x080c,
++ 0x5b4d, 0x2001, 0x0002, 0x080c, 0x5b61, 0x2009, 0x0002, 0x080c,
++ 0x95ce, 0xa8b0, 0xd094, 0x0118, 0xb8bc, 0xc08d, 0xb8be, 0x9006,
++ 0x9005, 0x012e, 0x00ee, 0x00fe, 0x00be, 0x0005, 0x080c, 0x4dfe,
++ 0x0118, 0x2009, 0x0007, 0x0410, 0xa998, 0xaeb0, 0x080c, 0x5c0d,
++ 0x0120, 0x2009, 0x000a, 0x0804, 0x59a8, 0x9186, 0x007f, 0x0130,
++ 0x080c, 0x5f2d, 0x0118, 0x2009, 0x0009, 0x0080, 0x0096, 0x080c,
++ 0x0fae, 0x1120, 0x009e, 0x2009, 0x0002, 0x0040, 0x2900, 0x009e,
++ 0xa806, 0x080c, 0xb275, 0x1998, 0x2009, 0x0003, 0x2001, 0x4005,
++ 0x0804, 0x59ac, 0xa998, 0xaeb0, 0x080c, 0x5c0d, 0x0120, 0x2009,
++ 0x000a, 0x0804, 0x59a8, 0x0096, 0x080c, 0x0fae, 0x1128, 0x009e,
++ 0x2009, 0x0002, 0x0804, 0x5a69, 0x2900, 0x009e, 0xa806, 0x0096,
++ 0x2048, 0x20a9, 0x002b, 0xb8b4, 0x20e0, 0xb8b8, 0x2098, 0xa860,
++ 0x20e8, 0xa85c, 0x9080, 0x0002, 0x20a0, 0x4003, 0x20a9, 0x0008,
++ 0x9080, 0x0006, 0x20a0, 0xbbb8, 0x9398, 0x0006, 0x2398, 0x080c,
++ 0x0f2b, 0x009e, 0xa87b, 0x0000, 0xa883, 0x0000, 0xa897, 0x4000,
++ 0xd684, 0x1168, 0x080c, 0x4dea, 0xd0b4, 0x1118, 0xa89b, 0x000b,
++ 0x00e0, 0xb800, 0xd08c, 0x0118, 0xa89b, 0x000c, 0x00b0, 0x080c,
++ 0x5f2d, 0x0118, 0xa89b, 0x0009, 0x0080, 0x080c, 0x4dfe, 0x0118,
++ 0xa89b, 0x0007, 0x0050, 0x080c, 0xb258, 0x1904, 0x59df, 0x2009,
++ 0x0003, 0x2001, 0x4005, 0x0804, 0x59ac, 0xa87b, 0x0030, 0xa897,
++ 0x4005, 0xa804, 0x8006, 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084,
++ 0xffc0, 0x2009, 0x002b, 0xaaa0, 0xab9c, 0xaca8, 0xada4, 0x2031,
++ 0x0000, 0x2041, 0x11e3, 0x080c, 0x9a1f, 0x1904, 0x59df, 0x2009,
++ 0x0002, 0x08f8, 0x2001, 0x0028, 0x900e, 0x0804, 0x59e0, 0x2009,
++ 0x180c, 0x210c, 0xd18c, 0x0118, 0x2001, 0x0004, 0x0038, 0xd184,
++ 0x0118, 0x2001, 0x0004, 0x0010, 0x2001, 0x0029, 0x900e, 0x0804,
++ 0x59e0, 0x2001, 0x0029, 0x900e, 0x0804, 0x59e0, 0x080c, 0x327f,
++ 0x0804, 0x59e1, 0x080c, 0x4b29, 0x0804, 0x59e1, 0x080c, 0x3fec,
++ 0x0804, 0x59e1, 0x080c, 0x43f5, 0x0804, 0x59e1, 0x080c, 0x4572,
++ 0x0804, 0x59e1, 0x080c, 0x4796, 0x0804, 0x59e1, 0x080c, 0x499b,
++ 0x0804, 0x59e1, 0x080c, 0x3459, 0x0804, 0x59e1, 0x00b6, 0xa974,
++ 0xae78, 0x9684, 0x3fff, 0x9082, 0x4000, 0x1618, 0x9182, 0x0800,
++ 0x1268, 0x9188, 0x1000, 0x2104, 0x905d, 0x0140, 0x080c, 0x5f2d,
++ 0x1148, 0x00e9, 0x080c, 0x5d38, 0x9006, 0x00b0, 0x2001, 0x0028,
++ 0x900e, 0x0090, 0x9082, 0x0006, 0x1240, 0xb900, 0xd1fc, 0x0d88,
++ 0x2001, 0x0029, 0x2009, 0x1000, 0x0038, 0x2001, 0x0029, 0x900e,
++ 0x0018, 0x2001, 0x0029, 0x900e, 0x9005, 0x00be, 0x0005, 0x0126,
++ 0x2091, 0x8000, 0xb850, 0x900d, 0x0150, 0x2900, 0x0096, 0x2148,
++ 0xa802, 0x009e, 0xa803, 0x0000, 0xb852, 0x012e, 0x0005, 0x2900,
++ 0xb852, 0xb84e, 0xa803, 0x0000, 0x0cc0, 0x0126, 0x2091, 0x8000,
++ 0xb84c, 0x9005, 0x0170, 0x00e6, 0x2071, 0x19b4, 0x7004, 0x9086,
++ 0x0002, 0x0168, 0x00ee, 0xb84c, 0xa802, 0x2900, 0xb84e, 0x012e,
++ 0x0005, 0x2900, 0xb852, 0xb84e, 0xa803, 0x0000, 0x0cc0, 0x701c,
++ 0x9b06, 0x1d80, 0xb84c, 0x00a6, 0x2050, 0xb000, 0xa802, 0x2900,
++ 0xb002, 0x00ae, 0x00ee, 0x012e, 0x0005, 0x0126, 0x2091, 0x8000,
++ 0xb84c, 0x904d, 0x0130, 0xa800, 0x9005, 0x1108, 0xb852, 0xb84e,
++ 0x9905, 0x012e, 0x0005, 0xb84c, 0x904d, 0x0130, 0xa800, 0x9005,
++ 0x1108, 0xb852, 0xb84e, 0x9905, 0x0005, 0x00b6, 0x0126, 0x00c6,
++ 0x0026, 0x2091, 0x8000, 0x6210, 0x2258, 0xba00, 0x9005, 0x0110,
++ 0xc285, 0x0008, 0xc284, 0xba02, 0x002e, 0x00ce, 0x012e, 0x00be,
++ 0x0005, 0x00b6, 0x0126, 0x00c6, 0x2091, 0x8000, 0x6210, 0x2258,
++ 0xba04, 0x0006, 0x9086, 0x0006, 0x1170, 0xb89c, 0xd0ac, 0x0158,
++ 0x080c, 0x5f29, 0x0140, 0x9284, 0xff00, 0x8007, 0x9086, 0x0007,
++ 0x1110, 0x2011, 0x0600, 0x000e, 0x9294, 0xff00, 0x9215, 0xba06,
++ 0x0006, 0x9086, 0x0006, 0x1120, 0xba90, 0x82ff, 0x090c, 0x0d84,
++ 0x000e, 0x00ce, 0x012e, 0x00be, 0x0005, 0x00b6, 0x0126, 0x00c6,
++ 0x2091, 0x8000, 0x6210, 0x2258, 0xba04, 0x0006, 0x9086, 0x0006,
++ 0x1168, 0xb89c, 0xd0a4, 0x0150, 0x080c, 0x5f25, 0x1138, 0x9284,
++ 0x00ff, 0x9086, 0x0007, 0x1110, 0x2011, 0x0006, 0x000e, 0x9294,
++ 0x00ff, 0x8007, 0x9215, 0xba06, 0x00ce, 0x012e, 0x00be, 0x0005,
++ 0x00d6, 0x0026, 0x9182, 0x0800, 0x0218, 0x9085, 0x0001, 0x00b0,
++ 0x9190, 0x1000, 0x2204, 0x905d, 0x1180, 0x0096, 0x080c, 0x0fae,
++ 0x2958, 0x009e, 0x0d90, 0x2b00, 0x2012, 0xb85c, 0xb8ba, 0xb860,
++ 0xb8b6, 0x9006, 0xb8a6, 0x080c, 0x56f3, 0x9006, 0x002e, 0x00de,
++ 0x0005, 0x00b6, 0x0096, 0x0126, 0x2091, 0x8000, 0x0026, 0x9182,
++ 0x0800, 0x0218, 0x9085, 0x0001, 0x0458, 0x00d6, 0x9190, 0x1000,
++ 0x2204, 0x905d, 0x0518, 0x2013, 0x0000, 0xb8a4, 0x904d, 0x0110,
++ 0x080c, 0x0fe0, 0x00d6, 0x00c6, 0xb8ac, 0x2060, 0x8cff, 0x0168,
++ 0x600c, 0x0006, 0x6014, 0x2048, 0x080c, 0xb0ad, 0x0110, 0x080c,
++ 0x0f60, 0x080c, 0x9554, 0x00ce, 0x0c88, 0x00ce, 0x00de, 0x2b48,
++ 0xb8b8, 0xb85e, 0xb8b4, 0xb862, 0x080c, 0x0ff0, 0x00de, 0x9006,
++ 0x002e, 0x012e, 0x009e, 0x00be, 0x0005, 0x0016, 0x9182, 0x0800,
++ 0x0218, 0x9085, 0x0001, 0x0030, 0x9188, 0x1000, 0x2104, 0x905d,
++ 0x0dc0, 0x9006, 0x001e, 0x0005, 0x00d6, 0x0156, 0x0136, 0x0146,
++ 0x9006, 0xb80a, 0xb80e, 0xb800, 0xc08c, 0xb802, 0x080c, 0x6877,
++ 0x1510, 0xb8a0, 0x9086, 0x007e, 0x0120, 0x080c, 0x94d3, 0x11d8,
++ 0x0078, 0x7040, 0xd0e4, 0x01b8, 0x00c6, 0x2061, 0x194f, 0x7048,
++ 0x2062, 0x704c, 0x6006, 0x7050, 0x600a, 0x7054, 0x600e, 0x00ce,
++ 0x703c, 0x2069, 0x0140, 0x9005, 0x1110, 0x2001, 0x0001, 0x6886,
++ 0x2069, 0x1800, 0x68ae, 0x7040, 0xb85e, 0x7048, 0xb862, 0x704c,
++ 0xb866, 0x20e1, 0x0000, 0x2099, 0x0276, 0xb8b4, 0x20e8, 0xb8b8,
++ 0x9088, 0x000a, 0x21a0, 0x20a9, 0x0004, 0x4003, 0x2099, 0x027a,
++ 0x9088, 0x0006, 0x21a0, 0x20a9, 0x0004, 0x4003, 0x2069, 0x0200,
++ 0x6817, 0x0001, 0x7040, 0xb86a, 0x7144, 0xb96e, 0x7048, 0xb872,
++ 0x7050, 0xb876, 0x2069, 0x0200, 0x6817, 0x0000, 0xb8a0, 0x9086,
++ 0x007e, 0x1110, 0x7144, 0xb96e, 0x9182, 0x0211, 0x1218, 0x2009,
++ 0x0008, 0x0400, 0x9182, 0x0259, 0x1218, 0x2009, 0x0007, 0x00d0,
++ 0x9182, 0x02c1, 0x1218, 0x2009, 0x0006, 0x00a0, 0x9182, 0x0349,
++ 0x1218, 0x2009, 0x0005, 0x0070, 0x9182, 0x0421, 0x1218, 0x2009,
++ 0x0004, 0x0040, 0x9182, 0x0581, 0x1218, 0x2009, 0x0003, 0x0010,
++ 0x2009, 0x0002, 0xb992, 0x014e, 0x013e, 0x015e, 0x00de, 0x0005,
++ 0x0016, 0x0026, 0x00e6, 0x2071, 0x0260, 0x7034, 0xb896, 0x703c,
++ 0xb89a, 0x7054, 0xb89e, 0x0036, 0xbbbc, 0xc384, 0xba00, 0x2009,
++ 0x1872, 0x210c, 0xd0bc, 0x0120, 0xd1ec, 0x0110, 0xc2ad, 0x0008,
++ 0xc2ac, 0xd0c4, 0x0148, 0xd1e4, 0x0138, 0xc2bd, 0xd0cc, 0x0128,
++ 0xd38c, 0x1108, 0xc385, 0x0008, 0xc2bc, 0xba02, 0xbbbe, 0x003e,
++ 0x00ee, 0x002e, 0x001e, 0x0005, 0x0096, 0x0126, 0x2091, 0x8000,
++ 0xb8a4, 0x904d, 0x0578, 0xa900, 0x81ff, 0x15c0, 0xaa04, 0x9282,
++ 0x0010, 0x16c8, 0x0136, 0x0146, 0x01c6, 0x01d6, 0x8906, 0x8006,
++ 0x8007, 0x908c, 0x003f, 0x21e0, 0x9084, 0xffc0, 0x9080, 0x0004,
++ 0x2098, 0x2009, 0x0010, 0x20a9, 0x0001, 0x4002, 0x9086, 0xffff,
++ 0x0120, 0x8109, 0x1dd0, 0x080c, 0x0d84, 0x3c00, 0x20e8, 0x3300,
++ 0x8001, 0x20a0, 0x4604, 0x8210, 0xaa06, 0x01de, 0x01ce, 0x014e,
++ 0x013e, 0x0060, 0x080c, 0x0fae, 0x0170, 0x2900, 0xb8a6, 0xa803,
++ 0x0000, 0x080c, 0x5dc9, 0xa807, 0x0001, 0xae12, 0x9085, 0x0001,
++ 0x012e, 0x009e, 0x0005, 0x9006, 0x0cd8, 0x0126, 0x2091, 0x8000,
++ 0x0096, 0xb8a4, 0x904d, 0x0188, 0xa800, 0x9005, 0x1150, 0x080c,
++ 0x5dd8, 0x1158, 0xa804, 0x908a, 0x0002, 0x0218, 0x8001, 0xa806,
++ 0x0020, 0x080c, 0x0fe0, 0xb8a7, 0x0000, 0x009e, 0x012e, 0x0005,
++ 0x0126, 0x2091, 0x8000, 0x080c, 0x7be8, 0x012e, 0x0005, 0x901e,
++ 0x0010, 0x2019, 0x0001, 0x900e, 0x0126, 0x2091, 0x8000, 0xb84c,
++ 0x2048, 0xb800, 0xd0dc, 0x1170, 0x89ff, 0x0500, 0x83ff, 0x0120,
++ 0xa878, 0x9606, 0x0158, 0x0030, 0xa86c, 0x9406, 0x1118, 0xa870,
++ 0x9506, 0x0120, 0x2908, 0xa800, 0x2048, 0x0c70, 0x080c, 0x8eec,
++ 0xaa00, 0xb84c, 0x9906, 0x1110, 0xba4e, 0x0020, 0x00a6, 0x2150,
++ 0xb202, 0x00ae, 0x82ff, 0x1110, 0xb952, 0x89ff, 0x012e, 0x0005,
++ 0x9016, 0x0489, 0x1110, 0x2011, 0x0001, 0x0005, 0x080c, 0x5e2d,
++ 0x0118, 0x080c, 0xb15e, 0x0010, 0x9085, 0x0001, 0x0005, 0x080c,
++ 0x5e2d, 0x0118, 0x080c, 0xb0f8, 0x0010, 0x9085, 0x0001, 0x0005,
++ 0x080c, 0x5e2d, 0x0118, 0x080c, 0xb15b, 0x0010, 0x9085, 0x0001,
++ 0x0005, 0x080c, 0x5e2d, 0x0118, 0x080c, 0xb11c, 0x0010, 0x9085,
++ 0x0001, 0x0005, 0x080c, 0x5e2d, 0x0118, 0x080c, 0xb188, 0x0010,
++ 0x9085, 0x0001, 0x0005, 0xb8a4, 0x900d, 0x1118, 0x9085, 0x0001,
++ 0x0005, 0x0136, 0x01c6, 0xa800, 0x9005, 0x11b8, 0x890e, 0x810e,
++ 0x810f, 0x9184, 0x003f, 0x20e0, 0x9184, 0xffc0, 0x9080, 0x0004,
++ 0x2098, 0x20a9, 0x0001, 0x2009, 0x0010, 0x4002, 0x9606, 0x0128,
++ 0x8109, 0x1dd8, 0x9085, 0x0001, 0x0008, 0x9006, 0x01ce, 0x013e,
++ 0x0005, 0x0146, 0x01d6, 0xa860, 0x20e8, 0xa85c, 0x9080, 0x0004,
++ 0x20a0, 0x20a9, 0x0010, 0x2009, 0xffff, 0x4104, 0x01de, 0x014e,
++ 0x0136, 0x01c6, 0xa800, 0x9005, 0x11b8, 0x890e, 0x810e, 0x810f,
++ 0x9184, 0x003f, 0x20e0, 0x9184, 0xffc0, 0x9080, 0x0004, 0x2098,
++ 0x20a9, 0x0001, 0x2009, 0x0010, 0x4002, 0x9606, 0x0128, 0x8109,
++ 0x1dd8, 0x9085, 0x0001, 0x0068, 0x0146, 0x01d6, 0x3300, 0x8001,
++ 0x20a0, 0x3c00, 0x20e8, 0x2001, 0xffff, 0x4004, 0x01de, 0x014e,
++ 0x9006, 0x01ce, 0x013e, 0x0005, 0x0096, 0x0126, 0x2091, 0x8000,
++ 0xb8a4, 0x904d, 0x1128, 0x080c, 0x0fae, 0x0168, 0x2900, 0xb8a6,
++ 0x080c, 0x5dc9, 0xa803, 0x0001, 0xa807, 0x0000, 0x9085, 0x0001,
++ 0x012e, 0x009e, 0x0005, 0x9006, 0x0cd8, 0x0096, 0x0126, 0x2091,
++ 0x8000, 0xb8a4, 0x904d, 0x0130, 0xb8a7, 0x0000, 0x080c, 0x0fe0,
++ 0x9085, 0x0001, 0x012e, 0x009e, 0x0005, 0xb89c, 0xd0a4, 0x0005,
++ 0x00b6, 0x00f6, 0x080c, 0x6877, 0x01b0, 0x71c0, 0x81ff, 0x1198,
++ 0x71d8, 0xd19c, 0x0180, 0x2001, 0x007e, 0x9080, 0x1000, 0x2004,
++ 0x905d, 0x0148, 0xb804, 0x9084, 0x00ff, 0x9086, 0x0006, 0x1118,
++ 0xb800, 0xc0ed, 0xb802, 0x2079, 0x1852, 0x7804, 0xd0a4, 0x01d0,
++ 0x0156, 0x20a9, 0x007f, 0x900e, 0x0016, 0x080c, 0x5c0d, 0x1168,
++ 0xb804, 0x9084, 0xff00, 0x8007, 0x9096, 0x0004, 0x0118, 0x9086,
++ 0x0006, 0x1118, 0xb800, 0xc0ed, 0xb802, 0x001e, 0x8108, 0x1f04,
++ 0x5e54, 0x015e, 0x080c, 0x5eeb, 0x0120, 0x2001, 0x1952, 0x200c,
++ 0x0038, 0x2079, 0x1852, 0x7804, 0xd0a4, 0x0130, 0x2009, 0x07d0,
++ 0x2011, 0x5e7f, 0x080c, 0x78a5, 0x00fe, 0x00be, 0x0005, 0x00b6,
++ 0x2011, 0x5e7f, 0x080c, 0x781a, 0x080c, 0x5eeb, 0x01d8, 0x2001,
++ 0x107e, 0x2004, 0x2058, 0xb900, 0xc1ec, 0xb902, 0x080c, 0x5f29,
++ 0x0130, 0x2009, 0x07d0, 0x2011, 0x5e7f, 0x080c, 0x78a5, 0x00e6,
++ 0x2071, 0x1800, 0x9006, 0x7076, 0x7058, 0x707a, 0x080c, 0x2b1e,
++ 0x00ee, 0x0488, 0x0156, 0x00c6, 0x20a9, 0x007f, 0x900e, 0x0016,
++ 0x080c, 0x5c0d, 0x1510, 0xb800, 0xd0ec, 0x01f8, 0x0046, 0xbaa0,
++ 0x2220, 0x9006, 0x2009, 0x0029, 0x080c, 0xc9c5, 0xb800, 0xc0e5,
++ 0xc0ec, 0xb802, 0xb804, 0x9084, 0x00ff, 0x9085, 0x0700, 0xb806,
++ 0x2019, 0x0029, 0x080c, 0x7d55, 0x0076, 0x903e, 0x080c, 0x7c4d,
++ 0x900e, 0x080c, 0xc73e, 0x007e, 0x004e, 0x001e, 0x8108, 0x1f04,
++ 0x5ea7, 0x00ce, 0x015e, 0x00be, 0x0005, 0x00b6, 0x6010, 0x2058,
++ 0xb800, 0xc0ec, 0xb802, 0x00be, 0x0005, 0x7810, 0x00b6, 0x2058,
++ 0xb800, 0x00be, 0xd0ac, 0x0005, 0x7810, 0x00b6, 0x2058, 0xb800,
++ 0x00be, 0xd0bc, 0x0005, 0x00b6, 0x00f6, 0x2001, 0x107e, 0x2004,
++ 0x905d, 0x0110, 0xb800, 0xd0ec, 0x00fe, 0x00be, 0x0005, 0x0126,
++ 0x0026, 0x2091, 0x8000, 0x0006, 0xbaa0, 0x9290, 0x1000, 0x2204,
++ 0x9b06, 0x190c, 0x0d84, 0x000e, 0xba00, 0x9005, 0x0110, 0xc2fd,
++ 0x0008, 0xc2fc, 0xba02, 0x002e, 0x012e, 0x0005, 0x2011, 0x1836,
++ 0x2204, 0xd0cc, 0x0138, 0x2001, 0x1950, 0x200c, 0x2011, 0x5f1b,
++ 0x080c, 0x78a5, 0x0005, 0x2011, 0x5f1b, 0x080c, 0x781a, 0x2011,
++ 0x1836, 0x2204, 0xc0cc, 0x2012, 0x0005, 0x080c, 0x4dea, 0xd0ac,
++ 0x0005, 0x080c, 0x4dea, 0xd0a4, 0x0005, 0x0016, 0xb904, 0x9184,
++ 0x00ff, 0x908e, 0x0006, 0x001e, 0x0005, 0x0016, 0xb904, 0x9184,
++ 0xff00, 0x8007, 0x908e, 0x0006, 0x001e, 0x0005, 0x00b6, 0x00f6,
++ 0x080c, 0xb759, 0x0158, 0x70d8, 0x9084, 0x0028, 0x0138, 0x2001,
++ 0x107f, 0x2004, 0x905d, 0x0110, 0xb8bc, 0xd094, 0x00fe, 0x00be,
++ 0x0005, 0x2071, 0x1904, 0x7003, 0x0001, 0x7007, 0x0000, 0x9006,
++ 0x7012, 0x7016, 0x701a, 0x701e, 0x700a, 0x7046, 0x2001, 0x1917,
++ 0x2003, 0x0000, 0x0005, 0x0016, 0x00e6, 0x2071, 0x1918, 0x900e,
++ 0x710a, 0x080c, 0x4dea, 0xd0fc, 0x1140, 0x080c, 0x4dea, 0x900e,
++ 0xd09c, 0x0108, 0x8108, 0x7102, 0x00f8, 0x2001, 0x1872, 0x200c,
++ 0x9184, 0x0007, 0x0002, 0x5f6d, 0x5f6d, 0x5f6d, 0x5f6d, 0x5f6d,
++ 0x5f83, 0x5f91, 0x5f6d, 0x7003, 0x0003, 0x2009, 0x1873, 0x210c,
++ 0x9184, 0xff00, 0x8007, 0x9005, 0x1110, 0x2001, 0x0002, 0x7006,
++ 0x0018, 0x7003, 0x0005, 0x0c88, 0x00ee, 0x001e, 0x0005, 0x00e6,
++ 0x2071, 0x0050, 0x684c, 0x9005, 0x1150, 0x00e6, 0x2071, 0x1904,
++ 0x7028, 0xc085, 0x702a, 0x00ee, 0x9085, 0x0001, 0x0488, 0x6844,
++ 0x9005, 0x0158, 0x080c, 0x6bb2, 0x6a60, 0x9200, 0x7002, 0x6864,
++ 0x9101, 0x7006, 0x9006, 0x7012, 0x7016, 0x6860, 0x7002, 0x6864,
++ 0x7006, 0x6868, 0x700a, 0x686c, 0x700e, 0x6844, 0x9005, 0x1110,
++ 0x7012, 0x7016, 0x684c, 0x701a, 0x701c, 0x9085, 0x0040, 0x701e,
++ 0x7037, 0x0019, 0x702b, 0x0001, 0x00e6, 0x2071, 0x1904, 0x7028,
++ 0xc084, 0x702a, 0x7007, 0x0001, 0x700b, 0x0000, 0x00ee, 0x9006,
++ 0x00ee, 0x0005, 0xa868, 0xd0fc, 0x11c8, 0x00e6, 0x0026, 0x2001,
++ 0x1918, 0x2004, 0x9005, 0x0904, 0x61ae, 0xa87c, 0xd0bc, 0x1904,
++ 0x61ae, 0xa978, 0xa874, 0x9105, 0x1904, 0x61ae, 0x2001, 0x1918,
++ 0x2004, 0x0002, 0x61ae, 0x6017, 0x6051, 0x6051, 0x0005, 0xa868,
++ 0xd0fc, 0x11e0, 0x00e6, 0x0026, 0x2009, 0x1918, 0x210c, 0x81ff,
++ 0x0904, 0x61ae, 0xa87c, 0xd0cc, 0x0904, 0x61ae, 0xa880, 0x9084,
++ 0x00ff, 0x9086, 0x0001, 0x1904, 0x61ae, 0x9186, 0x0003, 0x0904,
++ 0x6051, 0xa84f, 0x8021, 0xa853, 0x0017, 0x0028, 0x0005, 0xa84f,
++ 0x8020, 0xa853, 0x0016, 0x2071, 0x1904, 0x701c, 0x9005, 0x1904,
++ 0x6360, 0x0e04, 0x63a9, 0x2071, 0x0000, 0xa84c, 0x7082, 0xa850,
++ 0x7032, 0xa86c, 0x7086, 0x7036, 0xa870, 0x708a, 0x2091, 0x4080,
++ 0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x113e, 0x2071, 0x1800,
++ 0x2011, 0x0001, 0xa804, 0x900d, 0x702c, 0x1148, 0xa802, 0x2900,
++ 0x702e, 0x70bc, 0x9200, 0x70be, 0x002e, 0x00ee, 0x0005, 0x0096,
++ 0x2148, 0xa904, 0xa802, 0x8210, 0x2900, 0x81ff, 0x1dc8, 0x009e,
++ 0x0c68, 0xa84f, 0x0000, 0x00f6, 0x2079, 0x0050, 0x2071, 0x1904,
++ 0xa803, 0x0000, 0x7010, 0x9005, 0x1904, 0x6136, 0x782c, 0x908c,
++ 0x0780, 0x190c, 0x64ce, 0x8004, 0x8004, 0x8004, 0x9084, 0x0003,
++ 0x0002, 0x606f, 0x6136, 0x6092, 0x60d5, 0x080c, 0x0d84, 0x2071,
++ 0x1800, 0x2900, 0x7822, 0xa804, 0x900d, 0x1170, 0x2071, 0x19c7,
++ 0x7040, 0x9005, 0x1328, 0x2001, 0x1919, 0x2004, 0x8005, 0x7042,
++ 0x00fe, 0x002e, 0x00ee, 0x0005, 0x9016, 0x702c, 0x2148, 0xa904,
++ 0xa802, 0x8210, 0x2900, 0x81ff, 0x1dc8, 0x702e, 0x70bc, 0x9200,
++ 0x70be, 0x0c20, 0x2071, 0x1800, 0x2900, 0x7822, 0xa804, 0x900d,
++ 0x1570, 0x7824, 0x00e6, 0x2071, 0x0040, 0x712c, 0xd19c, 0x1148,
++ 0x2009, 0x182f, 0x210c, 0x918a, 0x0040, 0x0218, 0x7022, 0x00ee,
++ 0x0048, 0x00ee, 0x2048, 0x702c, 0xa802, 0x2900, 0x702e, 0x70bc,
++ 0x8000, 0x70be, 0x782c, 0x9094, 0x0780, 0x190c, 0x64ce, 0xd0a4,
++ 0x1d00, 0x2071, 0x19c7, 0x7040, 0x9005, 0x1328, 0x2001, 0x1919,
++ 0x2004, 0x8005, 0x7042, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x9016,
++ 0x702c, 0x2148, 0xa904, 0xa802, 0x8210, 0x2900, 0x81ff, 0x1dc8,
++ 0x702e, 0x70bc, 0x9200, 0x70be, 0x0820, 0x0096, 0x00e6, 0x7824,
++ 0x2048, 0x2071, 0x1800, 0x702c, 0xa802, 0x2900, 0x702e, 0x70bc,
++ 0x8000, 0x70be, 0x782c, 0x9094, 0x0780, 0x190c, 0x64ce, 0xd0a4,
++ 0x1d70, 0x00ee, 0x782c, 0x9094, 0x0780, 0x190c, 0x64ce, 0xd09c,
++ 0x11a0, 0x009e, 0x2900, 0x7822, 0xa804, 0x900d, 0x1560, 0x2071,
++ 0x19c7, 0x7040, 0x9005, 0x1328, 0x2001, 0x1919, 0x2004, 0x8005,
++ 0x7042, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x009e, 0x2908, 0x7010,
++ 0x8000, 0x7012, 0x7018, 0x904d, 0x711a, 0x0110, 0xa902, 0x0008,
++ 0x711e, 0x2148, 0xa804, 0x900d, 0x1170, 0x2071, 0x19c7, 0x7040,
++ 0x9005, 0x1328, 0x2001, 0x1919, 0x2004, 0x8005, 0x7042, 0x00fe,
++ 0x002e, 0x00ee, 0x0005, 0x2071, 0x1800, 0x9016, 0x702c, 0x2148,
++ 0xa904, 0xa802, 0x8210, 0x2900, 0x81ff, 0x1dc8, 0x702e, 0x70bc,
++ 0x9200, 0x70be, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x2908, 0x7010,
++ 0x8000, 0x7012, 0x7018, 0x904d, 0x711a, 0x0110, 0xa902, 0x0008,
++ 0x711e, 0x2148, 0xa804, 0x900d, 0x1904, 0x6189, 0x782c, 0x9094,
++ 0x0780, 0x190c, 0x64ce, 0xd09c, 0x1198, 0x701c, 0x904d, 0x0180,
++ 0x7010, 0x8001, 0x7012, 0x1108, 0x701a, 0xa800, 0x701e, 0x2900,
++ 0x7822, 0x782c, 0x9094, 0x0780, 0x190c, 0x64ce, 0xd09c, 0x0d68,
++ 0x782c, 0x9094, 0x0780, 0x190c, 0x64ce, 0xd0a4, 0x01a0, 0x00e6,
++ 0x7824, 0x2048, 0x2071, 0x1800, 0x702c, 0xa802, 0x2900, 0x702e,
++ 0x70bc, 0x8000, 0x70be, 0x782c, 0x9094, 0x0780, 0x190c, 0x64ce,
++ 0xd0a4, 0x1d70, 0x00ee, 0x2071, 0x19c7, 0x7040, 0x9005, 0x1328,
++ 0x2001, 0x1919, 0x2004, 0x8005, 0x7042, 0x00fe, 0x002e, 0x00ee,
++ 0x0005, 0x00e6, 0x2071, 0x1800, 0x9016, 0x702c, 0x2148, 0xa904,
++ 0xa802, 0x8210, 0x2900, 0x81ff, 0x1dc8, 0x702e, 0x70bc, 0x9200,
++ 0x70be, 0x00ee, 0x0804, 0x6146, 0xa868, 0xd0fc, 0x1904, 0x61ea,
++ 0x0096, 0xa804, 0xa807, 0x0000, 0x904d, 0x190c, 0x0f60, 0x009e,
++ 0x0018, 0xa868, 0xd0fc, 0x15f0, 0x00e6, 0x0026, 0xa84f, 0x0000,
++ 0x00f6, 0x2079, 0x0050, 0x2071, 0x1800, 0x70f0, 0x8001, 0x01d0,
++ 0x1678, 0x2071, 0x1904, 0xa803, 0x0000, 0x7010, 0x9005, 0x1904,
++ 0x62de, 0x782c, 0x908c, 0x0780, 0x190c, 0x64ce, 0x8004, 0x8004,
++ 0x8004, 0x9084, 0x0003, 0x0002, 0x61eb, 0x62de, 0x6204, 0x6271,
++ 0x080c, 0x0d84, 0x70f3, 0x0fa0, 0x71ec, 0x8107, 0x9106, 0x9094,
++ 0x00c0, 0x9184, 0xff3f, 0x9205, 0x70ee, 0x3b08, 0x3a00, 0x9104,
++ 0x918d, 0x00c0, 0x21d8, 0x9084, 0xff3f, 0x9205, 0x20d0, 0x0888,
++ 0x70f2, 0x0878, 0x0005, 0x2071, 0x1800, 0x2900, 0x7822, 0xa804,
++ 0x900d, 0x1120, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x9016, 0x702c,
++ 0x2148, 0xa904, 0xa802, 0x8210, 0x2900, 0x81ff, 0x1dc8, 0x702e,
++ 0x70bc, 0x9200, 0x70be, 0x0c70, 0x2071, 0x1800, 0x2900, 0x7822,
++ 0xa804, 0x900d, 0x1904, 0x6262, 0x7830, 0x8007, 0x9084, 0x001f,
++ 0x9082, 0x0005, 0x1220, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x7824,
++ 0x00e6, 0x2071, 0x0040, 0x712c, 0xd19c, 0x1148, 0x2009, 0x182f,
++ 0x210c, 0x918a, 0x0040, 0x0218, 0x7022, 0x00ee, 0x0048, 0x00ee,
++ 0x2048, 0x702c, 0xa802, 0x2900, 0x702e, 0x70bc, 0x8000, 0x70be,
++ 0x782c, 0x9094, 0x0780, 0x190c, 0x64ce, 0xd0a4, 0x1d00, 0x0e04,
++ 0x6259, 0x7838, 0x7938, 0x910e, 0x1de0, 0x00d6, 0x2069, 0x0000,
++ 0x6836, 0x6833, 0x0013, 0x00de, 0x2001, 0x1915, 0x200c, 0xc184,
++ 0x2102, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c,
++ 0x113e, 0x2009, 0x1917, 0x200b, 0x0000, 0x00fe, 0x002e, 0x00ee,
++ 0x0005, 0x2001, 0x1915, 0x200c, 0xc185, 0x2102, 0x00fe, 0x002e,
++ 0x00ee, 0x0005, 0x9016, 0x702c, 0x2148, 0xa904, 0xa802, 0x8210,
++ 0x2900, 0x81ff, 0x1dc8, 0x702e, 0x70bc, 0x9200, 0x70be, 0x0804,
++ 0x6217, 0x0096, 0x00e6, 0x7824, 0x2048, 0x2071, 0x1800, 0x702c,
++ 0xa802, 0x2900, 0x702e, 0x70bc, 0x8000, 0x70be, 0x782c, 0x9094,
++ 0x0780, 0x190c, 0x64ce, 0xd0a4, 0x1d70, 0x00ee, 0x0e04, 0x62b3,
++ 0x7838, 0x7938, 0x910e, 0x1de0, 0x00d6, 0x2069, 0x0000, 0x6836,
++ 0x6833, 0x0013, 0x00de, 0x7044, 0xc084, 0x7046, 0x2091, 0x4080,
++ 0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x113e, 0x2009, 0x1917,
++ 0x200b, 0x0000, 0x782c, 0x9094, 0x0780, 0x190c, 0x64ce, 0xd09c,
++ 0x1170, 0x009e, 0x2900, 0x7822, 0xa804, 0x900d, 0x11e0, 0x00fe,
++ 0x002e, 0x00ee, 0x0005, 0x7044, 0xc085, 0x7046, 0x0c58, 0x009e,
++ 0x2908, 0x7010, 0x8000, 0x7012, 0x7018, 0x904d, 0x711a, 0x0110,
++ 0xa902, 0x0008, 0x711e, 0x2148, 0xa804, 0x900d, 0x1120, 0x00fe,
++ 0x002e, 0x00ee, 0x0005, 0x2071, 0x1800, 0x9016, 0x702c, 0x2148,
++ 0xa904, 0xa802, 0x8210, 0x2900, 0x81ff, 0x1dc8, 0x702e, 0x70bc,
++ 0x9200, 0x70be, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x2908, 0x7010,
++ 0x8000, 0x7012, 0x7018, 0x904d, 0x711a, 0x0110, 0xa902, 0x0008,
++ 0x711e, 0x2148, 0xa804, 0x900d, 0x1904, 0x634d, 0x782c, 0x9094,
++ 0x0780, 0x190c, 0x64ce, 0xd09c, 0x11b0, 0x701c, 0x904d, 0x0198,
++ 0xa84c, 0x9005, 0x1180, 0x7010, 0x8001, 0x7012, 0x1108, 0x701a,
++ 0xa800, 0x701e, 0x2900, 0x7822, 0x782c, 0x9094, 0x0780, 0x190c,
++ 0x64ce, 0xd09c, 0x0d50, 0x782c, 0x9094, 0x0780, 0x190c, 0x64ce,
++ 0xd0a4, 0x05b8, 0x00e6, 0x7824, 0x2048, 0x2071, 0x1800, 0x702c,
++ 0xa802, 0x2900, 0x702e, 0x70bc, 0x8000, 0x70be, 0x782c, 0x9094,
++ 0x0780, 0x190c, 0x64ce, 0xd0a4, 0x1d70, 0x00ee, 0x0e04, 0x6346,
++ 0x7838, 0x7938, 0x910e, 0x1de0, 0x00d6, 0x2069, 0x0000, 0x6836,
++ 0x6833, 0x0013, 0x00de, 0x7044, 0xc084, 0x7046, 0x2091, 0x4080,
++ 0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x113e, 0x2009, 0x1917,
++ 0x200b, 0x0000, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x7044, 0xc085,
++ 0x7046, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x00e6, 0x2071, 0x1800,
++ 0x9016, 0x702c, 0x2148, 0xa904, 0xa802, 0x8210, 0x2900, 0x81ff,
++ 0x1dc8, 0x702e, 0x70bc, 0x9200, 0x70be, 0x00ee, 0x0804, 0x62ee,
++ 0x2071, 0x1904, 0xa803, 0x0000, 0x2908, 0x7010, 0x8000, 0x7012,
++ 0x7018, 0x904d, 0x711a, 0x0110, 0xa902, 0x0008, 0x711e, 0x2148,
++ 0xa804, 0x900d, 0x1128, 0x1e04, 0x6389, 0x002e, 0x00ee, 0x0005,
++ 0x2071, 0x1800, 0x9016, 0x702c, 0x2148, 0xa904, 0xa802, 0x8210,
++ 0x2900, 0x81ff, 0x1dc8, 0x702e, 0x70bc, 0x9200, 0x70be, 0x0e04,
++ 0x6375, 0x2071, 0x1904, 0x701c, 0x2048, 0xa84c, 0x900d, 0x0d28,
++ 0x2071, 0x0000, 0x7182, 0xa850, 0x7032, 0xa86c, 0x7086, 0x7036,
++ 0xa870, 0x708a, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084,
++ 0x190c, 0x113e, 0x2071, 0x1904, 0x080c, 0x64ba, 0x002e, 0x00ee,
++ 0x0005, 0x2071, 0x1904, 0xa803, 0x0000, 0x2908, 0x7010, 0x8000,
++ 0x7012, 0x7018, 0x904d, 0x711a, 0x0110, 0xa902, 0x0008, 0x711e,
++ 0x2148, 0xa804, 0x900d, 0x1118, 0x002e, 0x00ee, 0x0005, 0x2071,
++ 0x1800, 0x9016, 0x702c, 0x2148, 0xa904, 0xa802, 0x8210, 0x2900,
++ 0x81ff, 0x1dc8, 0x702e, 0x70bc, 0x9200, 0x70be, 0x002e, 0x00ee,
++ 0x0005, 0x0006, 0xa87c, 0x0006, 0xa867, 0x0103, 0x20a9, 0x001c,
++ 0xa860, 0x20e8, 0xa85c, 0x9080, 0x001d, 0x20a0, 0x9006, 0x4004,
++ 0x000e, 0x9084, 0x00ff, 0xa87e, 0x000e, 0xa87a, 0xa982, 0x0005,
++ 0x2071, 0x1904, 0x7004, 0x0002, 0x63f2, 0x63f3, 0x64b9, 0x63f3,
++ 0x0d84, 0x64b9, 0x0005, 0x2001, 0x1918, 0x2004, 0x0002, 0x63fd,
++ 0x63fd, 0x6452, 0x6453, 0x63fd, 0x6453, 0x0126, 0x2091, 0x8000,
++ 0x1e0c, 0x64d9, 0x701c, 0x904d, 0x01e0, 0xa84c, 0x9005, 0x01d8,
++ 0x0e04, 0x6421, 0xa94c, 0x2071, 0x0000, 0x7182, 0xa850, 0x7032,
++ 0xa86c, 0x7086, 0x7036, 0xa870, 0x708a, 0x2091, 0x4080, 0x2001,
++ 0x0089, 0x2004, 0xd084, 0x190c, 0x113e, 0x2071, 0x1904, 0x080c,
++ 0x64ba, 0x012e, 0x0470, 0x2001, 0x005b, 0x2004, 0x9094, 0x0780,
++ 0x190c, 0x64ce, 0xd09c, 0x2071, 0x1904, 0x1510, 0x2071, 0x1904,
++ 0x700f, 0x0001, 0xa964, 0x9184, 0x00ff, 0x9086, 0x0003, 0x1130,
++ 0x810f, 0x918c, 0x00ff, 0x8101, 0x0108, 0x710e, 0x2900, 0x00d6,
++ 0x2069, 0x0050, 0x6822, 0x00de, 0x2071, 0x1904, 0x701c, 0x2048,
++ 0x7010, 0x8001, 0x7012, 0xa800, 0x701e, 0x9005, 0x1108, 0x701a,
++ 0x012e, 0x0005, 0x0005, 0x00d6, 0x2008, 0x2069, 0x19c7, 0x6840,
++ 0x9005, 0x0760, 0x0158, 0x9186, 0x0003, 0x0540, 0x2001, 0x1813,
++ 0x2004, 0x2009, 0x1a8a, 0x210c, 0x9102, 0x1500, 0x0126, 0x2091,
++ 0x8000, 0x2069, 0x0050, 0x693c, 0x6838, 0x9106, 0x0190, 0x0e04,
++ 0x6485, 0x2069, 0x0000, 0x6837, 0x8040, 0x6833, 0x0012, 0x6883,
++ 0x8040, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c,
++ 0x113e, 0x2069, 0x19c7, 0x6843, 0xffff, 0x012e, 0x00de, 0x0126,
++ 0x2091, 0x8000, 0x1e0c, 0x654b, 0x701c, 0x904d, 0x0540, 0x2001,
++ 0x005b, 0x2004, 0x9094, 0x0780, 0x15c9, 0xd09c, 0x1500, 0x2071,
++ 0x1904, 0x700f, 0x0001, 0xa964, 0x9184, 0x00ff, 0x9086, 0x0003,
++ 0x1130, 0x810f, 0x918c, 0x00ff, 0x8101, 0x0108, 0x710e, 0x2900,
++ 0x00d6, 0x2069, 0x0050, 0x6822, 0x00de, 0x701c, 0x2048, 0x7010,
++ 0x8001, 0x7012, 0xa800, 0x701e, 0x9005, 0x1108, 0x701a, 0x012e,
++ 0x0005, 0x0005, 0x0126, 0x2091, 0x8000, 0x701c, 0x904d, 0x0160,
++ 0x7010, 0x8001, 0x7012, 0xa800, 0x701e, 0x9005, 0x1108, 0x701a,
++ 0x012e, 0x080c, 0x0fe0, 0x0005, 0x012e, 0x0005, 0x2091, 0x8000,
++ 0x0e04, 0x64d0, 0x0006, 0x0016, 0x2001, 0x8004, 0x0006, 0x0804,
++ 0x0d8d, 0x0096, 0x00f6, 0x2079, 0x0050, 0x7044, 0xd084, 0x01e0,
++ 0xc084, 0x7046, 0x7838, 0x7938, 0x910e, 0x1de0, 0x00d6, 0x2069,
++ 0x0000, 0x6836, 0x6833, 0x0013, 0x00de, 0x2091, 0x4080, 0x2001,
++ 0x0089, 0x2004, 0xd084, 0x190c, 0x113e, 0x2009, 0x1917, 0x200b,
++ 0x0000, 0x00fe, 0x009e, 0x0005, 0x782c, 0x9094, 0x0780, 0x1971,
++ 0xd0a4, 0x0db8, 0x2001, 0x1918, 0x2004, 0x2009, 0x1917, 0x2104,
++ 0x8000, 0x200a, 0x9082, 0x000f, 0x0e60, 0x00e6, 0x2071, 0x1800,
++ 0x7824, 0x00e6, 0x2071, 0x0040, 0x712c, 0xd19c, 0x1148, 0x2009,
++ 0x182f, 0x210c, 0x918a, 0x0040, 0x0218, 0x7022, 0x00ee, 0x0048,
++ 0x00ee, 0x2048, 0x702c, 0xa802, 0x2900, 0x702e, 0x70bc, 0x8000,
++ 0x70be, 0x782c, 0x9094, 0x0780, 0x190c, 0x64ce, 0xd0a4, 0x1d00,
++ 0x7838, 0x7938, 0x910e, 0x1de0, 0x00d6, 0x2069, 0x0000, 0x6836,
++ 0x6833, 0x0013, 0x00de, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004,
++ 0xd084, 0x190c, 0x113e, 0x2009, 0x1917, 0x200b, 0x0000, 0x00ee,
++ 0x00fe, 0x009e, 0x0005, 0x00f6, 0x2079, 0x0050, 0x7044, 0xd084,
++ 0x01b8, 0xc084, 0x7046, 0x7838, 0x7938, 0x910e, 0x1de0, 0x00d6,
++ 0x2069, 0x0000, 0x6836, 0x6833, 0x0013, 0x00de, 0x2091, 0x4080,
++ 0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x113e, 0x00fe, 0x0005,
++ 0x782c, 0x9094, 0x0780, 0x190c, 0x64ce, 0xd0a4, 0x0db8, 0x00e6,
++ 0x2071, 0x1800, 0x7824, 0x2048, 0x702c, 0xa802, 0x2900, 0x702e,
++ 0x70bc, 0x8000, 0x70be, 0x782c, 0x9094, 0x0780, 0x190c, 0x64ce,
++ 0xd0a4, 0x1d80, 0x00d6, 0x2069, 0x0050, 0x693c, 0x2069, 0x1918,
++ 0x6808, 0x690a, 0x2069, 0x19c7, 0x9102, 0x1118, 0x6840, 0x9005,
++ 0x1328, 0x2001, 0x1919, 0x200c, 0x810d, 0x6942, 0x00de, 0x00ee,
++ 0x00fe, 0x0005, 0x7090, 0x908a, 0x0029, 0x1a0c, 0x0d84, 0x9082,
++ 0x001d, 0x001b, 0x6027, 0x1e00, 0x0005, 0x666d, 0x65f7, 0x6613,
++ 0x663b, 0x665c, 0x669c, 0x66ae, 0x6613, 0x6684, 0x65b2, 0x65e0,
++ 0x65b1, 0x0005, 0x00d6, 0x2069, 0x0200, 0x6804, 0x9005, 0x1180,
++ 0x6808, 0x9005, 0x1518, 0x7093, 0x0028, 0x2069, 0x195c, 0x2d04,
++ 0x7002, 0x080c, 0x69a3, 0x6028, 0x9085, 0x0600, 0x602a, 0x00b0,
++ 0x7093, 0x0028, 0x2069, 0x195c, 0x2d04, 0x7002, 0x6028, 0x9085,
++ 0x0600, 0x602a, 0x00e6, 0x0036, 0x0046, 0x0056, 0x2071, 0x1a30,
++ 0x080c, 0x1827, 0x005e, 0x004e, 0x003e, 0x00ee, 0x00de, 0x0005,
++ 0x00d6, 0x2069, 0x0200, 0x6804, 0x9005, 0x1178, 0x6808, 0x9005,
++ 0x1160, 0x7093, 0x0028, 0x2069, 0x195c, 0x2d04, 0x7002, 0x080c,
++ 0x6a2d, 0x6028, 0x9085, 0x0600, 0x602a, 0x00de, 0x0005, 0x0006,
++ 0x2001, 0x0090, 0x080c, 0x28a5, 0x000e, 0x6124, 0xd1e4, 0x1190,
++ 0x080c, 0x671b, 0xd1d4, 0x1160, 0xd1dc, 0x1138, 0xd1cc, 0x0150,
++ 0x7093, 0x0020, 0x080c, 0x671b, 0x0028, 0x7093, 0x001d, 0x0010,
++ 0x7093, 0x001f, 0x0005, 0x2001, 0x0088, 0x080c, 0x28a5, 0x6124,
++ 0xd1cc, 0x11d8, 0xd1dc, 0x11b0, 0xd1e4, 0x1188, 0x9184, 0x1e00,
++ 0x11c8, 0x60e3, 0x0001, 0x600c, 0xc0b4, 0x600e, 0x080c, 0x68a3,
++ 0x2001, 0x0080, 0x080c, 0x28a5, 0x7093, 0x0028, 0x0058, 0x7093,
++ 0x001e, 0x0040, 0x7093, 0x001d, 0x0028, 0x7093, 0x0020, 0x0010,
++ 0x7093, 0x001f, 0x0005, 0x60e3, 0x0001, 0x600c, 0xc0b4, 0x600e,
++ 0x080c, 0x68a3, 0x2001, 0x0080, 0x080c, 0x28a5, 0x6124, 0xd1d4,
++ 0x1180, 0xd1dc, 0x1158, 0xd1e4, 0x1130, 0x9184, 0x1e00, 0x1158,
++ 0x7093, 0x0028, 0x0040, 0x7093, 0x001e, 0x0028, 0x7093, 0x001d,
++ 0x0010, 0x7093, 0x001f, 0x0005, 0x2001, 0x00a0, 0x080c, 0x28a5,
++ 0x6124, 0xd1dc, 0x1138, 0xd1e4, 0x0138, 0x080c, 0x1851, 0x7093,
++ 0x001e, 0x0010, 0x7093, 0x001d, 0x0005, 0x080c, 0x6794, 0x6124,
++ 0xd1dc, 0x1188, 0x080c, 0x671b, 0x0016, 0x080c, 0x1851, 0x001e,
++ 0xd1d4, 0x1128, 0xd1e4, 0x0138, 0x7093, 0x001e, 0x0020, 0x7093,
++ 0x001f, 0x080c, 0x671b, 0x0005, 0x0006, 0x2001, 0x00a0, 0x080c,
++ 0x28a5, 0x000e, 0x6124, 0xd1d4, 0x1160, 0xd1cc, 0x1150, 0xd1dc,
++ 0x1128, 0xd1e4, 0x0140, 0x7093, 0x001e, 0x0028, 0x7093, 0x001d,
++ 0x0010, 0x7093, 0x0021, 0x0005, 0x080c, 0x6794, 0x6124, 0xd1d4,
++ 0x1150, 0xd1dc, 0x1128, 0xd1e4, 0x0140, 0x7093, 0x001e, 0x0028,
++ 0x7093, 0x001d, 0x0010, 0x7093, 0x001f, 0x0005, 0x0006, 0x2001,
++ 0x0090, 0x080c, 0x28a5, 0x000e, 0x6124, 0xd1d4, 0x1178, 0xd1cc,
++ 0x1150, 0xd1dc, 0x1128, 0xd1e4, 0x0158, 0x7093, 0x001e, 0x0040,
++ 0x7093, 0x001d, 0x0028, 0x7093, 0x0020, 0x0010, 0x7093, 0x001f,
++ 0x0005, 0x0016, 0x00c6, 0x00d6, 0x00e6, 0x0126, 0x2061, 0x0100,
++ 0x2069, 0x0140, 0x2071, 0x1800, 0x2091, 0x8000, 0x080c, 0x6877,
++ 0x11d8, 0x2001, 0x180c, 0x200c, 0xd1b4, 0x01b0, 0xc1b4, 0x2102,
++ 0x6027, 0x0200, 0x080c, 0x27ef, 0x6024, 0xd0cc, 0x0148, 0x2001,
++ 0x00a0, 0x080c, 0x28a5, 0x080c, 0x6b40, 0x080c, 0x56d9, 0x0428,
++ 0x6028, 0xc0cd, 0x602a, 0x0408, 0x080c, 0x6891, 0x0150, 0x080c,
++ 0x6888, 0x1138, 0x2001, 0x0001, 0x080c, 0x23a6, 0x080c, 0x6853,
++ 0x00a0, 0x080c, 0x6791, 0x0178, 0x2001, 0x0001, 0x080c, 0x23a6,
++ 0x7090, 0x9086, 0x001e, 0x0120, 0x7090, 0x9086, 0x0022, 0x1118,
++ 0x7093, 0x0025, 0x0010, 0x7093, 0x0021, 0x012e, 0x00ee, 0x00de,
++ 0x00ce, 0x001e, 0x0005, 0x0026, 0x2011, 0x672c, 0x080c, 0x78e7,
++ 0x002e, 0x0016, 0x0026, 0x2009, 0x0064, 0x2011, 0x672c, 0x080c,
++ 0x78de, 0x002e, 0x001e, 0x0005, 0x00e6, 0x00f6, 0x0016, 0x080c,
++ 0x8b50, 0x2071, 0x1800, 0x080c, 0x66c9, 0x001e, 0x00fe, 0x00ee,
++ 0x0005, 0x0016, 0x0026, 0x0036, 0x00c6, 0x00d6, 0x00e6, 0x00f6,
++ 0x0126, 0x080c, 0x8b50, 0x2061, 0x0100, 0x2069, 0x0140, 0x2071,
++ 0x1800, 0x2091, 0x8000, 0x6028, 0xc09c, 0x602a, 0x2011, 0x0003,
++ 0x080c, 0x8e99, 0x2011, 0x0002, 0x080c, 0x8ea3, 0x080c, 0x8d59,
++ 0x080c, 0x7893, 0x0036, 0x901e, 0x080c, 0x8dfe, 0x003e, 0x60e3,
++ 0x0000, 0x080c, 0xcd0a, 0x080c, 0xcd25, 0x2009, 0x0004, 0x080c,
++ 0x27f5, 0x080c, 0x2718, 0x2001, 0x1800, 0x2003, 0x0004, 0x6027,
++ 0x0008, 0x080c, 0x0b69, 0x2001, 0x0001, 0x080c, 0x23a6, 0x012e,
++ 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x003e, 0x002e, 0x001e, 0x0005,
++ 0x0026, 0x00e6, 0x2011, 0x6739, 0x2071, 0x19c7, 0x701c, 0x9206,
++ 0x1118, 0x7018, 0x9005, 0x0110, 0x9085, 0x0001, 0x00ee, 0x002e,
++ 0x0005, 0x6020, 0xd09c, 0x0005, 0x6800, 0x9084, 0xfffe, 0x9086,
++ 0x00c0, 0x01b8, 0x2001, 0x00c0, 0x080c, 0x28a5, 0x0156, 0x20a9,
++ 0x002d, 0x1d04, 0x67a1, 0x2091, 0x6000, 0x1f04, 0x67a1, 0x015e,
++ 0x00d6, 0x2069, 0x1800, 0x6894, 0x8001, 0x0220, 0x0118, 0x6896,
++ 0x00de, 0x0005, 0x6897, 0x0014, 0x68ec, 0xd0dc, 0x0dc8, 0x6800,
++ 0x9086, 0x0001, 0x1da8, 0x080c, 0x78f3, 0x0c90, 0x00c6, 0x00d6,
++ 0x00e6, 0x2061, 0x0100, 0x2069, 0x0140, 0x2071, 0x1800, 0x2001,
++ 0x194c, 0x200c, 0x9186, 0x0000, 0x0158, 0x9186, 0x0001, 0x0158,
++ 0x9186, 0x0002, 0x0158, 0x9186, 0x0003, 0x0158, 0x0804, 0x6843,
++ 0x7093, 0x0022, 0x0040, 0x7093, 0x0021, 0x0028, 0x7093, 0x0023,
++ 0x0010, 0x7093, 0x0024, 0x60e3, 0x0000, 0x6887, 0x0001, 0x2001,
++ 0x0001, 0x080c, 0x2471, 0x0026, 0x080c, 0x94da, 0x002e, 0x7000,
++ 0x908e, 0x0004, 0x0118, 0x602b, 0x0028, 0x0010, 0x602b, 0x0020,
++ 0x0156, 0x0126, 0x2091, 0x8000, 0x20a9, 0x0005, 0x6024, 0xd0ac,
++ 0x0120, 0x012e, 0x015e, 0x0804, 0x684f, 0x6800, 0x9084, 0x00a1,
++ 0xc0bd, 0x6802, 0x080c, 0x27ef, 0x6904, 0xd1d4, 0x1140, 0x2001,
++ 0x0100, 0x080c, 0x28a5, 0x1f04, 0x67fe, 0x080c, 0x68d0, 0x012e,
++ 0x015e, 0x080c, 0x6888, 0x01a8, 0x6044, 0x9005, 0x0168, 0x6050,
++ 0x0006, 0x9085, 0x0020, 0x6052, 0x080c, 0x68d0, 0x9006, 0x8001,
++ 0x1df0, 0x000e, 0x6052, 0x0028, 0x6804, 0xd0d4, 0x1110, 0x080c,
++ 0x68d0, 0x0016, 0x0026, 0x7000, 0x908e, 0x0004, 0x0130, 0x2009,
++ 0x00c8, 0x2011, 0x6739, 0x080c, 0x78a5, 0x002e, 0x001e, 0x2001,
++ 0x194c, 0x2003, 0x0004, 0x080c, 0x659a, 0x080c, 0x6888, 0x0138,
++ 0x6804, 0xd0d4, 0x1120, 0xd0dc, 0x1100, 0x080c, 0x6b45, 0x00ee,
++ 0x00de, 0x00ce, 0x0005, 0x00c6, 0x00d6, 0x00e6, 0x2061, 0x0100,
++ 0x2069, 0x0140, 0x2071, 0x1800, 0x080c, 0x6b4f, 0x2001, 0x193c,
++ 0x2003, 0x0000, 0x9006, 0x7092, 0x60e2, 0x6886, 0x080c, 0x2471,
++ 0x9006, 0x080c, 0x28a5, 0x6043, 0x0090, 0x6043, 0x0010, 0x6027,
++ 0xffff, 0x602b, 0x182f, 0x00ee, 0x00de, 0x00ce, 0x0005, 0x0006,
++ 0x2001, 0x194b, 0x2004, 0x9086, 0xaaaa, 0x000e, 0x0005, 0x0006,
++ 0x080c, 0x4dee, 0x9084, 0x0030, 0x9086, 0x0000, 0x000e, 0x0005,
++ 0x0006, 0x080c, 0x4dee, 0x9084, 0x0030, 0x9086, 0x0030, 0x000e,
++ 0x0005, 0x0006, 0x080c, 0x4dee, 0x9084, 0x0030, 0x9086, 0x0010,
++ 0x000e, 0x0005, 0x0006, 0x080c, 0x4dee, 0x9084, 0x0030, 0x9086,
++ 0x0020, 0x000e, 0x0005, 0x0036, 0x0016, 0x2001, 0x180c, 0x2004,
++ 0x908c, 0x0013, 0x0190, 0x9084, 0x0011, 0x0120, 0x080c, 0x2491,
++ 0x900e, 0x0028, 0x080c, 0x5f25, 0x1dc8, 0x2009, 0x0002, 0x2019,
++ 0x0028, 0x080c, 0x2ce5, 0x9006, 0x0019, 0x001e, 0x003e, 0x0005,
++ 0x00e6, 0x2071, 0x180c, 0x2e04, 0x0130, 0x080c, 0xb752, 0x1128,
++ 0x9085, 0x0010, 0x0010, 0x9084, 0xffef, 0x2072, 0x00ee, 0x0005,
++ 0x6050, 0x0006, 0x60ec, 0x0006, 0x600c, 0x0006, 0x6004, 0x0006,
++ 0x6028, 0x0006, 0x0016, 0x6138, 0x6050, 0x9084, 0xfbff, 0x9085,
++ 0x2000, 0x6052, 0x613a, 0x20a9, 0x0012, 0x1d04, 0x68e5, 0x2091,
++ 0x6000, 0x1f04, 0x68e5, 0x602f, 0x0100, 0x602f, 0x0000, 0x6050,
++ 0x9085, 0x0400, 0x9084, 0xdfff, 0x6052, 0x613a, 0x001e, 0x602f,
++ 0x0040, 0x602f, 0x0000, 0x000e, 0x602a, 0x000e, 0x6006, 0x000e,
++ 0x600e, 0x000e, 0x60ee, 0x60e3, 0x0000, 0x6887, 0x0001, 0x2001,
++ 0x0001, 0x080c, 0x2471, 0x2001, 0x00a0, 0x080c, 0x28a5, 0x000e,
++ 0x6052, 0x6058, 0x0006, 0xc0e5, 0x605a, 0x00f6, 0x2079, 0x0100,
++ 0x080c, 0x2764, 0x00fe, 0x000e, 0x605a, 0x0005, 0x0156, 0x0016,
++ 0x0026, 0x0036, 0x00c6, 0x00d6, 0x00e6, 0x2061, 0x0100, 0x2069,
++ 0x0140, 0x2071, 0x1800, 0x6020, 0x9084, 0x0080, 0x0138, 0x2001,
++ 0x180c, 0x200c, 0xc1c5, 0x2102, 0x0804, 0x6996, 0x2001, 0x180c,
++ 0x200c, 0xc1c4, 0x2102, 0x6028, 0x9084, 0xe1ff, 0x602a, 0x6027,
++ 0x0200, 0x2001, 0x0090, 0x080c, 0x28a5, 0x20a9, 0x0366, 0x6024,
++ 0xd0cc, 0x11f0, 0x1d04, 0x6947, 0x2091, 0x6000, 0x1f04, 0x6947,
++ 0x2011, 0x0003, 0x080c, 0x8e99, 0x2011, 0x0002, 0x080c, 0x8ea3,
++ 0x080c, 0x8d59, 0x901e, 0x080c, 0x8dfe, 0x2001, 0x00a0, 0x080c,
++ 0x28a5, 0x080c, 0x6b40, 0x080c, 0x56d9, 0x9085, 0x0001, 0x0470,
++ 0x86ff, 0x1110, 0x080c, 0x1851, 0x60e3, 0x0000, 0x2001, 0x193c,
++ 0x2004, 0x080c, 0x2471, 0x60e2, 0x2001, 0x0080, 0x080c, 0x28a5,
++ 0x20a9, 0x0366, 0x6027, 0x1e00, 0x2009, 0x1e00, 0x080c, 0x27ef,
++ 0x6024, 0x910c, 0x0138, 0x1d04, 0x697a, 0x2091, 0x6000, 0x1f04,
++ 0x697a, 0x0830, 0x6028, 0x9085, 0x1e00, 0x602a, 0x70ac, 0x9005,
++ 0x1118, 0x6887, 0x0001, 0x0008, 0x6886, 0x9006, 0x080c, 0xb759,
++ 0x0110, 0x080c, 0x0cfc, 0x00ee, 0x00de, 0x00ce, 0x003e, 0x002e,
++ 0x001e, 0x015e, 0x0005, 0x0156, 0x0016, 0x0026, 0x0036, 0x00c6,
++ 0x00d6, 0x00e6, 0x2061, 0x0100, 0x2071, 0x1800, 0x2069, 0x0140,
++ 0x6020, 0x9084, 0x00c0, 0x0120, 0x6884, 0x9005, 0x1904, 0x69f7,
++ 0x2001, 0x0088, 0x080c, 0x28a5, 0x9006, 0x60e2, 0x6886, 0x080c,
++ 0x2471, 0x2069, 0x0200, 0x6804, 0x9005, 0x1118, 0x6808, 0x9005,
++ 0x01c0, 0x6028, 0x9084, 0xfbff, 0x602a, 0x6027, 0x0400, 0x2069,
++ 0x195c, 0x7000, 0x206a, 0x7093, 0x0026, 0x7003, 0x0001, 0x20a9,
++ 0x0002, 0x1d04, 0x69d9, 0x2091, 0x6000, 0x1f04, 0x69d9, 0x0804,
++ 0x6a25, 0x2069, 0x0140, 0x20a9, 0x0384, 0x6027, 0x1e00, 0x2009,
++ 0x1e00, 0x080c, 0x27ef, 0x6024, 0x910c, 0x0508, 0x9084, 0x1a00,
++ 0x11f0, 0x1d04, 0x69e5, 0x2091, 0x6000, 0x1f04, 0x69e5, 0x2011,
++ 0x0003, 0x080c, 0x8e99, 0x2011, 0x0002, 0x080c, 0x8ea3, 0x080c,
++ 0x8d59, 0x901e, 0x080c, 0x8dfe, 0x2001, 0x00a0, 0x080c, 0x28a5,
++ 0x080c, 0x6b40, 0x080c, 0x56d9, 0x9085, 0x0001, 0x00b0, 0x2001,
++ 0x0080, 0x080c, 0x28a5, 0x2069, 0x0140, 0x60e3, 0x0000, 0x70ac,
++ 0x9005, 0x1118, 0x6887, 0x0001, 0x0008, 0x6886, 0x2001, 0x193c,
++ 0x2004, 0x080c, 0x2471, 0x60e2, 0x9006, 0x00ee, 0x00de, 0x00ce,
++ 0x003e, 0x002e, 0x001e, 0x015e, 0x0005, 0x0156, 0x0016, 0x0026,
++ 0x0036, 0x00c6, 0x00d6, 0x00e6, 0x2061, 0x0100, 0x2071, 0x1800,
++ 0x6020, 0x9084, 0x00c0, 0x01c8, 0x2011, 0x0003, 0x080c, 0x8e99,
++ 0x2011, 0x0002, 0x080c, 0x8ea3, 0x080c, 0x8d59, 0x901e, 0x080c,
++ 0x8dfe, 0x2069, 0x0140, 0x2001, 0x00a0, 0x080c, 0x28a5, 0x080c,
++ 0x6b40, 0x080c, 0x56d9, 0x0804, 0x6ac0, 0x2001, 0x180c, 0x200c,
++ 0xd1b4, 0x1160, 0xc1b5, 0x2102, 0x080c, 0x6721, 0x2069, 0x0140,
++ 0x2001, 0x0080, 0x080c, 0x28a5, 0x60e3, 0x0000, 0x2069, 0x0200,
++ 0x6804, 0x9005, 0x1118, 0x6808, 0x9005, 0x0180, 0x6028, 0x9084,
++ 0xfdff, 0x602a, 0x6027, 0x0200, 0x2069, 0x195c, 0x7000, 0x206a,
++ 0x7093, 0x0027, 0x7003, 0x0001, 0x0804, 0x6ac0, 0x6027, 0x1e00,
++ 0x2009, 0x1e00, 0x080c, 0x27ef, 0x6024, 0x910c, 0x01c8, 0x9084,
++ 0x1c00, 0x11b0, 0x1d04, 0x6a7e, 0x0006, 0x0016, 0x00c6, 0x00d6,
++ 0x00e6, 0x080c, 0x7778, 0x00ee, 0x00de, 0x00ce, 0x001e, 0x000e,
++ 0x00e6, 0x2071, 0x19c7, 0x7018, 0x00ee, 0x9005, 0x19f8, 0x0500,
++ 0x0026, 0x2011, 0x6739, 0x080c, 0x781a, 0x2011, 0x672c, 0x080c,
++ 0x78e7, 0x002e, 0x2069, 0x0140, 0x60e3, 0x0000, 0x70ac, 0x9005,
++ 0x1118, 0x6887, 0x0001, 0x0008, 0x6886, 0x2001, 0x193c, 0x2004,
++ 0x080c, 0x2471, 0x60e2, 0x2001, 0x180c, 0x200c, 0xc1b4, 0x2102,
++ 0x00ee, 0x00de, 0x00ce, 0x003e, 0x002e, 0x001e, 0x015e, 0x0005,
++ 0x0156, 0x0016, 0x0026, 0x0036, 0x0046, 0x00c6, 0x00e6, 0x2061,
++ 0x0100, 0x2071, 0x1800, 0x080c, 0xb752, 0x1904, 0x6b2e, 0x7130,
++ 0xd184, 0x1170, 0x080c, 0x2e69, 0x0138, 0xc18d, 0x7132, 0x2011,
++ 0x1853, 0x2214, 0xd2ac, 0x1120, 0x7030, 0xd08c, 0x0904, 0x6b2e,
++ 0x2011, 0x1853, 0x220c, 0xd1a4, 0x0538, 0x0016, 0x2019, 0x000e,
++ 0x080c, 0xc941, 0x0156, 0x00b6, 0x20a9, 0x007f, 0x900e, 0x9186,
++ 0x007e, 0x01a0, 0x9186, 0x0080, 0x0188, 0x080c, 0x5c0d, 0x1170,
++ 0x2120, 0x9006, 0x0016, 0x2009, 0x000e, 0x080c, 0xc9c5, 0x2009,
++ 0x0001, 0x2011, 0x0100, 0x080c, 0x7a0a, 0x001e, 0x8108, 0x1f04,
++ 0x6af7, 0x00be, 0x015e, 0x001e, 0xd1ac, 0x1148, 0x0016, 0x2009,
++ 0x0002, 0x2019, 0x0004, 0x080c, 0x2ce5, 0x001e, 0x0078, 0x0156,
++ 0x00b6, 0x20a9, 0x007f, 0x900e, 0x080c, 0x5c0d, 0x1110, 0x080c,
++ 0x56f3, 0x8108, 0x1f04, 0x6b24, 0x00be, 0x015e, 0x080c, 0x1851,
++ 0x080c, 0x94da, 0x60e3, 0x0000, 0x080c, 0x56d9, 0x080c, 0x67be,
++ 0x00ee, 0x00ce, 0x004e, 0x003e, 0x002e, 0x001e, 0x015e, 0x0005,
++ 0x2001, 0x194c, 0x2003, 0x0001, 0x0005, 0x2001, 0x194c, 0x2003,
++ 0x0000, 0x0005, 0x2001, 0x194b, 0x2003, 0xaaaa, 0x0005, 0x2001,
++ 0x194b, 0x2003, 0x0000, 0x0005, 0x2071, 0x18ee, 0x7003, 0x0000,
++ 0x7007, 0x0000, 0x080c, 0x0fc7, 0x090c, 0x0d84, 0xa8ab, 0xdcb0,
++ 0x2900, 0x704e, 0x080c, 0x0fc7, 0x090c, 0x0d84, 0xa8ab, 0xdcb0,
++ 0x2900, 0x7052, 0xa867, 0x0000, 0xa86b, 0x0001, 0xa89f, 0x0000,
++ 0x0005, 0x00e6, 0x2071, 0x0040, 0x6848, 0x9005, 0x1118, 0x9085,
++ 0x0001, 0x04b0, 0x6840, 0x9005, 0x0150, 0x04a1, 0x6a50, 0x9200,
++ 0x7002, 0x6854, 0x9101, 0x7006, 0x9006, 0x7012, 0x7016, 0x6850,
++ 0x7002, 0x6854, 0x7006, 0x6858, 0x700a, 0x685c, 0x700e, 0x6840,
++ 0x9005, 0x1110, 0x7012, 0x7016, 0x6848, 0x701a, 0x701c, 0x9085,
++ 0x0040, 0x701e, 0x2001, 0x0019, 0x7036, 0x702b, 0x0001, 0x2001,
++ 0x0004, 0x200c, 0x918c, 0xfff7, 0x918d, 0x8000, 0x2102, 0x00d6,
++ 0x2069, 0x18ee, 0x6807, 0x0001, 0x00de, 0x080c, 0x70f9, 0x9006,
++ 0x00ee, 0x0005, 0x900e, 0x0156, 0x20a9, 0x0006, 0x8003, 0x2011,
++ 0x0100, 0x2214, 0x9296, 0x0008, 0x1110, 0x818d, 0x0010, 0x81f5,
++ 0x3e08, 0x1f04, 0x6bb6, 0x015e, 0x0005, 0x2079, 0x0040, 0x2071,
++ 0x18ee, 0x7004, 0x0002, 0x6bd5, 0x6bd6, 0x6c0b, 0x6c66, 0x6d61,
++ 0x6bd3, 0x6bd3, 0x6d8b, 0x080c, 0x0d84, 0x0005, 0x2079, 0x0040,
++ 0x782c, 0x908c, 0x0780, 0x190c, 0x7185, 0xd0a4, 0x01f0, 0x7824,
++ 0x2048, 0x9006, 0xa802, 0xa806, 0xa864, 0x9084, 0x00ff, 0x908a,
++ 0x0040, 0x12c0, 0x04db, 0x2001, 0x1800, 0x200c, 0x9186, 0x0003,
++ 0x1160, 0x7104, 0x9186, 0x0004, 0x0140, 0x9186, 0x0007, 0x0128,
++ 0x9186, 0x0003, 0x19e8, 0x080c, 0x6c66, 0x782c, 0xd09c, 0x090c,
++ 0x70f9, 0x0005, 0x9082, 0x005a, 0x1218, 0x2100, 0x002b, 0x0c18,
++ 0x080c, 0x6c9c, 0x0c90, 0x0005, 0x6c9c, 0x6c9c, 0x6c9c, 0x6c9c,
++ 0x6c9c, 0x6c9c, 0x6c9c, 0x6c9c, 0x6cbe, 0x6c9c, 0x6c9c, 0x6c9c,
++ 0x6c9c, 0x6c9c, 0x6c9c, 0x6c9c, 0x6c9c, 0x6c9c, 0x6c9c, 0x6c9c,
++ 0x6c9c, 0x6c9c, 0x6c9c, 0x6c9c, 0x6c9c, 0x6c9c, 0x6c9c, 0x6c9c,
++ 0x6ca8, 0x6c9c, 0x6e60, 0x6c9c, 0x6c9c, 0x6c9c, 0x6c9c, 0x6c9c,
++ 0x6ca8, 0x6ea1, 0x6ee2, 0x6f29, 0x6f3d, 0x6c9c, 0x6c9c, 0x6cbe,
++ 0x6ca8, 0x6c9c, 0x6c9c, 0x6d35, 0x6fe8, 0x7003, 0x6c9c, 0x6cbe,
++ 0x6c9c, 0x6c9c, 0x6c9c, 0x6c9c, 0x6d2b, 0x7003, 0x6c9c, 0x6c9c,
++ 0x6c9c, 0x6c9c, 0x6c9c, 0x6c9c, 0x6c9c, 0x6c9c, 0x6c9c, 0x6cd2,
++ 0x6c9c, 0x6c9c, 0x6c9c, 0x6c9c, 0x6c9c, 0x6c9c, 0x6c9c, 0x6c9c,
++ 0x6c9c, 0x7129, 0x6c9c, 0x6c9c, 0x6c9c, 0x6c9c, 0x6c9c, 0x6ce6,
++ 0x6c9c, 0x6c9c, 0x6c9c, 0x6c9c, 0x6c9c, 0x6c9c, 0x2079, 0x0040,
++ 0x7004, 0x9086, 0x0003, 0x1198, 0x782c, 0x080c, 0x7122, 0xd0a4,
++ 0x0170, 0x7824, 0x2048, 0x9006, 0xa802, 0xa806, 0xa864, 0x9084,
++ 0x00ff, 0x908a, 0x001a, 0x1210, 0x002b, 0x0c50, 0x00e9, 0x080c,
++ 0x70f9, 0x0005, 0x6c9c, 0x6ca8, 0x6e4c, 0x6c9c, 0x6ca8, 0x6c9c,
++ 0x6ca8, 0x6ca8, 0x6c9c, 0x6ca8, 0x6e4c, 0x6ca8, 0x6ca8, 0x6ca8,
++ 0x6ca8, 0x6ca8, 0x6c9c, 0x6ca8, 0x6e4c, 0x6c9c, 0x6c9c, 0x6ca8,
++ 0x6c9c, 0x6c9c, 0x6c9c, 0x6ca8, 0x00e6, 0x2071, 0x18ee, 0x2009,
++ 0x0400, 0x0071, 0x00ee, 0x0005, 0x2009, 0x1000, 0x0049, 0x0005,
++ 0x2009, 0x2000, 0x0029, 0x0005, 0x2009, 0x0800, 0x0009, 0x0005,
++ 0x7007, 0x0001, 0xa868, 0x9084, 0x00ff, 0x9105, 0xa86a, 0x0126,
++ 0x2091, 0x8000, 0x080c, 0x61a9, 0x012e, 0x0005, 0xa864, 0x8007,
++ 0x9084, 0x00ff, 0x0d08, 0x8001, 0x1120, 0x7007, 0x0001, 0x0804,
++ 0x6e0a, 0x7007, 0x0003, 0x7012, 0x2900, 0x7016, 0x701a, 0x704b,
++ 0x6e0a, 0x0005, 0xa864, 0x8007, 0x9084, 0x00ff, 0x0968, 0x8001,
++ 0x1120, 0x7007, 0x0001, 0x0804, 0x6e25, 0x7007, 0x0003, 0x7012,
++ 0x2900, 0x7016, 0x701a, 0x704b, 0x6e25, 0x0005, 0xa864, 0x8007,
++ 0x9084, 0x00ff, 0x9086, 0x0001, 0x1904, 0x6ca4, 0x7007, 0x0001,
++ 0x2009, 0x1833, 0x210c, 0x81ff, 0x11a8, 0xa868, 0x9084, 0x00ff,
++ 0xa86a, 0xa883, 0x0000, 0x080c, 0x58e6, 0x1108, 0x0005, 0x0126,
++ 0x2091, 0x8000, 0xa867, 0x0139, 0xa87a, 0xa982, 0x080c, 0x61a9,
++ 0x012e, 0x0ca0, 0xa994, 0x9186, 0x0071, 0x0d38, 0x9186, 0x0064,
++ 0x0d20, 0x9186, 0x007c, 0x0d08, 0x9186, 0x0028, 0x09f0, 0x9186,
++ 0x0038, 0x09d8, 0x9186, 0x0078, 0x09c0, 0x9186, 0x005f, 0x09a8,
++ 0x9186, 0x0056, 0x0990, 0xa897, 0x4005, 0xa89b, 0x0001, 0x2001,
++ 0x0030, 0x900e, 0x08a0, 0xa87c, 0x9084, 0x00c0, 0x9086, 0x00c0,
++ 0x1120, 0x7007, 0x0001, 0x0804, 0x701a, 0x2900, 0x7016, 0x701a,
++ 0x20a9, 0x0004, 0xa860, 0x20e0, 0xa85c, 0x9080, 0x0030, 0x2098,
++ 0x7050, 0x2040, 0xa060, 0x20e8, 0xa05c, 0x9080, 0x0023, 0x20a0,
++ 0x4003, 0xa888, 0x7012, 0x9082, 0x0401, 0x1a04, 0x6cac, 0xaab4,
++ 0x928a, 0x0002, 0x1a04, 0x6cac, 0x82ff, 0x1138, 0xa8b8, 0xa9bc,
++ 0x9105, 0x0118, 0x2001, 0x6dc8, 0x0018, 0x9280, 0x6dbe, 0x2005,
++ 0x7056, 0x7010, 0x9015, 0x0904, 0x6da9, 0x080c, 0x0fc7, 0x1118,
++ 0x7007, 0x0004, 0x0005, 0x2900, 0x7022, 0x7054, 0x2060, 0xe000,
++ 0xa866, 0xe004, 0x7050, 0x2040, 0xa95c, 0x9100, 0xa076, 0xa860,
++ 0xa072, 0xe008, 0x920a, 0x1210, 0x900e, 0x2200, 0x7112, 0xe20c,
++ 0x8003, 0x800b, 0x9296, 0x0004, 0x0108, 0x9108, 0xa17a, 0x810b,
++ 0xa17e, 0x080c, 0x108c, 0xa06c, 0x908e, 0x0100, 0x0170, 0x9086,
++ 0x0200, 0x0118, 0x7007, 0x0007, 0x0005, 0x7020, 0x2048, 0x080c,
++ 0x0fe0, 0x7014, 0x2048, 0x0804, 0x6cac, 0x7020, 0x2048, 0x7018,
++ 0xa802, 0xa807, 0x0000, 0x2908, 0x2048, 0xa906, 0x711a, 0x0804,
++ 0x6d61, 0x7014, 0x2048, 0x7007, 0x0001, 0xa8b4, 0x9005, 0x1128,
++ 0xa8b8, 0xa9bc, 0x9105, 0x0108, 0x00b9, 0xa864, 0x9084, 0x00ff,
++ 0x9086, 0x001e, 0x0904, 0x701a, 0x0804, 0x6e0a, 0x6dc0, 0x6dc4,
++ 0x0002, 0x001d, 0x0007, 0x0004, 0x000a, 0x001b, 0x0005, 0x0006,
++ 0x000a, 0x001d, 0x0005, 0x0004, 0x0076, 0x0066, 0xafb8, 0xaebc,
++ 0xa804, 0x2050, 0xb0c0, 0xb0e2, 0xb0bc, 0xb0de, 0xb0b8, 0xb0d2,
++ 0xb0b4, 0xb0ce, 0xb6da, 0xb7d6, 0xb0b0, 0xb0ca, 0xb0ac, 0xb0c6,
++ 0xb0a8, 0xb0ba, 0xb0a4, 0xb0b6, 0xb6c2, 0xb7be, 0xb0a0, 0xb0b2,
++ 0xb09c, 0xb0ae, 0xb098, 0xb0a2, 0xb094, 0xb09e, 0xb6aa, 0xb7a6,
++ 0xb090, 0xb09a, 0xb08c, 0xb096, 0xb088, 0xb08a, 0xb084, 0xb086,
++ 0xb692, 0xb78e, 0xb080, 0xb082, 0xb07c, 0xb07e, 0xb078, 0xb072,
++ 0xb074, 0xb06e, 0xb67a, 0xb776, 0xb004, 0x9055, 0x1958, 0x006e,
++ 0x007e, 0x0005, 0x2009, 0x1833, 0x210c, 0x81ff, 0x1178, 0x080c,
++ 0x5755, 0x1108, 0x0005, 0x080c, 0x63d1, 0x0126, 0x2091, 0x8000,
++ 0x080c, 0xb374, 0x080c, 0x61a9, 0x012e, 0x0ca0, 0x080c, 0xb752,
++ 0x1d70, 0x2001, 0x0028, 0x900e, 0x0c70, 0x2009, 0x1833, 0x210c,
++ 0x81ff, 0x11d8, 0xa888, 0x9005, 0x01e0, 0xa883, 0x0000, 0xa87c,
++ 0xd0f4, 0x0120, 0x080c, 0x5849, 0x1138, 0x0005, 0x9006, 0xa87a,
++ 0x080c, 0x57e4, 0x1108, 0x0005, 0x0126, 0x2091, 0x8000, 0xa87a,
++ 0xa982, 0x080c, 0x61a9, 0x012e, 0x0cb0, 0x2001, 0x0028, 0x900e,
++ 0x0c98, 0x2001, 0x0000, 0x0c80, 0x7018, 0xa802, 0x2908, 0x2048,
++ 0xa906, 0x711a, 0x7010, 0x8001, 0x7012, 0x0118, 0x7007, 0x0003,
++ 0x0030, 0x7014, 0x2048, 0x7007, 0x0001, 0x7048, 0x080f, 0x0005,
++ 0x00b6, 0x7007, 0x0001, 0xa974, 0xa878, 0x9084, 0x00ff, 0x9096,
++ 0x0004, 0x0540, 0x20a9, 0x0001, 0x9096, 0x0001, 0x0190, 0x900e,
++ 0x20a9, 0x0800, 0x9096, 0x0002, 0x0160, 0x9005, 0x11d8, 0xa974,
++ 0x080c, 0x5c0d, 0x11b8, 0x0066, 0xae80, 0x080c, 0x5d1d, 0x006e,
++ 0x0088, 0x0046, 0x2011, 0x180c, 0x2224, 0xc484, 0x2412, 0x004e,
++ 0x00c6, 0x080c, 0x5c0d, 0x1110, 0x080c, 0x5e1d, 0x8108, 0x1f04,
++ 0x6e89, 0x00ce, 0xa87c, 0xd084, 0x1120, 0x080c, 0x0fe0, 0x00be,
++ 0x0005, 0x0126, 0x2091, 0x8000, 0x080c, 0x61a9, 0x012e, 0x00be,
++ 0x0005, 0x0126, 0x2091, 0x8000, 0x7007, 0x0001, 0x080c, 0x5f29,
++ 0x0580, 0x2061, 0x1a3d, 0x6100, 0xd184, 0x0178, 0xa888, 0x9084,
++ 0x00ff, 0x1550, 0x6000, 0xd084, 0x0520, 0x6004, 0x9005, 0x1538,
++ 0x6003, 0x0000, 0x600b, 0x0000, 0x00c8, 0x2011, 0x0001, 0xa890,
++ 0x9005, 0x1110, 0x2001, 0x001e, 0x8000, 0x6016, 0xa888, 0x9084,
++ 0x00ff, 0x0178, 0x6006, 0xa888, 0x8007, 0x9084, 0x00ff, 0x0148,
++ 0x600a, 0xa888, 0x8000, 0x1108, 0xc28d, 0x6202, 0x012e, 0x0804,
++ 0x70e3, 0x012e, 0x0804, 0x70dd, 0x012e, 0x0804, 0x70d7, 0x012e,
++ 0x0804, 0x70da, 0x0126, 0x2091, 0x8000, 0x7007, 0x0001, 0x080c,
++ 0x5f29, 0x05e0, 0x2061, 0x1a3d, 0x6000, 0xd084, 0x05b8, 0x6204,
++ 0x6308, 0xd08c, 0x1530, 0xac78, 0x9484, 0x0003, 0x0170, 0xa988,
++ 0x918c, 0x00ff, 0x8001, 0x1120, 0x2100, 0x9210, 0x0620, 0x0028,
++ 0x8001, 0x1508, 0x2100, 0x9212, 0x02f0, 0x9484, 0x000c, 0x0188,
++ 0xa988, 0x810f, 0x918c, 0x00ff, 0x9082, 0x0004, 0x1120, 0x2100,
++ 0x9318, 0x0288, 0x0030, 0x9082, 0x0004, 0x1168, 0x2100, 0x931a,
++ 0x0250, 0xa890, 0x9005, 0x0110, 0x8000, 0x6016, 0x6206, 0x630a,
++ 0x012e, 0x0804, 0x70e3, 0x012e, 0x0804, 0x70e0, 0x012e, 0x0804,
++ 0x70dd, 0x0126, 0x2091, 0x8000, 0x7007, 0x0001, 0x2061, 0x1a3d,
++ 0x6300, 0xd38c, 0x1120, 0x6308, 0x8318, 0x0220, 0x630a, 0x012e,
++ 0x0804, 0x70f1, 0x012e, 0x0804, 0x70e0, 0x00b6, 0x0126, 0x00c6,
++ 0x2091, 0x8000, 0x7007, 0x0001, 0xa87c, 0xd0ac, 0x0148, 0x00c6,
++ 0x2061, 0x1a3d, 0x6000, 0x9084, 0xfcff, 0x6002, 0x00ce, 0x0440,
++ 0xa888, 0x9005, 0x05d8, 0xa88c, 0x9065, 0x0598, 0x2001, 0x1833,
++ 0x2004, 0x9005, 0x0118, 0x080c, 0x9584, 0x0068, 0x6017, 0xf400,
++ 0x605b, 0x0000, 0xa97c, 0xd1a4, 0x0110, 0xa980, 0x615a, 0x2009,
++ 0x0041, 0x080c, 0x95ce, 0xa988, 0x918c, 0xff00, 0x9186, 0x2000,
++ 0x1138, 0x0026, 0x900e, 0x2011, 0xfdff, 0x080c, 0x7a0a, 0x002e,
++ 0xa87c, 0xd0c4, 0x0148, 0x2061, 0x1a3d, 0x6000, 0xd08c, 0x1120,
++ 0x6008, 0x8000, 0x0208, 0x600a, 0x00ce, 0x012e, 0x00be, 0x0804,
++ 0x70e3, 0x00ce, 0x012e, 0x00be, 0x0804, 0x70dd, 0xa984, 0x9186,
++ 0x002e, 0x0d30, 0x9186, 0x002d, 0x0d18, 0x9186, 0x0045, 0x0510,
++ 0x9186, 0x002a, 0x1130, 0x2001, 0x180c, 0x200c, 0xc194, 0x2102,
++ 0x08b8, 0x9186, 0x0020, 0x0158, 0x9186, 0x0029, 0x1d10, 0xa974,
++ 0x080c, 0x5c0d, 0x1968, 0xb800, 0xc0e4, 0xb802, 0x0848, 0xa88c,
++ 0x9065, 0x09b8, 0x6007, 0x0024, 0x2001, 0x1953, 0x2004, 0x601a,
++ 0x0804, 0x6f78, 0xa88c, 0x9065, 0x0960, 0x00e6, 0xa890, 0x9075,
++ 0x2001, 0x1833, 0x2004, 0x9005, 0x0150, 0x080c, 0x9584, 0x8eff,
++ 0x0118, 0x2e60, 0x080c, 0x9584, 0x00ee, 0x0804, 0x6f78, 0x6024,
++ 0xc0dc, 0xc0d5, 0x6026, 0x2e60, 0x6007, 0x003a, 0xa8a0, 0x9005,
++ 0x0130, 0x6007, 0x003b, 0xa8a4, 0x602e, 0xa8a8, 0x6016, 0x6003,
++ 0x0001, 0x080c, 0x7bcb, 0x080c, 0x8125, 0x00ee, 0x0804, 0x6f78,
++ 0x2061, 0x1a3d, 0x6000, 0xd084, 0x0190, 0xd08c, 0x1904, 0x70f1,
++ 0x0126, 0x2091, 0x8000, 0x6204, 0x8210, 0x0220, 0x6206, 0x012e,
++ 0x0804, 0x70f1, 0x012e, 0xa883, 0x0016, 0x0804, 0x70ea, 0xa883,
++ 0x0007, 0x0804, 0x70ea, 0xa864, 0x8007, 0x9084, 0x00ff, 0x0130,
++ 0x8001, 0x1138, 0x7007, 0x0001, 0x0069, 0x0005, 0x080c, 0x6ca4,
++ 0x0040, 0x7007, 0x0003, 0x7012, 0x2900, 0x7016, 0x701a, 0x704b,
++ 0x701a, 0x0005, 0x00b6, 0x00e6, 0x0126, 0x2091, 0x8000, 0x903e,
++ 0x2061, 0x1800, 0x61cc, 0x81ff, 0x1904, 0x709c, 0x6130, 0xd194,
++ 0x1904, 0x70c6, 0xa878, 0x2070, 0x9e82, 0x1cd0, 0x0a04, 0x7090,
++ 0x6060, 0x9e02, 0x1a04, 0x7090, 0x7120, 0x9186, 0x0006, 0x1904,
++ 0x7082, 0x7010, 0x905d, 0x0904, 0x709c, 0xb800, 0xd0e4, 0x1904,
++ 0x70c0, 0x2061, 0x1a3d, 0x6100, 0x9184, 0x0301, 0x9086, 0x0001,
++ 0x15a0, 0x7024, 0xd0dc, 0x1904, 0x70c9, 0xa883, 0x0000, 0xa803,
++ 0x0000, 0x2908, 0x7014, 0x9005, 0x1198, 0x7116, 0xa87c, 0xd0f4,
++ 0x1904, 0x70cc, 0x080c, 0x4dea, 0xd09c, 0x1118, 0xa87c, 0xc0cc,
++ 0xa87e, 0x2e60, 0x080c, 0x792a, 0x012e, 0x00ee, 0x00be, 0x0005,
++ 0x2048, 0xa800, 0x9005, 0x1de0, 0xa902, 0x2148, 0xa87c, 0xd0f4,
++ 0x1904, 0x70cc, 0x012e, 0x00ee, 0x00be, 0x0005, 0x012e, 0x00ee,
++ 0xa883, 0x0006, 0x00be, 0x0804, 0x70ea, 0xd184, 0x0db8, 0xd1c4,
++ 0x1190, 0x00a0, 0xa974, 0x080c, 0x5c0d, 0x15d0, 0xb800, 0xd0e4,
++ 0x15b8, 0x7120, 0x9186, 0x0007, 0x1118, 0xa883, 0x0002, 0x0490,
++ 0xa883, 0x0008, 0x0478, 0xa883, 0x000e, 0x0460, 0xa883, 0x0017,
++ 0x0448, 0xa883, 0x0035, 0x0430, 0x080c, 0x4dee, 0xd0fc, 0x01e8,
++ 0xa878, 0x2070, 0x9e82, 0x1cd0, 0x02c0, 0x6060, 0x9e02, 0x12a8,
++ 0x7120, 0x9186, 0x0006, 0x1188, 0x7010, 0x905d, 0x0170, 0xb800,
++ 0xd0bc, 0x0158, 0x2039, 0x0001, 0x7000, 0x9086, 0x0007, 0x1904,
++ 0x7026, 0x7003, 0x0002, 0x0804, 0x7026, 0xa883, 0x0028, 0x0010,
++ 0xa883, 0x0029, 0x012e, 0x00ee, 0x00be, 0x0420, 0xa883, 0x002a,
++ 0x0cc8, 0xa883, 0x0045, 0x0cb0, 0x2e60, 0x2019, 0x0002, 0x601b,
++ 0x0014, 0x080c, 0xc58e, 0x012e, 0x00ee, 0x00be, 0x0005, 0x2009,
++ 0x003e, 0x0058, 0x2009, 0x0004, 0x0040, 0x2009, 0x0006, 0x0028,
++ 0x2009, 0x0016, 0x0010, 0x2009, 0x0001, 0xa884, 0x9084, 0xff00,
++ 0x9105, 0xa886, 0x0126, 0x2091, 0x8000, 0x080c, 0x61a9, 0x012e,
++ 0x0005, 0x080c, 0x0fe0, 0x0005, 0x00d6, 0x080c, 0x7921, 0x00de,
++ 0x0005, 0x00d6, 0x00e6, 0x0126, 0x2091, 0x8000, 0x2071, 0x0040,
++ 0x702c, 0xd084, 0x01d8, 0x908c, 0x0780, 0x190c, 0x7185, 0xd09c,
++ 0x11a8, 0x2071, 0x1800, 0x70bc, 0x90ea, 0x0040, 0x0278, 0x8001,
++ 0x70be, 0x702c, 0x2048, 0xa800, 0x702e, 0x9006, 0xa802, 0xa806,
++ 0x2071, 0x0040, 0x2900, 0x7022, 0x702c, 0x0c28, 0x012e, 0x00ee,
++ 0x00de, 0x0005, 0x0006, 0x9084, 0x0780, 0x190c, 0x7185, 0x000e,
++ 0x0005, 0x00d6, 0x00c6, 0x0036, 0x0026, 0x0016, 0x00b6, 0x7007,
++ 0x0001, 0xaa74, 0x9282, 0x0004, 0x1a04, 0x7176, 0xa97c, 0x9188,
++ 0x1000, 0x2104, 0x905d, 0xb804, 0xd284, 0x0140, 0x05e8, 0x8007,
++ 0x9084, 0x00ff, 0x9084, 0x0006, 0x1108, 0x04b0, 0x2b10, 0x080c,
++ 0x94fe, 0x1118, 0x080c, 0x95a1, 0x05a8, 0x6212, 0xa874, 0x0002,
++ 0x7154, 0x7159, 0x715c, 0x7162, 0x2019, 0x0002, 0x080c, 0xc941,
++ 0x0060, 0x080c, 0xc8dd, 0x0048, 0x2019, 0x0002, 0xa980, 0x080c,
++ 0xc8f8, 0x0018, 0xa980, 0x080c, 0xc8dd, 0x080c, 0x9554, 0xa887,
++ 0x0000, 0x0126, 0x2091, 0x8000, 0x080c, 0x61a9, 0x012e, 0x00be,
++ 0x001e, 0x002e, 0x003e, 0x00ce, 0x00de, 0x0005, 0xa887, 0x0006,
++ 0x0c80, 0xa887, 0x0002, 0x0c68, 0xa887, 0x0005, 0x0c50, 0xa887,
++ 0x0004, 0x0c38, 0xa887, 0x0007, 0x0c20, 0x2091, 0x8000, 0x0e04,
++ 0x7187, 0x0006, 0x0016, 0x2001, 0x8003, 0x0006, 0x0804, 0x0d8d,
++ 0x0005, 0x00f6, 0x2079, 0x0300, 0x2001, 0x0200, 0x200c, 0xc1e5,
++ 0xc1dc, 0x2102, 0x2009, 0x0218, 0x210c, 0xd1ec, 0x1120, 0x080c,
++ 0x1426, 0x00fe, 0x0005, 0x2001, 0x020d, 0x2003, 0x0020, 0x781f,
++ 0x0300, 0x00fe, 0x0005, 0x781c, 0xd08c, 0x05e8, 0x7d44, 0x7c40,
++ 0x9584, 0x00f6, 0x1508, 0x9484, 0x7000, 0x0138, 0x908a, 0x2000,
++ 0x1258, 0x9584, 0x0700, 0x8007, 0x04a8, 0x7000, 0x9084, 0xff00,
++ 0x9086, 0x8100, 0x0db0, 0x00b0, 0x9484, 0x0fff, 0x1130, 0x7000,
++ 0x9084, 0xff00, 0x9086, 0x8100, 0x11c0, 0x080c, 0xcce2, 0x080c,
++ 0x7692, 0x7817, 0x0140, 0x00a8, 0x9584, 0x0076, 0x1118, 0x080c,
++ 0x76f0, 0x19c8, 0xd5a4, 0x0148, 0x0046, 0x0056, 0x080c, 0x724d,
++ 0x080c, 0x1f79, 0x005e, 0x004e, 0x0020, 0x080c, 0xcce2, 0x7817,
++ 0x0140, 0x080c, 0x722e, 0x2001, 0x19bd, 0x2004, 0x9005, 0x090c,
++ 0x8125, 0x0005, 0x0002, 0x7204, 0x74c3, 0x71fb, 0x71fb, 0x71fb,
++ 0x71fb, 0x71fb, 0x71fb, 0x7817, 0x0140, 0x2001, 0x19bd, 0x2004,
++ 0x9005, 0x090c, 0x8125, 0x0005, 0x7000, 0x908c, 0xff00, 0x9194,
++ 0xf000, 0x810f, 0x9484, 0x0fff, 0x688a, 0x9286, 0x2000, 0x1150,
++ 0x6800, 0x9086, 0x0001, 0x1118, 0x080c, 0x4e04, 0x0070, 0x080c,
++ 0x726d, 0x0058, 0x9286, 0x3000, 0x1118, 0x080c, 0x73fe, 0x0028,
++ 0x9286, 0x8000, 0x1110, 0x080c, 0x75c8, 0x7817, 0x0140, 0x2001,
++ 0x19bd, 0x2004, 0x9005, 0x090c, 0x8125, 0x0005, 0x2001, 0x180f,
++ 0x2004, 0xd08c, 0x0178, 0x2001, 0x1800, 0x2004, 0x9086, 0x0003,
++ 0x1148, 0x0026, 0x0036, 0x2011, 0x8048, 0x2518, 0x080c, 0x447f,
++ 0x003e, 0x002e, 0x0005, 0x0036, 0x0046, 0x0056, 0x00f6, 0x2079,
++ 0x0200, 0x2019, 0xfffe, 0x7c30, 0x0050, 0x0036, 0x0046, 0x0056,
++ 0x00f6, 0x2079, 0x0200, 0x7d44, 0x7c40, 0x2019, 0xffff, 0x2001,
++ 0x180f, 0x2004, 0xd08c, 0x0160, 0x2001, 0x1800, 0x2004, 0x9086,
++ 0x0003, 0x1130, 0x0026, 0x2011, 0x8048, 0x080c, 0x447f, 0x002e,
++ 0x00fe, 0x005e, 0x004e, 0x003e, 0x0005, 0x00b6, 0x00c6, 0x7010,
++ 0x9084, 0xff00, 0x8007, 0x9096, 0x0001, 0x0120, 0x9096, 0x0023,
++ 0x1904, 0x73cf, 0x9186, 0x0023, 0x1550, 0x080c, 0x7657, 0x0904,
++ 0x73cf, 0x7124, 0x610a, 0x7030, 0x908e, 0x0200, 0x1130, 0x2009,
++ 0x0015, 0x080c, 0x95ce, 0x0804, 0x73cf, 0x908e, 0x0214, 0x0118,
++ 0x908e, 0x0210, 0x1130, 0x2009, 0x0015, 0x080c, 0x95ce, 0x0804,
++ 0x73cf, 0x908e, 0x0100, 0x1904, 0x73cf, 0x7034, 0x9005, 0x1904,
++ 0x73cf, 0x2009, 0x0016, 0x080c, 0x95ce, 0x0804, 0x73cf, 0x9186,
++ 0x0022, 0x1904, 0x73cf, 0x7030, 0x908e, 0x0300, 0x1580, 0x68d8,
++ 0xd0a4, 0x0528, 0xc0b5, 0x68da, 0x7100, 0x918c, 0x00ff, 0x6976,
++ 0x7004, 0x687a, 0x00f6, 0x2079, 0x0100, 0x79e6, 0x78ea, 0x0006,
++ 0x9084, 0x00ff, 0x0016, 0x2008, 0x080c, 0x2446, 0x7932, 0x7936,
++ 0x001e, 0x000e, 0x00fe, 0x080c, 0x23fd, 0x6956, 0x703c, 0x00e6,
++ 0x2071, 0x0140, 0x7086, 0x2071, 0x1800, 0x70ae, 0x00ee, 0x7034,
++ 0x9005, 0x1904, 0x73cf, 0x2009, 0x0017, 0x0804, 0x739c, 0x908e,
++ 0x0400, 0x1190, 0x7034, 0x9005, 0x1904, 0x73cf, 0x080c, 0x6877,
++ 0x0120, 0x2009, 0x001d, 0x0804, 0x739c, 0x68d8, 0xc0a5, 0x68da,
++ 0x2009, 0x0030, 0x0804, 0x739c, 0x908e, 0x0500, 0x1140, 0x7034,
++ 0x9005, 0x1904, 0x73cf, 0x2009, 0x0018, 0x0804, 0x739c, 0x908e,
++ 0x2010, 0x1120, 0x2009, 0x0019, 0x0804, 0x739c, 0x908e, 0x2110,
++ 0x1120, 0x2009, 0x001a, 0x0804, 0x739c, 0x908e, 0x5200, 0x1140,
++ 0x7034, 0x9005, 0x1904, 0x73cf, 0x2009, 0x001b, 0x0804, 0x739c,
++ 0x908e, 0x5000, 0x1140, 0x7034, 0x9005, 0x1904, 0x73cf, 0x2009,
++ 0x001c, 0x0804, 0x739c, 0x908e, 0x1300, 0x1120, 0x2009, 0x0034,
++ 0x0804, 0x739c, 0x908e, 0x1200, 0x1140, 0x7034, 0x9005, 0x1904,
++ 0x73cf, 0x2009, 0x0024, 0x0804, 0x739c, 0x908c, 0xff00, 0x918e,
++ 0x2400, 0x1120, 0x2009, 0x002d, 0x0804, 0x739c, 0x908c, 0xff00,
++ 0x918e, 0x5300, 0x1120, 0x2009, 0x002a, 0x0804, 0x739c, 0x908e,
++ 0x0f00, 0x1120, 0x2009, 0x0020, 0x0804, 0x739c, 0x908e, 0x5300,
++ 0x1108, 0x00d8, 0x908e, 0x6104, 0x11c0, 0x2011, 0x026d, 0x8208,
++ 0x2204, 0x9082, 0x0004, 0x8004, 0x8004, 0x20a8, 0x2011, 0x8015,
++ 0x211c, 0x8108, 0x0046, 0x2124, 0x080c, 0x447f, 0x004e, 0x8108,
++ 0x1f04, 0x735e, 0x2009, 0x0023, 0x0478, 0x908e, 0x6000, 0x1118,
++ 0x2009, 0x003f, 0x0448, 0x908e, 0x7800, 0x1118, 0x2009, 0x0045,
++ 0x0418, 0x908e, 0x1000, 0x1118, 0x2009, 0x004e, 0x00e8, 0x908e,
++ 0x6300, 0x1118, 0x2009, 0x004a, 0x00b8, 0x908c, 0xff00, 0x918e,
++ 0x5600, 0x1118, 0x2009, 0x004f, 0x0078, 0x908c, 0xff00, 0x918e,
++ 0x5700, 0x1118, 0x2009, 0x0050, 0x0038, 0x2009, 0x001d, 0x6834,
++ 0xd0d4, 0x0110, 0x2009, 0x004c, 0x0016, 0x2011, 0x0263, 0x2204,
++ 0x8211, 0x220c, 0x080c, 0x23fd, 0x1568, 0x080c, 0x5bb0, 0x1550,
++ 0xbe12, 0xbd16, 0x001e, 0x0016, 0xb8b0, 0x9005, 0x1168, 0x9186,
++ 0x0046, 0x1150, 0x6874, 0x9606, 0x1138, 0x6878, 0x9506, 0x9084,
++ 0xff00, 0x1110, 0x001e, 0x0098, 0x080c, 0x94fe, 0x01a8, 0x2b08,
++ 0x6112, 0x6023, 0x0004, 0x7120, 0x610a, 0x001e, 0x9186, 0x004c,
++ 0x1110, 0x6023, 0x000a, 0x0016, 0x001e, 0x080c, 0x95ce, 0x00ce,
++ 0x00be, 0x0005, 0x001e, 0x0cd8, 0x2001, 0x180d, 0x2004, 0xd0ec,
++ 0x0120, 0x2011, 0x8049, 0x080c, 0x447f, 0x080c, 0x95a1, 0x0d90,
++ 0x2b08, 0x6112, 0x6023, 0x0004, 0x7120, 0x610a, 0x001e, 0x0016,
++ 0x9186, 0x0017, 0x0118, 0x9186, 0x0030, 0x1128, 0x6007, 0x0009,
++ 0x6017, 0x2900, 0x0020, 0x6007, 0x0051, 0x6017, 0x0000, 0x602f,
++ 0x0009, 0x6003, 0x0001, 0x080c, 0x7c1d, 0x08a0, 0x080c, 0x2e39,
++ 0x1140, 0x7010, 0x9084, 0xff00, 0x8007, 0x908e, 0x0008, 0x1108,
++ 0x0009, 0x0005, 0x00b6, 0x00c6, 0x0046, 0x7000, 0x908c, 0xff00,
++ 0x810f, 0x9186, 0x0033, 0x11e8, 0x080c, 0x7657, 0x0904, 0x745b,
++ 0x7124, 0x610a, 0x7030, 0x908e, 0x0200, 0x1140, 0x7034, 0x9005,
++ 0x15d0, 0x2009, 0x0015, 0x080c, 0x95ce, 0x04a8, 0x908e, 0x0100,
++ 0x1590, 0x7034, 0x9005, 0x1578, 0x2009, 0x0016, 0x080c, 0x95ce,
++ 0x0450, 0x9186, 0x0032, 0x1538, 0x7030, 0x908e, 0x1400, 0x1518,
++ 0x2009, 0x0038, 0x0016, 0x2011, 0x0263, 0x2204, 0x8211, 0x220c,
++ 0x080c, 0x23fd, 0x11b8, 0x080c, 0x5bb0, 0x11a0, 0xbe12, 0xbd16,
++ 0x080c, 0x94fe, 0x0178, 0x2b08, 0x6112, 0x080c, 0xb4e6, 0x6023,
++ 0x0004, 0x7120, 0x610a, 0x001e, 0x080c, 0x95ce, 0x080c, 0x8125,
++ 0x0010, 0x00ce, 0x001e, 0x004e, 0x00ce, 0x00be, 0x0005, 0x00b6,
++ 0x0046, 0x00e6, 0x00d6, 0x2028, 0x2130, 0x9696, 0x00ff, 0x11b8,
++ 0x9592, 0xfffc, 0x02a0, 0x9596, 0xfffd, 0x1120, 0x2009, 0x007f,
++ 0x0804, 0x74bd, 0x9596, 0xfffe, 0x1120, 0x2009, 0x007e, 0x0804,
++ 0x74bd, 0x9596, 0xfffc, 0x1118, 0x2009, 0x0080, 0x04f0, 0x2011,
++ 0x0000, 0x2019, 0x1836, 0x231c, 0xd3ac, 0x0130, 0x9026, 0x20a9,
++ 0x0800, 0x2071, 0x1000, 0x0030, 0x2021, 0x0081, 0x20a9, 0x077f,
++ 0x2071, 0x1081, 0x2e1c, 0x93dd, 0x0000, 0x1140, 0x82ff, 0x11d0,
++ 0x9496, 0x00ff, 0x01b8, 0x2410, 0xc2fd, 0x00a0, 0xbf10, 0x2600,
++ 0x9706, 0xb814, 0x1120, 0x9546, 0x1110, 0x2408, 0x00b0, 0x9745,
++ 0x1148, 0x94c6, 0x007e, 0x0130, 0x94c6, 0x007f, 0x0118, 0x94c6,
++ 0x0080, 0x1d20, 0x8420, 0x8e70, 0x1f04, 0x7492, 0x82ff, 0x1118,
++ 0x9085, 0x0001, 0x0018, 0xc2fc, 0x2208, 0x9006, 0x00de, 0x00ee,
++ 0x004e, 0x00be, 0x0005, 0x7000, 0x908c, 0xff00, 0x810f, 0x9184,
++ 0x000f, 0x0002, 0x74da, 0x74da, 0x74da, 0x7669, 0x74da, 0x74e3,
++ 0x750e, 0x759d, 0x74da, 0x74da, 0x74da, 0x74da, 0x74da, 0x74da,
++ 0x74da, 0x74da, 0x7817, 0x0140, 0x2001, 0x19bd, 0x2004, 0x9005,
++ 0x090c, 0x8125, 0x0005, 0x00b6, 0x7110, 0xd1bc, 0x01e8, 0x7120,
++ 0x2160, 0x9c8c, 0x0007, 0x11c0, 0x9c8a, 0x1cd0, 0x02a8, 0x6860,
++ 0x9c02, 0x1290, 0x7008, 0x9084, 0x00ff, 0x6110, 0x2158, 0xb910,
++ 0x9106, 0x1150, 0x700c, 0xb914, 0x9106, 0x1130, 0x7124, 0x610a,
++ 0x2009, 0x0046, 0x080c, 0x95ce, 0x7817, 0x0140, 0x2001, 0x19bd,
++ 0x2004, 0x9005, 0x090c, 0x8125, 0x00be, 0x0005, 0x00b6, 0x00c6,
++ 0x9484, 0x0fff, 0x0904, 0x7573, 0x7110, 0xd1bc, 0x1904, 0x7573,
++ 0x7108, 0x700c, 0x2028, 0x918c, 0x00ff, 0x2130, 0x9094, 0xff00,
++ 0x15b8, 0x81ff, 0x15a8, 0x9080, 0x2e6e, 0x200d, 0x918c, 0xff00,
++ 0x810f, 0x2001, 0x0080, 0x9106, 0x0904, 0x7573, 0x080c, 0x5bb0,
++ 0x1904, 0x7573, 0xbe12, 0xbd16, 0xb800, 0xd0ec, 0x15e0, 0xba04,
++ 0x9294, 0xff00, 0x9286, 0x0600, 0x11a0, 0x080c, 0x94fe, 0x05f0,
++ 0x2b08, 0x7028, 0x604a, 0x702c, 0x6046, 0x6112, 0x6023, 0x0006,
++ 0x7120, 0x610a, 0x7130, 0x6156, 0x2009, 0x0044, 0x080c, 0xbfdb,
++ 0x0410, 0x080c, 0x5f2d, 0x2010, 0x1138, 0xb807, 0x0606, 0x0c28,
++ 0x190c, 0x745f, 0x11c0, 0x0890, 0x080c, 0x94fe, 0x2b08, 0x0198,
++ 0x6112, 0x6023, 0x0004, 0x7120, 0x610a, 0x9286, 0x0004, 0x1118,
++ 0x6007, 0x0005, 0x0010, 0x6007, 0x0001, 0x6003, 0x0001, 0x080c,
++ 0x7c1d, 0x080c, 0x8125, 0x7817, 0x0140, 0x2001, 0x19bd, 0x2004,
++ 0x9005, 0x090c, 0x8125, 0x00ce, 0x00be, 0x0005, 0x2001, 0x180d,
++ 0x2004, 0xd0ec, 0x0120, 0x2011, 0x8049, 0x080c, 0x447f, 0x080c,
++ 0x95a1, 0x0d48, 0x2b08, 0x6112, 0x6023, 0x0006, 0x7120, 0x610a,
++ 0x7130, 0x6156, 0x6017, 0xf300, 0x6003, 0x0001, 0x6007, 0x0041,
++ 0x080c, 0x7bcb, 0x080c, 0x8125, 0x08b0, 0x00b6, 0x7110, 0xd1bc,
++ 0x01e8, 0x7020, 0x2060, 0x9c84, 0x0007, 0x11c0, 0x9c82, 0x1cd0,
++ 0x02a8, 0x6860, 0x9c02, 0x1290, 0x7008, 0x9084, 0x00ff, 0x6110,
++ 0x2158, 0xb910, 0x9106, 0x1150, 0x700c, 0xb914, 0x9106, 0x1130,
++ 0x7124, 0x610a, 0x2009, 0x0045, 0x080c, 0x95ce, 0x7817, 0x0140,
++ 0x2001, 0x19bd, 0x2004, 0x9005, 0x090c, 0x8125, 0x00be, 0x0005,
++ 0x080c, 0x2e39, 0x1168, 0x7010, 0x9084, 0xff00, 0x8007, 0x9086,
++ 0x0000, 0x1130, 0x9184, 0x000f, 0x908a, 0x0006, 0x1208, 0x000b,
++ 0x0005, 0x75df, 0x75e0, 0x75df, 0x75df, 0x763f, 0x764b, 0x0005,
++ 0x00b6, 0x7110, 0xd1bc, 0x0120, 0x702c, 0xd084, 0x0904, 0x763d,
++ 0x700c, 0x7108, 0x080c, 0x23fd, 0x1904, 0x763d, 0x080c, 0x5bb0,
++ 0x1904, 0x763d, 0xbe12, 0xbd16, 0x7110, 0xd1bc, 0x01d8, 0x080c,
++ 0x5f2d, 0x0118, 0x9086, 0x0004, 0x1588, 0x00c6, 0x080c, 0x7657,
++ 0x00ce, 0x05d8, 0x080c, 0x94fe, 0x2b08, 0x05b8, 0x6112, 0x080c,
++ 0xb4e6, 0x6023, 0x0002, 0x7120, 0x610a, 0x2009, 0x0088, 0x080c,
++ 0x95ce, 0x0458, 0x080c, 0x5f2d, 0x0148, 0x9086, 0x0004, 0x0130,
++ 0x080c, 0x5f35, 0x0118, 0x9086, 0x0004, 0x1180, 0x080c, 0x94fe,
++ 0x2b08, 0x01d8, 0x6112, 0x080c, 0xb4e6, 0x6023, 0x0005, 0x7120,
++ 0x610a, 0x2009, 0x0088, 0x080c, 0x95ce, 0x0078, 0x080c, 0x94fe,
++ 0x2b08, 0x0158, 0x6112, 0x080c, 0xb4e6, 0x6023, 0x0004, 0x7120,
++ 0x610a, 0x2009, 0x0001, 0x080c, 0x95ce, 0x00be, 0x0005, 0x7110,
++ 0xd1bc, 0x0140, 0x00a1, 0x0130, 0x7124, 0x610a, 0x2009, 0x0089,
++ 0x080c, 0x95ce, 0x0005, 0x7110, 0xd1bc, 0x0140, 0x0041, 0x0130,
++ 0x7124, 0x610a, 0x2009, 0x008a, 0x080c, 0x95ce, 0x0005, 0x7020,
++ 0x2060, 0x9c84, 0x0007, 0x1158, 0x9c82, 0x1cd0, 0x0240, 0x2001,
++ 0x1818, 0x2004, 0x9c02, 0x1218, 0x9085, 0x0001, 0x0005, 0x9006,
++ 0x0ce8, 0x00b6, 0x7110, 0xd1bc, 0x11d8, 0x7024, 0x2060, 0x9c84,
++ 0x0007, 0x11b0, 0x9c82, 0x1cd0, 0x0298, 0x6860, 0x9c02, 0x1280,
++ 0x7008, 0x9084, 0x00ff, 0x6110, 0x2158, 0xb910, 0x9106, 0x1140,
++ 0x700c, 0xb914, 0x9106, 0x1120, 0x2009, 0x0051, 0x080c, 0x95ce,
++ 0x7817, 0x0140, 0x2001, 0x19bd, 0x2004, 0x9005, 0x090c, 0x8125,
++ 0x00be, 0x0005, 0x2031, 0x0105, 0x0069, 0x0005, 0x2031, 0x0206,
++ 0x0049, 0x0005, 0x2031, 0x0207, 0x0029, 0x0005, 0x2031, 0x0213,
++ 0x0009, 0x0005, 0x00c6, 0x0096, 0x00f6, 0x7000, 0x9084, 0xf000,
++ 0x9086, 0xc000, 0x05d0, 0x080c, 0x94fe, 0x05b8, 0x0066, 0x00c6,
++ 0x0046, 0x2011, 0x0263, 0x2204, 0x8211, 0x220c, 0x080c, 0x23fd,
++ 0x15a0, 0x080c, 0x5bb0, 0x1588, 0xbe12, 0xbd16, 0x2b00, 0x004e,
++ 0x00ce, 0x6012, 0x080c, 0xb4e6, 0x080c, 0x0fae, 0x0510, 0x2900,
++ 0x605a, 0x9006, 0xa802, 0xa866, 0xac6a, 0xa85c, 0x90f8, 0x001b,
++ 0x20a9, 0x000e, 0xa860, 0x20e8, 0x20e1, 0x0000, 0x2fa0, 0x2e98,
++ 0x4003, 0x006e, 0x6616, 0x6007, 0x003e, 0x6023, 0x0001, 0x6003,
++ 0x0001, 0x080c, 0x7c1d, 0x080c, 0x8125, 0x00fe, 0x009e, 0x00ce,
++ 0x0005, 0x080c, 0x9554, 0x006e, 0x0cc0, 0x004e, 0x00ce, 0x0cc8,
++ 0x00c6, 0x7000, 0x908c, 0xff00, 0x9184, 0xf000, 0x810f, 0x9086,
++ 0x2000, 0x1904, 0x7747, 0x9186, 0x0022, 0x15f0, 0x2001, 0x0111,
++ 0x2004, 0x9005, 0x1904, 0x7749, 0x7030, 0x908e, 0x0400, 0x0904,
++ 0x7749, 0x908e, 0x6000, 0x05e8, 0x908e, 0x5400, 0x05d0, 0x908e,
++ 0x0300, 0x11d8, 0x2009, 0x1836, 0x210c, 0xd18c, 0x1590, 0xd1a4,
++ 0x1580, 0x080c, 0x5eeb, 0x0558, 0x68a8, 0x9084, 0x00ff, 0x7100,
++ 0x918c, 0x00ff, 0x9106, 0x1518, 0x6878, 0x69a8, 0x918c, 0xff00,
++ 0x9105, 0x7104, 0x9106, 0x11d8, 0x00e0, 0x2009, 0x0103, 0x210c,
++ 0xd1b4, 0x11a8, 0x908e, 0x5200, 0x09e8, 0x908e, 0x0500, 0x09d0,
++ 0x908e, 0x5000, 0x09b8, 0x0058, 0x9186, 0x0023, 0x1140, 0x080c,
++ 0x7657, 0x0128, 0x6004, 0x9086, 0x0002, 0x0118, 0x0000, 0x9006,
++ 0x0010, 0x9085, 0x0001, 0x00ce, 0x0005, 0x2071, 0x19c7, 0x7003,
++ 0x0003, 0x700f, 0x0361, 0x9006, 0x701a, 0x7076, 0x7012, 0x7017,
++ 0x1cd0, 0x7007, 0x0000, 0x7026, 0x702b, 0x8b66, 0x7032, 0x7037,
++ 0x8bc9, 0x703f, 0xffff, 0x7043, 0xffff, 0x7046, 0x704b, 0x4c8b,
++ 0x704e, 0x705f, 0x78ae, 0x080c, 0x0fc7, 0x090c, 0x0d84, 0x2900,
++ 0x703a, 0xa867, 0x0003, 0xa86f, 0x0100, 0xa8ab, 0xdcb0, 0x0005,
++ 0x2071, 0x19c7, 0x1d04, 0x7809, 0x2091, 0x6000, 0x700c, 0x8001,
++ 0x700e, 0x1510, 0x2001, 0x1874, 0x2004, 0xd0c4, 0x0158, 0x3a00,
++ 0xd08c, 0x1140, 0x20d1, 0x0000, 0x20d1, 0x0001, 0x20d1, 0x0000,
++ 0x080c, 0x0d84, 0x700f, 0x0361, 0x7007, 0x0001, 0x0126, 0x2091,
++ 0x8000, 0x080c, 0x78f3, 0x7044, 0x900d, 0x0148, 0x8109, 0x7146,
++ 0x1130, 0x7048, 0x080f, 0x0018, 0x0126, 0x2091, 0x8000, 0x7024,
++ 0x900d, 0x0188, 0x7020, 0x8001, 0x7022, 0x1168, 0x7023, 0x0009,
++ 0x8109, 0x7126, 0x9186, 0x03e8, 0x1110, 0x7028, 0x080f, 0x81ff,
++ 0x1110, 0x7028, 0x080f, 0x7030, 0x900d, 0x0180, 0x702c, 0x8001,
++ 0x702e, 0x1160, 0x702f, 0x0009, 0x8109, 0x7132, 0x0128, 0x9184,
++ 0x007f, 0x090c, 0x8c48, 0x0010, 0x7034, 0x080f, 0x703c, 0x9005,
++ 0x0118, 0x0310, 0x8001, 0x703e, 0x7040, 0x9005, 0x0118, 0x0310,
++ 0x8001, 0x7042, 0x7050, 0x900d, 0x0168, 0x704c, 0x8001, 0x704e,
++ 0x1148, 0x704f, 0x0009, 0x8109, 0x7152, 0x1120, 0x7154, 0x7152,
++ 0x705c, 0x080f, 0x7018, 0x900d, 0x01d8, 0x0016, 0x7074, 0x900d,
++ 0x0158, 0x7070, 0x8001, 0x7072, 0x1138, 0x7073, 0x0009, 0x8109,
++ 0x7176, 0x1110, 0x7078, 0x080f, 0x001e, 0x7008, 0x8001, 0x700a,
++ 0x1138, 0x700b, 0x0009, 0x8109, 0x711a, 0x1110, 0x701c, 0x080f,
++ 0x012e, 0x7004, 0x0002, 0x782f, 0x7830, 0x784a, 0x00e6, 0x2071,
++ 0x19c7, 0x7018, 0x9005, 0x1120, 0x711a, 0x721e, 0x700b, 0x0009,
++ 0x00ee, 0x0005, 0x00e6, 0x0006, 0x2071, 0x19c7, 0x701c, 0x9206,
++ 0x1110, 0x701a, 0x701e, 0x000e, 0x00ee, 0x0005, 0x00e6, 0x2071,
++ 0x19c7, 0xb888, 0x9102, 0x0208, 0xb98a, 0x00ee, 0x0005, 0x0005,
++ 0x00b6, 0x7110, 0x080c, 0x5c0d, 0x1158, 0xb888, 0x8001, 0x0240,
++ 0xb88a, 0x1130, 0x0126, 0x2091, 0x8000, 0x080c, 0x8125, 0x012e,
++ 0x8108, 0x9182, 0x0800, 0x0218, 0x900e, 0x7007, 0x0002, 0x7112,
++ 0x00be, 0x0005, 0x7014, 0x2060, 0x0126, 0x2091, 0x8000, 0x6040,
++ 0x9005, 0x0128, 0x8001, 0x6042, 0x1110, 0x080c, 0xb38b, 0x6018,
++ 0x9005, 0x0510, 0x8001, 0x601a, 0x11f8, 0x6120, 0x9186, 0x0003,
++ 0x0118, 0x9186, 0x0006, 0x11b0, 0x6014, 0x2048, 0xa884, 0x908a,
++ 0x199a, 0x0280, 0x9082, 0x1999, 0xa886, 0x908a, 0x199a, 0x0210,
++ 0x2001, 0x1999, 0x8003, 0x800b, 0x810b, 0x9108, 0x611a, 0xa87c,
++ 0xd0e4, 0x0110, 0x080c, 0xaddd, 0x012e, 0x9c88, 0x0018, 0x7116,
++ 0x2001, 0x1818, 0x2004, 0x9102, 0x0220, 0x7017, 0x1cd0, 0x7007,
++ 0x0000, 0x0005, 0x00e6, 0x2071, 0x19c7, 0x7027, 0x07d0, 0x7023,
++ 0x0009, 0x00ee, 0x0005, 0x2001, 0x19d0, 0x2003, 0x0000, 0x0005,
++ 0x00e6, 0x2071, 0x19c7, 0x7132, 0x702f, 0x0009, 0x00ee, 0x0005,
++ 0x2011, 0x19d3, 0x2013, 0x0000, 0x0005, 0x00e6, 0x2071, 0x19c7,
++ 0x711a, 0x721e, 0x700b, 0x0009, 0x00ee, 0x0005, 0x0086, 0x0026,
++ 0x7058, 0x8000, 0x705a, 0x2001, 0x19d5, 0x2044, 0xa06c, 0x9086,
++ 0x0000, 0x0150, 0x706c, 0xa09a, 0x7068, 0xa096, 0x7064, 0xa092,
++ 0x7060, 0xa08e, 0x080c, 0x108c, 0x002e, 0x008e, 0x0005, 0x0006,
++ 0x0016, 0x0096, 0x00a6, 0x00b6, 0x00c6, 0x00d6, 0x00e6, 0x00f6,
++ 0x0156, 0x080c, 0x7778, 0x015e, 0x00fe, 0x00ee, 0x00de, 0x00ce,
++ 0x00be, 0x00ae, 0x009e, 0x001e, 0x000e, 0x0005, 0x00e6, 0x2071,
++ 0x19c7, 0x7176, 0x727a, 0x7073, 0x0009, 0x00ee, 0x0005, 0x00e6,
++ 0x0006, 0x2071, 0x19c7, 0x7078, 0x9206, 0x1110, 0x7076, 0x707a,
++ 0x000e, 0x00ee, 0x0005, 0x2069, 0x1800, 0x69ec, 0xd1e4, 0x1518,
++ 0x0026, 0xd1ec, 0x0140, 0x684c, 0x9082, 0x0200, 0x0288, 0x8117,
++ 0x9294, 0x00c0, 0x0088, 0x9184, 0x0007, 0x01a0, 0x8109, 0x9184,
++ 0x0007, 0x0110, 0x69ee, 0x0070, 0x8107, 0x9084, 0x0007, 0x910d,
++ 0x8107, 0x9106, 0x9094, 0x00c0, 0x9184, 0xff3f, 0x9205, 0x68ee,
++ 0x080c, 0x0e8d, 0x002e, 0x0005, 0x00c6, 0x2061, 0x1a3d, 0x00ce,
++ 0x0005, 0x9184, 0x000f, 0x8003, 0x8003, 0x8003, 0x9080, 0x1a3d,
++ 0x2060, 0x0005, 0xa884, 0x908a, 0x199a, 0x1638, 0x9005, 0x1150,
++ 0x00c6, 0x2061, 0x1a3d, 0x6014, 0x00ce, 0x9005, 0x1130, 0x2001,
++ 0x001e, 0x0018, 0x908e, 0xffff, 0x01b0, 0x8003, 0x800b, 0x810b,
++ 0x9108, 0x611a, 0xa87c, 0x908c, 0x00c0, 0x918e, 0x00c0, 0x0904,
++ 0x79b4, 0xd0b4, 0x1168, 0xd0bc, 0x1904, 0x798d, 0x2009, 0x0006,
++ 0x080c, 0x79e1, 0x0005, 0x900e, 0x0c60, 0x2001, 0x1999, 0x08b0,
++ 0xd0fc, 0x0160, 0x908c, 0x0003, 0x0120, 0x918e, 0x0003, 0x1904,
++ 0x79db, 0x908c, 0x2020, 0x918e, 0x2020, 0x01a8, 0x6024, 0xd0d4,
++ 0x11e8, 0x2009, 0x1874, 0x2104, 0xd084, 0x1138, 0x87ff, 0x1120,
++ 0x2009, 0x0043, 0x0804, 0x95ce, 0x0005, 0x87ff, 0x1de8, 0x2009,
++ 0x0042, 0x0804, 0x95ce, 0x6110, 0x00b6, 0x2158, 0xb900, 0x00be,
++ 0xd1ac, 0x0d20, 0x6024, 0xc0cd, 0x6026, 0x0c00, 0xc0d4, 0x6026,
++ 0xa890, 0x602e, 0xa88c, 0x6032, 0x08e0, 0xd0fc, 0x0160, 0x908c,
++ 0x0003, 0x0120, 0x918e, 0x0003, 0x1904, 0x79db, 0x908c, 0x2020,
++ 0x918e, 0x2020, 0x0170, 0x0076, 0x00f6, 0x2c78, 0x080c, 0x150d,
++ 0x00fe, 0x007e, 0x87ff, 0x1120, 0x2009, 0x0042, 0x080c, 0x95ce,
++ 0x0005, 0x6110, 0x00b6, 0x2158, 0xb900, 0x00be, 0xd1ac, 0x0d58,
++ 0x6124, 0xc1cd, 0x6126, 0x0c38, 0xd0fc, 0x0188, 0x908c, 0x2020,
++ 0x918e, 0x2020, 0x01a8, 0x9084, 0x0003, 0x908e, 0x0002, 0x0148,
++ 0x87ff, 0x1120, 0x2009, 0x0041, 0x080c, 0x95ce, 0x0005, 0x00b9,
++ 0x0ce8, 0x87ff, 0x1dd8, 0x2009, 0x0043, 0x080c, 0x95ce, 0x0cb0,
++ 0x6110, 0x00b6, 0x2158, 0xb900, 0x00be, 0xd1ac, 0x0d20, 0x6124,
++ 0xc1cd, 0x6126, 0x0c00, 0x2009, 0x0004, 0x0019, 0x0005, 0x2009,
++ 0x0001, 0x0096, 0x080c, 0xb0ad, 0x0518, 0x6014, 0x2048, 0xa982,
++ 0xa800, 0x6016, 0x9186, 0x0001, 0x1188, 0xa97c, 0x918c, 0x8100,
++ 0x918e, 0x8100, 0x1158, 0x00c6, 0x2061, 0x1a3d, 0x6200, 0xd28c,
++ 0x1120, 0x6204, 0x8210, 0x0208, 0x6206, 0x00ce, 0x080c, 0x5ff7,
++ 0x6014, 0x904d, 0x0076, 0x2039, 0x0000, 0x190c, 0x792a, 0x007e,
++ 0x009e, 0x0005, 0x0156, 0x00c6, 0x2061, 0x1a3d, 0x6000, 0x81ff,
++ 0x0110, 0x9205, 0x0008, 0x9204, 0x6002, 0x00ce, 0x015e, 0x0005,
++ 0x6800, 0xd08c, 0x1138, 0x6808, 0x9005, 0x0120, 0x8001, 0x680a,
++ 0x9085, 0x0001, 0x0005, 0x0126, 0x2091, 0x8000, 0x0036, 0x0046,
++ 0x20a9, 0x0010, 0x9006, 0x8004, 0x2019, 0x0100, 0x231c, 0x93a6,
++ 0x0008, 0x1118, 0x8086, 0x818e, 0x0020, 0x80f6, 0x3e00, 0x81f6,
++ 0x3e08, 0x1208, 0x9200, 0x1f04, 0x7a2c, 0x93a6, 0x0008, 0x1118,
++ 0x8086, 0x818e, 0x0020, 0x80f6, 0x3e00, 0x81f6, 0x3e08, 0x004e,
++ 0x003e, 0x012e, 0x0005, 0x0126, 0x2091, 0x8000, 0x0076, 0x0156,
++ 0x20a9, 0x0010, 0x9005, 0x0510, 0x911a, 0x1600, 0x8213, 0x2039,
++ 0x0100, 0x273c, 0x97be, 0x0008, 0x1110, 0x818d, 0x0010, 0x81f5,
++ 0x3e08, 0x0228, 0x911a, 0x1220, 0x1f04, 0x7a56, 0x0028, 0x911a,
++ 0x2308, 0x8210, 0x1f04, 0x7a56, 0x0006, 0x3200, 0x9084, 0xefff,
++ 0x2080, 0x000e, 0x015e, 0x007e, 0x012e, 0x0005, 0x0006, 0x3200,
++ 0x9085, 0x1000, 0x0ca8, 0x0126, 0x2091, 0x2800, 0x2079, 0x19b4,
++ 0x012e, 0x00d6, 0x2069, 0x19b4, 0x6803, 0x0005, 0x0156, 0x0146,
++ 0x01d6, 0x20e9, 0x0000, 0x2069, 0x0200, 0x080c, 0x9363, 0x0401,
++ 0x080c, 0x934e, 0x00e9, 0x080c, 0x9351, 0x00d1, 0x080c, 0x9354,
++ 0x00b9, 0x080c, 0x9357, 0x00a1, 0x080c, 0x935a, 0x0089, 0x080c,
++ 0x935d, 0x0071, 0x080c, 0x9360, 0x0059, 0x01de, 0x014e, 0x015e,
++ 0x2069, 0x0004, 0x2d04, 0x9085, 0x8001, 0x206a, 0x00de, 0x0005,
++ 0x20a9, 0x0020, 0x20a1, 0x0240, 0x9006, 0x4004, 0x0005, 0x00c6,
++ 0x6027, 0x0001, 0x7804, 0x9084, 0x0007, 0x0002, 0x7ac8, 0x7aec,
++ 0x7b36, 0x7ace, 0x7aec, 0x7ac8, 0x7ac6, 0x7ac6, 0x080c, 0x0d84,
++ 0x080c, 0x7893, 0x080c, 0x8125, 0x00ce, 0x0005, 0x62c0, 0x82ff,
++ 0x1110, 0x00ce, 0x0005, 0x2011, 0x554d, 0x080c, 0x781a, 0x7828,
++ 0x9092, 0x00c8, 0x1228, 0x8000, 0x782a, 0x080c, 0x558a, 0x0c88,
++ 0x62c0, 0x080c, 0x9367, 0x080c, 0x554d, 0x7807, 0x0003, 0x7827,
++ 0x0000, 0x782b, 0x0000, 0x0c28, 0x080c, 0x7893, 0x6220, 0xd2a4,
++ 0x0178, 0x62c0, 0x82ff, 0x1160, 0x782b, 0x0000, 0x7824, 0x9065,
++ 0x090c, 0x0d84, 0x2009, 0x0013, 0x080c, 0x95ce, 0x00ce, 0x0005,
++ 0x00c6, 0x7824, 0x9065, 0x090c, 0x0d84, 0x7804, 0x9086, 0x0004,
++ 0x0904, 0x7b74, 0x7828, 0x9092, 0xc350, 0x1230, 0x8000, 0x782a,
++ 0x00ce, 0x080c, 0x8b2c, 0x0c50, 0x2011, 0x0130, 0x2214, 0x080c,
++ 0x9367, 0x6104, 0x9186, 0x0003, 0x1188, 0x00e6, 0x2071, 0x1800,
++ 0x70e4, 0x00ee, 0xd08c, 0x0150, 0x00c6, 0x00e6, 0x2061, 0x0100,
++ 0x2071, 0x1800, 0x080c, 0x55a0, 0x00ee, 0x00ce, 0x080c, 0xcd1f,
++ 0x2009, 0x0014, 0x080c, 0x95ce, 0x00ce, 0x0840, 0x2001, 0x19d0,
++ 0x2003, 0x0000, 0x62c0, 0x82ff, 0x1160, 0x782b, 0x0000, 0x7824,
++ 0x9065, 0x090c, 0x0d84, 0x2009, 0x0013, 0x080c, 0x9620, 0x00ce,
++ 0x0005, 0x00b6, 0x00c6, 0x00d6, 0x7824, 0x9005, 0x090c, 0x0d84,
++ 0x781c, 0x905d, 0x090c, 0x0d84, 0x080c, 0x9367, 0xb800, 0xc0dc,
++ 0xb802, 0x7924, 0x2160, 0x080c, 0x9554, 0xb93c, 0x81ff, 0x090c,
++ 0x0d84, 0x8109, 0xb93e, 0xb854, 0x9015, 0x0110, 0x7a1e, 0x0010,
++ 0x7918, 0x791e, 0x7807, 0x0000, 0x7827, 0x0000, 0x00de, 0x00ce,
++ 0x00be, 0x080c, 0x8125, 0x0898, 0x6104, 0x9186, 0x0002, 0x0128,
++ 0x9186, 0x0004, 0x0110, 0x0804, 0x7b0a, 0x7808, 0x9c06, 0x0904,
++ 0x7b0a, 0x080c, 0x8026, 0x080c, 0x7c1d, 0x00ce, 0x080c, 0x8125,
++ 0x0804, 0x7afe, 0x00c6, 0x6024, 0x6027, 0x0002, 0xd0f4, 0x1580,
++ 0x62c8, 0x60c4, 0x9205, 0x1170, 0x783c, 0x9065, 0x0130, 0x2009,
++ 0x0049, 0x080c, 0x95ce, 0x00ce, 0x0005, 0x2011, 0x19d3, 0x2013,
++ 0x0000, 0x0cc8, 0x793c, 0x81ff, 0x0dc0, 0x7944, 0x9192, 0x7530,
++ 0x12f0, 0x8108, 0x7946, 0x793c, 0x9188, 0x0008, 0x210c, 0x918e,
++ 0x0006, 0x1138, 0x6014, 0x9084, 0x1984, 0x9085, 0x0012, 0x6016,
++ 0x0c10, 0x6014, 0x9084, 0x1984, 0x9085, 0x0016, 0x6016, 0x08d8,
++ 0x793c, 0x2160, 0x2009, 0x004a, 0x080c, 0x95ce, 0x08a0, 0x7848,
++ 0xc085, 0x784a, 0x0880, 0x0006, 0x0016, 0x00c6, 0x0126, 0x2091,
++ 0x8000, 0x600f, 0x0000, 0x2c08, 0x2061, 0x19b4, 0x6020, 0x8000,
++ 0x6022, 0x6010, 0x9005, 0x0148, 0x9080, 0x0003, 0x2102, 0x6112,
++ 0x012e, 0x00ce, 0x001e, 0x000e, 0x0005, 0x6116, 0x6112, 0x0cc0,
++ 0x00d6, 0x2069, 0x19b4, 0xb800, 0xd0d4, 0x01b8, 0x6820, 0x8000,
++ 0x6822, 0x9086, 0x0001, 0x1110, 0x2b00, 0x681e, 0x2001, 0x180c,
++ 0x2004, 0xd0fc, 0x0118, 0x00de, 0x0804, 0x8125, 0x6804, 0x9084,
++ 0x0007, 0x0804, 0x813c, 0x00de, 0x0005, 0xc0d5, 0xb802, 0x6818,
++ 0x9005, 0x0168, 0xb856, 0xb85b, 0x0000, 0x0086, 0x0006, 0x2b00,
++ 0x681a, 0x008e, 0xa05a, 0x008e, 0x2069, 0x19b4, 0x08b8, 0xb856,
++ 0xb85a, 0x2b00, 0x681a, 0x681e, 0x0888, 0x0006, 0x0016, 0x00c6,
++ 0x0126, 0x2091, 0x8000, 0x600f, 0x0000, 0x2c08, 0x2061, 0x19b4,
++ 0x6020, 0x8000, 0x6022, 0x6008, 0x9005, 0x0148, 0x9080, 0x0003,
++ 0x2102, 0x610a, 0x012e, 0x00ce, 0x001e, 0x000e, 0x0005, 0x610e,
++ 0x610a, 0x0cc0, 0x00c6, 0x600f, 0x0000, 0x2c08, 0x2061, 0x19b4,
++ 0x6034, 0x9005, 0x0130, 0x9080, 0x0003, 0x2102, 0x6136, 0x00ce,
++ 0x0005, 0x613a, 0x6136, 0x00ce, 0x0005, 0x00f6, 0x00e6, 0x00d6,
++ 0x00c6, 0x00b6, 0x0096, 0x0076, 0x0066, 0x0056, 0x0036, 0x0026,
++ 0x0016, 0x0006, 0x0126, 0x902e, 0x2071, 0x19b4, 0x7638, 0x2660,
++ 0x2678, 0x2091, 0x8000, 0x8cff, 0x0904, 0x7cc4, 0x6010, 0x2058,
++ 0xb8a0, 0x9206, 0x1904, 0x7cbf, 0x87ff, 0x0120, 0x6054, 0x9106,
++ 0x1904, 0x7cbf, 0x703c, 0x9c06, 0x1178, 0x0036, 0x2019, 0x0001,
++ 0x080c, 0x8dfe, 0x7033, 0x0000, 0x9006, 0x703e, 0x7042, 0x7046,
++ 0x704a, 0x003e, 0x2029, 0x0001, 0x7038, 0x9c36, 0x1110, 0x660c,
++ 0x763a, 0x7034, 0x9c36, 0x1140, 0x2c00, 0x9f36, 0x0118, 0x2f00,
++ 0x7036, 0x0010, 0x7037, 0x0000, 0x660c, 0x0066, 0x2c00, 0x9f06,
++ 0x0110, 0x7e0e, 0x0008, 0x2678, 0x600f, 0x0000, 0x080c, 0xb0ad,
++ 0x01c8, 0x6014, 0x2048, 0x6020, 0x9086, 0x0003, 0x1590, 0xa867,
++ 0x0103, 0xab7a, 0xa877, 0x0000, 0x0016, 0x0036, 0x0076, 0x080c,
++ 0xb374, 0x080c, 0xcc6b, 0x080c, 0x61a9, 0x007e, 0x003e, 0x001e,
++ 0x080c, 0xb278, 0x080c, 0x9584, 0x00ce, 0x0804, 0x7c63, 0x2c78,
++ 0x600c, 0x2060, 0x0804, 0x7c63, 0x85ff, 0x0120, 0x0036, 0x080c,
++ 0x820b, 0x003e, 0x012e, 0x000e, 0x001e, 0x002e, 0x003e, 0x005e,
++ 0x006e, 0x007e, 0x009e, 0x00be, 0x00ce, 0x00de, 0x00ee, 0x00fe,
++ 0x0005, 0x6020, 0x9086, 0x0006, 0x1158, 0x0016, 0x0036, 0x0076,
++ 0x080c, 0xcc6b, 0x080c, 0xc970, 0x007e, 0x003e, 0x001e, 0x0890,
++ 0x6020, 0x9086, 0x000a, 0x0904, 0x7ca9, 0x0804, 0x7ca7, 0x0006,
++ 0x0066, 0x0096, 0x00c6, 0x00d6, 0x00f6, 0x9036, 0x0126, 0x2091,
++ 0x8000, 0x2079, 0x19b4, 0x7838, 0x9065, 0x0904, 0x7d3f, 0x600c,
++ 0x0006, 0x600f, 0x0000, 0x783c, 0x9c06, 0x1168, 0x0036, 0x2019,
++ 0x0001, 0x080c, 0x8dfe, 0x7833, 0x0000, 0x901e, 0x7b3e, 0x7b42,
++ 0x7b46, 0x7b4a, 0x003e, 0x080c, 0xb0ad, 0x0520, 0x6014, 0x2048,
++ 0x6020, 0x9086, 0x0003, 0x1568, 0x3e08, 0x918e, 0x0002, 0x1188,
++ 0x6010, 0x9005, 0x0170, 0x00b6, 0x2058, 0xb800, 0x00be, 0xd0bc,
++ 0x0140, 0x6040, 0x9005, 0x1180, 0x2001, 0x1955, 0x2004, 0x6042,
++ 0x0058, 0xa867, 0x0103, 0xab7a, 0xa877, 0x0000, 0x080c, 0x61a9,
++ 0x080c, 0xb278, 0x080c, 0x9584, 0x000e, 0x0804, 0x7cfc, 0x7e3a,
++ 0x7e36, 0x012e, 0x00fe, 0x00de, 0x00ce, 0x009e, 0x006e, 0x000e,
++ 0x0005, 0x6020, 0x9086, 0x0006, 0x1118, 0x080c, 0xc970, 0x0c50,
++ 0x6020, 0x9086, 0x000a, 0x09f8, 0x08e0, 0x0016, 0x0026, 0x0086,
++ 0x9046, 0x0099, 0x080c, 0x7e2b, 0x008e, 0x002e, 0x001e, 0x0005,
++ 0x00f6, 0x0126, 0x2079, 0x19b4, 0x2091, 0x8000, 0x080c, 0x7ec2,
++ 0x080c, 0x7f3a, 0x012e, 0x00fe, 0x0005, 0x00b6, 0x0096, 0x00f6,
++ 0x00e6, 0x00d6, 0x00c6, 0x0066, 0x0016, 0x0006, 0x0126, 0x2091,
++ 0x8000, 0x2071, 0x19b4, 0x7614, 0x2660, 0x2678, 0x8cff, 0x0904,
++ 0x7dfc, 0x6010, 0x2058, 0xb8a0, 0x9206, 0x1904, 0x7df7, 0x88ff,
++ 0x0120, 0x6054, 0x9106, 0x1904, 0x7df7, 0x7024, 0x9c06, 0x1550,
++ 0x2069, 0x0100, 0x68c0, 0x9005, 0x0508, 0x080c, 0x7893, 0x080c,
++ 0x8b50, 0x68c3, 0x0000, 0x080c, 0x900f, 0x7027, 0x0000, 0x0036,
++ 0x2069, 0x0140, 0x6b04, 0x9384, 0x1000, 0x0138, 0x2001, 0x0100,
++ 0x080c, 0x28a5, 0x9006, 0x080c, 0x28a5, 0x2069, 0x0100, 0x6824,
++ 0xd084, 0x0110, 0x6827, 0x0001, 0x003e, 0x0020, 0x6003, 0x0009,
++ 0x630a, 0x04e8, 0x7014, 0x9c36, 0x1110, 0x660c, 0x7616, 0x7010,
++ 0x9c36, 0x1140, 0x2c00, 0x9f36, 0x0118, 0x2f00, 0x7012, 0x0010,
++ 0x7013, 0x0000, 0x660c, 0x0066, 0x2c00, 0x9f06, 0x0110, 0x7e0e,
++ 0x0008, 0x2678, 0x600f, 0x0000, 0x6014, 0x2048, 0x080c, 0xb0ad,
++ 0x01b8, 0x6020, 0x9086, 0x0003, 0x1550, 0xa867, 0x0103, 0xab7a,
++ 0xa877, 0x0000, 0x0016, 0x0036, 0x0086, 0x080c, 0xb374, 0x080c,
++ 0xcc6b, 0x080c, 0x61a9, 0x008e, 0x003e, 0x001e, 0x080c, 0xb278,
++ 0x080c, 0x9584, 0x080c, 0x8eec, 0x00ce, 0x0804, 0x7d7e, 0x2c78,
++ 0x600c, 0x2060, 0x0804, 0x7d7e, 0x012e, 0x000e, 0x001e, 0x006e,
++ 0x00ce, 0x00de, 0x00ee, 0x00fe, 0x009e, 0x00be, 0x0005, 0x6020,
++ 0x9086, 0x0006, 0x1158, 0x0016, 0x0036, 0x0086, 0x080c, 0xcc6b,
++ 0x080c, 0xc970, 0x008e, 0x003e, 0x001e, 0x08d0, 0x080c, 0x9e99,
++ 0x6020, 0x9086, 0x0002, 0x1130, 0x6004, 0x9086, 0x0085, 0x0904,
++ 0x7ddd, 0x0870, 0x6020, 0x9086, 0x0005, 0x1950, 0x6004, 0x9086,
++ 0x0085, 0x0d08, 0x0828, 0x00b6, 0x00a6, 0x0096, 0x00c6, 0x0006,
++ 0x0126, 0x2091, 0x8000, 0x9280, 0x1000, 0x2004, 0x905d, 0x0904,
++ 0x7ebb, 0x00f6, 0x00e6, 0x00d6, 0x0066, 0x2071, 0x19b4, 0xbe54,
++ 0x7018, 0x9b06, 0x1108, 0x761a, 0x701c, 0x9b06, 0x1130, 0x86ff,
++ 0x1118, 0x7018, 0x701e, 0x0008, 0x761e, 0xb858, 0x904d, 0x0108,
++ 0xae56, 0x96d5, 0x0000, 0x0110, 0x2900, 0xb05a, 0xb857, 0x0000,
++ 0xb85b, 0x0000, 0xb800, 0xc0d4, 0xc0dc, 0xb802, 0x080c, 0x5b43,
++ 0x0904, 0x7eb7, 0x7624, 0x86ff, 0x0904, 0x7ea6, 0x9680, 0x0005,
++ 0x2004, 0x9906, 0x15d8, 0x00d6, 0x2069, 0x0100, 0x68c0, 0x9005,
++ 0x0560, 0x080c, 0x7893, 0x080c, 0x8b50, 0x68c3, 0x0000, 0x080c,
++ 0x900f, 0x7027, 0x0000, 0x0036, 0x2069, 0x0140, 0x6b04, 0x9384,
++ 0x1000, 0x0138, 0x2001, 0x0100, 0x080c, 0x28a5, 0x9006, 0x080c,
++ 0x28a5, 0x2069, 0x0100, 0x6824, 0xd084, 0x0110, 0x6827, 0x0001,
++ 0x003e, 0x00de, 0x00c6, 0xb83c, 0x9005, 0x0110, 0x8001, 0xb83e,
++ 0x2660, 0x080c, 0x9584, 0x00ce, 0x0048, 0x00de, 0x00c6, 0x2660,
++ 0x6003, 0x0009, 0x630a, 0x00ce, 0x0804, 0x7e5e, 0x89ff, 0x0158,
++ 0xa867, 0x0103, 0xab7a, 0xa877, 0x0000, 0x080c, 0xb374, 0x080c,
++ 0xcc6b, 0x080c, 0x61a9, 0x080c, 0x8eec, 0x0804, 0x7e5e, 0x006e,
++ 0x00de, 0x00ee, 0x00fe, 0x012e, 0x000e, 0x00ce, 0x009e, 0x00ae,
++ 0x00be, 0x0005, 0x0096, 0x0006, 0x0066, 0x00c6, 0x00d6, 0x9036,
++ 0x7814, 0x9065, 0x0904, 0x7f17, 0x600c, 0x0006, 0x600f, 0x0000,
++ 0x7824, 0x9c06, 0x1558, 0x2069, 0x0100, 0x68c0, 0x9005, 0x0508,
++ 0x080c, 0x7893, 0x080c, 0x8b50, 0x68c3, 0x0000, 0x080c, 0x900f,
++ 0x7827, 0x0000, 0x0036, 0x2069, 0x0140, 0x6b04, 0x9384, 0x1000,
++ 0x0138, 0x2001, 0x0100, 0x080c, 0x28a5, 0x9006, 0x080c, 0x28a5,
++ 0x2069, 0x0100, 0x6824, 0xd084, 0x0110, 0x6827, 0x0001, 0x003e,
++ 0x0028, 0x6003, 0x0009, 0x630a, 0x2c30, 0x00b0, 0x6014, 0x2048,
++ 0x080c, 0xb0ab, 0x0168, 0x6020, 0x9086, 0x0003, 0x11c0, 0xa867,
++ 0x0103, 0xab7a, 0xa877, 0x0000, 0x080c, 0x61a9, 0x080c, 0xb278,
++ 0x080c, 0x9584, 0x080c, 0x8eec, 0x000e, 0x0804, 0x7ec9, 0x7e16,
++ 0x7e12, 0x00de, 0x00ce, 0x006e, 0x000e, 0x009e, 0x0005, 0x6020,
++ 0x9086, 0x0006, 0x1118, 0x080c, 0xc970, 0x0c50, 0x080c, 0x9e99,
++ 0x6020, 0x9086, 0x0002, 0x1128, 0x6004, 0x9086, 0x0085, 0x09b8,
++ 0x08f8, 0x6020, 0x9086, 0x0005, 0x19d8, 0x6004, 0x9086, 0x0085,
++ 0x0d50, 0x08b0, 0x0006, 0x0066, 0x0096, 0x00b6, 0x00c6, 0x00d6,
++ 0x7818, 0x905d, 0x0904, 0x7fb7, 0xb854, 0x0006, 0x9006, 0xb856,
++ 0xb85a, 0xb800, 0xc0d4, 0xc0dc, 0xb802, 0x080c, 0x5b43, 0x0904,
++ 0x7fb4, 0x7e24, 0x86ff, 0x0904, 0x7fa7, 0x9680, 0x0005, 0x2004,
++ 0x9906, 0x1904, 0x7fa7, 0x00d6, 0x2069, 0x0100, 0x68c0, 0x9005,
++ 0x05e8, 0x080c, 0x7893, 0x080c, 0x8b50, 0x68c3, 0x0000, 0x080c,
++ 0x900f, 0x7827, 0x0000, 0x0036, 0x2069, 0x0140, 0x6b04, 0x9384,
++ 0x1000, 0x0138, 0x2001, 0x0100, 0x080c, 0x28a5, 0x9006, 0x080c,
++ 0x28a5, 0x2069, 0x0100, 0x6824, 0xd084, 0x0110, 0x6827, 0x0001,
++ 0x003e, 0x00de, 0x00c6, 0x3e08, 0x918e, 0x0002, 0x1168, 0xb800,
++ 0xd0bc, 0x0150, 0x9680, 0x0010, 0x200c, 0x81ff, 0x1508, 0x2009,
++ 0x1955, 0x210c, 0x2102, 0x00e0, 0xb83c, 0x9005, 0x0110, 0x8001,
++ 0xb83e, 0x2660, 0x080c, 0x9584, 0x00ce, 0x0048, 0x00de, 0x00c6,
++ 0x2660, 0x6003, 0x0009, 0x630a, 0x00ce, 0x0804, 0x7f4d, 0x89ff,
++ 0x0138, 0xa867, 0x0103, 0xab7a, 0xa877, 0x0000, 0x080c, 0x61a9,
++ 0x080c, 0x8eec, 0x0804, 0x7f4d, 0x000e, 0x0804, 0x7f41, 0x781e,
++ 0x781a, 0x00de, 0x00ce, 0x00be, 0x009e, 0x006e, 0x000e, 0x0005,
++ 0x00e6, 0x00d6, 0x0096, 0x0066, 0xb800, 0xd0dc, 0x01a0, 0xb84c,
++ 0x904d, 0x0188, 0xa878, 0x9606, 0x1170, 0x2071, 0x19b4, 0x7024,
++ 0x9035, 0x0148, 0x9080, 0x0005, 0x2004, 0x9906, 0x1120, 0xb800,
++ 0xc0dc, 0xb802, 0x0029, 0x006e, 0x009e, 0x00de, 0x00ee, 0x0005,
++ 0x00f6, 0x2079, 0x0100, 0x78c0, 0x9005, 0x1138, 0x00c6, 0x2660,
++ 0x6003, 0x0009, 0x630a, 0x00ce, 0x04b8, 0x080c, 0x8b50, 0x78c3,
++ 0x0000, 0x080c, 0x900f, 0x7027, 0x0000, 0x0036, 0x2079, 0x0140,
++ 0x7b04, 0x9384, 0x1000, 0x0138, 0x2001, 0x0100, 0x080c, 0x28a5,
++ 0x9006, 0x080c, 0x28a5, 0x2079, 0x0100, 0x7824, 0xd084, 0x0110,
++ 0x7827, 0x0001, 0x080c, 0x900f, 0x003e, 0x080c, 0x5b43, 0x00c6,
++ 0xb83c, 0x9005, 0x0110, 0x8001, 0xb83e, 0x2660, 0x080c, 0x9554,
++ 0x00ce, 0xa867, 0x0103, 0xab7a, 0xa877, 0x0000, 0x080c, 0xb374,
++ 0x080c, 0x61a9, 0x080c, 0x8eec, 0x00fe, 0x0005, 0x00b6, 0x00e6,
++ 0x00c6, 0x2001, 0x180c, 0x2014, 0xc2e4, 0x2202, 0x2071, 0x19b4,
++ 0x7004, 0x9084, 0x0007, 0x0002, 0x803e, 0x8042, 0x8059, 0x8082,
++ 0x80c0, 0x803e, 0x8059, 0x803c, 0x080c, 0x0d84, 0x00ce, 0x00ee,
++ 0x00be, 0x0005, 0x7024, 0x9065, 0x0148, 0x7020, 0x8001, 0x7022,
++ 0x600c, 0x9015, 0x0158, 0x7216, 0x600f, 0x0000, 0x7007, 0x0000,
++ 0x7027, 0x0000, 0x00ce, 0x00ee, 0x00be, 0x0005, 0x7216, 0x7212,
++ 0x0ca8, 0x6010, 0x2058, 0x080c, 0x5b43, 0xb800, 0xc0dc, 0xb802,
++ 0x7007, 0x0000, 0x7027, 0x0000, 0x7020, 0x8001, 0x7022, 0x1148,
++ 0x2001, 0x180c, 0x2014, 0xd2ec, 0x1180, 0x00ce, 0x00ee, 0x00be,
++ 0x0005, 0xb854, 0x9015, 0x0120, 0x721e, 0x080c, 0x8125, 0x0ca8,
++ 0x7218, 0x721e, 0x080c, 0x8125, 0x0c80, 0xc2ec, 0x2202, 0x080c,
++ 0x820b, 0x0c58, 0x7024, 0x9065, 0x05b8, 0x700c, 0x9c06, 0x1160,
++ 0x080c, 0x8eec, 0x600c, 0x9015, 0x0120, 0x720e, 0x600f, 0x0000,
++ 0x0448, 0x720e, 0x720a, 0x0430, 0x7014, 0x9c06, 0x1160, 0x080c,
++ 0x8eec, 0x600c, 0x9015, 0x0120, 0x7216, 0x600f, 0x0000, 0x00d0,
++ 0x7216, 0x7212, 0x00b8, 0x6020, 0x9086, 0x0003, 0x1198, 0x6010,
++ 0x2058, 0x080c, 0x5b43, 0xb800, 0xc0dc, 0xb802, 0x080c, 0x8eec,
++ 0x701c, 0x9065, 0x0138, 0xb854, 0x9015, 0x0110, 0x721e, 0x0010,
++ 0x7218, 0x721e, 0x7027, 0x0000, 0x00ce, 0x00ee, 0x00be, 0x0005,
++ 0x7024, 0x9065, 0x0140, 0x080c, 0x8eec, 0x600c, 0x9015, 0x0158,
++ 0x720e, 0x600f, 0x0000, 0x080c, 0x900f, 0x7027, 0x0000, 0x00ce,
++ 0x00ee, 0x00be, 0x0005, 0x720e, 0x720a, 0x0ca8, 0x00d6, 0x2069,
++ 0x19b4, 0x6830, 0x9084, 0x0003, 0x0002, 0x80e3, 0x80e5, 0x8109,
++ 0x80e1, 0x080c, 0x0d84, 0x00de, 0x0005, 0x00c6, 0x6840, 0x9086,
++ 0x0001, 0x01b8, 0x683c, 0x9065, 0x0130, 0x600c, 0x9015, 0x0170,
++ 0x6a3a, 0x600f, 0x0000, 0x6833, 0x0000, 0x683f, 0x0000, 0x2011,
++ 0x19d3, 0x2013, 0x0000, 0x00ce, 0x00de, 0x0005, 0x683a, 0x6836,
++ 0x0c90, 0x6843, 0x0000, 0x6838, 0x9065, 0x0d68, 0x6003, 0x0003,
++ 0x0c50, 0x00c6, 0x9006, 0x6842, 0x6846, 0x684a, 0x683c, 0x9065,
++ 0x0160, 0x600c, 0x9015, 0x0130, 0x6a3a, 0x600f, 0x0000, 0x683f,
++ 0x0000, 0x0018, 0x683e, 0x683a, 0x6836, 0x00ce, 0x00de, 0x0005,
++ 0xc1e5, 0x2001, 0x180c, 0x2102, 0x0005, 0x2001, 0x180c, 0x200c,
++ 0xd1ec, 0x0138, 0xc1ec, 0x2102, 0x080c, 0x820b, 0x2001, 0x180c,
++ 0x200c, 0x9184, 0x0600, 0x9086, 0x0600, 0x0d50, 0x00d6, 0x2069,
++ 0x19b4, 0x6804, 0x9084, 0x0007, 0x0002, 0x8147, 0x81ea, 0x81ea,
++ 0x81ea, 0x81ea, 0x81ec, 0x81ea, 0x8145, 0x080c, 0x0d84, 0x6820,
++ 0x9005, 0x1110, 0x00de, 0x0005, 0x00c6, 0x680c, 0x9065, 0x0150,
++ 0x6807, 0x0004, 0x6826, 0x682b, 0x0000, 0x080c, 0x8256, 0x00ce,
++ 0x00de, 0x0005, 0x6814, 0x9065, 0x0150, 0x6807, 0x0001, 0x6826,
++ 0x682b, 0x0000, 0x080c, 0x8256, 0x00ce, 0x00de, 0x0005, 0x00b6,
++ 0x00e6, 0x6a1c, 0x92dd, 0x0000, 0x0904, 0x81d6, 0xb84c, 0x900d,
++ 0x0118, 0xb888, 0x9005, 0x01a0, 0xb854, 0x905d, 0x0120, 0x920e,
++ 0x0904, 0x81d6, 0x0028, 0x6818, 0x920e, 0x0904, 0x81d6, 0x2058,
++ 0xb84c, 0x900d, 0x0d88, 0xb888, 0x9005, 0x1d70, 0x2b00, 0x681e,
++ 0xbb3c, 0xb838, 0x9302, 0x1e40, 0x080c, 0x952b, 0x0904, 0x81d6,
++ 0x8318, 0xbb3e, 0x6116, 0x2b10, 0x6212, 0x0096, 0x2148, 0xa880,
++ 0x9084, 0x00ff, 0x605e, 0xa883, 0x0000, 0xa884, 0x009e, 0x908a,
++ 0x199a, 0x0210, 0x2001, 0x1999, 0x8003, 0x801b, 0x831b, 0x9318,
++ 0x631a, 0x6114, 0x0096, 0x2148, 0xa964, 0x009e, 0x918c, 0x00ff,
++ 0x918e, 0x0048, 0x0538, 0x00f6, 0x2c78, 0x2061, 0x0100, 0xbab0,
++ 0x629a, 0x2069, 0x0200, 0x2071, 0x0240, 0x080c, 0x8786, 0x2069,
++ 0x19b4, 0xbb00, 0xc3dd, 0xbb02, 0x6807, 0x0002, 0x2f18, 0x6b26,
++ 0x682b, 0x0000, 0x7823, 0x0003, 0x7803, 0x0001, 0x7807, 0x0040,
++ 0x00fe, 0x00ee, 0x00be, 0x00ce, 0x00de, 0x0005, 0x00ee, 0x00be,
++ 0x00ce, 0x0cd0, 0xbb00, 0xc3dd, 0xbb02, 0x6807, 0x0006, 0x2f18,
++ 0x6b26, 0x682b, 0x0000, 0x080c, 0x9387, 0x00ee, 0x00be, 0x00ce,
++ 0x00de, 0x0005, 0x00de, 0x0005, 0x00c6, 0x680c, 0x9065, 0x0138,
++ 0x6807, 0x0004, 0x6826, 0x682b, 0x0000, 0x080c, 0x8256, 0x00ce,
++ 0x00de, 0x0005, 0x2001, 0x180c, 0x2014, 0xc2ed, 0x2202, 0x00de,
++ 0x00fe, 0x0005, 0x2001, 0x180c, 0x2014, 0xd2e4, 0x0120, 0xc2e4,
++ 0x2202, 0x080c, 0x8136, 0x00f6, 0x00d6, 0x2069, 0x19b4, 0x6830,
++ 0x9086, 0x0000, 0x11f0, 0x2001, 0x180c, 0x200c, 0xd1c4, 0x11e0,
++ 0x6838, 0x907d, 0x01b0, 0x6a04, 0x9296, 0x0000, 0x1588, 0x6833,
++ 0x0001, 0x683e, 0x6847, 0x0000, 0x684b, 0x0000, 0x0126, 0x00f6,
++ 0x2091, 0x2400, 0x002e, 0x080c, 0x1933, 0x1178, 0x012e, 0x080c,
++ 0x899e, 0x00de, 0x00fe, 0x0005, 0xc1c4, 0x2102, 0x0066, 0x2031,
++ 0x0001, 0x080c, 0x691e, 0x006e, 0x08d8, 0x012e, 0x6843, 0x0000,
++ 0x7803, 0x0002, 0x780c, 0x9015, 0x0140, 0x6a3a, 0x780f, 0x0000,
++ 0x6833, 0x0000, 0x683f, 0x0000, 0x0c20, 0x683a, 0x6836, 0x0cc0,
++ 0x6a04, 0x9296, 0x0006, 0x0958, 0x0804, 0x81fa, 0x6020, 0x9084,
++ 0x000f, 0x000b, 0x0005, 0x826a, 0x826f, 0x86ca, 0x874f, 0x826f,
++ 0x86ca, 0x874f, 0x826a, 0x826f, 0x826a, 0x826a, 0x826a, 0x826a,
++ 0x826a, 0x826a, 0x080c, 0x8026, 0x080c, 0x8125, 0x0005, 0x00b6,
++ 0x0156, 0x0136, 0x0146, 0x01c6, 0x01d6, 0x00c6, 0x00d6, 0x00e6,
++ 0x00f6, 0x2069, 0x0200, 0x2071, 0x0240, 0x6004, 0x908a, 0x0053,
++ 0x1a0c, 0x0d84, 0x6110, 0x2158, 0xb9b0, 0x2c78, 0x2061, 0x0100,
++ 0x619a, 0x908a, 0x0040, 0x1a04, 0x82db, 0x005b, 0x00fe, 0x00ee,
++ 0x00de, 0x00ce, 0x01de, 0x01ce, 0x014e, 0x013e, 0x015e, 0x00be,
++ 0x0005, 0x8451, 0x848c, 0x84b5, 0x8559, 0x857b, 0x8581, 0x858e,
++ 0x8596, 0x85a2, 0x85a8, 0x85b9, 0x85a8, 0x8611, 0x8596, 0x861d,
++ 0x8623, 0x85a2, 0x8623, 0x862f, 0x82d9, 0x82d9, 0x82d9, 0x82d9,
++ 0x82d9, 0x82d9, 0x82d9, 0x82d9, 0x82d9, 0x82d9, 0x82d9, 0x8c9a,
++ 0x8cb0, 0x8cba, 0x8cda, 0x8d0c, 0x858e, 0x82d9, 0x858e, 0x85a8,
++ 0x82d9, 0x84b5, 0x8559, 0x82d9, 0x90fc, 0x85a8, 0x82d9, 0x9118,
++ 0x85a8, 0x82d9, 0x85a2, 0x844b, 0x82fc, 0x82d9, 0x912e, 0x919a,
++ 0x9271, 0x82d9, 0x927e, 0x858b, 0x92a9, 0x82d9, 0x8d16, 0x92d6,
++ 0x82d9, 0x080c, 0x0d84, 0x2100, 0x005b, 0x00fe, 0x00ee, 0x00de,
++ 0x00ce, 0x01de, 0x01ce, 0x014e, 0x013e, 0x015e, 0x00be, 0x0005,
++ 0x82fa, 0x82fa, 0x82fa, 0x8322, 0x83ce, 0x83d9, 0x82fa, 0x82fa,
++ 0x82fa, 0x8420, 0x842c, 0x833d, 0x82fa, 0x8358, 0x838c, 0x9447,
++ 0x948c, 0x85a8, 0x080c, 0x0d84, 0x00d6, 0x0096, 0x080c, 0x8642,
++ 0x7003, 0x2414, 0x7007, 0x0018, 0x700b, 0x0800, 0x7814, 0x2048,
++ 0xa83c, 0x700e, 0xa850, 0x7022, 0xa854, 0x7026, 0x60c3, 0x0018,
++ 0x080c, 0x8b24, 0x009e, 0x00de, 0x0005, 0x7810, 0x00b6, 0x2058,
++ 0xb8a0, 0x00be, 0x080c, 0x94d3, 0x1110, 0xd0bc, 0x0110, 0x9085,
++ 0x0001, 0x0005, 0x00d6, 0x0096, 0x080c, 0x8642, 0x7003, 0x0500,
++ 0x7814, 0x2048, 0xa874, 0x700a, 0xa878, 0x700e, 0xa87c, 0x7012,
++ 0xa880, 0x7016, 0xa884, 0x701a, 0xa888, 0x701e, 0x60c3, 0x0010,
++ 0x080c, 0x8b24, 0x009e, 0x00de, 0x0005, 0x00d6, 0x0096, 0x080c,
++ 0x8642, 0x7003, 0x0500, 0x7814, 0x2048, 0xa8cc, 0x700a, 0xa8d0,
++ 0x700e, 0xa8d4, 0x7012, 0xa8d8, 0x7016, 0xa8dc, 0x701a, 0xa8e0,
++ 0x701e, 0x60c3, 0x0010, 0x080c, 0x8b24, 0x009e, 0x00de, 0x0005,
++ 0x00d6, 0x0096, 0x0126, 0x2091, 0x8000, 0x080c, 0x8642, 0x20e9,
++ 0x0000, 0x2001, 0x1970, 0x2003, 0x0000, 0x7814, 0x2048, 0xa814,
++ 0x8003, 0x60c2, 0xa830, 0x20a8, 0xa860, 0x20e0, 0xa85c, 0x9080,
++ 0x001b, 0x2098, 0x2001, 0x1970, 0x0016, 0x200c, 0x2001, 0x0001,
++ 0x080c, 0x1ff9, 0x080c, 0xbd44, 0x9006, 0x080c, 0x1ff9, 0x001e,
++ 0xa804, 0x9005, 0x0110, 0x2048, 0x0c28, 0x04d9, 0x080c, 0x8b24,
++ 0x012e, 0x009e, 0x00de, 0x0005, 0x00d6, 0x0096, 0x0126, 0x2091,
++ 0x8000, 0x080c, 0x868d, 0x20e9, 0x0000, 0x2001, 0x1970, 0x2003,
++ 0x0000, 0x7814, 0x2048, 0xa86f, 0x0200, 0xa873, 0x0000, 0xa814,
++ 0x8003, 0x60c2, 0xa830, 0x20a8, 0xa860, 0x20e0, 0xa85c, 0x9080,
++ 0x001b, 0x2098, 0x2001, 0x1970, 0x0016, 0x200c, 0x080c, 0xbd44,
++ 0x001e, 0xa804, 0x9005, 0x0110, 0x2048, 0x0c60, 0x0051, 0x7814,
++ 0x2048, 0x080c, 0x0f60, 0x080c, 0x8b24, 0x012e, 0x009e, 0x00de,
++ 0x0005, 0x60c0, 0x8004, 0x9084, 0x0003, 0x9005, 0x0130, 0x9082,
++ 0x0004, 0x20a3, 0x0000, 0x8000, 0x1de0, 0x0005, 0x080c, 0x8642,
++ 0x7003, 0x7800, 0x7808, 0x8007, 0x700a, 0x60c3, 0x0008, 0x0804,
++ 0x8b24, 0x00d6, 0x00e6, 0x080c, 0x868d, 0x7814, 0x9084, 0xff00,
++ 0x2073, 0x0200, 0x8e70, 0x8e70, 0x9095, 0x0010, 0x2272, 0x8e70,
++ 0x2073, 0x0034, 0x8e70, 0x2069, 0x1805, 0x20a9, 0x0004, 0x2d76,
++ 0x8d68, 0x8e70, 0x1f04, 0x83ef, 0x2069, 0x1801, 0x20a9, 0x0004,
++ 0x2d76, 0x8d68, 0x8e70, 0x1f04, 0x83f8, 0x2069, 0x1980, 0x9086,
++ 0xdf00, 0x0110, 0x2069, 0x199a, 0x20a9, 0x001a, 0x9e86, 0x0260,
++ 0x1148, 0x00c6, 0x2061, 0x0200, 0x6010, 0x8000, 0x6012, 0x00ce,
++ 0x2071, 0x0240, 0x2d04, 0x8007, 0x2072, 0x8d68, 0x8e70, 0x1f04,
++ 0x8406, 0x60c3, 0x004c, 0x080c, 0x8b24, 0x00ee, 0x00de, 0x0005,
++ 0x080c, 0x8642, 0x7003, 0x6300, 0x7007, 0x0028, 0x7808, 0x700e,
++ 0x60c3, 0x0008, 0x0804, 0x8b24, 0x00d6, 0x0026, 0x0016, 0x080c,
++ 0x868d, 0x7003, 0x0200, 0x7814, 0x700e, 0x00e6, 0x9ef0, 0x0004,
++ 0x2009, 0x0001, 0x2011, 0x000c, 0x2073, 0x0800, 0x8e70, 0x2073,
++ 0x0000, 0x00ee, 0x7206, 0x710a, 0x62c2, 0x080c, 0x8b24, 0x001e,
++ 0x002e, 0x00de, 0x0005, 0x2001, 0x1816, 0x2004, 0x609a, 0x0804,
++ 0x8b24, 0x080c, 0x8642, 0x7003, 0x5200, 0x2069, 0x1852, 0x6804,
++ 0xd084, 0x0130, 0x6828, 0x0016, 0x080c, 0x2430, 0x710e, 0x001e,
++ 0x20a9, 0x0004, 0x20e1, 0x0001, 0x2099, 0x1805, 0x20e9, 0x0000,
++ 0x20a1, 0x0250, 0x4003, 0x20a9, 0x0004, 0x2099, 0x1801, 0x20a1,
++ 0x0254, 0x4003, 0x080c, 0x94d3, 0x1120, 0xb8a0, 0x9082, 0x007f,
++ 0x0248, 0x2001, 0x181d, 0x2004, 0x7032, 0x2001, 0x181e, 0x2004,
++ 0x7036, 0x0030, 0x2001, 0x1816, 0x2004, 0x9084, 0x00ff, 0x7036,
++ 0x60c3, 0x001c, 0x0804, 0x8b24, 0x080c, 0x8642, 0x7003, 0x0500,
++ 0x080c, 0x94d3, 0x1120, 0xb8a0, 0x9082, 0x007f, 0x0248, 0x2001,
++ 0x181d, 0x2004, 0x700a, 0x2001, 0x181e, 0x2004, 0x700e, 0x0030,
++ 0x2001, 0x1816, 0x2004, 0x9084, 0x00ff, 0x700e, 0x20a9, 0x0004,
++ 0x20e1, 0x0001, 0x2099, 0x1805, 0x20e9, 0x0000, 0x20a1, 0x0250,
++ 0x4003, 0x60c3, 0x0010, 0x0804, 0x8b24, 0x080c, 0x8642, 0x9006,
++ 0x080c, 0x5ef7, 0xb8a0, 0x9086, 0x007e, 0x1130, 0x7003, 0x0400,
++ 0x620c, 0xc2b4, 0x620e, 0x0058, 0x7814, 0x0096, 0x904d, 0x0120,
++ 0x9006, 0xa89a, 0xa8a6, 0xa8aa, 0x009e, 0x7003, 0x0300, 0xb8a0,
++ 0x9086, 0x007e, 0x1904, 0x8520, 0x00d6, 0x2069, 0x193b, 0x2001,
++ 0x1836, 0x2004, 0xd0a4, 0x0178, 0x6800, 0x700a, 0x6808, 0x9084,
++ 0x2000, 0x7012, 0x680c, 0x7016, 0x701f, 0x2710, 0x6818, 0x7022,
++ 0x681c, 0x7026, 0x0080, 0x6800, 0x700a, 0x6804, 0x700e, 0x6808,
++ 0x080c, 0x6877, 0x1118, 0x9084, 0x37ff, 0x0010, 0x9084, 0x3fff,
++ 0x7012, 0x680c, 0x7016, 0x00de, 0x20a9, 0x0004, 0x20e1, 0x0001,
++ 0x2099, 0x1805, 0x20e9, 0x0000, 0x20a1, 0x0256, 0x4003, 0x20a9,
++ 0x0004, 0x2099, 0x1801, 0x20a1, 0x025a, 0x4003, 0x00d6, 0x080c,
++ 0x934e, 0x2069, 0x1943, 0x2071, 0x024e, 0x6800, 0xc0dd, 0x7002,
++ 0x080c, 0x4dee, 0xd0e4, 0x0110, 0x680c, 0x700e, 0x00de, 0x04a8,
++ 0x2001, 0x1836, 0x2004, 0xd0a4, 0x0170, 0x0016, 0x2001, 0x193c,
++ 0x200c, 0x60e0, 0x9106, 0x0130, 0x2100, 0x60e3, 0x0000, 0x080c,
++ 0x2471, 0x61e2, 0x001e, 0x20e1, 0x0001, 0x2099, 0x193b, 0x20e9,
++ 0x0000, 0x20a1, 0x024e, 0x20a9, 0x0008, 0x4003, 0x20a9, 0x0004,
++ 0x2099, 0x1805, 0x20a1, 0x0256, 0x4003, 0x20a9, 0x0004, 0x2099,
++ 0x1801, 0x20a1, 0x025a, 0x4003, 0x080c, 0x934e, 0x20a1, 0x024e,
++ 0x20a9, 0x0008, 0x2099, 0x1943, 0x4003, 0x60c3, 0x0074, 0x0804,
++ 0x8b24, 0x080c, 0x8642, 0x7003, 0x2010, 0x7007, 0x0014, 0x700b,
++ 0x0800, 0x700f, 0x2000, 0x9006, 0x00f6, 0x2079, 0x1852, 0x7904,
++ 0x00fe, 0xd1ac, 0x1110, 0x9085, 0x0020, 0xd1a4, 0x0110, 0x9085,
++ 0x0010, 0x9085, 0x0002, 0x00d6, 0x0804, 0x85f2, 0x7026, 0x60c3,
++ 0x0014, 0x0804, 0x8b24, 0x080c, 0x8642, 0x7003, 0x5000, 0x0804,
++ 0x84cf, 0x080c, 0x8642, 0x7003, 0x2110, 0x7007, 0x0014, 0x60c3,
++ 0x0014, 0x0804, 0x8b24, 0x080c, 0x8684, 0x0010, 0x080c, 0x868d,
++ 0x7003, 0x0200, 0x60c3, 0x0004, 0x0804, 0x8b24, 0x080c, 0x868d,
++ 0x7003, 0x0100, 0x700b, 0x0003, 0x700f, 0x2a00, 0x60c3, 0x0008,
++ 0x0804, 0x8b24, 0x080c, 0x868d, 0x7003, 0x0200, 0x0804, 0x84cf,
++ 0x080c, 0x868d, 0x7003, 0x0100, 0x782c, 0x9005, 0x0110, 0x700a,
++ 0x0010, 0x700b, 0x0003, 0x7814, 0x700e, 0x60c3, 0x0008, 0x0804,
++ 0x8b24, 0x00d6, 0x080c, 0x868d, 0x7003, 0x0210, 0x7007, 0x0014,
++ 0x700b, 0x0800, 0xb894, 0x9086, 0x0014, 0x1198, 0xb99c, 0x9184,
++ 0x0030, 0x0190, 0xb998, 0x9184, 0xc000, 0x1140, 0xd1ec, 0x0118,
++ 0x700f, 0x2100, 0x0058, 0x700f, 0x0100, 0x0040, 0x700f, 0x0400,
++ 0x0028, 0x700f, 0x0700, 0x0010, 0x700f, 0x0800, 0x00f6, 0x2079,
++ 0x1852, 0x7904, 0x00fe, 0xd1ac, 0x1110, 0x9085, 0x0020, 0xd1a4,
++ 0x0110, 0x9085, 0x0010, 0x2009, 0x1874, 0x210c, 0xd184, 0x1110,
++ 0x9085, 0x0002, 0x0026, 0x2009, 0x1872, 0x210c, 0xd1e4, 0x0150,
++ 0xc0c5, 0xbabc, 0xd28c, 0x1108, 0xc0cd, 0x9094, 0x0030, 0x9296,
++ 0x0010, 0x0140, 0xd1ec, 0x0130, 0x9094, 0x0030, 0x9296, 0x0010,
++ 0x0108, 0xc0bd, 0x002e, 0x7026, 0x60c3, 0x0014, 0x00de, 0x0804,
++ 0x8b24, 0x080c, 0x868d, 0x7003, 0x0210, 0x7007, 0x0014, 0x700f,
++ 0x0100, 0x60c3, 0x0014, 0x0804, 0x8b24, 0x080c, 0x868d, 0x7003,
++ 0x0200, 0x0804, 0x8455, 0x080c, 0x868d, 0x7003, 0x0100, 0x700b,
++ 0x0003, 0x700f, 0x2a00, 0x60c3, 0x0008, 0x0804, 0x8b24, 0x080c,
++ 0x868d, 0x7003, 0x0100, 0x700b, 0x000b, 0x60c3, 0x0008, 0x0804,
++ 0x8b24, 0x0026, 0x00d6, 0x0036, 0x0046, 0x2019, 0x3200, 0x2021,
++ 0x0800, 0x0040, 0x0026, 0x00d6, 0x0036, 0x0046, 0x2019, 0x2200,
++ 0x2021, 0x0100, 0x080c, 0x9363, 0xb810, 0x9305, 0x7002, 0xb814,
++ 0x7006, 0x2069, 0x1800, 0x6874, 0x700a, 0x6878, 0x700e, 0x9485,
++ 0x0029, 0x7012, 0x004e, 0x003e, 0x00de, 0x080c, 0x8b12, 0x721a,
++ 0x9f95, 0x0000, 0x7222, 0x7027, 0xffff, 0x2071, 0x024c, 0x002e,
++ 0x0005, 0x0026, 0x080c, 0x9363, 0x7003, 0x02ff, 0x7007, 0xfffc,
++ 0x00d6, 0x2069, 0x1800, 0x6874, 0x700a, 0x6878, 0x700e, 0x00de,
++ 0x7013, 0x2029, 0x0c10, 0x7003, 0x0100, 0x7007, 0x0000, 0x700b,
++ 0xfc02, 0x700f, 0x0000, 0x0005, 0x0026, 0x00d6, 0x0036, 0x0046,
++ 0x2019, 0x3300, 0x2021, 0x0800, 0x0040, 0x0026, 0x00d6, 0x0036,
++ 0x0046, 0x2019, 0x2300, 0x2021, 0x0100, 0x080c, 0x9363, 0xb810,
++ 0x9305, 0x7002, 0xb814, 0x7006, 0x2069, 0x1800, 0xb810, 0x9005,
++ 0x1140, 0xb814, 0x9005, 0x1128, 0x700b, 0x00ff, 0x700f, 0xfffe,
++ 0x0020, 0x6874, 0x700a, 0x6878, 0x700e, 0x0000, 0x9485, 0x0098,
++ 0x7012, 0x004e, 0x003e, 0x00de, 0x080c, 0x8b12, 0x721a, 0x7a08,
++ 0x7222, 0x2f10, 0x7226, 0x2071, 0x024c, 0x002e, 0x0005, 0x080c,
++ 0x8b12, 0x721a, 0x7a08, 0x7222, 0x7814, 0x7026, 0x2071, 0x024c,
++ 0x002e, 0x0005, 0x00b6, 0x00c6, 0x00d6, 0x00e6, 0x00f6, 0x2069,
++ 0x0200, 0x2071, 0x0240, 0x6004, 0x908a, 0x0085, 0x0a0c, 0x0d84,
++ 0x908a, 0x0092, 0x1a0c, 0x0d84, 0x6110, 0x2158, 0xb9b0, 0x2c78,
++ 0x2061, 0x0100, 0x619a, 0x9082, 0x0085, 0x0033, 0x00fe, 0x00ee,
++ 0x00de, 0x00ce, 0x00be, 0x0005, 0x86fb, 0x8700, 0x870b, 0x86f9,
++ 0x86f9, 0x86f9, 0x86fb, 0x86f9, 0x86f9, 0x86f9, 0x86f9, 0x86f9,
++ 0x86f9, 0x080c, 0x0d84, 0x00c1, 0x60c3, 0x0000, 0x0804, 0x8b24,
++ 0x0431, 0x7808, 0x700a, 0x7814, 0x700e, 0x7017, 0xffff, 0x60c3,
++ 0x000c, 0x0804, 0x8b24, 0x0479, 0x7003, 0x0003, 0x7007, 0x0300,
++ 0x60c3, 0x0004, 0x0804, 0x8b24, 0x0026, 0x080c, 0x9363, 0xb810,
++ 0x9085, 0x8100, 0x7002, 0xb814, 0x7006, 0x2069, 0x1800, 0x6874,
++ 0x700a, 0x6878, 0x700e, 0x7013, 0x0009, 0x0804, 0x865d, 0x0026,
++ 0x080c, 0x9363, 0xb810, 0x9085, 0x8400, 0x7002, 0xb814, 0x7006,
++ 0x2069, 0x1800, 0x6874, 0x700a, 0x6878, 0x700e, 0x2001, 0x0099,
++ 0x7012, 0x0804, 0x86bf, 0x0026, 0x080c, 0x9363, 0xb810, 0x9085,
++ 0x8500, 0x7002, 0xb814, 0x7006, 0x2069, 0x1800, 0x6874, 0x700a,
++ 0x6878, 0x700e, 0x2001, 0x0099, 0x7012, 0x0804, 0x86bf, 0x00b6,
++ 0x00c6, 0x00d6, 0x00e6, 0x00f6, 0x2c78, 0x2069, 0x0200, 0x2071,
++ 0x0240, 0x7804, 0x908a, 0x0040, 0x0a0c, 0x0d84, 0x908a, 0x0054,
++ 0x1a0c, 0x0d84, 0x7910, 0x2158, 0xb9b0, 0x2061, 0x0100, 0x619a,
++ 0x9082, 0x0040, 0x0033, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x00be,
++ 0x0005, 0x8786, 0x882d, 0x8800, 0x894f, 0x8784, 0x8784, 0x8784,
++ 0x8784, 0x8784, 0x8784, 0x8784, 0x8eb9, 0x8ec5, 0x8ed1, 0x8edd,
++ 0x8784, 0x92b5, 0x8784, 0x8ead, 0x080c, 0x0d84, 0x0096, 0x780b,
++ 0xffff, 0x080c, 0x87dc, 0x7914, 0x2148, 0xa978, 0x7956, 0x7132,
++ 0xa97c, 0x9184, 0x000f, 0x1118, 0x2001, 0x0005, 0x0040, 0xd184,
++ 0x0118, 0x2001, 0x0004, 0x0018, 0x9084, 0x0006, 0x8004, 0x2010,
++ 0x785c, 0x9084, 0x00ff, 0x8007, 0x9205, 0x7042, 0xd1ac, 0x0128,
++ 0x7047, 0x0002, 0x080c, 0x150d, 0x0050, 0xd1b4, 0x0118, 0x7047,
++ 0x0001, 0x0028, 0x7047, 0x0000, 0x9016, 0x2230, 0x0010, 0xaab0,
++ 0xaeac, 0x726a, 0x766e, 0x20a9, 0x0008, 0x20e9, 0x0000, 0xa860,
++ 0x20e0, 0xa85c, 0x9080, 0x0023, 0x2098, 0x20a1, 0x0252, 0x2069,
++ 0x0200, 0x6813, 0x0018, 0x4003, 0x6813, 0x0008, 0x60c3, 0x0020,
++ 0x6017, 0x0009, 0x2001, 0x19d0, 0x2003, 0x07d0, 0x2001, 0x19cf,
++ 0x2003, 0x0009, 0x009e, 0x0005, 0x6813, 0x0008, 0xba8c, 0x8210,
++ 0xb8bc, 0xd084, 0x0128, 0x7a46, 0x7b14, 0x7b4a, 0x722e, 0x732a,
++ 0x9294, 0x00ff, 0xba8e, 0x8217, 0x721a, 0xba10, 0x9295, 0x0600,
++ 0x7202, 0xba14, 0x7206, 0x2069, 0x1800, 0x6a74, 0x720a, 0x6a78,
++ 0x720e, 0x7013, 0x0829, 0x2f10, 0x7222, 0x7027, 0xffff, 0x0005,
++ 0x00d6, 0x0096, 0x0081, 0x7814, 0x2048, 0xa890, 0x7002, 0xa88c,
++ 0x7006, 0xa8b0, 0x700a, 0xa8ac, 0x700e, 0x60c3, 0x000c, 0x009e,
++ 0x00de, 0x0804, 0x8b24, 0x6813, 0x0008, 0xb810, 0x9085, 0x0500,
++ 0x7002, 0xb814, 0x7006, 0x2069, 0x1800, 0x6874, 0x700a, 0x6878,
++ 0x700e, 0x7013, 0x0889, 0x080c, 0x8b12, 0x721a, 0x7a08, 0x7222,
++ 0x2f10, 0x7226, 0x2071, 0x024c, 0x0005, 0x00d6, 0x0096, 0x080c,
++ 0x892d, 0x7814, 0x2048, 0x080c, 0xb0ab, 0x1130, 0x7814, 0x9084,
++ 0x0700, 0x8007, 0x0033, 0x0010, 0x9006, 0x001b, 0x009e, 0x00de,
++ 0x0005, 0x884b, 0x88b4, 0x88c4, 0x88ea, 0x88f6, 0x8907, 0x890f,
++ 0x8849, 0x080c, 0x0d84, 0x0016, 0x0036, 0xa97c, 0x918c, 0x0003,
++ 0x0118, 0x9186, 0x0003, 0x1198, 0xaba8, 0x7824, 0xd0cc, 0x1168,
++ 0x7316, 0xa898, 0x701a, 0xa894, 0x701e, 0x003e, 0x001e, 0x2001,
++ 0x197e, 0x2004, 0x60c2, 0x0804, 0x8b24, 0xc3e5, 0x0c88, 0x9186,
++ 0x0001, 0x190c, 0x0d84, 0xaba8, 0x7824, 0xd0cc, 0x1904, 0x88b1,
++ 0x7316, 0xa898, 0x701a, 0xa894, 0x701e, 0xa8a4, 0x7026, 0xa8ac,
++ 0x702e, 0x2009, 0x0018, 0x9384, 0x0300, 0x0570, 0xd3c4, 0x0110,
++ 0xa8ac, 0x9108, 0xd3cc, 0x0110, 0xa8a4, 0x9108, 0x6810, 0x9085,
++ 0x0010, 0x6812, 0x2011, 0x0258, 0x20e9, 0x0000, 0x22a0, 0x0156,
++ 0x20a9, 0x0008, 0xa860, 0x20e0, 0xa85c, 0x9080, 0x002c, 0x2098,
++ 0x4003, 0x6810, 0x8000, 0x6812, 0x2011, 0x0240, 0x22a0, 0x20a9,
++ 0x0005, 0x4003, 0x6810, 0xc084, 0x6812, 0x015e, 0x9184, 0x0003,
++ 0x0118, 0x2019, 0x0245, 0x201a, 0x61c2, 0x003e, 0x001e, 0x0804,
++ 0x8b24, 0xc3e5, 0x0804, 0x8870, 0x2011, 0x0008, 0x2001, 0x180e,
++ 0x2004, 0xd0a4, 0x0110, 0x2011, 0x0028, 0x7824, 0xd0cc, 0x1110,
++ 0x7216, 0x0470, 0x0ce8, 0xc2e5, 0x2011, 0x0302, 0x0016, 0x782c,
++ 0x701a, 0x7930, 0x711e, 0x9105, 0x0108, 0xc2dd, 0x001e, 0x7824,
++ 0xd0cc, 0x0108, 0xc2e5, 0x7216, 0x7027, 0x0012, 0x702f, 0x0008,
++ 0x7043, 0x7000, 0x7047, 0x0500, 0x704f, 0x000a, 0x2069, 0x0200,
++ 0x6813, 0x0009, 0x2071, 0x0240, 0x700b, 0x2500, 0x60c3, 0x0032,
++ 0x0804, 0x8b24, 0x2011, 0x0028, 0x7824, 0xd0cc, 0x1128, 0x7216,
++ 0x60c3, 0x0018, 0x0804, 0x8b24, 0x0cd0, 0xc2e5, 0x2011, 0x0100,
++ 0x7824, 0xd0cc, 0x0108, 0xc2e5, 0x7216, 0x702f, 0x0008, 0x7858,
++ 0x9084, 0x00ff, 0x7036, 0x60c3, 0x0020, 0x0804, 0x8b24, 0x2011,
++ 0x0008, 0x7824, 0xd0cc, 0x0108, 0xc2e5, 0x7216, 0x0c08, 0x0036,
++ 0x7b14, 0x9384, 0xff00, 0x7816, 0x9384, 0x00ff, 0x8001, 0x1138,
++ 0x7824, 0xd0cc, 0x0108, 0xc2e5, 0x7216, 0x003e, 0x0888, 0x0046,
++ 0x2021, 0x0800, 0x0006, 0x7824, 0xd0cc, 0x000e, 0x0108, 0xc4e5,
++ 0x7416, 0x004e, 0x701e, 0x003e, 0x0818, 0x00d6, 0x6813, 0x0008,
++ 0xb810, 0x9085, 0x0700, 0x7002, 0xb814, 0x7006, 0x2069, 0x1800,
++ 0x6874, 0x700a, 0x6878, 0x700e, 0x7824, 0xd0cc, 0x1168, 0x7013,
++ 0x0898, 0x080c, 0x8b12, 0x721a, 0x7a08, 0x7222, 0x2f10, 0x7226,
++ 0x2071, 0x024c, 0x00de, 0x0005, 0x7013, 0x0889, 0x0c90, 0x0016,
++ 0x7814, 0x9084, 0x0700, 0x8007, 0x0013, 0x001e, 0x0005, 0x895f,
++ 0x895f, 0x8961, 0x895f, 0x895f, 0x895f, 0x897b, 0x895f, 0x080c,
++ 0x0d84, 0x7914, 0x918c, 0x08ff, 0x918d, 0xf600, 0x7916, 0x2009,
++ 0x0003, 0x00b9, 0x2069, 0x1852, 0x6804, 0xd0bc, 0x0130, 0x682c,
++ 0x9084, 0x00ff, 0x8007, 0x7032, 0x0010, 0x7033, 0x3f00, 0x60c3,
++ 0x0001, 0x0804, 0x8b24, 0x2009, 0x0003, 0x0019, 0x7033, 0x7f00,
++ 0x0cb0, 0x0016, 0x080c, 0x9363, 0x001e, 0xb810, 0x9085, 0x0100,
++ 0x7002, 0xb814, 0x7006, 0x2069, 0x1800, 0x6a74, 0x720a, 0x6a78,
++ 0x720e, 0x7013, 0x0888, 0x918d, 0x0008, 0x7116, 0x080c, 0x8b12,
++ 0x721a, 0x7a08, 0x7222, 0x2f10, 0x7226, 0x0005, 0x00b6, 0x0096,
++ 0x00e6, 0x00d6, 0x00c6, 0x0056, 0x0046, 0x0036, 0x2061, 0x0100,
++ 0x2071, 0x1800, 0x7158, 0x7810, 0x2058, 0xb8a0, 0x2028, 0xb910,
++ 0xba14, 0x7374, 0x7478, 0x7820, 0x90be, 0x0006, 0x0904, 0x8a81,
++ 0x90be, 0x000a, 0x1904, 0x8a3d, 0x609f, 0x0000, 0x7814, 0x2048,
++ 0xa87c, 0xd0fc, 0x05c8, 0xaf90, 0x9784, 0xff00, 0x9105, 0x6062,
++ 0x873f, 0x9784, 0xff00, 0x0006, 0x7814, 0x2048, 0xa878, 0x9005,
++ 0x000e, 0x1160, 0xaf94, 0x87ff, 0x0510, 0x2039, 0x0098, 0x9705,
++ 0x6072, 0x7808, 0x6082, 0x2f00, 0x6086, 0x0038, 0x9185, 0x2200,
++ 0x6062, 0x6073, 0x0129, 0x6077, 0x0000, 0x609f, 0x0000, 0x2001,
++ 0x1836, 0x2004, 0xd0ac, 0x11a8, 0xd09c, 0x0130, 0x7814, 0x2048,
++ 0xa874, 0x9082, 0x0080, 0x1268, 0xb814, 0x609e, 0x0050, 0x2039,
++ 0x0029, 0x9705, 0x6072, 0x0c48, 0x9185, 0x0200, 0x6062, 0x6073,
++ 0x2029, 0xa87c, 0xd0fc, 0x0118, 0xaf94, 0x87ff, 0x1120, 0x2f00,
++ 0x6082, 0x7808, 0x6086, 0x6266, 0x636a, 0x646e, 0x6077, 0x0000,
++ 0xb88c, 0x8000, 0x9084, 0x00ff, 0xb88e, 0x8007, 0x607a, 0x607f,
++ 0x0000, 0xa838, 0x608a, 0xa834, 0x608e, 0xa848, 0x60c6, 0xa844,
++ 0x60ca, 0xb86c, 0x60ce, 0x60af, 0x95d5, 0x60d7, 0x0000, 0x080c,
++ 0x9348, 0x2009, 0x07d0, 0x60c4, 0x9084, 0xfff0, 0x9005, 0x0110,
++ 0x2009, 0x1b58, 0x080c, 0x7898, 0x003e, 0x004e, 0x005e, 0x00ce,
++ 0x00de, 0x00ee, 0x009e, 0x00be, 0x0005, 0x7804, 0x9086, 0x0040,
++ 0x0904, 0x8abd, 0x9185, 0x0100, 0x6062, 0x6266, 0x636a, 0x646e,
++ 0x6073, 0x0809, 0x6077, 0x0008, 0x60af, 0x95d5, 0x60d7, 0x0000,
++ 0xb88c, 0x8000, 0x9084, 0x00ff, 0xb88e, 0x8007, 0x607a, 0x607f,
++ 0x0000, 0x2f00, 0x6082, 0x7808, 0x6086, 0x7814, 0x2048, 0xa838,
++ 0x608a, 0xa834, 0x608e, 0xa848, 0x60c6, 0xa844, 0x60ca, 0xb86c,
++ 0x60ce, 0xbab0, 0x629e, 0x080c, 0x9348, 0x2009, 0x07d0, 0x60c4,
++ 0x9084, 0xfff0, 0x9005, 0x0110, 0x2009, 0x1b58, 0x080c, 0x7898,
++ 0x003e, 0x004e, 0x005e, 0x00ce, 0x00de, 0x00ee, 0x009e, 0x00be,
++ 0x0005, 0x7814, 0x2048, 0xa87c, 0x9084, 0x0003, 0x9086, 0x0002,
++ 0x0904, 0x8ad9, 0x9185, 0x0100, 0x6062, 0x6266, 0x636a, 0x646e,
++ 0x6073, 0x0880, 0x6077, 0x0008, 0xb88c, 0x8000, 0x9084, 0x00ff,
++ 0xb88e, 0x8007, 0x607a, 0x7838, 0x607e, 0x2f00, 0x6086, 0x7808,
++ 0x6082, 0xa890, 0x608a, 0xa88c, 0x608e, 0xa8b0, 0x60c6, 0xa8ac,
++ 0x60ca, 0xa8ac, 0x7930, 0x9108, 0x7932, 0xa8b0, 0x792c, 0x9109,
++ 0x792e, 0xb86c, 0x60ce, 0x60af, 0x95d5, 0x60d7, 0x0000, 0xbab0,
++ 0x629e, 0x080c, 0x9325, 0x0804, 0x8a6d, 0xb8bc, 0xd084, 0x0148,
++ 0xb88c, 0x7814, 0x2048, 0xb88c, 0x7846, 0xa836, 0x2900, 0xa83a,
++ 0xb04a, 0x9185, 0x0600, 0x6062, 0x6266, 0x636a, 0x646e, 0x6073,
++ 0x0829, 0x6077, 0x0000, 0x60af, 0x9575, 0x60d7, 0x0000, 0x0804,
++ 0x8a50, 0x9185, 0x0700, 0x6062, 0x6266, 0x636a, 0x646e, 0x7824,
++ 0xd0cc, 0x7826, 0x0118, 0x6073, 0x0889, 0x0010, 0x6073, 0x0898,
++ 0x6077, 0x0000, 0xb88c, 0x8000, 0x9084, 0x00ff, 0xb88e, 0x8007,
++ 0x607a, 0x607f, 0x0000, 0x2f00, 0x6086, 0x7808, 0x6082, 0xa838,
++ 0x608a, 0xa834, 0x608e, 0xa848, 0x60c6, 0xa844, 0x60ca, 0xb86c,
++ 0x60ce, 0x60af, 0x95d5, 0x60d7, 0x0000, 0xbab0, 0x629e, 0x7824,
++ 0xd0cc, 0x0120, 0x080c, 0x9348, 0x0804, 0x8a6d, 0x080c, 0x9325,
++ 0x0804, 0x8a6d, 0x7a10, 0x00b6, 0x2258, 0xba8c, 0x8210, 0x9294,
++ 0x00ff, 0xba8e, 0x00be, 0x8217, 0x0005, 0x00d6, 0x2069, 0x19b4,
++ 0x6843, 0x0001, 0x00de, 0x0005, 0x60a3, 0x0056, 0x60a7, 0x9575,
++ 0x00f1, 0x080c, 0x788a, 0x0005, 0x0016, 0x2001, 0x180c, 0x200c,
++ 0x9184, 0x0600, 0x9086, 0x0600, 0x0128, 0x0089, 0x080c, 0x788a,
++ 0x001e, 0x0005, 0xc1e5, 0x2001, 0x180c, 0x2102, 0x2001, 0x19b5,
++ 0x2003, 0x0000, 0x2001, 0x19bd, 0x2003, 0x0000, 0x0c88, 0x0006,
++ 0x6014, 0x9084, 0x1804, 0x9085, 0x0009, 0x6016, 0x000e, 0x0005,
++ 0x0016, 0x00c6, 0x0006, 0x2061, 0x0100, 0x61a4, 0x60a7, 0x95f5,
++ 0x6014, 0x9084, 0x1804, 0x9085, 0x0008, 0x6016, 0x000e, 0xa001,
++ 0xa001, 0xa001, 0x61a6, 0x00ce, 0x001e, 0x0005, 0x00c6, 0x00d6,
++ 0x0016, 0x0026, 0x2061, 0x0100, 0x2069, 0x0140, 0x080c, 0x6877,
++ 0x1198, 0x2001, 0x19d0, 0x2004, 0x9005, 0x15d0, 0x0066, 0x2031,
++ 0x0001, 0x080c, 0x691e, 0x006e, 0x1118, 0x080c, 0x788a, 0x0480,
++ 0x00c6, 0x2061, 0x19b4, 0x00f0, 0x6904, 0x9194, 0x4000, 0x0568,
++ 0x0839, 0x2001, 0x1000, 0x080c, 0x28a5, 0x9006, 0x080c, 0x28a5,
++ 0x00c6, 0x2061, 0x19b4, 0x6128, 0x9192, 0x00c8, 0x1258, 0x8108,
++ 0x612a, 0x6124, 0x00ce, 0x81ff, 0x0198, 0x080c, 0x788a, 0x080c,
++ 0x8b47, 0x0070, 0x6124, 0x91e5, 0x0000, 0x0140, 0x080c, 0xcd1f,
++ 0x080c, 0x7893, 0x2009, 0x0014, 0x080c, 0x95ce, 0x00ce, 0x0000,
++ 0x002e, 0x001e, 0x00de, 0x00ce, 0x0005, 0x2001, 0x19d0, 0x2004,
++ 0x9005, 0x1db0, 0x00c6, 0x2061, 0x19b4, 0x6128, 0x9192, 0x0003,
++ 0x1e08, 0x8108, 0x612a, 0x00ce, 0x080c, 0x788a, 0x080c, 0x55a0,
++ 0x0c38, 0x0096, 0x00c6, 0x00d6, 0x00e6, 0x0016, 0x0026, 0x080c,
++ 0x78a0, 0x2071, 0x19b4, 0x713c, 0x81ff, 0x0904, 0x8c3c, 0x2061,
++ 0x0100, 0x2069, 0x0140, 0x080c, 0x6877, 0x11b0, 0x0036, 0x2019,
++ 0x0002, 0x080c, 0x8dfe, 0x003e, 0x713c, 0x2160, 0x080c, 0xcd1f,
++ 0x2009, 0x004a, 0x080c, 0x95ce, 0x0066, 0x2031, 0x0001, 0x080c,
++ 0x691e, 0x006e, 0x0804, 0x8c3c, 0x6904, 0xd1f4, 0x0904, 0x8c43,
++ 0x2001, 0x1000, 0x080c, 0x28a5, 0x9006, 0x080c, 0x28a5, 0x00c6,
++ 0x703c, 0x9065, 0x090c, 0x0d84, 0x6020, 0x00ce, 0x9086, 0x0006,
++ 0x1528, 0x61c8, 0x60c4, 0x9105, 0x1508, 0x2009, 0x180c, 0x2104,
++ 0xd0d4, 0x01e0, 0x6214, 0x9294, 0x1800, 0x1128, 0x6224, 0x9294,
++ 0x0002, 0x1510, 0x0030, 0xc0d4, 0x200a, 0xd0cc, 0x0110, 0x080c,
++ 0x2809, 0x6014, 0x9084, 0xe7fd, 0x9085, 0x0010, 0x6016, 0x703c,
++ 0x2060, 0x2009, 0x0049, 0x080c, 0x95ce, 0x0070, 0x0036, 0x2019,
++ 0x0001, 0x080c, 0x8dfe, 0x003e, 0x713c, 0x2160, 0x080c, 0xcd1f,
++ 0x2009, 0x004a, 0x080c, 0x95ce, 0x002e, 0x001e, 0x00ee, 0x00de,
++ 0x00ce, 0x009e, 0x0005, 0xd1ec, 0x1904, 0x8bf8, 0x0804, 0x8bff,
++ 0x0026, 0x00e6, 0x2071, 0x19b4, 0x7048, 0xd084, 0x01c0, 0x713c,
++ 0x81ff, 0x01a8, 0x2071, 0x0100, 0x9188, 0x0008, 0x2114, 0x928e,
++ 0x0006, 0x1138, 0x7014, 0x9084, 0x1984, 0x9085, 0x0012, 0x7016,
++ 0x0030, 0x7014, 0x9084, 0x1984, 0x9085, 0x0016, 0x7016, 0x00ee,
++ 0x002e, 0x0005, 0x00b6, 0x00e6, 0x00d6, 0x00c6, 0x0066, 0x0056,
++ 0x0046, 0x0006, 0x0126, 0x2091, 0x8000, 0x6010, 0x2058, 0xbca0,
++ 0x2071, 0x19b4, 0x7018, 0x2058, 0x8bff, 0x0190, 0xb8a0, 0x9406,
++ 0x0118, 0xb854, 0x2058, 0x0cc0, 0x6014, 0x0096, 0x2048, 0xac6c,
++ 0xad70, 0xae78, 0x009e, 0x080c, 0x5d3f, 0x0110, 0x9085, 0x0001,
++ 0x012e, 0x000e, 0x004e, 0x005e, 0x006e, 0x00ce, 0x00de, 0x00ee,
++ 0x00be, 0x0005, 0x080c, 0x8642, 0x7003, 0x1200, 0x7820, 0x9086,
++ 0x0004, 0x1110, 0x6098, 0x0018, 0x2001, 0x1816, 0x2004, 0x700e,
++ 0x7838, 0x7012, 0x783c, 0x7016, 0x60c3, 0x002c, 0x0804, 0x8b24,
++ 0x080c, 0x8642, 0x7003, 0x0f00, 0x7808, 0x700e, 0x60c3, 0x0008,
++ 0x0804, 0x8b24, 0x0156, 0x080c, 0x868d, 0x7003, 0x0200, 0x2011,
++ 0x1848, 0x63f0, 0x2312, 0x20a9, 0x0006, 0x2011, 0x1840, 0x2019,
++ 0x1841, 0x9ef0, 0x0002, 0x2376, 0x8e70, 0x2276, 0x8e70, 0x9398,
++ 0x0002, 0x9290, 0x0002, 0x1f04, 0x8ccb, 0x60c3, 0x001c, 0x015e,
++ 0x0804, 0x8b24, 0x0016, 0x0026, 0x080c, 0x8669, 0x080c, 0x867b,
++ 0x9e80, 0x0004, 0x20e9, 0x0000, 0x20a0, 0x7814, 0x0096, 0x2048,
++ 0xa800, 0x2048, 0xa860, 0x20e0, 0xa85c, 0x9080, 0x0021, 0x2098,
++ 0x009e, 0x7808, 0x9088, 0x0002, 0x21a8, 0x9192, 0x0010, 0x1250,
++ 0x4003, 0x9080, 0x0004, 0x8003, 0x60c2, 0x080c, 0x8b24, 0x002e,
++ 0x001e, 0x0005, 0x20a9, 0x0010, 0x4003, 0x080c, 0x934e, 0x20a1,
++ 0x0240, 0x22a8, 0x4003, 0x0c68, 0x080c, 0x8642, 0x7003, 0x6200,
++ 0x7808, 0x700e, 0x60c3, 0x0008, 0x0804, 0x8b24, 0x0016, 0x0026,
++ 0x080c, 0x8642, 0x20e9, 0x0000, 0x20a1, 0x024c, 0x7814, 0x0096,
++ 0x2048, 0xa800, 0x2048, 0xa860, 0x20e0, 0xa85c, 0x9080, 0x0021,
++ 0x2098, 0x009e, 0x7808, 0x9088, 0x0002, 0x21a8, 0x4003, 0x8003,
++ 0x60c2, 0x080c, 0x8b24, 0x002e, 0x001e, 0x0005, 0x00e6, 0x00c6,
++ 0x0006, 0x0126, 0x2091, 0x8000, 0x2071, 0x19b4, 0x700c, 0x2060,
++ 0x8cff, 0x0178, 0x080c, 0xb295, 0x1110, 0x080c, 0x9e99, 0x600c,
++ 0x0006, 0x080c, 0xb4de, 0x080c, 0x9554, 0x080c, 0x8eec, 0x00ce,
++ 0x0c78, 0x2c00, 0x700e, 0x700a, 0x012e, 0x000e, 0x00ce, 0x00ee,
++ 0x0005, 0x0126, 0x0156, 0x00f6, 0x00e6, 0x00d6, 0x00c6, 0x0026,
++ 0x0016, 0x0006, 0x2091, 0x8000, 0x2001, 0x180c, 0x200c, 0x918c,
++ 0xe7ff, 0x2102, 0x2069, 0x0100, 0x2079, 0x0140, 0x2071, 0x19b4,
++ 0x7024, 0x2060, 0x8cff, 0x0904, 0x8db6, 0x080c, 0x8b50, 0x6ac0,
++ 0x68c3, 0x0000, 0x080c, 0x7893, 0x00c6, 0x2061, 0x0100, 0x080c,
++ 0x9367, 0x00ce, 0x2009, 0x0013, 0x080c, 0x95ce, 0x20a9, 0x01f4,
++ 0x6824, 0xd094, 0x0170, 0x6827, 0x0004, 0x7804, 0x9084, 0x4000,
++ 0x01d0, 0x2001, 0x1000, 0x080c, 0x28a5, 0x9006, 0x080c, 0x28a5,
++ 0x0090, 0xd084, 0x0118, 0x6827, 0x0001, 0x0010, 0x1f04, 0x8d88,
++ 0x7804, 0x9084, 0x1000, 0x0138, 0x2001, 0x0100, 0x080c, 0x28a5,
++ 0x9006, 0x080c, 0x28a5, 0x6824, 0x000e, 0x001e, 0x002e, 0x00ce,
++ 0x00de, 0x00ee, 0x00fe, 0x015e, 0x012e, 0x0005, 0x2001, 0x1800,
++ 0x2004, 0x9096, 0x0001, 0x05c0, 0x9096, 0x0004, 0x05a8, 0x080c,
++ 0x7893, 0x6814, 0x9084, 0x0001, 0x0110, 0x68a7, 0x95f5, 0x6817,
++ 0x0008, 0x68c3, 0x0000, 0x2011, 0x554d, 0x080c, 0x781a, 0x20a9,
++ 0x01f4, 0x6824, 0xd094, 0x0170, 0x6827, 0x0004, 0x7804, 0x9084,
++ 0x4000, 0x01d0, 0x2001, 0x1000, 0x080c, 0x28a5, 0x9006, 0x080c,
++ 0x28a5, 0x0090, 0xd084, 0x0118, 0x6827, 0x0001, 0x0010, 0x1f04,
++ 0x8dd1, 0x7804, 0x9084, 0x1000, 0x0138, 0x2001, 0x0100, 0x080c,
++ 0x28a5, 0x9006, 0x080c, 0x28a5, 0x000e, 0x001e, 0x002e, 0x00ce,
++ 0x00de, 0x00ee, 0x00fe, 0x015e, 0x012e, 0x0005, 0x0126, 0x0156,
++ 0x00f6, 0x00e6, 0x00d6, 0x00c6, 0x0026, 0x0016, 0x0006, 0x2091,
++ 0x8000, 0x2001, 0x180c, 0x200c, 0x918c, 0xdbff, 0x2102, 0x2069,
++ 0x0100, 0x2079, 0x0140, 0x2071, 0x19b4, 0x703c, 0x2060, 0x8cff,
++ 0x0904, 0x8e8f, 0x9386, 0x0002, 0x1128, 0x6814, 0x9084, 0x0002,
++ 0x0904, 0x8e8f, 0x68af, 0x95f5, 0x6817, 0x0010, 0x2009, 0x00fa,
++ 0x8109, 0x1df0, 0x69c6, 0x68cb, 0x0008, 0x080c, 0x78a0, 0x080c,
++ 0x1c4f, 0x0046, 0x2009, 0x017f, 0x200b, 0x00a5, 0x2021, 0x0169,
++ 0x2404, 0x9084, 0x000f, 0x9086, 0x0004, 0x11f8, 0x68af, 0x95f5,
++ 0x68c6, 0x68cb, 0x0008, 0x00e6, 0x00f6, 0x2079, 0x0090, 0x2071,
++ 0x1a33, 0x6814, 0x9084, 0x1984, 0x9085, 0x0012, 0x6816, 0x782b,
++ 0x0008, 0x7003, 0x0000, 0x00fe, 0x00ee, 0x9386, 0x0002, 0x1128,
++ 0x7884, 0x9005, 0x1110, 0x7887, 0x0001, 0x2001, 0x194e, 0x2004,
++ 0x200a, 0x004e, 0x939d, 0x0000, 0x1120, 0x2009, 0x0049, 0x080c,
++ 0x95ce, 0x20a9, 0x03e8, 0x6824, 0xd094, 0x0170, 0x6827, 0x0004,
++ 0x7804, 0x9084, 0x4000, 0x01d0, 0x2001, 0x1000, 0x080c, 0x28a5,
++ 0x9006, 0x080c, 0x28a5, 0x0090, 0xd08c, 0x0118, 0x6827, 0x0002,
++ 0x0010, 0x1f04, 0x8e6b, 0x7804, 0x9084, 0x1000, 0x0138, 0x2001,
++ 0x0100, 0x080c, 0x28a5, 0x9006, 0x080c, 0x28a5, 0x6824, 0x000e,
++ 0x001e, 0x002e, 0x00ce, 0x00de, 0x00ee, 0x00fe, 0x015e, 0x012e,
++ 0x0005, 0x00d6, 0x0126, 0x2091, 0x8000, 0x2069, 0x19b4, 0x6a06,
++ 0x012e, 0x00de, 0x0005, 0x00d6, 0x0126, 0x2091, 0x8000, 0x2069,
++ 0x19b4, 0x6a32, 0x012e, 0x00de, 0x0005, 0x080c, 0x87dc, 0x7814,
++ 0x080c, 0x4df2, 0x0108, 0x782c, 0x7032, 0x7042, 0x7047, 0x1000,
++ 0x0478, 0x080c, 0x87dc, 0x7814, 0x080c, 0x4df2, 0x0108, 0x782c,
++ 0x7032, 0x7042, 0x7047, 0x4000, 0x0418, 0x080c, 0x87dc, 0x7814,
++ 0x080c, 0x4df2, 0x0108, 0x782c, 0x7032, 0x7042, 0x7047, 0x2000,
++ 0x00b8, 0x080c, 0x87dc, 0x7814, 0x080c, 0x4df2, 0x0108, 0x782c,
++ 0x7032, 0x7042, 0x7047, 0x0400, 0x0058, 0x080c, 0x87dc, 0x7814,
++ 0x080c, 0x4df2, 0x0108, 0x782c, 0x7032, 0x7042, 0x7047, 0x0200,
++ 0x60c3, 0x0020, 0x0804, 0x8b24, 0x00e6, 0x2071, 0x19b4, 0x7020,
++ 0x9005, 0x0110, 0x8001, 0x7022, 0x00ee, 0x0005, 0x00f6, 0x00e6,
++ 0x00d6, 0x00c6, 0x0076, 0x0066, 0x0006, 0x0126, 0x2091, 0x8000,
++ 0x2071, 0x19b4, 0x7614, 0x2660, 0x2678, 0x2039, 0x0001, 0x87ff,
++ 0x0904, 0x8f8a, 0x8cff, 0x0904, 0x8f8a, 0x6020, 0x9086, 0x0006,
++ 0x1904, 0x8f85, 0x88ff, 0x0138, 0x2800, 0x9c06, 0x1904, 0x8f85,
++ 0x2039, 0x0000, 0x0050, 0x6010, 0x9b06, 0x1904, 0x8f85, 0x85ff,
++ 0x0120, 0x6054, 0x9106, 0x1904, 0x8f85, 0x7024, 0x9c06, 0x1578,
++ 0x2069, 0x0100, 0x68c0, 0x9005, 0x0530, 0x080c, 0x7893, 0x6820,
++ 0xd0b4, 0x0110, 0x68a7, 0x95f5, 0x6817, 0x0008, 0x68c3, 0x0000,
++ 0x080c, 0x900f, 0x7027, 0x0000, 0x0036, 0x2069, 0x0140, 0x6b04,
++ 0x9384, 0x1000, 0x0138, 0x2001, 0x0100, 0x080c, 0x28a5, 0x9006,
++ 0x080c, 0x28a5, 0x2069, 0x0100, 0x6824, 0xd084, 0x0110, 0x6827,
++ 0x0001, 0x003e, 0x0020, 0x6003, 0x0009, 0x630a, 0x0470, 0x7014,
++ 0x9c36, 0x1110, 0x660c, 0x7616, 0x7010, 0x9c36, 0x1140, 0x2c00,
++ 0x9f36, 0x0118, 0x2f00, 0x7012, 0x0010, 0x7013, 0x0000, 0x660c,
++ 0x0066, 0x2c00, 0x9f06, 0x0110, 0x7e0e, 0x0008, 0x2678, 0x89ff,
++ 0x1168, 0x600f, 0x0000, 0x6014, 0x0096, 0x2048, 0x080c, 0xb0ab,
++ 0x0110, 0x080c, 0xc970, 0x009e, 0x080c, 0x9584, 0x080c, 0x8eec,
++ 0x88ff, 0x1190, 0x00ce, 0x0804, 0x8f07, 0x2c78, 0x600c, 0x2060,
++ 0x0804, 0x8f07, 0x9006, 0x012e, 0x000e, 0x006e, 0x007e, 0x00ce,
++ 0x00de, 0x00ee, 0x00fe, 0x0005, 0x601b, 0x0000, 0x00ce, 0x98c5,
++ 0x0001, 0x0c88, 0x00f6, 0x00e6, 0x00d6, 0x0096, 0x00c6, 0x0066,
++ 0x0026, 0x0006, 0x0126, 0x2091, 0x8000, 0x2071, 0x19b4, 0x7638,
++ 0x2660, 0x2678, 0x8cff, 0x0904, 0x8ffe, 0x6020, 0x9086, 0x0006,
++ 0x1904, 0x8ff9, 0x87ff, 0x0128, 0x2700, 0x9c06, 0x1904, 0x8ff9,
++ 0x0040, 0x6010, 0x9b06, 0x15e8, 0x85ff, 0x0118, 0x6054, 0x9106,
++ 0x15c0, 0x703c, 0x9c06, 0x1168, 0x0036, 0x2019, 0x0001, 0x080c,
++ 0x8dfe, 0x7033, 0x0000, 0x9006, 0x703e, 0x7042, 0x7046, 0x704a,
++ 0x003e, 0x7038, 0x9c36, 0x1110, 0x660c, 0x763a, 0x7034, 0x9c36,
++ 0x1140, 0x2c00, 0x9f36, 0x0118, 0x2f00, 0x7036, 0x0010, 0x7037,
++ 0x0000, 0x660c, 0x0066, 0x2c00, 0x9f06, 0x0110, 0x7e0e, 0x0008,
++ 0x2678, 0x600f, 0x0000, 0x6014, 0x2048, 0x080c, 0xb0ab, 0x0110,
++ 0x080c, 0xc970, 0x080c, 0x9584, 0x87ff, 0x1198, 0x00ce, 0x0804,
++ 0x8faa, 0x2c78, 0x600c, 0x2060, 0x0804, 0x8faa, 0x9006, 0x012e,
++ 0x000e, 0x002e, 0x006e, 0x00ce, 0x009e, 0x00de, 0x00ee, 0x00fe,
++ 0x0005, 0x601b, 0x0000, 0x00ce, 0x97bd, 0x0001, 0x0c80, 0x00e6,
++ 0x2071, 0x19b4, 0x2001, 0x1800, 0x2004, 0x9086, 0x0002, 0x1118,
++ 0x7007, 0x0005, 0x0010, 0x7007, 0x0000, 0x00ee, 0x0005, 0x00f6,
++ 0x00e6, 0x00c6, 0x0066, 0x0026, 0x0006, 0x0126, 0x2091, 0x8000,
++ 0x2071, 0x19b4, 0x2c10, 0x7638, 0x2660, 0x2678, 0x8cff, 0x0518,
++ 0x2200, 0x9c06, 0x11e0, 0x7038, 0x9c36, 0x1110, 0x660c, 0x763a,
++ 0x7034, 0x9c36, 0x1140, 0x2c00, 0x9f36, 0x0118, 0x2f00, 0x7036,
++ 0x0010, 0x7037, 0x0000, 0x660c, 0x2c00, 0x9f06, 0x0110, 0x7e0e,
++ 0x0008, 0x2678, 0x600f, 0x0000, 0x9085, 0x0001, 0x0020, 0x2c78,
++ 0x600c, 0x2060, 0x08d8, 0x012e, 0x000e, 0x002e, 0x006e, 0x00ce,
++ 0x00ee, 0x00fe, 0x0005, 0x0096, 0x00f6, 0x00e6, 0x00d6, 0x00c6,
++ 0x0066, 0x0026, 0x0006, 0x0126, 0x2091, 0x8000, 0x2071, 0x19b4,
++ 0x760c, 0x2660, 0x2678, 0x8cff, 0x0904, 0x90eb, 0x6010, 0x00b6,
++ 0x2058, 0xb8a0, 0x00be, 0x9206, 0x1904, 0x90e6, 0x7024, 0x9c06,
++ 0x1520, 0x2069, 0x0100, 0x68c0, 0x9005, 0x0904, 0x90c2, 0x080c,
++ 0x8b50, 0x68c3, 0x0000, 0x080c, 0x900f, 0x7027, 0x0000, 0x0036,
++ 0x2069, 0x0140, 0x6b04, 0x9384, 0x1000, 0x0138, 0x2001, 0x0100,
++ 0x080c, 0x28a5, 0x9006, 0x080c, 0x28a5, 0x2069, 0x0100, 0x6824,
++ 0xd084, 0x0110, 0x6827, 0x0001, 0x003e, 0x700c, 0x9c36, 0x1110,
++ 0x660c, 0x760e, 0x7008, 0x9c36, 0x1140, 0x2c00, 0x9f36, 0x0118,
++ 0x2f00, 0x700a, 0x0010, 0x700b, 0x0000, 0x660c, 0x0066, 0x2c00,
++ 0x9f06, 0x0110, 0x7e0e, 0x0008, 0x2678, 0x600f, 0x0000, 0x080c,
++ 0xb284, 0x1158, 0x080c, 0x2d3f, 0x080c, 0xb295, 0x11f0, 0x080c,
++ 0x9e99, 0x00d8, 0x080c, 0x900f, 0x08c0, 0x080c, 0xb295, 0x1118,
++ 0x080c, 0x9e99, 0x0090, 0x6014, 0x2048, 0x080c, 0xb0ab, 0x0168,
++ 0x6020, 0x9086, 0x0003, 0x1508, 0xa867, 0x0103, 0xab7a, 0xa877,
++ 0x0000, 0x080c, 0x61a9, 0x080c, 0xb278, 0x080c, 0xb4de, 0x080c,
++ 0x9584, 0x080c, 0x8eec, 0x00ce, 0x0804, 0x906b, 0x2c78, 0x600c,
++ 0x2060, 0x0804, 0x906b, 0x012e, 0x000e, 0x002e, 0x006e, 0x00ce,
++ 0x00de, 0x00ee, 0x00fe, 0x009e, 0x0005, 0x6020, 0x9086, 0x0006,
++ 0x1d20, 0x080c, 0xc970, 0x0c08, 0x00d6, 0x080c, 0x868d, 0x7003,
++ 0x0200, 0x7007, 0x0014, 0x60c3, 0x0014, 0x20e1, 0x0001, 0x2099,
++ 0x1956, 0x20e9, 0x0000, 0x20a1, 0x0250, 0x20a9, 0x0004, 0x4003,
++ 0x7023, 0x0004, 0x7027, 0x7878, 0x080c, 0x8b24, 0x00de, 0x0005,
++ 0x080c, 0x868d, 0x7003, 0x0214, 0x7007, 0x0018, 0x700b, 0x0800,
++ 0x7814, 0x9084, 0xff00, 0x700e, 0x7814, 0x9084, 0x00ff, 0x7022,
++ 0x782c, 0x7026, 0x60c3, 0x0018, 0x0804, 0x8b24, 0x00b6, 0x00d6,
++ 0x0016, 0x00d6, 0x2f68, 0x2009, 0x0035, 0x080c, 0xb6d9, 0x00de,
++ 0x1904, 0x9192, 0x080c, 0x8642, 0x7003, 0x1300, 0x782c, 0x080c,
++ 0x9294, 0x2068, 0x6820, 0x9086, 0x0003, 0x0558, 0x7810, 0x2058,
++ 0xbaa0, 0x080c, 0x94d3, 0x11d0, 0x9286, 0x007e, 0x1128, 0x700b,
++ 0x00ff, 0x700f, 0xfffe, 0x0490, 0x9286, 0x007f, 0x1128, 0x700b,
++ 0x00ff, 0x700f, 0xfffd, 0x0450, 0xd2bc, 0x0180, 0x9286, 0x0080,
++ 0x1128, 0x700b, 0x00ff, 0x700f, 0xfffc, 0x0400, 0x92d8, 0x1000,
++ 0x2b5c, 0xb810, 0x700a, 0xb814, 0x700e, 0x00c0, 0x6098, 0x700e,
++ 0x00a8, 0x080c, 0x94d3, 0x1130, 0x7810, 0x2058, 0xb8a0, 0x9082,
++ 0x007e, 0x0250, 0x00d6, 0x2069, 0x181d, 0x2d04, 0x700a, 0x8d68,
++ 0x2d04, 0x700e, 0x00de, 0x0010, 0x6034, 0x700e, 0x7838, 0x7012,
++ 0x783c, 0x7016, 0x60c3, 0x000c, 0x001e, 0x00de, 0x080c, 0x8b24,
++ 0x00be, 0x0005, 0x781b, 0x0001, 0x7803, 0x0006, 0x001e, 0x00de,
++ 0x00be, 0x0005, 0x792c, 0x9180, 0x0008, 0x200c, 0x9186, 0x0006,
++ 0x01c0, 0x9186, 0x0003, 0x0904, 0x920c, 0x9186, 0x0005, 0x0904,
++ 0x91f5, 0x9186, 0x0004, 0x05d8, 0x9186, 0x0008, 0x0904, 0x91fd,
++ 0x7807, 0x0037, 0x782f, 0x0003, 0x7817, 0x1700, 0x080c, 0x9271,
++ 0x0005, 0x080c, 0x9232, 0x00d6, 0x0026, 0x792c, 0x2168, 0x2009,
++ 0x4000, 0x6800, 0x0002, 0x91d6, 0x91e1, 0x91d8, 0x91e1, 0x91dd,
++ 0x91d6, 0x91d6, 0x91e1, 0x91e1, 0x91e1, 0x91e1, 0x91d6, 0x91d6,
++ 0x91d6, 0x91d6, 0x91d6, 0x91e1, 0x91d6, 0x91e1, 0x080c, 0x0d84,
++ 0x6824, 0xd0e4, 0x0110, 0xd0cc, 0x0110, 0x900e, 0x0010, 0x2009,
++ 0x2000, 0x682c, 0x7022, 0x6830, 0x7026, 0x0804, 0x922b, 0x080c,
++ 0x9232, 0x00d6, 0x0026, 0x792c, 0x2168, 0x2009, 0x4000, 0x6a00,
++ 0x9286, 0x0002, 0x1108, 0x900e, 0x04b0, 0x04e1, 0x00d6, 0x0026,
++ 0x792c, 0x2168, 0x2009, 0x4000, 0x0470, 0x04a1, 0x00d6, 0x0026,
++ 0x792c, 0x2168, 0x2009, 0x4000, 0x9286, 0x0005, 0x0118, 0x9286,
++ 0x0002, 0x1108, 0x900e, 0x00f8, 0x0429, 0x00d6, 0x0026, 0x792c,
++ 0x2168, 0x6814, 0x0096, 0x2048, 0xa9ac, 0xa834, 0x9112, 0xa9b0,
++ 0xa838, 0x009e, 0x9103, 0x7022, 0x7226, 0x792c, 0x9180, 0x0000,
++ 0x2004, 0x908e, 0x0002, 0x0130, 0x908e, 0x0004, 0x0118, 0x2009,
++ 0x4000, 0x0008, 0x900e, 0x712a, 0x60c3, 0x0018, 0x002e, 0x00de,
++ 0x0804, 0x8b24, 0x00b6, 0x0036, 0x0046, 0x0056, 0x0066, 0x080c,
++ 0x868d, 0x9006, 0x7003, 0x0200, 0x7938, 0x710a, 0x793c, 0x710e,
++ 0x7810, 0x2058, 0xb8a0, 0x080c, 0x94d3, 0x1118, 0x9092, 0x007e,
++ 0x0268, 0x00d6, 0x2069, 0x181d, 0x2d2c, 0x8d68, 0x2d34, 0x90d8,
++ 0x1000, 0x2b5c, 0xbb10, 0xbc14, 0x00de, 0x0028, 0x901e, 0x6498,
++ 0x2029, 0x0000, 0x6634, 0x782c, 0x9080, 0x0008, 0x2004, 0x9086,
++ 0x0003, 0x1128, 0x7512, 0x7616, 0x731a, 0x741e, 0x0020, 0x7312,
++ 0x7416, 0x751a, 0x761e, 0x006e, 0x005e, 0x004e, 0x003e, 0x00be,
++ 0x0005, 0x080c, 0x868d, 0x7003, 0x0100, 0x782c, 0x700a, 0x7814,
++ 0x700e, 0x700e, 0x60c3, 0x0008, 0x0804, 0x8b24, 0x080c, 0x8639,
++ 0x7003, 0x1400, 0x7838, 0x700a, 0x0079, 0x783c, 0x700e, 0x782c,
++ 0x7012, 0x7830, 0x7016, 0x7834, 0x9084, 0x00ff, 0x8007, 0x701a,
++ 0x60c3, 0x0010, 0x0804, 0x8b24, 0x00e6, 0x2071, 0x0240, 0x0006,
++ 0x00f6, 0x2078, 0x7810, 0x00b6, 0x2058, 0xb8bc, 0xd084, 0x0120,
++ 0x7848, 0x702a, 0x7844, 0x702e, 0x00be, 0x00fe, 0x000e, 0x00ee,
++ 0x0005, 0x080c, 0x8684, 0x7003, 0x0100, 0x782c, 0x700a, 0x7814,
++ 0x700e, 0x60c3, 0x0008, 0x0804, 0x8b24, 0x0021, 0x60c3, 0x0000,
++ 0x0804, 0x8b24, 0x00d6, 0x080c, 0x9363, 0xb810, 0x9085, 0x0300,
++ 0x7002, 0xb814, 0x7006, 0x2069, 0x1800, 0x6874, 0x700a, 0x6878,
++ 0x700e, 0x7013, 0x0819, 0x080c, 0x8b12, 0x721a, 0x2f10, 0x7222,
++ 0x7a08, 0x7226, 0x2071, 0x024c, 0x00de, 0x0005, 0x0059, 0x7914,
++ 0x712a, 0x60c3, 0x0000, 0x60a7, 0x9575, 0x080c, 0x8b47, 0x080c,
++ 0x788a, 0x0005, 0x0036, 0x0096, 0x00d6, 0x00e6, 0x7858, 0x2048,
++ 0xaa7c, 0x9296, 0x00c0, 0x9294, 0xfffd, 0xaa7e, 0xaa80, 0x9294,
++ 0x0300, 0xaa82, 0xa96c, 0x9194, 0x00ff, 0xab74, 0x9384, 0x00ff,
++ 0x908d, 0xc200, 0xa96e, 0x9384, 0xff00, 0x9215, 0xaa76, 0xa870,
++ 0xaa78, 0xa87a, 0xaa72, 0x00d6, 0x2069, 0x0200, 0x080c, 0x9363,
++ 0x00de, 0x20e9, 0x0000, 0x20a1, 0x0240, 0x20a9, 0x000a, 0xa860,
++ 0x20e0, 0xa85c, 0x9080, 0x001b, 0x2098, 0x4003, 0x60a3, 0x0035,
++ 0xaa68, 0x9294, 0x7000, 0x9286, 0x3000, 0x0110, 0x60a3, 0x0037,
++ 0x00ee, 0x00de, 0x009e, 0x003e, 0x0005, 0x900e, 0x7814, 0x0096,
++ 0x2048, 0xa87c, 0xd0fc, 0x01c0, 0x9084, 0x0003, 0x11a8, 0x2001,
++ 0x180c, 0x2004, 0xd0bc, 0x0180, 0x7824, 0xd0cc, 0x1168, 0xd0c4,
++ 0x1158, 0xa8a8, 0x9005, 0x1140, 0x2001, 0x180c, 0x200c, 0xc1d5,
++ 0x2102, 0x2009, 0x197f, 0x210c, 0x009e, 0x918d, 0x0092, 0x0010,
++ 0x2009, 0x0096, 0x60ab, 0x0036, 0x6116, 0x0005, 0x2009, 0x0009,
++ 0x00a0, 0x2009, 0x000a, 0x0088, 0x2009, 0x000b, 0x0070, 0x2009,
++ 0x000c, 0x0058, 0x2009, 0x000d, 0x0040, 0x2009, 0x000e, 0x0028,
++ 0x2009, 0x000f, 0x0010, 0x2009, 0x0008, 0x6912, 0x0005, 0x00d6,
++ 0x9290, 0x0018, 0x8214, 0x20e9, 0x0000, 0x2069, 0x0200, 0x6813,
++ 0x0000, 0x22a8, 0x9284, 0x00e0, 0x0128, 0x20a9, 0x0020, 0x9292,
++ 0x0020, 0x0008, 0x9016, 0x20a1, 0x0240, 0x9006, 0x4004, 0x82ff,
++ 0x0120, 0x6810, 0x8000, 0x6812, 0x0c60, 0x00de, 0x0005, 0x00d6,
++ 0x0096, 0x6014, 0x2048, 0x9006, 0xa836, 0xa83a, 0xa99c, 0xa946,
++ 0xa84a, 0x6023, 0x0003, 0x6007, 0x0040, 0x6003, 0x0003, 0x600b,
++ 0xffff, 0xa817, 0x0001, 0xa842, 0xa83e, 0x2900, 0xa85a, 0xa813,
++ 0x1cdb, 0x080c, 0x7c3a, 0x0126, 0x2091, 0x8000, 0x080c, 0x820b,
++ 0x012e, 0x009e, 0x00de, 0x0005, 0x00f6, 0x00e6, 0x00d6, 0x00c6,
++ 0x00a6, 0x0096, 0x0066, 0x0126, 0x2091, 0x8000, 0x2071, 0x19b4,
++ 0x760c, 0x2660, 0x2678, 0x8cff, 0x0904, 0x9433, 0x7024, 0x9c06,
++ 0x1520, 0x2069, 0x0100, 0x68c0, 0x9005, 0x0904, 0x940a, 0x080c,
++ 0x8b50, 0x68c3, 0x0000, 0x080c, 0x900f, 0x7027, 0x0000, 0x0036,
++ 0x2069, 0x0140, 0x6b04, 0x9384, 0x1000, 0x0138, 0x2001, 0x0100,
++ 0x080c, 0x28a5, 0x9006, 0x080c, 0x28a5, 0x2069, 0x0100, 0x6824,
++ 0xd084, 0x0110, 0x6827, 0x0001, 0x003e, 0x700c, 0x9c36, 0x1110,
++ 0x660c, 0x760e, 0x7008, 0x9c36, 0x1140, 0x2c00, 0x9f36, 0x0118,
++ 0x2f00, 0x700a, 0x0010, 0x700b, 0x0000, 0x660c, 0x0066, 0x2c00,
++ 0x9f06, 0x0110, 0x7e0e, 0x0008, 0x2678, 0x600f, 0x0000, 0x080c,
++ 0xb284, 0x1158, 0x080c, 0x2d3f, 0x080c, 0xb295, 0x11f0, 0x080c,
++ 0x9e99, 0x00d8, 0x080c, 0x900f, 0x08c0, 0x080c, 0xb295, 0x1118,
++ 0x080c, 0x9e99, 0x0090, 0x6014, 0x2048, 0x080c, 0xb0ab, 0x0168,
++ 0x6020, 0x9086, 0x0003, 0x1520, 0xa867, 0x0103, 0xab7a, 0xa877,
++ 0x0000, 0x080c, 0x61a9, 0x080c, 0xb278, 0x080c, 0xb4de, 0x080c,
++ 0x9584, 0x080c, 0x8eec, 0x00ce, 0x0804, 0x93bb, 0x2c78, 0x600c,
++ 0x2060, 0x0804, 0x93bb, 0x700f, 0x0000, 0x700b, 0x0000, 0x012e,
++ 0x006e, 0x009e, 0x00ae, 0x00ce, 0x00de, 0x00ee, 0x00fe, 0x0005,
++ 0x6020, 0x9086, 0x0006, 0x1d08, 0x080c, 0xc970, 0x08f0, 0x00d6,
++ 0x0156, 0x080c, 0x868d, 0x7a14, 0x82ff, 0x0138, 0x7003, 0x0100,
++ 0x700b, 0x0003, 0x60c3, 0x0008, 0x0490, 0x7003, 0x0200, 0x7007,
++ 0x0000, 0x2069, 0x1800, 0x901e, 0x6800, 0x9086, 0x0004, 0x1110,
++ 0xc38d, 0x0060, 0x080c, 0x6877, 0x1110, 0xc3ad, 0x0008, 0xc3a5,
++ 0x6ad8, 0xd29c, 0x1110, 0xd2ac, 0x0108, 0xc39d, 0x730e, 0x2011,
++ 0x1848, 0x63f0, 0x2312, 0x20a9, 0x0006, 0x2011, 0x1840, 0x2019,
++ 0x1841, 0x2071, 0x0250, 0x2376, 0x8e70, 0x2276, 0x8e70, 0x9398,
++ 0x0002, 0x9290, 0x0002, 0x1f04, 0x947b, 0x60c3, 0x0040, 0x080c,
++ 0x8b24, 0x015e, 0x00de, 0x0005, 0x0156, 0x080c, 0x868d, 0x7a14,
++ 0x82ff, 0x0168, 0x9286, 0xffff, 0x0118, 0x9282, 0x000e, 0x1238,
++ 0x7003, 0x0100, 0x700b, 0x0003, 0x60c3, 0x0008, 0x0488, 0x7003,
++ 0x0200, 0x7007, 0x001c, 0x700f, 0x0001, 0x2011, 0x198a, 0x2204,
++ 0x8007, 0x701a, 0x8210, 0x2204, 0x8007, 0x701e, 0x0421, 0x1120,
++ 0xb8a0, 0x9082, 0x007f, 0x0248, 0x2001, 0x181d, 0x2004, 0x7022,
++ 0x2001, 0x181e, 0x2004, 0x7026, 0x0030, 0x2001, 0x1816, 0x2004,
++ 0x9084, 0x00ff, 0x7026, 0x20a9, 0x0004, 0x20e1, 0x0001, 0x2099,
++ 0x1805, 0x20e9, 0x0000, 0x20a1, 0x0256, 0x4003, 0x60c3, 0x001c,
++ 0x015e, 0x0804, 0x8b24, 0x0006, 0x2001, 0x1836, 0x2004, 0xd0ac,
++ 0x000e, 0x0005, 0x2011, 0x0003, 0x080c, 0x8e99, 0x2011, 0x0002,
++ 0x080c, 0x8ea3, 0x080c, 0x8d59, 0x0036, 0x901e, 0x080c, 0x8dfe,
++ 0x003e, 0x0005, 0x2071, 0x1882, 0x7000, 0x9005, 0x0140, 0x2001,
++ 0x0976, 0x2071, 0x1800, 0x706e, 0x7072, 0x7063, 0xffe0, 0x2071,
++ 0x1800, 0x706c, 0x704e, 0x7053, 0x1cd0, 0x0005, 0x00e6, 0x0126,
++ 0x2071, 0x1800, 0x2091, 0x8000, 0x754c, 0x9582, 0x0010, 0x0608,
++ 0x7050, 0x2060, 0x6000, 0x9086, 0x0000, 0x0148, 0x9ce0, 0x0018,
++ 0x7060, 0x9c02, 0x1208, 0x0cb0, 0x2061, 0x1cd0, 0x0c98, 0x6003,
++ 0x0008, 0x8529, 0x754e, 0x9ca8, 0x0018, 0x7060, 0x9502, 0x1230,
++ 0x7552, 0x9085, 0x0001, 0x012e, 0x00ee, 0x0005, 0x7053, 0x1cd0,
++ 0x0cc0, 0x9006, 0x0cc0, 0x00e6, 0x2071, 0x1800, 0x754c, 0x9582,
++ 0x0010, 0x0600, 0x7050, 0x2060, 0x6000, 0x9086, 0x0000, 0x0148,
++ 0x9ce0, 0x0018, 0x7060, 0x9c02, 0x1208, 0x0cb0, 0x2061, 0x1cd0,
++ 0x0c98, 0x6003, 0x0008, 0x8529, 0x754e, 0x9ca8, 0x0018, 0x7060,
++ 0x9502, 0x1228, 0x7552, 0x9085, 0x0001, 0x00ee, 0x0005, 0x7053,
++ 0x1cd0, 0x0cc8, 0x9006, 0x0cc8, 0x9c82, 0x1cd0, 0x0a0c, 0x0d84,
++ 0x2001, 0x1818, 0x2004, 0x9c02, 0x1a0c, 0x0d84, 0x9006, 0x6006,
++ 0x600a, 0x600e, 0x6016, 0x601a, 0x6012, 0x6023, 0x0000, 0x6003,
++ 0x0000, 0x601e, 0x6056, 0x605a, 0x6026, 0x602a, 0x602e, 0x6032,
++ 0x6036, 0x603a, 0x603e, 0x6042, 0x2061, 0x1800, 0x604c, 0x8000,
++ 0x604e, 0x9086, 0x0001, 0x0108, 0x0005, 0x0126, 0x2091, 0x8000,
++ 0x080c, 0x8125, 0x012e, 0x0cc0, 0x0006, 0x6000, 0x9086, 0x0000,
++ 0x01b0, 0x601c, 0xd084, 0x190c, 0x17b0, 0x6017, 0x0000, 0x6023,
++ 0x0007, 0x2001, 0x1953, 0x2004, 0x0006, 0x9082, 0x0051, 0x000e,
++ 0x0208, 0x8004, 0x601a, 0x080c, 0xcc1f, 0x6043, 0x0000, 0x000e,
++ 0x0005, 0x00e6, 0x0126, 0x2071, 0x1800, 0x2091, 0x8000, 0x754c,
++ 0x9582, 0x0001, 0x0608, 0x7050, 0x2060, 0x6000, 0x9086, 0x0000,
++ 0x0148, 0x9ce0, 0x0018, 0x7060, 0x9c02, 0x1208, 0x0cb0, 0x2061,
++ 0x1cd0, 0x0c98, 0x6003, 0x0008, 0x8529, 0x754e, 0x9ca8, 0x0018,
++ 0x7060, 0x9502, 0x1230, 0x7552, 0x9085, 0x0001, 0x012e, 0x00ee,
++ 0x0005, 0x7053, 0x1cd0, 0x0cc0, 0x9006, 0x0cc0, 0x6020, 0x9084,
++ 0x000f, 0x0002, 0x95e1, 0x95ea, 0x9605, 0x9620, 0xb77d, 0xb79a,
++ 0xb7b5, 0x95e1, 0x95ea, 0x95e1, 0x963c, 0x95e1, 0x95e1, 0x95e1,
++ 0x95e1, 0x9186, 0x0013, 0x1128, 0x080c, 0x8026, 0x080c, 0x8125,
++ 0x0005, 0x0005, 0x0066, 0x6000, 0x90b2, 0x0016, 0x1a0c, 0x0d84,
++ 0x0013, 0x006e, 0x0005, 0x9603, 0x9d1f, 0x9ee0, 0x9603, 0x9f6e,
++ 0x98e8, 0x9603, 0x9603, 0x9ca1, 0xa463, 0x9603, 0x9603, 0x9603,
++ 0x9603, 0x9603, 0x9603, 0x080c, 0x0d84, 0x0066, 0x6000, 0x90b2,
++ 0x0016, 0x1a0c, 0x0d84, 0x0013, 0x006e, 0x0005, 0x961e, 0xaaef,
++ 0x961e, 0x961e, 0x961e, 0x961e, 0x961e, 0x961e, 0xaa94, 0xac61,
++ 0x961e, 0xab21, 0xaba0, 0xab21, 0xaba0, 0x961e, 0x080c, 0x0d84,
++ 0x6000, 0x9082, 0x0016, 0x1a0c, 0x0d84, 0x6000, 0x0002, 0x963a,
++ 0xa4a5, 0xa574, 0xa69f, 0xa838, 0x963a, 0x963a, 0x963a, 0xa47e,
++ 0xaa2b, 0xaa2e, 0x963a, 0x963a, 0x963a, 0x963a, 0xaa57, 0x963a,
++ 0x963a, 0x963a, 0x080c, 0x0d84, 0x0066, 0x6000, 0x90b2, 0x0016,
++ 0x1a0c, 0x0d84, 0x0013, 0x006e, 0x0005, 0x9655, 0x9655, 0x9694,
++ 0x972f, 0x979c, 0x9655, 0x9655, 0x9655, 0x9657, 0x9655, 0x9655,
++ 0x9655, 0x9655, 0x9655, 0x9655, 0x9655, 0x080c, 0x0d84, 0x9186,
++ 0x004c, 0x0588, 0x9186, 0x0003, 0x190c, 0x0d84, 0x0096, 0x601c,
++ 0xc0ed, 0x601e, 0x6003, 0x0003, 0x6106, 0x6014, 0x2048, 0xa87c,
++ 0x9084, 0x8000, 0xc0b5, 0xa87e, 0xa8ac, 0xa846, 0xa8b0, 0xa84a,
++ 0x9006, 0xa836, 0xa83a, 0xa884, 0x9092, 0x199a, 0x0210, 0x2001,
++ 0x1999, 0x8003, 0x8013, 0x8213, 0x9210, 0x621a, 0x009e, 0x2c10,
++ 0x080c, 0x18b7, 0x080c, 0x7c3a, 0x0126, 0x2091, 0x8000, 0x080c,
++ 0x820b, 0x012e, 0x0005, 0x6010, 0x00b6, 0x2058, 0xbca0, 0x00be,
++ 0x2c00, 0x080c, 0x97be, 0x0005, 0x00d6, 0x0096, 0x00f6, 0x2079,
++ 0x1800, 0x7a88, 0x9290, 0x0018, 0x6014, 0x2048, 0xac78, 0x0046,
++ 0xa8e0, 0x9005, 0x1140, 0xa8dc, 0x921a, 0x0140, 0x0220, 0xa87b,
++ 0x0007, 0x2010, 0x0028, 0xa87b, 0x0015, 0x0010, 0xa87b, 0x0000,
++ 0x8214, 0xa883, 0x0000, 0xaa02, 0x0006, 0x0016, 0x0026, 0x00c6,
++ 0x00d6, 0x00e6, 0x00f6, 0x2400, 0x9005, 0x1108, 0x009a, 0x2100,
++ 0x9086, 0x0015, 0x1118, 0x2001, 0x0001, 0x0038, 0x2100, 0x9086,
++ 0x0016, 0x0118, 0x2001, 0x0001, 0x002a, 0x94a4, 0x0007, 0x8423,
++ 0x9405, 0x0002, 0x96f7, 0x96f7, 0x96f2, 0x96f5, 0x96f7, 0x96ef,
++ 0x96e2, 0x96e2, 0x96e2, 0x96e2, 0x96e2, 0x96e2, 0x96e2, 0x96e2,
++ 0x96e2, 0x96e2, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x002e, 0x001e,
++ 0x000e, 0x004e, 0x00fe, 0x009e, 0x00de, 0x080c, 0x0d84, 0x080c,
++ 0xa0f1, 0x0028, 0x080c, 0xa1cf, 0x0010, 0x080c, 0xa2bc, 0x00fe,
++ 0x00ee, 0x00de, 0x00ce, 0x002e, 0x001e, 0x2c00, 0xa896, 0x000e,
++ 0x080c, 0x987c, 0x0530, 0xa804, 0xa80e, 0x00a6, 0x2050, 0xb100,
++ 0x00ae, 0x8006, 0x8006, 0x8007, 0x97bc, 0x003f, 0x9084, 0xffc0,
++ 0x9080, 0x0002, 0xaacc, 0xabd0, 0xacd4, 0xadd8, 0x2031, 0x0000,
++ 0x2041, 0x11fd, 0x080c, 0x9a1f, 0x0160, 0x000e, 0x9005, 0x0120,
++ 0x00fe, 0x009e, 0x00de, 0x0005, 0x00fe, 0x009e, 0x00de, 0x0804,
++ 0x9554, 0x2001, 0x002c, 0x900e, 0x080c, 0x98db, 0x0c70, 0x9182,
++ 0x0047, 0x0002, 0x973b, 0x973b, 0x973d, 0x9772, 0x973b, 0x973b,
++ 0x973b, 0x973b, 0x9785, 0x080c, 0x0d84, 0x00d6, 0x0016, 0x0096,
++ 0x080c, 0x80d6, 0x080c, 0x820b, 0x6003, 0x0004, 0x6114, 0x2148,
++ 0xa87c, 0xd0fc, 0x01b8, 0xa878, 0x9005, 0x1158, 0xa894, 0x9005,
++ 0x0140, 0x2001, 0x0000, 0x900e, 0x080c, 0x98db, 0x080c, 0x9554,
++ 0x00a8, 0x6003, 0x0002, 0xa8a4, 0xa9a8, 0x9105, 0x1178, 0xa8ae,
++ 0xa8b2, 0x0c78, 0xa87f, 0x0020, 0xa88c, 0xa88a, 0xa8a4, 0xa8ae,
++ 0xa8a8, 0xa8b2, 0xa8c7, 0x0000, 0xa8cb, 0x0000, 0x009e, 0x001e,
++ 0x00de, 0x0005, 0x080c, 0x80d6, 0x00d6, 0x0096, 0x6114, 0x2148,
++ 0x080c, 0xb0ad, 0x0120, 0xa87b, 0x0006, 0x080c, 0x61a9, 0x009e,
++ 0x00de, 0x080c, 0x9554, 0x0804, 0x820b, 0x080c, 0x80d6, 0x080c,
++ 0x2d1a, 0x080c, 0xb76c, 0x00d6, 0x0096, 0x6114, 0x2148, 0x080c,
++ 0xb0ad, 0x0120, 0xa87b, 0x0029, 0x080c, 0x61a9, 0x009e, 0x00de,
++ 0x080c, 0x9554, 0x0804, 0x820b, 0x9182, 0x0047, 0x0002, 0x97ac,
++ 0x97ae, 0x97ac, 0x97ac, 0x97ac, 0x97ac, 0x97ac, 0x97ac, 0x97ac,
++ 0x97ac, 0x97ac, 0x97ac, 0x97ae, 0x080c, 0x0d84, 0x00d6, 0x0096,
++ 0x080c, 0x1489, 0x6114, 0x2148, 0xa87b, 0x0000, 0xa883, 0x0000,
++ 0x080c, 0x61a9, 0x009e, 0x00de, 0x0804, 0x9554, 0x0026, 0x0036,
++ 0x0056, 0x0066, 0x0096, 0x00a6, 0x00f6, 0x0006, 0x080c, 0x0fae,
++ 0x000e, 0x090c, 0x0d84, 0xa960, 0x21e8, 0xa95c, 0x9188, 0x0019,
++ 0x21a0, 0x900e, 0x20a9, 0x0020, 0x4104, 0xa87a, 0x2079, 0x1800,
++ 0x7988, 0x9188, 0x0018, 0x918c, 0x0fff, 0xa972, 0xac76, 0x2950,
++ 0x00a6, 0x2001, 0x0205, 0x2003, 0x0000, 0x901e, 0x2029, 0x0001,
++ 0x9182, 0x0034, 0x1228, 0x2011, 0x001f, 0x080c, 0xace6, 0x04c0,
++ 0x2130, 0x2009, 0x0034, 0x2011, 0x001f, 0x080c, 0xace6, 0x96b2,
++ 0x0034, 0xb004, 0x904d, 0x0110, 0x080c, 0x0f60, 0x080c, 0x0fae,
++ 0x01d0, 0x8528, 0xa867, 0x0110, 0xa86b, 0x0000, 0x2920, 0xb406,
++ 0x968a, 0x003d, 0x1230, 0x2608, 0x2011, 0x001b, 0x080c, 0xace6,
++ 0x00b8, 0x96b2, 0x003c, 0x2009, 0x003c, 0x2950, 0x2011, 0x001b,
++ 0x080c, 0xace6, 0x0c18, 0x2001, 0x0205, 0x2003, 0x0000, 0x00ae,
++ 0x852f, 0x95ad, 0x0050, 0xb566, 0xb070, 0xc0fd, 0xb072, 0x0048,
++ 0x2001, 0x0205, 0x2003, 0x0000, 0x00ae, 0x852f, 0x95ad, 0x0050,
++ 0xb566, 0x2a48, 0xa804, 0xa807, 0x0000, 0x0006, 0x080c, 0x61a9,
++ 0x000e, 0x2048, 0x9005, 0x1db0, 0x00fe, 0x00ae, 0x009e, 0x006e,
++ 0x005e, 0x003e, 0x002e, 0x0005, 0x00d6, 0x00f6, 0x0096, 0x0006,
++ 0x080c, 0x0fae, 0x000e, 0x090c, 0x0d84, 0xa960, 0x21e8, 0xa95c,
++ 0x9188, 0x0019, 0x21a0, 0x900e, 0x20a9, 0x0020, 0x4104, 0xaa66,
++ 0xa87a, 0x2079, 0x1800, 0x7988, 0x810c, 0x9188, 0x000c, 0x9182,
++ 0x001a, 0x0210, 0x2009, 0x001a, 0x21a8, 0x810b, 0xa972, 0xac76,
++ 0x2e98, 0xa85c, 0x9080, 0x001f, 0x20a0, 0x2001, 0x0205, 0x200c,
++ 0x918d, 0x0080, 0x2102, 0x4003, 0x2003, 0x0000, 0x080c, 0x61a9,
++ 0x009e, 0x00fe, 0x00de, 0x0005, 0x0016, 0x00d6, 0x00f6, 0x0096,
++ 0x0016, 0x2001, 0x0205, 0x200c, 0x918d, 0x0080, 0x2102, 0x001e,
++ 0x2079, 0x0200, 0x2e98, 0x2021, 0x003e, 0x901e, 0x9282, 0x0020,
++ 0x0218, 0x2011, 0x0020, 0x2018, 0x9486, 0x003e, 0x1170, 0x0096,
++ 0x080c, 0x0fae, 0x2900, 0x009e, 0x05b8, 0xa806, 0x2048, 0xa860,
++ 0x20e8, 0xa85c, 0x9080, 0x0002, 0x20a0, 0x3300, 0x908e, 0x0260,
++ 0x0140, 0x2009, 0x0280, 0x9102, 0x920a, 0x0218, 0x2010, 0x2100,
++ 0x9318, 0x2200, 0x9402, 0x1220, 0x2410, 0x9006, 0x9398, 0x0002,
++ 0x2020, 0x22a8, 0xa800, 0x9200, 0xa802, 0x20e1, 0x0000, 0x4003,
++ 0x83ff, 0x0180, 0x3300, 0x9086, 0x0280, 0x1130, 0x7814, 0x8000,
++ 0x9085, 0x0080, 0x7816, 0x2e98, 0x2310, 0x84ff, 0x0904, 0x988b,
++ 0x0804, 0x988d, 0x9085, 0x0001, 0x7817, 0x0000, 0x009e, 0x00fe,
++ 0x00de, 0x001e, 0x0005, 0x00d6, 0x0036, 0x0096, 0x6314, 0x2348,
++ 0xa87a, 0xa982, 0x080c, 0x619c, 0x009e, 0x003e, 0x00de, 0x0005,
++ 0x91b6, 0x0015, 0x1118, 0x080c, 0x9554, 0x0030, 0x91b6, 0x0016,
++ 0x190c, 0x0d84, 0x080c, 0x9554, 0x0005, 0x20a9, 0x000e, 0x20e1,
++ 0x0000, 0x2e98, 0x6014, 0x0096, 0x2048, 0xa860, 0x20e8, 0xa85c,
++ 0x20a0, 0x009e, 0x4003, 0x0136, 0x9080, 0x001b, 0x2011, 0x0006,
++ 0x20a9, 0x0001, 0x3418, 0x8318, 0x23a0, 0x4003, 0x3318, 0x8318,
++ 0x2398, 0x8211, 0x1db8, 0x2011, 0x0006, 0x013e, 0x20a0, 0x3318,
++ 0x8318, 0x2398, 0x4003, 0x3418, 0x8318, 0x23a0, 0x8211, 0x1db8,
++ 0x0096, 0x080c, 0xb0ad, 0x0130, 0x6014, 0x2048, 0xa807, 0x0000,
++ 0xa867, 0x0103, 0x009e, 0x0804, 0x9554, 0x0096, 0x00d6, 0x0036,
++ 0x7330, 0x9386, 0x0200, 0x11a8, 0x6010, 0x00b6, 0x2058, 0xb8bf,
++ 0x0000, 0x00be, 0x6014, 0x9005, 0x0130, 0x2048, 0xa807, 0x0000,
++ 0xa867, 0x0103, 0xab32, 0x080c, 0x9554, 0x003e, 0x00de, 0x009e,
++ 0x0005, 0x0011, 0x1d48, 0x0cc8, 0x0006, 0x0016, 0x080c, 0xb759,
++ 0x0188, 0x6014, 0x9005, 0x1170, 0x600b, 0x0003, 0x601b, 0x0000,
++ 0x6043, 0x0000, 0x2009, 0x0022, 0x080c, 0x9cf7, 0x9006, 0x001e,
++ 0x000e, 0x0005, 0x9085, 0x0001, 0x0cd0, 0x0096, 0x0016, 0x20a9,
++ 0x0014, 0x9e80, 0x000c, 0x20e1, 0x0000, 0x2098, 0x6014, 0x2048,
++ 0xa860, 0x20e8, 0xa85c, 0x9080, 0x0002, 0x20a0, 0x4003, 0x2001,
++ 0x0205, 0x2003, 0x0001, 0x2099, 0x0260, 0x20a9, 0x0016, 0x4003,
++ 0x20a9, 0x000a, 0xa804, 0x2048, 0xa860, 0x20e8, 0xa85c, 0x9080,
++ 0x0002, 0x20a0, 0x4003, 0x2001, 0x0205, 0x2003, 0x0002, 0x2099,
++ 0x0260, 0x20a9, 0x0020, 0x4003, 0x2003, 0x0000, 0x6014, 0x2048,
++ 0xa800, 0x2048, 0xa867, 0x0103, 0x080c, 0x9554, 0x001e, 0x009e,
++ 0x0005, 0x0096, 0x0016, 0x900e, 0x7030, 0x9086, 0x0100, 0x0140,
++ 0x7038, 0x9084, 0x00ff, 0x800c, 0x703c, 0x9084, 0x00ff, 0x8004,
++ 0x9080, 0x0004, 0x9108, 0x810b, 0x2011, 0x0002, 0x2019, 0x000c,
++ 0x6014, 0x2048, 0x080c, 0xace6, 0x080c, 0xb0ad, 0x0140, 0x6014,
++ 0x2048, 0xa807, 0x0000, 0xa864, 0xa8e2, 0xa867, 0x0103, 0x080c,
++ 0x9554, 0x001e, 0x009e, 0x0005, 0x0016, 0x0096, 0x7030, 0x9086,
++ 0x0100, 0x1118, 0x2009, 0x0004, 0x0010, 0x7034, 0x800c, 0x810b,
++ 0x2011, 0x000c, 0x2019, 0x000c, 0x6014, 0x2048, 0xa804, 0x0096,
++ 0x9005, 0x0108, 0x2048, 0x080c, 0xace6, 0x009e, 0x080c, 0xb0ad,
++ 0x0148, 0xa804, 0x9005, 0x1158, 0xa807, 0x0000, 0xa864, 0xa8e2,
++ 0xa867, 0x0103, 0x080c, 0x9554, 0x009e, 0x001e, 0x0005, 0x0086,
++ 0x2040, 0xa030, 0x8007, 0x9086, 0x0100, 0x1118, 0x080c, 0x9e99,
++ 0x00e0, 0xa034, 0x8007, 0x800c, 0x8806, 0x8006, 0x8007, 0x90bc,
++ 0x003f, 0x9084, 0xffc0, 0x9080, 0x000c, 0xa87b, 0x0000, 0xa883,
++ 0x0000, 0xa897, 0x4000, 0xaaa0, 0xab9c, 0xaca8, 0xada4, 0x2031,
++ 0x0000, 0x2041, 0x11e3, 0x0019, 0x0d08, 0x008e, 0x0898, 0x0096,
++ 0x0006, 0x080c, 0x0fae, 0x000e, 0x01b0, 0xa8ab, 0x0dcb, 0xa876,
++ 0x000e, 0xa8a2, 0x0006, 0xae6a, 0x2800, 0xa89e, 0xa97a, 0xaf72,
++ 0xaa8e, 0xab92, 0xac96, 0xad9a, 0x0086, 0x2940, 0x080c, 0x108c,
++ 0x008e, 0x9085, 0x0001, 0x009e, 0x0005, 0x00e6, 0x00d6, 0x0026,
++ 0x7008, 0x9084, 0x00ff, 0x6210, 0x00b6, 0x2258, 0xba10, 0x00be,
++ 0x9206, 0x1520, 0x700c, 0x6210, 0x00b6, 0x2258, 0xba14, 0x00be,
++ 0x9206, 0x11e0, 0x6043, 0x0000, 0x2c68, 0x0016, 0x2009, 0x0035,
++ 0x080c, 0xb6d9, 0x001e, 0x1158, 0x622c, 0x2268, 0x2071, 0x026c,
++ 0x6b20, 0x9386, 0x0003, 0x0130, 0x9386, 0x0006, 0x0128, 0x080c,
++ 0x9554, 0x0020, 0x0039, 0x0010, 0x080c, 0x9b31, 0x002e, 0x00de,
++ 0x00ee, 0x0005, 0x0096, 0x6814, 0x2048, 0x9186, 0x0015, 0x0904,
++ 0x9b19, 0x918e, 0x0016, 0x1904, 0x9b2f, 0x700c, 0x908c, 0xff00,
++ 0x9186, 0x1700, 0x0120, 0x9186, 0x0300, 0x1904, 0x9af3, 0x89ff,
++ 0x1138, 0x6800, 0x9086, 0x000f, 0x0904, 0x9ad6, 0x0804, 0x9b2d,
++ 0x6808, 0x9086, 0xffff, 0x1904, 0x9b1b, 0xa87c, 0x9084, 0x0060,
++ 0x9086, 0x0020, 0x1128, 0xa83c, 0xa940, 0x9105, 0x1904, 0x9b1b,
++ 0x6824, 0xd0b4, 0x1904, 0x9b1b, 0x080c, 0xb278, 0x685c, 0xa882,
++ 0xa87c, 0xc0dc, 0xc0f4, 0xc0d4, 0xa87e, 0x0026, 0x900e, 0x6a18,
++ 0x2001, 0x000a, 0x080c, 0x7a4b, 0xa884, 0x920a, 0x0208, 0x8011,
++ 0xaa86, 0x82ff, 0x002e, 0x1138, 0x00c6, 0x2d60, 0x080c, 0xae04,
++ 0x00ce, 0x0804, 0x9b2d, 0x00c6, 0xa868, 0xd0fc, 0x1118, 0x080c,
++ 0x5755, 0x0010, 0x080c, 0x5ac6, 0x00ce, 0x1904, 0x9b1b, 0x00c6,
++ 0x2d60, 0x080c, 0x9554, 0x00ce, 0x0804, 0x9b2d, 0x00c6, 0x080c,
++ 0x95a1, 0x0198, 0x6017, 0x0000, 0x6810, 0x6012, 0x080c, 0xb4e6,
++ 0x6023, 0x0003, 0x6904, 0x00c6, 0x2d60, 0x080c, 0x9554, 0x00ce,
++ 0x080c, 0x95ce, 0x00ce, 0x0804, 0x9b2d, 0x2001, 0x1955, 0x2004,
++ 0x6842, 0x00ce, 0x04d0, 0x7008, 0x9086, 0x000b, 0x11c8, 0x6010,
++ 0x00b6, 0x2058, 0xb900, 0xc1bc, 0xb902, 0x00be, 0x00c6, 0x2d60,
++ 0xa883, 0x0003, 0x080c, 0xb71f, 0x6007, 0x0085, 0x6003, 0x000b,
++ 0x6023, 0x0002, 0x080c, 0x7bcb, 0x080c, 0x8125, 0x00ce, 0x00e8,
++ 0x700c, 0x9086, 0x2a00, 0x1138, 0x2001, 0x1955, 0x2004, 0x6842,
++ 0x00a0, 0x0479, 0x00a0, 0x89ff, 0x090c, 0x0d84, 0x00c6, 0x00d6,
++ 0x2d60, 0xa867, 0x0103, 0xa87b, 0x0003, 0x080c, 0xacd6, 0x080c,
++ 0xb278, 0x080c, 0x9584, 0x00de, 0x00ce, 0x080c, 0x9554, 0x009e,
++ 0x0005, 0x9186, 0x0015, 0x1128, 0x2001, 0x1955, 0x2004, 0x6842,
++ 0x0068, 0x918e, 0x0016, 0x1160, 0x00c6, 0x2d00, 0x2060, 0x080c,
++ 0xcc1f, 0x080c, 0x79df, 0x080c, 0x9554, 0x00ce, 0x080c, 0x9554,
++ 0x0005, 0x0026, 0x0036, 0x0046, 0x7228, 0xacb0, 0xabac, 0xd2f4,
++ 0x0130, 0x2001, 0x1955, 0x2004, 0x6842, 0x0804, 0x9ba9, 0x00c6,
++ 0x2d60, 0x080c, 0xad11, 0x00ce, 0x6804, 0x9086, 0x0050, 0x1168,
++ 0x00c6, 0x2d00, 0x2060, 0x6003, 0x0001, 0x6007, 0x0050, 0x080c,
++ 0x7bcb, 0x080c, 0x8125, 0x00ce, 0x04e0, 0x6800, 0x9086, 0x000f,
++ 0x01b0, 0x89ff, 0x090c, 0x0d84, 0x6800, 0x9086, 0x0004, 0x1198,
++ 0xa87c, 0xd0ac, 0x0180, 0xa843, 0x0fff, 0xa83f, 0x0fff, 0xa880,
++ 0xc0f4, 0xc0fc, 0xa882, 0x2001, 0x0001, 0x6832, 0x00e8, 0x2001,
++ 0x0007, 0x6832, 0x00c8, 0xa87c, 0xd0b4, 0x1138, 0xd0ac, 0x0db8,
++ 0xa838, 0xa934, 0x9105, 0x0d98, 0x0c30, 0xd2ec, 0x1d80, 0x7024,
++ 0x9306, 0x1118, 0x7020, 0x9406, 0x0d50, 0x7020, 0x683e, 0x7024,
++ 0x683a, 0x2001, 0x0005, 0x6832, 0x080c, 0xb3e0, 0x080c, 0x8125,
++ 0x0010, 0x080c, 0x9554, 0x004e, 0x003e, 0x002e, 0x0005, 0x00e6,
++ 0x00d6, 0x0026, 0x7008, 0x9084, 0x00ff, 0x6210, 0x00b6, 0x2258,
++ 0xba10, 0x00be, 0x9206, 0x1904, 0x9c11, 0x700c, 0x6210, 0x00b6,
++ 0x2258, 0xba14, 0x00be, 0x9206, 0x1904, 0x9c11, 0x6038, 0x2068,
++ 0x6a20, 0x9286, 0x0007, 0x0904, 0x9c11, 0x9286, 0x0002, 0x0904,
++ 0x9c11, 0x9286, 0x0000, 0x05e8, 0x6808, 0x633c, 0x9306, 0x15c8,
++ 0x2071, 0x026c, 0x9186, 0x0015, 0x0570, 0x918e, 0x0016, 0x1100,
++ 0x00c6, 0x6038, 0x2060, 0x6104, 0x9186, 0x004b, 0x01c0, 0x9186,
++ 0x004c, 0x01a8, 0x9186, 0x004d, 0x0190, 0x9186, 0x004e, 0x0178,
++ 0x9186, 0x0052, 0x0160, 0x6014, 0x0096, 0x2048, 0x080c, 0xb0ad,
++ 0x090c, 0x0d84, 0xa883, 0x0003, 0x009e, 0x080c, 0xb71f, 0x6007,
++ 0x0085, 0x6003, 0x000b, 0x6023, 0x0002, 0x080c, 0x7bcb, 0x080c,
++ 0x8125, 0x00ce, 0x0030, 0x6038, 0x2070, 0x2001, 0x1955, 0x2004,
++ 0x7042, 0x080c, 0x9554, 0x002e, 0x00de, 0x00ee, 0x0005, 0x00b6,
++ 0x0096, 0x00f6, 0x6014, 0x2048, 0x6010, 0x2058, 0x91b6, 0x0015,
++ 0x0130, 0xba08, 0xbb0c, 0xbc00, 0xc48c, 0xbc02, 0x0460, 0x0096,
++ 0x0156, 0x0036, 0x0026, 0x2b48, 0x9e90, 0x0010, 0x2019, 0x000a,
++ 0x20a9, 0x0004, 0x080c, 0xa439, 0x002e, 0x003e, 0x015e, 0x009e,
++ 0x1904, 0x9c80, 0x0096, 0x0156, 0x0036, 0x0026, 0x2b48, 0x9e90,
++ 0x0014, 0x2019, 0x0006, 0x20a9, 0x0004, 0x080c, 0xa439, 0x002e,
++ 0x003e, 0x015e, 0x009e, 0x15a0, 0x7238, 0xba0a, 0x733c, 0xbb0e,
++ 0xbc00, 0xc48d, 0xbc02, 0xa804, 0x9005, 0x1128, 0x00fe, 0x009e,
++ 0x00be, 0x0804, 0x9920, 0x0096, 0x2048, 0xaa12, 0xab16, 0xac0a,
++ 0x009e, 0x8006, 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0,
++ 0x9080, 0x0002, 0x2009, 0x002b, 0xaaa0, 0xab9c, 0xaca8, 0xada4,
++ 0x2031, 0x0000, 0x2041, 0x11e3, 0x080c, 0x9a1f, 0x0130, 0x00fe,
++ 0x009e, 0x080c, 0x9554, 0x00be, 0x0005, 0x080c, 0x9e99, 0x0cb8,
++ 0x2b78, 0x00f6, 0x080c, 0x2d1a, 0x080c, 0xb76c, 0x00fe, 0x00c6,
++ 0x080c, 0x94fe, 0x2f00, 0x6012, 0x6017, 0x0000, 0x6023, 0x0001,
++ 0x6007, 0x0001, 0x6003, 0x0001, 0x2001, 0x0007, 0x080c, 0x5b61,
++ 0x080c, 0x5b8d, 0x080c, 0x7c1d, 0x080c, 0x8125, 0x00ce, 0x0804,
++ 0x9c53, 0x2100, 0x91b2, 0x0053, 0x1a0c, 0x0d84, 0x91b2, 0x0040,
++ 0x1a04, 0x9d09, 0x0002, 0x9cf7, 0x9cf7, 0x9ced, 0x9cf7, 0x9cf7,
++ 0x9cf7, 0x9ceb, 0x9ceb, 0x9ceb, 0x9ceb, 0x9ceb, 0x9ceb, 0x9ceb,
++ 0x9ceb, 0x9ceb, 0x9ceb, 0x9ceb, 0x9ceb, 0x9ceb, 0x9ceb, 0x9ceb,
++ 0x9ceb, 0x9ceb, 0x9ceb, 0x9ceb, 0x9ceb, 0x9ceb, 0x9ceb, 0x9ceb,
++ 0x9ceb, 0x9ceb, 0x9cf7, 0x9ceb, 0x9cf7, 0x9cf7, 0x9ceb, 0x9ceb,
++ 0x9ceb, 0x9ceb, 0x9ceb, 0x9ced, 0x9ceb, 0x9ceb, 0x9ceb, 0x9ceb,
++ 0x9ceb, 0x9ceb, 0x9ceb, 0x9ceb, 0x9ceb, 0x9cf7, 0x9cf7, 0x9ceb,
++ 0x9ceb, 0x9ceb, 0x9ceb, 0x9ceb, 0x9ceb, 0x9ceb, 0x9ceb, 0x9ceb,
++ 0x9cf7, 0x9ceb, 0x9ceb, 0x080c, 0x0d84, 0x0066, 0x00b6, 0x6610,
++ 0x2658, 0xb8bc, 0xc08c, 0xb8be, 0x00be, 0x006e, 0x0000, 0x6003,
++ 0x0001, 0x6106, 0x9186, 0x0032, 0x0118, 0x080c, 0x7c1d, 0x0010,
++ 0x080c, 0x7bcb, 0x0126, 0x2091, 0x8000, 0x080c, 0x8125, 0x012e,
++ 0x0005, 0x2600, 0x0002, 0x9d1d, 0x9d1d, 0x9d1d, 0x9cf7, 0x9cf7,
++ 0x9d1d, 0x9d1d, 0x9d1d, 0x9d1d, 0x9cf7, 0x9d1d, 0x9cf7, 0x9d1d,
++ 0x9cf7, 0x9d1d, 0x9d1d, 0x9d1d, 0x9d1d, 0x080c, 0x0d84, 0x6004,
++ 0x90b2, 0x0053, 0x1a0c, 0x0d84, 0x91b6, 0x0013, 0x0904, 0x9dd4,
++ 0x91b6, 0x0027, 0x1904, 0x9d8f, 0x080c, 0x8026, 0x6004, 0x080c,
++ 0xb284, 0x01a8, 0x080c, 0xb295, 0x01a0, 0x908e, 0x0021, 0x0904,
++ 0x9d8c, 0x908e, 0x0022, 0x1130, 0x080c, 0x994c, 0x0904, 0x9d88,
++ 0x0804, 0x9d89, 0x908e, 0x003d, 0x0904, 0x9d8c, 0x04d8, 0x080c,
++ 0x2d3f, 0x2001, 0x0007, 0x080c, 0x5b61, 0x6010, 0x00b6, 0x2058,
++ 0xb9a0, 0x00be, 0x080c, 0x9e99, 0x9186, 0x007e, 0x1148, 0x2001,
++ 0x1836, 0x2014, 0xc285, 0x080c, 0x6877, 0x1108, 0xc2ad, 0x2202,
++ 0x0036, 0x2019, 0x0028, 0x080c, 0x2e2f, 0x003e, 0x0016, 0x0026,
++ 0x0036, 0x2110, 0x2019, 0x0028, 0x080c, 0x7d55, 0x0076, 0x903e,
++ 0x080c, 0x7c4d, 0x6010, 0x00b6, 0x905d, 0x0100, 0x00be, 0x2c08,
++ 0x080c, 0xc73e, 0x007e, 0x003e, 0x002e, 0x001e, 0x080c, 0xb76c,
++ 0x080c, 0x5bd1, 0x080c, 0xb4de, 0x080c, 0x9554, 0x080c, 0x8125,
++ 0x0005, 0x080c, 0x9e99, 0x0cb0, 0x080c, 0x9ed5, 0x0c98, 0x9186,
++ 0x0014, 0x1db0, 0x080c, 0x8026, 0x6004, 0x908e, 0x0022, 0x1118,
++ 0x080c, 0x994c, 0x0d68, 0x080c, 0x2d1a, 0x080c, 0xb76c, 0x080c,
++ 0xb284, 0x1190, 0x080c, 0x2d3f, 0x6010, 0x00b6, 0x2058, 0xb9a0,
++ 0x00be, 0x080c, 0x9e99, 0x9186, 0x007e, 0x1128, 0x2001, 0x1836,
++ 0x200c, 0xc185, 0x2102, 0x0870, 0x080c, 0xb295, 0x1118, 0x080c,
++ 0x9e99, 0x0840, 0x6004, 0x908e, 0x0032, 0x1160, 0x00e6, 0x00f6,
++ 0x2071, 0x1893, 0x2079, 0x0000, 0x080c, 0x308f, 0x00fe, 0x00ee,
++ 0x0804, 0x9d82, 0x6004, 0x908e, 0x0021, 0x0d48, 0x908e, 0x0022,
++ 0x090c, 0x9e99, 0x0804, 0x9d82, 0x90b2, 0x0040, 0x1a04, 0x9e82,
++ 0x2008, 0x0002, 0x9e1c, 0x9e1d, 0x9e20, 0x9e23, 0x9e26, 0x9e29,
++ 0x9e1a, 0x9e1a, 0x9e1a, 0x9e1a, 0x9e1a, 0x9e1a, 0x9e1a, 0x9e1a,
++ 0x9e1a, 0x9e1a, 0x9e1a, 0x9e1a, 0x9e1a, 0x9e1a, 0x9e1a, 0x9e1a,
++ 0x9e1a, 0x9e1a, 0x9e1a, 0x9e1a, 0x9e1a, 0x9e1a, 0x9e1a, 0x9e1a,
++ 0x9e2c, 0x9e37, 0x9e1a, 0x9e39, 0x9e37, 0x9e1a, 0x9e1a, 0x9e1a,
++ 0x9e1a, 0x9e1a, 0x9e37, 0x9e37, 0x9e1a, 0x9e1a, 0x9e1a, 0x9e1a,
++ 0x9e1a, 0x9e1a, 0x9e1a, 0x9e1a, 0x9e69, 0x9e37, 0x9e1a, 0x9e33,
++ 0x9e1a, 0x9e1a, 0x9e1a, 0x9e34, 0x9e1a, 0x9e1a, 0x9e1a, 0x9e37,
++ 0x9e60, 0x9e1a, 0x080c, 0x0d84, 0x00d0, 0x2001, 0x000b, 0x0410,
++ 0x2001, 0x0003, 0x00f8, 0x2001, 0x0005, 0x00e0, 0x2001, 0x0001,
++ 0x00c8, 0x2001, 0x0009, 0x00b0, 0x080c, 0x8026, 0x6003, 0x0005,
++ 0x080c, 0x8125, 0x0070, 0x0018, 0x0010, 0x080c, 0x5b61, 0x0804,
++ 0x9e7a, 0x080c, 0x8026, 0x080c, 0xb76f, 0x6003, 0x0004, 0x080c,
++ 0x8125, 0x0005, 0x080c, 0x5b61, 0x080c, 0x8026, 0x6003, 0x0002,
++ 0x0036, 0x2019, 0x185d, 0x2304, 0x9084, 0xff00, 0x1120, 0x2001,
++ 0x1953, 0x201c, 0x0040, 0x8007, 0x909a, 0x0004, 0x0ec0, 0x8003,
++ 0x801b, 0x831b, 0x9318, 0x631a, 0x003e, 0x080c, 0x8125, 0x0c08,
++ 0x080c, 0x8026, 0x080c, 0xb4de, 0x080c, 0x9554, 0x080c, 0x8125,
++ 0x08c0, 0x00e6, 0x00f6, 0x2071, 0x1893, 0x2079, 0x0000, 0x080c,
++ 0x308f, 0x00fe, 0x00ee, 0x080c, 0x8026, 0x080c, 0x9554, 0x080c,
++ 0x8125, 0x0838, 0x080c, 0x8026, 0x6003, 0x0002, 0x080c, 0xb76f,
++ 0x0804, 0x8125, 0x2600, 0x2008, 0x0002, 0x9e97, 0x9e97, 0x9e97,
++ 0x9e7a, 0x9e7a, 0x9e97, 0x9e97, 0x9e97, 0x9e97, 0x9e7a, 0x9e97,
++ 0x9e7a, 0x9e97, 0x9e7a, 0x9e97, 0x9e97, 0x9e97, 0x9e97, 0x080c,
++ 0x0d84, 0x00e6, 0x0096, 0x0026, 0x0016, 0x080c, 0xb0ad, 0x0568,
++ 0x6014, 0x2048, 0xa864, 0x9086, 0x0139, 0x11a8, 0xa894, 0x9086,
++ 0x0056, 0x1148, 0x080c, 0x4b95, 0x0130, 0x2001, 0x0000, 0x900e,
++ 0x2011, 0x4000, 0x0028, 0x2001, 0x0030, 0x900e, 0x2011, 0x4005,
++ 0x080c, 0xb644, 0x0090, 0xa868, 0xd0fc, 0x0178, 0xa807, 0x0000,
++ 0x0016, 0x6004, 0x908e, 0x0021, 0x0168, 0x908e, 0x003d, 0x0150,
++ 0x001e, 0xa867, 0x0103, 0xa833, 0x0100, 0x001e, 0x002e, 0x009e,
++ 0x00ee, 0x0005, 0x001e, 0x0009, 0x0cc0, 0x0096, 0x6014, 0x2048,
++ 0xa800, 0x2048, 0xa867, 0x0103, 0xa823, 0x8001, 0x009e, 0x0005,
++ 0x00b6, 0x6610, 0x2658, 0xb804, 0x9084, 0x00ff, 0x90b2, 0x000c,
++ 0x1a0c, 0x0d84, 0x6604, 0x96b6, 0x004d, 0x1120, 0x080c, 0xb56a,
++ 0x0804, 0x9f5d, 0x6604, 0x96b6, 0x0043, 0x1120, 0x080c, 0xb5b3,
++ 0x0804, 0x9f5d, 0x6604, 0x96b6, 0x004b, 0x1120, 0x080c, 0xb5df,
++ 0x0804, 0x9f5d, 0x6604, 0x96b6, 0x0033, 0x1120, 0x080c, 0xb500,
++ 0x0804, 0x9f5d, 0x6604, 0x96b6, 0x0028, 0x1120, 0x080c, 0xb2c4,
++ 0x0804, 0x9f5d, 0x6604, 0x96b6, 0x0029, 0x1120, 0x080c, 0xb305,
++ 0x0804, 0x9f5d, 0x6604, 0x96b6, 0x001f, 0x1118, 0x080c, 0x98f5,
++ 0x04e0, 0x6604, 0x96b6, 0x0000, 0x1118, 0x080c, 0x9c17, 0x04a8,
++ 0x6604, 0x96b6, 0x0022, 0x1118, 0x080c, 0x992d, 0x0470, 0x6604,
++ 0x96b6, 0x0035, 0x1118, 0x080c, 0x9a3d, 0x0438, 0x6604, 0x96b6,
++ 0x0039, 0x1118, 0x080c, 0x9baf, 0x0400, 0x6604, 0x96b6, 0x003d,
++ 0x1118, 0x080c, 0x9965, 0x00c8, 0x6604, 0x96b6, 0x0044, 0x1118,
++ 0x080c, 0x99a1, 0x0090, 0x6604, 0x96b6, 0x0049, 0x1118, 0x080c,
++ 0x99cc, 0x0058, 0x91b6, 0x0015, 0x1110, 0x0063, 0x0030, 0x91b6,
++ 0x0016, 0x1128, 0x00be, 0x0804, 0xa178, 0x00be, 0x0005, 0x080c,
++ 0x95e9, 0x0cd8, 0x9f7a, 0x9f7d, 0x9f7a, 0x9fc2, 0x9f7a, 0xa0f1,
++ 0xa185, 0x9f7a, 0x9f7a, 0xa152, 0x9f7a, 0xa166, 0x0096, 0x080c,
++ 0x1489, 0x6014, 0x2048, 0xa800, 0x2048, 0xa867, 0x0103, 0x009e,
++ 0x0804, 0x9554, 0xa001, 0xa001, 0x0005, 0x00e6, 0x2071, 0x1800,
++ 0x7088, 0x9086, 0x0074, 0x1540, 0x080c, 0xc70f, 0x11b0, 0x6010,
++ 0x00b6, 0x2058, 0x7030, 0xd08c, 0x0128, 0xb800, 0xd0bc, 0x0110,
++ 0xc0c5, 0xb802, 0x00e9, 0x00be, 0x2001, 0x0006, 0x080c, 0x5b61,
++ 0x080c, 0x2d3f, 0x080c, 0x9554, 0x0088, 0x2001, 0x000a, 0x080c,
++ 0x5b61, 0x080c, 0x2d3f, 0x6003, 0x0001, 0x6007, 0x0001, 0x080c,
++ 0x7c1d, 0x080c, 0x8125, 0x0010, 0x080c, 0xa0dc, 0x00ee, 0x0005,
++ 0x00d6, 0xb800, 0xd084, 0x0160, 0x9006, 0x080c, 0x5b4d, 0x2069,
++ 0x1852, 0x6804, 0xd0a4, 0x0120, 0x2001, 0x0006, 0x080c, 0x5b8d,
++ 0x00de, 0x0005, 0x00b6, 0x0096, 0x00d6, 0x2011, 0x1822, 0x2204,
++ 0x9086, 0x0074, 0x1904, 0xa0c0, 0x6010, 0x2058, 0xbaa0, 0x9286,
++ 0x007e, 0x1120, 0x080c, 0xa2c7, 0x0804, 0xa025, 0x080c, 0xa2bc,
++ 0x6010, 0x2058, 0xbaa0, 0x9286, 0x0080, 0x1510, 0x6014, 0x9005,
++ 0x01a8, 0x2048, 0xa864, 0x9084, 0x00ff, 0x9086, 0x0039, 0x1140,
++ 0x2001, 0x0000, 0x900e, 0x2011, 0x4000, 0x080c, 0xb644, 0x0030,
++ 0xa807, 0x0000, 0xa867, 0x0103, 0xa833, 0x0200, 0x2001, 0x0006,
++ 0x080c, 0x5b61, 0x080c, 0x2d3f, 0x080c, 0x9554, 0x0804, 0xa0c1,
++ 0x080c, 0xa0c5, 0x6014, 0x9005, 0x0190, 0x2048, 0xa868, 0xd0f4,
++ 0x0170, 0xa864, 0x9084, 0x00ff, 0x9086, 0x0039, 0x1d08, 0x2001,
++ 0x0000, 0x900e, 0x2011, 0x4000, 0x080c, 0xb644, 0x08f8, 0x2001,
++ 0x0004, 0x080c, 0x5b61, 0x6003, 0x0001, 0x6007, 0x0003, 0x080c,
++ 0x7c1d, 0x080c, 0x8125, 0x0804, 0xa0c1, 0xb85c, 0xd0e4, 0x01d0,
++ 0x080c, 0xb480, 0x080c, 0x6877, 0x0110, 0xd0dc, 0x1938, 0x2011,
++ 0x1836, 0x2204, 0xc0ad, 0x2012, 0x2001, 0x193c, 0x2004, 0x00f6,
++ 0x2079, 0x0100, 0x78e3, 0x0000, 0x080c, 0x2471, 0x78e2, 0x00fe,
++ 0x0804, 0x9ff6, 0x080c, 0xb4bd, 0x2011, 0x1836, 0x2204, 0xc0a5,
++ 0x2012, 0x0006, 0x080c, 0xc860, 0x000e, 0x1904, 0x9ff6, 0xc0b5,
++ 0x2012, 0x2001, 0x0006, 0x080c, 0x5b61, 0x9006, 0x080c, 0x5b4d,
++ 0x00c6, 0x2001, 0x180e, 0x2004, 0xd09c, 0x0520, 0x00f6, 0x2079,
++ 0x0100, 0x00e6, 0x2071, 0x1800, 0x700c, 0x9084, 0x00ff, 0x78e6,
++ 0x7076, 0x7010, 0x78ea, 0x707a, 0x908c, 0x00ff, 0x00ee, 0x780c,
++ 0xc0b5, 0x780e, 0x00fe, 0x080c, 0x2446, 0x00f6, 0x2100, 0x900e,
++ 0x080c, 0x23fd, 0x7956, 0x00fe, 0x9186, 0x0081, 0x01d8, 0x2009,
++ 0x0081, 0x00c8, 0x2009, 0x00ef, 0x00f6, 0x2079, 0x0100, 0x79ea,
++ 0x7932, 0x7936, 0x780c, 0xc0b5, 0x780e, 0x00fe, 0x080c, 0x2446,
++ 0x00f6, 0x2079, 0x1800, 0x797a, 0x2100, 0x900e, 0x080c, 0x23fd,
++ 0x7956, 0x00fe, 0x8108, 0x080c, 0x5bb0, 0x2b00, 0x00ce, 0x1904,
++ 0x9ff6, 0x6012, 0x2009, 0x180e, 0x210c, 0xd19c, 0x0150, 0x2009,
++ 0x027c, 0x210c, 0x918c, 0x00ff, 0xb912, 0x2009, 0x027d, 0x210c,
++ 0xb916, 0x2001, 0x0002, 0x080c, 0x5b61, 0x6023, 0x0001, 0x6003,
++ 0x0001, 0x6007, 0x0002, 0x080c, 0x7c1d, 0x080c, 0x8125, 0x0008,
++ 0x00d9, 0x00de, 0x009e, 0x00be, 0x0005, 0x00e6, 0x080c, 0xccd1,
++ 0x0188, 0x2071, 0x0260, 0x7108, 0x720c, 0x918c, 0x00ff, 0x1118,
++ 0x9284, 0xff00, 0x0138, 0x6010, 0x2058, 0xb8a0, 0xd0bc, 0x1110,
++ 0xb912, 0xba16, 0x00ee, 0x0005, 0x2030, 0x2001, 0x0007, 0x080c,
++ 0x5b61, 0x080c, 0x4dfe, 0x1120, 0x2001, 0x0007, 0x080c, 0x5b8d,
++ 0x080c, 0x2d3f, 0x6020, 0x9086, 0x000a, 0x1108, 0x0005, 0x0804,
++ 0x9554, 0x00b6, 0x00e6, 0x0026, 0x0016, 0x2071, 0x1800, 0x7088,
++ 0x9086, 0x0014, 0x1904, 0xa149, 0x080c, 0x4dfe, 0x1170, 0x6014,
++ 0x9005, 0x1158, 0x0036, 0x0046, 0x6010, 0x2058, 0xbba0, 0x2021,
++ 0x0006, 0x080c, 0x44f9, 0x004e, 0x003e, 0x00d6, 0x6010, 0x2058,
++ 0x080c, 0x5ca8, 0x080c, 0x9fb0, 0x00de, 0x080c, 0xa38d, 0x1588,
++ 0x6010, 0x2058, 0xb890, 0x9005, 0x0560, 0x2001, 0x0006, 0x080c,
++ 0x5b61, 0x0096, 0x6014, 0x904d, 0x01d0, 0xa864, 0x9084, 0x00ff,
++ 0x9086, 0x0039, 0x1140, 0x2001, 0x0000, 0x900e, 0x2011, 0x4000,
++ 0x080c, 0xb644, 0x0060, 0xa864, 0x9084, 0x00ff, 0x9086, 0x0029,
++ 0x0130, 0xa807, 0x0000, 0xa867, 0x0103, 0xa833, 0x0200, 0x009e,
++ 0x080c, 0x2d3f, 0x6020, 0x9086, 0x000a, 0x0138, 0x080c, 0x9554,
++ 0x0020, 0x080c, 0x9e99, 0x080c, 0xa0dc, 0x001e, 0x002e, 0x00ee,
++ 0x00be, 0x0005, 0x2011, 0x1822, 0x2204, 0x9086, 0x0014, 0x1160,
++ 0x2001, 0x0002, 0x080c, 0x5b61, 0x6003, 0x0001, 0x6007, 0x0001,
++ 0x080c, 0x7c1d, 0x0804, 0x8125, 0x0804, 0xa0dc, 0x2030, 0x2011,
++ 0x1822, 0x2204, 0x9086, 0x0004, 0x1148, 0x96b6, 0x000b, 0x1120,
++ 0x2001, 0x0007, 0x080c, 0x5b61, 0x0804, 0x9554, 0x0804, 0xa0dc,
++ 0x0002, 0x9f7a, 0xa190, 0x9f7a, 0xa1cf, 0x9f7a, 0xa278, 0xa185,
++ 0x9f7a, 0x9f7a, 0xa28b, 0x9f7a, 0xa29b, 0x6604, 0x9686, 0x0003,
++ 0x0904, 0xa0f1, 0x96b6, 0x001e, 0x1110, 0x080c, 0x9554, 0x0005,
++ 0x00b6, 0x00d6, 0x00c6, 0x080c, 0xa2ab, 0x11a0, 0x9006, 0x080c,
++ 0x5b4d, 0x080c, 0x2d1a, 0x080c, 0xb76c, 0x2001, 0x0002, 0x080c,
++ 0x5b61, 0x6003, 0x0001, 0x6007, 0x0002, 0x080c, 0x7c1d, 0x080c,
++ 0x8125, 0x0408, 0x2009, 0x026e, 0x2104, 0x9086, 0x0009, 0x1160,
++ 0x6010, 0x2058, 0xb840, 0x9084, 0x00ff, 0x9005, 0x0170, 0x8001,
++ 0xb842, 0x601b, 0x000a, 0x0078, 0x2009, 0x026f, 0x2104, 0x9084,
++ 0xff00, 0x9086, 0x1900, 0x1108, 0x08a0, 0x080c, 0x2d1a, 0x080c,
++ 0xb76c, 0x080c, 0xa0dc, 0x00ce, 0x00de, 0x00be, 0x0005, 0x0096,
++ 0x00b6, 0x0026, 0x9016, 0x080c, 0xa2b9, 0x00d6, 0x2069, 0x194b,
++ 0x2d04, 0x9005, 0x0168, 0x6010, 0x2058, 0xb8a0, 0x9086, 0x007e,
++ 0x1138, 0x2069, 0x181e, 0x2d04, 0x8000, 0x206a, 0x00de, 0x0010,
++ 0x00de, 0x0088, 0x9006, 0x080c, 0x5b4d, 0x2001, 0x0002, 0x080c,
++ 0x5b61, 0x6003, 0x0001, 0x6007, 0x0002, 0x080c, 0x7c1d, 0x080c,
++ 0x8125, 0x0804, 0xa248, 0x080c, 0xb0ad, 0x01a0, 0x6014, 0x2048,
++ 0xa864, 0x2010, 0x9086, 0x0139, 0x1128, 0x2001, 0x0002, 0x080c,
++ 0xb69a, 0x00b0, 0x6014, 0x2048, 0xa864, 0xd0fc, 0x0118, 0x2001,
++ 0x0001, 0x0ca8, 0x2001, 0x180d, 0x2004, 0xd0dc, 0x0148, 0x6010,
++ 0x2058, 0xb840, 0x9084, 0x00ff, 0x9005, 0x1110, 0x9006, 0x0c38,
++ 0x080c, 0x9e99, 0x2009, 0x026e, 0x2134, 0x96b4, 0x00ff, 0x9686,
++ 0x0005, 0x0510, 0x9686, 0x000b, 0x01c8, 0x2009, 0x026f, 0x2104,
++ 0x9084, 0xff00, 0x1118, 0x9686, 0x0009, 0x01b0, 0x9086, 0x1900,
++ 0x1168, 0x9686, 0x0009, 0x0180, 0x2001, 0x0004, 0x080c, 0x5b61,
++ 0x2001, 0x0028, 0x601a, 0x6007, 0x0052, 0x0010, 0x080c, 0xa0dc,
++ 0x002e, 0x00be, 0x009e, 0x0005, 0x9286, 0x0139, 0x0160, 0x6014,
++ 0x2048, 0x080c, 0xb0ad, 0x0140, 0xa864, 0x9086, 0x0139, 0x0118,
++ 0xa868, 0xd0fc, 0x0108, 0x0c50, 0x6010, 0x2058, 0xb840, 0x9084,
++ 0x00ff, 0x9005, 0x0138, 0x8001, 0xb842, 0x601b, 0x000a, 0x6007,
++ 0x0016, 0x08f0, 0xb8a0, 0x9086, 0x007e, 0x1138, 0x00e6, 0x2071,
++ 0x1800, 0x080c, 0x5677, 0x00ee, 0x0010, 0x080c, 0x2d1a, 0x0870,
++ 0x080c, 0xa2b9, 0x1160, 0x2001, 0x0004, 0x080c, 0x5b61, 0x6003,
++ 0x0001, 0x6007, 0x0003, 0x080c, 0x7c1d, 0x0804, 0x8125, 0x080c,
++ 0x9e99, 0x0804, 0xa0dc, 0x0469, 0x1160, 0x2001, 0x0008, 0x080c,
++ 0x5b61, 0x6003, 0x0001, 0x6007, 0x0005, 0x080c, 0x7c1d, 0x0804,
++ 0x8125, 0x0804, 0xa0dc, 0x00e9, 0x1160, 0x2001, 0x000a, 0x080c,
++ 0x5b61, 0x6003, 0x0001, 0x6007, 0x0001, 0x080c, 0x7c1d, 0x0804,
++ 0x8125, 0x0804, 0xa0dc, 0x2009, 0x026e, 0x2104, 0x9086, 0x0003,
++ 0x1138, 0x2009, 0x026f, 0x2104, 0x9084, 0xff00, 0x9086, 0x2a00,
++ 0x0005, 0x9085, 0x0001, 0x0005, 0x00b6, 0x00c6, 0x0016, 0x6110,
++ 0x2158, 0x080c, 0x5c1c, 0x001e, 0x00ce, 0x00be, 0x0005, 0x00b6,
++ 0x00f6, 0x00e6, 0x00d6, 0x0036, 0x0016, 0x6010, 0x2058, 0x2009,
++ 0x1836, 0x2104, 0x9085, 0x0003, 0x200a, 0x080c, 0xa35f, 0x0560,
++ 0x2009, 0x1836, 0x2104, 0xc0cd, 0x200a, 0x080c, 0x5f29, 0x0158,
++ 0x9006, 0x2020, 0x2009, 0x002a, 0x080c, 0xc9c5, 0x2001, 0x180c,
++ 0x200c, 0xc195, 0x2102, 0x2019, 0x002a, 0x2009, 0x0001, 0x080c,
++ 0x2ce5, 0x00e6, 0x2071, 0x1800, 0x080c, 0x2b1e, 0x00ee, 0x00c6,
++ 0x0156, 0x20a9, 0x0781, 0x2009, 0x007f, 0x080c, 0x2e11, 0x8108,
++ 0x1f04, 0xa2fd, 0x015e, 0x00ce, 0x080c, 0xa2bc, 0x2071, 0x0260,
++ 0x2079, 0x0200, 0x7817, 0x0001, 0x2001, 0x1836, 0x200c, 0xc1c5,
++ 0x7018, 0xd0fc, 0x0110, 0xd0dc, 0x0118, 0x7038, 0xd0dc, 0x1108,
++ 0xc1c4, 0x7817, 0x0000, 0x2001, 0x1836, 0x2102, 0x2079, 0x0100,
++ 0x2e04, 0x9084, 0x00ff, 0x2069, 0x181d, 0x206a, 0x78e6, 0x0006,
++ 0x8e70, 0x2e04, 0x2069, 0x181e, 0x206a, 0x78ea, 0x7832, 0x7836,
++ 0x2010, 0x9084, 0xff00, 0x001e, 0x9105, 0x2009, 0x182a, 0x200a,
++ 0x2200, 0x9084, 0x00ff, 0x2008, 0x080c, 0x2446, 0x080c, 0x6877,
++ 0x0170, 0x2071, 0x0260, 0x2069, 0x194f, 0x7048, 0x206a, 0x704c,
++ 0x6806, 0x7050, 0x680a, 0x7054, 0x680e, 0x080c, 0xb480, 0x0040,
++ 0x2001, 0x0006, 0x080c, 0x5b61, 0x080c, 0x2d3f, 0x080c, 0x9554,
++ 0x001e, 0x003e, 0x00de, 0x00ee, 0x00fe, 0x00be, 0x0005, 0x0096,
++ 0x0026, 0x0036, 0x00e6, 0x0156, 0x2019, 0x182a, 0x231c, 0x83ff,
++ 0x01f0, 0x2071, 0x0260, 0x7200, 0x9294, 0x00ff, 0x7004, 0x9084,
++ 0xff00, 0x9205, 0x9306, 0x1198, 0x2011, 0x0276, 0x20a9, 0x0004,
++ 0x2b48, 0x2019, 0x000a, 0x080c, 0xa439, 0x1148, 0x2011, 0x027a,
++ 0x20a9, 0x0004, 0x2019, 0x0006, 0x080c, 0xa439, 0x1100, 0x015e,
++ 0x00ee, 0x003e, 0x002e, 0x009e, 0x0005, 0x00e6, 0x2071, 0x0260,
++ 0x7034, 0x9086, 0x0014, 0x11a8, 0x7038, 0x9086, 0x0800, 0x1188,
++ 0x703c, 0xd0ec, 0x0160, 0x9084, 0x0f00, 0x9086, 0x0100, 0x1138,
++ 0x7054, 0xd0a4, 0x1110, 0xd0ac, 0x0110, 0x9006, 0x0010, 0x9085,
++ 0x0001, 0x00ee, 0x0005, 0x00e6, 0x0096, 0x00c6, 0x0076, 0x0056,
++ 0x0046, 0x0026, 0x0006, 0x0126, 0x2091, 0x8000, 0x2029, 0x19bd,
++ 0x252c, 0x2021, 0x19c3, 0x2424, 0x2061, 0x1cd0, 0x2071, 0x1800,
++ 0x724c, 0x706c, 0x9202, 0x1a04, 0xa411, 0x080c, 0xc9f1, 0x0904,
++ 0xa40a, 0x6720, 0x9786, 0x0007, 0x05e8, 0x2500, 0x9c06, 0x05d0,
++ 0x2400, 0x9c06, 0x05b8, 0x3e08, 0x9186, 0x0002, 0x1148, 0x6010,
++ 0x9005, 0x0130, 0x00b6, 0x2058, 0xb800, 0x00be, 0xd0bc, 0x1550,
++ 0x00c6, 0x6000, 0x9086, 0x0004, 0x1110, 0x080c, 0x17b0, 0x9786,
++ 0x0008, 0x1148, 0x080c, 0xb295, 0x1130, 0x00ce, 0x080c, 0x9e99,
++ 0x080c, 0x9584, 0x00b8, 0x6014, 0x2048, 0x080c, 0xb0ad, 0x0178,
++ 0x9786, 0x0003, 0x1500, 0x080c, 0xc810, 0x0110, 0xa867, 0x0103,
++ 0xab7a, 0xa877, 0x0000, 0x080c, 0x619c, 0x080c, 0xb278, 0x080c,
++ 0x9584, 0x00ce, 0x9ce0, 0x0018, 0x7060, 0x9c02, 0x1210, 0x0804,
++ 0xa3c0, 0x012e, 0x000e, 0x002e, 0x004e, 0x005e, 0x007e, 0x00ce,
++ 0x009e, 0x00ee, 0x0005, 0x9786, 0x0006, 0x1118, 0x080c, 0xc970,
++ 0x0c30, 0x9786, 0x000a, 0x09e0, 0x08b0, 0x220c, 0x2304, 0x9106,
++ 0x1130, 0x8210, 0x8318, 0x1f04, 0xa425, 0x9006, 0x0005, 0x2304,
++ 0x9102, 0x0218, 0x2001, 0x0001, 0x0008, 0x9006, 0x918d, 0x0001,
++ 0x0005, 0x0136, 0x01c6, 0x0016, 0x8906, 0x8006, 0x8007, 0x908c,
++ 0x003f, 0x21e0, 0x9084, 0xffc0, 0x9300, 0x2098, 0x3518, 0x20a9,
++ 0x0001, 0x220c, 0x4002, 0x910e, 0x1140, 0x8210, 0x8319, 0x1dc8,
++ 0x9006, 0x001e, 0x01ce, 0x013e, 0x0005, 0x220c, 0x9102, 0x0218,
++ 0x2001, 0x0001, 0x0010, 0x2001, 0x0000, 0x918d, 0x0001, 0x001e,
++ 0x01ce, 0x013e, 0x0005, 0x6004, 0x908a, 0x0053, 0x1a0c, 0x0d84,
++ 0x080c, 0xb284, 0x0120, 0x080c, 0xb295, 0x0168, 0x0028, 0x080c,
++ 0x2d3f, 0x080c, 0xb295, 0x0138, 0x080c, 0x8026, 0x080c, 0x9554,
++ 0x080c, 0x8125, 0x0005, 0x080c, 0x9e99, 0x0cb0, 0x9182, 0x0040,
++ 0x0002, 0xa495, 0xa495, 0xa495, 0xa495, 0xa495, 0xa495, 0xa495,
++ 0xa495, 0xa495, 0xa495, 0xa495, 0xa497, 0xa497, 0xa497, 0xa497,
++ 0xa495, 0xa495, 0xa495, 0xa497, 0xa495, 0x080c, 0x0d84, 0x600b,
++ 0xffff, 0x6003, 0x0001, 0x6106, 0x080c, 0x7bcb, 0x0126, 0x2091,
++ 0x8000, 0x080c, 0x8125, 0x012e, 0x0005, 0x9186, 0x0013, 0x1128,
++ 0x6004, 0x9082, 0x0040, 0x0804, 0xa536, 0x9186, 0x0027, 0x11f0,
++ 0x080c, 0x8026, 0x080c, 0x2d1a, 0x080c, 0xb76c, 0x0096, 0x6114,
++ 0x2148, 0x080c, 0xb0ad, 0x0168, 0xa867, 0x0103, 0xa87b, 0x0029,
++ 0xa877, 0x0000, 0xa97c, 0xc1c5, 0xa97e, 0x080c, 0x61a9, 0x080c,
++ 0xb278, 0x009e, 0x080c, 0x9554, 0x0804, 0x8125, 0x9186, 0x0014,
++ 0x1120, 0x6004, 0x9082, 0x0040, 0x0440, 0x9186, 0x0046, 0x0150,
++ 0x9186, 0x0045, 0x0138, 0x9186, 0x0053, 0x0120, 0x9186, 0x0048,
++ 0x190c, 0x0d84, 0x2001, 0x0109, 0x2004, 0xd084, 0x01a8, 0x0126,
++ 0x2091, 0x2800, 0x0006, 0x0016, 0x0026, 0x0036, 0x080c, 0x7ab7,
++ 0x003e, 0x002e, 0x001e, 0x000e, 0x012e, 0xa001, 0x6000, 0x9086,
++ 0x0002, 0x1110, 0x0804, 0xa574, 0x0005, 0x0002, 0xa514, 0xa512,
++ 0xa512, 0xa512, 0xa512, 0xa512, 0xa512, 0xa512, 0xa512, 0xa512,
++ 0xa512, 0xa52f, 0xa52f, 0xa52f, 0xa52f, 0xa512, 0xa52f, 0xa512,
++ 0xa52f, 0xa512, 0x080c, 0x0d84, 0x080c, 0x8026, 0x0096, 0x6114,
++ 0x2148, 0x080c, 0xb0ad, 0x0168, 0xa867, 0x0103, 0xa87b, 0x0006,
++ 0xa877, 0x0000, 0xa880, 0xc0ec, 0xa882, 0x080c, 0x61a9, 0x080c,
++ 0xb278, 0x009e, 0x080c, 0x9554, 0x080c, 0x8125, 0x0005, 0x080c,
++ 0x8026, 0x080c, 0x9554, 0x080c, 0x8125, 0x0005, 0x0002, 0xa54d,
++ 0xa54b, 0xa54b, 0xa54b, 0xa54b, 0xa54b, 0xa54b, 0xa54b, 0xa54b,
++ 0xa54b, 0xa54b, 0xa564, 0xa564, 0xa564, 0xa564, 0xa54b, 0xa56e,
++ 0xa54b, 0xa564, 0xa54b, 0x080c, 0x0d84, 0x0096, 0x080c, 0x8026,
++ 0x6014, 0x2048, 0x2001, 0x1955, 0x2004, 0x6042, 0xa97c, 0xd1ac,
++ 0x0140, 0x6003, 0x0004, 0xa87c, 0x9085, 0x0400, 0xa87e, 0x009e,
++ 0x0005, 0x6003, 0x0002, 0x0cb8, 0x080c, 0x8026, 0x080c, 0xb76f,
++ 0x080c, 0xb774, 0x6003, 0x000f, 0x0804, 0x8125, 0x080c, 0x8026,
++ 0x080c, 0x9554, 0x0804, 0x8125, 0x9182, 0x0040, 0x0002, 0xa58b,
++ 0xa58b, 0xa58b, 0xa58b, 0xa58b, 0xa58d, 0xa66a, 0xa58b, 0xa58b,
++ 0xa58b, 0xa58b, 0xa58b, 0xa58b, 0xa58b, 0xa58b, 0xa58b, 0xa58b,
++ 0xa58b, 0xa58b, 0xa69e, 0x080c, 0x0d84, 0x00b6, 0x0096, 0x6114,
++ 0x2148, 0x7644, 0x96b4, 0x0fff, 0x86ff, 0x1528, 0x6010, 0x2058,
++ 0xb800, 0xd0bc, 0x1904, 0xa659, 0xa87b, 0x0000, 0xa867, 0x0103,
++ 0xae76, 0xa87c, 0xd0ac, 0x0128, 0xa834, 0xa938, 0x9115, 0x190c,
++ 0xa82a, 0x080c, 0x5fda, 0x6210, 0x2258, 0xba3c, 0x82ff, 0x0110,
++ 0x8211, 0xba3e, 0x7044, 0xd0e4, 0x1904, 0xa63d, 0x080c, 0x9554,
++ 0x009e, 0x00be, 0x0005, 0x968c, 0x0c00, 0x0150, 0x6010, 0x2058,
++ 0xb800, 0xd0bc, 0x1904, 0xa641, 0x7348, 0xab92, 0x734c, 0xab8e,
++ 0x968c, 0x00ff, 0x9186, 0x0002, 0x0508, 0x9186, 0x0028, 0x1118,
++ 0xa87b, 0x001c, 0x00e8, 0xd6dc, 0x01a0, 0xa87b, 0x0015, 0xa87c,
++ 0xd0ac, 0x0170, 0xa938, 0xaa34, 0x2100, 0x9205, 0x0148, 0x7048,
++ 0x9106, 0x1118, 0x704c, 0x9206, 0x0118, 0xa992, 0xaa8e, 0xc6dc,
++ 0x0038, 0xd6d4, 0x0118, 0xa87b, 0x0007, 0x0010, 0xa87b, 0x0000,
++ 0xa867, 0x0103, 0xae76, 0x901e, 0xd6c4, 0x01d8, 0x9686, 0x0100,
++ 0x1130, 0x7064, 0x9005, 0x1118, 0xc6c4, 0x0804, 0xa594, 0x735c,
++ 0xab86, 0x83ff, 0x0170, 0x938a, 0x0009, 0x0210, 0x2019, 0x0008,
++ 0x0036, 0x2308, 0x2019, 0x0018, 0x2011, 0x0025, 0x080c, 0xace6,
++ 0x003e, 0xd6cc, 0x0904, 0xa5a9, 0x7154, 0xa98a, 0x81ff, 0x0904,
++ 0xa5a9, 0x9192, 0x0021, 0x1278, 0x8304, 0x9098, 0x0018, 0x2011,
++ 0x0029, 0x080c, 0xace6, 0x2011, 0x0205, 0x2013, 0x0000, 0x080c,
++ 0xb706, 0x0804, 0xa5a9, 0xa868, 0xd0fc, 0x0120, 0x2009, 0x0020,
++ 0xa98a, 0x0c50, 0x00a6, 0x2950, 0x080c, 0xac85, 0x00ae, 0x080c,
++ 0xb706, 0x080c, 0xacd6, 0x0804, 0xa5ab, 0x080c, 0xb37e, 0x0804,
++ 0xa5b8, 0xa87c, 0xd0ac, 0x0904, 0xa5c4, 0xa880, 0xd0bc, 0x1904,
++ 0xa5c4, 0x7348, 0xa838, 0x9306, 0x11c8, 0x734c, 0xa834, 0x931e,
++ 0x0904, 0xa5c4, 0xd6d4, 0x0190, 0xab38, 0x9305, 0x0904, 0xa5c4,
++ 0x0068, 0xa87c, 0xd0ac, 0x0904, 0xa59c, 0xa838, 0xa934, 0x9105,
++ 0x0904, 0xa59c, 0xa880, 0xd0bc, 0x1904, 0xa59c, 0x080c, 0xb3ae,
++ 0x0804, 0xa5b8, 0x0096, 0x00f6, 0x6003, 0x0003, 0x6007, 0x0043,
++ 0x2079, 0x026c, 0x7c04, 0x7b00, 0x7e0c, 0x7d08, 0x6014, 0x2048,
++ 0xa87c, 0xd0ac, 0x0140, 0x6003, 0x0002, 0x00fe, 0x009e, 0x0005,
++ 0x2130, 0x2228, 0x0058, 0x2400, 0xa9ac, 0x910a, 0x2300, 0xaab0,
++ 0x9213, 0x2600, 0x9102, 0x2500, 0x9203, 0x0e90, 0xac36, 0xab3a,
++ 0xae46, 0xad4a, 0x00fe, 0x6043, 0x0000, 0x2c10, 0x080c, 0x18b7,
++ 0x080c, 0x7c3a, 0x080c, 0x820b, 0x009e, 0x0005, 0x0005, 0x9182,
++ 0x0040, 0x0002, 0xa6b6, 0xa6b6, 0xa6b6, 0xa6b6, 0xa6b6, 0xa6b8,
++ 0xa74e, 0xa6b6, 0xa6b6, 0xa765, 0xa7f1, 0xa6b6, 0xa6b6, 0xa6b6,
++ 0xa6b6, 0xa806, 0xa6b6, 0xa6b6, 0xa6b6, 0xa6b6, 0x080c, 0x0d84,
++ 0x0076, 0x00a6, 0x00e6, 0x0096, 0x2071, 0x0260, 0x6114, 0x2150,
++ 0x7644, 0xb676, 0x96b4, 0x0fff, 0xb77c, 0xc7e5, 0xb77e, 0x6210,
++ 0x00b6, 0x2258, 0xba3c, 0x82ff, 0x0110, 0x8211, 0xba3e, 0x00be,
++ 0x86ff, 0x0904, 0xa749, 0x9694, 0xff00, 0x9284, 0x0c00, 0x0120,
++ 0x7048, 0xb092, 0x704c, 0xb08e, 0x9284, 0x0300, 0x0904, 0xa749,
++ 0x080c, 0x0fae, 0x090c, 0x0d84, 0x2900, 0xb07a, 0xb77c, 0xc7cd,
++ 0xb77e, 0xa867, 0x0103, 0xb068, 0xa86a, 0xb06c, 0xa86e, 0xb070,
++ 0xa872, 0xae76, 0x968c, 0x0c00, 0x0120, 0x7348, 0xab92, 0x734c,
++ 0xab8e, 0x968c, 0x00ff, 0x9186, 0x0002, 0x0180, 0x9186, 0x0028,
++ 0x1118, 0xa87b, 0x001c, 0x0060, 0xd6dc, 0x0118, 0xa87b, 0x0015,
++ 0x0038, 0xd6d4, 0x0118, 0xa87b, 0x0007, 0x0010, 0xa87b, 0x0000,
++ 0xaf7e, 0xb080, 0xa882, 0xb084, 0xa886, 0x901e, 0xd6c4, 0x0190,
++ 0x735c, 0xab86, 0x83ff, 0x0170, 0x938a, 0x0009, 0x0210, 0x2019,
++ 0x0008, 0x0036, 0x2308, 0x2019, 0x0018, 0x2011, 0x0025, 0x080c,
++ 0xace6, 0x003e, 0xd6cc, 0x01e8, 0x7154, 0xa98a, 0x81ff, 0x01c8,
++ 0x9192, 0x0021, 0x1260, 0x8304, 0x9098, 0x0018, 0x2011, 0x0029,
++ 0x080c, 0xace6, 0x2011, 0x0205, 0x2013, 0x0000, 0x0050, 0xb068,
++ 0xd0fc, 0x0120, 0x2009, 0x0020, 0xa98a, 0x0c68, 0x2950, 0x080c,
++ 0xac85, 0x009e, 0x00ee, 0x00ae, 0x007e, 0x0005, 0x00f6, 0x00a6,
++ 0x6003, 0x0003, 0x2079, 0x026c, 0x7c04, 0x7b00, 0x7e0c, 0x7d08,
++ 0x6014, 0x2050, 0xb436, 0xb33a, 0xb646, 0xb54a, 0x00ae, 0x00fe,
++ 0x2c10, 0x080c, 0x18b7, 0x0804, 0x8b1d, 0x6003, 0x0002, 0x6004,
++ 0x9086, 0x0040, 0x11c8, 0x0096, 0x6014, 0x2048, 0xa87c, 0xd0ac,
++ 0x0160, 0x601c, 0xd084, 0x1130, 0x00f6, 0x2c00, 0x2078, 0x080c,
++ 0x150d, 0x00fe, 0x6003, 0x0004, 0x0010, 0x6003, 0x0002, 0x009e,
++ 0x080c, 0x8026, 0x080c, 0x8125, 0x0096, 0x2001, 0x1955, 0x2004,
++ 0x6042, 0x080c, 0x80d6, 0x080c, 0x820b, 0x6114, 0x2148, 0xa97c,
++ 0xd1e4, 0x0904, 0xa7ec, 0xd1cc, 0x05a8, 0xa978, 0xa868, 0xd0fc,
++ 0x0538, 0x0016, 0xa87c, 0x0006, 0xa880, 0x0006, 0xa860, 0x20e8,
++ 0xa85c, 0x9080, 0x0019, 0x20a0, 0x810e, 0x810e, 0x810f, 0x9184,
++ 0x003f, 0x20e0, 0x9184, 0xffc0, 0x9080, 0x0019, 0x2098, 0x0156,
++ 0x20a9, 0x0020, 0x4003, 0x015e, 0x000e, 0xa882, 0x000e, 0xa87e,
++ 0x001e, 0xa874, 0x0006, 0x2148, 0x080c, 0x0f60, 0x001e, 0x0440,
++ 0x0016, 0x080c, 0x0f60, 0x009e, 0xa974, 0x0016, 0x080c, 0xacd6,
++ 0x001e, 0x00f0, 0xa867, 0x0103, 0xa974, 0x9184, 0x00ff, 0x90b6,
++ 0x0002, 0x0180, 0x9086, 0x0028, 0x1118, 0xa87b, 0x001c, 0x0060,
++ 0xd1dc, 0x0118, 0xa87b, 0x0015, 0x0038, 0xd1d4, 0x0118, 0xa87b,
++ 0x0007, 0x0010, 0xa87b, 0x0000, 0x0016, 0x080c, 0x5fda, 0x001e,
++ 0xd1e4, 0x1120, 0x080c, 0x9554, 0x009e, 0x0005, 0x080c, 0xb37e,
++ 0x0cd8, 0x6004, 0x9086, 0x0040, 0x1120, 0x080c, 0x8026, 0x080c,
++ 0x8125, 0x2019, 0x0001, 0x080c, 0x8dfe, 0x6003, 0x0002, 0x080c,
++ 0xb774, 0x080c, 0x80d6, 0x080c, 0x820b, 0x0005, 0x6004, 0x9086,
++ 0x0040, 0x1120, 0x080c, 0x8026, 0x080c, 0x8125, 0x080c, 0x80d6,
++ 0x080c, 0x2d1a, 0x080c, 0xb76c, 0x0096, 0x6114, 0x2148, 0x080c,
++ 0xb0ad, 0x0150, 0xa867, 0x0103, 0xa87b, 0x0029, 0xa877, 0x0000,
++ 0x080c, 0x61a9, 0x080c, 0xb278, 0x009e, 0x080c, 0x9554, 0x080c,
++ 0x820b, 0x0005, 0xa87b, 0x0015, 0xd1fc, 0x0138, 0xa87b, 0x0007,
++ 0x8002, 0x8000, 0x810a, 0x9189, 0x0000, 0xa992, 0xa88e, 0x0005,
++ 0x9182, 0x0040, 0x0002, 0xa84f, 0xa84f, 0xa84f, 0xa84f, 0xa84f,
++ 0xa851, 0xa84f, 0xa84f, 0xa8f4, 0xa84f, 0xa84f, 0xa84f, 0xa84f,
++ 0xa84f, 0xa84f, 0xa84f, 0xa84f, 0xa84f, 0xa84f, 0xaa22, 0x080c,
++ 0x0d84, 0x0076, 0x00a6, 0x00e6, 0x0096, 0x2071, 0x0260, 0x6114,
++ 0x2150, 0x7644, 0xb676, 0x96b4, 0x0fff, 0xb77c, 0xc7e5, 0xb77e,
++ 0x6210, 0x00b6, 0x2258, 0xba3c, 0x82ff, 0x0110, 0x8211, 0xba3e,
++ 0x00be, 0x86ff, 0x0904, 0xa8ed, 0x9694, 0xff00, 0x9284, 0x0c00,
++ 0x0120, 0x7048, 0xb092, 0x704c, 0xb08e, 0x9284, 0x0300, 0x0904,
++ 0xa8ed, 0x9686, 0x0100, 0x1130, 0x7064, 0x9005, 0x1118, 0xc6c4,
++ 0xb676, 0x0c38, 0x080c, 0x0fae, 0x090c, 0x0d84, 0x2900, 0xb07a,
++ 0xb77c, 0x97bd, 0x0200, 0xb77e, 0xa867, 0x0103, 0xb068, 0xa86a,
++ 0xb06c, 0xa86e, 0xb070, 0xa872, 0x7044, 0x9084, 0xf000, 0x9635,
++ 0xae76, 0x968c, 0x0c00, 0x0120, 0x7348, 0xab92, 0x734c, 0xab8e,
++ 0x968c, 0x00ff, 0x9186, 0x0002, 0x0180, 0x9186, 0x0028, 0x1118,
++ 0xa87b, 0x001c, 0x0060, 0xd6dc, 0x0118, 0xa87b, 0x0015, 0x0038,
++ 0xd6d4, 0x0118, 0xa87b, 0x0007, 0x0010, 0xa87b, 0x0000, 0xaf7e,
++ 0xb080, 0xa882, 0xb084, 0xa886, 0x901e, 0xd6c4, 0x0190, 0x735c,
++ 0xab86, 0x83ff, 0x0170, 0x938a, 0x0009, 0x0210, 0x2019, 0x0008,
++ 0x0036, 0x2308, 0x2019, 0x0018, 0x2011, 0x0025, 0x080c, 0xace6,
++ 0x003e, 0xd6cc, 0x01d0, 0x7154, 0xa98a, 0x81ff, 0x01b0, 0x9192,
++ 0x0021, 0x1260, 0x8304, 0x9098, 0x0018, 0x2011, 0x0029, 0x080c,
++ 0xace6, 0x2011, 0x0205, 0x2013, 0x0000, 0x0038, 0xb068, 0xd0fc,
++ 0x0120, 0x2009, 0x0020, 0xa98a, 0x0c68, 0x080c, 0x178e, 0x009e,
++ 0x00ee, 0x00ae, 0x007e, 0x0005, 0x2001, 0x1955, 0x2004, 0x6042,
++ 0x0096, 0x6114, 0x2148, 0xa83c, 0xa940, 0x9105, 0x1118, 0xa87c,
++ 0xc0dc, 0xa87e, 0x6003, 0x0002, 0xa97c, 0xd1e4, 0x0904, 0xaa1d,
++ 0x6043, 0x0000, 0x6010, 0x00b6, 0x2058, 0xb800, 0x00be, 0xd0bc,
++ 0x11f8, 0xd1cc, 0x0904, 0xa9ec, 0xa978, 0xa868, 0xd0fc, 0x0904,
++ 0xa9ad, 0x0016, 0xa87c, 0x0006, 0xa880, 0x0006, 0x00a6, 0x2150,
++ 0xb174, 0x9184, 0x00ff, 0x90b6, 0x0002, 0x0904, 0xa97b, 0x9086,
++ 0x0028, 0x15e8, 0xa87b, 0x001c, 0xb07b, 0x001c, 0x0804, 0xa983,
++ 0x6024, 0xd0f4, 0x11d0, 0xa838, 0xaa34, 0x9205, 0x09d0, 0xa838,
++ 0xaa90, 0x9206, 0x1120, 0xa88c, 0xaa34, 0x9206, 0x0990, 0x6024,
++ 0xd0d4, 0x1148, 0xa9ac, 0xa834, 0x9102, 0x603a, 0xa9b0, 0xa838,
++ 0x9103, 0x603e, 0x6024, 0xc0f5, 0x6026, 0x6010, 0x00b6, 0x2058,
++ 0xb83c, 0x8000, 0xb83e, 0x00be, 0x9006, 0xa876, 0xa892, 0xa88e,
++ 0xa87c, 0xc0e4, 0xa87e, 0xd0cc, 0x0130, 0x0096, 0xa878, 0x2048,
++ 0x080c, 0x0f60, 0x009e, 0x080c, 0xb3ae, 0x0804, 0xaa1d, 0xd1dc,
++ 0x0158, 0xa87b, 0x0015, 0xb07b, 0x0015, 0x080c, 0xb62d, 0x0118,
++ 0xb174, 0xc1dc, 0xb176, 0x0078, 0xd1d4, 0x0128, 0xa87b, 0x0007,
++ 0xb07b, 0x0007, 0x0040, 0xa87c, 0xd0ac, 0x0128, 0xa834, 0xa938,
++ 0x9115, 0x190c, 0xa82a, 0xa87c, 0xb07e, 0xa890, 0xb092, 0xa88c,
++ 0xb08e, 0xa860, 0x20e8, 0xa85c, 0x9080, 0x0019, 0x20a0, 0x20a9,
++ 0x0020, 0x8a06, 0x8006, 0x8007, 0x9094, 0x003f, 0x22e0, 0x9084,
++ 0xffc0, 0x9080, 0x0019, 0x2098, 0x4003, 0x00ae, 0x000e, 0xa882,
++ 0x000e, 0xa87e, 0x080c, 0xb706, 0x001e, 0xa874, 0x0006, 0x2148,
++ 0x080c, 0x0f60, 0x001e, 0x0804, 0xaa19, 0x0016, 0x00a6, 0x2150,
++ 0xb174, 0x9184, 0x00ff, 0x90b6, 0x0002, 0x01e0, 0x9086, 0x0028,
++ 0x1128, 0xa87b, 0x001c, 0xb07b, 0x001c, 0x00e0, 0xd1dc, 0x0158,
++ 0xa87b, 0x0015, 0xb07b, 0x0015, 0x080c, 0xb62d, 0x0118, 0xb174,
++ 0xc1dc, 0xb176, 0x0078, 0xd1d4, 0x0128, 0xa87b, 0x0007, 0xb07b,
++ 0x0007, 0x0040, 0xa87c, 0xd0ac, 0x0128, 0xa834, 0xa938, 0x9115,
++ 0x190c, 0xa82a, 0xa890, 0xb092, 0xa88c, 0xb08e, 0xa87c, 0xb07e,
++ 0x00ae, 0x080c, 0x0f60, 0x009e, 0x080c, 0xb706, 0xa974, 0x0016,
++ 0x080c, 0xacd6, 0x001e, 0x0468, 0xa867, 0x0103, 0xa974, 0x9184,
++ 0x00ff, 0x90b6, 0x0002, 0x01b0, 0x9086, 0x0028, 0x1118, 0xa87b,
++ 0x001c, 0x00d0, 0xd1dc, 0x0148, 0xa87b, 0x0015, 0x080c, 0xb62d,
++ 0x0118, 0xa974, 0xc1dc, 0xa976, 0x0078, 0xd1d4, 0x0118, 0xa87b,
++ 0x0007, 0x0050, 0xa87b, 0x0000, 0xa87c, 0xd0ac, 0x0128, 0xa834,
++ 0xa938, 0x9115, 0x190c, 0xa82a, 0xa974, 0x0016, 0x080c, 0x5fda,
++ 0x001e, 0xd1e4, 0x1120, 0x080c, 0x9554, 0x009e, 0x0005, 0x080c,
++ 0xb37e, 0x0cd8, 0x6114, 0x0096, 0x2148, 0xa97c, 0xd1e4, 0x190c,
++ 0x179c, 0x009e, 0x0005, 0x080c, 0x8026, 0x0010, 0x080c, 0x80d6,
++ 0x080c, 0xb0ad, 0x01c0, 0x0096, 0x6114, 0x2148, 0xa867, 0x0103,
++ 0x2009, 0x180c, 0x210c, 0xd18c, 0x11b8, 0xd184, 0x1190, 0x6108,
++ 0xa97a, 0x918e, 0x0029, 0x1110, 0x080c, 0xcc6b, 0xa877, 0x0000,
++ 0x080c, 0x61a9, 0x009e, 0x080c, 0x9554, 0x080c, 0x8125, 0x0804,
++ 0x820b, 0xa87b, 0x0004, 0x0c90, 0xa87b, 0x0004, 0x0c78, 0x9182,
++ 0x0040, 0x0002, 0xaa6e, 0xaa6e, 0xaa6e, 0xaa6e, 0xaa6e, 0xaa70,
++ 0xaa6e, 0xaa6e, 0xaa6e, 0xaa6e, 0xaa6e, 0xaa6e, 0xaa6e, 0xaa6e,
++ 0xaa6e, 0xaa6e, 0xaa6e, 0xaa6e, 0xaa6e, 0xaa6e, 0x080c, 0x0d84,
++ 0x080c, 0x4df2, 0x01f8, 0x6014, 0x7144, 0x918c, 0x0fff, 0x9016,
++ 0xd1c4, 0x0118, 0x7264, 0x9294, 0x00ff, 0x0096, 0x904d, 0x0188,
++ 0xa87b, 0x0000, 0xa864, 0x9086, 0x0139, 0x0128, 0xa867, 0x0103,
++ 0xa976, 0xaa96, 0x0030, 0xa897, 0x4000, 0xa99a, 0xaa9e, 0x080c,
++ 0x61a9, 0x009e, 0x0804, 0x9554, 0x9182, 0x0085, 0x0002, 0xaaa6,
++ 0xaaa4, 0xaaa4, 0xaab2, 0xaaa4, 0xaaa4, 0xaaa4, 0xaaa4, 0xaaa4,
++ 0xaaa4, 0xaaa4, 0xaaa4, 0xaaa4, 0x080c, 0x0d84, 0x6003, 0x0001,
++ 0x6106, 0x080c, 0x7bcb, 0x0126, 0x2091, 0x8000, 0x080c, 0x8125,
++ 0x012e, 0x0005, 0x0026, 0x0056, 0x00d6, 0x00e6, 0x2071, 0x0260,
++ 0x7224, 0x6216, 0x7220, 0x080c, 0xb09b, 0x01a0, 0x2268, 0x6800,
++ 0x9086, 0x0000, 0x0178, 0x6010, 0x6d10, 0x952e, 0x1158, 0x00c6,
++ 0x2d60, 0x080c, 0xad11, 0x00ce, 0x0128, 0x6803, 0x0002, 0x6007,
++ 0x0086, 0x0010, 0x6007, 0x0087, 0x6003, 0x0001, 0x080c, 0x7bcb,
++ 0x080c, 0x8125, 0x9280, 0x0004, 0x00b6, 0x2058, 0xb800, 0x00be,
++ 0xd0bc, 0x0140, 0x6824, 0xd0ec, 0x0128, 0x00c6, 0x2260, 0x080c,
++ 0xb3ae, 0x00ce, 0x00ee, 0x00de, 0x005e, 0x002e, 0x0005, 0x9186,
++ 0x0013, 0x1160, 0x6004, 0x908a, 0x0085, 0x0a0c, 0x0d84, 0x908a,
++ 0x0092, 0x1a0c, 0x0d84, 0x9082, 0x0085, 0x006a, 0x9186, 0x0027,
++ 0x0120, 0x9186, 0x0014, 0x190c, 0x0d84, 0x080c, 0x8026, 0x080c,
++ 0x9584, 0x0804, 0x8125, 0xab18, 0xab1a, 0xab1a, 0xab18, 0xab18,
++ 0xab18, 0xab18, 0xab18, 0xab18, 0xab18, 0xab18, 0xab18, 0xab18,
++ 0x080c, 0x0d84, 0x080c, 0x8026, 0x080c, 0x9584, 0x080c, 0x8125,
++ 0x0005, 0x9186, 0x0013, 0x1128, 0x6004, 0x9082, 0x0085, 0x2008,
++ 0x04b8, 0x9186, 0x0027, 0x11f8, 0x080c, 0x8026, 0x080c, 0x2d1a,
++ 0x080c, 0xb76c, 0x0096, 0x6014, 0x2048, 0x080c, 0xb0ad, 0x0150,
++ 0xa867, 0x0103, 0xa877, 0x0000, 0xa87b, 0x0029, 0x080c, 0x61a9,
++ 0x080c, 0xb278, 0x009e, 0x080c, 0x9554, 0x080c, 0x8125, 0x0005,
++ 0x080c, 0x95e9, 0x0ce0, 0x9186, 0x0014, 0x1dd0, 0x080c, 0x8026,
++ 0x0096, 0x6014, 0x2048, 0x080c, 0xb0ad, 0x0d60, 0xa867, 0x0103,
++ 0xa877, 0x0000, 0xa87b, 0x0006, 0xa880, 0xc0ec, 0xa882, 0x08f0,
++ 0x0002, 0xab70, 0xab6e, 0xab6e, 0xab6e, 0xab6e, 0xab6e, 0xab88,
++ 0xab6e, 0xab6e, 0xab6e, 0xab6e, 0xab6e, 0xab6e, 0x080c, 0x0d84,
++ 0x080c, 0x8026, 0x6034, 0x908c, 0xff00, 0x810f, 0x9186, 0x0039,
++ 0x0118, 0x9186, 0x0035, 0x1118, 0x2001, 0x1953, 0x0010, 0x2001,
++ 0x1954, 0x2004, 0x601a, 0x6003, 0x000c, 0x080c, 0x8125, 0x0005,
++ 0x080c, 0x8026, 0x6034, 0x908c, 0xff00, 0x810f, 0x9186, 0x0039,
++ 0x0118, 0x9186, 0x0035, 0x1118, 0x2001, 0x1953, 0x0010, 0x2001,
++ 0x1954, 0x2004, 0x601a, 0x6003, 0x000e, 0x080c, 0x8125, 0x0005,
++ 0x9182, 0x0092, 0x1220, 0x9182, 0x0085, 0x0208, 0x0012, 0x0804,
++ 0x95e9, 0xabb6, 0xabb6, 0xabb6, 0xabb6, 0xabb8, 0xac05, 0xabb6,
++ 0xabb6, 0xabb6, 0xabb6, 0xabb6, 0xabb6, 0xabb6, 0x080c, 0x0d84,
++ 0x0096, 0x6010, 0x00b6, 0x2058, 0xb800, 0x00be, 0xd0bc, 0x0168,
++ 0x6034, 0x908c, 0xff00, 0x810f, 0x9186, 0x0039, 0x0118, 0x9186,
++ 0x0035, 0x1118, 0x009e, 0x0804, 0xac19, 0x080c, 0xb0ad, 0x1118,
++ 0x080c, 0xb278, 0x0068, 0x6014, 0x2048, 0xa87c, 0xd0e4, 0x1110,
++ 0x080c, 0xb278, 0xa867, 0x0103, 0x080c, 0xb739, 0x080c, 0x61a9,
++ 0x00d6, 0x2c68, 0x080c, 0x94fe, 0x01d0, 0x6003, 0x0001, 0x6007,
++ 0x001e, 0x600b, 0xffff, 0x2009, 0x026e, 0x210c, 0x613a, 0x2009,
++ 0x026f, 0x210c, 0x613e, 0x6910, 0x6112, 0x080c, 0xb4e6, 0x6954,
++ 0x6156, 0x6023, 0x0001, 0x080c, 0x7bcb, 0x080c, 0x8125, 0x2d60,
++ 0x00de, 0x080c, 0x9554, 0x009e, 0x0005, 0x6010, 0x00b6, 0x2058,
++ 0xb800, 0x00be, 0xd0bc, 0x0598, 0x6034, 0x908c, 0xff00, 0x810f,
++ 0x9186, 0x0035, 0x0130, 0x9186, 0x001e, 0x0118, 0x9186, 0x0039,
++ 0x1530, 0x00d6, 0x2c68, 0x080c, 0xb6d9, 0x1904, 0xac5e, 0x080c,
++ 0x94fe, 0x01d8, 0x6106, 0x6003, 0x0001, 0x6023, 0x0001, 0x6910,
++ 0x6112, 0x692c, 0x612e, 0x6930, 0x6132, 0x6934, 0x918c, 0x00ff,
++ 0x6136, 0x6938, 0x613a, 0x693c, 0x613e, 0x6954, 0x6156, 0x080c,
++ 0xb4e6, 0x080c, 0x7bcb, 0x080c, 0x8125, 0x2d60, 0x00f8, 0x0096,
++ 0x6014, 0x2048, 0x080c, 0xb0ad, 0x01c8, 0xa867, 0x0103, 0xa880,
++ 0xd0b4, 0x0128, 0xc0ec, 0xa882, 0xa87b, 0x0006, 0x0048, 0xd0bc,
++ 0x0118, 0xa87b, 0x0002, 0x0020, 0xa87b, 0x0005, 0x080c, 0xb37a,
++ 0xa877, 0x0000, 0x080c, 0x61a9, 0x080c, 0xb278, 0x009e, 0x0804,
++ 0x9554, 0x0016, 0x0096, 0x6014, 0x2048, 0x080c, 0xb0ad, 0x0140,
++ 0xa867, 0x0103, 0xa87b, 0x0028, 0xa877, 0x0000, 0x080c, 0x61a9,
++ 0x009e, 0x001e, 0x9186, 0x0013, 0x0148, 0x9186, 0x0014, 0x0130,
++ 0x9186, 0x0027, 0x0118, 0x080c, 0x95e9, 0x0030, 0x080c, 0x8026,
++ 0x080c, 0x9584, 0x080c, 0x8125, 0x0005, 0x0056, 0x0066, 0x0096,
++ 0x00a6, 0x2029, 0x0001, 0x9182, 0x0101, 0x1208, 0x0010, 0x2009,
++ 0x0100, 0x2130, 0x8304, 0x9098, 0x0018, 0x2009, 0x0020, 0x2011,
++ 0x0029, 0x080c, 0xace6, 0x96b2, 0x0020, 0xb004, 0x904d, 0x0110,
++ 0x080c, 0x0f60, 0x080c, 0x0fae, 0x0520, 0x8528, 0xa867, 0x0110,
++ 0xa86b, 0x0000, 0x2920, 0xb406, 0x968a, 0x003d, 0x1228, 0x2608,
++ 0x2011, 0x001b, 0x0499, 0x00a8, 0x96b2, 0x003c, 0x2009, 0x003c,
++ 0x2950, 0x2011, 0x001b, 0x0451, 0x0c28, 0x2001, 0x0205, 0x2003,
++ 0x0000, 0x00ae, 0x852f, 0x95ad, 0x0003, 0xb566, 0x95ac, 0x0000,
++ 0x0048, 0x2001, 0x0205, 0x2003, 0x0000, 0x00ae, 0x852f, 0x95ad,
++ 0x0003, 0xb566, 0x009e, 0x006e, 0x005e, 0x0005, 0x00a6, 0x89ff,
++ 0x0158, 0xa804, 0x9055, 0x0130, 0xa807, 0x0000, 0x080c, 0x61a9,
++ 0x2a48, 0x0cb8, 0x080c, 0x61a9, 0x00ae, 0x0005, 0x00f6, 0x2079,
++ 0x0200, 0x7814, 0x9085, 0x0080, 0x7816, 0xd184, 0x0108, 0x8108,
++ 0x810c, 0x20a9, 0x0001, 0xa860, 0x20e8, 0xa85c, 0x9200, 0x20a0,
++ 0x20e1, 0x0000, 0x2300, 0x9e00, 0x2098, 0x4003, 0x8318, 0x9386,
++ 0x0020, 0x1148, 0x2018, 0x2300, 0x9e00, 0x2098, 0x7814, 0x8000,
++ 0x9085, 0x0080, 0x7816, 0x8109, 0x1d80, 0x7817, 0x0000, 0x00fe,
++ 0x0005, 0x0066, 0x0126, 0x2091, 0x8000, 0x2031, 0x0001, 0x6020,
++ 0x9084, 0x000f, 0x0083, 0x012e, 0x006e, 0x0005, 0x0126, 0x2091,
++ 0x8000, 0x0066, 0x2031, 0x0000, 0x6020, 0x9084, 0x000f, 0x001b,
++ 0x006e, 0x012e, 0x0005, 0xad4c, 0xad4c, 0xad47, 0xad6e, 0xad3a,
++ 0xad47, 0xad6e, 0xad47, 0xad3a, 0xad3a, 0xad47, 0xad47, 0xad47,
++ 0xad3a, 0xad3a, 0x080c, 0x0d84, 0x0036, 0x2019, 0x0010, 0x080c,
++ 0xc58e, 0x6023, 0x0006, 0x6003, 0x0007, 0x003e, 0x0005, 0x9006,
++ 0x0005, 0x9085, 0x0001, 0x0005, 0x0096, 0x86ff, 0x11d8, 0x6014,
++ 0x2048, 0x080c, 0xb0ad, 0x01c0, 0xa864, 0x9086, 0x0139, 0x1128,
++ 0xa87b, 0x0005, 0xa883, 0x0000, 0x0028, 0x900e, 0x2001, 0x0005,
++ 0x080c, 0x63d1, 0x080c, 0xb37a, 0x080c, 0x61a9, 0x080c, 0x9584,
++ 0x9085, 0x0001, 0x009e, 0x0005, 0x9006, 0x0ce0, 0x6000, 0x908a,
++ 0x0016, 0x1a0c, 0x0d84, 0x0002, 0xad84, 0xada9, 0xad86, 0xadc7,
++ 0xada4, 0xad84, 0xad47, 0xad4c, 0xad4c, 0xad47, 0xad47, 0xad47,
++ 0xad47, 0xad47, 0xad47, 0xad47, 0x080c, 0x0d84, 0x86ff, 0x11c8,
++ 0x6020, 0x9086, 0x0006, 0x01a8, 0x0096, 0x6014, 0x2048, 0x080c,
++ 0xb0ad, 0x0110, 0x080c, 0xb37a, 0x009e, 0x080c, 0xb71b, 0x6007,
++ 0x0085, 0x6003, 0x000b, 0x6023, 0x0002, 0x080c, 0x7bcb, 0x080c,
++ 0x8125, 0x9085, 0x0001, 0x0005, 0x0066, 0x080c, 0x17b0, 0x006e,
++ 0x08e8, 0x00e6, 0x2071, 0x19b4, 0x7024, 0x9c06, 0x1110, 0x080c,
++ 0x8d59, 0x6020, 0x9084, 0x000f, 0x9086, 0x0006, 0x1150, 0x0086,
++ 0x0096, 0x2049, 0x0001, 0x2c40, 0x080c, 0x8ef6, 0x009e, 0x008e,
++ 0x0010, 0x080c, 0x8c6a, 0x00ee, 0x1908, 0x0804, 0xad47, 0x0036,
++ 0x00e6, 0x2071, 0x19b4, 0x703c, 0x9c06, 0x1138, 0x901e, 0x080c,
++ 0x8dfe, 0x00ee, 0x003e, 0x0804, 0xad86, 0x080c, 0x901f, 0x00ee,
++ 0x003e, 0x1904, 0xad86, 0x0804, 0xad47, 0x00c6, 0x6020, 0x9084,
++ 0x000f, 0x0013, 0x00ce, 0x0005, 0xadfa, 0xaea2, 0xaff8, 0xae04,
++ 0x9584, 0xadfa, 0xc580, 0xb779, 0xaea2, 0xadf3, 0xb077, 0xadf3,
++ 0xadf3, 0xadf3, 0xadf3, 0x080c, 0x0d84, 0x080c, 0xb295, 0x1110,
++ 0x080c, 0x9e99, 0x0005, 0x080c, 0x8026, 0x080c, 0x8125, 0x0804,
++ 0x9554, 0x601b, 0x0001, 0x0005, 0x080c, 0xb0ad, 0x0130, 0x6014,
++ 0x0096, 0x2048, 0x2c00, 0xa896, 0x009e, 0x6000, 0x908a, 0x0016,
++ 0x1a0c, 0x0d84, 0x0002, 0xae23, 0xae25, 0xae49, 0xae5d, 0xae81,
++ 0xae23, 0xadfa, 0xadfa, 0xadfa, 0xae5d, 0xae5d, 0xae23, 0xae23,
++ 0xae23, 0xae23, 0xae67, 0x080c, 0x0d84, 0x00e6, 0x6014, 0x0096,
++ 0x2048, 0xa880, 0xc0b5, 0xa882, 0x009e, 0x2071, 0x19b4, 0x7024,
++ 0x9c06, 0x01a0, 0x080c, 0x8c6a, 0x080c, 0xb71b, 0x6007, 0x0085,
++ 0x6003, 0x000b, 0x6023, 0x0002, 0x2001, 0x1954, 0x2004, 0x601a,
++ 0x080c, 0x7bcb, 0x080c, 0x8125, 0x00ee, 0x0005, 0x601b, 0x0001,
++ 0x0cd8, 0x0096, 0x6014, 0x2048, 0xa880, 0xc0b5, 0xa882, 0x009e,
++ 0x080c, 0xb71b, 0x6007, 0x0085, 0x6003, 0x000b, 0x6023, 0x0002,
++ 0x080c, 0x7bcb, 0x080c, 0x8125, 0x0005, 0x0096, 0x601b, 0x0001,
++ 0x6014, 0x2048, 0xa880, 0xc0b5, 0xa882, 0x009e, 0x0005, 0x080c,
++ 0x4df2, 0x01a8, 0x6014, 0x0096, 0x904d, 0x0180, 0xa864, 0xa867,
++ 0x0103, 0xa87b, 0x0006, 0x9086, 0x0139, 0x1140, 0xa867, 0x0139,
++ 0xa897, 0x4005, 0xa89b, 0x0004, 0x080c, 0x61a9, 0x009e, 0x0804,
++ 0x9554, 0x6014, 0x0096, 0x904d, 0x01c0, 0xa97c, 0xd1e4, 0x01a8,
++ 0xa884, 0x009e, 0x8003, 0x800b, 0x810b, 0x9108, 0x611a, 0x2001,
++ 0x0037, 0x2c08, 0x080c, 0x1492, 0x6000, 0x9086, 0x0004, 0x1120,
++ 0x2009, 0x0048, 0x080c, 0x95ce, 0x0005, 0x009e, 0x080c, 0x17b0,
++ 0x0804, 0xae49, 0x6000, 0x908a, 0x0016, 0x1a0c, 0x0d84, 0x000b,
++ 0x0005, 0xaeb9, 0xae01, 0xaebb, 0xaeb9, 0xaebb, 0xaebb, 0xadfb,
++ 0xaeb9, 0xadf5, 0xadf5, 0xaeb9, 0xaeb9, 0xaeb9, 0xaeb9, 0xaeb9,
++ 0xaeb9, 0x080c, 0x0d84, 0x6010, 0x00b6, 0x2058, 0xb804, 0x9084,
++ 0x00ff, 0x00be, 0x908a, 0x000c, 0x1a0c, 0x0d84, 0x00b6, 0x0013,
++ 0x00be, 0x0005, 0xaed6, 0xaf92, 0xaed8, 0xaf13, 0xaed8, 0xaf13,
++ 0xaed8, 0xaee6, 0xaed6, 0xaf13, 0xaed6, 0xaf02, 0x080c, 0x0d84,
++ 0x6004, 0x908e, 0x0016, 0x0598, 0x908e, 0x0004, 0x0580, 0x908e,
++ 0x0002, 0x0568, 0x908e, 0x0052, 0x0904, 0xaf8e, 0x6004, 0x080c,
++ 0xb295, 0x0904, 0xafab, 0x908e, 0x0021, 0x0904, 0xafaf, 0x908e,
++ 0x0022, 0x0904, 0xaff3, 0x908e, 0x003d, 0x0904, 0xafaf, 0x908e,
++ 0x0039, 0x0904, 0xafb3, 0x908e, 0x0035, 0x0904, 0xafb3, 0x908e,
++ 0x001e, 0x0178, 0x908e, 0x0001, 0x1140, 0x6010, 0x2058, 0xb804,
++ 0x9084, 0x00ff, 0x9086, 0x0006, 0x0110, 0x080c, 0x2d1a, 0x080c,
++ 0x9e99, 0x0804, 0x9584, 0x00c6, 0x00d6, 0x6104, 0x9186, 0x0016,
++ 0x0904, 0xaf7f, 0x9186, 0x0002, 0x15b8, 0x2001, 0x1836, 0x2004,
++ 0xd08c, 0x1178, 0x080c, 0x6877, 0x1160, 0x2001, 0x194c, 0x2003,
++ 0x0001, 0x2001, 0x1800, 0x2003, 0x0001, 0x080c, 0x67be, 0x0804,
++ 0xafdc, 0x6010, 0x2058, 0x2001, 0x1836, 0x2004, 0xd0ac, 0x1904,
++ 0xafdc, 0xb8a0, 0xd0bc, 0x1904, 0xafdc, 0xb840, 0x9084, 0x00ff,
++ 0x9005, 0x0190, 0x8001, 0xb842, 0x6017, 0x0000, 0x6023, 0x0007,
++ 0x601b, 0x0398, 0x6043, 0x0000, 0x080c, 0x94fe, 0x0128, 0x2b00,
++ 0x6012, 0x6023, 0x0001, 0x0458, 0x00de, 0x00ce, 0x6004, 0x908e,
++ 0x0002, 0x11a0, 0x6010, 0x2058, 0xb8a0, 0x9086, 0x007e, 0x1170,
++ 0x2009, 0x1836, 0x2104, 0xc085, 0x200a, 0x00e6, 0x2071, 0x1800,
++ 0x080c, 0x5677, 0x00ee, 0x080c, 0x9e99, 0x0030, 0x080c, 0x9e99,
++ 0x080c, 0x2d1a, 0x080c, 0xb76c, 0x00e6, 0x0126, 0x2091, 0x8000,
++ 0x080c, 0x2d3f, 0x012e, 0x00ee, 0x080c, 0x9584, 0x0005, 0x2001,
++ 0x0002, 0x080c, 0x5b61, 0x6003, 0x0001, 0x6007, 0x0002, 0x080c,
++ 0x7c1d, 0x080c, 0x8125, 0x00de, 0x00ce, 0x0c80, 0x080c, 0x2d3f,
++ 0x0804, 0xaf0f, 0x00c6, 0x00d6, 0x6104, 0x9186, 0x0016, 0x0d38,
++ 0x6010, 0x2058, 0xb840, 0x9084, 0x00ff, 0x9005, 0x0904, 0xaf54,
++ 0x8001, 0xb842, 0x6003, 0x0001, 0x080c, 0x7c1d, 0x080c, 0x8125,
++ 0x00de, 0x00ce, 0x0898, 0x080c, 0x9e99, 0x0804, 0xaf11, 0x080c,
++ 0x9ed5, 0x0804, 0xaf11, 0x00d6, 0x2c68, 0x6104, 0x080c, 0xb6d9,
++ 0x00de, 0x0118, 0x080c, 0x9554, 0x00f0, 0x6004, 0x8007, 0x6134,
++ 0x918c, 0x00ff, 0x9105, 0x6036, 0x6007, 0x0085, 0x6003, 0x000b,
++ 0x6023, 0x0002, 0x603c, 0x600a, 0x2001, 0x1954, 0x2004, 0x601a,
++ 0x602c, 0x2c08, 0x2060, 0x6024, 0xc0b5, 0x6026, 0x2160, 0x080c,
++ 0x7bcb, 0x080c, 0x8125, 0x0005, 0x00de, 0x00ce, 0x080c, 0x9e99,
++ 0x080c, 0x2d1a, 0x00e6, 0x0126, 0x2091, 0x8000, 0x080c, 0x2d3f,
++ 0x6017, 0x0000, 0x6023, 0x0007, 0x601b, 0x0398, 0x6043, 0x0000,
++ 0x012e, 0x00ee, 0x0005, 0x080c, 0x994c, 0x1904, 0xafab, 0x0005,
++ 0x6000, 0x908a, 0x0016, 0x1a0c, 0x0d84, 0x0096, 0x00d6, 0x001b,
++ 0x00de, 0x009e, 0x0005, 0xb013, 0xb013, 0xb013, 0xb013, 0xb013,
++ 0xb013, 0xb013, 0xb013, 0xb013, 0xadfa, 0xb013, 0xae01, 0xb015,
++ 0xae01, 0xb022, 0xb013, 0x080c, 0x0d84, 0x6004, 0x9086, 0x008b,
++ 0x0148, 0x6007, 0x008b, 0x6003, 0x000d, 0x080c, 0x7bcb, 0x080c,
++ 0x8125, 0x0005, 0x080c, 0xb74d, 0x0118, 0x080c, 0xb75e, 0x0010,
++ 0x080c, 0xb76c, 0x080c, 0xb278, 0x080c, 0xb0ad, 0x0570, 0x080c,
++ 0x2d1a, 0x080c, 0xb0ad, 0x0168, 0x6014, 0x2048, 0xa867, 0x0103,
++ 0xa87b, 0x0006, 0xa877, 0x0000, 0xa880, 0xc0ed, 0xa882, 0x080c,
++ 0x61a9, 0x2c68, 0x080c, 0x94fe, 0x0150, 0x6810, 0x6012, 0x080c,
++ 0xb4e6, 0x00c6, 0x2d60, 0x080c, 0x9584, 0x00ce, 0x0008, 0x2d60,
++ 0x6017, 0x0000, 0x6023, 0x0001, 0x6007, 0x0001, 0x6003, 0x0001,
++ 0x080c, 0x7c1d, 0x080c, 0x8125, 0x00c8, 0x080c, 0xb74d, 0x0138,
++ 0x6034, 0x9086, 0x4000, 0x1118, 0x080c, 0x2d1a, 0x08d0, 0x6034,
++ 0x908c, 0xff00, 0x810f, 0x9186, 0x0039, 0x0118, 0x9186, 0x0035,
++ 0x1118, 0x080c, 0x2d1a, 0x0868, 0x080c, 0x9584, 0x0005, 0x6000,
++ 0x908a, 0x0016, 0x1a0c, 0x0d84, 0x0002, 0xb08d, 0xb08d, 0xb08f,
++ 0xb08f, 0xb08f, 0xb08d, 0xb08d, 0xb08d, 0xb08d, 0xb08d, 0xb08d,
++ 0xb08d, 0xb08d, 0xb08d, 0xb08d, 0xb08d, 0x080c, 0x0d84, 0x080c,
++ 0x901f, 0x6114, 0x0096, 0x2148, 0xa87b, 0x0006, 0x080c, 0x61a9,
++ 0x009e, 0x0804, 0x9554, 0x9284, 0x0007, 0x1158, 0x9282, 0x1cd0,
++ 0x0240, 0x2001, 0x1818, 0x2004, 0x9202, 0x1218, 0x9085, 0x0001,
++ 0x0005, 0x9006, 0x0ce8, 0x0096, 0x0018, 0x0096, 0x6014, 0x2048,
++ 0x9984, 0xf000, 0x9086, 0xf000, 0x0110, 0x080c, 0x1057, 0x009e,
++ 0x0005, 0x00e6, 0x00c6, 0x0036, 0x0006, 0x0126, 0x2091, 0x8000,
++ 0x2061, 0x1cd0, 0x2071, 0x1800, 0x734c, 0x706c, 0x9302, 0x12a8,
++ 0x6020, 0x9206, 0x1160, 0x080c, 0xb460, 0x0148, 0x080c, 0xb295,
++ 0x1110, 0x080c, 0x9e99, 0x00c6, 0x080c, 0x9554, 0x00ce, 0x9ce0,
++ 0x0018, 0x7060, 0x9c02, 0x1208, 0x0c38, 0x012e, 0x000e, 0x003e,
++ 0x00ce, 0x00ee, 0x0005, 0x00e6, 0x00c6, 0x0016, 0x9188, 0x1000,
++ 0x210c, 0x81ff, 0x0128, 0x2061, 0x1a72, 0x6112, 0x080c, 0x2d1a,
++ 0x9006, 0x0010, 0x9085, 0x0001, 0x001e, 0x00ce, 0x00ee, 0x0005,
++ 0x00c6, 0x0126, 0x2091, 0x8000, 0x080c, 0x94fe, 0x01d8, 0x080c,
++ 0x4df2, 0x0110, 0x662e, 0x0008, 0x6616, 0x2b00, 0x6012, 0x080c,
++ 0x4df2, 0x0118, 0x080c, 0xb1bc, 0x0168, 0x080c, 0xb4e6, 0x6023,
++ 0x0003, 0x2009, 0x004b, 0x080c, 0x95ce, 0x9085, 0x0001, 0x012e,
++ 0x00ce, 0x0005, 0x9006, 0x0cd8, 0x00c6, 0x0126, 0x2091, 0x8000,
++ 0xbaa0, 0x080c, 0x95a1, 0x0590, 0x080c, 0x4df2, 0x0118, 0x602f,
++ 0x0000, 0x0010, 0x6017, 0x0000, 0x2b00, 0x6012, 0x080c, 0xb4e6,
++ 0x6023, 0x0003, 0x0016, 0x080c, 0x7d55, 0x0076, 0x903e, 0x080c,
++ 0x7c4d, 0x2c08, 0x080c, 0xc73e, 0x007e, 0x001e, 0xd184, 0x0128,
++ 0x080c, 0x9554, 0x9085, 0x0001, 0x0070, 0x080c, 0x4df2, 0x0128,
++ 0xd18c, 0x1170, 0x080c, 0xb1bc, 0x0148, 0x2009, 0x004c, 0x080c,
++ 0x95ce, 0x9085, 0x0001, 0x012e, 0x00ce, 0x0005, 0x9006, 0x0cd8,
++ 0x2900, 0x6016, 0x0c90, 0x2009, 0x004d, 0x0010, 0x2009, 0x004e,
++ 0x00f6, 0x00c6, 0x0046, 0x0016, 0x080c, 0x94fe, 0x2c78, 0x01d8,
++ 0x080c, 0x4df2, 0x0110, 0x7e2e, 0x0008, 0x7e16, 0x2b00, 0x7812,
++ 0x7823, 0x0003, 0x2021, 0x0005, 0x080c, 0xb1ce, 0x2f60, 0x080c,
++ 0x4df2, 0x0118, 0x080c, 0xb1bc, 0x0130, 0x001e, 0x0016, 0x080c,
++ 0x95ce, 0x9085, 0x0001, 0x001e, 0x004e, 0x00ce, 0x00fe, 0x0005,
++ 0x00f6, 0x00c6, 0x0046, 0x080c, 0x94fe, 0x2c78, 0x0530, 0x080c,
++ 0x4df2, 0x0110, 0x7e2e, 0x0008, 0x7e16, 0x2b00, 0x7812, 0x7823,
++ 0x0003, 0x0096, 0x2021, 0x0004, 0x0489, 0x009e, 0x2001, 0x194d,
++ 0x200c, 0xd1fc, 0x0120, 0x2f60, 0x080c, 0x9554, 0x0060, 0x2f60,
++ 0x080c, 0x4df2, 0x0120, 0xd18c, 0x1160, 0x0071, 0x0130, 0x2009,
++ 0x0052, 0x080c, 0x95ce, 0x9085, 0x0001, 0x004e, 0x00ce, 0x00fe,
++ 0x0005, 0x2900, 0x7816, 0x0c98, 0x00c6, 0x080c, 0x441f, 0x00ce,
++ 0x1120, 0x080c, 0x9554, 0x9006, 0x0005, 0xa867, 0x0000, 0xa86b,
++ 0x8000, 0x2900, 0x6016, 0x9085, 0x0001, 0x0005, 0x0096, 0x0076,
++ 0x0126, 0x2091, 0x8000, 0x080c, 0x5d41, 0x0158, 0x2001, 0xb1d3,
++ 0x0006, 0x900e, 0x2400, 0x080c, 0x63d1, 0x080c, 0x61a9, 0x000e,
++ 0x0807, 0x2418, 0x080c, 0x7fc0, 0xbaa0, 0x0086, 0x2041, 0x0001,
++ 0x2039, 0x0001, 0x2608, 0x080c, 0x7d6d, 0x008e, 0x080c, 0x7c4d,
++ 0x2f08, 0x2648, 0x080c, 0xc73e, 0xb93c, 0x81ff, 0x090c, 0x7e2b,
++ 0x080c, 0x8125, 0x012e, 0x007e, 0x009e, 0x0005, 0x00c6, 0x0126,
++ 0x2091, 0x8000, 0x080c, 0x94fe, 0x0190, 0x660a, 0x2b08, 0x6112,
++ 0x080c, 0xb4e6, 0x6023, 0x0001, 0x2900, 0x6016, 0x2009, 0x001f,
++ 0x080c, 0x95ce, 0x9085, 0x0001, 0x012e, 0x00ce, 0x0005, 0x9006,
++ 0x0cd8, 0x00c6, 0x0126, 0x2091, 0x8000, 0x080c, 0x95a1, 0x01b8,
++ 0x660a, 0x2b08, 0x6112, 0x080c, 0xb4e6, 0x6023, 0x0008, 0x2900,
++ 0x6016, 0x00f6, 0x2c78, 0x080c, 0x150d, 0x00fe, 0x2009, 0x0021,
++ 0x080c, 0x95ce, 0x9085, 0x0001, 0x012e, 0x00ce, 0x0005, 0x9006,
++ 0x0cd8, 0x2009, 0x003d, 0x00c6, 0x0126, 0x0016, 0x2091, 0x8000,
++ 0x080c, 0x94fe, 0x0198, 0x660a, 0x2b08, 0x6112, 0x080c, 0xb4e6,
++ 0x6023, 0x0001, 0x2900, 0x6016, 0x001e, 0x0016, 0x080c, 0x95ce,
++ 0x9085, 0x0001, 0x001e, 0x012e, 0x00ce, 0x0005, 0x9006, 0x0cd0,
++ 0x00c6, 0x0126, 0x2091, 0x8000, 0x080c, 0x95a1, 0x0188, 0x2b08,
++ 0x6112, 0x080c, 0xb4e6, 0x6023, 0x0001, 0x2900, 0x6016, 0x2009,
++ 0x0000, 0x080c, 0x95ce, 0x9085, 0x0001, 0x012e, 0x00ce, 0x0005,
++ 0x9006, 0x0cd8, 0x2009, 0x0044, 0x0830, 0x2009, 0x0049, 0x0818,
++ 0x0026, 0x00b6, 0x6210, 0x2258, 0xba3c, 0x82ff, 0x0110, 0x8211,
++ 0xba3e, 0x00be, 0x002e, 0x0005, 0x0006, 0x0016, 0x6004, 0x908e,
++ 0x0002, 0x0140, 0x908e, 0x0003, 0x0128, 0x908e, 0x0004, 0x0110,
++ 0x9085, 0x0001, 0x001e, 0x000e, 0x0005, 0x0006, 0x0096, 0x6014,
++ 0x904d, 0x0148, 0xa864, 0x9086, 0x0139, 0x0138, 0xa868, 0xd0fc,
++ 0x0110, 0x9006, 0x0010, 0x9085, 0x0001, 0x009e, 0x000e, 0x0005,
++ 0x00c6, 0x0126, 0x2091, 0x8000, 0x080c, 0x94fe, 0x0198, 0x2b08,
++ 0x6112, 0x080c, 0xb4e6, 0x6023, 0x0001, 0x2900, 0x6016, 0x080c,
++ 0x2d1a, 0x2009, 0x0028, 0x080c, 0x95ce, 0x9085, 0x0001, 0x012e,
++ 0x00ce, 0x0005, 0x9006, 0x0cd8, 0x9186, 0x0015, 0x11a8, 0x2011,
++ 0x1822, 0x2204, 0x9086, 0x0074, 0x1178, 0x00b6, 0x080c, 0xa0c5,
++ 0x00be, 0x080c, 0xa2bc, 0x6003, 0x0001, 0x6007, 0x0029, 0x080c,
++ 0x7c1d, 0x080c, 0x8125, 0x0078, 0x6014, 0x0096, 0x2048, 0xa868,
++ 0x009e, 0xd0fc, 0x0148, 0x2001, 0x0001, 0x080c, 0xb69a, 0x080c,
++ 0x9e99, 0x080c, 0x9554, 0x0005, 0x0096, 0x6014, 0x904d, 0x090c,
++ 0x0d84, 0xa87b, 0x0030, 0xa883, 0x0000, 0xa897, 0x4005, 0xa89b,
++ 0x0004, 0xa867, 0x0139, 0x0126, 0x2091, 0x8000, 0x080c, 0x61a9,
++ 0x012e, 0x009e, 0x080c, 0x9554, 0x0c30, 0x0096, 0x9186, 0x0016,
++ 0x1128, 0x2001, 0x0004, 0x080c, 0x5b61, 0x00e8, 0x9186, 0x0015,
++ 0x1510, 0x2011, 0x1822, 0x2204, 0x9086, 0x0014, 0x11e0, 0x6010,
++ 0x00b6, 0x2058, 0x080c, 0x5ca8, 0x00be, 0x080c, 0xa38d, 0x1198,
++ 0x6010, 0x00b6, 0x2058, 0xb890, 0x00be, 0x9005, 0x0160, 0x2001,
++ 0x0006, 0x080c, 0x5b61, 0x6014, 0x2048, 0xa868, 0xd0fc, 0x0170,
++ 0x080c, 0x9920, 0x0048, 0x6014, 0x2048, 0xa868, 0xd0fc, 0x0528,
++ 0x080c, 0x9e99, 0x080c, 0x9554, 0x009e, 0x0005, 0x6014, 0x6310,
++ 0x2358, 0x904d, 0x090c, 0x0d84, 0xa87b, 0x0000, 0xa883, 0x0000,
++ 0xa897, 0x4000, 0x900e, 0x080c, 0x5e2d, 0x1108, 0xc185, 0xb800,
++ 0xd0bc, 0x0108, 0xc18d, 0xa99a, 0x0126, 0x2091, 0x8000, 0x080c,
++ 0x61a9, 0x012e, 0x080c, 0x9554, 0x08f8, 0x6014, 0x904d, 0x090c,
++ 0x0d84, 0xa87b, 0x0030, 0xa883, 0x0000, 0xa897, 0x4005, 0xa89b,
++ 0x0004, 0xa867, 0x0139, 0x0126, 0x2091, 0x8000, 0x080c, 0x61a9,
++ 0x012e, 0x080c, 0x9554, 0x0840, 0xa878, 0x9086, 0x0005, 0x1108,
++ 0x0009, 0x0005, 0xa880, 0xc0ad, 0xa882, 0x0005, 0x6043, 0x0000,
++ 0x6017, 0x0000, 0x6003, 0x0001, 0x6007, 0x0050, 0x080c, 0x7bcb,
++ 0x080c, 0x8125, 0x0005, 0x00c6, 0x6010, 0x00b6, 0x2058, 0xb800,
++ 0x00be, 0xd0bc, 0x0120, 0x6020, 0x9084, 0x000f, 0x0013, 0x00ce,
++ 0x0005, 0xadfa, 0xb3aa, 0xb3aa, 0xb3ad, 0xca0f, 0xca2a, 0xca2d,
++ 0xadfa, 0xadfa, 0xadfa, 0xadfa, 0xadfa, 0xadfa, 0xadfa, 0xadfa,
++ 0x080c, 0x0d84, 0xa001, 0xa001, 0x0005, 0x0000, 0x6010, 0x00b6,
++ 0x2058, 0xb800, 0x00be, 0xd0bc, 0x0550, 0x00f6, 0x2c78, 0x080c,
++ 0x94fe, 0x1128, 0x2001, 0x1955, 0x2004, 0x7842, 0x00f8, 0x7810,
++ 0x6012, 0x080c, 0xb4e6, 0x7820, 0x9086, 0x0003, 0x0128, 0x7808,
++ 0x603a, 0x2f00, 0x603e, 0x0020, 0x7808, 0x603e, 0x2f00, 0x603a,
++ 0x602e, 0x6023, 0x0001, 0x6007, 0x0035, 0x6003, 0x0001, 0x7954,
++ 0x6156, 0x080c, 0x7bcb, 0x080c, 0x8125, 0x2f60, 0x00fe, 0x0005,
++ 0x0016, 0x0096, 0x6814, 0x2048, 0xa87c, 0xd0e4, 0x0170, 0xc0e4,
++ 0xa87e, 0xa877, 0x0000, 0xa893, 0x0000, 0xa88f, 0x0000, 0xd0cc,
++ 0x0120, 0xa878, 0x2048, 0x080c, 0x0f60, 0x6830, 0x6036, 0x908e,
++ 0x0001, 0x0148, 0x6803, 0x0002, 0x9086, 0x0005, 0x0168, 0x9006,
++ 0x602e, 0x6032, 0x00c8, 0x681c, 0xc085, 0x681e, 0x6803, 0x0004,
++ 0x6824, 0xc0f4, 0xc0d5, 0x6826, 0x6814, 0x2048, 0xa8ac, 0x6938,
++ 0x9102, 0xa8b0, 0x693c, 0x9103, 0x1e50, 0x683c, 0x602e, 0x6838,
++ 0x9084, 0xfffc, 0x683a, 0x6032, 0x2d00, 0x603a, 0x6808, 0x603e,
++ 0x6910, 0x6112, 0x6954, 0x6156, 0x6023, 0x0001, 0x6007, 0x0039,
++ 0x6003, 0x0001, 0x080c, 0x7bcb, 0x080c, 0x8125, 0x009e, 0x001e,
++ 0x0005, 0x6024, 0xd0d4, 0x0510, 0xd0f4, 0x11f8, 0x6038, 0x940a,
++ 0x603c, 0x9303, 0x0230, 0x9105, 0x0120, 0x6024, 0xc0d4, 0xc0f5,
++ 0x0098, 0x643a, 0x633e, 0xac3e, 0xab42, 0x0046, 0x0036, 0x2400,
++ 0xacac, 0x9402, 0xa836, 0x2300, 0xabb0, 0x9303, 0xa83a, 0x003e,
++ 0x004e, 0x6024, 0xc0d4, 0x0000, 0x6026, 0x0005, 0xd0f4, 0x1138,
++ 0xa83c, 0x603a, 0xa840, 0x603e, 0x6024, 0xc0f5, 0x6026, 0x0005,
++ 0x0006, 0x0016, 0x6004, 0x908e, 0x0034, 0x01b8, 0x908e, 0x0035,
++ 0x01a0, 0x908e, 0x0036, 0x0188, 0x908e, 0x0037, 0x0170, 0x908e,
++ 0x0038, 0x0158, 0x908e, 0x0039, 0x0140, 0x908e, 0x003a, 0x0128,
++ 0x908e, 0x003b, 0x0110, 0x9085, 0x0001, 0x001e, 0x000e, 0x0005,
++ 0x0006, 0x0016, 0x0026, 0x0036, 0x00e6, 0x2001, 0x194f, 0x200c,
++ 0x8000, 0x2014, 0x2001, 0x0032, 0x080c, 0x7a4b, 0x2001, 0x1953,
++ 0x82ff, 0x1110, 0x2011, 0x0014, 0x2202, 0x2001, 0x1951, 0x200c,
++ 0x8000, 0x2014, 0x2071, 0x193b, 0x711a, 0x721e, 0x2001, 0x0064,
++ 0x080c, 0x7a4b, 0x2001, 0x1954, 0x82ff, 0x1110, 0x2011, 0x0014,
++ 0x2202, 0x2001, 0x1955, 0x9288, 0x000a, 0x2102, 0x2001, 0x1a54,
++ 0x2102, 0x2001, 0x0032, 0x080c, 0x1492, 0x080c, 0x5f0e, 0x00ee,
++ 0x003e, 0x002e, 0x001e, 0x000e, 0x0005, 0x0006, 0x0016, 0x00e6,
++ 0x2001, 0x1953, 0x2003, 0x0028, 0x2001, 0x1954, 0x2003, 0x0014,
++ 0x2071, 0x193b, 0x701b, 0x0000, 0x701f, 0x07d0, 0x2001, 0x1955,
++ 0x2009, 0x001e, 0x2102, 0x2001, 0x1a54, 0x2102, 0x2001, 0x0032,
++ 0x080c, 0x1492, 0x00ee, 0x001e, 0x000e, 0x0005, 0x0096, 0x6058,
++ 0x904d, 0x0110, 0x080c, 0x0fe0, 0x009e, 0x0005, 0x0005, 0x00c6,
++ 0x0126, 0x2091, 0x8000, 0x080c, 0x94fe, 0x0180, 0x2b08, 0x6112,
++ 0x0ca9, 0x6023, 0x0001, 0x2900, 0x6016, 0x2009, 0x0033, 0x080c,
++ 0x95ce, 0x9085, 0x0001, 0x012e, 0x00ce, 0x0005, 0x9006, 0x0cd8,
++ 0x0096, 0x00e6, 0x00f6, 0x2071, 0x1800, 0x9186, 0x0015, 0x1500,
++ 0x7088, 0x9086, 0x0018, 0x11e0, 0x6014, 0x2048, 0xaa3c, 0xd2e4,
++ 0x1160, 0x2c78, 0x080c, 0x8315, 0x01d8, 0x7074, 0xaa50, 0x9206,
++ 0x1160, 0x7078, 0xaa54, 0x9206, 0x1140, 0x6210, 0x00b6, 0x2258,
++ 0xbaa0, 0x00be, 0x900e, 0x080c, 0x2d5f, 0x080c, 0x9920, 0x0020,
++ 0x080c, 0x9e99, 0x080c, 0x9554, 0x00fe, 0x00ee, 0x009e, 0x0005,
++ 0x7058, 0xaa54, 0x9206, 0x0d48, 0x0c80, 0x00c6, 0x0126, 0x2091,
++ 0x8000, 0x080c, 0x94fe, 0x0188, 0x2b08, 0x6112, 0x080c, 0xb4e6,
++ 0x6023, 0x0001, 0x2900, 0x6016, 0x2009, 0x004d, 0x080c, 0x95ce,
++ 0x9085, 0x0001, 0x012e, 0x00ce, 0x0005, 0x9006, 0x0cd8, 0x00c6,
++ 0x0126, 0x2091, 0x8000, 0x0016, 0x080c, 0x94fe, 0x0180, 0x2b08,
++ 0x6112, 0x080c, 0xb4e6, 0x6023, 0x0001, 0x2900, 0x6016, 0x001e,
++ 0x080c, 0x95ce, 0x9085, 0x0001, 0x012e, 0x00ce, 0x0005, 0x001e,
++ 0x9006, 0x0cd0, 0x0016, 0x0026, 0x0036, 0x0046, 0x0056, 0x0066,
++ 0x0096, 0x00e6, 0x00f6, 0x2071, 0x1800, 0x9186, 0x0015, 0x1568,
++ 0x7188, 0x6014, 0x2048, 0xa814, 0x8003, 0x9106, 0x1530, 0x20e1,
++ 0x0000, 0x2001, 0x196d, 0x2003, 0x0000, 0x6014, 0x2048, 0xa830,
++ 0x20a8, 0x8906, 0x8006, 0x8007, 0x9094, 0x003f, 0x22e8, 0x9084,
++ 0xffc0, 0x9080, 0x001b, 0x20a0, 0x2001, 0x196d, 0x0016, 0x200c,
++ 0x080c, 0xbcf8, 0x001e, 0xa804, 0x9005, 0x0110, 0x2048, 0x0c38,
++ 0x6014, 0x2048, 0xa867, 0x0103, 0x0010, 0x080c, 0x9e99, 0x080c,
++ 0x9554, 0x00fe, 0x00ee, 0x009e, 0x006e, 0x005e, 0x004e, 0x003e,
++ 0x002e, 0x001e, 0x0005, 0x0096, 0x00e6, 0x00f6, 0x2071, 0x1800,
++ 0x9186, 0x0015, 0x11b8, 0x7088, 0x9086, 0x0004, 0x1198, 0x6014,
++ 0x2048, 0x2c78, 0x080c, 0x8315, 0x01a8, 0x7074, 0xaa74, 0x9206,
++ 0x1130, 0x7078, 0xaa78, 0x9206, 0x1110, 0x080c, 0x2d1a, 0x080c,
++ 0x9920, 0x0020, 0x080c, 0x9e99, 0x080c, 0x9554, 0x00fe, 0x00ee,
++ 0x009e, 0x0005, 0x7058, 0xaa78, 0x9206, 0x0d78, 0x0c80, 0x0096,
++ 0x00e6, 0x00f6, 0x2071, 0x1800, 0x9186, 0x0015, 0x1538, 0x7088,
++ 0x9086, 0x0004, 0x1518, 0x6014, 0x2048, 0x2c78, 0x080c, 0x8315,
++ 0x05b8, 0x7074, 0xaacc, 0x9206, 0x1180, 0x7078, 0xaad0, 0x9206,
++ 0x1160, 0x080c, 0x2d1a, 0x0016, 0xa998, 0xaab0, 0x9284, 0x1000,
++ 0xc0fd, 0x080c, 0x4da2, 0x001e, 0x0010, 0x080c, 0x4b95, 0xa87b,
++ 0x0000, 0xa883, 0x0000, 0xa897, 0x4000, 0x0060, 0x080c, 0x4b95,
++ 0x6014, 0x2048, 0xa87b, 0x0030, 0xa883, 0x0000, 0xa897, 0x4005,
++ 0xa89b, 0x0004, 0x0126, 0x2091, 0x8000, 0xa867, 0x0139, 0x080c,
++ 0x61a9, 0x012e, 0x080c, 0x9554, 0x00fe, 0x00ee, 0x009e, 0x0005,
++ 0x7058, 0xaad0, 0x9206, 0x0968, 0x08c0, 0x0016, 0x0026, 0xa87c,
++ 0xd0ac, 0x0178, 0xa938, 0xaa34, 0x2100, 0x9205, 0x0150, 0xa890,
++ 0x9106, 0x1118, 0xa88c, 0x9206, 0x0120, 0xa992, 0xaa8e, 0x9085,
++ 0x0001, 0x002e, 0x001e, 0x0005, 0x00b6, 0x00d6, 0x0036, 0x0096,
++ 0x6314, 0x2348, 0xa87a, 0xa982, 0x929e, 0x4000, 0x1580, 0x6310,
++ 0x00c6, 0x2358, 0x2009, 0x0000, 0xa868, 0xd0f4, 0x1140, 0x080c,
++ 0x5e2d, 0x1108, 0xc185, 0xb800, 0xd0bc, 0x0108, 0xc18d, 0xaa96,
++ 0xa99a, 0x20a9, 0x0004, 0xa860, 0x20e8, 0xa85c, 0x9080, 0x0031,
++ 0x20a0, 0xb8b4, 0x20e0, 0xb8b8, 0x9080, 0x0006, 0x2098, 0x080c,
++ 0x0f2b, 0x20a9, 0x0004, 0xa85c, 0x9080, 0x0035, 0x20a0, 0xb8b8,
++ 0x9080, 0x000a, 0x2098, 0x080c, 0x0f2b, 0x00ce, 0x0090, 0xaa96,
++ 0x3918, 0x9398, 0x0007, 0x231c, 0x6004, 0x9086, 0x0016, 0x0110,
++ 0xa89b, 0x0004, 0xaba2, 0x6310, 0x2358, 0xb804, 0x9084, 0x00ff,
++ 0xa89e, 0x080c, 0x619c, 0x6017, 0x0000, 0x009e, 0x003e, 0x00de,
++ 0x00be, 0x0005, 0x0026, 0x0036, 0x0046, 0x00b6, 0x0096, 0x00f6,
++ 0x6214, 0x2248, 0x6210, 0x2258, 0x2079, 0x0260, 0x9096, 0x0000,
++ 0x11a0, 0xb814, 0x9084, 0x00ff, 0x900e, 0x080c, 0x23fd, 0x2118,
++ 0x831f, 0x939c, 0xff00, 0x7838, 0x9084, 0x00ff, 0x931d, 0x7c3c,
++ 0x2011, 0x8018, 0x080c, 0x447f, 0x00a8, 0x9096, 0x0001, 0x1148,
++ 0x89ff, 0x0180, 0xa89b, 0x000d, 0x7838, 0xa8a6, 0x783c, 0xa8aa,
++ 0x0048, 0x9096, 0x0002, 0x1130, 0xa89b, 0x000d, 0x7838, 0xa8a6,
++ 0x783c, 0xa8aa, 0x00fe, 0x009e, 0x00be, 0x004e, 0x003e, 0x002e,
++ 0x0005, 0x00c6, 0x0026, 0x0016, 0x9186, 0x0035, 0x0110, 0x6a38,
++ 0x0008, 0x6a2c, 0x080c, 0xb09b, 0x01f0, 0x2260, 0x6120, 0x9186,
++ 0x0003, 0x0118, 0x9186, 0x0006, 0x1190, 0x6838, 0x9206, 0x0140,
++ 0x683c, 0x9206, 0x1160, 0x6108, 0x6838, 0x9106, 0x1140, 0x0020,
++ 0x6008, 0x693c, 0x9106, 0x1118, 0x6010, 0x6910, 0x9106, 0x001e,
++ 0x002e, 0x00ce, 0x0005, 0x9085, 0x0001, 0x0cc8, 0xa974, 0xd1cc,
++ 0x0188, 0x918c, 0x00ff, 0x918e, 0x0002, 0x1160, 0xa9a8, 0x918c,
++ 0x0f00, 0x810f, 0x918e, 0x0001, 0x1128, 0xa834, 0xa938, 0x9115,
++ 0x190c, 0xa82a, 0x0005, 0x0036, 0x2019, 0x0001, 0x0010, 0x0036,
++ 0x901e, 0x0459, 0x01a0, 0x080c, 0xb0ad, 0x0188, 0x6037, 0x4000,
++ 0x6014, 0x6017, 0x0000, 0x0096, 0x2048, 0xa87c, 0xa867, 0x0103,
++ 0xa877, 0x0000, 0x83ff, 0x1129, 0x080c, 0x61a9, 0x009e, 0x003e,
++ 0x0005, 0xa880, 0xd0b4, 0x0128, 0xa87b, 0x0006, 0xc0ec, 0xa882,
++ 0x0048, 0xd0bc, 0x0118, 0xa87b, 0x0002, 0x0020, 0xa87b, 0x0005,
++ 0x080c, 0xb37a, 0xa877, 0x0000, 0x0005, 0x2001, 0x180f, 0x2004,
++ 0xd0ec, 0x0005, 0x0006, 0x2001, 0x180f, 0x2004, 0xd0f4, 0x000e,
++ 0x0005, 0x2001, 0x180f, 0x2004, 0xd0e4, 0x0005, 0x0036, 0x0046,
++ 0x6010, 0x00b6, 0x2058, 0xbba0, 0x00be, 0x2021, 0x0007, 0x080c,
++ 0x44f9, 0x004e, 0x003e, 0x0005, 0x0c61, 0x1d81, 0x0005, 0x2001,
++ 0x1953, 0x2004, 0x601a, 0x0005, 0x2001, 0x1955, 0x2004, 0x6042,
++ 0x0005, 0x080c, 0x9554, 0x0804, 0x8125, 0x00b6, 0x0066, 0x6000,
++ 0x90b2, 0x0016, 0x1a0c, 0x0d84, 0x001b, 0x006e, 0x00be, 0x0005,
++ 0xb798, 0xbdf9, 0xbf54, 0xb798, 0xb798, 0xb798, 0xb798, 0xb798,
++ 0xb7cf, 0xbfcf, 0xb798, 0xb798, 0xb798, 0xb798, 0xb798, 0xb798,
++ 0x080c, 0x0d84, 0x0066, 0x6000, 0x90b2, 0x0016, 0x1a0c, 0x0d84,
++ 0x0013, 0x006e, 0x0005, 0xb7b3, 0xc519, 0xb7b3, 0xb7b3, 0xb7b3,
++ 0xb7b3, 0xb7b3, 0xb7b3, 0xc4c8, 0xc56d, 0xb7b3, 0xcb4c, 0xcb82,
++ 0xcb4c, 0xcb82, 0xb7b3, 0x080c, 0x0d84, 0x6000, 0x9082, 0x0016,
++ 0x1a0c, 0x0d84, 0x6000, 0x000a, 0x0005, 0xb7cd, 0xc1ad, 0xc29d,
++ 0xc2bf, 0xc366, 0xb7cd, 0xc43f, 0xc3ee, 0xbfdb, 0xc49e, 0xc4b3,
++ 0xb7cd, 0xb7cd, 0xb7cd, 0xb7cd, 0xb7cd, 0x080c, 0x0d84, 0x91b2,
++ 0x0053, 0x1a0c, 0x0d84, 0x2100, 0x91b2, 0x0040, 0x1a04, 0xbbfa,
++ 0x0002, 0xb819, 0xb9eb, 0xb819, 0xb819, 0xb819, 0xb9f4, 0xb819,
++ 0xb819, 0xb819, 0xb819, 0xb819, 0xb819, 0xb819, 0xb819, 0xb819,
++ 0xb819, 0xb819, 0xb819, 0xb819, 0xb819, 0xb819, 0xb819, 0xb819,
++ 0xb81b, 0xb871, 0xb880, 0xb8e1, 0xb908, 0xb97f, 0xb9d6, 0xb819,
++ 0xb819, 0xb9f7, 0xb819, 0xb819, 0xba0c, 0xba19, 0xb819, 0xb819,
++ 0xb819, 0xb819, 0xb819, 0xba9c, 0xb819, 0xb819, 0xbab0, 0xb819,
++ 0xb819, 0xba6b, 0xb819, 0xb819, 0xb819, 0xbac8, 0xb819, 0xb819,
++ 0xb819, 0xbb45, 0xb819, 0xb819, 0xb819, 0xb819, 0xb819, 0xb819,
++ 0xbbc2, 0x080c, 0x0d84, 0x080c, 0x5eeb, 0x1150, 0x2001, 0x1836,
++ 0x2004, 0xd0cc, 0x1128, 0x9084, 0x0009, 0x9086, 0x0008, 0x1140,
++ 0x6007, 0x0009, 0x602f, 0x0009, 0x6017, 0x0000, 0x0804, 0xb9e4,
++ 0x080c, 0x5ed5, 0x00e6, 0x00c6, 0x0036, 0x0026, 0x0016, 0x6210,
++ 0x2258, 0xbaa0, 0x0026, 0x2019, 0x0029, 0x080c, 0x7d55, 0x0076,
++ 0x903e, 0x080c, 0x7c4d, 0x2c08, 0x080c, 0xc73e, 0x007e, 0x001e,
++ 0x001e, 0x002e, 0x003e, 0x00ce, 0x00ee, 0x6610, 0x2658, 0x080c,
++ 0x5c1c, 0xbe04, 0x9684, 0x00ff, 0x9082, 0x0006, 0x0278, 0x080c,
++ 0xc675, 0x1904, 0xb8db, 0x080c, 0xc611, 0x1120, 0x6007, 0x0008,
++ 0x0804, 0xb9e4, 0x6007, 0x0009, 0x0804, 0xb9e4, 0x080c, 0xc860,
++ 0x0128, 0x080c, 0xc675, 0x0d78, 0x0804, 0xb8db, 0x6017, 0x1900,
++ 0x0c88, 0x080c, 0x2e39, 0x1904, 0xbbf7, 0x6106, 0x080c, 0xc5c8,
++ 0x6007, 0x0006, 0x0804, 0xb9e4, 0x6007, 0x0007, 0x0804, 0xb9e4,
++ 0x080c, 0xcbbe, 0x1904, 0xbbf7, 0x080c, 0x2e39, 0x1904, 0xbbf7,
++ 0x00d6, 0x6610, 0x2658, 0xbe04, 0x9684, 0x00ff, 0x9082, 0x0006,
++ 0x1220, 0x2001, 0x0001, 0x080c, 0x5b4d, 0x96b4, 0xff00, 0x8637,
++ 0x9686, 0x0006, 0x0188, 0x9686, 0x0004, 0x0170, 0xbe04, 0x96b4,
++ 0x00ff, 0x9686, 0x0006, 0x0140, 0x9686, 0x0004, 0x0128, 0x9686,
++ 0x0005, 0x0110, 0x00de, 0x0478, 0x00e6, 0x2071, 0x0260, 0x7034,
++ 0x90b4, 0x0003, 0x1138, 0x90b2, 0x0014, 0x0220, 0x7030, 0x9084,
++ 0x0003, 0x0130, 0x00ee, 0x6017, 0x0000, 0x602f, 0x0007, 0x00b0,
++ 0x00ee, 0x080c, 0xc6d4, 0x1190, 0x9686, 0x0006, 0x1140, 0x0026,
++ 0x6210, 0x2258, 0xbaa0, 0x900e, 0x080c, 0x2d5f, 0x002e, 0x080c,
++ 0x5ca8, 0x6007, 0x000a, 0x00de, 0x0804, 0xb9e4, 0x6007, 0x000b,
++ 0x00de, 0x0804, 0xb9e4, 0x080c, 0x2d1a, 0x6007, 0x0001, 0x0804,
++ 0xb9e4, 0x080c, 0xcbbe, 0x1904, 0xbbf7, 0x080c, 0x2e39, 0x1904,
++ 0xbbf7, 0x2071, 0x0260, 0x7034, 0x90b4, 0x0003, 0x1958, 0x90b2,
++ 0x0014, 0x0a40, 0x7030, 0x9084, 0x0003, 0x1920, 0x6610, 0x2658,
++ 0xbe04, 0x9686, 0x0707, 0x09f8, 0x0026, 0x6210, 0x2258, 0xbaa0,
++ 0x900e, 0x080c, 0x2d5f, 0x002e, 0x6007, 0x000c, 0x0804, 0xb9e4,
++ 0x080c, 0x5eeb, 0x1140, 0x2001, 0x1836, 0x2004, 0x9084, 0x0009,
++ 0x9086, 0x0008, 0x1110, 0x0804, 0xb828, 0x080c, 0x5ed5, 0x6610,
++ 0x2658, 0xbe04, 0x9684, 0x00ff, 0x9082, 0x0006, 0x06b8, 0x1138,
++ 0x0026, 0x2001, 0x0006, 0x080c, 0x5b8d, 0x002e, 0x0050, 0x96b4,
++ 0xff00, 0x8637, 0x9686, 0x0004, 0x0120, 0x9686, 0x0006, 0x1904,
++ 0xb8db, 0x080c, 0xc6e1, 0x1120, 0x6007, 0x000e, 0x0804, 0xb9e4,
++ 0x0046, 0x6410, 0x2458, 0xbca0, 0x0046, 0x080c, 0x2d1a, 0x004e,
++ 0x0016, 0x9006, 0x2009, 0x1853, 0x210c, 0xd1a4, 0x0148, 0x2009,
++ 0x0029, 0x080c, 0xc9c5, 0x6010, 0x2058, 0xb800, 0xc0e5, 0xb802,
++ 0x001e, 0x004e, 0x6007, 0x0001, 0x0804, 0xb9e4, 0x2001, 0x0001,
++ 0x080c, 0x5b4d, 0x0156, 0x0016, 0x0026, 0x0036, 0x20a9, 0x0004,
++ 0x2019, 0x1805, 0x2011, 0x0270, 0x080c, 0xa425, 0x003e, 0x002e,
++ 0x001e, 0x015e, 0x9005, 0x0168, 0x96b4, 0xff00, 0x8637, 0x9682,
++ 0x0004, 0x0a04, 0xb8db, 0x9682, 0x0007, 0x0a04, 0xb931, 0x0804,
++ 0xb8db, 0x6017, 0x1900, 0x6007, 0x0009, 0x0804, 0xb9e4, 0x080c,
++ 0x5eeb, 0x1140, 0x2001, 0x1836, 0x2004, 0x9084, 0x0009, 0x9086,
++ 0x0008, 0x1110, 0x0804, 0xb828, 0x080c, 0x5ed5, 0x6610, 0x2658,
++ 0xbe04, 0x9684, 0x00ff, 0x9082, 0x0006, 0x0680, 0x96b4, 0xff00,
++ 0x8637, 0x9686, 0x0004, 0x0120, 0x9686, 0x0006, 0x1904, 0xb8db,
++ 0x080c, 0xc70f, 0x1130, 0x080c, 0xc611, 0x1118, 0x6007, 0x0010,
++ 0x04d8, 0x0046, 0x6410, 0x2458, 0xbca0, 0x0046, 0x080c, 0x2d1a,
++ 0x004e, 0x0016, 0x9006, 0x2009, 0x1853, 0x210c, 0xd1a4, 0x0148,
++ 0x2009, 0x0029, 0x080c, 0xc9c5, 0x6010, 0x2058, 0xb800, 0xc0e5,
++ 0xb802, 0x001e, 0x004e, 0x6007, 0x0001, 0x00f0, 0x080c, 0xc860,
++ 0x0140, 0x96b4, 0xff00, 0x8637, 0x9686, 0x0006, 0x0988, 0x0804,
++ 0xb8db, 0x6017, 0x1900, 0x6007, 0x0009, 0x0070, 0x080c, 0x2e39,
++ 0x1904, 0xbbf7, 0x080c, 0xcbbe, 0x1904, 0xbbf7, 0x080c, 0xbd93,
++ 0x1904, 0xb8db, 0x6007, 0x0012, 0x6003, 0x0001, 0x080c, 0x7c1d,
++ 0x080c, 0x8125, 0x0005, 0x6007, 0x0001, 0x6003, 0x0001, 0x080c,
++ 0x7c1d, 0x080c, 0x8125, 0x0cb0, 0x6007, 0x0005, 0x0c68, 0x080c,
++ 0xcbbe, 0x1904, 0xbbf7, 0x080c, 0x2e39, 0x1904, 0xbbf7, 0x080c,
++ 0xbd93, 0x1904, 0xb8db, 0x6007, 0x0020, 0x6003, 0x0001, 0x080c,
++ 0x7c1d, 0x080c, 0x8125, 0x0005, 0x080c, 0x2e39, 0x1904, 0xbbf7,
++ 0x6007, 0x0023, 0x6003, 0x0001, 0x080c, 0x7c1d, 0x080c, 0x8125,
++ 0x0005, 0x080c, 0xcbbe, 0x1904, 0xbbf7, 0x080c, 0x2e39, 0x1904,
++ 0xbbf7, 0x080c, 0xbd93, 0x1904, 0xb8db, 0x0016, 0x0026, 0x00e6,
++ 0x2071, 0x0260, 0x7244, 0x9286, 0xffff, 0x0180, 0x2c08, 0x080c,
++ 0xb09b, 0x01b0, 0x2260, 0x7240, 0x6008, 0x9206, 0x1188, 0x6010,
++ 0x9190, 0x0004, 0x2214, 0x9206, 0x01b8, 0x0050, 0x7240, 0x2c08,
++ 0x9006, 0x080c, 0xc997, 0x1180, 0x7244, 0x9286, 0xffff, 0x01b0,
++ 0x2160, 0x6007, 0x0026, 0x6017, 0x1700, 0x7214, 0x9296, 0xffff,
++ 0x1180, 0x6007, 0x0025, 0x0068, 0x6020, 0x9086, 0x0007, 0x1d80,
++ 0x6004, 0x9086, 0x0024, 0x1110, 0x080c, 0x9554, 0x2160, 0x6007,
++ 0x0025, 0x6003, 0x0001, 0x080c, 0x7c1d, 0x080c, 0x8125, 0x00ee,
++ 0x002e, 0x001e, 0x0005, 0x2001, 0x0001, 0x080c, 0x5b4d, 0x0156,
++ 0x0016, 0x0026, 0x0036, 0x20a9, 0x0004, 0x2019, 0x1805, 0x2011,
++ 0x0276, 0x080c, 0xa425, 0x003e, 0x002e, 0x001e, 0x015e, 0x0120,
++ 0x6007, 0x0031, 0x0804, 0xb9e4, 0x080c, 0xa0dc, 0x080c, 0x6877,
++ 0x1190, 0x0006, 0x0026, 0x0036, 0x080c, 0x6891, 0x1138, 0x080c,
++ 0x6b40, 0x080c, 0x56d9, 0x080c, 0x67be, 0x0010, 0x080c, 0x6853,
++ 0x003e, 0x002e, 0x000e, 0x0005, 0x080c, 0x2e39, 0x1904, 0xbbf7,
++ 0x080c, 0xbd93, 0x1904, 0xb8db, 0x6106, 0x080c, 0xbdaf, 0x1120,
++ 0x6007, 0x002b, 0x0804, 0xb9e4, 0x6007, 0x002c, 0x0804, 0xb9e4,
++ 0x080c, 0xcbbe, 0x1904, 0xbbf7, 0x080c, 0x2e39, 0x1904, 0xbbf7,
++ 0x080c, 0xbd93, 0x1904, 0xb8db, 0x6106, 0x080c, 0xbdb3, 0x1120,
++ 0x6007, 0x002e, 0x0804, 0xb9e4, 0x6007, 0x002f, 0x0804, 0xb9e4,
++ 0x080c, 0x2e39, 0x1904, 0xbbf7, 0x00e6, 0x00d6, 0x00c6, 0x6010,
++ 0x2058, 0xb804, 0x9184, 0x00ff, 0x9086, 0x0006, 0x0158, 0x9184,
++ 0xff00, 0x8007, 0x9086, 0x0006, 0x0128, 0x00ce, 0x00de, 0x00ee,
++ 0x0804, 0xb9eb, 0x080c, 0x4dee, 0xd0e4, 0x0904, 0xbb42, 0x2071,
++ 0x026c, 0x7010, 0x603a, 0x7014, 0x603e, 0x7108, 0x720c, 0x080c,
++ 0x5f29, 0x0140, 0x6010, 0x2058, 0xb810, 0x9106, 0x1118, 0xb814,
++ 0x9206, 0x0510, 0x080c, 0x5f25, 0x15b8, 0x2069, 0x1800, 0x6878,
++ 0x9206, 0x1590, 0x6874, 0x9106, 0x1578, 0x7210, 0x080c, 0xb09b,
++ 0x0590, 0x080c, 0xbc80, 0x0578, 0x080c, 0xca3c, 0x0560, 0x622e,
++ 0x6007, 0x0036, 0x6003, 0x0001, 0x080c, 0x7bcb, 0x080c, 0x8125,
++ 0x00ce, 0x00de, 0x00ee, 0x0005, 0x7214, 0x9286, 0xffff, 0x0150,
++ 0x080c, 0xb09b, 0x01c0, 0x9280, 0x0002, 0x2004, 0x7110, 0x9106,
++ 0x1190, 0x08e0, 0x7210, 0x2c08, 0x9085, 0x0001, 0x080c, 0xc997,
++ 0x2c10, 0x2160, 0x0140, 0x0890, 0x6007, 0x0037, 0x602f, 0x0009,
++ 0x6017, 0x1500, 0x08b8, 0x6007, 0x0037, 0x602f, 0x0003, 0x6017,
++ 0x1700, 0x0880, 0x6007, 0x0012, 0x0868, 0x080c, 0x2e39, 0x1904,
++ 0xbbf7, 0x6010, 0x2058, 0xb804, 0x9084, 0xff00, 0x8007, 0x9086,
++ 0x0006, 0x1904, 0xb9eb, 0x00e6, 0x00d6, 0x00c6, 0x080c, 0x4dee,
++ 0xd0e4, 0x0904, 0xbbba, 0x2069, 0x1800, 0x2071, 0x026c, 0x7008,
++ 0x603a, 0x720c, 0x623e, 0x9286, 0xffff, 0x1150, 0x7208, 0x00c6,
++ 0x2c08, 0x9085, 0x0001, 0x080c, 0xc997, 0x2c10, 0x00ce, 0x05e8,
++ 0x080c, 0xb09b, 0x05d0, 0x7108, 0x9280, 0x0002, 0x2004, 0x9106,
++ 0x15a0, 0x00c6, 0x0026, 0x2260, 0x080c, 0xad11, 0x002e, 0x00ce,
++ 0x7118, 0x918c, 0xff00, 0x810f, 0x9186, 0x0001, 0x0178, 0x9186,
++ 0x0005, 0x0118, 0x9186, 0x0007, 0x1198, 0x9280, 0x0005, 0x2004,
++ 0x9005, 0x0170, 0x080c, 0xbc80, 0x0904, 0xbb3b, 0x0056, 0x7510,
++ 0x7614, 0x080c, 0xca55, 0x005e, 0x00ce, 0x00de, 0x00ee, 0x0005,
++ 0x6007, 0x003b, 0x602f, 0x0009, 0x6017, 0x2a00, 0x6003, 0x0001,
++ 0x080c, 0x7bcb, 0x080c, 0x8125, 0x0c78, 0x6007, 0x003b, 0x602f,
++ 0x0003, 0x6017, 0x0300, 0x6003, 0x0001, 0x080c, 0x7bcb, 0x080c,
++ 0x8125, 0x0c10, 0x6007, 0x003b, 0x602f, 0x000b, 0x6017, 0x0000,
++ 0x0804, 0xbb12, 0x00e6, 0x0026, 0x080c, 0x5eeb, 0x0550, 0x080c,
++ 0x5ed5, 0x080c, 0xcc30, 0x1518, 0x2071, 0x1800, 0x70d8, 0x9085,
++ 0x0003, 0x70da, 0x00f6, 0x2079, 0x0100, 0x72a8, 0x9284, 0x00ff,
++ 0x7076, 0x78e6, 0x9284, 0xff00, 0x7278, 0x9205, 0x707a, 0x78ea,
++ 0x00fe, 0x70e3, 0x0000, 0x080c, 0x5f29, 0x0120, 0x2011, 0x19cd,
++ 0x2013, 0x07d0, 0xd0ac, 0x1128, 0x080c, 0x2b1e, 0x0010, 0x080c,
++ 0xcc62, 0x002e, 0x00ee, 0x080c, 0x9554, 0x0804, 0xb9ea, 0x080c,
++ 0x9554, 0x0005, 0x2600, 0x0002, 0xbc0e, 0xbc0e, 0xbc0e, 0xbc0e,
++ 0xbc0e, 0xbc10, 0xbc0e, 0xbc0e, 0xbc0e, 0xbc0e, 0xbc2b, 0xbc0e,
++ 0xbc0e, 0xbc0e, 0xbc3d, 0xbc4a, 0xbc7b, 0xbc0e, 0x080c, 0x0d84,
++ 0x080c, 0xcbbe, 0x1d20, 0x080c, 0x2e39, 0x1d08, 0x080c, 0xbd93,
++ 0x1148, 0x7038, 0x6016, 0x6007, 0x0045, 0x6003, 0x0001, 0x080c,
++ 0x7c1d, 0x0005, 0x080c, 0x2d1a, 0x6007, 0x0001, 0x6003, 0x0001,
++ 0x080c, 0x7c1d, 0x0005, 0x080c, 0xcbbe, 0x1948, 0x080c, 0x2e39,
++ 0x1930, 0x080c, 0xbd93, 0x1d70, 0x703c, 0x6016, 0x6007, 0x004a,
++ 0x6003, 0x0001, 0x080c, 0x7c1d, 0x0005, 0x080c, 0xbc9b, 0x0904,
++ 0xbbf7, 0x6007, 0x004e, 0x6003, 0x0001, 0x080c, 0x7c1d, 0x080c,
++ 0x8125, 0x0005, 0x6007, 0x004f, 0x6017, 0x0000, 0x7134, 0x918c,
++ 0x00ff, 0x81ff, 0x0508, 0x9186, 0x0001, 0x1160, 0x7140, 0x2001,
++ 0x198a, 0x2004, 0x9106, 0x11b0, 0x7144, 0x2001, 0x198b, 0x2004,
++ 0x9106, 0x0190, 0x9186, 0x0002, 0x1168, 0x2011, 0x0276, 0x20a9,
++ 0x0004, 0x6010, 0x0096, 0x2048, 0x2019, 0x000a, 0x080c, 0xa439,
++ 0x009e, 0x0110, 0x6017, 0x0001, 0x6003, 0x0001, 0x080c, 0x7c1d,
++ 0x080c, 0x8125, 0x0005, 0x6007, 0x0050, 0x703c, 0x6016, 0x0ca0,
++ 0x00e6, 0x2071, 0x0260, 0x00b6, 0x00c6, 0x2260, 0x6010, 0x2058,
++ 0xb8bc, 0xd084, 0x0150, 0x7128, 0x6048, 0x9106, 0x1120, 0x712c,
++ 0x6044, 0x9106, 0x0110, 0x9006, 0x0010, 0x9085, 0x0001, 0x00ce,
++ 0x00be, 0x00ee, 0x0005, 0x0016, 0x0096, 0x0086, 0x00e6, 0x01c6,
++ 0x01d6, 0x0126, 0x2091, 0x8000, 0x2071, 0x1800, 0x7088, 0x908a,
++ 0x00f9, 0x16e8, 0x20e1, 0x0000, 0x2001, 0x196d, 0x2003, 0x0000,
++ 0x080c, 0x0fc7, 0x05a0, 0x2900, 0x6016, 0x7088, 0x8004, 0xa816,
++ 0x908a, 0x001e, 0x02d0, 0xa833, 0x001e, 0x20a9, 0x001e, 0xa860,
++ 0x20e8, 0xa85c, 0x9080, 0x001b, 0x20a0, 0x2001, 0x196d, 0x0016,
++ 0x200c, 0x0471, 0x001e, 0x2940, 0x080c, 0x0fc7, 0x01c0, 0x2900,
++ 0xa006, 0x2100, 0x81ff, 0x0180, 0x0c18, 0xa832, 0x20a8, 0xa860,
++ 0x20e8, 0xa85c, 0x9080, 0x001b, 0x20a0, 0x2001, 0x196d, 0x0016,
++ 0x200c, 0x00b1, 0x001e, 0x0000, 0x9085, 0x0001, 0x0048, 0x2071,
++ 0x1800, 0x708b, 0x0000, 0x6014, 0x2048, 0x080c, 0x0f60, 0x9006,
++ 0x012e, 0x01de, 0x01ce, 0x00ee, 0x008e, 0x009e, 0x001e, 0x0005,
++ 0x0006, 0x0016, 0x0026, 0x0036, 0x00c6, 0x918c, 0xffff, 0x11a8,
++ 0x080c, 0x1fed, 0x2099, 0x026c, 0x2001, 0x0014, 0x3518, 0x9312,
++ 0x1218, 0x23a8, 0x4003, 0x00f8, 0x20a8, 0x4003, 0x22a8, 0x8108,
++ 0x080c, 0x1fed, 0x2099, 0x0260, 0x0ca8, 0x080c, 0x1fed, 0x2061,
++ 0x196d, 0x6004, 0x2098, 0x6008, 0x3518, 0x9312, 0x1218, 0x23a8,
++ 0x4003, 0x0048, 0x20a8, 0x4003, 0x22a8, 0x8108, 0x080c, 0x1fed,
++ 0x2099, 0x0260, 0x0ca8, 0x2061, 0x196d, 0x2019, 0x0280, 0x3300,
++ 0x931e, 0x0110, 0x6006, 0x0020, 0x2001, 0x0260, 0x6006, 0x8108,
++ 0x2162, 0x9292, 0x0021, 0x9296, 0xffff, 0x620a, 0x00ce, 0x003e,
++ 0x002e, 0x001e, 0x000e, 0x0005, 0x0006, 0x0016, 0x0026, 0x0036,
++ 0x00c6, 0x81ff, 0x11b8, 0x080c, 0x2005, 0x20a1, 0x024c, 0x2001,
++ 0x0014, 0x3518, 0x9312, 0x1218, 0x23a8, 0x4003, 0x0418, 0x20a8,
++ 0x4003, 0x82ff, 0x01f8, 0x22a8, 0x8108, 0x080c, 0x2005, 0x20a1,
++ 0x0240, 0x0c98, 0x080c, 0x2005, 0x2061, 0x1970, 0x6004, 0x20a0,
++ 0x6008, 0x3518, 0x9312, 0x1218, 0x23a8, 0x4003, 0x0058, 0x20a8,
++ 0x4003, 0x82ff, 0x0138, 0x22a8, 0x8108, 0x080c, 0x2005, 0x20a1,
++ 0x0240, 0x0c98, 0x2061, 0x1970, 0x2019, 0x0260, 0x3400, 0x931e,
++ 0x0110, 0x6006, 0x0020, 0x2001, 0x0240, 0x6006, 0x8108, 0x2162,
++ 0x9292, 0x0021, 0x9296, 0xffff, 0x620a, 0x00ce, 0x003e, 0x002e,
++ 0x001e, 0x000e, 0x0005, 0x00b6, 0x0066, 0x6610, 0x2658, 0xbe04,
++ 0x96b4, 0xff00, 0x8637, 0x9686, 0x0006, 0x0170, 0x9686, 0x0004,
++ 0x0158, 0xbe04, 0x96b4, 0x00ff, 0x9686, 0x0006, 0x0128, 0x9686,
++ 0x0004, 0x0110, 0x9085, 0x0001, 0x006e, 0x00be, 0x0005, 0x00d6,
++ 0x0441, 0x00de, 0x0005, 0x00d6, 0x0489, 0x11e8, 0x680c, 0x908c,
++ 0xff00, 0x6820, 0x9084, 0x00ff, 0x9115, 0x6216, 0x6824, 0x602e,
++ 0xd1e4, 0x0118, 0x2009, 0x0001, 0x0058, 0xd1ec, 0x0160, 0x6920,
++ 0x918c, 0x00ff, 0x6824, 0x080c, 0x23fd, 0x1128, 0x2110, 0x900e,
++ 0x080c, 0x2d5f, 0x0018, 0x9085, 0x0001, 0x0008, 0x9006, 0x00de,
++ 0x0005, 0x2069, 0x026d, 0x6800, 0x9082, 0x0010, 0x1228, 0x6017,
++ 0x0000, 0x9085, 0x0001, 0x0008, 0x9006, 0x0005, 0x6017, 0x0000,
++ 0x2069, 0x026c, 0x6808, 0x9084, 0xff00, 0x9086, 0x0800, 0x1140,
++ 0x6800, 0x9084, 0x00ff, 0x908e, 0x0014, 0x0110, 0x908e, 0x0010,
++ 0x0005, 0x6004, 0x90b2, 0x0053, 0x1a0c, 0x0d84, 0x91b6, 0x0013,
++ 0x1130, 0x2008, 0x91b2, 0x0040, 0x1a04, 0xbf24, 0x0092, 0x91b6,
++ 0x0027, 0x0120, 0x91b6, 0x0014, 0x190c, 0x0d84, 0x2001, 0x0007,
++ 0x080c, 0x5b8d, 0x080c, 0x8026, 0x080c, 0x9584, 0x080c, 0x8125,
++ 0x0005, 0xbe59, 0xbe5b, 0xbe59, 0xbe59, 0xbe59, 0xbe5b, 0xbe6a,
++ 0xbf1d, 0xbebc, 0xbf1d, 0xbece, 0xbf1d, 0xbe6a, 0xbf1d, 0xbf15,
++ 0xbf1d, 0xbf15, 0xbf1d, 0xbf1d, 0xbe59, 0xbe59, 0xbe59, 0xbe59,
++ 0xbe59, 0xbe59, 0xbe59, 0xbe59, 0xbe59, 0xbe59, 0xbe59, 0xbe5b,
++ 0xbe59, 0xbf1d, 0xbe59, 0xbe59, 0xbf1d, 0xbe59, 0xbf1a, 0xbf1d,
++ 0xbe59, 0xbe59, 0xbe59, 0xbe59, 0xbf1d, 0xbf1d, 0xbe59, 0xbf1d,
++ 0xbf1d, 0xbe59, 0xbe65, 0xbe59, 0xbe59, 0xbe59, 0xbe59, 0xbf19,
++ 0xbf1d, 0xbe59, 0xbe59, 0xbf1d, 0xbf1d, 0xbe59, 0xbe59, 0xbe59,
++ 0xbe59, 0x080c, 0x0d84, 0x080c, 0x8026, 0x080c, 0xb76f, 0x6003,
++ 0x0002, 0x080c, 0x8125, 0x0804, 0xbf23, 0x9006, 0x080c, 0x5b4d,
++ 0x0804, 0xbf1d, 0x080c, 0x5f25, 0x1904, 0xbf1d, 0x9006, 0x080c,
++ 0x5b4d, 0x6010, 0x2058, 0xb810, 0x9086, 0x00ff, 0x1140, 0x00f6,
++ 0x2079, 0x1800, 0x78a0, 0x8000, 0x78a2, 0x00fe, 0x0428, 0x6010,
++ 0x2058, 0xb8b0, 0x9005, 0x1178, 0x080c, 0xb759, 0x1904, 0xbf1d,
++ 0x0036, 0x0046, 0xbba0, 0x2021, 0x0007, 0x080c, 0x44f9, 0x004e,
++ 0x003e, 0x0804, 0xbf1d, 0x080c, 0x2e64, 0x1904, 0xbf1d, 0x2001,
++ 0x1800, 0x2004, 0x9086, 0x0002, 0x1138, 0x00f6, 0x2079, 0x1800,
++ 0x78a0, 0x8000, 0x78a2, 0x00fe, 0x2001, 0x0002, 0x080c, 0x5b61,
++ 0x080c, 0x8026, 0x6023, 0x0001, 0x6003, 0x0001, 0x6007, 0x0002,
++ 0x080c, 0x7c1d, 0x080c, 0x8125, 0x6110, 0x2158, 0x2009, 0x0001,
++ 0x080c, 0x7826, 0x0804, 0xbf23, 0x6610, 0x2658, 0xbe04, 0x96b4,
++ 0xff00, 0x8637, 0x9686, 0x0006, 0x0904, 0xbf1d, 0x9686, 0x0004,
++ 0x0904, 0xbf1d, 0x2001, 0x0004, 0x0804, 0xbf1b, 0x2001, 0x1800,
++ 0x2004, 0x9086, 0x0003, 0x1158, 0x0036, 0x0046, 0x6010, 0x2058,
++ 0xbba0, 0x2021, 0x0006, 0x080c, 0x44f9, 0x004e, 0x003e, 0x2001,
++ 0x0006, 0x080c, 0xbf41, 0x6610, 0x2658, 0xbe04, 0x0066, 0x96b4,
++ 0xff00, 0x8637, 0x9686, 0x0006, 0x006e, 0x0168, 0x2001, 0x0006,
++ 0x080c, 0x5b8d, 0x9284, 0x00ff, 0x908e, 0x0007, 0x1120, 0x2001,
++ 0x0006, 0x080c, 0x5b61, 0x080c, 0x5f25, 0x11f8, 0x2001, 0x1836,
++ 0x2004, 0xd0a4, 0x01d0, 0xbe04, 0x96b4, 0x00ff, 0x9686, 0x0006,
++ 0x01a0, 0x00f6, 0x2079, 0x1800, 0x78a0, 0x8000, 0x78a2, 0x00fe,
++ 0x0804, 0xbea4, 0x2001, 0x0004, 0x0030, 0x2001, 0x0006, 0x0449,
++ 0x0020, 0x0018, 0x0010, 0x080c, 0x5b8d, 0x080c, 0x8026, 0x080c,
++ 0x9554, 0x080c, 0x8125, 0x0005, 0x2600, 0x0002, 0xbf38, 0xbf38,
++ 0xbf38, 0xbf38, 0xbf38, 0xbf3a, 0xbf38, 0xbf38, 0xbf38, 0xbf38,
++ 0xbf3a, 0xbf38, 0xbf38, 0xbf38, 0xbf3a, 0xbf3a, 0xbf3a, 0xbf3a,
++ 0x080c, 0x0d84, 0x080c, 0x8026, 0x080c, 0x9554, 0x080c, 0x8125,
++ 0x0005, 0x0016, 0x00b6, 0x00d6, 0x6110, 0x2158, 0xb900, 0xd184,
++ 0x0138, 0x080c, 0x5b61, 0x9006, 0x080c, 0x5b4d, 0x080c, 0x2d3f,
++ 0x00de, 0x00be, 0x001e, 0x0005, 0x6610, 0x2658, 0xb804, 0x9084,
++ 0xff00, 0x8007, 0x90b2, 0x000c, 0x1a0c, 0x0d84, 0x91b6, 0x0015,
++ 0x1110, 0x003b, 0x0028, 0x91b6, 0x0016, 0x190c, 0x0d84, 0x006b,
++ 0x0005, 0x9f7a, 0x9f7a, 0x9f7a, 0x9f7a, 0x9f7a, 0x9f7a, 0xbfb9,
++ 0xbf81, 0x9f7a, 0x9f7a, 0x9f7a, 0x9f7a, 0x9f7a, 0x9f7a, 0x9f7a,
++ 0x9f7a, 0x9f7a, 0x9f7a, 0xbfb9, 0xbfc0, 0x9f7a, 0x9f7a, 0x9f7a,
++ 0x9f7a, 0x00f6, 0x080c, 0x5f25, 0x11c0, 0x6010, 0x905d, 0x01a8,
++ 0xb8b0, 0x9005, 0x0190, 0x9006, 0x080c, 0x5b4d, 0x2001, 0x0002,
++ 0x080c, 0x5b61, 0x6023, 0x0001, 0x6003, 0x0001, 0x6007, 0x0002,
++ 0x080c, 0x7c1d, 0x080c, 0x8125, 0x00d0, 0x2011, 0x0263, 0x2204,
++ 0x8211, 0x220c, 0x080c, 0x23fd, 0x1190, 0x080c, 0x5c0d, 0x0118,
++ 0x080c, 0x9554, 0x0060, 0xb810, 0x0006, 0xb814, 0x0006, 0x080c,
++ 0x56f3, 0x000e, 0xb816, 0x000e, 0xb812, 0x080c, 0x9554, 0x00fe,
++ 0x0005, 0x6604, 0x96b6, 0x001e, 0x1110, 0x080c, 0x9554, 0x0005,
++ 0x080c, 0xa2b9, 0x1148, 0x6003, 0x0001, 0x6007, 0x0001, 0x080c,
++ 0x7c1d, 0x080c, 0x8125, 0x0010, 0x080c, 0x9554, 0x0005, 0x6004,
++ 0x908a, 0x0053, 0x1a0c, 0x0d84, 0x080c, 0x8026, 0x080c, 0x9584,
++ 0x080c, 0x8125, 0x0005, 0x9182, 0x0040, 0x0002, 0xbff1, 0xbff1,
++ 0xbff1, 0xbff1, 0xbff3, 0xbff1, 0xbff1, 0xbff1, 0xbff1, 0xbff1,
++ 0xbff1, 0xbff1, 0xbff1, 0xbff1, 0xbff1, 0xbff1, 0xbff1, 0xbff1,
++ 0xbff1, 0x080c, 0x0d84, 0x0096, 0x00b6, 0x00d6, 0x00e6, 0x00f6,
++ 0x0046, 0x0026, 0x6210, 0x2258, 0xb8ac, 0x9005, 0x11a8, 0x6106,
++ 0x2071, 0x0260, 0x7444, 0x94a4, 0xff00, 0x0904, 0xc05a, 0x080c,
++ 0xcccc, 0x1170, 0x9486, 0x2000, 0x1158, 0x2009, 0x0001, 0x2011,
++ 0x0200, 0x080c, 0x7a0a, 0x0020, 0x9026, 0x080c, 0xcc03, 0x0c38,
++ 0x080c, 0x0fae, 0x090c, 0x0d84, 0x6003, 0x0007, 0xa867, 0x010d,
++ 0x9006, 0xa802, 0xa86a, 0xac8a, 0x2c00, 0xa88e, 0x6008, 0xa8e2,
++ 0x6010, 0x2058, 0xb8a0, 0x7130, 0xa97a, 0x0016, 0xa876, 0xa87f,
++ 0x0000, 0xa883, 0x0000, 0xa887, 0x0036, 0x080c, 0x61a9, 0x001e,
++ 0x080c, 0xcccc, 0x1904, 0xc0ba, 0x9486, 0x2000, 0x1130, 0x2019,
++ 0x0017, 0x080c, 0xc941, 0x0804, 0xc0ba, 0x9486, 0x0400, 0x1130,
++ 0x2019, 0x0002, 0x080c, 0xc8f8, 0x0804, 0xc0ba, 0x9486, 0x0200,
++ 0x1110, 0x080c, 0xc8dd, 0x9486, 0x1000, 0x1110, 0x080c, 0xc926,
++ 0x0804, 0xc0ba, 0x2069, 0x1a3d, 0x6a00, 0xd284, 0x0904, 0xc124,
++ 0x9284, 0x0300, 0x1904, 0xc11d, 0x6804, 0x9005, 0x0904, 0xc105,
++ 0x2d78, 0x6003, 0x0007, 0x080c, 0x0fc7, 0x0904, 0xc0c6, 0x7800,
++ 0xd08c, 0x1118, 0x7804, 0x8001, 0x7806, 0x6017, 0x0000, 0x2001,
++ 0x180e, 0x2004, 0xd084, 0x1904, 0xc128, 0x9006, 0xa802, 0xa867,
++ 0x0116, 0xa86a, 0x6008, 0xa8e2, 0x2c00, 0xa87a, 0x6010, 0x2058,
++ 0xb8a0, 0x7130, 0xa9b6, 0xa876, 0xb928, 0xa9ba, 0xb92c, 0xa9be,
++ 0xb930, 0xa9c2, 0xb934, 0xa9c6, 0xa883, 0x003d, 0x7044, 0x9084,
++ 0x0003, 0x9080, 0xc0c2, 0x2005, 0xa87e, 0x20a9, 0x000a, 0x2001,
++ 0x0270, 0xaa5c, 0x9290, 0x0021, 0x2009, 0x0205, 0x200b, 0x0080,
++ 0x20e1, 0x0000, 0xab60, 0x23e8, 0x2098, 0x22a0, 0x4003, 0x200b,
++ 0x0000, 0x2001, 0x027a, 0x200c, 0xa9b2, 0x8000, 0x200c, 0xa9ae,
++ 0x080c, 0x61a9, 0x002e, 0x004e, 0x00fe, 0x00ee, 0x00de, 0x00be,
++ 0x009e, 0x0005, 0x0000, 0x0080, 0x0040, 0x0000, 0x2001, 0x180f,
++ 0x2004, 0xd084, 0x0120, 0x080c, 0x0fae, 0x1904, 0xc06f, 0x6017,
++ 0xf100, 0x6003, 0x0001, 0x6007, 0x0041, 0x080c, 0x7bcb, 0x080c,
++ 0x8125, 0x0c00, 0x2069, 0x0260, 0x6848, 0x9084, 0xff00, 0x9086,
++ 0x1200, 0x1198, 0x686c, 0x9084, 0x00ff, 0x0016, 0x6114, 0x918c,
++ 0xf700, 0x910d, 0x6116, 0x001e, 0x6003, 0x0001, 0x6007, 0x0043,
++ 0x080c, 0x7bcb, 0x080c, 0x8125, 0x0828, 0x6868, 0x602e, 0x686c,
++ 0x6032, 0x6017, 0xf200, 0x6003, 0x0001, 0x6007, 0x0041, 0x080c,
++ 0x7bcb, 0x080c, 0x8125, 0x0804, 0xc0ba, 0x2001, 0x180d, 0x2004,
++ 0xd0ec, 0x0120, 0x2011, 0x8049, 0x080c, 0x447f, 0x6017, 0xf300,
++ 0x0010, 0x6017, 0xf100, 0x6003, 0x0001, 0x6007, 0x0041, 0x080c,
++ 0x7bcb, 0x080c, 0x8125, 0x0804, 0xc0ba, 0x6017, 0xf500, 0x0c98,
++ 0x6017, 0xf600, 0x0804, 0xc0da, 0x6017, 0xf200, 0x0804, 0xc0da,
++ 0xa867, 0x0146, 0xa86b, 0x0000, 0x6008, 0xa886, 0x2c00, 0xa87a,
++ 0x7044, 0x9084, 0x0003, 0x9080, 0xc0c2, 0x2005, 0xa87e, 0x2928,
++ 0x6010, 0x2058, 0xb8a0, 0xa876, 0xb828, 0xa88a, 0xb82c, 0xa88e,
++ 0xb830, 0xa892, 0xb834, 0xa896, 0xa883, 0x003d, 0x2009, 0x0205,
++ 0x2104, 0x9085, 0x0080, 0x200a, 0x20e1, 0x0000, 0x2011, 0x0210,
++ 0x2214, 0x9294, 0x0fff, 0xaaa2, 0x9282, 0x0111, 0x1a0c, 0x0d84,
++ 0x8210, 0x821c, 0x2001, 0x026c, 0x2098, 0xa860, 0x20e8, 0xa85c,
++ 0x9080, 0x0029, 0x20a0, 0x2011, 0xc1a4, 0x2041, 0x0001, 0x223d,
++ 0x9784, 0x00ff, 0x9322, 0x1208, 0x2300, 0x20a8, 0x4003, 0x931a,
++ 0x0530, 0x8210, 0xd7fc, 0x1130, 0x8d68, 0x2d0a, 0x2001, 0x0260,
++ 0x2098, 0x0c68, 0x2950, 0x080c, 0x0fc7, 0x0170, 0x2900, 0xb002,
++ 0xa867, 0x0147, 0xa86b, 0x0000, 0xa860, 0x20e8, 0xa85c, 0x9080,
++ 0x001b, 0x20a0, 0x8840, 0x08d8, 0x2548, 0xa800, 0x902d, 0x0118,
++ 0x080c, 0x0fe0, 0x0cc8, 0x080c, 0x0fe0, 0x0804, 0xc0c6, 0x2548,
++ 0x8847, 0x9885, 0x0046, 0xa866, 0x2009, 0x0205, 0x200b, 0x0000,
++ 0x080c, 0xc970, 0x0804, 0xc0ba, 0x8010, 0x0004, 0x801a, 0x0006,
++ 0x8018, 0x0008, 0x8016, 0x000a, 0x8014, 0x9186, 0x0013, 0x1160,
++ 0x6004, 0x908a, 0x0054, 0x1a0c, 0x0d84, 0x9082, 0x0040, 0x0a0c,
++ 0x0d84, 0x2008, 0x0804, 0xc255, 0x9186, 0x0051, 0x0108, 0x00c0,
++ 0x2001, 0x0109, 0x2004, 0xd084, 0x0904, 0xc206, 0x0126, 0x2091,
++ 0x2800, 0x0006, 0x0016, 0x0026, 0x080c, 0x7ab7, 0x002e, 0x001e,
++ 0x000e, 0x012e, 0x6000, 0x9086, 0x0002, 0x1580, 0x0804, 0xc29d,
++ 0x9186, 0x0027, 0x0530, 0x9186, 0x0048, 0x0128, 0x9186, 0x0014,
++ 0x0500, 0x190c, 0x0d84, 0x2001, 0x0109, 0x2004, 0xd084, 0x01f0,
++ 0x00c6, 0x0126, 0x2091, 0x2800, 0x00c6, 0x2061, 0x0100, 0x0006,
++ 0x0016, 0x0026, 0x080c, 0x7ab7, 0x002e, 0x001e, 0x000e, 0x00ce,
++ 0x012e, 0x00ce, 0x6000, 0x9086, 0x0004, 0x190c, 0x0d84, 0x0804,
++ 0xc366, 0x6004, 0x9082, 0x0040, 0x2008, 0x001a, 0x080c, 0x95e9,
++ 0x0005, 0xc21c, 0xc21e, 0xc21e, 0xc245, 0xc21c, 0xc21c, 0xc21c,
++ 0xc21c, 0xc21c, 0xc21c, 0xc21c, 0xc21c, 0xc21c, 0xc21c, 0xc21c,
++ 0xc21c, 0xc21c, 0xc21c, 0xc21c, 0x080c, 0x0d84, 0x080c, 0x8026,
++ 0x080c, 0x8125, 0x0036, 0x0096, 0x6014, 0x904d, 0x01d8, 0x080c,
++ 0xb0ad, 0x01c0, 0x6003, 0x0002, 0x6010, 0x00b6, 0x2058, 0xb800,
++ 0x00be, 0xd0bc, 0x1178, 0x2019, 0x0004, 0x080c, 0xc970, 0x6017,
++ 0x0000, 0x6018, 0x9005, 0x1120, 0x2001, 0x1954, 0x2004, 0x601a,
++ 0x6003, 0x0007, 0x009e, 0x003e, 0x0005, 0x0096, 0x080c, 0x8026,
++ 0x080c, 0x8125, 0x080c, 0xb0ad, 0x0120, 0x6014, 0x2048, 0x080c,
++ 0x0fe0, 0x080c, 0x9584, 0x009e, 0x0005, 0x0002, 0xc269, 0xc280,
++ 0xc26b, 0xc297, 0xc269, 0xc269, 0xc269, 0xc269, 0xc269, 0xc269,
++ 0xc269, 0xc269, 0xc269, 0xc269, 0xc269, 0xc269, 0xc269, 0xc269,
++ 0xc269, 0x080c, 0x0d84, 0x0096, 0x080c, 0x8026, 0x6014, 0x2048,
++ 0xa87c, 0xd0b4, 0x0138, 0x6003, 0x0007, 0x2009, 0x0043, 0x080c,
++ 0x95ce, 0x0010, 0x6003, 0x0004, 0x080c, 0x8125, 0x009e, 0x0005,
++ 0x080c, 0x8026, 0x080c, 0xb0ad, 0x0138, 0x6114, 0x0096, 0x2148,
++ 0xa97c, 0x009e, 0xd1ec, 0x1138, 0x080c, 0x79df, 0x080c, 0x9554,
++ 0x080c, 0x8125, 0x0005, 0x080c, 0xcbc7, 0x0db0, 0x0cc8, 0x080c,
++ 0x8026, 0x2009, 0x0041, 0x0804, 0xc3ee, 0x9182, 0x0040, 0x0002,
++ 0xc2b3, 0xc2b5, 0xc2b3, 0xc2b3, 0xc2b3, 0xc2b3, 0xc2b3, 0xc2b3,
++ 0xc2b3, 0xc2b3, 0xc2b3, 0xc2b3, 0xc2b3, 0xc2b3, 0xc2b3, 0xc2b3,
++ 0xc2b3, 0xc2b6, 0xc2b3, 0x080c, 0x0d84, 0x0005, 0x00d6, 0x080c,
++ 0x79df, 0x00de, 0x080c, 0xcc1f, 0x080c, 0x9554, 0x0005, 0x9182,
++ 0x0040, 0x0002, 0xc2d5, 0xc2d5, 0xc2d5, 0xc2d5, 0xc2d5, 0xc2d5,
++ 0xc2d5, 0xc2d5, 0xc2d5, 0xc2d7, 0xc32e, 0xc2d5, 0xc2d5, 0xc2d5,
++ 0xc2d5, 0xc32e, 0xc2d5, 0xc2d5, 0xc2d5, 0x080c, 0x0d84, 0x2001,
++ 0x0105, 0x2004, 0x9084, 0x1800, 0x1904, 0xc32e, 0x2001, 0x1872,
++ 0x2004, 0xd0e4, 0x1528, 0x603b, 0x0000, 0x080c, 0x80d6, 0x6014,
++ 0x0096, 0x2048, 0xa87c, 0xd0fc, 0x0188, 0x908c, 0x0003, 0x918e,
++ 0x0002, 0x0508, 0x2001, 0x180c, 0x2004, 0xd0d4, 0x11e0, 0x080c,
++ 0x8202, 0x2009, 0x0041, 0x009e, 0x0804, 0xc3ee, 0x080c, 0x8202,
++ 0x6003, 0x0007, 0x601b, 0x0000, 0x080c, 0x79df, 0x009e, 0x0005,
++ 0x2001, 0x0100, 0x2004, 0x9082, 0x0005, 0x0aa8, 0x2001, 0x011f,
++ 0x2004, 0x603a, 0x0890, 0x2001, 0x180c, 0x200c, 0xc1d4, 0x2102,
++ 0xd1cc, 0x0110, 0x080c, 0x2809, 0x080c, 0x8202, 0x6014, 0x2048,
++ 0xa97c, 0xd1ec, 0x1130, 0x080c, 0x79df, 0x080c, 0x9554, 0x009e,
++ 0x0005, 0x080c, 0xcbc7, 0x0db8, 0x009e, 0x0005, 0x2001, 0x180c,
++ 0x200c, 0xc1d4, 0x2102, 0x0036, 0x080c, 0x80d6, 0x080c, 0x8202,
++ 0x6014, 0x0096, 0x2048, 0x6010, 0x00b6, 0x2058, 0xb800, 0x00be,
++ 0xd0bc, 0x0188, 0xa87c, 0x9084, 0x0003, 0x9086, 0x0002, 0x0140,
++ 0xa8ac, 0x6330, 0x931a, 0x6332, 0xa8b0, 0x632c, 0x931b, 0x632e,
++ 0x6003, 0x0002, 0x0080, 0x2019, 0x0004, 0x080c, 0xc970, 0x6018,
++ 0x9005, 0x1128, 0x2001, 0x1954, 0x2004, 0x8003, 0x601a, 0x6017,
++ 0x0000, 0x6003, 0x0007, 0x009e, 0x003e, 0x0005, 0x9182, 0x0040,
++ 0x0002, 0xc37d, 0xc37d, 0xc37d, 0xc37d, 0xc37d, 0xc37d, 0xc37d,
++ 0xc37d, 0xc37f, 0xc37d, 0xc37d, 0xc37d, 0xc37d, 0xc37d, 0xc37d,
++ 0xc37d, 0xc37d, 0xc37d, 0xc37d, 0xc3ca, 0x080c, 0x0d84, 0x6014,
++ 0x0096, 0x2048, 0xa834, 0xaa38, 0x6110, 0x00b6, 0x2058, 0xb900,
++ 0x00be, 0xd1bc, 0x1190, 0x920d, 0x1518, 0xa87c, 0xd0fc, 0x0128,
++ 0x2009, 0x0041, 0x00de, 0x0804, 0xc3ee, 0x6003, 0x0007, 0x601b,
++ 0x0000, 0x080c, 0x79df, 0x009e, 0x0005, 0x6124, 0xd1f4, 0x1d58,
++ 0x0006, 0x0046, 0xacac, 0x9422, 0xa9b0, 0x2200, 0x910b, 0x6030,
++ 0x9420, 0x6432, 0x602c, 0x9109, 0x612e, 0x004e, 0x000e, 0x08d8,
++ 0x6110, 0x00b6, 0x2158, 0xb900, 0x00be, 0xd1bc, 0x1178, 0x2009,
++ 0x180d, 0x210c, 0xd19c, 0x0118, 0x6003, 0x0007, 0x0010, 0x6003,
++ 0x0006, 0x00e9, 0x080c, 0x79e1, 0x009e, 0x0005, 0x6003, 0x0002,
++ 0x009e, 0x0005, 0x6024, 0xd0f4, 0x0128, 0x080c, 0x1489, 0x1904,
++ 0xc37f, 0x0005, 0x6014, 0x0096, 0x2048, 0xa834, 0xa938, 0x009e,
++ 0x9105, 0x1120, 0x080c, 0x1489, 0x1904, 0xc37f, 0x0005, 0xd2fc,
++ 0x0140, 0x8002, 0x8000, 0x8212, 0x9291, 0x0000, 0x2009, 0x0009,
++ 0x0010, 0x2009, 0x0015, 0xaa9a, 0xa896, 0x0005, 0x9182, 0x0040,
++ 0x0208, 0x0062, 0x9186, 0x0013, 0x0120, 0x9186, 0x0014, 0x190c,
++ 0x0d84, 0x6024, 0xd0dc, 0x090c, 0x0d84, 0x0005, 0xc411, 0xc418,
++ 0xc424, 0xc430, 0xc411, 0xc411, 0xc411, 0xc411, 0xc411, 0xc413,
++ 0xc413, 0xc411, 0xc411, 0xc411, 0xc411, 0xc413, 0xc411, 0xc413,
++ 0xc411, 0x080c, 0x0d84, 0x6024, 0xd0dc, 0x090c, 0x0d84, 0x0005,
++ 0x6003, 0x0001, 0x6106, 0x080c, 0x7bcb, 0x0126, 0x2091, 0x8000,
++ 0x080c, 0x8125, 0x012e, 0x0005, 0x6003, 0x0001, 0x6106, 0x080c,
++ 0x7bcb, 0x0126, 0x2091, 0x8000, 0x080c, 0x8125, 0x012e, 0x0005,
++ 0x6003, 0x0003, 0x6106, 0x2c10, 0x080c, 0x18b7, 0x0126, 0x2091,
++ 0x8000, 0x080c, 0x7c3a, 0x080c, 0x820b, 0x012e, 0x0005, 0x0126,
++ 0x2091, 0x8000, 0x0036, 0x0096, 0x9182, 0x0040, 0x0023, 0x009e,
++ 0x003e, 0x012e, 0x0005, 0xc45b, 0xc45d, 0xc46f, 0xc489, 0xc45b,
++ 0xc45b, 0xc45b, 0xc45b, 0xc45b, 0xc45b, 0xc45b, 0xc45b, 0xc45b,
++ 0xc45b, 0xc45b, 0xc45b, 0x080c, 0x0d84, 0x6014, 0x2048, 0xa87c,
++ 0xd0fc, 0x01f8, 0x909c, 0x0003, 0x939e, 0x0003, 0x01d0, 0x6003,
++ 0x0001, 0x6106, 0x080c, 0x7bcb, 0x080c, 0x8125, 0x0470, 0x6014,
++ 0x2048, 0xa87c, 0xd0fc, 0x0168, 0x909c, 0x0003, 0x939e, 0x0003,
++ 0x0140, 0x6003, 0x0001, 0x6106, 0x080c, 0x7bcb, 0x080c, 0x8125,
++ 0x00e0, 0x901e, 0x6316, 0x631a, 0x2019, 0x0004, 0x080c, 0xc970,
++ 0x00a0, 0x6014, 0x2048, 0xa87c, 0xd0fc, 0x0d98, 0x909c, 0x0003,
++ 0x939e, 0x0003, 0x0d70, 0x6003, 0x0003, 0x6106, 0x2c10, 0x080c,
++ 0x18b7, 0x080c, 0x7c3a, 0x080c, 0x820b, 0x0005, 0x080c, 0x8026,
++ 0x6114, 0x81ff, 0x0158, 0x0096, 0x2148, 0x080c, 0xcc6b, 0x0036,
++ 0x2019, 0x0029, 0x080c, 0xc970, 0x003e, 0x009e, 0x080c, 0x9584,
++ 0x080c, 0x8125, 0x0005, 0x080c, 0x80d6, 0x6114, 0x81ff, 0x0158,
++ 0x0096, 0x2148, 0x080c, 0xcc6b, 0x0036, 0x2019, 0x0029, 0x080c,
++ 0xc970, 0x003e, 0x009e, 0x080c, 0x9584, 0x080c, 0x820b, 0x0005,
++ 0x9182, 0x0085, 0x0002, 0xc4da, 0xc4d8, 0xc4d8, 0xc4e6, 0xc4d8,
++ 0xc4d8, 0xc4d8, 0xc4d8, 0xc4d8, 0xc4d8, 0xc4d8, 0xc4d8, 0xc4d8,
++ 0x080c, 0x0d84, 0x6003, 0x000b, 0x6106, 0x080c, 0x7bcb, 0x0126,
++ 0x2091, 0x8000, 0x080c, 0x8125, 0x012e, 0x0005, 0x0026, 0x00e6,
++ 0x080c, 0xcbbe, 0x0118, 0x080c, 0x9554, 0x0440, 0x2071, 0x0260,
++ 0x7224, 0x6216, 0x2001, 0x180d, 0x2004, 0xd0e4, 0x0150, 0x6010,
++ 0x00b6, 0x2058, 0xbca0, 0x00be, 0x2c00, 0x2011, 0x014e, 0x080c,
++ 0x9844, 0x7220, 0x080c, 0xc816, 0x0118, 0x6007, 0x0086, 0x0040,
++ 0x6007, 0x0087, 0x7224, 0x9296, 0xffff, 0x1110, 0x6007, 0x0086,
++ 0x6003, 0x0001, 0x080c, 0x7bcb, 0x080c, 0x8125, 0x00ee, 0x002e,
++ 0x0005, 0x9186, 0x0013, 0x1160, 0x6004, 0x908a, 0x0085, 0x0a0c,
++ 0x0d84, 0x908a, 0x0092, 0x1a0c, 0x0d84, 0x9082, 0x0085, 0x00a2,
++ 0x9186, 0x0027, 0x0130, 0x9186, 0x0014, 0x0118, 0x080c, 0x95e9,
++ 0x0050, 0x2001, 0x0007, 0x080c, 0x5b8d, 0x080c, 0x8026, 0x080c,
++ 0x9584, 0x080c, 0x8125, 0x0005, 0xc549, 0xc54b, 0xc54b, 0xc549,
++ 0xc549, 0xc549, 0xc549, 0xc549, 0xc549, 0xc549, 0xc549, 0xc549,
++ 0xc549, 0x080c, 0x0d84, 0x080c, 0x8026, 0x080c, 0x9584, 0x080c,
++ 0x8125, 0x0005, 0x9182, 0x0085, 0x0a0c, 0x0d84, 0x9182, 0x0092,
++ 0x1a0c, 0x0d84, 0x9182, 0x0085, 0x0002, 0xc56a, 0xc56a, 0xc56a,
++ 0xc56c, 0xc56a, 0xc56a, 0xc56a, 0xc56a, 0xc56a, 0xc56a, 0xc56a,
++ 0xc56a, 0xc56a, 0x080c, 0x0d84, 0x0005, 0x9186, 0x0013, 0x0148,
++ 0x9186, 0x0014, 0x0130, 0x9186, 0x0027, 0x0118, 0x080c, 0x95e9,
++ 0x0030, 0x080c, 0x8026, 0x080c, 0x9584, 0x080c, 0x8125, 0x0005,
++ 0x0036, 0x080c, 0xcc1f, 0x6043, 0x0000, 0x2019, 0x000b, 0x0031,
++ 0x6023, 0x0006, 0x6003, 0x0007, 0x003e, 0x0005, 0x0126, 0x0036,
++ 0x2091, 0x8000, 0x0086, 0x2c40, 0x0096, 0x904e, 0x080c, 0x8ef6,
++ 0x009e, 0x008e, 0x1550, 0x0076, 0x2c38, 0x080c, 0x8f9a, 0x007e,
++ 0x1520, 0x6000, 0x9086, 0x0000, 0x0500, 0x6020, 0x9086, 0x0007,
++ 0x01e0, 0x0096, 0x601c, 0xd084, 0x0140, 0x080c, 0xcc1f, 0x080c,
++ 0xb76f, 0x080c, 0x17b0, 0x6023, 0x0007, 0x6014, 0x2048, 0x080c,
++ 0xb0ad, 0x0110, 0x080c, 0xc970, 0x009e, 0x6017, 0x0000, 0x080c,
++ 0xcc1f, 0x6023, 0x0007, 0x080c, 0xb76f, 0x003e, 0x012e, 0x0005,
++ 0x00f6, 0x00c6, 0x00b6, 0x0036, 0x0156, 0x2079, 0x0260, 0x7938,
++ 0x783c, 0x080c, 0x23fd, 0x15b8, 0x0016, 0x00c6, 0x080c, 0x5c0d,
++ 0x1580, 0x001e, 0x00c6, 0x2160, 0x080c, 0xb76c, 0x00ce, 0x002e,
++ 0x0026, 0x0016, 0x2019, 0x0029, 0x080c, 0x905b, 0x080c, 0x7d55,
++ 0x0076, 0x903e, 0x080c, 0x7c4d, 0x007e, 0x001e, 0x0076, 0x903e,
++ 0x080c, 0xc73e, 0x007e, 0x0026, 0xba04, 0x9294, 0xff00, 0x8217,
++ 0x9286, 0x0006, 0x0118, 0x9286, 0x0004, 0x1118, 0xbaa0, 0x080c,
++ 0x2dd3, 0x002e, 0x001e, 0x080c, 0x56f3, 0xbe12, 0xbd16, 0x9006,
++ 0x0010, 0x00ce, 0x001e, 0x015e, 0x003e, 0x00be, 0x00ce, 0x00fe,
++ 0x0005, 0x00c6, 0x00d6, 0x00b6, 0x0016, 0x2009, 0x1822, 0x2104,
++ 0x9086, 0x0074, 0x1904, 0xc66a, 0x2069, 0x0260, 0x6944, 0x9182,
++ 0x0100, 0x06e0, 0x6940, 0x9184, 0x8000, 0x0904, 0xc667, 0x2001,
++ 0x194b, 0x2004, 0x9005, 0x1140, 0x6010, 0x2058, 0xb8b0, 0x9005,
++ 0x0118, 0x9184, 0x0800, 0x0598, 0x6948, 0x918a, 0x0001, 0x0648,
++ 0x080c, 0xccd1, 0x0118, 0x6978, 0xd1fc, 0x11b8, 0x2009, 0x0205,
++ 0x200b, 0x0001, 0x693c, 0x81ff, 0x1198, 0x6944, 0x9182, 0x0100,
++ 0x02a8, 0x6940, 0x81ff, 0x1178, 0x6948, 0x918a, 0x0001, 0x0288,
++ 0x6950, 0x918a, 0x0001, 0x0298, 0x00d0, 0x6017, 0x0100, 0x00a0,
++ 0x6017, 0x0300, 0x0088, 0x6017, 0x0500, 0x0070, 0x6017, 0x0700,
++ 0x0058, 0x6017, 0x0900, 0x0040, 0x6017, 0x0b00, 0x0028, 0x6017,
++ 0x0f00, 0x0010, 0x6017, 0x2d00, 0x9085, 0x0001, 0x0008, 0x9006,
++ 0x001e, 0x00be, 0x00de, 0x00ce, 0x0005, 0x00c6, 0x00b6, 0x0026,
++ 0x0036, 0x0156, 0x6210, 0x2258, 0xbb04, 0x9394, 0x00ff, 0x9286,
++ 0x0006, 0x0178, 0x9286, 0x0004, 0x0160, 0x9394, 0xff00, 0x8217,
++ 0x9286, 0x0006, 0x0130, 0x9286, 0x0004, 0x0118, 0x080c, 0x5c1c,
++ 0x04e0, 0x2011, 0x0276, 0x20a9, 0x0004, 0x0096, 0x2b48, 0x2019,
++ 0x000a, 0x080c, 0xa439, 0x009e, 0x1588, 0x2011, 0x027a, 0x20a9,
++ 0x0004, 0x0096, 0x2b48, 0x2019, 0x0006, 0x080c, 0xa439, 0x009e,
++ 0x1528, 0x0046, 0x0016, 0xbaa0, 0x2220, 0x9006, 0x2009, 0x1853,
++ 0x210c, 0xd1a4, 0x0138, 0x2009, 0x0029, 0x080c, 0xc9c5, 0xb800,
++ 0xc0e5, 0xb802, 0x2019, 0x0029, 0x080c, 0x7d55, 0x0076, 0x2039,
++ 0x0000, 0x080c, 0x7c4d, 0x2c08, 0x080c, 0xc73e, 0x007e, 0x2001,
++ 0x0007, 0x080c, 0x5b8d, 0x001e, 0x004e, 0x9006, 0x015e, 0x003e,
++ 0x002e, 0x00be, 0x00ce, 0x0005, 0x00d6, 0x2069, 0x026e, 0x6800,
++ 0x9086, 0x0800, 0x0118, 0x6017, 0x0000, 0x0008, 0x9006, 0x00de,
++ 0x0005, 0x00b6, 0x00f6, 0x0016, 0x0026, 0x0036, 0x0156, 0x2079,
++ 0x026c, 0x7930, 0x7834, 0x080c, 0x23fd, 0x11d0, 0x080c, 0x5c0d,
++ 0x11b8, 0x2011, 0x0270, 0x20a9, 0x0004, 0x0096, 0x2b48, 0x2019,
++ 0x000a, 0x080c, 0xa439, 0x009e, 0x1158, 0x2011, 0x0274, 0x20a9,
++ 0x0004, 0x0096, 0x2b48, 0x2019, 0x0006, 0x080c, 0xa439, 0x009e,
++ 0x015e, 0x003e, 0x002e, 0x001e, 0x00fe, 0x00be, 0x0005, 0x00b6,
++ 0x0006, 0x0016, 0x0026, 0x0036, 0x0156, 0x2011, 0x0263, 0x2204,
++ 0x8211, 0x220c, 0x080c, 0x23fd, 0x11d0, 0x080c, 0x5c0d, 0x11b8,
++ 0x2011, 0x0276, 0x20a9, 0x0004, 0x0096, 0x2b48, 0x2019, 0x000a,
++ 0x080c, 0xa439, 0x009e, 0x1158, 0x2011, 0x027a, 0x20a9, 0x0004,
++ 0x0096, 0x2b48, 0x2019, 0x0006, 0x080c, 0xa439, 0x009e, 0x015e,
++ 0x003e, 0x002e, 0x001e, 0x000e, 0x00be, 0x0005, 0x00e6, 0x00c6,
++ 0x0086, 0x0076, 0x0066, 0x0056, 0x0046, 0x0026, 0x0126, 0x2091,
++ 0x8000, 0x2740, 0x2029, 0x19bd, 0x252c, 0x2021, 0x19c3, 0x2424,
++ 0x2061, 0x1cd0, 0x2071, 0x1800, 0x764c, 0x706c, 0x81ff, 0x0150,
++ 0x0006, 0x9186, 0x1a72, 0x000e, 0x0128, 0x8001, 0x9602, 0x1a04,
++ 0xc7cf, 0x0018, 0x9606, 0x0904, 0xc7cf, 0x2100, 0x9c06, 0x0904,
++ 0xc7c6, 0x080c, 0xca01, 0x1904, 0xc7c6, 0x080c, 0xccd8, 0x0904,
++ 0xc7c6, 0x080c, 0xc9f1, 0x0904, 0xc7c6, 0x6720, 0x9786, 0x0001,
++ 0x1148, 0x080c, 0x2e64, 0x0904, 0xc7ea, 0x6004, 0x9086, 0x0000,
++ 0x1904, 0xc7ea, 0x9786, 0x0004, 0x0904, 0xc7ea, 0x9786, 0x0007,
++ 0x05e8, 0x2500, 0x9c06, 0x05d0, 0x2400, 0x9c06, 0x05b8, 0x88ff,
++ 0x0118, 0x6054, 0x9906, 0x1590, 0x0096, 0x6000, 0x9086, 0x0004,
++ 0x1120, 0x0016, 0x080c, 0x17b0, 0x001e, 0x9786, 0x0008, 0x1148,
++ 0x080c, 0xb295, 0x1130, 0x080c, 0x9e99, 0x009e, 0x080c, 0x9584,
++ 0x00e8, 0x6014, 0x2048, 0x080c, 0xb0ad, 0x01a8, 0x9786, 0x0003,
++ 0x1540, 0x080c, 0xc810, 0x0110, 0xa867, 0x0103, 0xab7a, 0xa877,
++ 0x0000, 0x080c, 0xcc6b, 0x0016, 0x080c, 0xb374, 0x080c, 0x619c,
++ 0x001e, 0x080c, 0xb278, 0x009e, 0x080c, 0x9584, 0x9ce0, 0x0018,
++ 0x2001, 0x1818, 0x2004, 0x9c02, 0x1210, 0x0804, 0xc752, 0x012e,
++ 0x002e, 0x004e, 0x005e, 0x006e, 0x007e, 0x008e, 0x00ce, 0x00ee,
++ 0x0005, 0x9786, 0x0006, 0x1150, 0x9386, 0x0005, 0x0128, 0x080c,
++ 0xcc6b, 0x080c, 0xc970, 0x08f8, 0x009e, 0x0c00, 0x9786, 0x000a,
++ 0x0968, 0x0838, 0x81ff, 0x09d0, 0x9180, 0x0001, 0x2004, 0x9086,
++ 0x0018, 0x0130, 0x9180, 0x0001, 0x2004, 0x9086, 0x002d, 0x1970,
++ 0x6000, 0x9086, 0x0002, 0x1950, 0x080c, 0xb284, 0x0130, 0x080c,
++ 0xb295, 0x1920, 0x080c, 0x9e99, 0x0038, 0x080c, 0x2d3f, 0x080c,
++ 0xb295, 0x1110, 0x080c, 0x9e99, 0x080c, 0x9584, 0x0804, 0xc7c6,
++ 0xa864, 0x9084, 0x00ff, 0x9086, 0x0039, 0x0005, 0x00c6, 0x00e6,
++ 0x0016, 0x2c08, 0x2170, 0x9006, 0x080c, 0xc997, 0x001e, 0x0120,
++ 0x6020, 0x9084, 0x000f, 0x001b, 0x00ee, 0x00ce, 0x0005, 0xc835,
++ 0xc835, 0xc835, 0xc835, 0xc835, 0xc835, 0xc837, 0xc835, 0xc835,
++ 0xc835, 0xc835, 0x9584, 0x9584, 0xc835, 0x9006, 0x0005, 0x0036,
++ 0x0046, 0x0016, 0x7010, 0x00b6, 0x2058, 0xbca0, 0x00be, 0x2c00,
++ 0x2009, 0x0020, 0x080c, 0xc9c5, 0x001e, 0x004e, 0x2019, 0x0002,
++ 0x080c, 0xc58e, 0x003e, 0x9085, 0x0001, 0x0005, 0x0096, 0x080c,
++ 0xb0ad, 0x0140, 0x6014, 0x904d, 0x080c, 0xad1e, 0x687b, 0x0005,
++ 0x080c, 0x61a9, 0x009e, 0x080c, 0x9584, 0x9085, 0x0001, 0x0005,
++ 0x2001, 0x0001, 0x080c, 0x5b4d, 0x0156, 0x0016, 0x0026, 0x0036,
++ 0x20a9, 0x0004, 0x2019, 0x1805, 0x2011, 0x0276, 0x080c, 0xa425,
++ 0x003e, 0x002e, 0x001e, 0x015e, 0x9005, 0x0005, 0x00f6, 0x00e6,
++ 0x00c6, 0x0086, 0x0076, 0x0066, 0x00b6, 0x0126, 0x2091, 0x8000,
++ 0x2740, 0x2061, 0x1cd0, 0x2079, 0x0001, 0x8fff, 0x0904, 0xc8d0,
++ 0x2071, 0x1800, 0x764c, 0x706c, 0x8001, 0x9602, 0x1a04, 0xc8d0,
++ 0x88ff, 0x0120, 0x2800, 0x9c06, 0x1590, 0x2078, 0x080c, 0xc9f1,
++ 0x0570, 0x2400, 0x9c06, 0x0558, 0x6720, 0x9786, 0x0006, 0x1538,
++ 0x9786, 0x0007, 0x0520, 0x88ff, 0x1140, 0x6010, 0x9b06, 0x11f8,
++ 0x85ff, 0x0118, 0x6054, 0x9106, 0x11d0, 0x0096, 0x601c, 0xd084,
++ 0x0140, 0x080c, 0xcc1f, 0x080c, 0xb76f, 0x080c, 0x17b0, 0x6023,
++ 0x0007, 0x6014, 0x2048, 0x080c, 0xb0ad, 0x0120, 0x0046, 0x080c,
++ 0xc970, 0x004e, 0x009e, 0x080c, 0x9584, 0x88ff, 0x1198, 0x9ce0,
++ 0x0018, 0x2001, 0x1818, 0x2004, 0x9c02, 0x1210, 0x0804, 0xc885,
++ 0x9006, 0x012e, 0x00be, 0x006e, 0x007e, 0x008e, 0x00ce, 0x00ee,
++ 0x00fe, 0x0005, 0x98c5, 0x0001, 0x0ca0, 0x00b6, 0x0076, 0x0056,
++ 0x0086, 0x9046, 0x2029, 0x0001, 0x2c20, 0x2019, 0x0002, 0x6210,
++ 0x2258, 0x0096, 0x904e, 0x080c, 0x8ef6, 0x009e, 0x008e, 0x903e,
++ 0x080c, 0x8f9a, 0x080c, 0xc876, 0x005e, 0x007e, 0x00be, 0x0005,
++ 0x00b6, 0x0046, 0x0056, 0x0076, 0x00c6, 0x0156, 0x2c20, 0x2128,
++ 0x20a9, 0x007f, 0x900e, 0x0016, 0x0036, 0x080c, 0x5c0d, 0x1190,
++ 0x0056, 0x0086, 0x9046, 0x2508, 0x2029, 0x0001, 0x0096, 0x904e,
++ 0x080c, 0x8ef6, 0x009e, 0x008e, 0x903e, 0x080c, 0x8f9a, 0x080c,
++ 0xc876, 0x005e, 0x003e, 0x001e, 0x8108, 0x1f04, 0xc903, 0x015e,
++ 0x00ce, 0x007e, 0x005e, 0x004e, 0x00be, 0x0005, 0x00b6, 0x0076,
++ 0x0056, 0x6210, 0x2258, 0x0086, 0x9046, 0x2029, 0x0001, 0x2019,
++ 0x0048, 0x0096, 0x904e, 0x080c, 0x8ef6, 0x009e, 0x008e, 0x903e,
++ 0x080c, 0x8f9a, 0x2c20, 0x080c, 0xc876, 0x005e, 0x007e, 0x00be,
++ 0x0005, 0x00b6, 0x0046, 0x0056, 0x0076, 0x00c6, 0x0156, 0x2c20,
++ 0x20a9, 0x007f, 0x900e, 0x0016, 0x0036, 0x080c, 0x5c0d, 0x11a0,
++ 0x0086, 0x9046, 0x2828, 0x0046, 0x2021, 0x0001, 0x080c, 0xcc03,
++ 0x004e, 0x0096, 0x904e, 0x080c, 0x8ef6, 0x009e, 0x008e, 0x903e,
++ 0x080c, 0x8f9a, 0x080c, 0xc876, 0x003e, 0x001e, 0x8108, 0x1f04,
++ 0xc94b, 0x015e, 0x00ce, 0x007e, 0x005e, 0x004e, 0x00be, 0x0005,
++ 0x0016, 0x00f6, 0x080c, 0xb0ab, 0x0198, 0xa864, 0x9084, 0x00ff,
++ 0x9086, 0x0046, 0x0180, 0xa800, 0x907d, 0x0138, 0xa803, 0x0000,
++ 0xab82, 0x080c, 0x61a9, 0x2f48, 0x0cb0, 0xab82, 0x080c, 0x61a9,
++ 0x00fe, 0x001e, 0x0005, 0xa800, 0x907d, 0x0130, 0xa803, 0x0000,
++ 0x080c, 0x61a9, 0x2f48, 0x0cb8, 0x080c, 0x61a9, 0x0c88, 0x00e6,
++ 0x0046, 0x0036, 0x2061, 0x1cd0, 0x9005, 0x1138, 0x2071, 0x1800,
++ 0x744c, 0x706c, 0x8001, 0x9402, 0x12d8, 0x2100, 0x9c06, 0x0168,
++ 0x6000, 0x9086, 0x0000, 0x0148, 0x6008, 0x9206, 0x1130, 0x6010,
++ 0x91a0, 0x0004, 0x2424, 0x9406, 0x0140, 0x9ce0, 0x0018, 0x2001,
++ 0x1818, 0x2004, 0x9c02, 0x1220, 0x0c40, 0x9085, 0x0001, 0x0008,
++ 0x9006, 0x003e, 0x004e, 0x00ee, 0x0005, 0x0096, 0x0006, 0x080c,
++ 0x0fae, 0x000e, 0x090c, 0x0d84, 0xa867, 0x010d, 0xa88e, 0x0026,
++ 0x2010, 0x080c, 0xb09b, 0x2001, 0x0000, 0x0120, 0x2200, 0x9080,
++ 0x0015, 0x2004, 0x002e, 0xa87a, 0xa986, 0xac76, 0xa87f, 0x0000,
++ 0x2001, 0x195b, 0x2004, 0xa882, 0x9006, 0xa8e2, 0xa802, 0xa86a,
++ 0xa88a, 0x0126, 0x2091, 0x8000, 0x080c, 0x61a9, 0x012e, 0x009e,
++ 0x0005, 0x6700, 0x9786, 0x0000, 0x0158, 0x9786, 0x0001, 0x0140,
++ 0x9786, 0x000a, 0x0128, 0x9786, 0x0009, 0x0110, 0x9085, 0x0001,
++ 0x0005, 0x00e6, 0x6010, 0x9075, 0x0138, 0x00b6, 0x2058, 0xb8a0,
++ 0x00be, 0x9206, 0x00ee, 0x0005, 0x9085, 0x0001, 0x0cd8, 0x0016,
++ 0x6004, 0x908e, 0x001e, 0x11a0, 0x8007, 0x6134, 0x918c, 0x00ff,
++ 0x9105, 0x6036, 0x6007, 0x0085, 0x6003, 0x000b, 0x6023, 0x0005,
++ 0x2001, 0x1954, 0x2004, 0x601a, 0x080c, 0x7bcb, 0x080c, 0x8125,
++ 0x001e, 0x0005, 0xa001, 0xa001, 0x0005, 0x6024, 0xd0e4, 0x0158,
++ 0xd0cc, 0x0118, 0x080c, 0xb3ae, 0x0030, 0x080c, 0xcc1f, 0x080c,
++ 0x79df, 0x080c, 0x9554, 0x0005, 0x9280, 0x0008, 0x2004, 0x9084,
++ 0x000f, 0x0002, 0xca50, 0xca50, 0xca50, 0xca52, 0xca50, 0xca52,
++ 0xca52, 0xca50, 0xca52, 0xca50, 0xca50, 0xca50, 0xca50, 0xca50,
++ 0x9006, 0x0005, 0x9085, 0x0001, 0x0005, 0x9280, 0x0008, 0x2004,
++ 0x9084, 0x000f, 0x0002, 0xca69, 0xca69, 0xca69, 0xca69, 0xca69,
++ 0xca69, 0xca76, 0xca69, 0xca69, 0xca69, 0xca69, 0xca69, 0xca69,
++ 0xca69, 0x6007, 0x003b, 0x602f, 0x0009, 0x6017, 0x2a00, 0x6003,
++ 0x0001, 0x080c, 0x7bcb, 0x080c, 0x8125, 0x0005, 0x0096, 0x00c6,
++ 0x2260, 0x080c, 0xcc1f, 0x6043, 0x0000, 0x6024, 0xc0f4, 0xc0e4,
++ 0x6026, 0x603b, 0x0000, 0x00ce, 0x00d6, 0x2268, 0x9186, 0x0007,
++ 0x1904, 0xcad0, 0x6814, 0x9005, 0x0138, 0x2048, 0xa87c, 0xd0fc,
++ 0x1118, 0x00de, 0x009e, 0x08a8, 0x6007, 0x003a, 0x6003, 0x0001,
++ 0x080c, 0x7bcb, 0x080c, 0x8125, 0x00c6, 0x2d60, 0x6100, 0x9186,
++ 0x0002, 0x1904, 0xcb48, 0x6014, 0x9005, 0x1138, 0x6000, 0x9086,
++ 0x0007, 0x190c, 0x0d84, 0x0804, 0xcb48, 0x2048, 0x080c, 0xb0ad,
++ 0x1130, 0x0028, 0x2048, 0xa800, 0x9005, 0x1de0, 0x2900, 0x2048,
++ 0xa87c, 0x9084, 0x0003, 0x9086, 0x0002, 0x1170, 0xa87c, 0xc0dc,
++ 0xc0f4, 0xa87e, 0xa880, 0xc0f4, 0xc0fc, 0xa882, 0x2009, 0x0043,
++ 0x080c, 0xc3ee, 0x0804, 0xcb48, 0x2009, 0x0041, 0x0804, 0xcb42,
++ 0x9186, 0x0005, 0x15a8, 0x6814, 0x2048, 0xa87c, 0xd0bc, 0x1120,
++ 0x00de, 0x009e, 0x0804, 0xca69, 0xd0b4, 0x0128, 0xd0fc, 0x090c,
++ 0x0d84, 0x0804, 0xca8a, 0x6007, 0x003a, 0x6003, 0x0001, 0x080c,
++ 0x7bcb, 0x080c, 0x8125, 0x00c6, 0x2d60, 0x6100, 0x9186, 0x0002,
++ 0x0120, 0x9186, 0x0004, 0x1904, 0xcb48, 0x6814, 0x2048, 0xa97c,
++ 0xc1f4, 0xc1dc, 0xa97e, 0xa980, 0xc1f4, 0xc1fc, 0xc1bc, 0xa982,
++ 0x00f6, 0x2c78, 0x080c, 0x150d, 0x00fe, 0x2009, 0x0042, 0x04d0,
++ 0x0036, 0x080c, 0x0fae, 0x090c, 0x0d84, 0xa867, 0x010d, 0x9006,
++ 0xa802, 0xa86a, 0xa88a, 0x2d18, 0xab8e, 0xa887, 0x0045, 0x2c00,
++ 0xa892, 0x6038, 0xa8a2, 0x2360, 0x6024, 0xc0dd, 0x6026, 0x6010,
++ 0x00b6, 0x2058, 0xb8a0, 0x00be, 0x2004, 0x6354, 0xab7a, 0xa876,
++ 0x9006, 0xa87e, 0xa882, 0xad9a, 0xae96, 0xa89f, 0x0001, 0x080c,
++ 0x61a9, 0x2019, 0x0045, 0x6008, 0x2068, 0x080c, 0xc58e, 0x2d00,
++ 0x600a, 0x6023, 0x0006, 0x6003, 0x0007, 0x901e, 0x631a, 0x6342,
++ 0x003e, 0x0038, 0x6043, 0x0000, 0x6003, 0x0007, 0x080c, 0xc3ee,
++ 0x00ce, 0x00de, 0x009e, 0x0005, 0x9186, 0x0013, 0x1128, 0x6004,
++ 0x9082, 0x0085, 0x2008, 0x00c2, 0x9186, 0x0027, 0x1178, 0x080c,
++ 0x8026, 0x0036, 0x0096, 0x6014, 0x2048, 0x2019, 0x0004, 0x080c,
++ 0xc970, 0x009e, 0x003e, 0x080c, 0x8125, 0x0005, 0x9186, 0x0014,
++ 0x0d70, 0x080c, 0x95e9, 0x0005, 0xcb7b, 0xcb79, 0xcb79, 0xcb79,
++ 0xcb79, 0xcb79, 0xcb7b, 0xcb79, 0xcb79, 0xcb79, 0xcb79, 0xcb79,
++ 0xcb79, 0x080c, 0x0d84, 0x080c, 0x8026, 0x6003, 0x000c, 0x080c,
++ 0x8125, 0x0005, 0x9182, 0x0092, 0x1220, 0x9182, 0x0085, 0x0208,
++ 0x001a, 0x080c, 0x95e9, 0x0005, 0xcb99, 0xcb99, 0xcb99, 0xcb99,
++ 0xcb9b, 0xcbbb, 0xcb99, 0xcb99, 0xcb99, 0xcb99, 0xcb99, 0xcb99,
++ 0xcb99, 0x080c, 0x0d84, 0x00d6, 0x2c68, 0x080c, 0x94fe, 0x01b0,
++ 0x6003, 0x0001, 0x6007, 0x001e, 0x2009, 0x026e, 0x210c, 0x613a,
++ 0x2009, 0x026f, 0x210c, 0x613e, 0x600b, 0xffff, 0x6910, 0x6112,
++ 0x6023, 0x0004, 0x080c, 0x7bcb, 0x080c, 0x8125, 0x2d60, 0x080c,
++ 0x9554, 0x00de, 0x0005, 0x080c, 0x9554, 0x0005, 0x00e6, 0x6010,
++ 0x00b6, 0x2058, 0xb800, 0x00be, 0xd0ec, 0x00ee, 0x0005, 0x2009,
++ 0x1872, 0x210c, 0xd1ec, 0x05b0, 0x6003, 0x0002, 0x6024, 0xc0e5,
++ 0x6026, 0xd0cc, 0x0150, 0x2001, 0x1955, 0x2004, 0x6042, 0x2009,
++ 0x1872, 0x210c, 0xd1f4, 0x1520, 0x00a0, 0x2009, 0x1872, 0x210c,
++ 0xd1f4, 0x0128, 0x6024, 0xc0e4, 0x6026, 0x9006, 0x00d8, 0x2001,
++ 0x1955, 0x200c, 0x2001, 0x1953, 0x2004, 0x9100, 0x9080, 0x000a,
++ 0x6042, 0x6010, 0x00b6, 0x2058, 0xb8ac, 0x00be, 0x0008, 0x2104,
++ 0x9005, 0x0118, 0x9088, 0x0003, 0x0cd0, 0x2c0a, 0x600f, 0x0000,
++ 0x9085, 0x0001, 0x0005, 0x0016, 0x00c6, 0x00e6, 0x6154, 0xb8ac,
++ 0x2060, 0x8cff, 0x0180, 0x84ff, 0x1118, 0x6054, 0x9106, 0x1138,
++ 0x600c, 0x2072, 0x080c, 0x79df, 0x080c, 0x9554, 0x0010, 0x9cf0,
++ 0x0003, 0x2e64, 0x0c70, 0x00ee, 0x00ce, 0x001e, 0x0005, 0x00d6,
++ 0x00b6, 0x6010, 0x2058, 0xb8ac, 0x2068, 0x9005, 0x0130, 0x9c06,
++ 0x0110, 0x680c, 0x0cd0, 0x600c, 0x680e, 0x00be, 0x00de, 0x0005,
++ 0x0026, 0x0036, 0x0156, 0x2011, 0x182a, 0x2204, 0x9084, 0x00ff,
++ 0x2019, 0x026e, 0x2334, 0x9636, 0x1508, 0x8318, 0x2334, 0x2204,
++ 0x9084, 0xff00, 0x9636, 0x11d0, 0x2011, 0x0270, 0x20a9, 0x0004,
++ 0x6010, 0x0096, 0x2048, 0x2019, 0x000a, 0x080c, 0xa439, 0x009e,
++ 0x1168, 0x2011, 0x0274, 0x20a9, 0x0004, 0x6010, 0x0096, 0x2048,
++ 0x2019, 0x0006, 0x080c, 0xa439, 0x009e, 0x1100, 0x015e, 0x003e,
++ 0x002e, 0x0005, 0x00e6, 0x2071, 0x1800, 0x080c, 0x5677, 0x080c,
++ 0x2b1e, 0x00ee, 0x0005, 0x00e6, 0x6010, 0x00b6, 0x2058, 0xb800,
++ 0x00be, 0xd0fc, 0x0108, 0x0011, 0x00ee, 0x0005, 0xa880, 0xc0e5,
++ 0xa882, 0x0005, 0x00e6, 0x00c6, 0x0076, 0x0066, 0x0056, 0x0046,
++ 0x0026, 0x0016, 0x0126, 0x2091, 0x8000, 0x2029, 0x19bd, 0x252c,
++ 0x2021, 0x19c3, 0x2424, 0x2061, 0x1cd0, 0x2071, 0x1800, 0x764c,
++ 0x706c, 0x9606, 0x0578, 0x6720, 0x9786, 0x0001, 0x0118, 0x9786,
++ 0x0008, 0x1500, 0x2500, 0x9c06, 0x01e8, 0x2400, 0x9c06, 0x01d0,
++ 0x080c, 0xc9f1, 0x01b8, 0x080c, 0xca01, 0x11a0, 0x6000, 0x9086,
++ 0x0004, 0x1120, 0x0016, 0x080c, 0x17b0, 0x001e, 0x080c, 0xb284,
++ 0x1110, 0x080c, 0x2d3f, 0x080c, 0xb295, 0x1110, 0x080c, 0x9e99,
++ 0x080c, 0x9584, 0x9ce0, 0x0018, 0x2001, 0x1818, 0x2004, 0x9c02,
++ 0x1208, 0x0858, 0x012e, 0x001e, 0x002e, 0x004e, 0x005e, 0x006e,
++ 0x007e, 0x00ce, 0x00ee, 0x0005, 0x2001, 0x180f, 0x2004, 0xd0dc,
++ 0x0005, 0x0006, 0x2001, 0x1836, 0x2004, 0xd09c, 0x000e, 0x0005,
++ 0x6004, 0x9086, 0x0001, 0x1128, 0x080c, 0x905b, 0x080c, 0x9584,
++ 0x9006, 0x0005, 0x0126, 0x0006, 0x00e6, 0x0016, 0x2091, 0x8000,
++ 0x2071, 0x1840, 0xd5a4, 0x0118, 0x7034, 0x8000, 0x7036, 0xd5b4,
++ 0x0118, 0x7030, 0x8000, 0x7032, 0xd5ac, 0x0178, 0x2500, 0x9084,
++ 0x0007, 0x908e, 0x0003, 0x0148, 0x908e, 0x0004, 0x0130, 0x908e,
++ 0x0005, 0x0118, 0x2071, 0x184a, 0x0089, 0x001e, 0x00ee, 0x000e,
++ 0x012e, 0x0005, 0x0126, 0x0006, 0x00e6, 0x2091, 0x8000, 0x2071,
++ 0x1842, 0x0021, 0x00ee, 0x000e, 0x012e, 0x0005, 0x2e04, 0x8000,
++ 0x2072, 0x1220, 0x8e70, 0x2e04, 0x8000, 0x2072, 0x0005, 0x00e6,
++ 0x2071, 0x1840, 0x0c99, 0x00ee, 0x0005, 0x00e6, 0x2071, 0x1844,
++ 0x0c69, 0x00ee, 0x0005, 0x0126, 0x0006, 0x00e6, 0x2091, 0x8000,
++ 0x2071, 0x1840, 0x7044, 0x8000, 0x7046, 0x00ee, 0x000e, 0x012e,
++ 0x0005, 0x0002, 0x0003, 0x03d6, 0x0000, 0x8064, 0x0008, 0x0010,
++ 0x0000, 0x8066, 0x0000, 0x0101, 0x0008, 0x4406, 0x000b, 0x8060,
++ 0x0000, 0x0400, 0x0000, 0x580c, 0x0003, 0x7934, 0x000b, 0x5090,
++ 0x000b, 0x4c09, 0x0003, 0xbac0, 0x0009, 0x0082, 0x0008, 0x0c09,
++ 0x000b, 0x15fe, 0x0008, 0x3409, 0x0003, 0x808c, 0x0008, 0x0001,
++ 0x0000, 0x0000, 0x0007, 0x4047, 0x000a, 0x808c, 0x0008, 0x0002,
++ 0x0000, 0x081b, 0x0003, 0x4022, 0x0000, 0x001c, 0x0003, 0x4122,
++ 0x0008, 0x4447, 0x0002, 0x0de7, 0x0003, 0x0bfe, 0x0008, 0x11a0,
++ 0x0001, 0x11c9, 0x000b, 0x0ca0, 0x0001, 0x11c9, 0x000b, 0x9180,
++ 0x0001, 0x0004, 0x0000, 0x8060, 0x0000, 0x0400, 0x0000, 0x7f62,
++ 0x0008, 0x8066, 0x0000, 0x0009, 0x0008, 0x442a, 0x0003, 0x808c,
++ 0x0008, 0x0000, 0x0008, 0x0060, 0x0008, 0x8062, 0x0008, 0x0004,
++ 0x0000, 0x8066, 0x0000, 0x0411, 0x0000, 0x4432, 0x0003, 0x03fe,
++ 0x0000, 0x43e0, 0x0001, 0x0dc6, 0x0003, 0xc2c0, 0x0009, 0x00ff,
++ 0x0008, 0x02e0, 0x0001, 0x0dc6, 0x0003, 0x9180, 0x0001, 0x0005,
++ 0x0008, 0x8060, 0x0000, 0x0400, 0x0000, 0x7f62, 0x0008, 0x8066,
++ 0x0000, 0x0019, 0x0000, 0x4441, 0x000b, 0x0240, 0x0002, 0x09c3,
++ 0x000b, 0x00fe, 0x0000, 0x31c6, 0x0003, 0x112a, 0x0000, 0x002e,
++ 0x0008, 0x022c, 0x0008, 0x3a44, 0x0002, 0x0c09, 0x000b, 0x808c,
++ 0x0008, 0x0002, 0x0000, 0x1760, 0x0008, 0x8062, 0x0008, 0x000f,
++ 0x0008, 0x8066, 0x0000, 0x0011, 0x0008, 0x4452, 0x0003, 0x01fe,
++ 0x0008, 0x42e0, 0x0009, 0x0db9, 0x000b, 0x00fe, 0x0000, 0x43e0,
++ 0x0001, 0x0db9, 0x000b, 0x1734, 0x0000, 0x1530, 0x0000, 0x1632,
++ 0x0008, 0x0d2a, 0x0008, 0x9880, 0x0001, 0x0010, 0x0000, 0x8060,
++ 0x0000, 0x0400, 0x0000, 0x7f62, 0x0008, 0x8066, 0x0000, 0x1e0a,
++ 0x0008, 0x4464, 0x0003, 0x808a, 0x0008, 0x0003, 0x0008, 0x1a60,
++ 0x0000, 0x8062, 0x0008, 0x0002, 0x0000, 0x586a, 0x0003, 0x8066,
++ 0x0000, 0x3679, 0x0000, 0x446d, 0x0003, 0x586e, 0x000b, 0x8054,
++ 0x0008, 0x0011, 0x0008, 0x8074, 0x0000, 0x1010, 0x0008, 0x1efe,
++ 0x0000, 0x3009, 0x000b, 0x0077, 0x0004, 0x0009, 0x000b, 0x1c60,
++ 0x0000, 0x1b62, 0x0000, 0x8066, 0x0000, 0x0231, 0x0008, 0x447b,
++ 0x000b, 0x587c, 0x000b, 0x0140, 0x0008, 0x0242, 0x0000, 0x1f43,
++ 0x0002, 0x0c86, 0x0003, 0x0d44, 0x0000, 0x0d46, 0x0008, 0x0348,
++ 0x0008, 0x044a, 0x0008, 0x008a, 0x0003, 0x0344, 0x0008, 0x0446,
++ 0x0008, 0x0548, 0x0008, 0x064a, 0x0000, 0x588a, 0x000b, 0x8054,
++ 0x0008, 0x0001, 0x0000, 0x8074, 0x0000, 0x2020, 0x0008, 0x4000,
++ 0x000f, 0x3a40, 0x000a, 0x0c0c, 0x000b, 0x2b24, 0x0008, 0x2b24,
++ 0x0008, 0x5894, 0x000b, 0x8054, 0x0008, 0x0002, 0x0000, 0x1242,
++ 0x0002, 0x08d8, 0x0003, 0x3a45, 0x000a, 0x08c9, 0x0003, 0x1e10,
++ 0x000a, 0x7f3c, 0x0000, 0x08c6, 0x0003, 0x1d00, 0x0002, 0x7f3a,
++ 0x0000, 0x0d60, 0x0000, 0x7f62, 0x0008, 0x8066, 0x0000, 0x0009,
++ 0x0008, 0x44a4, 0x0003, 0x00fe, 0x0000, 0x34c3, 0x0003, 0x1c60,
++ 0x0000, 0x8062, 0x0008, 0x0001, 0x0000, 0x8066, 0x0000, 0x0009,
++ 0x0008, 0x44ac, 0x000b, 0x00fe, 0x0000, 0x31a2, 0x000b, 0x0038,
++ 0x0000, 0x0060, 0x0008, 0x8062, 0x0008, 0x0019, 0x0000, 0x8066,
++ 0x0000, 0x0009, 0x0008, 0x44b5, 0x0003, 0x80c0, 0x0009, 0x00ff,
++ 0x0008, 0x7f3e, 0x0008, 0x0d60, 0x0000, 0x0efe, 0x0008, 0x1f80,
++ 0x0001, 0x7f62, 0x0008, 0x8066, 0x0000, 0x0009, 0x0008, 0x44bf,
++ 0x0003, 0x003a, 0x0008, 0x1dfe, 0x0000, 0x00a0, 0x000b, 0x0036,
++ 0x0008, 0x0077, 0x0004, 0x00d8, 0x000b, 0x8074, 0x0000, 0x2000,
++ 0x0000, 0x00d8, 0x000b, 0x3a44, 0x0002, 0x09cc, 0x000b, 0x8074,
++ 0x0000, 0x1000, 0x0000, 0x2d0e, 0x0000, 0x2d0e, 0x0000, 0x35a2,
++ 0x0003, 0x26fe, 0x0008, 0x26fe, 0x0008, 0x2700, 0x0008, 0x2700,
++ 0x0008, 0x00d0, 0x0009, 0x0ce6, 0x0003, 0x8074, 0x0000, 0x4040,
++ 0x0008, 0x58d8, 0x0003, 0x5090, 0x000b, 0x3a46, 0x000a, 0x0ce6,
++ 0x0003, 0x3a47, 0x0002, 0x08e3, 0x000b, 0x8054, 0x0008, 0x0004,
++ 0x0000, 0x8074, 0x0000, 0x8000, 0x0000, 0x0127, 0x0003, 0x92c0,
++ 0x0009, 0x0f88, 0x0008, 0x0809, 0x0003, 0x1a60, 0x0000, 0x8062,
++ 0x0008, 0x0002, 0x0000, 0x8066, 0x0000, 0x362a, 0x0000, 0x44eb,
++ 0x000b, 0x2000, 0x0000, 0x2000, 0x0000, 0x2102, 0x0000, 0x2102,
++ 0x0000, 0x2204, 0x0000, 0x2204, 0x0000, 0x2306, 0x0000, 0x2306,
++ 0x0000, 0x2408, 0x0000, 0x2408, 0x0000, 0x250a, 0x0000, 0x250a,
++ 0x0000, 0x260c, 0x0000, 0x260c, 0x0000, 0x270e, 0x0000, 0x270e,
++ 0x0000, 0x2810, 0x0000, 0x2810, 0x0000, 0x2912, 0x0000, 0x2912,
++ 0x0000, 0x1a60, 0x0000, 0x8062, 0x0008, 0x0007, 0x0000, 0x8066,
++ 0x0000, 0x0052, 0x0000, 0x4505, 0x0003, 0x92c0, 0x0009, 0x0780,
++ 0x0008, 0x0db3, 0x000b, 0x124b, 0x0002, 0x090e, 0x0003, 0x2e4d,
++ 0x0002, 0x2e4d, 0x0002, 0x09a2, 0x0003, 0x3a46, 0x000a, 0x0d1b,
++ 0x0003, 0x5910, 0x0003, 0x8054, 0x0008, 0x0004, 0x0000, 0x1243,
++ 0x000a, 0x0925, 0x0003, 0x8010, 0x0008, 0x000d, 0x0000, 0x0193,
++ 0x000c, 0x1810, 0x0000, 0x0193, 0x000c, 0x0125, 0x000b, 0x194d,
++ 0x000a, 0x091f, 0x0003, 0x1243, 0x000a, 0x09a9, 0x000b, 0x591f,
++ 0x0003, 0x8054, 0x0008, 0x0004, 0x0000, 0x0188, 0x000c, 0x1810,
++ 0x0000, 0x0193, 0x000c, 0x8074, 0x0000, 0xf000, 0x0008, 0x3a42,
++ 0x0002, 0x0d2d, 0x0003, 0x15fe, 0x0008, 0x344b, 0x0003, 0x0d30,
++ 0x0000, 0x0009, 0x000b, 0x0d30, 0x0000, 0x8074, 0x0000, 0x0501,
++ 0x0000, 0x8010, 0x0008, 0x000c, 0x0008, 0x0193, 0x000c, 0x0009,
++ 0x000b, 0xbbe0, 0x0009, 0x0030, 0x0008, 0x0d44, 0x0003, 0x18fe,
++ 0x0000, 0x3ce0, 0x0009, 0x0941, 0x000b, 0x15fe, 0x0008, 0x3ce0,
++ 0x0009, 0x0941, 0x000b, 0x0183, 0x0004, 0x8076, 0x0008, 0x0040,
++ 0x0000, 0x0180, 0x000b, 0x8076, 0x0008, 0x0041, 0x0008, 0x0180,
++ 0x000b, 0xbbe0, 0x0009, 0x0032, 0x0000, 0x0d49, 0x000b, 0x3c1e,
++ 0x0008, 0x0180, 0x000b, 0xbbe0, 0x0009, 0x0037, 0x0000, 0x0d65,
++ 0x0003, 0x18fe, 0x0000, 0x3ce0, 0x0009, 0x0d41, 0x0003, 0x1a60,
++ 0x0000, 0x8062, 0x0008, 0x000d, 0x0000, 0x2604, 0x0008, 0x2604,
++ 0x0008, 0x2706, 0x0008, 0x2706, 0x0008, 0x2808, 0x0000, 0x2808,
++ 0x0000, 0x290a, 0x0000, 0x290a, 0x0000, 0x8066, 0x0000, 0x0422,
++ 0x0000, 0x455c, 0x0003, 0x0188, 0x000c, 0x8054, 0x0008, 0x0004,
++ 0x0000, 0x8074, 0x0000, 0xf000, 0x0008, 0x8072, 0x0000, 0x8000,
++ 0x0000, 0x0127, 0x0003, 0xbbe0, 0x0009, 0x0038, 0x0000, 0x0d77,
++ 0x0003, 0x18fe, 0x0000, 0x3ce0, 0x0009, 0x0974, 0x000b, 0x15fe,
++ 0x0008, 0x3ce0, 0x0009, 0x0d3d, 0x000b, 0x0183, 0x0004, 0x8076,
++ 0x0008, 0x0040, 0x0000, 0x8072, 0x0000, 0x8000, 0x0000, 0x01c3,
++ 0x0003, 0x8076, 0x0008, 0x0042, 0x0008, 0x0180, 0x000b, 0xbbe0,
++ 0x0009, 0x0016, 0x0000, 0x0d80, 0x000b, 0x3a44, 0x0002, 0x0c0b,
++ 0x0003, 0x8072, 0x0000, 0x8000, 0x0000, 0x8000, 0x000f, 0x0009,
++ 0x000b, 0x8072, 0x0000, 0x8000, 0x0000, 0x0009, 0x000b, 0x3d30,
++ 0x000a, 0x7f00, 0x0000, 0xbc80, 0x0001, 0x0007, 0x0000, 0x018c,
++ 0x000b, 0x1930, 0x000a, 0x7f00, 0x0000, 0x9880, 0x0001, 0x0007,
++ 0x0000, 0x8060, 0x0000, 0x0400, 0x0000, 0x7f62, 0x0008, 0x8066,
++ 0x0000, 0x000a, 0x0008, 0x4591, 0x000b, 0x4000, 0x000f, 0x2193,
++ 0x000b, 0x0870, 0x0008, 0x4000, 0x000f, 0xbac0, 0x0009, 0x0090,
++ 0x0008, 0x099c, 0x000b, 0x8074, 0x0000, 0x0706, 0x0000, 0x019e,
++ 0x000b, 0x8074, 0x0000, 0x0703, 0x0000, 0x4000, 0x000f, 0x8010,
++ 0x0008, 0x0008, 0x0000, 0x01d1, 0x0003, 0x0188, 0x000c, 0x8010,
++ 0x0008, 0x0007, 0x0000, 0x0193, 0x000c, 0x1810, 0x0000, 0x0193,
++ 0x000c, 0x01db, 0x0003, 0x0188, 0x000c, 0x8010, 0x0008, 0x001b,
++ 0x0008, 0x0193, 0x000c, 0x1810, 0x0000, 0x0193, 0x000c, 0x8074,
++ 0x0000, 0xf080, 0x0000, 0x0d30, 0x0000, 0x0009, 0x000b, 0x8010,
++ 0x0008, 0x0009, 0x0008, 0x01d1, 0x0003, 0x8010, 0x0008, 0x0005,
++ 0x0008, 0x01d1, 0x0003, 0x808c, 0x0008, 0x0001, 0x0000, 0x8010,
++ 0x0008, 0x0004, 0x0000, 0x4143, 0x000a, 0x0859, 0x0003, 0x3a44,
++ 0x0002, 0x0c09, 0x000b, 0x0d2a, 0x0008, 0x01d1, 0x0003, 0x8010,
++ 0x0008, 0x0003, 0x0008, 0x01d3, 0x000b, 0x8010, 0x0008, 0x000b,
++ 0x0000, 0x01d3, 0x000b, 0x8010, 0x0008, 0x0002, 0x0000, 0x01d3,
++ 0x000b, 0x3a47, 0x0002, 0x0cd8, 0x000b, 0x8010, 0x0008, 0x0006,
++ 0x0008, 0x01d3, 0x000b, 0x8074, 0x0000, 0xf000, 0x0008, 0x0193,
++ 0x000c, 0x0196, 0x000c, 0x3a40, 0x000a, 0x0809, 0x0003, 0x8010,
++ 0x0008, 0x000c, 0x0008, 0x0193, 0x000c, 0x0009, 0x000b, 0x8074,
++ 0x0000, 0xf080, 0x0000, 0x0d30, 0x0000, 0x2e4d, 0x0002, 0x2e4d,
++ 0x0002, 0x09e4, 0x000b, 0x8054, 0x0008, 0x0019, 0x0000, 0x0009,
++ 0x000b, 0x8054, 0x0008, 0x0009, 0x0008, 0x0009, 0x000b, 0x3a44,
++ 0x0002, 0x0c09, 0x000b, 0x01c6, 0x0003, 0xc993, 0xf609, 0x0001,
++ 0x0002, 0x0004, 0x0008, 0x0010, 0x0020, 0x0040, 0x0080, 0x0100,
++ 0x0200, 0x0400, 0x0800, 0x1000, 0x2000, 0x4000, 0x8000, 0xd29e
++};
++#ifdef UNIQUE_FW_NAME
++unsigned short fw2300tpx_length01 = 0xc920;
++#else
++unsigned short risc_code_length01 = 0xc920;
++#endif
++
+--- /dev/null Thu Apr 11 07:25:15 2002
++++ linux-2.5.73-n9560/drivers/scsi/qla2xxx/qla_cfg.c Thu Jul 3 15:34:42 2003
+@@ -0,0 +1,2780 @@
++/******************************************************************************
++ * QLOGIC LINUX SOFTWARE
++ *
++ * QLogic ISP2x00 device driver for Linux 2.5.x
++ * Copyright (C) 2003 Qlogic Corporation
++ * (www.qlogic.com)
++ *
++ * This program is free software; you can redistribute it and/or modify it
++ * under the terms of the GNU General Public License as published by the
++ * Free Software Foundation; either version 2, or (at your option) any
++ * later version.
++ *
++ * This program is distributed in the hope that it will be useful, but
++ * WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ * General Public License for more details.
++ *
++ ******************************************************************************/
++
++/*
++ * QLogic ISP2x00 Multi-path LUN Support Driver
++ *
++ */
++
++#include "qla_os.h"
++#include "qla_def.h"
++
++#include "qlfo.h"
++
++/*
++ * Local Function Prototypes.
++ */
++
++static uint32_t qla2x00_add_portname_to_mp_dev(mp_device_t *, uint8_t *);
++
++static mp_device_t * qla2x00_allocate_mp_dev(uint8_t *, uint8_t *);
++static mp_path_t * qla2x00_allocate_path(mp_host_t *, uint16_t, fc_port_t *,
++ uint16_t);
++static mp_path_list_t * qla2x00_allocate_path_list(void);
++
++static mp_host_t * qla2x00_find_host_by_name(uint8_t *);
++
++static mp_device_t * qla2x00_find_or_allocate_mp_dev (mp_host_t *, uint16_t,
++ fc_port_t *);
++static mp_path_t * qla2x00_find_or_allocate_path(mp_host_t *, mp_device_t *,
++ uint16_t, fc_port_t *);
++
++static uint32_t qla2x00_cfg_register_failover_lun(mp_device_t *,srb_t *,
++ fc_lun_t *);
++static uint32_t qla2x00_send_failover_notify(mp_device_t *, uint8_t,
++ mp_path_t *, mp_path_t *);
++static mp_path_t * qla2x00_select_next_path(mp_host_t *, mp_device_t *,
++ uint8_t);
++
++static uint8_t qla2x00_update_mp_host(mp_host_t *);
++static uint32_t qla2x00_update_mp_tree (void);
++
++static fc_lun_t *qla2x00_find_matching_lun(uint8_t , mp_path_t *);
++static mp_path_t *qla2x00_find_path_by_id(mp_device_t *, uint8_t);
++static mp_device_t *qla2x00_find_mp_dev_by_id(mp_host_t *, uint8_t);
++static mp_device_t *qla2x00_find_mp_dev_by_name(mp_host_t *, uint8_t *);
++
++static mp_path_t *qla2x00_get_visible_path(mp_device_t *dp);
++static void qla2x00_map_os_targets(mp_host_t *);
++static void qla2x00_map_os_luns(mp_host_t *, mp_device_t *, uint16_t);
++static uint8_t qla2x00_map_a_oslun(mp_host_t *, mp_device_t *, uint16_t, uint16_t);
++
++static uint8_t qla2x00_is_ww_name_zero(uint8_t *);
++static void qla2x00_add_path(mp_path_list_t *, mp_path_t *);
++static void qla2x00_failback_single_lun(mp_device_t *, uint8_t, uint8_t);
++static void qla2x00_failback_luns(mp_host_t *);
++static void qla2x00_setup_new_path(mp_device_t *, mp_path_t *);
++
++/*
++ * Global data items
++ */
++mp_host_t *mp_hosts_base = NULL;
++uint8_t mp_config_required = FALSE;
++static int mp_num_hosts = 0;
++static uint8_t mp_initialized = FALSE;
++
++
++/*
++ * ENTRY ROUTINES
++ */
++
++/*
++ * qla2x00_cfg_init
++ * Initialize configuration structures to handle an instance of
++ * an HBA, QLA2x000 card.
++ *
++ * Input:
++ * ha = adapter state pointer.
++ *
++ * Returns:
++ * qla2x00 local function return status code.
++ *
++ * Context:
++ * Kernel context.
++ */
++int
++qla2x00_cfg_init(scsi_qla_host_t *ha)
++{
++ int rval;
++
++ ENTER("qla2x00_cfg_init");
++ set_bit(CFG_ACTIVE, &ha->cfg_flags);
++ if (!mp_initialized) {
++ /* First HBA, initialize the failover global properties */
++ qla2x00_fo_init_params(ha);
++
++ /* If the user specified a device configuration then
++ * it is use as the configuration. Otherwise, we wait
++ * for path discovery.
++ */
++ if ( mp_config_required )
++ qla2x00_cfg_build_path_tree(ha);
++ }
++ rval = qla2x00_cfg_path_discovery(ha);
++ clear_bit(CFG_ACTIVE, &ha->cfg_flags);
++ LEAVE("qla2x00_cfg_init");
++ return rval;
++}
++
++/*
++ * qla2x00_cfg_path_discovery
++ * Discover the path configuration from the device configuration
++ * for the specified host adapter and build the path search tree.
++ * This function is called after the lower level driver has
++ * completed its port and lun discovery.
++ *
++ * Input:
++ * ha = adapter state pointer.
++ *
++ * Returns:
++ * qla2x00 local function return status code.
++ *
++ * Context:
++ * Kernel context.
++ */
++int
++qla2x00_cfg_path_discovery(scsi_qla_host_t *ha)
++{
++ int rval = QLA2X00_SUCCESS;
++ mp_host_t *host;
++ uint8_t *name;
++
++ ENTER("qla2x00_cfg_path_discovery");
++
++ name = &ha->init_cb->node_name[0];
++
++ set_bit(CFG_ACTIVE, &ha->cfg_flags);
++ /* Initialize the path tree for this adapter */
++ host = qla2x00_find_host_by_name(name);
++ if ( mp_config_required ) {
++ if (host == NULL ) {
++ DEBUG4(printk("cfg_path_discovery: host not found, "
++ "node name = "
++ "%02x%02x%02x%02x%02x%02x%02x%02x\n",
++ name[0], name[1], name[2], name[3],
++ name[4], name[5], name[6], name[7]);)
++ rval = QLA2X00_FUNCTION_FAILED;
++ } else if (ha->instance != host->instance) {
++ DEBUG4(printk("cfg_path_discovery: host instance "
++ "don't match - instance=%ld.\n",
++ ha->instance);)
++ rval = QLA2X00_FUNCTION_FAILED;
++ }
++ } else if ( host == NULL ) {
++ /* New host adapter so allocate it */
++ if ( (host = qla2x00_alloc_host(ha)) == NULL ) {
++ printk(KERN_INFO
++ "qla2x00(%d): Couldn't allocate "
++ "host - ha = %p.\n",
++ (int)ha->instance, ha);
++ rval = QLA2X00_FUNCTION_FAILED;
++ }
++ }
++
++ /* Fill in information about host */
++ if (host != NULL ) {
++ host->flags |= MP_HOST_FLAG_NEEDS_UPDATE;
++ host->flags |= MP_HOST_FLAG_LUN_FO_ENABLED;
++ host->fcports = &ha->fcports;
++
++ /* Check if multipath is enabled */
++ if (!qla2x00_update_mp_host(host)) {
++ rval = QLA2X00_FUNCTION_FAILED;
++ }
++ host->flags &= ~MP_HOST_FLAG_LUN_FO_ENABLED;
++ }
++
++ if (rval != QLA2X00_SUCCESS) {
++ /* EMPTY */
++ DEBUG4(printk("qla2x00_path_discovery: Exiting FAILED\n");)
++ } else {
++ LEAVE("qla2x00_cfg_path_discovery");
++ }
++ clear_bit(CFG_ACTIVE, &ha->cfg_flags);
++
++ return rval;
++}
++
++/*
++ * qla2x00_cfg_event_notifiy
++ * Callback for host driver to notify us of configuration changes.
++ *
++ * Input:
++ * ha = adapter state pointer.
++ * i_type = event type
++ *
++ * Returns:
++ *
++ * Context:
++ * Kernel context.
++ */
++int
++qla2x00_cfg_event_notify(scsi_qla_host_t *ha, uint32_t i_type)
++{
++ mp_host_t *host; /* host adapter pointer */
++
++ ENTER("qla2x00_cfg_event_notify");
++
++ set_bit(CFG_ACTIVE, &ha->cfg_flags);
++ switch (i_type) {
++ case MP_NOTIFY_RESET_DETECTED:
++ DEBUG(printk("scsi%ld: MP_NOTIFY_RESET_DETECTED "
++ "- no action\n",
++ ha->host_no);)
++ break;
++ case MP_NOTIFY_PWR_LOSS:
++ DEBUG(printk("scsi%ld: MP_NOTIFY_PWR_LOSS - "
++ "update tree\n",
++ ha->host_no);)
++ /*
++ * Update our path tree in case we are
++ * losing the adapter
++ */
++ qla2x00_update_mp_tree();
++ /* Free our resources for adapter */
++ break;
++ case MP_NOTIFY_LOOP_UP:
++ DEBUG(printk("scsi%ld: MP_NOTIFY_LOOP_UP - "
++ "update host tree\n",
++ ha->host_no);)
++ /* Adapter is back up with new configuration */
++ if ((host = qla2x00_cfg_find_host(ha)) != NULL) {
++ host->flags |= MP_HOST_FLAG_NEEDS_UPDATE;
++ host->fcports = &ha->fcports;
++ qla2x00_update_mp_tree();
++ }
++ break;
++ case MP_NOTIFY_LOOP_DOWN:
++ case MP_NOTIFY_BUS_RESET:
++ DEBUG(printk("scsi%ld: MP_NOTIFY_OTHERS - "
++ "no action\n",
++ ha->host_no);)
++ break;
++ default:
++ break;
++
++ }
++ clear_bit(CFG_ACTIVE, &ha->cfg_flags);
++
++ LEAVE("qla2x00_cfg_event_notify");
++
++ return QLA2X00_SUCCESS;
++}
++
++/*
++ * qla2x00_cfg_failover
++ * A problem has been detected with the current path for this
++ * lun. Select the next available path as the current path
++ * for this device.
++ *
++ * Inputs:
++ * ha = pointer to host adapter
++ * fp - pointer to failed fc_lun (failback lun)
++ * tgt - pointer to target
++ *
++ * Returns:
++ * pointer to new fc_lun_t, or NULL if failover fails.
++ */
++fc_lun_t *
++qla2x00_cfg_failover(scsi_qla_host_t *ha, fc_lun_t *fp,
++ os_tgt_t *tgt, srb_t *sp)
++{
++ mp_host_t *host; /* host adapter pointer */
++ mp_device_t *dp; /* virtual device pointer */
++ mp_path_t *new_path; /* new path pointer */
++ fc_lun_t *new_fp = NULL;
++
++ ENTER("qla2x00_cfg_failover");
++ set_bit(CFG_ACTIVE, &ha->cfg_flags);
++ if ((host = qla2x00_cfg_find_host(ha)) != NULL) {
++ if ((dp = qla2x00_find_mp_dev_by_name(
++ host, tgt->node_name)) != NULL ) {
++
++ DEBUG3(printk("qla2x00_cfg_failover: dp = %p\n", dp);)
++ /*
++ * Point at the next path in the path list if there is
++ * one, and if it hasn't already been failed over by
++ * another I/O. If there is only one path continuer
++ * to point at it.
++ */
++ new_path = qla2x00_select_next_path(host, dp, fp->lun);
++ DEBUG3(printk("cfg_failover: new path @ %p\n",
++ new_path);)
++ new_fp = qla2x00_find_matching_lun(fp->lun, new_path);
++ DEBUG3(printk("cfg_failover: new fp lun @ %p\n",
++ new_fp);)
++
++ qla2x00_cfg_register_failover_lun(dp, sp, new_fp);
++ } else {
++ printk(KERN_INFO
++ "qla2x00(%d): Couldn't find device "
++ "to failover\n",
++ host->instance);
++ }
++ }
++ clear_bit(CFG_ACTIVE, &ha->cfg_flags);
++
++ LEAVE("qla2x00_cfg_failover");
++
++ return new_fp;
++}
++
++/*
++ * IOCTL support
++ */
++#define CFG_IOCTL
++#if defined(CFG_IOCTL)
++/*
++ * qla2x00_cfg_get_paths
++ * Get list of paths EXT_FO_GET_PATHS.
++ *
++ * Input:
++ * ha = pointer to adapter
++ * bp = pointer to buffer
++ * cmd = Pointer to kernel copy of EXT_IOCTL.
++ *
++ * Return;
++ * 0 on success or errno.
++ * driver ioctl errors are returned via cmd->Status.
++ *
++ * Context:
++ * Kernel context.
++ */
++int
++qla2x00_cfg_get_paths(EXT_IOCTL *cmd, FO_GET_PATHS *bp, int mode)
++{
++ FO_PATHS_INFO *paths, *u_paths;
++ FO_PATH_ENTRY *entry;
++ EXT_DEST_ADDR *sap = &bp->HbaAddr;
++ mp_host_t *host = NULL; /* host adapter pointer */
++ mp_device_t *dp; /* virtual device pointer */
++ mp_path_t *path; /* path pointer */
++ mp_path_list_t *path_list; /* path list pointer */
++ int cnt;
++ int rval = 0;
++ scsi_qla_host_t *ha;
++
++ DEBUG9(printk("%s: entered.\n", __func__);)
++
++ u_paths = (FO_PATHS_INFO *) cmd->ResponseAdr;
++ ha = qla2x00_get_hba((int)bp->HbaInstance);
++
++ if (!ha) {
++ DEBUG2_9_10(printk("%s: no ha matching inst %d.\n",
++ __func__, bp->HbaInstance);)
++
++ cmd->Status = EXT_STATUS_DEV_NOT_FOUND;
++ return (rval);
++ }
++
++ if (ha->flags.failover_enabled)
++ if ((host = qla2x00_cfg_find_host(ha)) == NULL) {
++ cmd->Status = EXT_STATUS_DEV_NOT_FOUND;
++ cmd->DetailStatus = EXT_DSTATUS_HBA_INST;
++ DEBUG4(printk("%s: cannot find target (%ld)\n",
++ __func__, ha->instance);)
++ DEBUG9_10(printk("%s: cannot find host inst(%ld).\n",
++ __func__, ha->instance);)
++
++ return rval;
++ }
++
++ paths = (FO_PATHS_INFO *)qla2x00_kmem_zalloc(
++ sizeof(FO_PATHS_INFO), GFP_ATOMIC, 20);
++ if (paths == NULL) {
++ DEBUG4(printk("%s: failed to allocate memory of size (%d)\n",
++ __func__, (int)sizeof(FO_PATHS_INFO));)
++ DEBUG9_10(printk("%s: failed allocate memory size(%d).\n",
++ __func__, (int)sizeof(FO_PATHS_INFO));)
++
++ cmd->Status = EXT_STATUS_NO_MEMORY;
++
++ return -ENOMEM;
++ }
++
++ if (!ha->flags.failover_enabled) {
++ /* non-fo case. There's only one path. */
++
++ mp_path_list_t *ptmp_plist;
++#define STD_MAX_PATH_CNT 1
++#define STD_VISIBLE_INDEX 0
++ int found;
++ struct list_head *fcpl;
++ fc_port_t *fcport;
++
++ DEBUG9(printk("%s: non-fo case.\n", __func__);)
++
++ if (qla2x00_get_ioctl_scrap_mem(ha, (void **)&ptmp_plist,
++ sizeof(mp_path_list_t))) {
++ /* not enough memory */
++ DEBUG9_10(printk("%s(%ld): inst=%ld scrap not big enough. "
++ "lun_mask requested=%d.\n",
++ __func__, ha->host_no, ha->instance,
++ sizeof(mp_path_list_t));)
++ cmd->Status = EXT_STATUS_NO_MEMORY;
++
++ return -ENOMEM;
++ }
++
++ found = 0;
++ fcport = NULL;
++ list_for_each(fcpl, &ha->fcports) {
++ fcport = list_entry(fcpl, fc_port_t, list);
++
++ if (memcmp(fcport->node_name, sap->DestAddr.WWNN,
++ EXT_DEF_WWN_NAME_SIZE) == 0) {
++ found++;
++ break;
++ }
++ }
++
++ if (found) {
++ DEBUG9(printk("%s: found fcport:"
++ "(%02x-%02x-%02x-%02x-%02x-%02x-%02x-%02x)\n.",
++ __func__,
++ sap->DestAddr.WWNN[0],
++ sap->DestAddr.WWNN[1],
++ sap->DestAddr.WWNN[2],
++ sap->DestAddr.WWNN[3],
++ sap->DestAddr.WWNN[4],
++ sap->DestAddr.WWNN[5],
++ sap->DestAddr.WWNN[6],
++ sap->DestAddr.WWNN[7]);)
++
++ paths->HbaInstance = bp->HbaInstance;
++ paths->PathCount = STD_MAX_PATH_CNT;
++ paths->VisiblePathIndex = STD_VISIBLE_INDEX;
++
++ /* Copy current path, which is the first one (0). */
++ memcpy(paths->CurrentPathIndex, ptmp_plist->current_path,
++ sizeof(paths->CurrentPathIndex));
++
++ entry = &(paths->PathEntry[STD_VISIBLE_INDEX]);
++
++ entry->Visible = TRUE;
++ entry->HbaInstance = bp->HbaInstance;
++
++ memcpy(entry->PortName, fcport->port_name,
++ EXT_DEF_WWP_NAME_SIZE);
++
++ rval = verify_area(VERIFY_WRITE, (void *)u_paths,
++ cmd->ResponseLen);
++ if (rval) {
++ /* error */
++ DEBUG9_10(printk("%s: u_paths %p verify write"
++ " error. paths->PathCount=%d.\n",
++ __func__, u_paths, paths->PathCount);)
++ }
++
++ /* Copy data to user */
++ if (rval == 0)
++ rval = copy_to_user(&u_paths->PathCount,
++ &paths->PathCount, 4);
++ if (rval == 0)
++ rval = copy_to_user(&u_paths->CurrentPathIndex,
++ &paths->CurrentPathIndex,
++ sizeof(paths->CurrentPathIndex));
++ if (rval == 0)
++ rval = copy_to_user(&u_paths->PathEntry,
++ &paths->PathEntry,
++ sizeof(paths->PathEntry));
++
++ if (rval) { /* if any of the above failed */
++ DEBUG9_10(printk("%s: data copy failed.\n",
++ __func__);)
++
++ cmd->Status = EXT_STATUS_COPY_ERR;
++ }
++ } else {
++ cmd->Status = EXT_STATUS_DEV_NOT_FOUND;
++ cmd->DetailStatus = EXT_DSTATUS_TARGET;
++
++ DEBUG10(printk("%s: cannot find fcport "
++ "(%02x-%02x-%02x-%02x-%02x-%02x-%02x-%02x)\n.",
++ __func__,
++ sap->DestAddr.WWNN[0],
++ sap->DestAddr.WWNN[1],
++ sap->DestAddr.WWNN[2],
++ sap->DestAddr.WWNN[3],
++ sap->DestAddr.WWNN[4],
++ sap->DestAddr.WWNN[5],
++ sap->DestAddr.WWNN[6],
++ sap->DestAddr.WWNN[7]);)
++ DEBUG4(printk("%s: cannot find fcport "
++ "(%02x-%02x-%02x-%02x-%02x-%02x-%02x-%02x)\n.",
++ __func__,
++ sap->DestAddr.WWNN[0],
++ sap->DestAddr.WWNN[1],
++ sap->DestAddr.WWNN[2],
++ sap->DestAddr.WWNN[3],
++ sap->DestAddr.WWNN[4],
++ sap->DestAddr.WWNN[5],
++ sap->DestAddr.WWNN[6],
++ sap->DestAddr.WWNN[7]);)
++ }
++
++ qla2x00_free_ioctl_scrap_mem(ha);
++ /* end of non-fo case. */
++
++ } else if (sap->DestType != EXT_DEF_DESTTYPE_WWNN) {
++ /* Scan for mp_dev by nodename *ONLY* */
++
++ cmd->Status = EXT_STATUS_INVALID_PARAM;
++ cmd->DetailStatus = EXT_DSTATUS_TARGET;
++
++ DEBUG4(printk("%s: target can be accessed by NodeName only.",
++ __func__);)
++ DEBUG10(printk("%s: target can be accessed by NodeName only. "
++ "got type %d.\n",
++ __func__, sap->DestType);)
++
++ } else if ((dp = qla2x00_find_mp_dev_by_name(host,
++ sap->DestAddr.WWNN)) != NULL) {
++ DEBUG9(printk("%s: Found mp_dev:"
++ "(%02x-%02x-%02x-%02x-%02x-%02x-%02x-%02x)\n.",
++ __func__,
++ sap->DestAddr.WWNN[0],
++ sap->DestAddr.WWNN[1],
++ sap->DestAddr.WWNN[2],
++ sap->DestAddr.WWNN[3],
++ sap->DestAddr.WWNN[4],
++ sap->DestAddr.WWNN[5],
++ sap->DestAddr.WWNN[6],
++ sap->DestAddr.WWNN[7]);)
++
++ path_list = dp->path_list;
++
++ paths->HbaInstance = bp->HbaInstance;
++ paths->PathCount = path_list->path_cnt;
++ paths->VisiblePathIndex = path_list->visible;
++
++ /* copy current paths */
++ memcpy(paths->CurrentPathIndex,
++ path_list->current_path,
++ sizeof(paths->CurrentPathIndex));
++
++ path = path_list->last;
++ for (cnt = 0; cnt < path_list->path_cnt; cnt++) {
++ entry = &(paths->PathEntry[path->id]);
++
++ entry->Visible = (path->id == path_list->visible);
++ entry->HbaInstance = path->host->instance;
++
++ memcpy(entry->PortName,
++ path->portname,
++ EXT_DEF_WWP_NAME_SIZE);
++
++ path = path->next;
++ }
++
++ rval = verify_area(VERIFY_WRITE, (void *)u_paths,
++ cmd->ResponseLen);
++ if (rval) {
++ /* error */
++ DEBUG9_10(printk("%s: u_paths %p verify write"
++ " error. paths->PathCount=%d.\n",
++ __func__, u_paths, paths->PathCount);)
++ }
++
++ /* copy data to user */
++ if (rval == 0)
++ rval = copy_to_user(&u_paths->PathCount,
++ &paths->PathCount, 4);
++ if (rval == 0)
++ rval = copy_to_user(&u_paths->CurrentPathIndex,
++ &paths->CurrentPathIndex,
++ sizeof(paths->CurrentPathIndex));
++ if (rval == 0)
++ rval = copy_to_user(&u_paths->PathEntry,
++ &paths->PathEntry,
++ sizeof(paths->PathEntry));
++
++ if (rval != 0) { /* if any of the above failed */
++ DEBUG9_10(printk("%s: u_paths %p copy"
++ " error. paths->PathCount=%d.\n",
++ __func__, u_paths, paths->PathCount);)
++ cmd->Status = EXT_STATUS_COPY_ERR;
++ }
++
++ } else {
++
++ cmd->Status = EXT_STATUS_DEV_NOT_FOUND;
++ cmd->DetailStatus = EXT_DSTATUS_TARGET;
++
++ DEBUG4(printk("%s: cannot find device "
++ "(%02x-%02x-%02x-%02x-%02x-%02x-%02x-%02x)\n.",
++ __func__,
++ sap->DestAddr.WWNN[0],
++ sap->DestAddr.WWNN[1],
++ sap->DestAddr.WWNN[2],
++ sap->DestAddr.WWNN[3],
++ sap->DestAddr.WWNN[4],
++ sap->DestAddr.WWNN[5],
++ sap->DestAddr.WWNN[6],
++ sap->DestAddr.WWNN[7]);)
++ }
++
++ KMEM_FREE(paths, sizeof(FO_PATHS_INFO));
++
++ DEBUG9(printk("%s: exiting. rval=%d.\n", __func__, rval);)
++
++ return rval;
++
++} /* qla2x00_cfg_get_paths */
++
++/*
++ * qla2x00_cfg_set_current_path
++ * Set the current failover path EXT_FO_GET_PATHS IOCTL call.
++ *
++ * Input:
++ * ha = pointer to adapter
++ * bp = pointer to buffer
++ * cmd = Pointer to kernel copy of EXT_IOCTL.
++ *
++ * Return;
++ * 0 on success or errno.
++ *
++ * Context:
++ * Kernel context.
++ */
++int
++qla2x00_cfg_set_current_path(EXT_IOCTL *cmd, FO_SET_CURRENT_PATH *bp, int mode )
++{
++ uint8_t orig_id, new_id;
++ mp_host_t *host, *new_host;
++ mp_device_t *dp;
++ mp_path_list_t *path_list;
++ EXT_DEST_ADDR *sap = &bp->HbaAddr;
++ uint32_t rval = 0;
++ scsi_qla_host_t *ha;
++ mp_path_t *new_path, *old_path;
++
++ DEBUG9(printk("%s: entered.\n", __func__);)
++
++ /* First find the adapter with the instance number. */
++ ha = qla2x00_get_hba((int)bp->HbaInstance);
++ if (!ha) {
++ DEBUG2_9_10(printk("%s: no ha matching inst %d.\n",
++ __func__, bp->HbaInstance);)
++
++ cmd->Status = EXT_STATUS_DEV_NOT_FOUND;
++ return (rval);
++ }
++
++ if (!ha->flags.failover_enabled)
++ /* non-failover mode. nothing to be done. */
++ return 0;
++
++ if ((host = qla2x00_cfg_find_host(ha)) == NULL) {
++ cmd->Status = EXT_STATUS_DEV_NOT_FOUND;
++ cmd->DetailStatus = EXT_DSTATUS_HBA_INST;
++ DEBUG4(printk("%s: cannot find adapter.\n",
++ __func__);)
++ return (rval);
++ }
++
++ set_bit(CFG_ACTIVE, &ha->cfg_flags);
++ sap = &bp->HbaAddr;
++ /* Scan for mp_dev by nodename *ONLY* */
++ if (sap->DestType != EXT_DEF_DESTTYPE_WWNN) {
++ cmd->Status = EXT_STATUS_DEV_NOT_FOUND;
++ cmd->DetailStatus = EXT_DSTATUS_TARGET;
++ DEBUG4(printk("%s: target can be accessed by NodeName only.",
++ __func__);)
++ DEBUG9_10(printk("%s: target can be accessed by NodeName only.",
++ __func__);)
++ } else if ((dp = qla2x00_find_mp_dev_by_name(
++ host, sap->DestAddr.WWNN)) != NULL) {
++
++ path_list = dp->path_list;
++
++ if (bp->NewCurrentPathIndex < MAX_PATHS_PER_DEVICE &&
++ sap->Lun < MAX_LUNS &&
++ bp->NewCurrentPathIndex < path_list->path_cnt) {
++
++ orig_id = path_list->current_path[sap->Lun];
++
++ DEBUG(printk("%s: dev no %d, lun %d, "
++ "newindex %d, oldindex %d "
++ "nn=%02x%02x%02x%02x%02x%02x%02x%02x\n",
++ __func__, dp->dev_id, sap->Lun,
++ bp->NewCurrentPathIndex, orig_id,
++ host->nodename[0], host->nodename[1],
++ host->nodename[2], host->nodename[3],
++ host->nodename[4], host->nodename[5],
++ host->nodename[6], host->nodename[7]);)
++
++ if (bp->NewCurrentPathIndex != orig_id) {
++ /* Acquire the update spinlock. */
++
++ /* Set the new current path. */
++ new_id = path_list-> current_path[sap->Lun] =
++ bp->NewCurrentPathIndex;
++
++ /* Release the update spinlock. */
++ old_path = qla2x00_find_path_by_id(
++ dp, orig_id);
++ new_path = qla2x00_find_path_by_id(dp, new_id);
++ new_host = new_path->host;
++
++ /* remap the lun */
++ qla2x00_map_a_oslun(new_host, dp,
++ dp->dev_id, sap->Lun);
++
++ qla2x00_send_failover_notify(dp,
++ sap->Lun, old_path, new_path);
++ } else {
++ /* EMPTY */
++ DEBUG4(printk("%s: path index not changed.\n",
++ __func__);)
++ }
++ } else {
++ cmd->Status = EXT_STATUS_INVALID_PARAM;
++ cmd->DetailStatus = EXT_DSTATUS_PATH_INDEX;
++ DEBUG4(printk("%s: invalid index for device.\n",
++ __func__);)
++ DEBUG9_10(printk("%s: invalid index for device.\n",
++ __func__);)
++ }
++ } else {
++ cmd->Status = EXT_STATUS_DEV_NOT_FOUND;
++ cmd->DetailStatus = EXT_DSTATUS_TARGET;
++ DEBUG4(printk("%s: cannot find device.\n",
++ __func__);)
++ DEBUG9_10(printk("%s: cannot find device.\n",
++ __func__);)
++ }
++ clear_bit(CFG_ACTIVE, &ha->cfg_flags);
++
++ DEBUG9(printk("%s: exiting. rval = %d.\n", __func__, rval);)
++
++ return rval;
++}
++#endif
++
++/*
++ * MP SUPPORT ROUTINES
++ */
++
++/*
++ * qla2x00_add_mp_host
++ * Add the specified host the host list.
++ *
++ * Input:
++ * node_name = pointer to node name
++ *
++ * Returns:
++ *
++ * Context:
++ * Kernel context.
++ */
++mp_host_t *
++qla2x00_add_mp_host(uint8_t *node_name)
++{
++ mp_host_t *host, *temp;
++
++ host = (mp_host_t *) KMEM_ZALLOC(sizeof(mp_host_t), 1);
++ if (host != NULL) {
++ memcpy(host->nodename, node_name, WWN_SIZE);
++ host->next = NULL;
++ /* add to list */
++ if (mp_hosts_base == NULL) {
++ mp_hosts_base = host;
++ } else {
++ temp = mp_hosts_base;
++ while (temp->next != NULL)
++ temp = temp->next;
++ temp->next = host;
++ }
++ mp_num_hosts++;
++ }
++ return host;
++}
++
++/*
++ * qla2x00_alloc_host
++ * Allocate and initialize an mp host structure.
++ *
++ * Input:
++ * ha = pointer to base driver's adapter structure.
++ *
++ * Returns:
++ * Pointer to host structure or null on error.
++ *
++ * Context:
++ * Kernel context.
++ */
++mp_host_t *
++qla2x00_alloc_host(scsi_qla_host_t *ha)
++{
++ mp_host_t *host, *temp;
++ uint8_t *name, *portname;
++
++ name = &ha->init_cb->node_name[0];
++ portname = &ha->init_cb->port_name[0];
++
++ ENTER("qla2x00_alloc_host");
++
++ host = (mp_host_t *) KMEM_ZALLOC(sizeof(mp_host_t), 2);
++
++ if (host != NULL) {
++ host->ha = ha;
++ memcpy(host->nodename, name, WWN_SIZE);
++ memcpy(host->portname, portname, WWN_SIZE);
++ host->next = NULL;
++ host->flags = MP_HOST_FLAG_NEEDS_UPDATE;
++ host->instance = ha->instance;
++ /* host->MaxLunsPerTarget = qla_fo_params.MaxLunsPerTarget; */
++
++ if (qla2x00_fo_enabled(host->ha, host->instance)) {
++ host->flags |= MP_HOST_FLAG_FO_ENABLED;
++ DEBUG4(printk("%s: Failover enabled.\n",
++ __func__);)
++ } else {
++ /* EMPTY */
++ DEBUG4(printk("%s: Failover disabled.\n",
++ __func__);)
++ }
++ /* add to list */
++ if (mp_hosts_base == NULL) {
++ mp_hosts_base = host;
++ } else {
++ temp = mp_hosts_base;
++ while (temp->next != NULL)
++ temp = temp->next;
++ temp->next = host;
++ }
++ mp_num_hosts++;
++
++ DEBUG4(printk("%s: Alloc host @ %p\n", __func__, host);)
++ } else {
++ /* EMPTY */
++ DEBUG4(printk("%s: Failed\n", __func__);)
++ }
++
++ return host;
++}
++
++/*
++ * qla2x00_add_portname_to_mp_dev
++ * Add the specific port name to the list of port names for a
++ * multi-path device.
++ *
++ * Input:
++ * dp = pointer ti virtual device
++ * portname = Port name to add to device
++ *
++ * Returns:
++ * qla2x00 local function return status code.
++ *
++ * Context:
++ * Kernel context.
++ */
++static uint32_t
++qla2x00_add_portname_to_mp_dev(mp_device_t *dp, uint8_t *portname)
++{
++ uint8_t index;
++ uint32_t rval = QLA2X00_SUCCESS;
++
++ ENTER("qla2x00_add_portname_to_mp_dev");
++
++ /* Look for an empty slot and add the specified portname. */
++ for (index = 0; index < MAX_NUMBER_PATHS; index++) {
++ if (qla2x00_is_ww_name_zero(&dp->portnames[index][0])) {
++ DEBUG4(printk("%s: adding portname to dp = "
++ "%p at index = %d\n",
++ __func__, dp, index);)
++ memcpy(&dp->portnames[index][0], portname, WWN_SIZE);
++ break;
++ }
++ }
++ if (index == MAX_NUMBER_PATHS) {
++ rval = QLA2X00_FUNCTION_FAILED;
++ DEBUG4(printk("%s: Fail no room\n", __func__);)
++ } else {
++ /* EMPTY */
++ DEBUG4(printk("%s: Exit OK\n", __func__);)
++ }
++
++ LEAVE("qla2x00_add_portname_to_mp_dev");
++
++ return rval;
++}
++
++
++/*
++ * qla2x00_allocate_mp_dev
++ * Allocate an fc_mp_dev, clear the memory, and log a system
++ * error if the allocation fails. After fc_mp_dev is allocated
++ *
++ * Inputs:
++ * nodename = pointer to nodename of new device
++ * portname = pointer to portname of new device
++ *
++ * Returns:
++ * Pointer to new mp_device_t, or NULL if the allocation fails.
++ *
++ * Context:
++ * Kernel context.
++ */
++static mp_device_t *
++qla2x00_allocate_mp_dev(uint8_t *nodename, uint8_t *portname)
++{
++ mp_device_t *dp; /* Virtual device pointer */
++
++ ENTER("qla2x00_allocate_mp_dev");
++
++ dp = (mp_device_t *)KMEM_ZALLOC(sizeof(mp_device_t), 3);
++
++ if (dp != NULL) {
++ DEBUG3(printk("%s: mp_device_t allocated at %p\n",
++ __func__, dp);)
++
++ /*
++ * Copy node name into the mp_device_t.
++ */
++ if (nodename)
++ memcpy(dp->nodename, nodename, WWN_SIZE);
++
++ /*
++ * Since this is the first port, it goes at
++ * index zero.
++ */
++ if (portname)
++ memcpy(&dp->portnames[0][0], portname, PORT_NAME_SIZE);
++
++ /* Allocate an PATH_LIST for the fc_mp_dev. */
++ if ((dp->path_list = qla2x00_allocate_path_list()) == NULL) {
++ DEBUG4(printk("%s: allocate path_list Failed.\n",
++ __func__);)
++ KMEM_FREE(dp, sizeof(mp_device_t));
++ dp = NULL;
++ } else {
++ DEBUG4(printk("%s: mp_path_list_t allocated at %p\n",
++ __func__, dp->path_list);)
++ /* EMPTY */
++ DEBUG4(printk("qla2x00_allocate_mp_dev: Exit Okay\n");)
++ }
++ } else {
++ /* EMPTY */
++ DEBUG4(printk("%s: Allocate failed.\n", __func__);)
++ }
++
++ LEAVE("qla2x00_allocate_mp_dev");
++
++ return dp;
++}
++
++/*
++ * qla2x00_allocate_path
++ * Allocate a PATH.
++ *
++ * Inputs:
++ * host Host adapter for the device.
++ * path_id path number
++ * port port for device.
++ * dev_id device number
++ *
++ * Returns:
++ * Pointer to new PATH, or NULL if the allocation failed.
++ *
++ * Context:
++ * Kernel context.
++ */
++static mp_path_t *
++qla2x00_allocate_path(mp_host_t *host, uint16_t path_id,
++ fc_port_t *port, uint16_t dev_id)
++{
++ mp_path_t *path;
++ uint16_t lun;
++
++ ENTER("qla2x00_allocate_path");
++
++ path = (mp_path_t *) KMEM_ZALLOC(sizeof(mp_path_t), 4);
++ if (path != NULL) {
++ DEBUG3(printk("%s: mp_path_t allocated at %p\n",
++ __func__, path); )
++
++ /* Copy the supplied information into the MP_PATH. */
++ path->host = host;
++ if (!(port->flags & FC_CONFIG) ||
++ port->loop_id != FC_NO_LOOP_ID) {
++
++ path->port = port;
++ }
++ path->id = path_id;
++ port->cur_path = path->id;
++ path->mp_byte = port->mp_byte;
++ path->next = NULL;
++ memcpy(path->portname, port->port_name, WWN_SIZE);
++ for (lun = 0; lun < MAX_LUNS; lun++) {
++ path->lun_data.data[lun] |= LUN_DATA_ENABLED;
++ }
++ } else {
++ /* EMPTY */
++ DEBUG4(printk("%s: Failed\n", __func__);)
++ }
++
++ return path;
++}
++
++
++/*
++ * qla2x00_allocate_path_list
++ * Allocate a PATH_LIST
++ *
++ * Input:
++ * None
++ *
++ * Returns:
++ * Pointer to new PATH_LIST, or NULL if the allocation fails.
++ *
++ * Context:
++ * Kernel context.
++ */
++static mp_path_list_t *
++qla2x00_allocate_path_list( void )
++{
++ mp_path_list_t *path_list;
++ uint16_t i;
++ uint8_t l;
++
++ path_list = (mp_path_list_t *) KMEM_ZALLOC(sizeof(mp_path_list_t), 5);
++
++ if (path_list != NULL) {
++ DEBUG4(printk("%s: allocated at %p\n",
++ __func__, path_list);)
++
++ path_list->visible = PATH_INDEX_INVALID;
++ /* Initialized current path */
++ for (i = 0; i < MAX_LUNS_PER_DEVICE; i++) {
++ l = (uint8_t)(i & 0xFF);
++ path_list->current_path[l] = PATH_INDEX_INVALID;
++ }
++ path_list->last = NULL;
++
++ } else {
++ /* EMPTY */
++ DEBUG4(printk("%s: Alloc pool failed for MP_PATH_LIST.\n",
++ __func__);)
++ }
++
++ return path_list;
++}
++
++/*
++ * qla2x00_cfg_find_host
++ * Look through the existing multipath tree, and find
++ * a host adapter to match the specified ha.
++ *
++ * Input:
++ * ha = pointer to host adapter
++ *
++ * Return:
++ * Pointer to new host, or NULL if no match found.
++ *
++ * Context:
++ * Kernel context.
++ */
++mp_host_t *
++qla2x00_cfg_find_host(scsi_qla_host_t *ha)
++{
++ mp_host_t *host = NULL; /* Host found and null if not */
++ mp_host_t *tmp_host;
++
++ ENTER("qla2x00_cfg_find_host");
++
++ for (tmp_host = mp_hosts_base; (tmp_host); tmp_host = tmp_host->next) {
++ if (tmp_host->ha == ha) {
++ host = tmp_host;
++ DEBUG3(printk("%s: Found host =%p, instance %d\n",
++ __func__, host, host->instance);)
++ break;
++ }
++ }
++
++ LEAVE("qla2x00_cfg_find_host");
++
++ return host;
++}
++
++/*
++ * qla2x00_find_host_by_name
++ * Look through the existing multipath tree, and find
++ * a host adapter to match the specified name.
++ *
++ * Input:
++ * name = node name to match.
++ *
++ * Return:
++ * Pointer to new host, or NULL if no match found.
++ *
++ * Context:
++ * Kernel context.
++ */
++mp_host_t *
++qla2x00_find_host_by_name(uint8_t *name)
++{
++ mp_host_t *host; /* Host found and null if not */
++
++ for (host = mp_hosts_base; (host); host = host->next) {
++ if (memcmp(host->nodename, name, WWN_SIZE) == 0)
++ break;
++ }
++ return host;
++}
++
++
++/*
++ * qla2x00_find_or_allocate_mp_dev
++ * Look through the existing multipath control tree, and find
++ * an mp_device_t with the supplied world-wide node name. If
++ * one cannot be found, allocate one.
++ *
++ * Input:
++ * host Adapter to add device to.
++ * dev_id Index of device on adapter.
++ * port port database information.
++ *
++ * Returns:
++ * Pointer to new mp_device_t, or NULL if the allocation fails.
++ *
++ * Side Effects:
++ * If the MP HOST does not already point to the mp_device_t,
++ * a pointer is added at the proper port offset.
++ *
++ * Context:
++ * Kernel context.
++ */
++static mp_device_t *
++qla2x00_find_or_allocate_mp_dev(mp_host_t *host, uint16_t dev_id,
++ fc_port_t *port)
++{
++ mp_device_t *dp = NULL; /* pointer to multi-path device */
++ uint8_t node_found; /* Found matching node name. */
++ uint8_t port_found; /* Found matching port name. */
++ uint8_t names_valid; /* Node name and port name are not zero */
++ mp_host_t *temp_host; /* pointer to temporary host */
++
++ uint16_t j;
++ mp_device_t *temp_dp;
++
++ ENTER("qla2x00_find_or_allocate_mp_dev");
++
++ DEBUG3(printk("%s: host =%p, port =%p, id = %d\n",
++ __func__, host, port, dev_id);)
++
++ temp_dp = qla2x00_find_mp_dev_by_id(host,dev_id);
++
++ DEBUG3(printk("%s: temp dp =%p\n", __func__, temp_dp);)
++ /* if Device already known at this port. */
++ if (temp_dp != NULL) {
++ node_found = qla2x00_is_nodename_equal(temp_dp->nodename,
++ port->node_name);
++ port_found = qla2x00_is_portname_in_device(temp_dp,
++ port->port_name);
++
++ if (node_found && port_found) {
++ DEBUG3(printk("%s: port exists in device %p\n",
++ __func__, temp_dp);)
++ dp = temp_dp;
++
++ /*
++ * Copy the LUN configuration data
++ * into the mp_device_t.
++ */
++ }
++ }
++
++
++ /* Sanity check the port information */
++ names_valid = (!qla2x00_is_ww_name_zero(port->node_name) &&
++ !qla2x00_is_ww_name_zero(port->port_name));
++
++ /*
++ * If the optimized check failed, loop through each known
++ * device on each known adapter looking for the node name.
++ */
++ if (dp == NULL && names_valid) {
++ DEBUG3(printk("%s: Searching each adapter for the device...\n",
++ __func__);)
++
++ for (temp_host = mp_hosts_base; (temp_host);
++ temp_host = temp_host->next) {
++
++ /* Loop through each potential device on adapter. */
++ for (j = 0; j < MAX_MP_DEVICES; j++) {
++ temp_dp = temp_host->mp_devs[j];
++
++ if (temp_dp == NULL)
++ continue;
++
++ node_found = qla2x00_is_nodename_equal(
++ temp_dp->nodename,
++ port->node_name);
++ port_found = qla2x00_is_portname_in_device(
++ temp_dp,
++ port->port_name);
++
++ if (node_found || port_found) {
++ DEBUG3(printk("%s: Matching device "
++ "found at %p @ %d\n",
++ __func__, temp_dp, j);)
++ /*
++ * If the node name matches but
++ * the port name was not found,
++ * add the port name to the list
++ * of port names.
++ */
++ if (!port_found) {
++ qla2x00_add_portname_to_mp_dev(
++ temp_dp,
++ port->port_name);
++ }
++
++ /*
++ * Set the flag that we have
++ * found the device.
++ */
++ dp = temp_dp;
++ host->mp_devs[j] = dp;
++ dp->use_cnt++;
++
++ /* Fixme(dg)
++ * Copy the LUN info into
++ * the mp_device_t
++ */
++ break;
++ }
++ }
++
++ /* Break outer loop if inner loop succeeded. */
++ if (dp != NULL)
++ break;
++ }
++
++ }
++
++ /* If we couldn't find one, allocate one. */
++ if (dp == NULL &&
++ ((port->flags & FC_CONFIG) || !mp_config_required ) ) {
++
++ dp = qla2x00_allocate_mp_dev(port->node_name, port->port_name);
++ host->mp_devs[dev_id] = dp;
++ dp->dev_id = dev_id;
++ dp->use_cnt++;
++ }
++
++ LEAVE("qla2x00_allocate_mp_dev");
++
++ return dp;
++}
++
++
++/*
++ * qla2x00_find_or_allocate_path
++ * Look through the path list for the supplied device, and either
++ * find the supplied adapter (path) for the adapter, or create
++ * a new one and add it to the path list.
++ *
++ * Input:
++ * host Adapter (path) for the device.
++ * dp Device and path list for the device.
++ * dev_id Index of device on adapter.
++ * port Device data from port database.
++ *
++ * Returns:
++ * Pointer to new PATH, or NULL if the allocation fails.
++ *
++ * Side Effects:
++ * 1. If the PATH_LIST does not already point to the PATH,
++ * a new PATH is added to the PATH_LIST.
++ * 2. If the new path is found to be a second visible path, it is
++ * marked as hidden, and the device database is updated to be
++ * hidden as well, to keep the miniport synchronized.
++ *
++ * Context:
++ * Kernel context.
++ */
++/* ARGSUSED */
++static mp_path_t *
++qla2x00_find_or_allocate_path(mp_host_t *host, mp_device_t *dp,
++ uint16_t dev_id, fc_port_t *port)
++{
++ mp_path_list_t *path_list = dp->path_list;
++ mp_path_t *path;
++ uint8_t id;
++
++
++ ENTER("qla2x00_find_or_allocate_path");
++
++ DEBUG4(printk("%s: host =%p, port =%p, dp=%p, dev id = %d\n",
++ __func__, host, port, dp, dev_id);)
++ /*
++ * Loop through each known path in the path list. Look for
++ * a PATH that matches both the adapter and the port name.
++ */
++ path = qla2x00_find_path_by_name(host, path_list, port->port_name);
++
++
++ if (path != NULL ) {
++ DEBUG3(printk("%s: Found an existing "
++ "path - host =%p, port =%p, path id = %d\n",
++ __func__, host, path->port, path->id);)
++ DEBUG3(printk("%s: Luns for path_id %d, instance %d\n",
++ __func__, path->id, host->instance);)
++ DEBUG3(qla2x00_dump_buffer(
++ (char *)&path->lun_data.data[0], 64);)
++
++ /* If we found an existing path, look for any changes to it. */
++ if (path->port == NULL) {
++ DEBUG3(printk("%s: update path %p, path id= %d, "
++ "mp_byte=0x%x port=%p\n",
++ __func__, path, path->id,
++ path->mp_byte, path->port);)
++ path->port = port;
++ port->mp_byte = path->mp_byte;
++ } else {
++ if ((path->mp_byte & MP_MASK_HIDDEN) &&
++ !(port->mp_byte & MP_MASK_HIDDEN)) {
++
++ DEBUG3(printk("%s: Adapter(%p) "
++ "Device (%p) Path (%d) "
++ "has become visible.\n",
++ __func__, host, dp, path->id);)
++
++ path->mp_byte &= ~MP_MASK_HIDDEN;
++ }
++
++ if (!(path->mp_byte & MP_MASK_HIDDEN) &&
++ (port->mp_byte & MP_MASK_HIDDEN)) {
++
++ DEBUG3(printk("%s: Adapter(%p) "
++ "Device (%p) Path (%d) "
++ "has become hidden.\n",
++ __func__, host, dp, path->id);)
++
++ path->mp_byte |= MP_MASK_HIDDEN;
++ }
++ }
++
++ } else {
++ /*
++ * If we couldn't find an existing path, and there is still
++ * room to add one, allocate one and put it in the list.
++ */
++ if (path_list->path_cnt < MAX_PATHS_PER_DEVICE &&
++ path_list->path_cnt < qla_fo_params.MaxPathsPerDevice) {
++
++ id = path_list->path_cnt;
++
++ /* Update port with bitmask info */
++ path = qla2x00_allocate_path(host, id, port, dev_id);
++ DEBUG3(printk("%s: new path %p, path id= %d, "
++ "mp_byte=0x%x port=%p\n",
++ __func__, path, id,
++ path->mp_byte, path->port);)
++ qla2x00_add_path(path_list, path);
++
++ /* Reconcile the new path against the existing ones. */
++ qla2x00_setup_new_path(dp, path);
++ } else {
++ /* EMPTY */
++ DEBUG4(printk("%s: Err exit, no space to add path.\n",
++ __func__);)
++ }
++
++ }
++
++ LEAVE("qla2x00_find_or_allocate_path");
++
++ return path;
++}
++
++static uint32_t
++qla2x00_cfg_register_failover_lun(mp_device_t *dp, srb_t *sp, fc_lun_t *new_lp)
++{
++ uint32_t status = QLA2X00_SUCCESS;
++ os_tgt_t *tq;
++ os_lun_t *lq;
++ fc_lun_t *old_lp;
++
++ DEBUG2(printk("%s: NEW fclun = %p, sp = %p\n",
++ __func__, new_lp, sp);)
++
++ /*
++ * Fix lun descriptors to point to new fclun which is a new fcport.
++ */
++ if (new_lp == NULL) {
++ DEBUG2(printk("%s: Failed new lun %p\n",
++ __func__, new_lp);)
++ return QLA2X00_FUNCTION_FAILED;
++ }
++
++ tq = sp->tgt_queue;
++ lq = sp->lun_queue;
++ if (tq == NULL) {
++ DEBUG2(printk("%s: Failed to get old tq %p\n",
++ __func__, tq);)
++ return QLA2X00_FUNCTION_FAILED;
++ }
++ if (lq == NULL) {
++ DEBUG2(printk("%s: Failed to get old lq %p\n",
++ __func__, lq);)
++ return QLA2X00_FUNCTION_FAILED;
++ }
++ old_lp = lq->fclun;
++ lq->fclun = new_lp;
++
++ /* Log the failover to console */
++ printk(KERN_INFO
++ "qla2x00: FAILOVER device %d from "
++ "%02x%02x%02x%02x%02x%02x%02x%02x -> "
++ "%02x%02x%02x%02x%02x%02x%02x%02x - "
++ "LUN %02x, reason=0x%x\n",
++ dp->dev_id,
++ old_lp->fcport->port_name[0], old_lp->fcport->port_name[1],
++ old_lp->fcport->port_name[2], old_lp->fcport->port_name[3],
++ old_lp->fcport->port_name[4], old_lp->fcport->port_name[5],
++ old_lp->fcport->port_name[6], old_lp->fcport->port_name[7],
++ new_lp->fcport->port_name[0], new_lp->fcport->port_name[1],
++ new_lp->fcport->port_name[2], new_lp->fcport->port_name[3],
++ new_lp->fcport->port_name[4], new_lp->fcport->port_name[5],
++ new_lp->fcport->port_name[6], new_lp->fcport->port_name[7],
++ new_lp->lun, sp->err_id);
++ printk(KERN_INFO
++ "qla2x00: FROM HBA %d to HBA %d\n",
++ (int)old_lp->fcport->ha->instance,
++ (int)new_lp->fcport->ha->instance);
++
++ DEBUG3(printk("%s: NEW fclun = %p , port =%p, "
++ "loop_id =0x%x, instance %ld\n",
++ __func__,
++ new_lp, new_lp->fcport,
++ new_lp->fcport->loop_id,
++ new_lp->fcport->ha->instance);)
++
++ return status;
++}
++
++
++/*
++ * qla2x00_send_failover_notify
++ * A failover operation has just been done from an old path
++ * index to a new index. Call lower level driver
++ * to perform the failover notification.
++ *
++ * Inputs:
++ * device Device being failed over.
++ * lun LUN being failed over.
++ * newpath path that was failed over too.
++ * oldpath path that was failed over from.
++ *
++ * Return:
++ * Local function status code.
++ *
++ * Context:
++ * Kernel context.
++ */
++/* ARGSUSED */
++static uint32_t
++qla2x00_send_failover_notify(mp_device_t *dp,
++ uint8_t lun, mp_path_t *newpath, mp_path_t *oldpath)
++{
++ fc_lun_t *old_lp, *new_lp;
++ uint32_t status = QLA2X00_SUCCESS;
++
++ ENTER("qla2x00_send_failover_notify");
++
++ old_lp = qla2x00_find_matching_lun(lun, oldpath);
++ new_lp = qla2x00_find_matching_lun(lun, newpath);
++
++ /*
++ * If the target is the same target, but a new HBA has been selected,
++ * send a third party logout if required.
++ */
++ if ((qla_fo_params.FailoverNotifyType &
++ FO_NOTIFY_TYPE_LOGOUT_OR_LUN_RESET ||
++ qla_fo_params.FailoverNotifyType &
++ FO_NOTIFY_TYPE_LOGOUT_OR_CDB) &&
++ qla2x00_is_portname_equal(
++ oldpath->portname, newpath->portname)) {
++
++ status = qla2x00_send_fo_notification(old_lp, new_lp);
++ if (status == QLA2X00_SUCCESS) {
++ /* EMPTY */
++ DEBUG4(printk("%s: Logout succeded\n",
++ __func__);)
++ } else {
++ /* EMPTY */
++ DEBUG4(printk("%s: Logout Failed\n",
++ __func__);)
++ }
++ } else if ((qla_fo_params.FailoverNotifyType &
++ FO_NOTIFY_TYPE_LUN_RESET) ||
++ (qla_fo_params.FailoverNotifyType &
++ FO_NOTIFY_TYPE_LOGOUT_OR_LUN_RESET)) {
++
++ /*
++ * If desired, send a LUN reset as the
++ * failover notification type.
++ */
++ if (newpath->lun_data.data[lun] & LUN_DATA_ENABLED) {
++ status = qla2x00_send_fo_notification(old_lp, new_lp);
++ if (status == QLA2X00_SUCCESS) {
++ /* EMPTY */
++ DEBUG4(printk("%s: LUN reset succeeded.\n",
++ __func__);)
++ } else {
++ /* EMPTY */
++ DEBUG4(printk("%s: Failed reset LUN.\n",
++ __func__);)
++ }
++ }
++
++ } else if (qla_fo_params.FailoverNotifyType == FO_NOTIFY_TYPE_CDB ||
++ qla_fo_params.FailoverNotifyType ==
++ FO_NOTIFY_TYPE_LOGOUT_OR_CDB) {
++
++ if (newpath->lun_data.data[lun] & LUN_DATA_ENABLED) {
++ status = qla2x00_send_fo_notification(old_lp, new_lp);
++ if (status == QLA2X00_SUCCESS) {
++ /* EMPTY */
++ DEBUG4(printk("%s: Send CDB succeeded.\n",
++ __func__);)
++ } else {
++ /* EMPTY */
++ DEBUG4(printk("%s: Send CDB Error "
++ "lun=(%d).\n", __func__, lun);)
++ }
++ }
++ } else {
++ /* EMPTY */
++ DEBUG4(printk("%s: failover disabled or no notify routine "
++ "defined.\n", __func__);)
++ }
++
++ return status;
++}
++
++/*
++ * qla2x00_select_next_path
++ * A problem has been detected with the current path for this
++ * device. Try to select the next available path as the current
++ * path for this device. If there are no more paths, the same
++ * path will still be selected.
++ *
++ * Inputs:
++ * dp pointer of device structure.
++ * lun LUN to failover.
++ *
++ * Return Value:
++ * new path or same path
++ *
++ * Context:
++ * Kernel context.
++ */
++static mp_path_t *
++qla2x00_select_next_path(mp_host_t *host, mp_device_t *dp, uint8_t lun)
++{
++ mp_path_t *path = NULL;
++ mp_path_list_t *path_list;
++ mp_path_t *orig_path;
++ int id;
++ uint32_t status;
++ mp_host_t *new_host;
++
++ ENTER("qla2x00_select_next_path:");
++
++ path_list = dp->path_list;
++ if (path_list == NULL)
++ return NULL;
++
++ /* Get current path */
++ id = path_list->current_path[lun];
++
++ /* Get path for current path id */
++ if ((orig_path = qla2x00_find_path_by_id(dp, id)) != NULL) {
++
++ /* select next path */
++ path = orig_path->next;
++ new_host = path->host;
++
++ /* FIXME may need to check for HBA being reset */
++ DEBUG3(printk("%s: orig path = %p new path = %p "
++ "curr idx = %d, new idx = %d\n",
++ __func__, orig_path, path, orig_path->id, path->id);)
++ DEBUG3(printk(" FAILOVER: device nodename: "
++ "%02x%02x%02x%02x%02x%02x%02x%02x\n",
++ dp->nodename[0], dp->nodename[1],
++ dp->nodename[2], dp->nodename[3],
++ dp->nodename[4], dp->nodename[5],
++ dp->nodename[6], dp->nodename[7]);)
++ DEBUG3(printk(" Original - host nodename: "
++ "%02x%02x%02x%02x%02x%02x%02x%02x\n",
++ orig_path->host->nodename[0],
++ orig_path->host->nodename[1],
++ orig_path->host->nodename[2],
++ orig_path->host->nodename[3],
++ orig_path->host->nodename[4],
++ orig_path->host->nodename[5],
++ orig_path->host->nodename[6],
++ orig_path->host->nodename[7]);)
++ DEBUG3(printk(" portname: "
++ "%02x%02x%02x%02x%02x%02x%02x%02x\n",
++ orig_path->port->port_name[0],
++ orig_path->port->port_name[1],
++ orig_path->port->port_name[2],
++ orig_path->port->port_name[3],
++ orig_path->port->port_name[4],
++ orig_path->port->port_name[5],
++ orig_path->port->port_name[6],
++ orig_path->port->port_name[7]);)
++ DEBUG3(printk(" New - host nodename: "
++ "%02x%02x%02x%02x%02x%02x%02x%02x\n",
++ new_host->nodename[0], new_host->nodename[1],
++ new_host->nodename[2], new_host->nodename[3],
++ new_host->nodename[4], new_host->nodename[5],
++ new_host->nodename[6], new_host->nodename[7]);)
++ DEBUG3(printk(" portname: "
++ "%02x%02x%02x%02x%02x%02x%02x%02x\n",
++ path->port->port_name[0],
++ path->port->port_name[1],
++ path->port->port_name[2],
++ path->port->port_name[3],
++ path->port->port_name[4],
++ path->port->port_name[5],
++ path->port->port_name[6],
++ path->port->port_name[7]);)
++
++ path_list->current_path[lun] = path->id;
++
++ /* If we selected a new path, do failover notification. */
++ if (path != orig_path) {
++ status = qla2x00_send_failover_notify(
++ dp, lun, path, orig_path);
++
++ /*
++ * Currently we ignore the returned status from
++ * the notify. however, if failover notify fails
++ */
++ }
++ }
++
++ LEAVE("qla2x00_select_next_path:");
++
++ return path ;
++}
++
++
++
++/*
++ * qla2x00_update_mp_host
++ * Update the multipath control information from the port
++ * database for that adapter.
++ *
++ * Input:
++ * host Adapter to update. Devices that are new are
++ * known to be attached to this adapter.
++ *
++ * Returns:
++ * TRUE if updated successfully; FALSE if error.
++ *
++ */
++static uint8_t
++qla2x00_update_mp_host(mp_host_t *host)
++{
++ uint8_t success = TRUE;
++ uint16_t dev_id;
++ struct list_head *fcpl;
++ fc_port_t *fcport;
++ scsi_qla_host_t *ha = host->ha;
++
++ ENTER("qla2x00_update_mp_host");
++
++ /*
++ * We make sure each port is attached to some virtual device.
++ */
++ dev_id = 0;
++ fcport = NULL;
++ list_for_each(fcpl, &ha->fcports) {
++ fcport = list_entry(fcpl, fc_port_t, list);
++
++ success |= qla2x00_update_mp_device(host, fcport, dev_id);
++
++ dev_id++;
++ }
++ if (success) {
++ DEBUG2(printk("%s: Exit OK\n", __func__);)
++ qla2x00_map_os_targets(host);
++ } else {
++ /* EMPTY */
++ DEBUG2(printk("%s: Exit FAILED\n", __func__);)
++ }
++
++ LEAVE("qla2x00_update_mp_host");
++
++ return success;
++}
++
++/*
++ * qla2x00_update_mp_device
++ * Update the multipath control information from the port
++ * database for that adapter.
++ *
++ * Inputs:
++ * host Host adapter structure
++ * port Device to add to the path tree.
++ * dev_id Device id
++ *
++ * Synchronization:
++ * The Adapter Lock should have already been acquired
++ * before calling this routine.
++ *
++ * Return
++ * TRUE if updated successfully; FALSE if error.
++ *
++ */
++uint8_t
++qla2x00_update_mp_device(mp_host_t *host, fc_port_t *port, uint16_t dev_id)
++{
++ uint8_t success = TRUE;
++ mp_device_t *dp;
++ mp_path_t *path;
++
++ ENTER("qla2x00_update_mp_device");
++
++ DEBUG3(printk("%s: host =%p, port =%p, id = %d\n",
++ __func__, host, port, dev_id);)
++
++ if (!qla2x00_is_ww_name_zero(port->port_name)) {
++
++ /*
++ * Search for a device with a matching node name,
++ * or create one.
++ */
++ dp = qla2x00_find_or_allocate_mp_dev(host, dev_id, port);
++
++ /*
++ * We either have found or created a path list. Find this
++ * host's path in the path list or allocate a new one
++ * and add it to the list.
++ */
++ if (dp == NULL) {
++ DEBUG4(printk("%s: Device NOT found or created at.\n",
++ __func__);)
++ return FALSE;
++ }
++
++ /*
++ * Find the path in the current path list, or allocate
++ * a new one and put it in the list if it doesn't exist.
++ * Note that we do NOT set bSuccess to FALSE in the case
++ * of failure here. We must tolerate the situation where
++ * the customer has more paths to a device than he can
++ * get into a PATH_LIST.
++ */
++
++ path = qla2x00_find_or_allocate_path(host, dp, dev_id, port);
++ if (path == NULL) {
++ DEBUG4(printk("%s:Path NOT found or created.\n",
++ __func__);)
++ return FALSE;
++ }
++
++ /* Set the PATH flag to match the device flag
++ * of whether this device needs a relogin. If any
++ * device needs relogin, set the relogin countdown.
++ */
++ if (port->flags & FC_CONFIG)
++ path->config = TRUE;
++
++ if (atomic_read(&port->state) != FC_ONLINE) {
++ path->relogin = TRUE;
++ if (host->relogin_countdown == 0)
++ host->relogin_countdown = 30;
++ } else {
++ path->relogin = FALSE;
++ }
++
++ } else {
++ /* EMPTY */
++ DEBUG4(printk("%s: Failed portname empty.\n",
++ __func__);)
++ }
++
++ LEAVE("qla2x00_update_mp_device");
++
++ return success;
++}
++
++/*
++ * qla2x00_update_mp_tree
++ * Get port information from each adapter, and build or rebuild
++ * the multipath control tree from this data. This is called
++ * from init and during port database notification.
++ *
++ * Input:
++ * None
++ *
++ * Return:
++ * Local function return code.
++ *
++ */
++static uint32_t
++qla2x00_update_mp_tree(void)
++{
++ mp_host_t *host;
++ uint32_t rval = QLA2X00_SUCCESS;
++
++ ENTER("qla2x00_update_mp_tree:");
++
++ /* Loop through each adapter and see what needs updating. */
++ for (host = mp_hosts_base; (host) ; host = host->next) {
++
++ DEBUG4(printk("%s: hba(%d) flags (%x)\n",
++ __func__, host->instance, host->flags);)
++ /* Clear the countdown; it may be reset in the update. */
++ host->relogin_countdown = 0;
++
++ /* Override the NEEDS_UPDATE flag if disabled. */
++ if (host->flags & MP_HOST_FLAG_DISABLE ||
++ list_empty(host->fcports))
++ host->flags &= ~MP_HOST_FLAG_NEEDS_UPDATE;
++
++ if (host->flags & MP_HOST_FLAG_NEEDS_UPDATE) {
++
++ /*
++ * Perform the actual updates. If this succeeds, clear
++ * the flag that an update is needed, and failback all
++ * devices that are visible on this path to use this
++ * path. If the update fails, leave set the flag that
++ * an update is needed, and it will be picked back up
++ * during the next timer routine.
++ */
++ if (qla2x00_update_mp_host(host)) {
++ host->flags &= ~MP_HOST_FLAG_NEEDS_UPDATE;
++
++ qla2x00_failback_luns(host);
++ } else
++ rval = QLA2X00_FUNCTION_FAILED;
++
++ }
++
++ }
++
++ if (rval != QLA2X00_SUCCESS) {
++ /* EMPTY */
++ DEBUG4(printk("%s: Exit FAILED.\n", __func__);)
++
++ } else {
++ /* EMPTY */
++ DEBUG4(printk("%s: Exit OK.\n", __func__);)
++ }
++ return rval;
++}
++
++
++
++/*
++ * qla2x00_find_matching_lun
++ * Find the lun in the path that matches the
++ * specified lun number.
++ *
++ * Input:
++ * lun = lun number
++ * newpath = path to search for lun
++ *
++ * Returns:
++ * NULL or pointer to lun
++ *
++ * Context:
++ * Kernel context.
++ * (dg)
++ */
++static fc_lun_t *
++qla2x00_find_matching_lun(uint8_t lun, mp_path_t *newpath)
++{
++ fc_lun_t *lp = NULL; /* lun ptr */
++ struct list_head *fcll;
++ fc_lun_t *nlp; /* Next lun ptr */
++ fc_port_t *fcport; /* port ptr */
++
++ if ((fcport = newpath->port) != NULL) {
++ list_for_each(fcll, &fcport->fcluns) {
++ nlp = list_entry(fcll, fc_lun_t, list);
++
++ if (lun == nlp->lun) {
++ lp = nlp;
++ break;
++ }
++ }
++ }
++ return lp;
++}
++
++/*
++ * qla2x00_find_path_by_name
++ * Find the path specified portname from the pathlist
++ *
++ * Input:
++ * host = host adapter pointer.
++ * pathlist = multi-path path list
++ * portname portname to search for
++ *
++ * Returns:
++ * pointer to the path or NULL
++ *
++ * Context:
++ * Kernel context.
++ */
++mp_path_t *
++qla2x00_find_path_by_name(mp_host_t *host, mp_path_list_t *plp,
++ uint8_t *portname)
++{
++ mp_path_t *path = NULL; /* match if not NULL */
++ mp_path_t *tmp_path;
++ int cnt;
++
++ if ((tmp_path = plp->last) != NULL) {
++ for (cnt = 0; cnt < plp->path_cnt; cnt++) {
++ if (tmp_path->host == host &&
++ qla2x00_is_portname_equal(
++ tmp_path->portname, portname)) {
++
++ path = tmp_path;
++ break;
++ }
++ tmp_path = tmp_path->next;
++ }
++ }
++ return path ;
++}
++
++/*
++ * qla2x00_find_path_by_id
++ * Find the path for the specified path id.
++ *
++ * Input:
++ * dp multi-path device
++ * id path id
++ *
++ * Returns:
++ * pointer to the path or NULL
++ *
++ * Context:
++ * Kernel context.
++ */
++static mp_path_t *
++qla2x00_find_path_by_id(mp_device_t *dp, uint8_t id)
++{
++ mp_path_t *path = NULL;
++ mp_path_t *tmp_path;
++ mp_path_list_t *path_list;
++ int cnt;
++
++ path_list = dp->path_list;
++ tmp_path = path_list->last;
++ for (cnt = 0; (tmp_path) && cnt < path_list->path_cnt; cnt++) {
++ if (tmp_path->id == id) {
++ path = tmp_path;
++ break;
++ }
++ tmp_path = tmp_path->next;
++ }
++ return path ;
++}
++
++/*
++ * qla2x00_find_mp_dev_by_id
++ * Find the mp_dev for the specified target id.
++ *
++ * Input:
++ * host = host adapter pointer.
++ * tgt = Target id
++ *
++ * Returns:
++ *
++ * Context:
++ * Kernel context.
++ */
++static mp_device_t *
++qla2x00_find_mp_dev_by_id(mp_host_t *host, uint8_t id )
++{
++ if (id < MAX_MP_DEVICES)
++ return host->mp_devs[id];
++ else
++ return NULL;
++}
++
++/*
++ * qla2x00_find_mp_dev_by_name
++ * Find the mp_dev for the specified target name.
++ *
++ * Input:
++ * host = host adapter pointer.
++ * name = Target name
++ *
++ * Returns:
++ *
++ * Context:
++ * Kernel context.
++ */
++static mp_device_t *
++qla2x00_find_mp_dev_by_name(mp_host_t *host, uint8_t *name )
++{
++ int id;
++ mp_device_t *dp;
++
++ ENTER("qla2x00_find_mp_dev_by_name");
++
++ for (id= 0; id < MAX_MP_DEVICES; id++) {
++ if ((dp = host->mp_devs[id] ) == NULL)
++ continue;
++
++ if (qla2x00_is_nodename_equal(dp->nodename, name)) {
++ DEBUG3(printk("%s: Found matching device @ index %d:\n",
++ __func__, id);)
++ return dp;
++ }
++ }
++
++ LEAVE("qla2x00_find_mp_dev_by_name");
++
++ return NULL;
++}
++
++/*
++ * qla2x00_get_visible_path
++ * Find the the visible path for the specified device.
++ *
++ * Input:
++ * dp = device pointer
++ *
++ * Returns:
++ * NULL or path
++ *
++ * Context:
++ * Kernel context.
++ */
++static mp_path_t *
++qla2x00_get_visible_path(mp_device_t *dp)
++{
++ uint16_t id;
++ mp_path_list_t *path_list;
++ mp_path_t *path;
++
++ path_list = dp->path_list;
++ /* if we don't have a visible path skip it */
++ if ((id = path_list->visible) == PATH_INDEX_INVALID) {
++ return NULL;
++ }
++
++ if ((path = qla2x00_find_path_by_id(dp,id))== NULL)
++ return NULL;
++
++ return path ;
++}
++
++/*
++ * qla2x00_map_os_targets
++ * Allocate the luns and setup the OS target.
++ *
++ * Input:
++ * host = host adapter pointer.
++ *
++ * Returns:
++ * None
++ *
++ * Context:
++ * Kernel context.
++ */
++static void
++qla2x00_map_os_targets(mp_host_t *host)
++{
++ scsi_qla_host_t *ha = host->ha;
++ mp_path_t *path;
++ mp_device_t *dp;
++ os_tgt_t *tgt;
++ int t;
++
++ ENTER("qla2x00_map_os_targets ");
++
++ for (t = 0; t < MAX_TARGETS; t++ ) {
++ dp = host->mp_devs[t];
++ if (dp != NULL) {
++ DEBUG3(printk("%s: (%d) found a dp=%p, "
++ "host=%p, ha=%p\n",
++ __func__, t, dp, host,ha);)
++
++ if ((path = qla2x00_get_visible_path(dp)) == NULL) {
++ printk(KERN_INFO
++ "qla_cfg(%d): No visible path "
++ "for target %d, dp = %p\n",
++ host->instance, t, dp);
++ continue;
++ }
++
++ /* if not the visible path skip it */
++ if (path->host == host) {
++ if (TGT_Q(ha, t) == NULL) {
++ tgt = qla2x00_tgt_alloc(ha, t);
++ memcpy(tgt->node_name,
++ dp->nodename,
++ WWN_SIZE);
++ tgt->vis_port = path->port;
++ }
++ DEBUG3(printk("%s(%ld): host=%d, "
++ "device= %p has VISIBLE "
++ "path=%p, path id=%d\n",
++ __func__, ha->host_no,
++ host->instance,
++ dp, path, path->id);)
++ } else {
++ /* EMPTY */
++ DEBUG3(printk("%s(%ld): host=%d, "
++ "device= %p has HIDDEN "
++ "path=%p, path id=%d\n",
++ __func__, ha->host_no,
++ host->instance, dp, path,path->id);)
++ }
++ qla2x00_map_os_luns(host, dp, t);
++ } else {
++ if ((tgt= TGT_Q(ha,t)) != NULL) {
++ qla2x00_tgt_free(ha,t);
++ }
++ }
++ }
++
++ LEAVE("qla2x00_map_os_targets ");
++}
++
++/*
++ * qla2x00_map_os_luns
++ * Allocate the luns for the OS target.
++ *
++ * Input:
++ * dp = pointer to device
++ * t = OS target number.
++ *
++ * Returns:
++ * None
++ *
++ * Context:
++ * Kernel context.
++ */
++static void
++qla2x00_map_os_luns(mp_host_t *host, mp_device_t *dp, uint16_t t)
++{
++ uint16_t lun;
++ int i;
++
++ for (lun = 0; lun < MAX_LUNS; lun++ ) {
++ if ( qla2x00_map_a_oslun(host, dp, t, lun) &&
++ (host->flags & MP_HOST_FLAG_LUN_FO_ENABLED) ){
++ /* find a path for us to use */
++ for ( i = 0; i < dp->path_list->path_cnt; i++ ){
++ qla2x00_select_next_path(host, dp, lun);
++ if( !qla2x00_map_a_oslun(host, dp, t, lun))
++ break;
++ }
++ }
++ }
++}
++
++/*
++ * qla2x00_map_a_osluns
++ * Map the OS lun to the current path
++ *
++ * Input:
++ * host = pointer to host
++ * dp = pointer to device
++ * lun = OS lun number.
++ *
++ * Returns:
++ * None
++ *
++ * Context:
++ * Kernel context.
++ */
++
++static uint8_t
++qla2x00_map_a_oslun(mp_host_t *host, mp_device_t *dp, uint16_t t, uint16_t lun)
++{
++ fc_port_t *fcport;
++ fc_lun_t *fclun;
++ os_lun_t *lq;
++ uint16_t id;
++ mp_path_t *path, *vis_path;
++ mp_host_t *vis_host;
++ uint8_t status = FALSE;
++
++ if ((id = dp->path_list->current_path[lun]) != PATH_INDEX_INVALID) {
++ path = qla2x00_find_path_by_id(dp,id);
++ if (path) {
++ fcport = path->port;
++ if (fcport) {
++ /* dg 04/26/02 */
++ fcport->cur_path = id;
++ fclun = qla2x00_find_matching_lun(lun,path);
++
++ /* Always map all luns if they are enabled */
++ if (fclun &&
++ (path->lun_data.data[lun] &
++ LUN_DATA_ENABLED) ) {
++
++ /*
++ * Mapped lun on the visible path
++ */
++ if ((vis_path =
++ qla2x00_get_visible_path(dp)) ==
++ NULL ) {
++
++ printk(KERN_INFO
++ "qla2x00(%d): No visible "
++ "path for target %d, "
++ "dp = %p\n",
++ host->instance,
++ t, dp);
++
++ return FALSE;
++ }
++
++ vis_host = vis_path->host;
++
++ /* ra 11/30/01 */
++ /*
++ * Always alloc LUN 0 so kernel
++ * will scan past LUN 0.
++ */
++ if (lun != 0 &&
++ (EXT_IS_LUN_BIT_SET(
++ &(fcport->lun_mask), lun))) {
++
++ /* mask this LUN */
++ return FALSE;
++ }
++
++ if ((lq = qla2x00_lun_alloc(
++ vis_host->ha,
++ t, lun)) != NULL) {
++
++ lq->fclun = fclun;
++ }
++ }
++ }
++ else
++ status = TRUE;
++ }
++ }
++ return status;
++}
++
++/*
++ * qla2x00_is_ww_name_zero
++ *
++ * Input:
++ * ww_name = Pointer to WW name to check
++ *
++ * Returns:
++ * TRUE if name is 0 else FALSE
++ *
++ * Context:
++ * Kernel context.
++ */
++static uint8_t
++qla2x00_is_ww_name_zero(uint8_t *nn)
++{
++ int cnt;
++
++ /* Check for zero node name */
++ for (cnt = 0; cnt < WWN_SIZE ; cnt++, nn++) {
++ if (*nn != 0)
++ break;
++ }
++ /* if zero return TRUE */
++ if (cnt == WWN_SIZE)
++ return TRUE;
++ else
++ return FALSE;
++}
++
++/*
++ * qla2x00_add_path
++ * Add a path to the pathlist
++ *
++ * Input:
++ * pathlist -- path list of paths
++ * path -- path to be added to list
++ *
++ * Returns:
++ * None
++ *
++ * Context:
++ * Kernel context.
++ */
++static void
++qla2x00_add_path( mp_path_list_t *pathlist, mp_path_t *path )
++{
++ mp_path_t *last = pathlist->last;
++
++ ENTER("qla2x00_add_path");
++
++ DEBUG3(printk("%s: pathlist =%p, path =%p, cnt = %d\n",
++ __func__, pathlist, path, pathlist->path_cnt);)
++ if (last == NULL) {
++ last = path;
++ } else {
++ path->next = last->next;
++ }
++
++ last->next = path;
++ pathlist->last = path;
++ pathlist->path_cnt++;
++
++ LEAVE("qla2x00_add_path");
++}
++
++
++/*
++ * qla2x00_is_portname_in_device
++ * Search for the specified "portname" in the device list.
++ *
++ * Input:
++ * dp = device pointer
++ * portname = portname to searched for in device
++ *
++ * Returns:
++ * qla2x00 local function return status code.
++ *
++ * Context:
++ * Kernel context.
++ */
++uint8_t
++qla2x00_is_portname_in_device(mp_device_t *dp, uint8_t *portname)
++{
++ int idx;
++
++ for (idx = 0; idx < MAX_PATHS_PER_DEVICE; idx++) {
++ if (memcmp(&dp->portnames[idx][0], portname, WWN_SIZE) == 0)
++ return TRUE;
++ }
++ return FALSE;
++}
++
++
++/*
++ * qla2x00_set_lun_data_from_bitmask
++ * Set or clear the LUN_DATA_ENABLED bits in the LUN_DATA from
++ * a LUN bitmask provided from the miniport driver.
++ *
++ * Inputs:
++ * lun_data = Extended LUN_DATA buffer to set.
++ * lun_mask = Pointer to lun bit mask union.
++ *
++ * Return Value: none.
++ */
++void
++qla2x00_set_lun_data_from_bitmask(mp_lun_data_t *lun_data,
++ lun_bit_mask_t *lun_mask)
++{
++ int16_t lun;
++
++ ENTER("qla2x00_set_lun_data_from_bitmask");
++
++ for (lun = 0; lun < MAX_LUNS; lun++) {
++ /* our bit mask is inverted */
++ if (!(EXT_IS_LUN_BIT_SET(lun_mask,lun)))
++ lun_data->data[lun] |= LUN_DATA_ENABLED;
++ else
++ lun_data->data[lun] &= ~LUN_DATA_ENABLED;
++
++ DEBUG5(printk("%s: lun data[%d] = 0x%x\n",
++ __func__, lun, lun_data->data[lun]);)
++ }
++
++ LEAVE("qla2x00_set_lun_data_from_bitmask");
++
++ return;
++}
++
++static void
++qla2x00_failback_single_lun(mp_device_t *dp, uint8_t lun, uint8_t new)
++{
++ mp_path_list_t *pathlist;
++ mp_path_t *new_path, *old_path;
++ uint8_t old;
++ mp_host_t *host;
++ os_lun_t *lq;
++ mp_path_t *vis_path;
++ mp_host_t *vis_host;
++
++ /* Failback and update statistics. */
++ if ((pathlist = dp->path_list) == NULL)
++ return;
++
++ old = pathlist->current_path[lun];
++ pathlist->current_path[lun] = new;
++
++ if ((new_path = qla2x00_find_path_by_id(dp, new)) == NULL)
++ return;
++ if ((old_path = qla2x00_find_path_by_id(dp, old)) == NULL)
++ return;
++
++ /* An fclun should exist for the failbacked lun */
++ if (qla2x00_find_matching_lun(lun, new_path) == NULL)
++ return;
++ if (qla2x00_find_matching_lun(lun, old_path) == NULL)
++ return;
++
++ /* Log to console and to event log. */
++ printk(KERN_INFO
++ "qla2x00: FAILBACK device %d -> "
++ "%02x%02x%02x%02x%02x%02x%02x%02x LUN %02x\n",
++ dp->dev_id,
++ dp->nodename[0], dp->nodename[1],
++ dp->nodename[2], dp->nodename[3],
++ dp->nodename[4], dp->nodename[5],
++ dp->nodename[6], dp->nodename[7],
++ lun);
++
++ printk(KERN_INFO
++ "qla2x00: FROM HBA %d to HBA %d \n",
++ old_path->host->instance,
++ new_path->host->instance);
++
++
++ /* Send a failover notification. */
++#if 0
++ qla2x00_send_failover_notify(dp, lun, new_path, old_path);
++#endif
++
++ host = new_path->host;
++
++ /* remap the lun */
++ qla2x00_map_a_oslun(host, dp, dp->dev_id, lun);
++
++ /* 7/16
++ * Reset counts on the visible path
++ */
++ if ((vis_path = qla2x00_get_visible_path(dp)) == NULL) {
++ printk(KERN_INFO
++ "qla2x00(%d): No visible path for "
++ "target %d, dp = %p\n",
++ host->instance,
++ dp->dev_id, dp);
++ return;
++ }
++
++ vis_host = vis_path->host;
++ if ((lq = qla2x00_lun_alloc(vis_host->ha, dp->dev_id, lun)) != NULL) {
++ qla2x00_delay_lun(vis_host->ha, lq, recoveryTime);
++ qla2x00_flush_failover_q(vis_host->ha, lq);
++ qla2x00_reset_lun_fo_counts(vis_host->ha, lq);
++ }
++}
++
++/*
++* qla2x00_failback_luns
++* This routine looks through the devices on an adapter, and
++* for each device that has this adapter as the visible path,
++* it forces that path to be the current path. This allows us
++* to keep some semblance of static load balancing even after
++* an adapter goes away and comes back.
++*
++* Arguments:
++* host Adapter that has just come back online.
++*
++* Return:
++* None.
++*/
++static void
++qla2x00_failback_luns( mp_host_t *host)
++{
++ uint16_t dev_no;
++ uint8_t l;
++ uint16_t lun;
++ int i;
++ mp_device_t *dp;
++ mp_path_list_t *path_list;
++ mp_path_t *path;
++ fc_lun_t *new_fp;
++
++ ENTER("qla2x00_failback_luns");
++
++ for (dev_no = 0; dev_no < MAX_MP_DEVICES; dev_no++) {
++ dp = host->mp_devs[dev_no];
++
++ if (dp == NULL)
++ continue;
++
++ path_list = dp->path_list;
++ for (path = path_list->last, i= 0;
++ i < path_list->path_cnt;
++ i++, path = path->next) {
++
++ if (path->host != host )
++ continue;
++
++ if (path->port == NULL)
++ continue;
++
++ if (atomic_read(&path->port->state) == FC_DEVICE_DEAD)
++ continue;
++
++ /*
++ * Failback all the paths for this host,
++ * the luns could be preferred across all paths
++ */
++ DEBUG2(printk("%s(%d): Lun Data for device %p, "
++ "id=%d, path id=%d\n",
++ __func__, host->instance, dp, dp->dev_id,
++ path->id);)
++ DEBUG4(qla2x00_dump_buffer(
++ (char *)&path->lun_data.data[0], 64);)
++ DEBUG4(printk("%s(%d): Perferrred Path data:\n",
++ __func__, host->instance);)
++ DEBUG4(qla2x00_dump_buffer(
++ (char *)&path_list->current_path[0], 64);)
++
++ for (lun = 0; lun < MAX_LUNS_PER_DEVICE; lun++) {
++ l = (uint8_t)(lun & 0xFF);
++
++ /*
++ * if this is the preferred lun and not
++ * the current path then failback lun.
++ */
++ DEBUG4(printk("%s: target=%d, cur path id =%d, "
++ "lun data[%d] = %d)\n",
++ __func__, dp->dev_id, path->id,
++ lun, path->lun_data.data[lun]);)
++
++ if ((path->lun_data.data[l] &
++ LUN_DATA_PREFERRED_PATH) &&
++ /* !path->relogin && */
++ path_list->current_path[l] !=
++ path->id) {
++ /* No point in failing back a
++ disconnected lun */
++ new_fp = qla2x00_find_matching_lun(
++ l, path);
++
++ if (new_fp == NULL)
++ continue;
++ if (new_fp->flags & FC_DISCON_LUN)
++ continue;
++
++ qla2x00_failback_single_lun(
++ dp, l, path->id);
++ }
++ }
++ }
++
++ }
++
++ LEAVE("qla2x00_failback_luns");
++
++ return;
++}
++
++/*
++ * qla2x00_setup_new_path
++ * Checks the path against the existing paths to see if there
++ * are any incompatibilities. It then checks and sets up the
++ * current path indices.
++ *
++ * Inputs:
++ * dp = pointer to device
++ * path = new path
++ *
++ * Returns:
++ * None
++ */
++static void
++qla2x00_setup_new_path( mp_device_t *dp, mp_path_t *path)
++{
++ mp_path_list_t *path_list = dp->path_list;
++ mp_path_t *tmp_path, *first_path;
++ mp_host_t *first_host;
++ mp_host_t *tmp_host;
++
++ uint16_t lun;
++ uint8_t l;
++ int i;
++
++ ENTER("qla2x00_setup_new_path");
++
++ /* If this is a visible path, and there is not already a
++ * visible path, save it as the visible path. If there
++ * is already a visible path, log an error and make this
++ * path invisible.
++ */
++ if (!(path->mp_byte & (MP_MASK_HIDDEN | MP_MASK_UNCONFIGURED))) {
++
++ /* No known visible path */
++ if (path_list->visible == PATH_INDEX_INVALID) {
++ DEBUG3(printk("%s: No know visible path - make this "
++ "path visible\n",
++ __func__);)
++
++ path_list->visible = path->id;
++ path->mp_byte &= ~MP_MASK_HIDDEN;
++ } else {
++ DEBUG3(printk("%s: Second visible path found- make "
++ "this one hidden\n",
++ __func__);)
++
++ path->mp_byte |= MP_MASK_HIDDEN;
++ }
++ }
++
++ /*
++ * If this is not the first path added, and the setting for
++ * MaxLunsPerTarget does not match that of the first path
++ * then disable qla_cfg for all adapters.
++ */
++ first_path = qla2x00_find_path_by_id(dp, 0);
++
++ if (first_path != NULL) {
++ first_host = first_path->host;
++ if ((path->id != 0) &&
++ (first_host->MaxLunsPerTarget !=
++ path->host->MaxLunsPerTarget)) {
++
++ for (tmp_path = path_list->last, i = 0;
++ (tmp_path) && i <= path->id; i++) {
++
++ tmp_host = tmp_path->host;
++ if (!(tmp_host->flags &
++ MP_HOST_FLAG_DISABLE)) {
++
++ DEBUG4(printk("%s: 2nd visible "
++ "path (%p)\n",
++ __func__, tmp_host);)
++
++ tmp_host->flags |= MP_HOST_FLAG_DISABLE;
++ }
++ }
++ }
++ }
++
++ /*
++ * For each LUN, evaluate whether the new path that is added
++ * is better than the existing path. If it is, make it the
++ * current path for the LUN.
++ */
++ for (lun = 0; lun < MAX_LUNS_PER_DEVICE; lun++) {
++ l = (uint8_t)(lun & 0xFF);
++
++ /* If this is the first path added, it is the only
++ * available path, so make it the current path.
++ */
++
++ DEBUG4(printk("%s: lun_data 0x%x, LUN %d\n",
++ __func__, path->lun_data.data[l], lun);)
++
++ if (first_path == path) {
++ path_list->current_path[l] = 0;
++ path->lun_data.data[l] |= LUN_DATA_PREFERRED_PATH;
++ } else if (path->lun_data.data[l] & LUN_DATA_PREFERRED_PATH) {
++ /*
++ * If this is not the first path added, if this is
++ * the preferred path, make it the current path.
++ */
++ path_list->current_path[l] = path->id;
++ }
++ }
++
++ LEAVE("qla2x00_setup_new_path");
++
++ return;
++}
++
++/*
++ * qla2x00_cfg_mem_free
++ * Free all configuration structures.
++ *
++ * Input:
++ * ha = adapter state pointer.
++ *
++ * Context:
++ * Kernel context.
++ */
++void
++qla2x00_cfg_mem_free(scsi_qla_host_t *ha)
++{
++ mp_device_t *dp;
++ mp_path_list_t *path_list;
++ mp_path_t *tmp_path, *path;
++ mp_host_t *host, *temp;
++ int id, cnt;
++
++ if ((host = qla2x00_cfg_find_host(ha)) != NULL) {
++ if( mp_num_hosts == 0 )
++ return;
++
++ for (id= 0; id < MAX_MP_DEVICES; id++) {
++ if ((dp = host->mp_devs[id]) == NULL)
++ continue;
++ if ((path_list = dp->path_list) == NULL)
++ continue;
++ if ((tmp_path = path_list->last) == NULL)
++ continue;
++ for (cnt = 0; cnt < path_list->path_cnt; cnt++) {
++ path = tmp_path;
++ tmp_path = tmp_path->next;
++ DEBUG(printk(KERN_INFO
++ "host%d - Removing path[%d] "
++ "= %p\n",
++ host->instance,
++ cnt, path);)
++ KMEM_FREE(path,sizeof(mp_path_t));
++ }
++ KMEM_FREE(path_list, sizeof(mp_path_list_t));
++ host->mp_devs[id] = NULL;
++ /* remove dp from other hosts */
++ for (temp = mp_hosts_base; (temp); temp = temp->next) {
++ if (temp->mp_devs[id] == dp) {
++ DEBUG(printk(KERN_INFO
++ "host%d - Removing host[%d] = "
++ "%p\n",
++ host->instance,
++ temp->instance,temp);)
++ temp->mp_devs[id] = NULL;
++ }
++ }
++ KMEM_FREE(dp, sizeof(mp_device_t));
++ }
++
++ /* remove this host from host list */
++ temp = mp_hosts_base;
++ if (temp != NULL) {
++ /* Remove from top of queue */
++ if (temp == host) {
++ mp_hosts_base = host->next;
++ } else {
++ /*
++ * Remove from middle of queue
++ * or bottom of queue
++ */
++ for (temp = mp_hosts_base;
++ temp != NULL;
++ temp = temp->next) {
++
++ if (temp->next == host) {
++ temp->next = host->next;
++ break;
++ }
++ }
++ }
++ }
++ KMEM_FREE(host, sizeof(mp_host_t));
++ mp_num_hosts--;
++ }
++}
+--- /dev/null Thu Apr 11 07:25:15 2002
++++ linux-2.5.73-n9560/drivers/scsi/qla2xxx/qla_cfg.h Thu Jul 3 15:34:42 2003
+@@ -0,0 +1,181 @@
++/******************************************************************************
++ * QLOGIC LINUX SOFTWARE
++ *
++ * QLogic ISP2x00 device driver for Linux 2.5.x
++ * Copyright (C) 2003 Qlogic Corporation
++ * (www.qlogic.com)
++ *
++ * This program is free software; you can redistribute it and/or modify it
++ * under the terms of the GNU General Public License as published by the
++ * Free Software Foundation; either version 2, or (at your option) any
++ * later version.
++ *
++ * This program is distributed in the hope that it will be useful, but
++ * WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ * General Public License for more details.
++ *
++ ******************************************************************************/
++
++/*
++ * QLogic ISP2x00 Multi-path LUN Support
++ * Multi-path include file.
++ */
++
++#if !defined(_QLA_CFG_H)
++#define _QLA_CFG_H
++
++#if defined(__cplusplus)
++extern "C"
++{
++#endif
++
++/*
++ * Failover definitions
++ */
++#define FAILOVER_TYPE_COUNT 4
++#define MP_NOTIFY_RESET_DETECTED 1
++#define MP_NOTIFY_PWR_LOSS 2
++#define MP_NOTIFY_LOOP_UP 3
++#define MP_NOTIFY_LOOP_DOWN 4
++#define MP_NOTIFY_BUS_RESET 5
++#define FAILOVER_TYPE_ERROR_RETRY 1
++#define MAX_NUMBER_PATHS FO_MAX_PATHS
++#define PORT_NAME_SIZE WWN_SIZE
++#define FAILOVER_NOTIFY_STATUS_ERROR QLA2X00_SUCCESS
++#define FAILOVER_NOTIFY_STATUS_SUCCESS QLA2X00_SUCCESS
++#define FAILOVER_NOTIFY_CDB_LENGTH_MAX FO_NOTIFY_CDB_LENGTH_MAX
++#define MAX_TARGETS_PER_DEVICE SDM_DEF_MAX_TARGETS_PER_DEVICE
++
++/*
++ * Limits definitions.
++ */
++#define MAX_LUNS_PER_DEVICE MAX_LUNS /* Maximum # of luns */
++#define MAX_MP_DEVICES MAX_TARGETS /* Maximum # of virtual devs */
++#define MAX_PATHS_PER_DEVICE 8 /* Maximum # of paths */
++#if !defined(MAX_LUNS)
++#define MAX_LUNS 256
++#endif
++#define MAX_HOSTS MAX_HOST_COUNT
++
++/* Async notification types */
++#define NOTIFY_EVENT_LINK_DOWN 1 /* Link went down */
++#define NOTIFY_EVENT_LINK_UP 2 /* Link is back up */
++#define NOTIFY_EVENT_RESET_DETECTED 3 /* Reset detected */
++
++/* MACROS */
++#define qla2x00_is_portname_equal(N1,N2) \
++ ((memcmp((N1),(N2),WWN_SIZE)==0?TRUE:FALSE))
++#define qla2x00_is_nodename_equal(N1,N2) \
++ ((memcmp((N1),(N2),WWN_SIZE)==0?TRUE:FALSE))
++#if 0
++#define qla2x00_allocate_path_list() \
++ ((mp_path_list_t *)KMEM_ZALLOC(sizeof(mp_path_list_t)))
++#endif
++
++/*
++ * Per-multipath driver parameters
++ */
++typedef struct _mp_lun_data {
++ uint8_t data[MAX_LUNS];
++#define LUN_DATA_ENABLED BIT_7
++#define LUN_DATA_PREFERRED_PATH BIT_6
++}
++mp_lun_data_t;
++
++
++#define PATH_INDEX_INVALID 0xff
++
++/*
++ * Per-device collection of all paths.
++ */
++typedef struct _mp_path_list {
++ struct _mp_path *last; /* ptrs to end of circular list of paths */
++ uint8_t path_cnt; /* number of paths */
++ uint8_t visible; /* visible path */
++ uint16_t reserved1; /* Memory alignment */
++ uint32_t reserved2; /* Memory alignment */
++ uint8_t current_path[ MAX_LUNS_PER_DEVICE ]; /* current path for a given lun */
++ uint16_t failover_cnt[ FAILOVER_TYPE_COUNT ];
++}
++mp_path_list_t;
++
++/*
++ * Definitions for failover notify SRBs. These SRBs contain failover notify
++ * CDBs to notify a target that a failover has occurred.
++ *
++ */
++typedef struct _failover_notify_srb {
++ srb_t *srb;
++ uint16_t status;
++ uint16_t reserved;
++}
++failover_notify_srb_t;
++
++/*
++ * Per-device multipath control data.
++ */
++typedef struct _mp_device {
++ mp_path_list_t *path_list; /* Path list for device. */
++ int dev_id;
++ int use_cnt; /* number of users */
++ uint8_t nodename[WWN_SIZE]; /* World-wide node name. */
++ /* World-wide port names. */
++ uint8_t portnames[MAX_PATHS_PER_DEVICE][WWN_SIZE];
++}
++mp_device_t;
++
++/*
++ * Per-adapter multipath Host
++ */
++typedef struct _mp_host {
++ struct _mp_host *next; /* ptr to next host adapter in list */
++ scsi_qla_host_t *ha; /* ptr to lower-level driver adapter struct */
++ int instance; /* OS instance number */
++ struct list_head *fcports; /* Port chain for this adapter */
++ mp_device_t *mp_devs[MAX_MP_DEVICES]; /* Multipath devices */
++
++ uint32_t flags;
++#define MP_HOST_FLAG_NEEDS_UPDATE BIT_0 /* Need to update device data. */
++#define MP_HOST_FLAG_FO_ENABLED BIT_1 /* Failover enabled for this host */
++#define MP_HOST_FLAG_DISABLE BIT_2 /* Bypass qla_cfg. */
++#define MP_HOST_FLAG_LUN_FO_ENABLED BIT_3 /* lun Failover enabled */
++
++ uint8_t nodename[WWN_SIZE];
++ uint8_t portname[WWN_SIZE];
++ uint16_t MaxLunsPerTarget;
++
++ uint16_t relogin_countdown;
++}
++mp_host_t;
++
++/*
++ * Describes path a single.
++ */
++typedef struct _mp_path {
++ struct _mp_path *next; /* next path in list */
++ struct _mp_host *host; /* Pointer to adapter */
++ fc_port_t *port; /* FC port info */
++ uint16_t id; /* Path id (index) */
++ uint8_t mp_byte; /* Multipath control byte */
++#define MP_MASK_HIDDEN 0x80
++#define MP_MASK_UNCONFIGURED 0x40
++#define MP_MASK_PRIORITY 0x07
++
++ uint8_t relogin; /* Need to relogin to port */
++ uint8_t config; /* User configured path */
++ uint8_t reserved[3];
++ mp_lun_data_t lun_data; /* Lun data information */
++ uint8_t portname[WWN_SIZE]; /* Port name of this target. */
++}
++mp_path_t;
++
++/*
++ * Failover notification requests from host driver.
++ */
++typedef struct failover_notify_entry {
++ struct scsi_address *os_addr;
++}
++failover_notify_t;
++
++#endif /* _QLA_CFG_H */
+--- /dev/null Thu Apr 11 07:25:15 2002
++++ linux-2.5.73-n9560/drivers/scsi/qla2xxx/qla_cfgln.c Thu Jul 3 15:34:42 2003
+@@ -0,0 +1,726 @@
++/******************************************************************************
++ * QLOGIC LINUX SOFTWARE
++ *
++ * QLogic ISP2x00 device driver for Linux 2.5.x
++ * Copyright (C) 2003 Qlogic Corporation
++ * (www.qlogic.com)
++ *
++ * This program is free software; you can redistribute it and/or modify it
++ * under the terms of the GNU General Public License as published by the
++ * Free Software Foundation; either version 2, or (at your option) any
++ * later version.
++ *
++ * This program is distributed in the hope that it will be useful, but
++ * WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ * General Public License for more details.
++ *
++ ******************************************************************************/
++
++/*
++ * QLogic ISP2x00 Multi-path LUN Support Driver
++ * Solaris specific functions
++ *
++ */
++
++#include "qla_os.h"
++#include "qla_def.h"
++
++#include "qlfo.h"
++
++#define MAX_SEARCH_STR_SIZE 512
++
++/*
++ * qla2x00_set_lun_data_from_config
++ * Set lun_data byte from the configuration parameters.
++ *
++ * Input:
++ * host -- pointer to host adapter structure.
++ * port -- pointer to port
++ * tgt -- target number
++ * dev_no -- device number
++ */
++void
++qla2x00_set_lun_data_from_config(mp_host_t *host, fc_port_t *port,
++ uint16_t tgt, uint16_t dev_no)
++{
++ char *propbuf; /* As big as largest search string */
++ int rval;
++ int16_t lun, l;
++ scsi_qla_host_t *ha = host->ha;
++ mp_device_t *dp;
++ lun_bit_mask_t *plun_mask;
++ lun_bit_mask_t *mask_ptr;
++ mp_path_list_t *pathlist;
++#if 0
++ uint8_t control_byte;
++#endif
++
++ mp_path_t *path;
++
++ if (qla2x00_get_ioctl_scrap_mem(ha, (void **)&propbuf,
++ MAX_SEARCH_STR_SIZE)) {
++ /* not enough memory */
++ DEBUG9_10(printk("%s(%ld): inst=%ld scrap not big enough. "
++ "propbuf requested=%d.\n",
++ __func__, ha->host_no, ha->instance,
++ MAX_SEARCH_STR_SIZE);)
++ return;
++ }
++
++ if (qla2x00_get_ioctl_scrap_mem(ha, (void **)&plun_mask,
++ sizeof(lun_bit_mask_t))) {
++ /* not enough memory */
++ DEBUG9_10(printk("%s(%ld): inst=%ld scrap not big enough. "
++ "lun_mask requested=%d.\n",
++ __func__, ha->host_no, ha->instance,
++ sizeof(lun_bit_mask_t));)
++ qla2x00_free_ioctl_scrap_mem(ha);
++ return;
++ }
++ mask_ptr = plun_mask;
++
++ dp = host->mp_devs[tgt];
++ if (dp == NULL) {
++ printk("qla2x00_set_lun_data_from_config: Target %d "
++ "not found for hba %d\n",tgt, host->instance);
++ qla2x00_free_ioctl_scrap_mem(ha);
++ return;
++ }
++ if ( (pathlist = dp->path_list) == NULL ) {
++ printk("qla2x00_set_lun_data_from_config: path list "
++ "not found for target %d\n", tgt);
++ qla2x00_free_ioctl_scrap_mem(ha);
++ return;
++ }
++
++ if ((path = qla2x00_find_path_by_name(host, pathlist,
++ port->port_name)) == NULL ) {
++ printk("qla2x00_set_lun_data_from_config: No path found "
++ "for target %d\n", tgt);
++ qla2x00_free_ioctl_scrap_mem(ha);
++ return;
++ }
++
++ /* clear port information */
++ path->port = NULL;
++
++#if 0
++ /* 02/06/01 - move to build path tree */
++ /*
++ * Get "target-N-device-N-control" if property is present then all
++ * luns are visible.
++ */
++ sprintf(propbuf, "scsi-qla%d-tgt-%d-di-%d-control",
++ host->instance, tgt, dev_no);
++ DEBUG3(printk("build_tree: %s\n",propbuf);)
++ rval = qla2x00_get_prop_xstr(ha, propbuf,
++ (uint8_t *)(&control_byte), sizeof(control_byte));
++ if (rval != -1) {
++ if (!((control_byte & MP_MASK_HIDDEN) ||
++ (control_byte & MP_MASK_UNCONFIGURED))) {
++ pathlist->visible = path->id;
++ DEBUG(printk("qla2x00_set_lun_data_from_config: "
++ "found visible path id %d hba %d\n",
++ path->id, host->instance);)
++ } else {
++ pathlist->visible = PATH_INDEX_INVALID; /* 01/30 */
++ DEBUG(printk("qla2x00_set_lun_data_from_config: "
++ "found hidden path id %d hba %d\n",
++ path->id, host->instance);)
++ }
++ path->mp_byte = control_byte;
++ DEBUG(printk("qla2x00_set_lun_data_from_config: "
++ "control byte 0x%x for path id %d hba %d\n",
++ path->mp_byte, path->id, host->instance);)
++ }
++#endif
++
++ /* Get "target-N-device-N-preferred" as a 256 bit lun_mask*/
++ sprintf(propbuf, "scsi-qla%ld-tgt-%d-di-%d-preferred",
++ ha->instance, tgt, dev_no);
++ DEBUG2(printk("build_tree: %s\n",propbuf);)
++
++ rval = qla2x00_get_prop_xstr(ha, propbuf,
++ (uint8_t *)(plun_mask), sizeof(lun_bit_mask_t));
++
++ if (rval == -1) {
++ /* EMPTY */
++ DEBUG2(printk("qla2x00_set_lun_data_from_config: "
++ "NO Preferred mask - ret %d\n", rval);)
++ } else {
++ if (rval != sizeof(lun_bit_mask_t)) {
++ /* EMPTY */
++ printk("qla2x00_set_lun_data_from_config: "
++ "Preferred mask len %d is incorrect.\n", rval);
++ }
++
++ DEBUG3(printk("qla2x00_set_lun_data_from_config: "
++ "Preferred mask read:\n");)
++ DEBUG3(qla2x00_dump_buffer((char *)plun_mask,
++ sizeof(lun_bit_mask_t));)
++
++ for (lun = MAX_LUNS-1, l =0; lun >= 0; lun--, l++ ) {
++ if (EXT_IS_LUN_BIT_SET(mask_ptr, lun)) {
++ path->lun_data.data[l] |=
++ LUN_DATA_PREFERRED_PATH;
++ pathlist->current_path[l] = path->id;
++ } else {
++ path->lun_data.data[l] &=
++ ~LUN_DATA_PREFERRED_PATH;
++ }
++ }
++
++ }
++
++ /* Get "target-N-device-N-lun-disable" as a 256 bit lun_mask*/
++ sprintf(propbuf, "scsi-qla%ld-tgt-%d-di-%d-lun-disabled",
++ ha->instance, tgt, dev_no);
++ DEBUG3(printk("build_tree: %s\n",propbuf);)
++
++ rval = qla2x00_get_prop_xstr(ha, propbuf,
++ (uint8_t *)plun_mask, sizeof(lun_bit_mask_t));
++ if (rval == -1) {
++ /* default: all luns enabled */
++ for (lun = 0; lun < MAX_LUNS; lun++) {
++ path->lun_data.data[lun] |= LUN_DATA_ENABLED;
++ }
++ } else {
++ if (rval != sizeof(lun_bit_mask_t)) {
++ printk("qla2x00_set_lun_data_from_config: Enable "
++ "mask has wrong size %d != %d\n",
++ rval, (int)sizeof(lun_bit_mask_t));
++ } else {
++ for (lun = MAX_LUNS-1, l =0; lun >= 0; lun--, l++) {
++ /* our bit mask is inverted */
++ if (!EXT_IS_LUN_BIT_SET(mask_ptr,lun))
++ path->lun_data.data[l] |=
++ LUN_DATA_ENABLED;
++ else
++ path->lun_data.data[l] &=
++ ~LUN_DATA_ENABLED;
++ }
++ }
++ }
++
++ DEBUG3(printk("qla2x00_set_lun_data_from_config: Luns data for "
++ "device %p, instance %d, path id=%d\n",
++ dp,host->instance,path->id);)
++ DEBUG3(qla2x00_dump_buffer((char *)&path->lun_data.data[0], 64);)
++
++ qla2x00_free_ioctl_scrap_mem(ha);
++ LEAVE("qla2x00_set_lun_data_from_config");
++}
++
++
++
++/*
++ * qla2x00_cfg_build_path_tree
++ * Find all path properties and build a path tree. The
++ * resulting tree has no actual port assigned to it
++ * until the port discovery is done by the lower level.
++ *
++ * Input:
++ * ha = adapter block pointer.
++ *
++ * Context:
++ * Kernel context.
++ */
++void
++qla2x00_cfg_build_path_tree(scsi_qla_host_t *ha)
++{
++ char *propbuf;
++ uint8_t node_name[WWN_SIZE];
++ uint8_t port_name[WWN_SIZE];
++ fc_port_t *port;
++ uint16_t dev_no = 0, tgt_no;
++ int instance, rval;
++ mp_host_t *host = NULL;
++ uint8_t *name;
++ int done;
++ uint8_t control_byte;
++
++
++ ENTER("qla2x00_cfg_build_path_tree");
++
++ printk(KERN_INFO
++ "qla02%d: ConfigRequired is set. \n", (int)ha->instance);
++ DEBUG(printk("qla2x00_cfg_build_path_tree: hba =%d",
++ (int)ha->instance);)
++
++ if (qla2x00_get_ioctl_scrap_mem(ha, (void **)&propbuf,
++ MAX_SEARCH_STR_SIZE)) {
++ /* not enough memory */
++ DEBUG9_10(printk("%s(%ld): inst=%ld scrap not big enough. "
++ "propbuf requested=%d.\n",
++ __func__, ha->host_no, ha->instance,
++ MAX_SEARCH_STR_SIZE);)
++ return;
++ }
++
++ /* Look for adapter nodename in properties */
++ sprintf(propbuf, "scsi-qla%ld-adapter-port", ha->instance);
++ DEBUG(printk("build_tree: %s\n",propbuf);)
++
++ rval = qla2x00_get_prop_xstr(ha, propbuf, port_name, WWN_SIZE);
++ if (rval != WWN_SIZE) {
++ qla2x00_free_ioctl_scrap_mem(ha);
++ return;
++ }
++
++ /* Does nodename match the host adapter nodename? */
++ name = &ha->init_cb->port_name[0];
++ if (!qla2x00_is_nodename_equal(name, port_name)) {
++ printk(KERN_INFO
++ "scsi(%d): Adapter nodenames don't match - ha = %p.\n",
++ (int)ha->instance,ha);
++ DEBUG(printk("qla(%d): Adapter nodenames don't match - "
++ "ha = %p.\n",
++ (int)ha->instance,ha);)
++ qla2x00_free_ioctl_scrap_mem(ha);
++ return;
++ }
++
++ instance = ha->instance;
++ if ((host = qla2x00_alloc_host(ha)) == NULL) {
++ printk(KERN_INFO
++ "scsi(%d): Couldn't allocate host - ha = %p.\n",
++ (int)instance,ha);
++ } else {
++ /* create a dummy port */
++ port = (fc_port_t *)KMEM_ZALLOC(sizeof (fc_port_t),9);
++ if (port == NULL) {
++ printk(KERN_INFO
++ "scsi(%d): Couldn't allocate port.\n",
++ (int)instance);
++ DEBUG(printk("qla(%d): Couldn't allocate port.\n",
++ (int)host->instance);)
++ /* remove host */
++ qla2x00_free_ioctl_scrap_mem(ha);
++ return;
++ }
++
++ done = 0;
++
++ /* For each target on the host bus adapter */
++ for (tgt_no = 0; tgt_no < MAX_MP_DEVICES &&
++ !done; tgt_no++) {
++
++ /* get all paths for this target */
++ for (dev_no = 0; dev_no < MAX_PATHS_PER_DEVICE &&
++ !done ; dev_no++) {
++
++ /*
++ * O(N*M) scan, should ideally check if there
++ * are any tgt entries present, if not, then
++ * continue.
++ *
++ * sprintf(propbuf,
++ * "scsi-qla%d-tgt-%d-",
++ * instance, tgt_no);
++ * if (strstr(ha->cmdline, propbuf) == NULL)
++ * continue;
++ *
++ */
++ memset(port, 0, sizeof (fc_port_t));
++
++ /*
++ * Get "target-N-device-N-node" is a 16-chars
++ * number
++ */
++ sprintf(propbuf, "scsi-qla%d-tgt-%d-di-%d-node",
++ instance, tgt_no, dev_no);
++ DEBUG(printk("build_tree: %s\n",propbuf);)
++
++ rval = qla2x00_get_prop_xstr(ha, propbuf,
++ node_name, WWN_SIZE);
++ if (rval != WWN_SIZE)
++ continue;
++
++ memcpy(port->node_name, node_name, WWN_SIZE);
++
++ /*
++ * Get "target-N-device-N-port" is a 16-chars
++ * number
++ */
++ sprintf(propbuf, "scsi-qla%d-tgt-%d-di-%d-port",
++ instance, tgt_no, dev_no);
++ DEBUG(printk("build_tree: %s\n",propbuf);)
++
++ rval = qla2x00_get_prop_xstr(ha, propbuf,
++ port_name, WWN_SIZE);
++ if (rval != WWN_SIZE)
++ continue;
++
++ memcpy(port->node_name, node_name, WWN_SIZE);
++ memcpy(port->port_name, port_name, WWN_SIZE);
++ port->flags |= FC_CONFIG;
++
++ /*
++ * Get "target-N-device-N-control" if property
++ * is present then all luns are visible.
++ */
++ sprintf(propbuf,
++ "scsi-qla%d-tgt-%d-di-%d-control",
++ instance, tgt_no, dev_no);
++ DEBUG3(printk("build_tree: %s\n",propbuf);)
++
++ rval = qla2x00_get_prop_xstr(ha, propbuf,
++ (uint8_t *)(&control_byte),
++ sizeof(control_byte));
++ if (rval == -1) {
++ /* error getting string. go to next. */
++ continue;
++ }
++
++ DEBUG(printk("build_tree: control byte 0x%x\n",
++ control_byte);)
++
++ port->mp_byte = control_byte;
++ DEBUG(printk("build_tree: update_mp_device "
++ "host=%p, port=%p, tgt_no=%d\n",
++ host, port, tgt_no);)
++
++ qla2x00_update_mp_device(host, port, tgt_no);
++ qla2x00_set_lun_data_from_config(host,
++ port, tgt_no, dev_no);
++ }
++ }
++ KMEM_FREE(port, sizeof (fc_port_t));
++ }
++
++ qla2x00_free_ioctl_scrap_mem(ha);
++
++ LEAVE("qla2x00_cfg_build_path_tree");
++ DEBUG(printk("Leaving: qla2x00_cfg_build_path_tree\n");)
++}
++
++/*
++ * qla2x00_cfg_display_devices
++ * This routine will the node names of the different devices found
++ * after port inquiry.
++ *
++ * Input:
++ *
++ * Returns:
++ * None.
++ */
++void qla2x00_cfg_display_devices(void)
++{
++ mp_host_t *host;
++ int id;
++ mp_device_t *dp;
++ mp_path_t *path;
++ mp_path_list_t *path_list;
++ int cnt, i, dev_no;
++ int instance;
++ lun_bit_mask_t lun_mask;
++ int mask_set;
++ uint8_t l;
++
++ printk("qla2x00_cfg_display_devices\n");
++ for (host = mp_hosts_base; (host); host = host->next) {
++
++ instance = (int) host->instance;
++ /* Display the node name for adapter */
++ printk(KERN_INFO
++ "scsi-qla%d-adapter-port="
++ "%02x%02x%02x%02x%02x%02x%02x%02x\\;\n",
++ instance,
++ host->portname[0],
++ host->portname[1],
++ host->portname[2],
++ host->portname[3],
++ host->portname[4],
++ host->portname[5],
++ host->portname[6],
++ host->portname[7]);
++
++ for (id = 0; id < MAX_MP_DEVICES; id++) {
++ if( (dp = host->mp_devs[id] ) == NULL )
++ continue;
++
++ path_list = dp->path_list;
++
++
++ if( (path = path_list->last) != NULL ) {
++ /* Print out device port names */
++ path = path->next; /* first path */
++ for (dev_no = 0, cnt = 0;
++ cnt < path_list->path_cnt;
++ path = path->next, cnt++) {
++
++ /* skip others if not our host */
++ if (host != path->host)
++ continue;
++ printk(KERN_INFO
++ "scsi-qla%d-tgt-%d-di-%d-node="
++ "%02x%02x%02x%02x"
++ "%02x%02x%02x%02x\\;\n",
++ instance, id, path->id,
++ dp->nodename[0],
++ dp->nodename[1],
++ dp->nodename[2],
++ dp->nodename[3],
++ dp->nodename[4],
++ dp->nodename[5],
++ dp->nodename[6],
++ dp->nodename[7]);
++
++ /* port_name */
++ printk(KERN_INFO
++ "scsi-qla%d-tgt-%d-di-%d-port="
++ "%02x%02x%02x%02x"
++ "%02x%02x%02x%02x\\;\n",
++ instance, id, path->id,
++ path->portname[0],
++ path->portname[1],
++ path->portname[2],
++ path->portname[3],
++ path->portname[4],
++ path->portname[5],
++ path->portname[6],
++ path->portname[7]);
++
++ /* control byte */
++ printk(KERN_INFO
++ "scsi-qla%d-tgt-%d-di-%d-"
++ "control=%02x\\;\n",
++ instance, id, path->id,
++ path->mp_byte);
++
++ /*
++ * Build preferred bit mask for this
++ * path */
++ memset(&lun_mask, 0, sizeof(lun_mask));
++ mask_set = 0;
++ for (i = 0; i < MAX_LUNS; i++) {
++ l = (uint8_t)(i & 0xFF);
++ if (path_list->current_path[l] == path->id ) {
++ EXT_SET_LUN_BIT((&lun_mask),l);
++ mask_set++;
++ }
++ }
++ if (mask_set) {
++ printk(KERN_INFO
++ "scsi-qla%d-tgt-%d-di-%d-preferred=%08x%08x%08x%08x%08x%08x%08x%08x\\;\n",
++ instance, id, path->id,
++ *((uint32_t *) &lun_mask.mask[28]),
++ *((uint32_t *) &lun_mask.mask[24]),
++ *((uint32_t *) &lun_mask.mask[20]),
++ *((uint32_t *) &lun_mask.mask[16]),
++ *((uint32_t *) &lun_mask.mask[12]),
++ *((uint32_t *) &lun_mask.mask[8]),
++ *((uint32_t *) &lun_mask.mask[4]),
++ *((uint32_t *) &lun_mask.mask[0]) );
++ }
++ /*
++ * Build disable bit mask for this path
++ */
++ mask_set = 0;
++ for (i = 0; i < MAX_LUNS; i++) {
++ l = (uint8_t)(i & 0xFF);
++ if (!(path->lun_data.data[l] &
++ LUN_DATA_ENABLED) ) {
++
++ mask_set++;
++ }
++ }
++ if (mask_set) {
++ printk(KERN_INFO
++ "scsi-qla%d-tgt-%d-di-%d-lun-disable=%08x%08x%08x%08x%08x%08x%08x%08x\\;\n",
++ instance, id, path->id,
++ *((uint32_t *) &lun_mask.mask[28]),
++ *((uint32_t *) &lun_mask.mask[24]),
++ *((uint32_t *) &lun_mask.mask[20]),
++ *((uint32_t *) &lun_mask.mask[16]),
++ *((uint32_t *) &lun_mask.mask[12]),
++ *((uint32_t *) &lun_mask.mask[8]),
++ *((uint32_t *) &lun_mask.mask[4]),
++ *((uint32_t *) &lun_mask.mask[0]) );
++ }
++ dev_no++;
++ }
++
++ }
++ }
++ }
++}
++
++#if 0
++int qla2x00_cfg_build_range( mp_path_t *path, uint8_t *buf, int siz, uint8_t mask )
++{
++ int i;
++ int max, min;
++ int colonflg = FALSE;
++ int len = 0;
++
++ max = -1;
++ min = 0;
++ for (i = 0; i < MAX_LUNS; i++) {
++ if( (path->lun_data.data[i] & mask) ) {
++ max = i;
++ } else {
++ if( colonflg && max >= min ) {
++ len += sprintf(&buf[len],":");
++ if( len > siz)
++ return len;
++ colonflg = FALSE;
++ }
++ if (max > min ) {
++ len += sprintf(&buf[len],"%02x-%02x",min,max);
++ if( len > siz)
++ return len;
++ colonflg = TRUE;
++ } else if ( max == min ) {
++ len += sprintf(&buf[len],"%02x",max);
++ if( len > siz)
++ return len;
++ colonflg = TRUE;
++ }
++ min = i + 1;
++ max = i;
++ }
++ }
++ DEBUG4(printk("build_range: return len =%d\n",len);)
++ return(len);
++}
++#endif
++
++#if 0
++/*
++ * qla2x00_cfg_proc_display_devices
++ * This routine will the node names of the different devices found
++ * after port inquiry.
++ *
++ * Input:
++ *
++ * Returns:
++ * None.
++ */
++int qla2x00_cfg_proc_display_devices(scsi_qla_host_t *ha)
++{
++ mp_host_t *host;
++ int id;
++ mp_device_t *dp;
++ mp_path_t *path;
++ mp_path_list_t *path_list;
++ int cnt, i;
++ int instance;
++ lun_bit_mask_t lun_mask;
++ int mask_set;
++ uint8_t l;
++ fc_port_t *port;
++ int len = 0;
++
++ for (host = mp_hosts_base; (host); host = host->next) {
++
++ if( host->ha != ha )
++ continue;
++
++ instance = (int) host->instance;
++
++ /* Display the node name for adapter */
++ len += sprintf(PROC_BUF,
++ "scsi-qla%d-adapter-node="
++ "%02x%02x%02x%02x%02x%02x%02x%02x;\n",
++ instance,
++ host->nodename[0],
++ host->nodename[1],
++ host->nodename[2],
++ host->nodename[3],
++ host->nodename[4],
++ host->nodename[5],
++ host->nodename[6],
++ host->nodename[7]);
++
++
++ for (id = 0; id < MAX_MP_DEVICES; id++) {
++ if( (dp = host->mp_devs[id] ) == NULL )
++ continue;
++
++ path_list = dp->path_list;
++
++ if( (path = path_list->last) != NULL ) {
++ /* Print out device port names */
++ path = path->next; /* first path */
++ for (cnt = 0; cnt < path_list->path_cnt; path = path->next, cnt++) {
++ /* skip others if not our host */
++ if (host != path->host)
++ continue;
++ len += sprintf(PROC_BUF,
++ "scsi-qla%d-target-%d-path-%d-node=%02x%02x%02x%02x%02x%02x%02x%02x;\n",
++ instance, id, path->id,
++ dp->nodename[0],
++ dp->nodename[1],
++ dp->nodename[2],
++ dp->nodename[3],
++ dp->nodename[4],
++ dp->nodename[5],
++ dp->nodename[6],
++ dp->nodename[7]);
++
++ /* port_name */
++ len += sprintf(PROC_BUF,
++ "scsi-qla%d-target-%d-path-%d-port=%02x%02x%02x%02x%02x%02x%02x%02x;\n",
++ instance, id, path->id,
++ path->portname[0],
++ path->portname[1],
++ path->portname[2],
++ path->portname[3],
++ path->portname[4],
++ path->portname[5],
++ path->portname[6],
++ path->portname[7]);
++
++ if( path_list->visible == path->id ) {
++ len += sprintf(PROC_BUF, "scsi-qla%d-target-%d-path-%d-visible=%02x;\n",
++ instance, id, path->id, path->id);
++ }
++
++ len +=sprintf(PROC_BUF, "scsi-qla%d-target-%d-path-%d-control=%02x;\n",
++ instance, id, path->id, path->mp_byte);
++
++ /* Build preferred bit mask for this path */
++ memset(&lun_mask, 0, sizeof(lun_mask));
++ mask_set = 0;
++ for (i = 0; i < MAX_LUNS_PER_DEVICE; i++) {
++ l = (uint8_t)(i & 0xFF);
++ if( path_list->current_path[l] == path->id ) {
++ EXT_SET_LUN_BIT((&lun_mask),l);
++ mask_set++;
++ }
++ }
++ if( mask_set && EXT_DEF_MAX_LUNS <= 256 ) {
++ len += sprintf(PROC_BUF,
++ "scsi-qla%d-target-%d-path-%d-preferred=%08x%08x%08x%08x%08x%08x%08x%08x;\n",
++ instance, id, path->id,
++ *((uint32_t *) &lun_mask.mask[0]),
++ *((uint32_t *) &lun_mask.mask[4]),
++ *((uint32_t *) &lun_mask.mask[8]),
++ *((uint32_t *) &lun_mask.mask[12]),
++ *((uint32_t *) &lun_mask.mask[16]),
++ *((uint32_t *) &lun_mask.mask[20]),
++ *((uint32_t *) &lun_mask.mask[24]),
++ *((uint32_t *) &lun_mask.mask[28]) );
++ }
++
++ len += sprintf(PROC_BUF,
++ "scsi-qla%d-target-%d-path-%d-lun-enable=%08x%08x%08x%08x%08x%08x%08x%08x;\n",
++ instance, id, path->id,
++ *((uint32_t *) &path->lun_data.data[0]),
++ *((uint32_t *) &path->lun_data.data[4]),
++ *((uint32_t *) &path->lun_data.data[8]),
++ *((uint32_t *) &path->lun_data.data[12]),
++ *((uint32_t *) &path->lun_data.data[16]),
++ *((uint32_t *) &path->lun_data.data[20]),
++ *((uint32_t *) &path->lun_data.data[24]),
++ *((uint32_t *) &path->lun_data.data[28]) );
++
++ } /* for */
++ }
++ }
++ }
++ return( len );
++}
++#endif
+--- /dev/null Thu Apr 11 07:25:15 2002
++++ linux-2.5.73-n9560/drivers/scsi/qla2xxx/qla_dbg.c Thu Jul 3 15:34:42 2003
+@@ -0,0 +1,1000 @@
++/*
++ * QLOGIC LINUX SOFTWARE
++ *
++ * QLogic ISP2x00 device driver for Linux 2.5.x
++ * Copyright (C) 2003 Qlogic Corporation
++ * (www.qlogic.com)
++ *
++ * This program is free software; you can redistribute it and/or modify it
++ * under the terms of the GNU General Public License as published by the
++ * Free Software Foundation; either version 2, or (at your option) any
++ * later version.
++ *
++ * This program is distributed in the hope that it will be useful, but
++ * WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ * General Public License for more details.
++ *
++ */
++#include "qla_os.h"
++
++#include "qla_def.h"
++
++
++#if defined(ISP2300)
++/**
++ * qla2x00_fw_dump() - Dumps binary data from the 2300 firmware.
++ * @ha: SCSI driver HA context
++ * @hardware_locked: Called with the hardware_lock
++ */
++void
++qla2x00_dump_isp(scsi_qla_host_t *ha, int hardware_locked)
++{
++ int rval;
++ uint32_t i;
++ uint32_t cnt, timer;
++ uint32_t risc_address;
++ uint16_t risc_code_size;
++ uint16_t mb0, mb2;
++
++ uint16_t data, stat;
++ device_reg_t *reg;
++ uint16_t *dmp_reg;
++ unsigned long flags;
++
++
++ reg = ha->iobase;
++ flags = 0;
++
++ if (!hardware_locked)
++ spin_lock_irqsave(&ha->hardware_lock, flags);
++
++ printk("\n\n[==>BEG]\n");
++
++ printk("HCCR Register:\n");
++ printk("%04x\n\n", RD_REG_WORD(®->hccr));
++
++ WRT_REG_WORD(®->hccr, HCCR_PAUSE_RISC);
++ SYS_DELAY(100);
++
++ printk("PBIU Registers:\n");
++ dmp_reg = (uint16_t *)(reg + 0);
++ for (i = 0; i < 8; i++)
++ printk("%04x ", RD_REG_WORD(dmp_reg++));
++
++ printk("\n\n");
++
++ printk("ReqQ-RspQ-Risc2Host Status registers:\n");
++ dmp_reg = (uint16_t *)((uint8_t *)reg + 0x10);
++ for (i = 0; i < 8; i++)
++ printk("%04x ", RD_REG_WORD(dmp_reg++));
++
++ printk("\n\n");
++
++ printk("Mailbox Registers:");
++ dmp_reg = (uint16_t *)((uint8_t *)reg + 0x40);
++ for (i = 0; i < 32; i++) {
++ if ((i % 8) == 0)
++ printk("\n");
++ printk("%04x ", RD_REG_WORD(dmp_reg++));
++ }
++
++ printk("\n\n");
++
++ WRT_REG_WORD(®->ctrl_status, 0x40);
++ printk("Auto Request Response DMA Registers:");
++ dmp_reg = (uint16_t *)((uint8_t *)reg + 0x80);
++ for (i = 0; i < 32; i++) {
++ if ((i % 8) == 0)
++ printk("\n");
++ printk("%04x ", RD_REG_WORD(dmp_reg++));
++ }
++
++ printk("\n\n");
++
++ WRT_REG_WORD(®->ctrl_status, 0x50);
++ printk("DMA Registers:");
++ dmp_reg = (uint16_t *)((uint8_t *)reg + 0x80);
++ for (i = 0; i < 48; i++) {
++ if ((i % 8) == 0)
++ printk("\n");
++ printk("%04x ", RD_REG_WORD(dmp_reg++));
++ }
++
++ printk("\n\n");
++
++ WRT_REG_WORD(®->ctrl_status, 0x00);
++ printk("RISC Hardware Registers:");
++ dmp_reg = (uint16_t *)((uint8_t *)reg + 0xA0);
++ for (i = 0; i < 16; i++) {
++ if ((i % 8) == 0)
++ printk("\n");
++ printk("%04x ", RD_REG_WORD(dmp_reg++));
++ }
++
++ printk("\n\n");
++
++ WRT_REG_WORD(®->pcr, 0x2000);
++ printk("RISC GP0 Registers:");
++ dmp_reg = (uint16_t *)((uint8_t *)reg + 0x80);
++ for (i = 0; i < 16; i++) {
++ if ((i % 8) == 0)
++ printk("\n");
++ printk("%04x ", RD_REG_WORD(dmp_reg++));
++ }
++
++ printk("\n\n");
++
++ WRT_REG_WORD(®->pcr, 0x2200);
++ printk("RISC GP1 Registers:");
++ dmp_reg = (uint16_t *)((uint8_t *)reg + 0x80);
++ for (i = 0; i < 16; i++) {
++ if ((i % 8) == 0)
++ printk("\n");
++ printk("%04x ", RD_REG_WORD(dmp_reg++));
++ }
++
++ printk("\n\n");
++
++ WRT_REG_WORD(®->pcr, 0x2400);
++ printk("RISC GP2 Registers:");
++ dmp_reg = (uint16_t *)((uint8_t *)reg + 0x80);
++ for (i = 0; i < 16; i++) {
++ if ((i % 8) == 0)
++ printk("\n");
++ printk("%04x ", RD_REG_WORD(dmp_reg++));
++ }
++
++ printk("\n\n");
++
++ WRT_REG_WORD(®->pcr, 0x2600);
++ printk("RISC GP3 Registers:");
++ dmp_reg = (uint16_t *)((uint8_t *)reg + 0x80);
++ for (i = 0; i < 16; i++) {
++ if ((i % 8) == 0)
++ printk("\n");
++ printk("%04x ", RD_REG_WORD(dmp_reg++));
++ }
++
++ printk("\n\n");
++
++ WRT_REG_WORD(®->pcr, 0x2800);
++ printk("RISC GP4 Registers:");
++ dmp_reg = (uint16_t *)((uint8_t *)reg + 0x80);
++ for (i = 0; i < 16; i++) {
++ if ((i % 8) == 0)
++ printk("\n");
++ printk("%04x ", RD_REG_WORD(dmp_reg++));
++ }
++
++ printk("\n\n");
++
++ WRT_REG_WORD(®->pcr, 0x2A00);
++ printk("RISC GP5 Registers:");
++ dmp_reg = (uint16_t *)((uint8_t *)reg + 0x80);
++ for (i = 0; i < 16; i++) {
++ if ((i % 8) == 0)
++ printk("\n");
++ printk("%04x ", RD_REG_WORD(dmp_reg++));
++ }
++
++ printk("\n\n");
++
++ WRT_REG_WORD(®->pcr, 0x2C00);
++ printk("RISC GP6 Registers:");
++ dmp_reg = (uint16_t *)((uint8_t *)reg + 0x80);
++ for (i = 0; i < 16; i++) {
++ if ((i % 8) == 0)
++ printk("\n");
++ printk("%04x ", RD_REG_WORD(dmp_reg++));
++ }
++
++ printk("\n\n");
++
++ WRT_REG_WORD(®->pcr, 0x2E00);
++ printk("RISC GP7 Registers:");
++ dmp_reg = (uint16_t *)((uint8_t *)reg + 0x80);
++ for (i = 0; i < 16; i++) {
++ if ((i % 8) == 0)
++ printk("\n");
++ printk("%04x ", RD_REG_WORD(dmp_reg++));
++ }
++
++ printk("\n\n");
++
++ WRT_REG_WORD(®->ctrl_status, 0x10);
++ printk("Frame Buffer Hardware Registers:");
++ dmp_reg = (uint16_t *)((uint8_t *)reg + 0x80);
++ for (i = 0; i < 64; i++) {
++ if ((i % 8) == 0)
++ printk("\n");
++ printk("%04x ", RD_REG_WORD(dmp_reg++));
++ }
++
++ printk("\n\n");
++
++ WRT_REG_WORD(®->ctrl_status, 0x20);
++ printk("FPM B0 Registers:");
++ dmp_reg = (uint16_t *)((uint8_t *)reg + 0x80);
++ for (i = 0; i < 64; i++) {
++ if ((i % 8) == 0)
++ printk("\n");
++ printk("%04x ", RD_REG_WORD(dmp_reg++));
++ }
++
++ printk("\n\n");
++
++ WRT_REG_WORD(®->ctrl_status, 0x30);
++ printk("FPM B1 Registers:");
++ dmp_reg = (uint16_t *)((uint8_t *)reg + 0x80);
++ for (i = 0; i < 64; i++) {
++ if ((i % 8) == 0)
++ printk("\n");
++ printk("%04x ", RD_REG_WORD(dmp_reg++));
++ }
++
++ printk("\n\n");
++
++ WRT_REG_WORD(®->ctrl_status, CSR_ISP_SOFT_RESET);
++
++ data = RD_REG_WORD(®->ctrl_status);
++ for (i = 6000000; i && data & CSR_ISP_SOFT_RESET; i--) {
++ SYS_DELAY(5);
++ data = RD_REG_WORD(®->ctrl_status);
++ }
++ if (ha->pdev->device == QLA2312_DEVICE_ID ||
++ ha->pdev->device == QLA2322_DEVICE_ID) {
++ SYS_DELAY(10);
++ } else {
++ data = RD_REG_WORD(®->mailbox0);
++ for (i = 6000000; i && data == MBS_BUSY; i--) {
++ SYS_DELAY(5);
++ data = RD_REG_WORD(®->mailbox0);
++ }
++ }
++
++ rval = QLA2X00_SUCCESS;
++ mb0 = mb2 = 0;
++ printk("Code RAM Dump:");
++ risc_address = 0x800;
++ risc_code_size = 0xffff - 0x800 + 1;
++ WRT_REG_WORD(®->mailbox0, MBC_READ_RAM_WORD);
++ clear_bit(MBX_INTERRUPT, &ha->mbx_cmd_flags);
++ for (cnt = 0; cnt < risc_code_size && rval == QLA2X00_SUCCESS; cnt++) {
++ if ((cnt % 8) == 0)
++ printk("\n%04x: ", cnt + 0x0800);
++ WRT_REG_WORD(®->mailbox1, (uint16_t)risc_address++);
++ WRT_REG_WORD(®->hccr, HCCR_SET_HOST_INT);
++
++ for (timer = 6000000; timer != 0; timer--) {
++ /* Check for pending interrupts. */
++ if ((stat = RD_REG_WORD(®->host_status_lo)) & HSR_INT) {
++ stat &= 0xff;
++
++ if (stat == 0x1 || stat == 0x2) {
++ set_bit(MBX_INTERRUPT, &ha->mbx_cmd_flags);
++
++ mb0 = RD_REG_WORD(®->mailbox0);
++ mb2 = RD_REG_WORD(®->mailbox2);
++
++ /* Release mailbox registers. */
++ WRT_REG_WORD(®->semaphore, 0);
++ WRT_REG_WORD(®->hccr, HCCR_CLR_RISC_INT);
++ break;
++ } else if (stat == 0x10 || stat == 0x11) {
++ set_bit(MBX_INTERRUPT, &ha->mbx_cmd_flags);
++
++ mb0 = RD_REG_WORD(®->mailbox0);
++ mb2 = RD_REG_WORD(®->mailbox2);
++
++ WRT_REG_WORD(®->hccr, HCCR_CLR_RISC_INT);
++ break;
++ }
++
++ /* clear this intr; it wasn't a mailbox intr */
++ WRT_REG_WORD(®->hccr, HCCR_CLR_RISC_INT);
++ }
++
++ mdelay(5);
++ }
++
++ if (test_and_clear_bit(MBX_INTERRUPT, &ha->mbx_cmd_flags)) {
++ rval = mb0 & MBS_MASK;
++ printk("%04x ", mb2);
++ } else {
++ rval = QLA2X00_FUNCTION_FAILED;
++ }
++ }
++
++ printk("\n\n");
++
++ mb0 = mb2 = 0;
++ printk("Stack RAM Dump:");
++ risc_address = 0x10000;
++ risc_code_size = 0x107ff - 0x10000 + 1;
++ WRT_REG_WORD(®->mailbox0, 0xf /* MBC_READ_RAM_EXTENDED */);
++ clear_bit(MBX_INTERRUPT, &ha->mbx_cmd_flags);
++
++ for (cnt = 0; cnt < risc_code_size && rval == QLA2X00_SUCCESS; cnt++) {
++ if ((cnt % 8) == 0)
++ printk("\n%05x: ", cnt + 0x10000);
++ WRT_REG_WORD(®->mailbox1, LSW(risc_address));
++ WRT_REG_WORD(®->mailbox8, MSW(risc_address++));
++ WRT_REG_WORD(®->hccr, HCCR_SET_HOST_INT);
++
++ for (timer = 6000000; timer != 0; timer--) {
++ /* Check for pending interrupts. */
++ if ((stat = RD_REG_WORD(®->host_status_lo)) & HSR_INT) {
++ stat &= 0xff;
++
++ if (stat == 0x1 || stat == 0x2) {
++ set_bit(MBX_INTERRUPT, &ha->mbx_cmd_flags);
++
++ mb0 = RD_REG_WORD(®->mailbox0);
++ mb2 = RD_REG_WORD(®->mailbox2);
++
++ /* Release mailbox registers. */
++ WRT_REG_WORD(®->semaphore, 0);
++ WRT_REG_WORD(®->hccr, HCCR_CLR_RISC_INT);
++ break;
++ } else if (stat == 0x10 || stat == 0x11) {
++ set_bit(MBX_INTERRUPT, &ha->mbx_cmd_flags);
++
++ mb0 = RD_REG_WORD(®->mailbox0);
++ mb2 = RD_REG_WORD(®->mailbox2);
++
++ WRT_REG_WORD(®->hccr, HCCR_CLR_RISC_INT);
++ break;
++ }
++
++ /* clear this intr; it wasn't a mailbox intr */
++ WRT_REG_WORD(®->hccr, HCCR_CLR_RISC_INT);
++ }
++
++ mdelay(5);
++ }
++
++ if (test_and_clear_bit(MBX_INTERRUPT, &ha->mbx_cmd_flags)) {
++ rval = mb0 & MBS_MASK;
++ printk("%04x ", mb2);
++ } else {
++ rval = QLA2X00_FUNCTION_FAILED;
++ }
++ }
++
++ printk("\n\n");
++
++ mb0 = mb2 = 0;
++ printk("Data RAM Dump:");
++ risc_address = 0x10800;
++ risc_code_size = 0x1ffff - 0x10800 + 1;
++ WRT_REG_WORD(®->mailbox0, 0xf /* MBC_READ_RAM_EXTENDED */);
++ clear_bit(MBX_INTERRUPT, &ha->mbx_cmd_flags);
++
++ for (cnt = 0; cnt < risc_code_size && rval == QLA2X00_SUCCESS; cnt++) {
++ if ((cnt % 8) == 0)
++ printk("\n%05x: ", cnt + 0x10800);
++ WRT_REG_WORD(®->mailbox1, LSW(risc_address));
++ WRT_REG_WORD(®->mailbox8, MSW(risc_address++));
++ WRT_REG_WORD(®->hccr, HCCR_SET_HOST_INT);
++
++ for (timer = 6000000; timer != 0; timer--) {
++ /* Check for pending interrupts. */
++ if ((stat = RD_REG_WORD(®->host_status_lo)) & HSR_INT) {
++ stat &= 0xff;
++
++ if (stat == 0x1 || stat == 0x2) {
++ set_bit(MBX_INTERRUPT, &ha->mbx_cmd_flags);
++
++ mb0 = RD_REG_WORD(®->mailbox0);
++ mb2 = RD_REG_WORD(®->mailbox2);
++
++ /* Release mailbox registers. */
++ WRT_REG_WORD(®->semaphore, 0);
++ WRT_REG_WORD(®->hccr, HCCR_CLR_RISC_INT);
++ break;
++ } else if (stat == 0x10 || stat == 0x11) {
++ set_bit(MBX_INTERRUPT, &ha->mbx_cmd_flags);
++
++ mb0 = RD_REG_WORD(®->mailbox0);
++ mb2 = RD_REG_WORD(®->mailbox2);
++
++ WRT_REG_WORD(®->hccr, HCCR_CLR_RISC_INT);
++ break;
++ }
++
++ /* clear this intr; it wasn't a mailbox intr */
++ WRT_REG_WORD(®->hccr, HCCR_CLR_RISC_INT);
++ }
++
++ mdelay(5);
++ }
++
++ if (test_and_clear_bit(MBX_INTERRUPT, &ha->mbx_cmd_flags)) {
++ rval = mb0 & MBS_MASK;
++ printk("%04x ", mb2);
++ } else {
++ rval = QLA2X00_FUNCTION_FAILED;
++ }
++ }
++
++ printk("\n[<==END] ISP DEBUG DUMP\n");
++
++ if (!hardware_locked)
++ spin_unlock_irqrestore(&ha->hardware_lock, flags);
++}
++
++#elif defined(ISP2200)
++
++/**
++ * qla2x00_fw_dump() - Dumps binary data from the 2200 firmware.
++ * @ha: SCSI driver HA context
++ * @hardware_locked: Called with the hardware_lock
++ */
++void
++qla2x00_dump_isp(scsi_qla_host_t *ha, int hardware_locked)
++{
++ int rval;
++ uint32_t i;
++ uint32_t cnt, timer;
++ uint32_t risc_address;
++ uint16_t risc_code_size;
++ uint16_t mb0, mb2;
++
++ uint16_t data, stat;
++ device_reg_t *reg;
++ uint16_t *dmp_reg;
++ unsigned long flags;
++
++
++ reg = ha->iobase;
++ flags = 0;
++
++ if (!hardware_locked)
++ spin_lock_irqsave(&ha->hardware_lock, flags);
++
++ printk("\n\n[==>BEG]\n");
++
++ printk("HCCR Register:\n");
++ printk("%04x\n\n", RD_REG_WORD(®->hccr));
++
++ /* Pause RISC. */
++ WRT_REG_WORD(®->hccr, HCCR_PAUSE_RISC);
++ for (cnt = 30000; cnt; cnt--) {
++ if ((RD_REG_WORD(®->hccr) & HCCR_RISC_PAUSE) != 0)
++ break;
++ SYS_DELAY(10);
++ }
++ if (!cnt)
++ goto done;
++
++ printk("PBIU Registers:\n");
++ dmp_reg = (uint16_t *)(reg + 0);
++ for (i = 0; i < 8; i++)
++ printk("%04x ", RD_REG_WORD(dmp_reg++));
++
++ printk("\n\n");
++
++ printk("Mailbox Registers:");
++ dmp_reg = (uint16_t *)((uint8_t *)reg + 0x10);
++ for (i = 0; i < 32; i++) {
++ if (i == 8)
++ dmp_reg = (uint16_t *)((uint8_t *)reg + 0xe0);
++
++ if ((i % 8) == 0)
++ printk("\n");
++ printk("%04x ", RD_REG_WORD(dmp_reg++));
++ }
++
++ printk("\n\n");
++
++ printk("DMA Registers:");
++ dmp_reg = (uint16_t *)((uint8_t *)reg + 0x20);
++ for (i = 0; i < 48; i++) {
++ if ((i % 8) == 0)
++ printk("\n");
++ printk("%04x ", RD_REG_WORD(dmp_reg++));
++ }
++
++ printk("\n\n");
++
++ WRT_REG_WORD(®->ctrl_status, 0x00);
++ printk("RISC Hardware Registers:");
++ dmp_reg = (uint16_t *)((uint8_t *)reg + 0xA0);
++ for (i = 0; i < 16; i++) {
++ if ((i % 8) == 0)
++ printk("\n");
++ printk("%04x ", RD_REG_WORD(dmp_reg++));
++ }
++
++ printk("\n\n");
++
++ WRT_REG_WORD(®->pcr, 0x2000);
++ printk("RISC GP0 Registers:");
++ dmp_reg = (uint16_t *)((uint8_t *)reg + 0x80);
++ for (i = 0; i < 16; i++) {
++ if ((i % 8) == 0)
++ printk("\n");
++ printk("%04x ", RD_REG_WORD(dmp_reg++));
++ }
++
++ printk("\n\n");
++
++ WRT_REG_WORD(®->pcr, 0x2100);
++ printk("RISC GP1 Registers:");
++ dmp_reg = (uint16_t *)((uint8_t *)reg + 0x80);
++ for (i = 0; i < 16; i++) {
++ if ((i % 8) == 0)
++ printk("\n");
++ printk("%04x ", RD_REG_WORD(dmp_reg++));
++ }
++
++ printk("\n\n");
++
++ WRT_REG_WORD(®->pcr, 0x2200);
++ printk("RISC GP2 Registers:");
++ dmp_reg = (uint16_t *)((uint8_t *)reg + 0x80);
++ for (i = 0; i < 16; i++) {
++ if ((i % 8) == 0)
++ printk("\n");
++ printk("%04x ", RD_REG_WORD(dmp_reg++));
++ }
++
++ printk("\n\n");
++
++ WRT_REG_WORD(®->pcr, 0x2300);
++ printk("RISC GP3 Registers:");
++ dmp_reg = (uint16_t *)((uint8_t *)reg + 0x80);
++ for (i = 0; i < 16; i++) {
++ if ((i % 8) == 0)
++ printk("\n");
++ printk("%04x ", RD_REG_WORD(dmp_reg++));
++ }
++
++ printk("\n\n");
++
++ WRT_REG_WORD(®->pcr, 0x2400);
++ printk("RISC GP4 Registers:");
++ dmp_reg = (uint16_t *)((uint8_t *)reg + 0x80);
++ for (i = 0; i < 16; i++) {
++ if ((i % 8) == 0)
++ printk("\n");
++ printk("%04x ", RD_REG_WORD(dmp_reg++));
++ }
++
++ printk("\n\n");
++
++ WRT_REG_WORD(®->pcr, 0x2500);
++ printk("RISC GP5 Registers:");
++ dmp_reg = (uint16_t *)((uint8_t *)reg + 0x80);
++ for (i = 0; i < 16; i++) {
++ if ((i % 8) == 0)
++ printk("\n");
++ printk("%04x ", RD_REG_WORD(dmp_reg++));
++ }
++
++ printk("\n\n");
++
++ WRT_REG_WORD(®->pcr, 0x2600);
++ printk("RISC GP6 Registers:");
++ dmp_reg = (uint16_t *)((uint8_t *)reg + 0x80);
++ for (i = 0; i < 16; i++) {
++ if ((i % 8) == 0)
++ printk("\n");
++ printk("%04x ", RD_REG_WORD(dmp_reg++));
++ }
++
++ printk("\n\n");
++
++ WRT_REG_WORD(®->pcr, 0x2700);
++ printk("RISC GP7 Registers:");
++ dmp_reg = (uint16_t *)((uint8_t *)reg + 0x80);
++ for (i = 0; i < 16; i++) {
++ if ((i % 8) == 0)
++ printk("\n");
++ printk("%04x ", RD_REG_WORD(dmp_reg++));
++ }
++
++ printk("\n\n");
++
++ WRT_REG_WORD(®->ctrl_status, 0x10);
++ printk("Frame Buffer Hardware Registers:");
++ dmp_reg = (uint16_t *)((uint8_t *)reg + 0x80);
++ for (i = 0; i < 16; i++) {
++ if ((i % 8) == 0)
++ printk("\n");
++ printk("%04x ", RD_REG_WORD(dmp_reg++));
++ }
++
++ printk("\n\n");
++
++ WRT_REG_WORD(®->ctrl_status, 0x20);
++ printk("FPM B0 Registers:");
++ dmp_reg = (uint16_t *)((uint8_t *)reg + 0x80);
++ for (i = 0; i < 64; i++) {
++ if ((i % 8) == 0)
++ printk("\n");
++ printk("%04x ", RD_REG_WORD(dmp_reg++));
++ }
++
++ printk("\n\n");
++
++ WRT_REG_WORD(®->ctrl_status, 0x30);
++ printk("FPM B1 Registers:");
++ dmp_reg = (uint16_t *)((uint8_t *)reg + 0x80);
++ for (i = 0; i < 64; i++) {
++ if ((i % 8) == 0)
++ printk("\n");
++ printk("%04x ", RD_REG_WORD(dmp_reg++));
++ }
++
++ printk("\n\n");
++
++ WRT_REG_WORD(®->ctrl_status, CSR_ISP_SOFT_RESET);
++
++ data = RD_REG_WORD(®->ctrl_status);
++ for (i = 6000000; i && data & CSR_ISP_SOFT_RESET; i--) {
++ SYS_DELAY(5);
++ data = RD_REG_WORD(®->ctrl_status);
++ }
++ data = RD_REG_WORD(®->mailbox0);
++ for (i = 6000000; i && data == MBS_BUSY; i--) {
++ SYS_DELAY(5);
++ data = RD_REG_WORD(®->mailbox0);
++ }
++
++ /* Pause RISC. */
++ WRT_REG_WORD(®->hccr, HCCR_PAUSE_RISC);
++ for (cnt = 30000; cnt; cnt--) {
++ if ((RD_REG_WORD(®->hccr) & HCCR_RISC_PAUSE) != 0)
++ break;
++ SYS_DELAY(10);
++ }
++ if (!cnt)
++ goto done;
++
++ rval = QLA2X00_SUCCESS;
++ mb0 = mb2 = 0;
++ printk("RISC SRAM:");
++ risc_address = 0x1000;
++ risc_code_size = 0xffff - 0x1000 + 1;
++ WRT_REG_WORD(®->mailbox0, MBC_READ_RAM_WORD);
++ clear_bit(MBX_INTERRUPT, &ha->mbx_cmd_flags);
++ for (cnt = 0; cnt < risc_code_size && rval == QLA2X00_SUCCESS; cnt++) {
++ if ((cnt % 8) == 0)
++ printk("\n%04x: ", cnt + 0x1000);
++ WRT_REG_WORD(®->mailbox1, (uint16_t)risc_address++);
++ WRT_REG_WORD(®->hccr, HCCR_SET_HOST_INT);
++
++ for (timer = 6000000; timer != 0; timer--) {
++ /* Check for pending interrupts. */
++ if ((stat = RD_REG_WORD(®->host_status_lo)) & HSR_INT) {
++ stat &= 0xff;
++
++ if (stat == 0x1 || stat == 0x2) {
++ set_bit(MBX_INTERRUPT, &ha->mbx_cmd_flags);
++
++ mb0 = RD_REG_WORD(®->mailbox0);
++ mb2 = RD_REG_WORD(®->mailbox2);
++
++ /* Release mailbox registers. */
++ WRT_REG_WORD(®->semaphore, 0);
++ WRT_REG_WORD(®->hccr, HCCR_CLR_RISC_INT);
++ break;
++ } else if (stat == 0x10 || stat == 0x11) {
++ set_bit(MBX_INTERRUPT, &ha->mbx_cmd_flags);
++
++ mb0 = RD_REG_WORD(®->mailbox0);
++ mb2 = RD_REG_WORD(®->mailbox2);
++
++ WRT_REG_WORD(®->hccr, HCCR_CLR_RISC_INT);
++ break;
++ }
++
++ /* clear this intr; it wasn't a mailbox intr */
++ WRT_REG_WORD(®->hccr, HCCR_CLR_RISC_INT);
++ }
++
++ mdelay(5);
++ }
++
++ if (test_and_clear_bit(MBX_INTERRUPT, &ha->mbx_cmd_flags)) {
++ rval = mb0 & MBS_MASK;
++ printk("%04x ", mb2);
++ } else {
++ rval = QLA2X00_FUNCTION_FAILED;
++ }
++ }
++
++ printk("\n[<==END] ISP DEBUG DUMP\n");
++
++done:
++ if (!hardware_locked)
++ spin_unlock_irqrestore(&ha->hardware_lock, flags);
++}
++#else /* if defined(ISP2100) */
++
++/**
++ * qla2x00_fw_dump() - Dumps binary data from the 2100 firmware.
++ * @ha: SCSI driver HA context
++ * @hardware_locked: Called with the hardware_lock
++ *
++ * NOTE: On the ISP2100, this function will not be implemented.
++ */
++void
++qla2x00_dump_isp(scsi_qla_host_t *ha, int hardware_locked)
++{
++ /* NO-OP */
++ printk("\n\n[==>BEG]\n");
++ printk("\n[<==END] ISP DEBUG DUMP\n");
++}
++
++#endif /* if defined(ISP2300) */
++
++//FIXME
++
++/****************************************************************************/
++/* Driver Debug Functions. */
++/****************************************************************************/
++
++void
++qla2x00_dump_regs(struct Scsi_Host *host)
++{
++ /* Assumes non-memory mapped I/O */
++ printk("Mailbox registers:\n");
++ printk("scsi(%d): mbox 0 0x%04x \n",
++ host->host_no, inw(host->io_port + 0x10));
++ printk("scsi(%d): mbox 1 0x%04x \n",
++ host->host_no, inw(host->io_port + 0x12));
++ printk("scsi(%d): mbox 2 0x%04x \n",
++ host->host_no, inw(host->io_port + 0x14));
++ printk("scsi(%d): mbox 3 0x%04x \n",
++ host->host_no, inw(host->io_port + 0x16));
++ printk("scsi(%d): mbox 4 0x%04x \n",
++ host->host_no, inw(host->io_port + 0x18));
++ printk("scsi(%d): mbox 5 0x%04x \n",
++ host->host_no, inw(host->io_port + 0x1a));
++}
++
++
++void
++qla2x00_dump_buffer(uint8_t * b, uint32_t size)
++{
++ uint32_t cnt;
++ uint8_t c;
++
++ printk(" 0 1 2 3 4 5 6 7 8 9 "
++ "Ah Bh Ch Dh Eh Fh\n");
++ printk("-----------------------------------------"
++ "----------------------\n");
++
++ for (cnt = 0; cnt < size;) {
++ c = *b++;
++ printk("%02x",(uint32_t) c);
++ cnt++;
++ if (!(cnt % 16))
++ printk("\n");
++ else
++ printk(" ");
++ }
++ if (cnt % 16)
++ printk("\n");
++}
++
++/**************************************************************************
++ * qla2x00_print_scsi_cmd
++ * Dumps out info about the scsi cmd and srb.
++ * Input
++ * cmd : Scsi_Cmnd
++ **************************************************************************/
++void
++qla2x00_print_scsi_cmd(Scsi_Cmnd * cmd)
++{
++ struct scsi_qla_host *ha;
++ struct Scsi_Host *host;
++ srb_t *sp;
++ struct os_lun *lq;
++ fc_port_t *fcport;
++
++ int i;
++
++ host = cmd->device->host;
++ ha = (struct scsi_qla_host *) host->hostdata;
++
++ sp = (srb_t *) CMD_SP(cmd);
++ printk("SCSI Command @= 0x%p, Handle=0x%08lx\n",
++ cmd, (u_long) CMD_HANDLE(cmd));
++ printk(" chan=%d, target = 0x%02x, lun = 0x%02x, cmd_len = 0x%02x\n",
++ SCSI_BUS_32(cmd), SCSI_TCN_32(cmd), SCSI_LUN_32(cmd),
++ cmd->cmd_len);
++ printk(" CDB = ");
++ for (i = 0; i < cmd->cmd_len; i++) {
++ printk("0x%02x ", cmd->cmnd[i]);
++ }
++ printk("\n seg_cnt =%d, retries=%d, serial_number_at_timeout=0x%lx\n",
++ cmd->use_sg,
++ cmd->retries, cmd->serial_number_at_timeout);
++ printk(" request buffer=0x%p, request buffer len=0x%x\n",
++ cmd->request_buffer,
++ cmd->request_bufflen);
++ printk(" tag=%d, flags=0x%x, transfersize=0x%x \n",
++ cmd->tag, cmd->flags, cmd->transfersize);
++ printk(" serial_number=%d, SP=%p\n", (int) cmd->serial_number,sp);
++ printk(" data direction=%d\n", cmd->sc_data_direction);
++ if (sp) {
++ printk(" sp flags=0x%x\n", sp->flags);
++ printk(" r_start=0x%lx, u_start=0x%lx, "
++ "f_start=0x%lx, state=%d\n",
++ sp->r_start, sp->u_start,
++ sp->f_start, sp->state);
++
++ lq = sp->lun_queue;
++ fcport = lq->fclun->fcport;
++ printk(" e_start= 0x%lx, ext_history= %d, "
++ "fo retry=%d, loopid =%x, port path=%d\n",
++ sp->e_start, sp->ext_history,
++ sp->fo_retry_cnt,
++ fcport->loop_id,
++ fcport->cur_path);
++ }
++}
++
++/*
++ * qla2x00_print_q_info
++ * Prints queue info
++ * Input
++ * q: lun queue
++ */
++void
++qla2x00_print_q_info(struct os_lun *q)
++{
++ printk("Queue info: flags=0x%lx\n", q->q_flag);
++}
++
++#if defined(QL_DEBUG_ROUTINES)
++/*
++ * qla2x00_formatted_dump_buffer
++ * Prints string plus buffer.
++ *
++ * Input:
++ * string = Null terminated string (no newline at end).
++ * buffer = buffer address.
++ * wd_size = word size 8, 16, 32 or 64 bits
++ * count = number of words.
++ */
++void
++qla2x00_formatted_dump_buffer(char *string, uint8_t * buffer,
++ uint8_t wd_size, uint32_t count)
++{
++ uint32_t cnt;
++ uint16_t *buf16;
++ uint32_t *buf32;
++
++ if (strcmp(string, "") != 0)
++ printk("%s\n",string);
++
++ switch (wd_size) {
++ case 8:
++ printk(" 0 1 2 3 4 5 6 7 "
++ "8 9 Ah Bh Ch Dh Eh Fh\n");
++ printk("-----------------------------------------"
++ "-------------------------------------\n");
++
++ for (cnt = 1; cnt <= count; cnt++, buffer++) {
++ printk("%02x",*buffer);
++ if (cnt % 16 == 0)
++ printk("\n");
++ else
++ printk(" ");
++ }
++ if (cnt % 16 != 0)
++ printk("\n");
++ break;
++ case 16:
++ printk(" 0 2 4 6 8 Ah "
++ " Ch Eh\n");
++ printk("-----------------------------------------"
++ "-------------\n");
++
++ buf16 = (uint16_t *) buffer;
++ for (cnt = 1; cnt <= count; cnt++, buf16++) {
++ printk("%4x",*buf16);
++
++ if (cnt % 8 == 0)
++ printk("\n");
++ else if (*buf16 < 10)
++ printk(" ");
++ else
++ printk(" ");
++ }
++ if (cnt % 8 != 0)
++ printk("\n");
++ break;
++ case 32:
++ printk(" 0 4 8 Ch\n");
++ printk("------------------------------------------\n");
++
++ buf32 = (uint32_t *) buffer;
++ for (cnt = 1; cnt <= count; cnt++, buf32++) {
++ printk("%8x", *buf32);
++
++ if (cnt % 4 == 0)
++ printk("\n");
++ else if (*buf32 < 10)
++ printk(" ");
++ else
++ printk(" ");
++ }
++ if (cnt % 4 != 0)
++ printk("\n");
++ break;
++ default:
++ break;
++ }
++}
++
++#endif
++
++
++#if STOP_ON_ERROR
++/**************************************************************************
++* qla2x00_panic
++*
++**************************************************************************/
++static void
++qla2x00_panic(char *cp, struct Scsi_Host *host)
++{
++ struct scsi_qla_host *ha;
++ long *fp;
++
++ ha = (struct scsi_qla_host *) host->hostdata;
++ DEBUG2(ql2x_debug_print = 1;);
++ printk("qla2100 - PANIC: %s\n", cp);
++ printk("Current time=0x%lx\n", jiffies);
++ printk("Number of pending commands =0x%lx\n", ha->actthreads);
++ printk("Number of queued commands =0x%lx\n", ha->qthreads);
++ printk("Number of free entries = (%d)\n", ha->req_q_cnt);
++ printk("Request Queue @ 0x%lx, Response Queue @ 0x%lx\n",
++ ha->request_dma, ha->response_dma);
++ printk("Request In Ptr %d\n", ha->req_ring_index);
++ fp = (long *) &ha->flags;
++ printk("HA flags =0x%lx\n", *fp);
++ qla2x00_dump_requests(ha);
++ qla2x00_dump_regs(host);
++ cli();
++ for (;;) {
++ udelay(2);
++ barrier();
++ /* cpu_relax();*/
++ }
++ sti();
++}
++
++#endif
++
++/**************************************************************************
++* qla2x00_dump_requests
++*
++**************************************************************************/
++void
++qla2x00_dump_requests(scsi_qla_host_t *ha)
++{
++
++ Scsi_Cmnd *cp;
++ srb_t *sp;
++ int i;
++
++ printk("Outstanding Commands on controller:\n");
++
++ for (i = 1; i < MAX_OUTSTANDING_COMMANDS; i++) {
++ if ((sp = ha->outstanding_cmds[i]) == NULL)
++ continue;
++ if ((cp = sp->cmd) == NULL)
++ continue;
++
++ printk("(%d): Pid=%d, sp flags=0x%lx, cmd=0x%p\n",
++ i,
++ (int)sp->cmd->serial_number,
++ (long)sp->flags,CMD_SP(sp->cmd));
++ }
++}
+--- /dev/null Thu Apr 11 07:25:15 2002
++++ linux-2.5.73-n9560/drivers/scsi/qla2xxx/qla_dbg.h Thu Jul 3 15:34:42 2003
+@@ -0,0 +1,138 @@
++/******************************************************************************
++ * QLOGIC LINUX SOFTWARE
++ *
++ * QLogic ISP2x00 device driver for Linux 2.5.x
++ * Copyright (C) 2003 Qlogic Corporation
++ * (www.qlogic.com)
++ *
++ * This program is free software; you can redistribute it and/or modify it
++ * under the terms of the GNU General Public License as published by the
++ * Free Software Foundation; either version 2, or (at your option) any
++ * later version.
++ *
++ * This program is distributed in the hope that it will be useful, but
++ * WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ * General Public License for more details.
++ *
++ ******************************************************************************/
++
++#undef ENTER_TRACE
++/*
++* Macros use for debugging the driver.
++*/
++#if defined(ENTER_TRACE)
++#define ENTER(x) do { printk("qla2100 : Entering %s()\n", x); } while (0)
++#define LEAVE(x) do { printk("qla2100 : Leaving %s()\n", x); } while (0)
++#define ENTER_INTR(x) do { printk("qla2100 : Entering %s()\n", x); } while (0)
++#define LEAVE_INTR(x) do { printk("qla2100 : Leaving %s()\n", x); } while (0)
++#else
++#define ENTER(x) do {} while (0)
++#define LEAVE(x) do {} while (0)
++#define ENTER_INTR(x) do {} while (0)
++#define LEAVE_INTR(x) do {} while (0)
++#endif
++
++#if DEBUG_QLA2100
++#define DEBUG(x) do {x;} while (0);
++#else
++#define DEBUG(x) do {} while (0);
++#endif
++
++#if defined(QL_DEBUG_LEVEL_1)
++#define DEBUG1(x) do {x;} while (0);
++#else
++#define DEBUG1(x) do {} while (0);
++#endif
++
++#if defined(QL_DEBUG_LEVEL_2)
++#define DEBUG2(x) do {x;} while (0);
++#define DEBUG2_3(x) do {x;} while (0);
++#define DEBUG2_3_11(x) do {x;} while (0);
++#define DEBUG2_9_10(x) do {x;} while (0);
++#define DEBUG2_11(x) do {x;} while (0);
++#else
++#define DEBUG2(x) do {} while (0);
++#endif
++
++#if defined(QL_DEBUG_LEVEL_3)
++#define DEBUG3(x) do {x;} while (0);
++#define DEBUG2_3(x) do {x;} while (0);
++#define DEBUG2_3_11(x) do {x;} while (0);
++#define DEBUG3_11(x) do {x;} while (0);
++#else
++#define DEBUG3(x) do {} while (0);
++ #if !defined(QL_DEBUG_LEVEL_2)
++ #define DEBUG2_3(x) do {} while (0);
++ #endif
++#endif
++
++#if defined(QL_DEBUG_LEVEL_4)
++#define DEBUG4(x) do {x;} while (0);
++#else
++#define DEBUG4(x) do {} while (0);
++#endif
++
++#if defined(QL_DEBUG_LEVEL_5)
++#define DEBUG5(x) do {x;} while (0);
++#else
++#define DEBUG5(x) do {} while (0);
++#endif
++
++#if defined(QL_DEBUG_LEVEL_7)
++#define DEBUG7(x) do {x;} while (0);
++#else
++#define DEBUG7(x) do {} while (0);
++#endif
++
++#if defined(QL_DEBUG_LEVEL_9)
++#define DEBUG9(x) do {x;} while (0);
++#define DEBUG9_10(x) do {x;} while (0);
++#define DEBUG2_9_10(x) do {x;} while (0);
++#else
++#define DEBUG9(x) do {} while (0);
++#endif
++
++#if defined(QL_DEBUG_LEVEL_10)
++#define DEBUG10(x) do {x;} while (0);
++#define DEBUG2_9_10(x) do {x;} while (0);
++#define DEBUG9_10(x) do {x;} while (0);
++#else
++#define DEBUG10(x) do {} while (0);
++ #if !defined(DEBUG2_9_10)
++ #define DEBUG2_9_10(x) do {} while (0);
++ #endif
++ #if !defined(DEBUG9_10)
++ #define DEBUG9_10(x) do {} while (0);
++ #endif
++#endif
++
++#if defined(QL_DEBUG_LEVEL_11)
++#define DEBUG11(x) do{x;} while(0);
++#if !defined(DEBUG2_11)
++#define DEBUG2_11(x) do{x;} while(0);
++#endif
++#if !defined(DEBUG2_3_11)
++#define DEBUG2_3_11(x) do{x;} while(0);
++#endif
++#if !defined(DEBUG3_11)
++#define DEBUG3_11(x) do{x;} while(0);
++#endif
++#else
++#define DEBUG11(x) do{} while(0);
++ #if !defined(QL_DEBUG_LEVEL_2)
++ #define DEBUG2_11(x) do{} while(0);
++ #if !defined(QL_DEBUG_LEVEL_3)
++ #define DEBUG2_3_11(x) do{} while(0);
++ #endif
++ #endif
++ #if !defined(QL_DEBUG_LEVEL_3)
++ #define DEBUG3_11(x) do{} while(0);
++ #endif
++#endif
++
++#if defined(QL_DEBUG_LEVEL_12)
++#define DEBUG12(x) do {x;} while (0);
++#else
++#define DEBUG12(x) do {} while (0);
++#endif
+--- /dev/null Thu Apr 11 07:25:15 2002
++++ linux-2.5.73-n9560/drivers/scsi/qla2xxx/qla_def.h Thu Jul 3 15:34:42 2003
+@@ -0,0 +1,2484 @@
++/********************************************************************************
++* QLOGIC LINUX SOFTWARE
++*
++* QLogic ISP2x00 device driver for Linux 2.5.x
++* Copyright (C) 2003 Qlogic Corporation
++* (www.qlogic.com)
++*
++* This program is free software; you can redistribute it and/or modify it
++* under the terms of the GNU General Public License as published by the
++* Free Software Foundation; either version 2, or (at your option) any
++* later version.
++*
++* This program is distributed in the hope that it will be useful, but
++* WITHOUT ANY WARRANTY; without even the implied warranty of
++* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++* General Public License for more details.
++**
++******************************************************************************/
++
++#ifndef __QLA_DEF_H
++#define __QLA_DEF_H
++
++#if defined(qla23xx)
++ #define MAILBOX_REGISTER_COUNT 32
++ #define ISP_NAME "23xx"
++ #define DRIVER_NAME "qla2300"
++ #define ISP2300
++ #undef ISP2322
++#elif defined(qla22xx)
++ #define MAILBOX_REGISTER_COUNT 32
++ #define ISP_NAME "22xx"
++ #define DRIVER_NAME "qla2200"
++ #define ISP2200
++#else /* qla21xx */
++ #define MAILBOX_REGISTER_COUNT 8
++ #define ISP_NAME "21xx"
++ #define DRIVER_NAME "qla2100"
++ #define ISP2100
++#endif
++
++/*****************************************/
++/* ISP Boards supported by this driver */
++/*****************************************/
++#define QLA2X00_VENDOR_ID 0x1077
++
++#define QLA2100_DEVICE_ID 0x2100
++
++#define QLA2200_DEVICE_ID 0x2200
++#define QLA2200A_RISC_ROM_VER 4
++
++#define QLA2300_DEVICE_ID 0x2300
++#define QLA2312_DEVICE_ID 0x2312
++#define QLA2322_DEVICE_ID 0x2322
++#define FPM_2300 6
++#define FPM_2310 7
++
++#include "qla_settings.h"
++#include "exioct.h"
++#include "inioct.h"
++
++/*
++ * Data bit definitions
++ */
++#define BIT_0 0x1
++#define BIT_1 0x2
++#define BIT_2 0x4
++#define BIT_3 0x8
++#define BIT_4 0x10
++#define BIT_5 0x20
++#define BIT_6 0x40
++#define BIT_7 0x80
++#define BIT_8 0x100
++#define BIT_9 0x200
++#define BIT_10 0x400
++#define BIT_11 0x800
++#define BIT_12 0x1000
++#define BIT_13 0x2000
++#define BIT_14 0x4000
++#define BIT_15 0x8000
++#define BIT_16 0x10000
++#define BIT_17 0x20000
++#define BIT_18 0x40000
++#define BIT_19 0x80000
++#define BIT_20 0x100000
++#define BIT_21 0x200000
++#define BIT_22 0x400000
++#define BIT_23 0x800000
++#define BIT_24 0x1000000
++#define BIT_25 0x2000000
++#define BIT_26 0x4000000
++#define BIT_27 0x8000000
++#define BIT_28 0x10000000
++#define BIT_29 0x20000000
++#define BIT_30 0x40000000
++#define BIT_31 0x80000000
++
++#define LSB(x) ((uint8_t)(x))
++#define MSB(x) ((uint8_t)((uint16_t)(x) >> 8))
++
++#define LSW(x) ((uint16_t)(x))
++#define MSW(x) ((uint16_t)((uint32_t)(x) >> 16))
++
++#define LSD(x) ((uint32_t)((uint64_t)(x)))
++#define MSD(x) ((uint32_t)((uint64_t)(x) >> 32))
++
++
++/*
++ * I/O register
++*/
++/* #define MEMORY_MAPPED_IO */ /* Enable memory mapped I/O */
++#undef MEMORY_MAPPED_IO /* Disable memory mapped I/O */
++
++#if defined(MEMORY_MAPPED_IO)
++#define RD_REG_BYTE(addr) readb(addr)
++#define RD_REG_WORD(addr) readw(addr)
++#define RD_REG_DWORD(addr) readl(addr)
++#define WRT_REG_BYTE(addr, data) writeb(data,addr)
++#define WRT_REG_WORD(addr, data) writew(data,addr)
++#define WRT_REG_DWORD(addr, data) writel(data,addr)
++#else /* MEMORY_MAPPED_IO */
++#define RD_REG_BYTE(addr) (inb((unsigned long)addr))
++#define RD_REG_WORD(addr) (inw((unsigned long)addr))
++#define RD_REG_DWORD(addr) (inl((unsigned long)addr))
++#define WRT_REG_BYTE(addr, data) (outb(data,(unsigned long)addr))
++#define WRT_REG_WORD(addr, data) (outw(data,(unsigned long)addr))
++#define WRT_REG_DWORD(addr, data) (outl(data,(unsigned long)addr))
++#endif /* MEMORY_MAPPED_IO */
++
++/*
++ * Fibre Channel device definitions.
++ */
++#define WWN_SIZE 8 /* Size of WWPN, WWN & WWNN */
++#define MAX_FIBRE_DEVICES 256
++#define MAX_FIBRE_LUNS 256
++#define MAX_RSCN_COUNT 10
++#define MAX_HOST_COUNT 16
++
++/*
++ * Host adapter default definitions.
++ */
++#define MAX_BUSES 1 /* We only have one bus today */
++#define MAX_TARGETS_2100 MAX_FIBRE_DEVICES
++#define MAX_TARGETS_2200 MAX_FIBRE_DEVICES
++#define MAX_TARGETS MAX_FIBRE_DEVICES
++#define MIN_LUNS 8
++#define MAX_LUNS MAX_FIBRE_LUNS
++#define MAX_CMDS_PER_LUN 255
++#define MAX_SRBS 4096
++
++/*
++ * Fibre Channel device definitions.
++ */
++#define LAST_LOCAL_LOOP_ID 0x7d
++#define SNS_FL_PORT 0x7e
++#define FABRIC_CONTROLLER 0x7f
++#define SIMPLE_NAME_SERVER 0x80
++#define SNS_FIRST_LOOP_ID 0x81
++#define LAST_SNS_LOOP_ID 0xfe
++#define MANAGEMENT_SERVER 0xfe
++#define BROADCAST 0xff
++#define SNS_ACCEPT 0x0280 /* 8002 swapped */
++#define SNS_REJECT 0x0180 /* 8001 swapped */
++
++/* Loop ID's used as database flags, must be higher than any valid Loop ID */
++#define PORT_UNUSED 0x100 /* Port never been used. */
++#define PORT_AVAILABLE 0x101 /* Device does not exist on port. */
++#define PORT_NEED_MAP 0x102
++#define PORT_LOST_ID 0x200
++#define PORT_LOGIN_NEEDED 0x400
++
++/*
++ * Timeout timer counts in seconds
++ */
++#define QLA2100_WDG_TIME_QUANTUM 5 /* In seconds */
++#define PORT_RETRY_TIME 2
++#define LOOP_DOWN_TIMEOUT 60
++#define LOOP_DOWN_TIME 120 /* 240 */
++#define LOOP_DOWN_RESET (LOOP_DOWN_TIME - 30)
++
++/* Maximum outstanding commands in ISP queues (1-65535) */
++#define MAX_OUTSTANDING_COMMANDS 1024
++
++/* ISP request and response entry counts (37-65535) */
++#define REQUEST_ENTRY_CNT 1024 /* Number of request entries. */
++#if defined(ISP2100) || defined(ISP2200)
++#define RESPONSE_ENTRY_CNT 64 /* Number of response entries.*/
++#else
++#define RESPONSE_ENTRY_CNT 512 /* Number of response entries.*/
++#endif
++
++/* Number of segments 1 - 65535 */
++#define SG_SEGMENTS 32 /* Cmd entry + 6 continuations */
++
++/*
++ * SCSI Request Block
++ */
++typedef struct srb {
++ struct list_head list;
++
++ Scsi_Cmnd *cmd; /* Linux SCSI command pkt */
++ struct scsi_qla_host *ha; /* ha this SP is queued on */
++
++ uint8_t dir; /* direction of transfer */
++ uint8_t unused1;
++
++ uint16_t flags; /* Status flags - defined below */
++
++ uint16_t state;
++#define SRB_FREE_STATE 0 /* Request returned back */
++#define SRB_PENDING_STATE 1 /* Request being queued in LUN Q */
++#define SRB_ACTIVE_STATE 2 /* Request in Active Array */
++#define SRB_DONE_STATE 3 /* Request Queued in Done Queue */
++#define SRB_RETRY_STATE 4 /* Request in Retry Queue */
++#define SRB_SUSPENDED_STATE 5 /* Request in suspended state */
++#define SRB_NO_QUEUE_STATE 6 /* Request is in between states */
++#define SRB_ACTIVE_TIMEOUT_STATE 7 /* Request in Active Array but timed out */
++#define SRB_FAILOVER_STATE 8 /* Request in Failover Queue */
++#define SRB_SCSI_RETRY_STATE 9 /* Request in Scsi Retry Queue */
++
++ uint8_t used; /* used by allocation code */
++ uint8_t ref_num; /* reference SRB number */
++ uint16_t magic; /* qlogic magic number */
++#define SRB_MAGIC 0x10CB
++
++ u_long host_no; /* Host number of allocating host */
++ struct timer_list timer; /* used to timeout command */
++ dma_addr_t saved_dma_handle; /* for unmap of single transfers */
++
++ atomic_t ref_count; /* reference count for this structure */
++
++ /* Target/LUN queue pointers. */
++ struct os_tgt *tgt_queue; /* ptr to visible ha's target */
++ struct os_lun *lun_queue; /* ptr to visible ha's lun */
++ struct fc_lun *fclun; /* FC LUN context pointer. */
++
++ /* Raw completion info for use by failover ? */
++ uint8_t fo_retry_cnt; /* Retry count this request */
++ uint8_t err_id; /* error id */
++ uint8_t cmd_length; /* command length */
++ uint8_t unused3;
++
++ int delay; /* delay in seconds */
++ int ext_history; /* */
++
++ u_long e_start; /* jiffies at start of extend timeout */
++ u_long r_start; /* jiffies at start of request */
++ u_long u_start; /* jiffies when sent to F/W */
++ u_long f_start; /* ra 10/29/01*/
++ /*jiffies when put in failover queue*/
++
++ uint32_t resid; /* Residual transfer length */
++ uint16_t sense_len; /* Sense data length */
++ uint32_t request_sense_length;
++ void *request_sense_ptr;
++
++#if defined(IOCB_THROLLE_USAGE)
++ uint32_t iocb_cnt;
++#endif
++} srb_t;
++
++/*
++ * SRB flag definitions
++ */
++#define SRB_TIMEOUT BIT_0 /* Command timed out */
++#define SRB_DMA_VALID BIT_1 /* Command sent to ISP */
++#define SRB_WATCHDOG BIT_2 /* Command on watchdog list */
++#define SRB_ABORT_PENDING BIT_3 /* Command abort sent to device */
++
++#define SRB_ABORTED BIT_4 /* Command aborted command already */
++#define SRB_RETRY BIT_5 /* Command needs retrying */
++#define SRB_GOT_SENSE BIT_6 /* Command has sense data */
++#define SRB_FAILOVER BIT_7 /* Command in failover state */
++
++#define SRB_BUSY BIT_8 /* Command is in busy retry state */
++#define SRB_FO_CANCEL BIT_9 /* Command don't need to do failover */
++#define SRB_IOCTL BIT_10 /* IOCTL command. */
++#define SRB_ISP_STARTED BIT_11 /* Command sent to ISP. */
++
++#define SRB_ISP_COMPLETED BIT_12 /* ISP finished with command */
++
++
++/*
++ * ISP PCI Configuration Register Set
++ */
++typedef volatile struct {
++ uint16_t vendor_id; /* 0x0 */
++ uint16_t device_id; /* 0x2 */
++ uint16_t command; /* 0x4 */
++ uint16_t status; /* 0x6 */
++ uint8_t revision_id; /* 0x8 */
++ uint8_t programming_interface; /* 0x9 */
++ uint8_t sub_class; /* 0xa */
++ uint8_t base_class; /* 0xb */
++ uint8_t cache_line; /* 0xc */
++ uint8_t latency_timer; /* 0xd */
++ uint8_t header_type; /* 0xe */
++ uint8_t bist; /* 0xf */
++ uint32_t base_port; /* 0x10 */
++ uint32_t mem_base_addr; /* 0x14 */
++ uint32_t base_addr[4]; /* 0x18-0x24 */
++ uint32_t reserved_1[2]; /* 0x28-0x2c */
++ uint16_t expansion_rom; /* 0x30 */
++ uint32_t reserved_2[2]; /* 0x34-0x38 */
++ uint8_t interrupt_line; /* 0x3c */
++ uint8_t interrupt_pin; /* 0x3d */
++ uint8_t min_grant; /* 0x3e */
++ uint8_t max_latency; /* 0x3f */
++} config_reg_t __attribute__((packed));
++
++
++/*
++ * ISP I/O Register Set structure definitions.
++ */
++typedef volatile struct {
++ volatile uint16_t flash_address; /* Flash BIOS address */
++ volatile uint16_t flash_data; /* Flash BIOS data */
++ uint16_t unused_1[1]; /* Gap */
++ volatile uint16_t ctrl_status; /* Control/Status */
++#define CSR_FLASH_64K_BANK BIT_3 /* Flash upper 64K bank select */
++#define CSR_FLASH_ENABLE BIT_1 /* Flash BIOS Read/Write enable */
++#define CSR_ISP_SOFT_RESET BIT_0 /* ISP soft reset */
++
++ volatile uint16_t ictrl; /* Interrupt control */
++#define ICR_EN_INT BIT_15 /* ISP enable interrupts. */
++#define ICR_EN_RISC BIT_3 /* ISP enable RISC interrupts. */
++
++ volatile uint16_t istatus; /* Interrupt status */
++#define ISR_RISC_INT BIT_3 /* RISC interrupt */
++
++ volatile uint16_t semaphore; /* Semaphore */
++ volatile uint16_t nvram; /* NVRAM register. */
++#define NVR_DESELECT 0
++#define NVR_CLOCK BIT_0
++#define NVR_SELECT BIT_1
++#define NVR_DATA_OUT BIT_2
++#define NVR_DATA_IN BIT_3
++#define NVR_BUSY BIT_15
++
++#if defined(ISP2100) || defined(ISP2200)
++ volatile uint16_t mailbox0;
++ volatile uint16_t mailbox1;
++ volatile uint16_t mailbox2;
++ volatile uint16_t mailbox3;
++ volatile uint16_t mailbox4;
++#define ISP_REQ_Q_IN(reg) (&(reg)->mailbox4)
++#define ISP_REQ_Q_OUT(reg) (&(reg)->mailbox4)
++ volatile uint16_t mailbox5;
++#define ISP_RSP_Q_IN(reg) (&(reg)->mailbox5)
++#define ISP_RSP_Q_OUT(reg) (&(reg)->mailbox5)
++ volatile uint16_t mailbox6;
++ volatile uint16_t mailbox7;
++ uint16_t unused_2[0x3b]; /* Gap */
++#else /* defined(ISP2300) */
++ volatile uint16_t req_q_in; /* Request Queue In-Pointer */
++#define ISP_REQ_Q_IN(reg) (&(reg)->req_q_in)
++ volatile uint16_t req_q_out; /* Request Queue Out-Pointer */
++#define ISP_REQ_Q_OUT(reg) (&(reg)->req_q_out)
++ volatile uint16_t rsp_q_in; /* Response Queue In-Pointer */
++#define ISP_RSP_Q_IN(reg) (&(reg)->rsp_q_in)
++ volatile uint16_t rsp_q_out; /* Response Queue Out-Pointer */
++#define ISP_RSP_Q_OUT(reg) (&(reg)->rsp_q_out)
++
++ volatile uint16_t host_status_lo; /* RISC to Host Status Low */
++#define HSR_INT BIT_15 /* RISC int */
++#define HSR_RISC_PAUSED BIT_8 /* RISC Paused */
++ volatile uint16_t host_status_hi; /* RISC to Host Status High */
++#define HSR_ROM_MB_CMD_COMP 0x01 /* ROM mailbox cmd complete */
++#define HSR_ROM_MB_CMD_ERROR 0x02 /*ROM mailbox cmd unsuccessful*/
++#define HSR_MB_CMD_COMP 0x10 /* Mailbox cmd complete */
++#define HSR_MB_CMD_ERROR 0x11 /* Mailbox cmd unsuccessful */
++#define HSR_ASYNC_EVENT 0x12 /* Asynchronous event */
++#define HSR_RESPONSE_QUEUE_UP 0x13 /* Response Queue update */
++#define HSR_RIO_ONE 0x15 /* RIO one 16 bit handle */
++#define HSR_FAST_SCSI_COMP 0x16 /* Fast Post SCSI complete */
++
++ volatile uint16_t host_semaphore; /* Host to Host Semaphore */
++ uint16_t unused_3[0x11]; /* Gap */
++ volatile uint16_t mailbox0;
++ volatile uint16_t mailbox1;
++ volatile uint16_t mailbox2;
++ volatile uint16_t mailbox3;
++ volatile uint16_t mailbox4;
++ volatile uint16_t mailbox5;
++ volatile uint16_t mailbox6;
++ volatile uint16_t mailbox7;
++ volatile uint16_t mailbox8;
++ volatile uint16_t mailbox9;
++ volatile uint16_t mailbox10;
++ volatile uint16_t mailbox11;
++ volatile uint16_t mailbox12;
++ volatile uint16_t mailbox13;
++ volatile uint16_t mailbox14;
++ volatile uint16_t mailbox15;
++ volatile uint16_t mailbox16;
++ volatile uint16_t mailbox17;
++ volatile uint16_t mailbox18;
++ volatile uint16_t mailbox19;
++ volatile uint16_t mailbox20;
++ volatile uint16_t mailbox21;
++ volatile uint16_t mailbox22;
++ volatile uint16_t mailbox23;
++ volatile uint16_t mailbox24;
++ volatile uint16_t mailbox25;
++ volatile uint16_t mailbox26;
++ volatile uint16_t mailbox27;
++ volatile uint16_t mailbox28;
++ volatile uint16_t mailbox29;
++ volatile uint16_t mailbox30;
++ volatile uint16_t mailbox31;
++ volatile uint16_t fb_cmd;
++ uint16_t unused_4[0xa]; /* Gap */
++#endif /* defined(ISP2100) || defined(ISP2200) */
++ volatile uint16_t fpm_diag_config;
++ uint16_t unused_5[0x6]; /* Gap */
++ volatile uint16_t pcr; /* Processor Control Register. */
++ uint16_t unused_6[0x5]; /* Gap */
++ volatile uint16_t mctr; /* Memory Configuration and Timing. */
++ uint16_t unused_7[0x3]; /* Gap */
++#if defined(ISP2100) || defined(ISP2200)
++ volatile uint16_t fb_cmd;
++#else /* defined(ISP2300) */
++ uint16_t unused_11;
++#endif /* defined(ISP2100) || defined(ISP2200) */
++ uint16_t unused_8[0x3]; /* Gap */
++ volatile uint16_t hccr; /* Host command & control register. */
++#define HCCR_HOST_INT BIT_7 /* Host interrupt bit */
++#define HCCR_RISC_PAUSE BIT_5 /* Pause mode bit */
++ /* HCCR commands */
++#define HCCR_RESET_RISC 0x1000 /* Reset RISC */
++#define HCCR_PAUSE_RISC 0x2000 /* Pause RISC */
++#define HCCR_RELEASE_RISC 0x3000 /* Release RISC from reset. */
++#define HCCR_SET_HOST_INT 0x5000 /* Set host interrupt */
++#define HCCR_CLR_HOST_INT 0x6000 /* Clear HOST interrupt */
++#define HCCR_CLR_RISC_INT 0x7000 /* Clear RISC interrupt */
++#define HCCR_DISABLE_PARITY_PAUSE 0x4001 /* Disable parity error RISC pause. */
++#define HCCR_ENABLE_PARITY 0xA000 /* Enable PARITY interrupt */
++
++ uint16_t unused_9[5]; /* Gap */
++ volatile uint16_t gpiod; /* GPIO Data register. */
++ volatile uint16_t gpioe; /* GPIO Enable register. */
++#if defined(ISP2200)
++ uint16_t unused_10[8]; /* Gap */
++ volatile uint16_t mailbox8;
++ volatile uint16_t mailbox9;
++ volatile uint16_t mailbox10;
++ volatile uint16_t mailbox11;
++ volatile uint16_t mailbox12;
++ volatile uint16_t mailbox13;
++ volatile uint16_t mailbox14;
++ volatile uint16_t mailbox15;
++ volatile uint16_t mailbox16;
++ volatile uint16_t mailbox17;
++ volatile uint16_t mailbox18;
++ volatile uint16_t mailbox19;
++ volatile uint16_t mailbox20;
++ volatile uint16_t mailbox21;
++ volatile uint16_t mailbox22;
++ volatile uint16_t mailbox23; /* Also probe reg. */
++#endif /* defined(ISP2200) */
++} device_reg_t;
++
++typedef struct {
++ uint32_t out_mb; /* outbound from driver */
++ uint32_t in_mb; /* Incoming from RISC */
++ uint16_t mb[MAILBOX_REGISTER_COUNT];
++ long buf_size;
++ void *bufp;
++ uint32_t tov;
++ uint8_t flags;
++#define MBX_DMA_IN BIT_0
++#define MBX_DMA_OUT BIT_1
++#define IOCTL_CMD BIT_2
++} mbx_cmd_t;
++
++#define MBX_TOV_SECONDS 30
++
++/*
++ * ISP product identification definitions in mailboxes after reset.
++ */
++#define PROD_ID_1 0x4953
++#define PROD_ID_2 0x0000
++#define PROD_ID_2a 0x5020
++#define PROD_ID_3 0x2020
++#define PROD_ID_4 0x1
++#define PROD_ID_4a 0x2
++
++/*
++ * ISP mailbox Self-Test status codes
++ */
++#define MBS_FRM_ALIVE 0 /* Firmware Alive. */
++#define MBS_CHKSUM_ERR 1 /* Checksum Error. */
++#define MBS_BUSY 4 /* Busy. */
++
++/*
++ * ISP mailbox command complete status codes
++ */
++#define MBS_CMD_CMP 0x4000 /* Command Complete. */
++#define MBS_INV_CMD 0x4001 /* Invalid Command. */
++#define MBS_HOST_INF_ERR 0x4002 /* Host Interface Error. */
++#define MBS_TEST_FAILED 0x4003 /* Test Failed. */
++#define MBS_CMD_ERR 0x4005 /* Command Error. */
++#define MBS_CMD_PARAM_ERR 0x4006 /* Command Parameter Error. */
++#define MBS_FATAL_ERROR 0xF000 /* Command Fatal Error. */
++//TODO consolidate these definitions
++#define MBS_FIRMWARE_ALIVE 0x0000
++#define MBS_COMMAND_COMPLETE 0x4000
++#define MBS_INVALID_COMMAND 0x4001
++
++/* QLogic subroutine status definitions */
++#define QL_STATUS_SUCCESS 0
++#define QL_STATUS_ERROR 1
++#define QL_STATUS_FATAL_ERROR 2
++#define QL_STATUS_RESOURCE_ERROR 3
++#define QL_STATUS_LOOP_ID_IN_USE 4
++#define QL_STATUS_NO_DATA 5
++#define QL_STATUS_TIMEOUT 6
++/*
++ * ISP mailbox asynchronous event status codes
++ */
++#define MBA_ASYNC_EVENT 0x8000 /* Asynchronous event. */
++#define MBA_RESET 0x8001 /* Reset Detected. */
++#define MBA_SYSTEM_ERR 0x8002 /* System Error. */
++#define MBA_REQ_TRANSFER_ERR 0x8003 /* Request Transfer Error. */
++#define MBA_RSP_TRANSFER_ERR 0x8004 /* Response Transfer Error. */
++#define MBA_WAKEUP_THRES 0x8005 /* Request Queue Wake-up. */
++#define MBA_LIP_OCCURRED 0x8010 /* Loop Initialization Procedure */
++ /* occurred. */
++#define MBA_LOOP_UP 0x8011 /* FC Loop UP. */
++#define MBA_LOOP_DOWN 0x8012 /* FC Loop Down. */
++#define MBA_LIP_RESET 0x8013 /* LIP reset occurred. */
++#define MBA_PORT_UPDATE 0x8014 /* Port Database update. */
++#define MBA_SCR_UPDATE 0x8015 /* State Change Registration. */
++#define MBA_RSCN_UPDATE MBA_SCR_UPDATE
++#define MBA_SCSI_COMPLETION 0x8020 /* SCSI Command Complete. */
++#define MBA_CTIO_COMPLETION 0x8021 /* CTIO Complete. */
++#if !defined(ISP2100)
++#define MBA_LINK_MODE_UP 0x8030 /* FC Link Mode UP. */
++#define MBA_UPDATE_CONFIG 0x8036 /* FC Update Configuration. */
++#endif
++
++/*
++ * ISP mailbox commands
++ */
++#define MBC_LOAD_RAM 1 /* Load RAM. */
++#define MBC_EXECUTE_FIRMWARE 2 /* Execute firmware. */
++#define MBC_WRITE_RAM_WORD 4 /* Write RAM word. */
++#define MBC_READ_RAM_WORD 5 /* Read RAM word. */
++#define MBC_MAILBOX_REGISTER_TEST 6 /* Wrap incoming mailboxes */
++#define MBC_VERIFY_CHECKSUM 7 /* Verify checksum. */
++#define MBC_ABOUT_FIRMWARE 8 /* Get firmware revision. */
++#define MBC_LOAD_RAM_A64 9 /* Load RAM by 64-bit address. */
++#define MBC_DUMP_RAM 0xA /* READ BACK FW */
++#define MBC_LOAD_RAM_EXTENDED 0xB /* Load Extended RAM */
++#define MBC_DUMP_SRAM 0xC /* Dump SRAM */
++#define MBC_WRITE_RAM_WORD_EXTENDED 0xD /* Write RAM word extended */
++#define MBC_IOCB_EXECUTE 0x12 /* Execute an IOCB command */
++#define MBC_ABORT_COMMAND 0x15 /* Abort IOCB command. */
++#define MBC_ABORT_DEVICE 0x16 /* Abort device (ID/LUN). */
++#define MBC_ABORT_TARGET 0x17 /* Abort target (ID). */
++#define MBC_TARGET_RESET_ALL 0x18 /* Reset all local targets. */
++#define MBC_GET_ADAPTER_LOOP_ID 0x20 /* Get loop id of ISP2100. */
++#define MBC_GET_RETRY_COUNT 0x22 /* GET RATOV & retry count */
++#define MBC_GET_FIRMWARE_OPTIONS 0x28 /* Get firmware options. */
++#define MBC_SET_RETRY_COUNT 0x32 /* SET RATOV & retry count. */
++#define MBC_SET_FIRMWARE_OPTIONS 0x38 /* Set firmware options. */
++#define MBC_GET_RESOURCE_COUNTS 0x42 /* GET Resource counts */
++#define MBC_DIAGNOSTIC_LOOP_BACK 0x45 /* Perform LoopBack diagnostic */
++#define MBC_ENHANCED_GET_PORT_DATABASE 0x47 /* Get port database. */
++#define MBC_IOCB_EXECUTE_A64 0x54 /* Execute an IOCB command (64bit) */
++#define MBC_SEND_RNID_ELS 0x57 /* Send RNID ELS request */
++#define MBC_SET_RNID_PARAMS 0x59 /* Set RNID parameters */
++#define MBC_GET_RNID_PARAMS 0x5a /* Get RNID parameters */
++#define MBC_INITIALIZE_FIRMWARE 0x60 /* Initialize firmware */
++#define MBC_INITIATE_LIP 0x62 /* Initiate Loop Initialization */
++ /* Procedure */
++#define MBC_GET_FCAL_MAP 0x63 /* Get FC/AL position map */
++#define MBC_GET_PORT_DATABASE 0x64 /* Get port database. */
++#define MBC_TARGET_RESET 0x66 /* Target reset. */
++#define MBC_GET_FIRMWARE_STATE 0x69 /* Get firmware state. */
++#define MBC_GET_PORT_NAME 0x6a /* Get port name. */
++#define MBC_GET_LINK_STATUS 0x6b /* Get link status. */
++#define MBC_LIP_RESET 0x6c /* LIP reset. */
++#define MBC_SEND_SNS_COMMAND 0x6e /* Send Simple Name Server command. */
++#define MBC_LOGIN_FABRIC_PORT 0x6f /* Login fabric port. */
++#define MBC_LOGOUT_FABRIC_PORT 0x71 /* Logout fabric port. */
++#define MBC_LIP_FULL_LOGIN 0x72 /* Full login LIP. */
++#define MBC_LOGIN_LOOP_PORT 0x74 /* Login Loop Port. */
++#define MBC_GET_PORT_LIST 0x75 /* Get port list. */
++#define MBC_INITIALIZE_RECEIVE_QUEUE 0x77 /* Initialize receive queue */
++#define MBC_SEND_FARP_REQ_COMMAND 0x78 /* FARP request. */
++#define MBC_SEND_FARP_REPLY_COMMAND 0x79 /* FARP reply. */
++#define MBC_PORT_LOOP_NAME_LIST 0x7C /* Get port/node name list. */
++#define MBC_SEND_LFA_COMMAND 0x7D /* Send Loop Fabric Address */
++#define MBC_LUN_RESET 0x7E /* Send LUN reset */
++
++/* Firmware return data sizes */
++#define FCAL_MAP_SIZE 128
++
++/* Mailbox bit definitions for out_mb and in_mb */
++#define MBX_31 BIT_31
++#define MBX_30 BIT_30
++#define MBX_29 BIT_29
++#define MBX_28 BIT_28
++#define MBX_27 BIT_27
++#define MBX_26 BIT_26
++#define MBX_25 BIT_25
++#define MBX_24 BIT_24
++#define MBX_23 BIT_23
++#define MBX_22 BIT_22
++#define MBX_21 BIT_21
++#define MBX_20 BIT_20
++#define MBX_19 BIT_19
++#define MBX_18 BIT_18
++#define MBX_17 BIT_17
++#define MBX_16 BIT_16
++#define MBX_15 BIT_15
++#define MBX_14 BIT_14
++#define MBX_13 BIT_13
++#define MBX_12 BIT_12
++#define MBX_11 BIT_11
++#define MBX_10 BIT_10
++#define MBX_9 BIT_9
++#define MBX_8 BIT_8
++#define MBX_7 BIT_7
++#define MBX_6 BIT_6
++#define MBX_5 BIT_5
++#define MBX_4 BIT_4
++#define MBX_3 BIT_3
++#define MBX_2 BIT_2
++#define MBX_1 BIT_1
++#define MBX_0 BIT_0
++
++/*
++ * Firmware state codes from get firmware state mailbox command
++ */
++#define FSTATE_CONFIG_WAIT 0
++#define FSTATE_WAIT_AL_PA 1
++#define FSTATE_WAIT_LOGIN 2
++#define FSTATE_READY 3
++#define FSTATE_LOSS_OF_SYNC 4
++#define FSTATE_ERROR 5
++#define FSTATE_REINIT 6
++#define FSTATE_NON_PART 7
++
++#define FSTATE_CONFIG_CORRECT 0
++#define FSTATE_P2P_RCV_LIP 1
++#define FSTATE_P2P_CHOOSE_LOOP 2
++#define FSTATE_P2P_RCV_UNIDEN_LIP 3
++#define FSTATE_FATAL_ERROR 4
++#define FSTATE_LOOP_BACK_CONN 5
++
++/*
++ * Port Database structure definition
++ * Little endian except where noted.
++ */
++#define PORT_DATABASE_SIZE 128 /* bytes */
++typedef struct {
++ uint8_t options;
++ uint8_t control;
++ uint8_t master_state;
++ uint8_t slave_state;
++#define PD_STATE_DISCOVERY 0
++#define PD_STATE_WAIT_DISCOVERY_ACK 1
++#define PD_STATE_PORT_LOGIN 2
++#define PD_STATE_WAIT_PORT_LOGIN_ACK 3
++#define PD_STATE_PROCESS_LOGIN 4
++#define PD_STATE_WAIT_PROCESS_LOGIN_ACK 5
++#define PD_STATE_PORT_LOGGED_IN 6
++#define PD_STATE_PORT_UNAVAILABLE 7
++#define PD_STATE_PROCESS_LOGOUT 8
++#define PD_STATE_WAIT_PROCESS_LOGOUT_ACK 9
++#define PD_STATE_PORT_LOGOUT 10
++#define PD_STATE_WAIT_PORT_LOGOUT_ACK 11
++ uint8_t reserved[2];
++ uint8_t hard_address;
++ uint8_t reserved_1;
++ uint8_t port_id[4];
++ uint8_t node_name[8]; /* Big endian. */
++ uint8_t port_name[8]; /* Big endian. */
++ uint16_t execution_throttle;
++ uint16_t execution_count;
++ uint8_t reset_count;
++ uint8_t reserved_2;
++ uint16_t resource_allocation;
++ uint16_t current_allocation;
++ uint16_t queue_head;
++ uint16_t queue_tail;
++ uint16_t transmit_execution_list_next;
++ uint16_t transmit_execution_list_previous;
++ uint16_t common_features;
++ uint16_t total_concurrent_sequences;
++ uint16_t RO_by_information_category;
++ uint8_t recipient;
++ uint8_t initiator;
++ uint16_t receive_data_size;
++ uint16_t concurrent_sequences;
++ uint16_t open_sequences_per_exchange;
++ uint16_t lun_abort_flags;
++ uint16_t lun_stop_flags;
++ uint16_t stop_queue_head;
++ uint16_t stop_queue_tail;
++ uint16_t port_retry_timer;
++ uint16_t next_sequence_id;
++ uint16_t frame_count;
++ uint16_t PRLI_payload_length;
++ uint8_t prli_svc_param_word_0[2]; /* Big endian */
++ /* Bits 15-0 of word 0 */
++ uint8_t prli_svc_param_word_3[2]; /* Big endian */
++ /* Bits 15-0 of word 3 */
++ uint16_t loop_id;
++ uint16_t extended_lun_info_list_pointer;
++ uint16_t extended_lun_stop_list_pointer;
++} port_database_t;
++
++/*
++ * ISP Initialization Control Block.
++ */
++
++#define SO_DATA_RATE_1GB 0
++#define SO_DATA_RATE_2GB 1
++#define SO_DATA_RATE_AUTO 2
++
++/*
++ * ISP Initialization Control Block.
++ * Little endian except where noted.
++ */
++#define ICB_VERSION 1
++typedef struct {
++ uint8_t version;
++ uint8_t reserved_1;
++
++ /*
++ * LSB BIT 0 = Enable Hard Loop Id
++ * LSB BIT 1 = Enable Fairness
++ * LSB BIT 2 = Enable Full-Duplex
++ * LSB BIT 3 = Enable Fast Posting
++ * LSB BIT 4 = Enable Target Mode
++ * LSB BIT 5 = Disable Initiator Mode
++ * LSB BIT 6 = Enable ADISC
++ * LSB BIT 7 = Enable Target Inquiry Data
++ *
++ * MSB BIT 0 = Enable PDBC Notify
++ * MSB BIT 1 = Non Participating LIP
++ * MSB BIT 2 = Descending Loop ID Search
++ * MSB BIT 3 = Acquire Loop ID in LIPA
++ * MSB BIT 4 = Stop PortQ on Full Status
++ * MSB BIT 5 = Full Login after LIP
++ * MSB BIT 6 = Node Name Option
++ * MSB BIT 7 = Ext IFWCB enable bit
++ */
++ uint8_t firmware_options[2];
++
++ uint16_t frame_payload_size;
++ uint16_t max_iocb_allocation;
++ uint16_t execution_throttle;
++ uint8_t retry_count;
++ uint8_t retry_delay; /* unused */
++ uint8_t port_name[WWN_SIZE]; /* Big endian. */
++ uint16_t hard_address;
++ uint8_t inquiry_data;
++ uint8_t login_timeout;
++ uint8_t node_name[WWN_SIZE]; /* Big endian. */
++
++ uint16_t request_q_outpointer;
++ uint16_t response_q_inpointer;
++ uint16_t request_q_length;
++ uint16_t response_q_length;
++ uint32_t request_q_address[2];
++ uint32_t response_q_address[2];
++
++ uint16_t lun_enables;
++ uint8_t command_resource_count;
++ uint8_t immediate_notify_resource_count;
++ uint16_t timeout;
++ uint8_t reserved_2[2];
++
++ /*
++ * LSB BIT 0 = Timer Operation mode bit 0
++ * LSB BIT 1 = Timer Operation mode bit 1
++ * LSB BIT 2 = Timer Operation mode bit 2
++ * LSB BIT 3 = Timer Operation mode bit 3
++ * LSB BIT 4 = Init Config Mode bit 0
++ * LSB BIT 5 = Init Config Mode bit 1
++ * LSB BIT 6 = Init Config Mode bit 2
++ * LSB BIT 7 = Enable Non part on LIHA failure
++ *
++ * MSB BIT 0 = Enable class 2
++ * MSB BIT 1 = Enable ACK0
++ * MSB BIT 2 =
++ * MSB BIT 3 =
++ * MSB BIT 4 = FC Tape Enable
++ * MSB BIT 5 = Enable FC Confirm
++ * MSB BIT 6 = Enable command queuing in target mode
++ * MSB BIT 7 = No Logo On Link Down
++ */
++ uint8_t add_firmware_options[2];
++
++ uint8_t response_accumulation_timer;
++ uint8_t interrupt_delay_timer;
++
++ /*
++ * LSB BIT 0 = Enable Read xfr_rdy
++ * LSB BIT 1 = Soft ID only
++ * LSB BIT 2 =
++ * LSB BIT 3 =
++ * LSB BIT 4 = FCP RSP Payload [0]
++ * LSB BIT 5 = FCP RSP Payload [1] / Sbus enable - 2200
++ * LSB BIT 6 = Enable Out-of-Order frame handling
++ * LSB BIT 7 = Disable Automatic PLOGI on Local Loop
++ *
++ * MSB BIT 0 = Sbus enable - 2300
++ * MSB BIT 1 =
++ * MSB BIT 2 =
++ * MSB BIT 3 =
++ * MSB BIT 4 =
++ * MSB BIT 5 = enable 50 ohm termination
++ * MSB BIT 6 = Data Rate (2300 only)
++ * MSB BIT 7 = Data Rate (2300 only)
++ */
++ uint8_t special_options[2];
++
++ uint8_t reserved_3[26];
++} init_cb_t;
++
++/*
++ * ISP Get/Set Target Parameters mailbox command control flags.
++ */
++
++/*
++ * Get Link Status mailbox command return buffer.
++ */
++typedef struct {
++ uint32_t link_fail_cnt;
++ uint32_t loss_sync_cnt;
++ uint32_t loss_sig_cnt;
++ uint32_t prim_seq_err_cnt;
++ uint32_t inval_xmit_word_cnt;
++ uint32_t inval_crc_cnt;
++} link_stat_t;
++
++/*
++ * NVRAM Command values.
++ */
++#define NV_START_BIT BIT_2
++#define NV_WRITE_OP (BIT_26+BIT_24)
++#define NV_READ_OP (BIT_26+BIT_25)
++#define NV_ERASE_OP (BIT_26+BIT_25+BIT_24)
++#define NV_MASK_OP (BIT_26+BIT_25+BIT_24)
++#define NV_DELAY_COUNT 10
++
++/*
++ * QLogic ISP2100, ISP2200 and ISP2300 NVRAM structure definition.
++ */
++typedef struct {
++ /*
++ * NVRAM header
++ */
++ uint8_t id[4];
++ uint8_t nvram_version;
++ uint8_t reserved_0;
++
++ /*
++ * NVRAM RISC parameter block
++ */
++ uint8_t parameter_block_version;
++ uint8_t reserved_1;
++
++ /*
++ * LSB BIT 0 = Enable Hard Loop Id
++ * LSB BIT 1 = Enable Fairness
++ * LSB BIT 2 = Enable Full-Duplex
++ * LSB BIT 3 = Enable Fast Posting
++ * LSB BIT 4 = Enable Target Mode
++ * LSB BIT 5 = Disable Initiator Mode
++ * LSB BIT 6 = Enable ADISC
++ * LSB BIT 7 = Enable Target Inquiry Data
++ *
++ * MSB BIT 0 = Enable PDBC Notify
++ * MSB BIT 1 = Non Participating LIP
++ * MSB BIT 2 = Descending Loop ID Search
++ * MSB BIT 3 = Acquire Loop ID in LIPA
++ * MSB BIT 4 = Stop PortQ on Full Status
++ * MSB BIT 5 = Full Login after LIP
++ * MSB BIT 6 = Node Name Option
++ * MSB BIT 7 = Ext IFWCB enable bit
++ */
++ uint8_t firmware_options[2];
++
++ uint16_t frame_payload_size;
++ uint16_t max_iocb_allocation;
++ uint16_t execution_throttle;
++ uint8_t retry_count;
++ uint8_t retry_delay; /* unused */
++ uint8_t port_name[WWN_SIZE]; /* Big endian. */
++ uint16_t hard_address;
++ uint8_t inquiry_data;
++ uint8_t login_timeout;
++ uint8_t node_name[WWN_SIZE]; /* Big endian. */
++
++ /*
++ * LSB BIT 0 = Timer Operation mode bit 0
++ * LSB BIT 1 = Timer Operation mode bit 1
++ * LSB BIT 2 = Timer Operation mode bit 2
++ * LSB BIT 3 = Timer Operation mode bit 3
++ * LSB BIT 4 = Init Config Mode bit 0
++ * LSB BIT 5 = Init Config Mode bit 1
++ * LSB BIT 6 = Init Config Mode bit 2
++ * LSB BIT 7 = Enable Non part on LIHA failure
++ *
++ * MSB BIT 0 = Enable class 2
++ * MSB BIT 1 = Enable ACK0
++ * MSB BIT 2 =
++ * MSB BIT 3 =
++ * MSB BIT 4 = FC Tape Enable
++ * MSB BIT 5 = Enable FC Confirm
++ * MSB BIT 6 = Enable command queuing in target mode
++ * MSB BIT 7 = No Logo On Link Down
++ */
++ uint8_t add_firmware_options[2];
++
++ uint8_t response_accumulation_timer;
++ uint8_t interrupt_delay_timer;
++
++ /*
++ * LSB BIT 0 = Enable Read xfr_rdy
++ * LSB BIT 1 = Soft ID only
++ * LSB BIT 2 =
++ * LSB BIT 3 =
++ * LSB BIT 4 = FCP RSP Payload [0]
++ * LSB BIT 5 = FCP RSP Payload [1] / Sbus enable - 2200
++ * LSB BIT 6 = Enable Out-of-Order frame handling
++ * LSB BIT 7 = Disable Automatic PLOGI on Local Loop
++ *
++ * MSB BIT 0 = Sbus enable - 2300
++ * MSB BIT 1 =
++ * MSB BIT 2 =
++ * MSB BIT 3 =
++ * MSB BIT 4 =
++ * MSB BIT 5 = enable 50 ohm termination
++ * MSB BIT 6 = Data Rate (2300 only)
++ * MSB BIT 7 = Data Rate (2300 only)
++ */
++ uint8_t special_options[2];
++
++ /* Reserved for expanded RISC parameter block */
++ uint8_t reserved_2[24];
++
++ /*
++ * LSB BIT 0 = Output Swing 1G bit 0
++ * LSB BIT 1 = Output Swing 1G bit 1
++ * LSB BIT 2 = Output Swing 1G bit 2
++ * LSB BIT 3 = Output Emphasis 1G bit 0
++ * LSB BIT 4 = Output Emphasis 1G bit 1
++ * LSB BIT 5 = Output Swing 2G bit 0
++ * LSB BIT 6 = Output Swing 2G bit 1
++ * LSB BIT 7 = Output Swing 2G bit 2
++ *
++ * MSB BIT 0 = Output Emphasis 2G bit 0
++ * MSB BIT 1 = Output Emphasis 2G bit 1
++ * MSB BIT 2 = Output Enable
++ * MSB BIT 3 =
++ * MSB BIT 4 =
++ * MSB BIT 5 =
++ * MSB BIT 6 =
++ * MSB BIT 7 =
++ */
++ uint8_t seriallink_options[2];
++
++ /*
++ * NVRAM host parameter block
++ *
++ * LSB BIT 0 = Enable spinup delay
++ * LSB BIT 1 = Disable BIOS
++ * LSB BIT 2 = Enable Memory Map BIOS
++ * LSB BIT 3 = Enable Selectable Boot
++ * LSB BIT 4 = Disable RISC code load
++ * LSB BIT 5 = Set cache line size 1
++ * LSB BIT 6 = PCI Parity Disable
++ * LSB BIT 7 = Enable extended logging
++ *
++ * MSB BIT 0 = Enable 64bit addressing
++ * MSB BIT 1 = Enable lip reset
++ * MSB BIT 2 = Enable lip full login
++ * MSB BIT 3 = Enable target reset
++ * MSB BIT 4 = Enable database storage
++ * MSB BIT 5 = Enable cache flush read
++ * MSB BIT 6 = Enable database load
++ * MSB BIT 7 = Enable alternate WWN
++ */
++ uint8_t host_p[2];
++
++ uint8_t boot_node_name[WWN_SIZE];
++ uint8_t boot_lun_number;
++ uint8_t reset_delay;
++ uint8_t port_down_retry_count;
++ uint8_t boot_id_number;
++ uint16_t max_luns_per_target;
++ uint8_t fcode_boot_port_name[WWN_SIZE];
++ uint8_t alternate_port_name[WWN_SIZE];
++ uint8_t alternate_node_name[WWN_SIZE];
++
++ /*
++ * BIT 0 = Boot Zoning
++ * BIT 1 = Alt-Boot Enable
++ * BIT 2 = Report SCSI Path
++ * BIT 3 = unused
++ * BIT 4 = unused
++ * BIT 5 = unused
++ * BIT 6 = unused
++ * BIT 7 = unused
++ */
++ uint8_t efi_parameters;
++
++ uint8_t link_down_timeout;
++
++ uint8_t adapter_id_0[4];
++ uint8_t adapter_id_1[4];
++ uint8_t adapter_id_2[4];
++ uint8_t adapter_id_3[4];
++
++ uint8_t alt1_boot_node_name[WWN_SIZE];
++ uint16_t alt1_boot_lun_number;
++ uint8_t alt2_boot_node_name[WWN_SIZE];
++ uint16_t alt2_boot_lun_number;
++ uint8_t alt3_boot_node_name[WWN_SIZE];
++ uint16_t alt3_boot_lun_number;
++ uint8_t alt4_boot_node_name[WWN_SIZE];
++ uint16_t alt4_boot_lun_number;
++ uint8_t alt5_boot_node_name[WWN_SIZE];
++ uint16_t alt5_boot_lun_number;
++ uint8_t alt6_boot_node_name[WWN_SIZE];
++ uint16_t alt6_boot_lun_number;
++ uint8_t alt7_boot_node_name[WWN_SIZE];
++ uint16_t alt7_boot_lun_number;
++
++ uint8_t reserved_3[2];
++
++ uint8_t oem_id;
++ uint8_t oem_specific[31];
++
++ /*
++ * NVRAM Adapter Features offset 232-239
++ *
++ * LSB BIT 0 = External GBIC
++ * LSB BIT 1 = Risc RAM parity
++ * LSB BIT 2 = Buffer Plus Module
++ * LSB BIT 3 = Multi Chip Adapter
++ * LSB BIT 4 = Internal connector
++ * LSB BIT 5 =
++ * LSB BIT 6 =
++ * LSB BIT 7 =
++ *
++ * MSB BIT 0 =
++ * MSB BIT 1 =
++ * MSB BIT 2 =
++ * MSB BIT 3 =
++ * MSB BIT 4 =
++ * MSB BIT 5 =
++ * MSB BIT 6 =
++ * MSB BIT 7 =
++ */
++ uint8_t adapter_features[2];
++
++ uint8_t reserved_4[16];
++
++ /* Subsystem vendor ID for ISP2200 */
++ uint16_t subsystem_vendor_id_2200;
++
++ /* Subsystem device ID for ISP2200 */
++ uint16_t subsystem_device_id_2200;
++
++ uint8_t reserved_5;
++ uint8_t checksum;
++} nvram_t;
++
++
++/*
++ * ISP queue - command entry structure definition.
++ */
++#define MAX_CMDSZ 16 /* SCSI maximum CDB size. */
++typedef struct {
++ uint8_t entry_type; /* Entry type. */
++#define COMMAND_TYPE 0x11 /* Command entry */
++ uint8_t entry_count; /* Entry count. */
++ uint8_t sys_define; /* System defined. */
++ uint8_t entry_status; /* Entry Status. */
++ uint32_t handle; /* System handle. */
++#if defined(EXTENDED_IDS)
++ uint16_t target; /* SCSI ID */
++#else
++ uint8_t reserved;
++ uint8_t target; /* SCSI ID */
++#endif
++ uint16_t lun; /* SCSI LUN */
++ uint16_t control_flags; /* Control flags. */
++#define CF_HEAD_TAG BIT_1
++#define CF_ORDERED_TAG BIT_2
++#define CF_SIMPLE_TAG BIT_3
++#define CF_READ BIT_5
++#define CF_WRITE BIT_6
++ uint16_t reserved_1;
++ uint16_t timeout; /* Command timeout. */
++ uint16_t dseg_count; /* Data segment count. */
++ uint8_t scsi_cdb[MAX_CMDSZ]; /* SCSI command words. */
++ uint32_t byte_count; /* Total byte count. */
++ uint32_t dseg_0_address; /* Data segment 0 address. */
++ uint32_t dseg_0_length; /* Data segment 0 length. */
++ uint32_t dseg_1_address; /* Data segment 1 address. */
++ uint32_t dseg_1_length; /* Data segment 1 length. */
++ uint32_t dseg_2_address; /* Data segment 2 address. */
++ uint32_t dseg_2_length; /* Data segment 2 length. */
++} cmd_entry_t;
++
++/*
++ * ISP queue - 64-Bit addressing, command entry structure definition.
++ */
++#define COMMAND_A64_TYPE 0x19 /* Command A64 entry */
++typedef struct {
++ uint8_t entry_type; /* Entry type. */
++ uint8_t entry_count; /* Entry count. */
++ uint8_t sys_define; /* System defined. */
++ uint8_t entry_status; /* Entry Status. */
++ uint32_t handle; /* System handle. */
++#if defined(EXTENDED_IDS)
++ uint16_t target; /* SCSI ID */
++#else
++ uint8_t reserved;
++ uint8_t target; /* SCSI ID */
++#endif
++ uint16_t lun; /* SCSI LUN */
++ uint16_t control_flags; /* Control flags. */
++ uint16_t reserved_1;
++ uint16_t timeout; /* Command timeout. */
++ uint16_t dseg_count; /* Data segment count. */
++ uint8_t scsi_cdb[MAX_CMDSZ]; /* SCSI command words. */
++ uint32_t byte_count; /* Total byte count. */
++ uint32_t dseg_0_address[2]; /* Data segment 0 address. */
++ uint32_t dseg_0_length; /* Data segment 0 length. */
++ uint32_t dseg_1_address[2]; /* Data segment 1 address. */
++ uint32_t dseg_1_length; /* Data segment 1 length. */
++} cmd_a64_entry_t, request_t;
++
++/*
++ * ISP queue - continuation entry structure definition.
++ */
++#define CONTINUE_TYPE 0x02 /* Continuation entry. */
++typedef struct {
++ uint8_t entry_type; /* Entry type. */
++ uint8_t entry_count; /* Entry count. */
++ uint8_t sys_define; /* System defined. */
++ uint8_t entry_status; /* Entry Status. */
++ uint32_t reserved;
++ uint32_t dseg_0_address; /* Data segment 0 address. */
++ uint32_t dseg_0_length; /* Data segment 0 length. */
++ uint32_t dseg_1_address; /* Data segment 1 address. */
++ uint32_t dseg_1_length; /* Data segment 1 length. */
++ uint32_t dseg_2_address; /* Data segment 2 address. */
++ uint32_t dseg_2_length; /* Data segment 2 length. */
++ uint32_t dseg_3_address; /* Data segment 3 address. */
++ uint32_t dseg_3_length; /* Data segment 3 length. */
++ uint32_t dseg_4_address; /* Data segment 4 address. */
++ uint32_t dseg_4_length; /* Data segment 4 length. */
++ uint32_t dseg_5_address; /* Data segment 5 address. */
++ uint32_t dseg_5_length; /* Data segment 5 length. */
++ uint32_t dseg_6_address; /* Data segment 6 address. */
++ uint32_t dseg_6_length; /* Data segment 6 length. */
++} cont_entry_t;
++
++/*
++ * ISP queue - 64-Bit addressing, continuation entry structure definition.
++ */
++#define CONTINUE_A64_TYPE 0x0A /* Continuation A64 entry. */
++typedef struct {
++ uint8_t entry_type; /* Entry type. */
++ uint8_t entry_count; /* Entry count. */
++ uint8_t sys_define; /* System defined. */
++ uint8_t entry_status; /* Entry Status. */
++ uint32_t dseg_0_address[2]; /* Data segment 0 address. */
++ uint32_t dseg_0_length; /* Data segment 0 length. */
++ uint32_t dseg_1_address[2]; /* Data segment 1 address. */
++ uint32_t dseg_1_length; /* Data segment 1 length. */
++ uint32_t dseg_2_address[2]; /* Data segment 2 address. */
++ uint32_t dseg_2_length; /* Data segment 2 length. */
++ uint32_t dseg_3_address[2]; /* Data segment 3 address. */
++ uint32_t dseg_3_length; /* Data segment 3 length. */
++ uint32_t dseg_4_address[2]; /* Data segment 4 address. */
++ uint32_t dseg_4_length; /* Data segment 4 length. */
++} cont_a64_entry_t;
++
++/*
++ * ISP queue - status entry structure definition.
++ */
++#define STATUS_TYPE 0x03 /* Status entry. */
++#define STS_SENSE_BUF_LEN 32
++typedef struct {
++ uint8_t entry_type; /* Entry type. */
++ uint8_t entry_count; /* Entry count. */
++ uint8_t sys_define; /* System defined. */
++ uint8_t entry_status; /* Entry Status. */
++#define RF_INV_E_ORDER BIT_5 /* Invalid entry order. */
++#define RF_INV_E_COUNT BIT_4 /* Invalid entry count. */
++#define RF_INV_E_PARAM BIT_3 /* Invalid entry parameter. */
++#define RF_INV_E_TYPE BIT_2 /* Invalid entry type. */
++#define RF_BUSY BIT_1 /* Busy */
++ uint32_t handle; /* System handle. */
++ uint16_t scsi_status; /* SCSI status. */
++ uint16_t comp_status; /* Completion status. */
++ uint16_t state_flags; /* State flags. */
++ uint16_t status_flags; /* Status flags. */
++#define IOCBSTAT_SF_LOGO BIT_13 /* Logo after 2 abts w/no */
++ /* response (2 sec) */
++ uint16_t rsp_info_len; /* Response Info Length. */
++ uint16_t req_sense_length; /* Request sense data length. */
++ uint32_t residual_length; /* Residual transfer length. */
++ uint8_t rsp_info[8]; /* FCP response information. */
++ /* Request sense data. */
++ uint8_t req_sense_data[STS_SENSE_BUF_LEN];
++} sts_entry_t, response_t;
++
++/*
++ * ISP queue - marker entry structure definition.
++ */
++#define MARKER_TYPE 0x04 /* Marker entry. */
++typedef struct {
++ uint8_t entry_type; /* Entry type. */
++ uint8_t entry_count; /* Entry count. */
++ uint8_t sys_define; /* System defined. */
++ uint8_t entry_status; /* Entry Status. */
++ uint32_t sys_define_2; /* System defined. */
++#if defined(EXTENDED_IDS)
++ uint16_t target; /* SCSI ID */
++#else
++ uint8_t reserved;
++ uint8_t target; /* SCSI ID */
++#endif
++ uint8_t modifier; /* Modifier (7-0). */
++#define MK_SYNC_ID_LUN 0 /* Synchronize ID/LUN */
++#define MK_SYNC_ID 1 /* Synchronize ID */
++#define MK_SYNC_ALL 2 /* Synchronize all ID/LUN */
++#define MK_SYNC_LIP 3 /* Synchronize all ID/LUN, */
++ /* clear port changed, */
++ /* use sequence number. */
++ uint8_t reserved_1;
++ uint16_t sequence_number; /* Sequence number of event */
++ uint16_t lun; /* SCSI LUN */
++ uint8_t reserved_2[48];
++} mrk_entry_t;
++
++/*
++ * ISP queue - Status Contination entry structure definition.
++ */
++#define STATUS_CONT_TYPE 0x10 /* Status contination entry */
++#define EXT_STS_SENSE_BUF_LEN 60
++typedef struct {
++ uint8_t entry_type; /* Entry type. */
++ uint8_t entry_count; /* Entry count. */
++ uint8_t reserved;
++ uint8_t entry_status; /* Entry Status. */
++ /* Extended sense data. */
++ uint8_t req_sense_data[EXT_STS_SENSE_BUF_LEN];
++} sts_cont_entry_t;
++
++/*
++ * ISP queue - Management Server entry structure definition.
++ */
++#define MS_IOCB_TYPE 0x29 /* Management Server IOCB entry */
++typedef struct {
++ uint8_t entry_type; /* Entry type. */
++ uint8_t entry_count; /* Entry count. */
++ uint8_t sys_define; /* System defined. */
++ uint8_t entry_status; /* Entry Status. */
++ uint32_t handle1; /* System handle. */
++#if defined(EXTENDED_IDS)
++ uint16_t loop_id;
++#else
++ uint8_t reserved;
++ uint8_t loop_id;
++#endif
++ uint16_t status;
++ uint16_t control_flags; /* Control flags. */
++ uint16_t reserved2;
++ uint16_t timeout;
++ uint16_t cmd_dsd_count;
++ uint16_t total_dsd_count;
++ uint8_t type;
++ uint8_t r_ctl;
++ uint16_t rx_id;
++ uint16_t reserved3;
++ uint32_t handle2;
++ uint32_t rsp_bytecount;
++ uint32_t req_bytecount;
++ uint32_t dseg_req_address[2]; /* Data segment 0 address. */
++ uint32_t dseg_req_length; /* Data segment 0 length. */
++ uint32_t dseg_rsp_address[2]; /* Data segment 1 address. */
++ uint32_t dseg_rsp_length; /* Data segment 1 length. */
++} ms_iocb_entry_t;
++
++
++/*
++ * ISP queue - Mailbox Command entry structure definition.
++ */
++#define ET_MAILBOX_COMMAND 0x39
++struct mbx_entry {
++ uint8_t entry_type;
++
++ uint8_t entry_count;
++ uint8_t sys_define1;
++ /* Use sys_define1 for source type */
++#define SOURCE_SCSI 0x00
++#define SOURCE_IP 0x01
++#define SOURCE_VI 0x02
++#define SOURCE_SCTP 0x03
++#define SOURCE_MP 0x04
++#define SOURCE_MPIOCTL 0x05
++
++ uint8_t entry_status;
++
++ uint32_t handle;
++#if defined(EXTENDED_IDS)
++ uint16_t loop_id;
++#else
++ uint8_t reserved_1;
++ uint8_t loop_id;
++#endif
++
++ uint16_t status;
++ uint16_t state_flags;
++ uint16_t status_flags;
++ uint16_t sys_define2[4];
++ uint16_t mb0;
++ /* Mailbox command completion status */
++#define MBS_PORT_ID_IN_USE 0x4007
++#define MBS_LOOP_ID_IN_USE 0x4008
++#define MBS_ALL_LOOP_IDS_IN_USE 0x4009
++#define MBS_NAME_SERVER_NOT_LOGGED_IN 0x400A
++
++ uint16_t mb1;
++ /* Fabric login mailbox command option bits */
++#define MBC_NO_PLOGI_IF_LOGGED_IN 0x01
++#define MBC_NO_PROCESS_LOGIN 0x02
++
++ uint16_t mb2;
++ uint16_t mb3;
++ uint16_t mb6;
++ uint16_t mb7;
++#if defined(EXTENDED_IDS)
++ uint16_t mb9;
++ uint16_t mb10;
++ uint32_t reserved_2[6];
++#else
++ uint32_t reserved_2[7];
++#endif
++};
++
++/*
++ * ISP request and response queue entry sizes
++ */
++#define RESPONSE_ENTRY_SIZE (sizeof(response_t))
++#define REQUEST_ENTRY_SIZE (sizeof(request_t))
++
++/*
++ * ISP status entry - completion status definitions.
++ */
++#define CS_COMPLETE 0x0 /* No errors */
++#define CS_INCOMPLETE 0x1 /* Incomplete transfer of cmd. */
++#define CS_DMA 0x2 /* A DMA direction error. */
++#define CS_TRANSPORT 0x3 /* Transport error. */
++#define CS_RESET 0x4 /* SCSI bus reset occurred */
++#define CS_ABORTED 0x5 /* System aborted command. */
++#define CS_TIMEOUT 0x6 /* Timeout error. */
++#define CS_DATA_OVERRUN 0x7 /* Data overrun. */
++#define CS_DATA_UNDERRUN 0x15 /* Data Underrun. */
++#define CS_ABORT_MSG 0xE /* Target rejected abort msg. */
++#define CS_DEV_RESET_MSG 0x12 /* Target rejected dev rst msg. */
++#define CS_PORT_UNAVAILABLE 0x28 /* Port unavailable (selection timeout) */
++#define CS_PORT_LOGGED_OUT 0x29 /* Port Logged Out */
++#define CS_PORT_CONFIG_CHG 0x2A /* Port Configuration Changed */
++#define CS_PORT_BUSY 0x2B /* Port Busy */
++#define CS_BAD_PAYLOAD 0x80 /* Driver defined */
++#define CS_UNKNOWN 0x81 /* Driver defined */
++#define CS_RETRY 0x82 /* Driver defined */
++#define CS_QUEUE_FULL 0x1c /* Target queue full*/
++
++/*
++ * ISP status entry - SCSI status byte bit definitions.
++ */
++#define SS_MASK 0xfff /* Mask off reserved bits BIT_12-BIT_15*/
++#define SS_RESIDUAL_UNDER BIT_11
++#define SS_RESIDUAL_OVER BIT_10
++#define SS_SENSE_LEN_VALID BIT_9
++#if defined(ISP2100)
++#define SS_RESIDUAL_LEN_VALID BIT_8
++#else
++#define SS_RESPONSE_INFO_LEN_VALID BIT_8
++#endif
++
++#define SS_RESERVE_CONFLICT (BIT_4 | BIT_3)
++#define SS_BUSY_CONDITION BIT_3
++#define SS_CONDITION_MET BIT_2
++#define SS_CHECK_CONDITION BIT_1
++
++/*
++ * 24 bit port ID type definition.
++ */
++typedef union {
++ uint32_t b24 : 24;
++
++ struct {
++ uint8_t d_id[3];
++ uint8_t rsvd_1;
++ } r;
++
++ struct {
++ uint8_t al_pa;
++ uint8_t area;
++ uint8_t domain;
++ uint8_t rsvd_1;
++ } b;
++} port_id_t;
++
++/*
++ * Switch info gathering structure.
++ */
++typedef struct {
++ port_id_t d_id;
++ uint8_t node_name[WWN_SIZE];
++ uint8_t port_name[WWN_SIZE];
++ uint32_t type;
++#define SW_TYPE_SCSI BIT_0
++#define SW_TYPE_IP BIT_1
++} sw_info_t;
++
++//TODO This should be removed (simplified fcport list)
++typedef struct
++{
++ port_id_t d_id;
++ uint8_t name[WWN_SIZE];
++ uint8_t wwn[WWN_SIZE]; /* port name */
++ uint16_t loop_id;
++ uint16_t flag;
++ /* flags bits defined as follows */
++#define DEV_PUBLIC BIT_0
++#define DEV_LUNMASK_SET BIT_1 /* some LUNs masked for this device */
++#define DEV_TAPE_DEVICE BIT_2
++#define DEV_RELOGIN BIT_3
++#define DEV_PORT_DOWN BIT_4
++#define DEV_CONFIGURED BIT_5
++#define DEV_ABSENCE BIT_6
++#define DEV_RETURN BIT_7
++#define DEV_INITIATOR BIT_8
++#define DEV_FLAG_VSA BIT_9
++ int port_login_retry_count;
++ uint8_t port_timer;
++}fcdev_t;
++
++/* New device name list struct; used in configure_fabric. */
++struct new_dev {
++ port_id_t d_id;
++ uint8_t name[WWN_SIZE];
++ uint8_t wwn[WWN_SIZE]; /* port name */
++};
++#define LOGOUT_PERFORMED 0x01
++
++
++/*
++ * Inquiry command structure.
++ */
++#define INQ_SCSI_OPCODE 0x12
++#define INQ_DATA_SIZE 36
++
++/*
++ * Inquiry mailbox IOCB packet definition.
++ */
++typedef struct {
++ union {
++ cmd_a64_entry_t cmd;
++ sts_entry_t rsp;
++ } p;
++ uint8_t inq[INQ_DATA_SIZE];
++} inq_cmd_rsp_t;
++
++/*
++ * Report LUN command structure.
++ */
++#define RPT_LUN_SCSI_OPCODE 0xA0
++#define CHAR_TO_SHORT(a, b) (uint16_t)((uint8_t)b << 8 | (uint8_t)a)
++
++typedef struct {
++ uint32_t len;
++ uint32_t rsrv;
++} rpt_hdr_t;
++
++typedef struct {
++ struct {
++ uint8_t b : 6;
++ uint8_t address_method : 2;
++ } msb;
++ uint8_t lsb;
++ uint8_t unused[6];
++} rpt_lun_t;
++
++typedef struct {
++ rpt_hdr_t hdr;
++ rpt_lun_t lst[MAX_LUNS];
++} rpt_lun_lst_t;
++
++/*
++ * Report Lun mailbox IOCB packet definition.
++ */
++typedef struct {
++ union {
++ cmd_a64_entry_t cmd;
++ sts_entry_t rsp;
++ } p;
++ rpt_lun_lst_t list;
++} rpt_lun_cmd_rsp_t;
++
++//TODO Continue formatting
++/*
++ * SCSI Target Queue structure
++ */
++typedef struct os_tgt {
++ struct os_lun *olun[MAX_LUNS]; /* LUN context pointer. */
++ uint8_t port_down_retry_count;
++ struct scsi_qla_host *ha;
++ uint32_t down_timer;
++
++ /* Persistent binding information */
++ port_id_t d_id;
++ uint8_t node_name[WWN_SIZE];
++ uint8_t port_name[WWN_SIZE];
++ struct fc_port *vis_port;
++
++ uint8_t flags;
++#define TGT_BUSY BIT_0 /* Reached hi-water mark */
++#define TGT_TAGGED_QUEUE BIT_1 /* Tagged queuing. */
++} os_tgt_t;
++
++/*
++ * SCSI LUN Queue structure
++ */
++typedef struct os_lun {
++ struct fc_lun *fclun; /* FC LUN context pointer. */
++ spinlock_t q_lock; /* Lun Lock */
++
++ u_long io_cnt; /* total xfer count since boot */
++ u_long out_cnt; /* total outstanding IO count */
++ u_long w_cnt; /* total writes */
++ u_long r_cnt; /* total reads */
++ u_long avg_time; /* */
++
++ unsigned long q_flag;
++#define LUN_MPIO_BUSY 2 /* Lun is changing paths */
++#define LUN_SCSI_SCAN_DONE BIT_3 /* indicates the scsi scan is done */
++#define LUN_EXEC_DELAYED 7 /* Lun execution is delayed */
++
++ u_long q_timeout; /* total command timeouts */
++ atomic_t q_timer; /* suspend timer */
++ uint32_t q_count; /* current count */
++ uint32_t q_max; /* maxmum count lun can be suspended */
++ uint8_t q_state; /* lun State */
++#define LUN_STATE_READY 1 /* indicates the lun is ready for i/o */
++#define LUN_STATE_RUN 2 /* indicates the lun has a timer running */
++#define LUN_STATE_WAIT 3 /* indicates the lun is suspended */
++#define LUN_STATE_TIMEOUT 4 /* indicates the lun has timed out */
++
++} os_lun_t;
++
++
++/* LUN BitMask structure definition, array of 32bit words,
++ * 1 bit per lun. When bit == 1, the lun is masked.
++ * Most significant bit of mask[0] is lun 0, bit 24 is lun 7.
++ */
++typedef struct lun_bit_mask {
++ /* Must allocate at least enough bits to accomodate all LUNs */
++#if ((MAX_FIBRE_LUNS & 0x7) == 0)
++ UINT8 mask[MAX_FIBRE_LUNS >> 3];
++#else
++ uint8_t mask[(MAX_FIBRE_LUNS + 8) >> 3];
++#endif
++} lun_bit_mask_t;
++
++/*
++ * Fibre channel port structure.
++ */
++typedef struct fc_port {
++ struct list_head list;
++
++ struct list_head fcluns;
++
++ struct scsi_qla_host *ha;
++ struct scsi_qla_host *vis_ha; /* only used when suspending lun */
++ port_id_t d_id;
++ uint16_t loop_id;
++ uint16_t old_loop_id;
++ int16_t lun_cnt;
++ int16_t dev_id; /* index in fc_dev table */
++#define FC_NO_LOOP_ID 0x100
++ uint8_t node_name[WWN_SIZE]; /* Big Endian. */
++ uint8_t port_name[WWN_SIZE]; /* Big Endian. */
++ uint8_t mp_byte; /* multi-path byte (not used) */
++ uint8_t cur_path; /* current path id */
++ int port_login_retry_count;
++ int login_retry;
++ atomic_t state; /* port state */
++#define FC_DEVICE_DEAD 1
++#define FC_DEVICE_LOST 2
++#define FC_ONLINE 3
++#define FC_LOGIN_NEEDED 4
++
++ uint8_t flags;
++#define FC_FABRIC_DEVICE BIT_0
++#define FC_TAPE_DEVICE BIT_1
++#define FC_INITIATOR_DEVICE BIT_2
++#define FC_CONFIG BIT_3
++#define FC_VSA BIT_4
++#define FC_HD_DEVICE BIT_5
++#define FC_SUPPORT_RPT_LUNS BIT_6
++ atomic_t port_down_timer;
++ lun_bit_mask_t lun_mask;
++} fc_port_t;
++
++/*
++ * Fibre channel LUN structure.
++ */
++typedef struct fc_lun {
++ struct list_head list;
++
++ fc_port_t *fcport;
++ uint16_t lun;
++ uint8_t max_path_retries;
++ uint8_t flags;
++#define FC_DISCON_LUN BIT_0
++} fc_lun_t;
++
++typedef struct
++{
++ uint8_t in_use;
++}fabricid_t;
++
++typedef struct {
++ struct list_head list;
++
++ uint8_t node_name[WWN_SIZE];
++ uint8_t port_name[WWN_SIZE];
++ port_id_t d_id;
++ uint16_t loop_id;
++} fc_initiator_t;
++
++/*
++ * Registered State Change Notification structures.
++ */
++typedef struct {
++ port_id_t d_id;
++ uint8_t format;
++} rscn_t;
++
++/*
++ * Flash Database structures.
++ */
++#define FLASH_DATABASE_0 0x1c000
++#define FLASH_DATABASE_1 0x18000
++#define FLASH_DATABASE_VERSION 1
++
++typedef struct
++{
++ uint32_t seq;
++ uint8_t version;
++ uint8_t checksum;
++ uint16_t size;
++ uint8_t spares[8];
++}flash_hdr_t;
++
++typedef struct
++{
++ uint8_t name[WWN_SIZE];
++ uint8_t spares[8];
++}flash_node_t;
++
++typedef struct
++{
++ flash_hdr_t hdr;
++ flash_node_t node[MAX_FIBRE_DEVICES];
++}flash_database_t;
++//TODO End formatting
++
++/*
++ * FC-CT interface
++ *
++ * NOTE: All structures are in big-endian in form.
++ */
++
++#define CT_REJECT_RESPONSE 0x8001
++#define CT_ACCEPT_RESPONSE 0x8002
++
++#define NS_N_PORT_TYPE 0x01
++#define NS_NL_PORT_TYPE 0x02
++#define NS_NX_PORT_TYPE 0x7F
++
++#define GA_NXT_CMD 0x100
++#define GA_NXT_REQ_SIZE (16 + 4)
++#define GA_NXT_RSP_SIZE (16 + 620)
++
++#define GID_PT_CMD 0x1A1
++#define GID_PT_REQ_SIZE (16 + 4)
++#define GID_PT_RSP_SIZE (16 + (MAX_FIBRE_DEVICES * 4))
++
++#define GPN_ID_CMD 0x112
++#define GPN_ID_REQ_SIZE (16 + 4)
++#define GPN_ID_RSP_SIZE (16 + 8)
++
++#define GNN_ID_CMD 0x113
++#define GNN_ID_REQ_SIZE (16 + 4)
++#define GNN_ID_RSP_SIZE (16 + 8)
++
++#define GFT_ID_CMD 0x117
++#define GFT_ID_REQ_SIZE (16 + 4)
++#define GFT_ID_RSP_SIZE (16 + 32)
++
++#define RFT_ID_CMD 0x217
++#define RFT_ID_REQ_SIZE (16 + 4 + 32)
++#define RFT_ID_RSP_SIZE 16
++
++#define RFF_ID_CMD 0x21F
++#define RFF_ID_REQ_SIZE (16 + 4 + 2 + 1 + 1)
++#define RFF_ID_RSP_SIZE 16
++
++#define RNN_ID_CMD 0x213
++#define RNN_ID_REQ_SIZE (16 + 4 + 8)
++#define RNN_ID_RSP_SIZE 16
++
++#define RSNN_NN_CMD 0x239
++#define RSNN_NN_REQ_SIZE (16 + 8 + 1 + 255)
++#define RSNN_NN_RSP_SIZE 16
++
++/* CT command header -- request/response common fields */
++struct ct_cmd_hdr {
++ uint8_t revision;
++ uint8_t in_id[3];
++ uint8_t gs_type;
++ uint8_t gs_subtype;
++ uint8_t options;
++ uint8_t reserved;
++};
++
++/* CT command request */
++struct ct_sns_req {
++ struct ct_cmd_hdr header;
++ uint16_t command;
++ uint16_t max_rsp_size;
++ uint32_t reserved;
++
++ union {
++ /* GA_NXT, GPN_ID, GNN_ID, GFT_ID */
++ struct {
++ uint8_t reserved;
++ uint8_t port_id[3];
++ } port_id;
++
++ struct {
++ uint8_t port_type;
++ uint8_t domain;
++ uint8_t area;
++ uint8_t reserved;
++ } gid_pt;
++
++ struct {
++ uint8_t reserved;
++ uint8_t port_id[3];
++ uint8_t fc4_types[32];
++ } rft_id;
++
++ struct {
++ uint8_t reserved;
++ uint8_t port_id[3];
++ uint16_t reserved2;
++ uint8_t fc4_feature;
++ uint8_t fc4_type;
++ } rff_id;
++
++ struct {
++ uint8_t reserved;
++ uint8_t port_id[3];
++ uint8_t node_name[8];
++ } rnn_id;
++
++ struct {
++ uint8_t node_name[8];
++ uint8_t name_len;
++ uint8_t sym_node_name[255];
++ } rsnn_nn;
++ } req;
++};
++
++/* CT command response header */
++struct ct_rsp_hdr {
++ struct ct_cmd_hdr header;
++ uint16_t response;
++ uint16_t residual;
++ uint8_t reserved;
++ uint8_t reason_code;
++ uint8_t explanation_code;
++ uint8_t vendor_unique;
++};
++
++struct ct_sns_gid_pt_data {
++ uint8_t control_byte;
++ uint8_t port_id[3];
++};
++
++struct ct_sns_rsp {
++ struct ct_rsp_hdr header;
++
++ union {
++ struct {
++ uint8_t port_type;
++ uint8_t port_id[3];
++ uint8_t port_name[8];
++ uint8_t sym_port_name_len;
++ uint8_t sym_port_name[255];
++ uint8_t node_name[8];
++ uint8_t sym_node_name_len;
++ uint8_t sym_node_name[255];
++ uint8_t init_proc_assoc[8];
++ uint8_t node_ip_addr[16];
++ uint8_t class_of_service[4];
++ uint8_t fc4_types[32];
++ uint8_t ip_address[16];
++ uint8_t fabric_port_name[8];
++ uint8_t reserved;
++ uint8_t hard_address[3];
++ } ga_nxt;
++
++ struct {
++ struct ct_sns_gid_pt_data entries[MAX_FIBRE_DEVICES];
++ } gid_pt;
++
++ struct {
++ uint8_t port_name[8];
++ } gpn_id;
++
++ struct {
++ uint8_t node_name[8];
++ } gnn_id;
++
++ struct {
++ uint8_t fc4_types[32];
++ } gft_id;
++ } rsp;
++};
++
++struct ct_sns_pkt {
++ union {
++ struct ct_sns_req req;
++ struct ct_sns_rsp rsp;
++ } p;
++};
++
++#if defined(ISP2100)
++#define GN_LIST_LENGTH 126 * sizeof(port_list_entry_t)
++#else
++#define GN_LIST_LENGTH 256 * sizeof(port_list_entry_t)
++#endif
++
++/*
++ * Structure used in Get Port List mailbox command (0x75).
++ */
++typedef struct {
++ uint8_t name[WWN_SIZE];
++ uint16_t loop_id;
++} port_list_entry_t;
++
++/*
++ * Structure used for device info.
++ */
++typedef struct {
++ uint8_t name[WWN_SIZE];
++ uint8_t wwn[WWN_SIZE];
++ uint16_t loop_id;
++ uint8_t port_id[3];
++} device_data_t;
++
++//TODO Complete Formatting...
++
++/* Mailbox command completion status */
++#define MBS_PORT_ID_IN_USE 0x4007
++#define MBS_LOOP_ID_IN_USE 0x4008
++#define MBS_ALL_LOOP_IDS_IN_USE 0x4009
++#define MBS_NAME_SERVER_NOT_LOGGED_IN 0x400A
++
++
++#define MAX_IOCTL_WAIT_THREADS 32
++typedef struct _wait_q_t {
++ uint8_t flags;
++#define WQ_IN_USE 0x1
++
++ struct semaphore wait_q_sem;
++ struct _wait_q_t *pnext;
++} wait_q_t;
++
++typedef struct hba_ioctl{
++
++ /* Ioctl cmd serialization */
++ uint16_t access_bits; /* bits should be used atomically */
++#define IOCTL_ACTIVE 1 /* first bit */
++#define IOCTL_WANT 2 /* 2nd bit */
++
++ spinlock_t wait_q_lock; /* IOCTL wait_q Queue Lock */
++ wait_q_t wait_q_arr[MAX_IOCTL_WAIT_THREADS];
++ wait_q_t *wait_q_head;
++ wait_q_t *wait_q_tail;
++
++ /* Passthru cmd/completion */
++ struct semaphore cmpl_sem;
++ struct timer_list cmpl_timer;
++ uint8_t ioctl_tov;
++ uint8_t SCSIPT_InProgress;
++ uint8_t MSIOCB_InProgress;
++
++ os_tgt_t *ioctl_tq;
++ os_lun_t *ioctl_lq;
++
++ /* AEN queue */
++ void *aen_tracking_queue;/* points to async events buffer */
++ uint8_t aen_q_head; /* index to the current head of q */
++ uint8_t aen_q_tail; /* index to the current tail of q */
++
++ /* Misc. */
++ uint32_t flags;
++#define IOCTL_OPEN BIT_0
++#define IOCTL_AEN_TRACKING_ENABLE BIT_1
++ uint8_t *scrap_mem; /* per ha scrap buf for ioctl usage */
++ uint32_t scrap_mem_size; /* total size */
++ uint32_t scrap_mem_used; /* portion used */
++
++} hba_ioctl_context;
++
++/* Mailbox command semaphore queue for command serialization */
++typedef struct _mbx_cmdq_t {
++ struct semaphore cmd_sem;
++ struct _mbx_cmdq_t *pnext;
++} mbx_cmdq_t;
++
++/*
++ * Linux Host Adapter structure
++ */
++typedef struct scsi_qla_host
++{
++ struct list_head list;
++
++ /* Linux adapter configuration data */
++ struct Scsi_Host *host; /* pointer to host data */
++ struct pci_dev *pdev;
++
++ u_long host_no;
++ u_long instance;
++
++ device_reg_t *iobase; /* Base Memory-mapped I/O address */
++ volatile unsigned char *mmpbase; /* memory mapped address */
++
++ struct qla_board_info *brd_info;
++ uint16_t fw_major_version;
++ uint16_t fw_minor_version;
++ uint16_t fw_subminor_version;
++ uint16_t fw_attributes;
++ uint32_t fw_transfer_size;
++
++ uint16_t fw_options1;
++ uint16_t fw_options2;
++ uint16_t fw_options3;
++ uint8_t fw_seriallink_options[2];
++
++ ms_iocb_entry_t *ms_iocb;
++ dma_addr_t ms_iocb_dma;
++ struct ct_sns_pkt *ct_sns;
++ dma_addr_t ct_sns_dma;
++
++ uint16_t isp_ctrl_status;
++
++ uint16_t revision;
++ uint8_t ports;
++ u_long actthreads;
++ u_long ipreq_cnt;
++ u_long qthreads;
++ u_long spurious_int;
++ uint32_t total_isr_cnt; /* Interrupt count */
++ uint32_t total_isp_aborts; /* controller err cnt */
++ uint32_t total_lip_cnt; /* LIP cnt */
++ uint32_t total_dev_errs; /* device error cnt */
++ uint32_t total_ios; /* IO cnt */
++ uint64_t total_bytes; /* xfr byte cnt */
++
++ /* Adapter I/O statistics for failover */
++ uint64_t IosRequested;
++ uint64_t BytesRequested;
++ uint64_t IosExecuted;
++ uint64_t BytesExecuted;
++
++ /* ISP connection configuration data */
++ uint16_t max_public_loop_ids;
++ uint16_t min_external_loopid; /* First external loop Id */
++ uint8_t current_topology; /* Current ISP configuration */
++ uint8_t prev_topology; /* Previous ISP configuration */
++ #define ISP_CFG_NL 1
++ #define ISP_CFG_N 2
++ #define ISP_CFG_FL 4
++ #define ISP_CFG_F 8
++ uint8_t id; /* Host adapter SCSI id */
++ uint16_t loop_id; /* Host adapter loop id */
++ port_id_t d_id; /* Host adapter port id */
++
++ uint8_t operating_mode; /* current F/W operating mode */
++ #define LOOP 0
++ #define P2P 1
++ #define LOOP_P2P 2
++ #define P2P_LOOP 3
++
++ uint8_t active_fc4_types;/* active fc4 types */
++ uint8_t current_speed; /* current F/W operating speed */
++
++ /* NVRAM configuration data */
++ uint16_t loop_reset_delay; /* Loop reset delay. */
++ uint16_t hiwat; /* High water mark per device. */
++ uint16_t execution_throttle; /* queue depth */
++ uint16_t minimum_timeout; /* Minimum timeout. */
++ uint8_t retry_count;
++ uint8_t login_timeout;
++ int port_down_retry_count;
++ uint8_t loop_down_timeout;
++ uint16_t max_probe_luns;
++ uint16_t max_luns;
++ uint16_t max_targets;
++
++ /* Fibre Channel Device List. */
++ struct list_head fcports;
++
++ /* OS target queue pointers. */
++ os_tgt_t *otgt[MAX_FIBRE_DEVICES];
++
++ /* Fibre Channel Device Database and LIP sequence. */
++ fcdev_t fc_db[MAX_FIBRE_DEVICES]; /* Driver database. */
++ uint32_t flash_db; /* Flash database address in use. */
++ fabricid_t fabricid[MAX_FIBRE_DEVICES]; /* Fabric ids table . */
++ uint32_t flash_seq; /* Flash database seq # in use. */
++ volatile uint16_t lip_seq; /* LIP sequence number. */
++
++ /* Tracks host adapters we find */
++ struct list_head fcinitiators; /* Initiator database */
++
++ /* RSCN queue. */
++ rscn_t rscn_queue[MAX_RSCN_COUNT];
++ uint8_t rscn_in_ptr;
++ uint8_t rscn_out_ptr;
++
++ /* Doneq bottom half handler */
++ struct work_struct run_qla_task;
++
++ /* __get_free_pages() srb_t pool */
++ srb_t *srb_pool;
++ int srb_pool_order;
++
++ /*
++ * Need to hold the list_lock with irq's disabled in order to
++ * access the following list.
++ * This list_lock is of lower priority than the io_request_lock.
++ */
++ /*********************************************************/
++ spinlock_t list_lock; /* lock to guard lists which
++ hold srb_t's*/
++ struct list_head retry_queue; /* watchdog queue */
++ struct list_head done_queue; /* job on done queue */
++ struct list_head failover_queue; /* failover list link. */
++ struct list_head free_queue; /* SRB free queue */
++ struct list_head scsi_retry_queue; /* SCSI retry queue */
++
++ struct list_head pending_queue; /* SCSI command pending queue */
++
++ /*********************************************************/
++
++ /* This spinlock is used to protect "io transactions", you must
++ * aquire it before doing any IO to the card, eg with RD_REG*() and
++ * WRT_REG*() for the duration of your entire commandtransaction.
++ *
++ * This spinlock is of lower priority than the io request lock.
++ */
++
++ spinlock_t hardware_lock;
++
++ /* Linux kernel thread */
++#if 0
++ struct task_struct *dpc_handler; /* kernel thread */
++ struct semaphore *dpc_notify; /* requester waits for DPC on this semaphore */
++ struct semaphore dpc_sem; /* DPC's semaphore */
++#endif
++ pid_t dpc_pid;
++ int dpc_should_die;
++ struct completion dpc_inited;
++ struct completion dpc_exited;
++ struct semaphore *dpc_wait;
++
++ uint8_t dpc_active; /* DPC routine is active */
++
++ /* Received ISP mailbox data. */
++ volatile uint16_t mailbox_out[MAILBOX_REGISTER_COUNT];
++
++ /* Outstandings ISP commands. */
++ srb_t *outstanding_cmds[MAX_OUTSTANDING_COMMANDS];
++ uint32_t current_outstanding_cmd;
++
++ /* ISP ring lock, rings, and indexes */
++ dma_addr_t request_dma; /* Physical address. */
++ request_t *request_ring; /* Base virtual address */
++ request_t *request_ring_ptr; /* Current address. */
++ uint16_t req_ring_index; /* Current index. */
++ uint16_t req_q_cnt; /* Number of available entries. */
++
++ dma_addr_t response_dma; /* Physical address. */
++ response_t *response_ring; /* Base virtual address */
++ response_t *response_ring_ptr; /* Current address. */
++ uint16_t rsp_ring_index; /* Current index. */
++
++#if defined(FC_IP_SUPPORT)
++ /* Data for IP support */
++ uint8_t ip_port_name[WWN_SIZE];
++
++ struct risc_rec_entry *risc_rec_q; /* RISC receive queue */
++ dma_addr_t risc_rec_q_dma; /* physical address */
++ uint16_t rec_entries_in;
++ uint16_t rec_entries_out;
++
++ struct send_cb *active_scb_q[MAX_SEND_PACKETS];
++ uint32_t current_scb_q_idx;
++
++ uint32_t mtu;
++ uint16_t header_size;
++ uint16_t max_receive_buffers;
++ struct buffer_cb *receive_buffers;
++ uint32_t receive_buff_data_size;
++
++ void (*send_completion_routine)
++ (struct send_cb *scb);
++ void *receive_packets_context;
++ void (*receive_packets_routine)
++ (void *context, struct buffer_cb *bcb);
++ void *notify_context;
++ void (*notify_routine)
++ (void *context, uint32_t type);
++
++ struct ip_device ipdev_db[QLLAN_MAX_IP_DEVICES];
++ struct ip_device *ipdev_db_next_free;
++ struct ip_device *ipdev_db_top;
++ struct ip_device *ipdev_db_bottom;
++#endif
++
++ /* Firmware Initialization Control Block data */
++ dma_addr_t init_cb_dma; /* Physical address. */
++ init_cb_t *init_cb;
++
++ /* Timeout timers. */
++ uint8_t queue_restart_timer;
++ atomic_t loop_down_timer; /* loop down timer */
++ uint8_t loop_down_abort_time; /* port down timer */
++ uint32_t timer_active;
++ uint32_t forceLip;
++ struct timer_list timer;
++
++ /* These are used by mailbox operations. */
++ mbx_cmd_t *mcp;
++ unsigned long mbx_cmd_flags;
++#define MBX_CMD_ACTIVE 1 /* first bit */
++#define MBX_CMD_WANT 2 /* 2nd bit */
++#define MBX_INTERRUPT 3 /* 3rd bit */
++#define MBX_INTR_WAIT 4 /* 4rd bit */
++
++ spinlock_t mbx_reg_lock; /* Mbx Cmd Register Lock */
++ spinlock_t mbx_q_lock; /* Mbx Active Cmd Queue Lock */
++ spinlock_t mbx_bits_lock; /* Mailbox access bits Lock */
++
++ uint32_t mbx_lock_bits; /* controlled by mbx_bits_lock */
++#define MBX_CMD_LOCK 1 /* first bit */
++#define MBX_CMD_WANT 2 /* 2nd bit */
++
++ struct semaphore mbx_intr_sem; /* Used for completion notification */
++
++ mbx_cmdq_t *mbx_sem_pool_head; /* Head Pointer to a list of
++ * recyclable mbx semaphore pool
++ * to be used during run time.
++ */
++ mbx_cmdq_t *mbx_sem_pool_tail; /* Tail Pointer to semaphore pool*/
++#define MBQ_INIT_LEN 16 /* initial mbx sem pool q len. actual len may vary */
++
++ mbx_cmdq_t *mbx_q_head; /* Head Pointer to sem q for active cmds */
++ mbx_cmdq_t *mbx_q_tail; /* Tail Pointer to sem q for active cmds */
++
++
++ uint32_t retry_q_cnt;
++ uint32_t scsi_retry_q_cnt;
++ uint32_t failover_cnt;
++
++ uint8_t *cmdline;
++
++ uint32_t login_retry_count;
++
++ volatile struct
++ {
++ uint32_t online :1; /* 0 */
++ uint32_t enable_64bit_addressing :1; /* 1 */
++ uint32_t mbox_int :1; /* 2 */
++ uint32_t mbox_busy :1; /* 3 */
++ // UNUSED and UNASSIGNED
++ uint32_t port_name_used :1; /* 4 */
++ uint32_t failover_enabled :1; /* 5 */
++ uint32_t watchdog_enabled :1; /* 6 */
++ uint32_t cfg_suspended :1; /* 7 */
++
++ uint32_t disable_host_adapter :1; /* 8 */
++ uint32_t rscn_queue_overflow :1; /* 9 */
++ uint32_t reset_active :1; /* 10 */
++ uint32_t link_down_error_enable :1; /* 11 */
++
++ uint32_t disable_risc_code_load :1; /* 12 */
++ uint32_t set_cache_line_size_1 :1; /* 13 */
++ uint32_t enable_target_mode :1; /* 14 */
++ uint32_t disable_luns :1; /* 15 */
++
++ uint32_t enable_lip_reset :1; /* 16 */
++ uint32_t enable_lip_full_login :1; /* 17 */
++ uint32_t enable_target_reset :1; /* 18 */
++ uint32_t updated_fc_db :1; /* 19 */
++
++ uint32_t enable_flash_db_update :1; /* 20 */
++ uint32_t in_isr :1; /* 21 */
++ uint32_t dpc_sched :1; /* 23 */
++
++ uint32_t nvram_config_done :1; /* 24 */
++ uint32_t update_config_needed :1; /* 25 */
++ uint32_t management_server_logged_in :1; /* 26 */
++#if defined(FC_IP_SUPPORT)
++ uint32_t enable_ip :1; /* 27 */
++#endif
++
++ } flags;
++
++ uint32_t device_flags;
++#define DFLG_LOCAL_DEVICES BIT_0
++#define DFLG_RETRY_LOCAL_DEVICES BIT_1
++#define DFLG_FABRIC_DEVICES BIT_2
++#define SWITCH_FOUND BIT_3
++#define DFLG_NO_CABLE BIT_4
++
++ unsigned long cpu_flags;
++
++ uint8_t marker_needed;
++ uint8_t missing_targets;
++ uint8_t sns_retry_cnt;
++ uint8_t cmd_wait_cnt;
++ uint8_t mem_err;
++
++ unsigned long dpc_flags;
++#define RESET_MARKER_NEEDED 0 /* initiate sending a marker to ISP */
++#define RESET_ACTIVE 1
++#define ISP_ABORT_NEEDED 2 /* initiate ISP Abort */
++#define ABORT_ISP_ACTIVE 3 /* isp abort in progress */
++
++#define LOOP_RESYNC_NEEDED 4 /* initiate a configure fabric sequence */
++#define LOOP_RESYNC_ACTIVE 5
++#define COMMAND_WAIT_NEEDED 6
++#define COMMAND_WAIT_ACTIVE 7
++
++#define LOCAL_LOOP_UPDATE 8 /* Perform a local loop update */
++#define RSCN_UPDATE 9 /* Perform a RSCN update */
++#define MAILBOX_RETRY 10
++#define ISP_RESET_NEEDED 11 /* Initiate a ISP reset ??? */
++
++#define FAILOVER_EVENT_NEEDED 12
++#define FAILOVER_EVENT 13
++#define FAILOVER_NEEDED 14
++#define LOOP_RESET_NEEDED 15
++
++#define DEVICE_RESET_NEEDED 16
++#define DEVICE_ABORT_NEEDED 17
++#define SCSI_RESTART_NEEDED 18 /* Processes any requests in scsi retry queue */
++#define PORT_RESTART_NEEDED 19 /* Processes any requests in retry queue */
++
++#define RESTART_QUEUES_NEEDED 20 /* Restarts requeusts in the lun queue */
++#define ABORT_QUEUES_NEEDED 21
++#define RELOGIN_NEEDED 22
++#define LOGIN_RETRY_NEEDED 23 /* initiates any fabric logins that are required */
++#define REGISTER_FC4_NEEDED 24 /* set when need to register again.*/
++
++#define TASKLET_SCHED 25 /* Tasklet is scheduled. */
++#define DONE_RUNNING 26 /* Done task is running. */
++#define ISP_ABORT_RETRY 27 /* ISP aborted. */
++
++
++/* macro for timer to start dpc for handling mailbox commands */
++#define MAILBOX_CMD_NEEDED (LOOP_RESET_NEEDED|DEVICE_RESET_NEEDED| \
++ DEVICE_ABORT_NEEDED|ISP_ABORT_NEEDED)
++
++ /* These 3 fields are used by the reset done in dpc thread */
++ uint16_t reset_bus_id;
++ uint16_t reset_tgt_id;
++ uint16_t reset_lun;
++
++ uint8_t interrupts_on;
++ uint8_t init_done;
++
++ volatile uint16_t loop_state;
++#define LOOP_TIMEOUT 0x01
++#define LOOP_DOWN 0x02
++#define LOOP_UP 0x04
++#define LOOP_UPDATE 0x08
++#define LOOP_READY 0x10
++
++ mbx_cmd_t mc;
++ uint32_t mbx_flags;
++#define MBX_IN_PROGRESS BIT_0
++#define MBX_BUSY BIT_1 /* Got the Access */
++#define MBX_SLEEPING_ON_SEM BIT_2
++#define MBX_POLLING_FOR_COMP BIT_3
++#define MBX_COMPLETED BIT_4
++#define MBX_TIMEDOUT BIT_5
++#define MBX_ACCESS_TIMEDOUT BIT_6
++
++/* following are new and needed for IOCTL support */
++ hba_ioctl_context *ioctl;
++ uint8_t node_name[WWN_SIZE];
++
++ uint8_t optrom_major;
++ uint8_t optrom_minor;
++
++ uint8_t nvram_version;
++
++ void *ioctl_mem;
++ dma_addr_t ioctl_mem_phys;
++ uint32_t ioctl_mem_size;
++ uint32_t isp_abort_cnt;
++
++ /* HBA serial number */
++ uint8_t serial0;
++ uint8_t serial1;
++ uint8_t serial2;
++
++ /* oem related items */
++ uint8_t oem_id;
++ uint8_t oem_specific[31];
++
++ uint32_t dump_done;
++ unsigned long done_q_cnt;
++ unsigned long pending_in_q;
++
++ uint32_t failover_type;
++ uint32_t failback_delay;
++ unsigned long cfg_flags;
++#define CFG_ACTIVE 0 /* CFG during a failover, event update, or ioctl */
++ /* uint8_t cfg_active; */
++ int eh_start;
++
++#if defined(IOCB_THROLLE_USAGE)
++ uint32_t iocb_hiwat;
++ uint32_t iocb_cnt;
++ uint32_t iocb_overflow_cnt;
++#endif
++
++ int srb_cnt;
++ int srb_alloc_cnt; /*Number of allocated SRBs */
++
++ uint32_t mbox_trace;
++
++ uint32_t binding_type;
++#define BIND_BY_PORT_NAME 0
++#define BIND_BY_PORT_ID 1
++#define BIND_BY_NODE_NAME 2
++
++ srb_t *status_srb; /* Keep track of Status Continuation Entries */
++
++ uint32_t dropped_frame_error_cnt;
++} scsi_qla_host_t;
++
++#if defined(__BIG_ENDIAN)
++/* Big endian machine correction defines. */
++#define LITTLE_ENDIAN_16(x) qla2x00_chg_endian((uint8_t *)&(x), 2)
++#define LITTLE_ENDIAN_24(x) qla2x00_chg_endian((uint8_t *)&(x), 3)
++#define LITTLE_ENDIAN_32(x) qla2x00_chg_endian((uint8_t *)&(x), 4)
++#define LITTLE_ENDIAN_64(x) qla2x00_chg_endian((uint8_t *)&(x), 8)
++#define BIG_ENDIAN_16(x)
++#define BIG_ENDIAN_24(x)
++#define BIG_ENDIAN_32(x)
++#define BIG_ENDIAN_64(x)
++
++#else
++/* Little endian machine correction defines. */
++#define LITTLE_ENDIAN_16(x)
++#define LITTLE_ENDIAN_24(x)
++#define LITTLE_ENDIAN_32(x)
++#define LITTLE_ENDIAN_64(x)
++#define BIG_ENDIAN_16(x) qla2x00_chg_endian((uint8_t *)&(x), 2)
++#define BIG_ENDIAN_24(x) qla2x00_chg_endian((uint8_t *)&(x), 3)
++#define BIG_ENDIAN_32(x) qla2x00_chg_endian((uint8_t *)&(x), 4)
++#define BIG_ENDIAN_64(x) qla2x00_chg_endian((uint8_t *)&(x), 8)
++
++#endif
++
++/*
++ * Macros to help code, maintain, etc.
++ */
++#define LOOP_TRANSITION(ha) ( test_bit(ISP_ABORT_NEEDED, &ha->dpc_flags) || \
++ test_bit(LOOP_RESYNC_NEEDED, &ha->dpc_flags) )
++
++#define LOOP_NOT_READY(ha) ( (test_bit(ISP_ABORT_NEEDED, &ha->dpc_flags) || \
++ test_bit(ABORT_ISP_ACTIVE, &ha->dpc_flags) || \
++ test_bit(LOOP_RESYNC_NEEDED, &ha->dpc_flags) || \
++ test_bit(LOOP_RESYNC_ACTIVE, &ha->dpc_flags) || \
++ test_bit(COMMAND_WAIT_NEEDED, &ha->dpc_flags) || \
++ test_bit(COMMAND_WAIT_ACTIVE, &ha->dpc_flags)) || \
++ ha->loop_state == LOOP_DOWN)
++
++#define LOOP_RDY(ha) ( !LOOP_NOT_READY(ha) )
++
++#define TGT_Q(ha, t) (ha->otgt[t])
++#define LUN_Q(ha, t, l) (TGT_Q(ha, t)->olun[l])
++#define GET_LU_Q(ha, t, l) ( (TGT_Q(ha,t) != NULL)? TGT_Q(ha, t)->olun[l] : NULL)
++#define PORT_DOWN_TIMER(ha, t) ((ha)->fc_db[(t)].port_timer)
++#define PORT(ha, t) ((ha)->fc_db[(t)])
++#define PORT_LOGIN_RETRY(fcport) ((fcport)->port_login_retry_count)
++
++#define MBOX_TRACE(ha,b) {(ha)->mbox_trace |= (b);}
++
++#define MBS_MASK 0x3fff
++#define MBS_END 0x100
++#define QLA2X00_SUCCESS (MBS_COMMAND_COMPLETE & MBS_MASK)
++#define QLA2X00_FAILED (MBS_END + 2)
++#define QLA2X00_FUNCTION_FAILED (MBS_END + 2)
++
++#define KMEM_ZALLOC(siz,id) qla2x00_kmem_zalloc((siz), GFP_ATOMIC, (id))
++#define KMEM_FREE(ip,siz) kfree((ip))
++
++/*
++ * LOCK MACROS
++ */
++#define QLA_MBX_REG_LOCK(ha) \
++ spin_lock_irqsave(&(ha)->mbx_reg_lock, mbx_flags);
++#define QLA_MBX_REG_UNLOCK(ha) \
++ spin_unlock_irqrestore(&(ha)->mbx_reg_lock, mbx_flags);
++
++/*
++* Stat info for all adpaters
++*/
++struct _qla2x00stats {
++ unsigned long mboxtout; /* mailbox timeouts */
++ unsigned long mboxerr; /* mailbox errors */
++ unsigned long ispAbort; /* ISP aborts */
++ unsigned long debugNo;
++ unsigned long loop_resync;
++ unsigned long outarray_full;
++ unsigned long retry_q_cnt;
++};
++
++#define SYS_DELAY(x) udelay(x);barrier()
++#define QLA2100_DELAY(sec) mdelay(sec * HZ)
++#define NVRAM_DELAY() udelay(10)
++#define UDELAY(x) udelay(x)
++
++#define CACHE_FLUSH(a) (RD_REG_WORD(a))
++#define INVALID_HANDLE (MAX_OUTSTANDING_COMMANDS+1)
++
++#define ABORTS_ACTIVE ((test_bit(LOOP_RESET_NEEDED, &ha->dpc_flags)) || \
++ (test_bit(DEVICE_RESET_NEEDED, &ha->dpc_flags)) || \
++ (test_bit(DEVICE_ABORT_NEEDED, &ha->dpc_flags)) || \
++ (test_bit(ISP_ABORT_NEEDED, &ha->dpc_flags)))
++
++/*
++ * Flash support definitions
++ */
++#define FLASH_IMAGE_SIZE 131072
++
++#include "qla_fo.h"
++#include "qla_cfg.h"
++#include "qla_gbl.h"
++#include "qla_dbg.h"
++#include "qla_inline.h"
++#include "qla_listops.h"
++
++#endif
+--- /dev/null Thu Apr 11 07:25:15 2002
++++ linux-2.5.73-n9560/drivers/scsi/qla2xxx/qla_fo.c Thu Jul 3 15:34:42 2003
+@@ -0,0 +1,1681 @@
++/********************************************************************************
++* QLOGIC LINUX SOFTWARE
++*
++* QLogic ISP2x00 device driver for Linux 2.5.x
++* Copyright (C) 2003 Qlogic Corporation
++* (www.qlogic.com)
++*
++* This program is free software; you can redistribute it and/or modify it
++* under the terms of the GNU General Public License as published by the
++* Free Software Foundation; either version 2, or (at your option) any
++* later version.
++*
++* This program is distributed in the hope that it will be useful, but
++* WITHOUT ANY WARRANTY; without even the implied warranty of
++* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++* General Public License for more details.
++*
++******************************************************************************
++* Failover include file
++******************************************************************************/
++
++#include "qla_os.h"
++#include "qla_def.h"
++
++#include "qlfo.h"
++#include "qlfolimits.h"
++
++//TODO Why??
++#include "qla_fo.cfg"
++
++/*
++ * Global variables
++ */
++SysFoParams_t qla_fo_params;
++
++/*
++ * Local routines
++ */
++#if !defined(linux)
++static int qla2x00_sdm_setup(EXT_IOCTL *cmd_stp, void *arg, int mode);
++#endif
++static uint32_t qla2x00_fo_get_params(PFO_PARAMS pp);
++static uint32_t qla2x00_fo_set_params(PFO_PARAMS pp);
++static uint8_t qla2x00_fo_count_retries(scsi_qla_host_t *ha, srb_t *sp);
++static int qla2x00_fo_get_lun_data(EXT_IOCTL *pext,
++ FO_LUN_DATA_INPUT *bp, int mode);
++static int qla2x00_fo_set_lun_data(EXT_IOCTL *pext,
++ FO_LUN_DATA_INPUT *bp, int mode);
++static uint32_t qla2x00_fo_stats(FO_HBA_STAT *stat_p, uint8_t reset);
++static int qla2x00_fo_set_target_data(EXT_IOCTL *pext,
++ FO_TARGET_DATA_INPUT *bp, int mode);
++static int qla2x00_fo_get_target_data(EXT_IOCTL *pext,
++ FO_TARGET_DATA_INPUT *bp, int mode);
++
++/*
++ * qla2x00_get_hba
++ * Searches the hba structure chain for the requested instance
++ * aquires the mutex and returns a pointer to the hba structure.
++ *
++ * Input:
++ * inst = adapter instance number.
++ *
++ * Returns:
++ * Return value is a pointer to the adapter structure or
++ * NULL if instance not found.
++ *
++ * Context:
++ * Kernel context.
++ */
++scsi_qla_host_t *
++qla2x00_get_hba(int instance)
++{
++ int found;
++ struct list_head *hal;
++ scsi_qla_host_t *ha;
++
++ ha = NULL;
++ found = 0;
++ read_lock(&qla_hostlist_lock);
++ list_for_each(hal, &qla_hostlist) {
++ ha = list_entry(hal, scsi_qla_host_t, list);
++
++ if (ha->instance == instance) {
++ found++;
++ break;
++ }
++ }
++ read_unlock(&qla_hostlist_lock);
++
++ return (found ? ha : NULL);
++}
++
++/*
++ * qla2x00_fo_stats
++ * Searches the hba structure chan for the requested instance
++ * aquires the mutex and returns a pointer to the hba structure.
++ *
++ * Input:
++ * stat_p = Pointer to FO_HBA_STAT union.
++ * reset = Flag, TRUE = reset statistics.
++ * FALSE = return statistics values.
++ *
++ * Returns:
++ * 0 = success
++ *
++ * Context:
++ * Kernel context.
++ */
++static uint32_t
++qla2x00_fo_stats(FO_HBA_STAT *stat_p, uint8_t reset)
++{
++ int32_t inst, idx;
++ uint32_t rval = 0;
++ struct list_head *hal;
++ scsi_qla_host_t *ha;
++
++ DEBUG9(printk("%s: entered.\n", __func__);)
++
++ inst = stat_p->input.HbaInstance;
++ stat_p->info.HbaCount = 0;
++
++ ha = NULL;
++
++ read_lock(&qla_hostlist_lock);
++ list_for_each(hal, &qla_hostlist) {
++ ha = list_entry(hal, scsi_qla_host_t, list);
++
++ if (inst == FO_ADAPTER_ALL) {
++ stat_p->info.HbaCount++;
++ idx = ha->instance;
++ } else if (ha->instance == inst) {
++ stat_p->info.HbaCount = 1;
++ idx = inst;
++ }
++ if (reset == TRUE) {
++ DEBUG9(printk("%s: reset stats.\n", __func__);)
++ ha->IosRequested = 0;
++ ha->BytesRequested = 0;
++ ha->IosExecuted = 0;
++ ha->BytesExecuted = 0;
++ } else {
++ DEBUG9(printk("%s: get stats for inst %d.\n",
++ __func__, inst);)
++
++#if 0
++ stat_p->info.StatEntry[idx].IosRequested =
++ ha->IosRequested;
++ stat_p->info.StatEntry[idx].BytesRequested =
++ ha->BytesRequested;
++ stat_p->info.StatEntry[idx].IosExecuted =
++ ha->IosExecuted;
++ stat_p->info.StatEntry[idx].BytesExecuted =
++ ha->BytesExecuted;
++#endif
++ }
++ if (inst != FO_ADAPTER_ALL)
++ break;
++ }
++ read_unlock(&qla_hostlist_lock);
++
++ DEBUG9(printk("%s: exiting.\n", __func__);)
++
++ return rval;
++}
++
++/*
++ * qla2x00_fo_get_lun_data
++ * Get lun data from all devices attached to a HBA (FO_GET_LUN_DATA).
++ * Gets lun mask if failover not enabled.
++ *
++ * Input:
++ * ha = pointer to adapter
++ * bp = pointer to buffer
++ *
++ * Return;
++ * 0 on success or errno.
++ *
++ * Context:
++ * Kernel context.
++ */
++static int
++qla2x00_fo_get_lun_data(EXT_IOCTL *pext, FO_LUN_DATA_INPUT *bp, int mode)
++{
++ scsi_qla_host_t *ha;
++ struct list_head *fcports, *fcpl;
++ fc_port_t *fcport;
++ int ret = 0;
++ mp_host_t *host = NULL;
++ mp_device_t *dp;
++ mp_path_t *path;
++ mp_path_list_t *pathlist;
++ os_tgt_t *ostgt;
++ uint8_t path_id;
++ uint16_t dev_no;
++ uint16_t cnt;
++ uint16_t lun;
++ FO_EXTERNAL_LUN_DATA_ENTRY *u_entry, *entry;
++ FO_LUN_DATA_LIST *u_list, *list;
++
++
++ DEBUG9(printk("%s: entered.\n", __func__);)
++
++ ha = qla2x00_get_hba((int)bp->HbaInstance);
++
++ if (!ha) {
++ DEBUG2_9_10(printk("%s: no ha matching inst %d.\n",
++ __func__, bp->HbaInstance);)
++
++ pext->Status = EXT_STATUS_DEV_NOT_FOUND;
++ return (ret);
++ }
++
++ DEBUG9(printk("%s: ha inst %ld, buff %p.\n",
++ __func__, ha->instance, bp);)
++ DEBUG4(printk("%s: hba %p, buff %p bp->HbaInstance(%x).\n",
++ __func__, ha, bp, (int)bp->HbaInstance));
++
++ if (ha->flags.failover_enabled)
++ if ((host = qla2x00_cfg_find_host(ha)) == NULL) {
++ DEBUG2_9_10(printk("%s: no HOST for ha inst %ld.\n",
++ __func__, ha->instance);)
++ pext->Status = EXT_STATUS_DEV_NOT_FOUND;
++ return (ret);
++ }
++
++ list = (FO_LUN_DATA_LIST *)qla2x00_kmem_zalloc(
++ sizeof(FO_LUN_DATA_LIST), GFP_ATOMIC, 12);
++ if (list == NULL) {
++ DEBUG2_9_10(printk("%s: failed to alloc memory of size (%d)\n",
++ __func__, (int)sizeof(FO_LUN_DATA_LIST));)
++ pext->Status = EXT_STATUS_NO_MEMORY;
++ return (-ENOMEM);
++ }
++
++ entry = &list->DataEntry[0];
++
++ u_list = (FO_LUN_DATA_LIST *)pext->ResponseAdr;
++ u_entry = &u_list->DataEntry[0];
++
++ /* find the correct fcport list */
++ if (!ha->flags.failover_enabled)
++ fcports = &ha->fcports;
++ else
++ fcports = host->fcports;
++
++ /* Check thru this adapter's fcport list */
++ fcport = NULL;
++ list_for_each(fcpl, fcports) {
++ fcport = list_entry(fcpl, fc_port_t, list);
++
++ memcpy(entry->NodeName,
++ fcport->node_name, EXT_DEF_WWN_NAME_SIZE);
++ memcpy(entry->PortName,
++ fcport->port_name, EXT_DEF_WWN_NAME_SIZE);
++
++ if (!ha->flags.failover_enabled) {
++ /*
++ * Failover disabled. Just return LUN mask info
++ * in lun data entry of this port.
++ */
++ entry->TargetId = 0;
++ for (cnt = 0; cnt < MAX_FIBRE_DEVICES; cnt++) {
++ if (!(ostgt = ha->otgt[cnt])) {
++ continue;
++ }
++
++ if (ostgt->vis_port == fcport) {
++ entry->TargetId = cnt;
++ break;
++ }
++ }
++ if (cnt == MAX_FIBRE_DEVICES) {
++ /* Not found? For now just go to next port. */
++#if defined(QL_DEBUG_LEVEL_2) || defined(QL_DEBUG_LEVEL_10)
++ uint8_t *tmp_name;
++
++ tmp_name = fcport->port_name;
++
++ printk("%s(%ld): ERROR - port "
++ "%02x%02x%02x%02x%02x%02x%02x%02x "
++ "not configured.\n",
++ __func__, ha->host_no,
++ tmp_name[0], tmp_name[1], tmp_name[2],
++ tmp_name[3], tmp_name[4], tmp_name[5],
++ tmp_name[6], tmp_name[7]);
++#endif /* DEBUG */
++
++ continue;
++ }
++
++ /* Got a valid port */
++ list->EntryCount++;
++
++ for (lun = 0; lun < MAX_LUNS; lun++) {
++ /* set MSB if masked */
++ entry->Data[lun] = LUN_DATA_PREFERRED_PATH;
++ if (!EXT_IS_LUN_BIT_SET(&(fcport->lun_mask),
++ lun)) {
++ entry->Data[lun] |= LUN_DATA_ENABLED;
++ }
++ }
++
++ DEBUG9(printk("%s: got lun_mask for tgt %d\n",
++ __func__, cnt);)
++ DEBUG9(qla2x00_dump_buffer((char *)&(fcport->lun_mask),
++ sizeof(lun_bit_mask_t));)
++
++ ret = verify_area(VERIFY_WRITE, (void *)u_entry,
++ sizeof(FO_EXTERNAL_LUN_DATA_ENTRY));
++ if (ret) {
++ /* error */
++ DEBUG9_10(printk("%s: u_entry %p verify write"
++ " error. list->EntryCount=%d.\n",
++ __func__, u_entry, list->EntryCount);)
++ pext->Status = EXT_STATUS_COPY_ERR;
++ break;
++ }
++
++ ret = copy_to_user(u_entry, entry,
++ sizeof(FO_EXTERNAL_LUN_DATA_ENTRY));
++
++ if (ret) {
++ /* error */
++ DEBUG9_10(printk("%s: u_entry %p copy "
++ "error. list->EntryCount=%d.\n",
++ __func__, u_entry, list->EntryCount);)
++ pext->Status = EXT_STATUS_COPY_ERR;
++ break;
++ }
++
++ copy_to_user(u_entry, entry,
++ sizeof(FO_EXTERNAL_LUN_DATA_ENTRY));
++
++ /* Go to next port */
++ u_entry++;
++ continue;
++ }
++
++ /*
++ * Failover is enabled. Go through the mp_devs list and return
++ * lun data in configured path.
++ */
++ for (dev_no = 0; dev_no < MAX_MP_DEVICES; dev_no++) {
++ dp = host->mp_devs[dev_no];
++
++ if (dp == NULL)
++ continue;
++
++ /* Lookup entry name */
++ if (!qla2x00_is_portname_in_device(dp, entry->PortName))
++ continue;
++
++ if ((pathlist = dp->path_list) == NULL)
++ continue;
++
++ path = pathlist->last;
++ for (path_id = 0; path_id < pathlist->path_cnt;
++ path_id++, path = path->next) {
++
++ if (path->host != host)
++ continue;
++
++ if (!qla2x00_is_portname_equal(path->portname,
++ entry->PortName))
++ continue;
++
++ /* Got an entry */
++ entry->TargetId = dp->dev_id;
++ entry->Dev_No = path->id;
++ list->EntryCount++;
++
++ for (lun = 0; lun < MAX_LUNS; lun++) {
++ entry->Data[lun] =
++ path->lun_data.data[lun];
++ }
++
++ ret = verify_area(VERIFY_WRITE, (void *)u_entry,
++ sizeof(FO_EXTERNAL_LUN_DATA_ENTRY));
++ if (ret) {
++ /* error */
++ DEBUG2_9_10(printk("%s: u_entry %p "
++ "verify wrt err. EntryCount=%d.\n",
++ __func__, u_entry, list->EntryCount);)
++ pext->Status = EXT_STATUS_COPY_ERR;
++ break;
++ }
++
++ ret = copy_to_user(u_entry, entry,
++ sizeof(FO_EXTERNAL_LUN_DATA_ENTRY));
++ if (ret) {
++ /* error */
++ DEBUG2_9_10(printk("%s: u_entry %p "
++ "copy out err. EntryCount=%d.\n",
++ __func__, u_entry, list->EntryCount);)
++ pext->Status = EXT_STATUS_COPY_ERR;
++ break;
++ }
++
++ u_entry++;
++
++ DEBUG9(printk("%s: (output) get_lun_data - "
++ "u_entry(%p) - lun entry[%d] :\n",
++ __func__, u_entry,list->EntryCount - 1);)
++
++ DEBUG9(qla2x00_dump_buffer((void *)entry, 64);)
++
++ /*
++ * We found the right path for this port.
++ * Continue with next port.
++ */
++ break;
++ }
++
++ /* Continue with next port. */
++ break;
++ }
++ }
++
++ DEBUG9(printk("%s: get_lun_data - entry count = [%d]\n",
++ __func__, list->EntryCount);)
++ DEBUG4(printk("%s: get_lun_data - entry count = [%d]\n",
++ __func__, list->EntryCount);)
++
++ if (ret == 0) {
++ ret = verify_area(VERIFY_WRITE, (void *)&u_list->EntryCount,
++ sizeof(list->EntryCount));
++ if (ret) {
++ /* error */
++ DEBUG2_9_10(printk("%s: u_list->EntryCount %p verify "
++ " write error. list->EntryCount=%d.\n",
++ __func__, u_entry, list->EntryCount);)
++ pext->Status = EXT_STATUS_COPY_ERR;
++ } else {
++ /* copy number of entries */
++ ret = copy_to_user(&u_list->EntryCount, &list->EntryCount,
++ sizeof(list->EntryCount));
++ pext->ResponseLen = FO_LUN_DATA_LIST_MAX_SIZE;
++ }
++ }
++
++ KMEM_FREE(list, sizeof(FO_LUN_DATA_LIST));
++
++ DEBUG9(printk("%s: exiting. ret=%d.\n", __func__, ret);)
++
++ return ret;
++}
++
++/*
++ * qla2x00_fo_set_lun_data
++ * Set lun data for the specified device on the attached hba
++ * (FO_SET_LUN_DATA).
++ * Sets lun mask if failover not enabled.
++ *
++ * Input:
++ * bp = pointer to buffer
++ *
++ * Return;
++ * 0 on success or errno.
++ *
++ * Context:
++ * Kernel context.
++ */
++static int
++qla2x00_fo_set_lun_data(EXT_IOCTL *pext, FO_LUN_DATA_INPUT *bp, int mode)
++{
++ scsi_qla_host_t *ha;
++ fc_port_t *fcport;
++ int i;
++ int ret = 0;
++ mp_host_t *host = NULL;
++ mp_device_t *dp;
++ mp_path_t *path;
++ mp_path_list_t *pathlist;
++ os_tgt_t *ostgt;
++ uint8_t path_id;
++ uint16_t dev_no;
++ uint16_t lun;
++ FO_LUN_DATA_LIST *u_list, *list;
++ FO_EXTERNAL_LUN_DATA_ENTRY *u_entry, *entry;
++
++ typedef struct _tagStruct {
++ FO_LUN_DATA_INPUT foLunDataInput;
++ FO_LUN_DATA_LIST foLunDataList;
++ }
++ com_struc;
++ com_struc *com_iter;
++
++
++ DEBUG9(printk("%s: entered.\n", __func__);)
++
++ ha = qla2x00_get_hba((int)bp->HbaInstance);
++
++ if (!ha) {
++ DEBUG2_9_10(printk("%s: no ha matching inst %d.\n",
++ __func__, bp->HbaInstance);)
++
++ pext->Status = EXT_STATUS_DEV_NOT_FOUND;
++ return (ret);
++ }
++
++ DEBUG9(printk("%s: ha inst %ld, buff %p.\n",
++ __func__, ha->instance, bp);)
++
++ if (ha->flags.failover_enabled)
++ if ((host = qla2x00_cfg_find_host(ha)) == NULL) {
++ DEBUG2_9_10(printk("%s: no HOST for ha inst %ld.\n",
++ __func__, ha->instance);)
++ pext->Status = EXT_STATUS_DEV_NOT_FOUND;
++ return (ret);
++ }
++
++ list = (FO_LUN_DATA_LIST *)qla2x00_kmem_zalloc(
++ sizeof(FO_LUN_DATA_LIST), GFP_ATOMIC, 13);
++ if (list == NULL) {
++ DEBUG2_9_10(printk("%s: failed to alloc memory of size (%d)\n",
++ __func__, (int)sizeof(FO_LUN_DATA_LIST));)
++ pext->Status = EXT_STATUS_NO_MEMORY;
++ return (-ENOMEM);
++ }
++
++ entry = &list->DataEntry[0];
++
++ /* get lun data list from user */
++ com_iter = (com_struc *)pext->RequestAdr;
++ u_list = &(com_iter->foLunDataList);
++ u_entry = &u_list->DataEntry[0];
++
++ ret = verify_area(VERIFY_READ, (void *)u_list,
++ sizeof(FO_LUN_DATA_LIST));
++ if (ret) {
++ /* error */
++ DEBUG2_9_10(printk("%s: u_list %p verify read error.\n",
++ __func__, u_list);)
++ pext->Status = EXT_STATUS_COPY_ERR;
++ KMEM_FREE(list, FO_LUN_DATA_LIST);
++ return (ret);
++ }
++
++ ret = copy_from_user(list, u_list, sizeof(FO_LUN_DATA_LIST));
++ if (ret) {
++ /* error */
++ DEBUG2_9_10(printk("%s: u_list %p copy error.\n",
++ __func__, u_list);)
++ pext->Status = EXT_STATUS_COPY_ERR;
++ KMEM_FREE(list, FO_LUN_DATA_LIST);
++ return (ret);
++ }
++
++ DEBUG2(printk("qla_fo_set_lun_data: pext->RequestAdr(%p) u_list (%p) "
++ "sizeof(FO_LUN_DATA_INPUT) =(%d) and 64 bytes...\n",
++ pext->RequestAdr, u_list,
++ (int)sizeof(FO_LUN_DATA_INPUT));)
++ DEBUG2(qla2x00_dump_buffer((void *)u_list, 64);)
++
++ for (i = 0; i < list->EntryCount; i++, u_entry++) {
++
++ ret = verify_area(VERIFY_READ, (void *)u_entry,
++ sizeof(FO_EXTERNAL_LUN_DATA_ENTRY));
++ if (ret) {
++ /* error */
++ DEBUG2_9_10(printk("%s: u_entry %p verify "
++ " read error.\n",
++ __func__, u_entry);)
++ pext->Status = EXT_STATUS_COPY_ERR;
++ break;
++ }
++ ret = copy_from_user(entry, u_entry,
++ sizeof(FO_EXTERNAL_LUN_DATA_ENTRY));
++ if (ret) {
++ /* error */
++ DEBUG2_9_10(printk("%s: u_entry %p copy error.\n",
++ __func__, u_entry);)
++ pext->Status = EXT_STATUS_COPY_ERR;
++ break;
++ }
++
++ if (!ha->flags.failover_enabled) {
++ /*
++ * Failover disabled. Just find the port and set
++ * LUN mask values in lun_mask field of this port.
++ */
++
++ if (entry->TargetId >= MAX_FIBRE_DEVICES)
++ /* ERROR */
++ continue;
++
++ if (!(ostgt = ha->otgt[entry->TargetId]))
++ /* ERROR */
++ continue;
++
++ if (!(fcport = ostgt->vis_port))
++ /* ERROR */
++ continue;
++
++ for (lun = 0; lun < MAX_LUNS; lun++) {
++ /* set MSB if masked */
++ if (entry->Data[lun] | LUN_DATA_ENABLED) {
++ EXT_CLR_LUN_BIT(&(fcport->lun_mask),
++ lun);
++ } else {
++ EXT_SET_LUN_BIT(&(fcport->lun_mask),
++ lun);
++ }
++ }
++
++ /* Go to next entry */
++ continue;
++ }
++
++ /*
++ * Failover is enabled. Go through the mp_devs list and set lun
++ * data in configured path.
++ */
++ for (dev_no = 0; dev_no < MAX_MP_DEVICES; dev_no++) {
++ dp = host->mp_devs[dev_no];
++
++ if (dp == NULL)
++ continue;
++
++ /* Lookup entry name */
++ if (!qla2x00_is_portname_in_device(dp, entry->PortName))
++ continue;
++
++ if ((pathlist = dp->path_list) == NULL)
++ continue;
++
++ path = pathlist->last;
++ for (path_id = 0; path_id < pathlist->path_cnt;
++ path_id++, path = path->next) {
++
++ if (path->host != host)
++ continue;
++
++ if (!qla2x00_is_portname_equal(path->portname,
++ entry->PortName))
++ continue;
++
++ for (lun = 0; lun < MAX_LUNS; lun++) {
++ path->lun_data.data[lun] =
++ entry->Data[lun];
++ DEBUG4(printk("cfg_set_lun_data: lun "
++ "data[%d] = 0x%x \n", lun,
++ path->lun_data.data[lun]);)
++ }
++
++ break;
++ }
++ break;
++ }
++ }
++
++ KMEM_FREE(list, FO_LUN_DATA_LIST);
++
++ DEBUG9(printk("%s: exiting. ret = %d.\n", __func__, ret);)
++
++ return ret;
++}
++
++/*
++ * qla2x00_fo_get_target_data
++ * Get the target control byte for all devices attached to a HBA.
++ *
++ * Input:
++ * bp = pointer to buffer
++ *
++ * Return;
++ * 0 on success or errno.
++ *
++ * Context:
++ * Kernel context.
++ */
++static int
++qla2x00_fo_get_target_data(EXT_IOCTL *pext, FO_TARGET_DATA_INPUT *bp, int mode)
++{
++ scsi_qla_host_t *ha;
++ struct list_head *fcports, *fcpl;
++ fc_port_t *fcport;
++ int ret = 0;
++ mp_host_t *host = NULL;
++ mp_device_t *dp;
++ mp_path_t *path;
++ mp_path_list_t *pathlist;
++ os_tgt_t *ostgt;
++ uint8_t i, cnt;
++ uint8_t path_id;
++ uint16_t dev_no;
++ FO_DEVICE_DATA *entry, *u_entry;
++ uint32_t b;
++
++
++ DEBUG9(printk("%s: entered.\n", __func__);)
++
++ ha = qla2x00_get_hba((int)bp->HbaInstance);
++
++ if (!ha) {
++ DEBUG2_9_10(printk("%s: no ha matching inst %d.\n",
++ __func__, bp->HbaInstance);)
++
++ pext->Status = EXT_STATUS_DEV_NOT_FOUND;
++ return (ret);
++ }
++
++ DEBUG9(printk("%s: ha inst %ld, buff %p.\n",
++ __func__, ha->instance, bp);)
++
++ if (ha->flags.failover_enabled)
++ if ((host = qla2x00_cfg_find_host(ha)) == NULL) {
++ DEBUG2_9_10(printk("%s: no HOST for ha inst %ld.\n",
++ __func__, ha->instance);)
++ pext->Status = EXT_STATUS_DEV_NOT_FOUND;
++ return (ret);
++ }
++
++ entry = (FO_DEVICE_DATA *)qla2x00_kmem_zalloc(
++ sizeof(FO_DEVICE_DATA), GFP_ATOMIC, 14);
++ if (entry == NULL) {
++ DEBUG2_9_10(printk("%s: failed to alloc memory of size (%d)\n",
++ __func__, (int)sizeof(FO_DEVICE_DATA));)
++ pext->Status = EXT_STATUS_NO_MEMORY;
++ return (-ENOMEM);
++ }
++
++ u_entry = (FO_DEVICE_DATA *) pext->ResponseAdr;
++
++ /* find the correct fcport list */
++ if (!ha->flags.failover_enabled)
++ fcports = &ha->fcports;
++ else
++ fcports = host->fcports;
++
++ /* Check thru this adapter's fcport list */
++ i = 0;
++ fcport = NULL;
++ list_for_each(fcpl, fcports) {
++ fcport = list_entry(fcpl, fc_port_t, list);
++
++ if (i >= MAX_TARGETS)
++ break;
++
++ memcpy(entry->WorldWideName,
++ fcport->node_name, EXT_DEF_WWN_NAME_SIZE);
++ memcpy(entry->PortName,
++ fcport->port_name, EXT_DEF_WWN_NAME_SIZE);
++
++ for (b = 0; b < 3 ; b++)
++ entry->PortId[b] = fcport->d_id.r.d_id[2-b];
++
++ if (!ha->flags.failover_enabled) {
++ /*
++ * Failover disabled. Just find the port and return
++ * target info.
++ */
++ for (cnt = 0; cnt < MAX_FIBRE_DEVICES; cnt++) {
++ if (!(ostgt = ha->otgt[cnt])) {
++ continue;
++ }
++
++ if (ostgt->vis_port == fcport) {
++ entry->TargetId = cnt;
++ break;
++ }
++ }
++ if (cnt == MAX_FIBRE_DEVICES) {
++ /* Not found? For now just go to next port. */
++#if defined(QL_DEBUG_LEVEL_2) || defined(QL_DEBUG_LEVEL_10)
++ uint8_t *tmp_name;
++
++ tmp_name = fcport->port_name;
++
++ printk("fo_get_target_data(%ld): ERROR "
++ "port %02x%02x%02x%02x%02x%02x%02x%02x "
++ "not configured.\n", ha->host_no,
++ tmp_name[0], tmp_name[1], tmp_name[2],
++ tmp_name[3], tmp_name[4], tmp_name[5],
++ tmp_name[6], tmp_name[7]);
++#endif /* DEBUG */
++
++ continue;
++ }
++
++ entry->MultipathControl = 0; /* always configured */
++
++ ret = verify_area(VERIFY_WRITE, (void *)u_entry,
++ sizeof(FO_DEVICE_DATA));
++ if (ret) {
++ /* error */
++ DEBUG2_9_10(printk("%s: u_entry %p verify "
++ " wrt err. tgt id=%d.\n",
++ __func__, u_entry, cnt);)
++ pext->Status = EXT_STATUS_COPY_ERR;
++ break;
++ }
++
++ ret = copy_to_user(u_entry, entry,
++ sizeof(FO_DEVICE_DATA));
++ if (ret) {
++ /* error */
++ DEBUG2_9_10(printk("%s: u_entry %p copy "
++ "out err. tgt id=%d.\n",
++ __func__, u_entry, cnt);)
++ pext->Status = EXT_STATUS_COPY_ERR;
++ break;
++ }
++
++ u_entry++;
++
++ i++;
++ continue;
++ }
++
++ /*
++ * Failover is enabled. Go through the mp_devs list and
++ * get target data in configured path.
++ */
++ for (dev_no = 0; dev_no < MAX_MP_DEVICES; dev_no++) {
++ dp = host->mp_devs[dev_no];
++
++ if (dp == NULL)
++ continue;
++
++ /* Lookup entry name */
++ if (!qla2x00_is_portname_in_device(dp, entry->PortName))
++ continue;
++
++ if ((pathlist = dp->path_list) == NULL)
++ continue;
++
++ path = pathlist->last;
++ for (path_id = 0; path_id < pathlist->path_cnt;
++ path_id++, path= path->next) {
++
++ if (path->host != host)
++ continue;
++
++ if (!qla2x00_is_portname_equal(path->portname,
++ entry->PortName))
++ continue;
++
++ entry->TargetId = dp->dev_id;
++ entry->Dev_No = path->id;
++ entry->MultipathControl = path->mp_byte;
++
++ DEBUG9(printk("cfg_get_target_data: path->id "
++ "= %d, target data = 0x%x \n",
++ path->id, path->mp_byte);)
++
++ ret = verify_area(VERIFY_WRITE, (void *)u_entry,
++ sizeof(FO_DEVICE_DATA));
++ if (ret) {
++ /* error */
++ DEBUG2_9_10(printk("%s: u_entry %p "
++ "verify wrt err. tgt id=%d.\n",
++ __func__, u_entry, dp->dev_id);)
++ pext->Status = EXT_STATUS_COPY_ERR;
++ break;
++ }
++
++ ret = copy_to_user(u_entry, entry,
++ sizeof(FO_DEVICE_DATA));
++ if (ret) {
++ /* error */
++ DEBUG2_9_10(printk("%s: u_entry %p "
++ "copy out err. tgt id=%d.\n",
++ __func__, u_entry, dp->dev_id);)
++ pext->Status = EXT_STATUS_COPY_ERR;
++ break;
++ }
++
++ u_entry++;
++
++ /* Path found. Continue with next fcport */
++ break;
++ }
++ break;
++ }
++ i++;
++ }
++
++ if (ret == 0) {
++ pext->ResponseLen = sizeof(FO_DEVICE_DATABASE);
++ }
++
++ KMEM_FREE(entry, sizeof(FO_DEVICE_DATA));
++
++ DEBUG9(printk("%s: exiting. ret = %d.\n", __func__, ret);)
++
++ return (ret);
++}
++
++/*
++ * qla2x00_fo_set_target_data
++ * Set multipath control byte for all devices on the attached hba
++ *
++ * Input:
++ * bp = pointer to buffer
++ *
++ * Return;
++ * 0 on success or errno.
++ *
++ * Context:
++ * Kernel context.
++ */
++static int
++qla2x00_fo_set_target_data(EXT_IOCTL *pext, FO_TARGET_DATA_INPUT *bp, int mode)
++{
++ scsi_qla_host_t *ha;
++ int i;
++ int ret = 0;
++ mp_host_t *host;
++ mp_device_t *dp;
++ mp_path_t *path;
++ mp_path_list_t *pathlist;
++ uint16_t dev_no;
++ uint8_t path_id;
++ FO_DEVICE_DATA *entry, *u_entry;
++
++ DEBUG9(printk("%s: entered.\n", __func__);)
++
++ ha = qla2x00_get_hba((int)bp->HbaInstance);
++
++ if (!ha) {
++ DEBUG2_9_10(printk("%s: no ha matching inst %d.\n",
++ __func__, bp->HbaInstance);)
++
++ pext->Status = EXT_STATUS_DEV_NOT_FOUND;
++ return (ret);
++ }
++
++ DEBUG9(printk("%s: ha inst %ld, buff %p.\n",
++ __func__, ha->instance, bp);)
++
++ if (!ha->flags.failover_enabled)
++ /* non-failover mode. nothing to be done. */
++ return 0;
++
++ if ((host = qla2x00_cfg_find_host(ha)) == NULL) {
++ DEBUG2_9_10(printk("%s: no HOST for ha inst %ld.\n",
++ __func__, ha->instance);)
++ pext->Status = EXT_STATUS_DEV_NOT_FOUND;
++ return (ret);
++ }
++
++ entry = (FO_DEVICE_DATA *)qla2x00_kmem_zalloc(
++ sizeof(FO_DEVICE_DATA), GFP_ATOMIC, 15);
++ if (entry == NULL) {
++ DEBUG2_9_10(printk("%s: failed to alloc memory of size (%d)\n",
++ __func__, (int)sizeof(FO_DEVICE_DATA));)
++ pext->Status = EXT_STATUS_NO_MEMORY;
++ return (-ENOMEM);
++ }
++
++ u_entry = (FO_DEVICE_DATA *)(pext->RequestAdr +
++ sizeof(FO_TARGET_DATA_INPUT));
++
++ for (i = 0; i < MAX_TARGETS; i++, u_entry++) {
++ ret = verify_area(VERIFY_READ, (void *)u_entry,
++ sizeof(FO_DEVICE_DATA));
++ if (ret) {
++ /* error */
++ DEBUG2_9_10(printk("%s: u_entry %p verify read err.\n",
++ __func__, u_entry);)
++ pext->Status = EXT_STATUS_COPY_ERR;
++ break;
++ }
++
++ ret = copy_from_user(entry, u_entry, sizeof(FO_DEVICE_DATA));
++
++ if (ret) {
++ /* error */
++ DEBUG2_9_10(printk("%s: u_entry %p copy error.\n",
++ __func__, u_entry);)
++ pext->Status = EXT_STATUS_COPY_ERR;
++ break;
++ }
++
++ for (dev_no = 0; dev_no < MAX_MP_DEVICES; dev_no++) {
++ dp = host->mp_devs[dev_no];
++
++ if (dp == NULL)
++ continue;
++
++ /* Lookup entry name */
++ if (!qla2x00_is_portname_in_device(dp, entry->PortName))
++ continue;
++
++ if ((pathlist = dp->path_list) == NULL)
++ continue;
++
++ path = pathlist->last;
++ for (path_id = 0; path_id < pathlist->path_cnt;
++ path_id++, path= path->next) {
++
++ if (path->host != host)
++ continue;
++
++ if (!qla2x00_is_portname_equal(path->portname,
++ entry->PortName))
++ continue;
++
++ path->mp_byte = entry->MultipathControl;
++
++ DEBUG9(printk("cfg_set_target_data: %d target "
++ "data = 0x%x \n",
++ path->id,path->mp_byte);)
++
++ /*
++ * If this is the visible path, then make it
++ * available on next reboot.
++ */
++ if (!((path->mp_byte & MP_MASK_HIDDEN) ||
++ (path->mp_byte & MP_MASK_UNCONFIGURED))) {
++ pathlist->visible = path->id;
++ }
++
++ /* Found path. Go to next entry. */
++ break;
++ }
++ break;
++ }
++ }
++
++ KMEM_FREE(entry, sizeof(FO_DEVICE_DATA));
++
++ DEBUG9(printk("%s: exiting. ret = %d.\n", __func__, ret);)
++
++ return (ret);
++
++}
++
++/*
++ * qla2x00_fo_ioctl
++ * Provides functions for failover ioctl() calls.
++ *
++ * Input:
++ * ha = adapter state pointer.
++ * ioctl_code = ioctl function to perform
++ * arg = Address of application EXT_IOCTL cmd data
++ * mode = flags
++ *
++ * Returns:
++ * Return value is the ioctl rval_p return value.
++ * 0 = success
++ *
++ * Context:
++ * Kernel context.
++ */
++/* ARGSUSED */
++int
++qla2x00_fo_ioctl(scsi_qla_host_t *ha, int ioctl_code, void *ret_arg, int mode)
++{
++ static EXT_IOCTL cmd_struct;
++ int rval = 0;
++ size_t in_size, out_size;
++ static union {
++ FO_PARAMS params;
++ FO_GET_PATHS path;
++ FO_SET_CURRENT_PATH set_path;
++ /* FO_HBA_STAT_INPUT stat; */
++ FO_HBA_STAT stat;
++ FO_LUN_DATA_INPUT lun_data;
++ FO_TARGET_DATA_INPUT target_data;
++ } buff;
++
++
++ ENTER("qla2x00_fo_ioctl");
++ DEBUG9(printk("%s: entered. arg (%p):\n", __func__, ret_arg);)
++
++ memcpy(&cmd_struct, ret_arg, sizeof(cmd_struct));
++
++ /*
++ * default case for this switch not needed,
++ * ioctl_code validated by caller.
++ */
++ in_size = out_size = 0;
++ switch (ioctl_code) {
++ case FO_CC_GET_PARAMS:
++ out_size = sizeof(FO_PARAMS);
++ break;
++ case FO_CC_SET_PARAMS:
++ in_size = sizeof(FO_PARAMS);
++ break;
++ case FO_CC_GET_PATHS:
++ in_size = sizeof(FO_GET_PATHS);
++ break;
++ case FO_CC_SET_CURRENT_PATH:
++ in_size = sizeof(FO_SET_CURRENT_PATH);
++ break;
++ case FO_CC_GET_HBA_STAT:
++ case FO_CC_RESET_HBA_STAT:
++ in_size = sizeof(FO_HBA_STAT_INPUT);
++ break;
++ case FO_CC_GET_LUN_DATA:
++ in_size = sizeof(FO_LUN_DATA_INPUT);
++ break;
++ case FO_CC_SET_LUN_DATA:
++ in_size = sizeof(FO_LUN_DATA_INPUT);
++ break;
++ case FO_CC_GET_TARGET_DATA:
++ in_size = sizeof(FO_TARGET_DATA_INPUT);
++ break;
++ case FO_CC_SET_TARGET_DATA:
++ in_size = sizeof(FO_TARGET_DATA_INPUT);
++ break;
++
++ }
++ if (in_size != 0) {
++ if ((int)cmd_struct.RequestLen < in_size) {
++ cmd_struct.Status = EXT_STATUS_INVALID_PARAM;
++ cmd_struct.DetailStatus = EXT_DSTATUS_REQUEST_LEN;
++ DEBUG10(printk("%s: got invalie req len (%d).\n",
++ __func__, cmd_struct.RequestLen);)
++
++ } else {
++
++ rval = verify_area(VERIFY_READ,
++ (void *)cmd_struct.RequestAdr, in_size);
++ if (rval) {
++ /* error */
++ DEBUG2_9_10(printk("%s: req buf verify read "
++ "error. size=%d.\n",
++ __func__, in_size);)
++ cmd_struct.Status = EXT_STATUS_COPY_ERR;
++ }
++ rval = copy_from_user(&buff,
++ (void *)cmd_struct.RequestAdr, in_size);
++
++ if (rval) {
++ DEBUG2_9_10(printk("%s: req buf copy error. "
++ "size=%d.\n",
++ __func__, in_size);)
++
++ cmd_struct.Status = EXT_STATUS_COPY_ERR;
++ } else {
++ DEBUG9(printk("qla2x00_fo_ioctl: req buf "
++ "copied ok.\n"));
++ }
++ }
++ } else if (out_size != 0 && (int)cmd_struct.ResponseLen < out_size) {
++ cmd_struct.Status = EXT_STATUS_BUFFER_TOO_SMALL;
++ cmd_struct.DetailStatus = out_size;
++ DEBUG10(printk("%s: got invalie resp len (%d).\n",
++ __func__, cmd_struct.ResponseLen);)
++ }
++
++ if (rval != 0 || cmd_struct.Status != 0)
++ goto done_fo_ioctl;
++
++ cmd_struct.Status = EXT_STATUS_OK;
++ cmd_struct.DetailStatus = EXT_STATUS_OK;
++
++ switch (ioctl_code) {
++ case FO_CC_GET_PARAMS:
++ rval = qla2x00_fo_get_params(&buff.params);
++ break;
++ case FO_CC_SET_PARAMS:
++ rval = qla2x00_fo_set_params(&buff.params);
++ break;
++ case FO_CC_GET_PATHS:
++ rval = qla2x00_cfg_get_paths(&cmd_struct,
++ &buff.path,mode);
++ if (rval != 0)
++ out_size = 0;
++ break;
++ case FO_CC_SET_CURRENT_PATH:
++ rval = qla2x00_cfg_set_current_path(&cmd_struct,
++ &buff.set_path,mode);
++ break;
++ case FO_CC_RESET_HBA_STAT:
++ rval = qla2x00_fo_stats(&buff.stat, TRUE);
++ break;
++ case FO_CC_GET_HBA_STAT:
++ rval = qla2x00_fo_stats(&buff.stat, FALSE);
++ break;
++ case FO_CC_GET_LUN_DATA:
++
++ DEBUG4(printk("calling qla2x00_fo_get_lun_data\n");)
++ DEBUG4(printk("cmd_struct.RequestAdr (%p):\n",
++ cmd_struct.RequestAdr);)
++
++ rval = qla2x00_fo_get_lun_data(&cmd_struct,
++ &buff.lun_data, mode);
++
++ if (rval != 0)
++ out_size = 0;
++ break;
++ case FO_CC_SET_LUN_DATA:
++
++ DEBUG4(printk("calling qla2x00_fo_set_lun_data\n");)
++ DEBUG4(printk(" cmd_struct.RequestAdr (%p):\n",
++ cmd_struct.RequestAdr);)
++
++ rval = qla2x00_fo_set_lun_data(&cmd_struct,
++ &buff.lun_data, mode);
++ break;
++ case FO_CC_GET_TARGET_DATA:
++ DEBUG4(printk("calling qla2x00_fo_get_target_data\n");)
++ DEBUG4(printk("cmd_struct.RequestAdr (%p):\n",
++ cmd_struct.RequestAdr);)
++
++ rval = qla2x00_fo_get_target_data(&cmd_struct,
++ &buff.target_data, mode);
++
++ if (rval != 0) {
++ out_size = 0;
++ }
++ break;
++ case FO_CC_SET_TARGET_DATA:
++ DEBUG4(printk("calling qla2x00_fo_set_target_data\n");)
++ DEBUG4(printk(" cmd_struct.RequestAdr (%p):\n",
++ cmd_struct.RequestAdr);)
++ rval = qla2x00_fo_set_target_data(&cmd_struct,
++ &buff.target_data, mode);
++ break;
++
++ }
++
++ if (rval == 0 && (cmd_struct.ResponseLen = out_size) != 0) {
++ rval = verify_area(VERIFY_WRITE, (void *)cmd_struct.ResponseAdr,
++ out_size);
++ if (rval != 0) {
++ DEBUG10(printk("%s: resp buf very write error.\n",
++ __func__);)
++ cmd_struct.Status = EXT_STATUS_COPY_ERR;
++ }
++ }
++
++ if (rval == 0) {
++ rval = copy_to_user((void *)cmd_struct.ResponseAdr,
++ &buff, out_size);
++
++ if (rval != 0) {
++ DEBUG10(printk("%s: resp buf copy error. size=%d.\n",
++ __func__, out_size);)
++ cmd_struct.Status = EXT_STATUS_COPY_ERR;
++ }
++ }
++
++done_fo_ioctl:
++
++ /* Set Status and DetailStatus fields in application EXT_IOCTL */
++ (((EXT_IOCTL*)ret_arg)->Status) = cmd_struct.Status;
++ (((EXT_IOCTL*)ret_arg)->DetailStatus) = cmd_struct.DetailStatus;
++ (((EXT_IOCTL*)ret_arg)->ResponseLen) = cmd_struct.ResponseLen;
++
++ if (rval != 0) {
++ /*EMPTY*/
++ DEBUG10(printk("%s: **** FAILED ****\n", __func__);)
++ } else {
++ /*EMPTY*/
++ DEBUG9(printk("%s: exiting normally\n", __func__);)
++ }
++
++ return rval;
++}
++
++
++/*
++ * qla2x00_fo_count_retries
++ * Increment the retry counter for the command.
++ * Set or reset the SRB_RETRY flag.
++ *
++ * Input:
++ * sp = Pointer to command.
++ *
++ * Returns:
++ * TRUE -- retry
++ * FALSE -- don't retry
++ *
++ * Context:
++ * Kernel context.
++ */
++static uint8_t
++qla2x00_fo_count_retries(scsi_qla_host_t *ha, srb_t *sp)
++{
++ uint8_t retry = TRUE;
++ os_lun_t *lq;
++ os_tgt_t *tq;
++
++ DEBUG9(printk("%s: entered.\n", __func__);)
++
++ if (++sp->fo_retry_cnt > qla_fo_params.MaxRetriesPerIo) {
++ /* no more failovers for this request */
++ retry = FALSE;
++ sp->fo_retry_cnt = 0;
++ printk(KERN_INFO
++ "qla2x00: no more failovers for request - "
++ "pid= %ld\n", sp->cmd->serial_number);
++ } else {
++ /*
++ * We haven't exceeded the max retries for this request, check
++ * max retries this path
++ */
++ if ((sp->fo_retry_cnt % qla_fo_params.MaxRetriesPerPath) == 0) {
++ DEBUG(printk(" qla2x00_fo_count_retries: FAILOVER - "
++ "queuing ha=%ld, sp=%p, pid =%ld, "
++ "fo retry= %d \n",
++ ha->host_no,
++ sp, sp->cmd->serial_number,
++ sp->fo_retry_cnt);)
++
++ /*
++ * Note: we don't want it to timeout, so it is
++ * recycling on the retry queue and the fialover queue.
++ */
++ lq = sp->lun_queue;
++ tq = sp->tgt_queue;
++ set_bit(LUN_MPIO_BUSY, &lq->q_flag);
++
++ /*
++ * ??? We can get a path error on any ha, but always
++ * queue failover on originating ha. This will allow us
++ * to syncronized the requests for a given lun.
++ */
++ sp->f_start=jiffies;/*ra 10/29/01*/
++ /* Now queue it on to be failover */
++ sp->ha = ha;
++ add_to_failover_queue(ha,sp);
++ }
++ }
++
++ DEBUG9(printk("%s: exiting. retry = %d.\n", __func__, retry);)
++
++ return retry ;
++}
++
++
++/*
++ * qla2x00_fo_check
++ * This function is called from the done routine to see if
++ * the SRB requires a failover.
++ *
++ * This function examines the available os returned status and
++ * if meets condition, the command(srb) is placed ont the failover
++ * queue for processing.
++ *
++ * Input:
++ * sp = Pointer to the SCSI Request Block
++ *
++ * Output:
++ * sp->flags SRB_RETRY bit id command is to
++ * be retried otherwise bit is reset.
++ *
++ * Returns:
++ * None.
++ *
++ * Context:
++ * Kernel/Interrupt context.
++ */
++uint8_t
++qla2x00_fo_check(scsi_qla_host_t *ha, srb_t *sp)
++{
++ uint8_t retry = FALSE;
++ int host_status;
++#if DEBUG_QLA2100
++ static char *reason[] = {
++ "DID_OK",
++ "DID_NO_CONNECT",
++ "DID_BUS_BUSY",
++ "DID_TIME_OUT",
++ "DID_BAD_TARGET",
++ "DID_ABORT",
++ "DID_PARITY",
++ "DID_ERROR",
++ "DID_RESET",
++ "DID_BAD_INTR"
++ };
++#endif
++
++ DEBUG9(printk("%s: entered.\n", __func__);)
++
++ /* we failover on selction timeouts only */
++ host_status = CMD_RESULT(sp->cmd) >>16;
++ if( host_status == DID_NO_CONNECT) {
++ if( qla2x00_fo_count_retries(ha,sp) ) {
++ /* Force a retry on this request, it will
++ * cause the LINUX timer to get reset, while we
++ * we are processing the failover.
++ */
++ CMD_RESULT(sp->cmd) = DID_BUS_BUSY << 16;
++ retry = TRUE;
++ }
++ DEBUG(printk("qla2x00_fo_check: pid= %ld sp %p "
++ "retry count=%d, retry flag = %d, "
++ "host status (%s)\n\r",
++ sp->cmd->serial_number,
++ sp, sp->fo_retry_cnt,
++ retry, reason[host_status]);)
++ }
++
++ DEBUG9(printk("%s: exiting. retry = %d.\n", __func__, retry);)
++
++ return retry;
++}
++
++/*
++ * qla2x00_fo_path_change
++ * This function is called from configuration mgr to notify
++ * of a path change.
++ *
++ * Input:
++ * type = Failover notify type, FO_NOTIFY_LUN_RESET or FO_NOTIFY_LOGOUT
++ * newlunp = Pointer to the fc_lun struct for current path.
++ * oldlunp = Pointer to fc_lun struct for previous path.
++ *
++ * Returns:
++ *
++ * Context:
++ * Kernel context.
++ */
++uint32_t
++qla2x00_fo_path_change(uint32_t type, fc_lun_t *newlunp, fc_lun_t *oldlunp)
++{
++ uint32_t ret = QLA2X00_SUCCESS;
++
++ newlunp->max_path_retries = 0;
++ return ret;
++}
++
++/*
++ * qla2x00_fo_get_params
++ * Process an ioctl request to get system wide failover parameters.
++ *
++ * Input:
++ * pp = Pointer to FO_PARAMS structure.
++ *
++ * Returns:
++ * EXT_STATUS code.
++ *
++ * Context:
++ * Kernel context.
++ */
++static uint32_t
++qla2x00_fo_get_params(PFO_PARAMS pp)
++{
++ DEBUG9(printk("%s: entered.\n", __func__);)
++
++ pp->MaxPathsPerDevice = qla_fo_params.MaxPathsPerDevice;
++ pp->MaxRetriesPerPath = qla_fo_params.MaxRetriesPerPath;
++ pp->MaxRetriesPerIo = qla_fo_params.MaxRetriesPerIo;
++ pp->Flags = qla_fo_params.Flags;
++ pp->FailoverNotifyType = qla_fo_params.FailoverNotifyType;
++ pp->FailoverNotifyCdbLength = qla_fo_params.FailoverNotifyCdbLength;
++ memset(pp->FailoverNotifyCdb, 0, sizeof(pp->FailoverNotifyCdb));
++ memcpy(pp->FailoverNotifyCdb,
++ &qla_fo_params.FailoverNotifyCdb[0], sizeof(pp->FailoverNotifyCdb));
++
++ DEBUG9(printk("%s: exiting.\n", __func__);)
++
++ return EXT_STATUS_OK;
++}
++
++/*
++ * qla2x00_fo_set_params
++ * Process an ioctl request to set system wide failover parameters.
++ *
++ * Input:
++ * pp = Pointer to FO_PARAMS structure.
++ *
++ * Returns:
++ * EXT_STATUS code.
++ *
++ * Context:
++ * Kernel context.
++ */
++static uint32_t
++qla2x00_fo_set_params(PFO_PARAMS pp)
++{
++ DEBUG9(printk("%s: entered.\n", __func__);)
++
++ /* Check values for defined MIN and MAX */
++ if ((pp->MaxPathsPerDevice > SDM_DEF_MAX_PATHS_PER_DEVICE) ||
++ (pp->MaxRetriesPerPath < FO_MAX_RETRIES_PER_PATH_MIN) ||
++ (pp->MaxRetriesPerPath > FO_MAX_RETRIES_PER_PATH_MAX) ||
++ (pp->MaxRetriesPerIo < FO_MAX_RETRIES_PER_IO_MIN) ||
++ (pp->MaxRetriesPerPath > FO_MAX_RETRIES_PER_IO_MAX)) {
++ DEBUG2_9_10(printk("%s: got invalid params.\n", __func__);)
++ return EXT_STATUS_INVALID_PARAM;
++ }
++
++ /* Update the global structure. */
++ qla_fo_params.MaxPathsPerDevice = pp->MaxPathsPerDevice;
++ qla_fo_params.MaxRetriesPerPath = pp->MaxRetriesPerPath;
++ qla_fo_params.MaxRetriesPerIo = pp->MaxRetriesPerIo;
++ qla_fo_params.Flags = pp->Flags;
++ qla_fo_params.FailoverNotifyType = pp->FailoverNotifyType;
++ qla_fo_params.FailoverNotifyCdbLength = pp->FailoverNotifyCdbLength;
++ if (pp->FailoverNotifyType & FO_NOTIFY_TYPE_CDB) {
++ if (pp->FailoverNotifyCdbLength >
++ sizeof(qla_fo_params.FailoverNotifyCdb)) {
++ DEBUG2_9_10(printk("%s: got invalid cdb length.\n",
++ __func__);)
++ return EXT_STATUS_INVALID_PARAM;
++ }
++
++ memcpy(qla_fo_params.FailoverNotifyCdb,
++ pp->FailoverNotifyCdb,
++ sizeof(qla_fo_params.FailoverNotifyCdb));
++ }
++
++ DEBUG9(printk("%s: exiting.\n", __func__);)
++
++ return EXT_STATUS_OK;
++}
++
++
++/*
++ * qla2x00_fo_init_params
++ * Gets driver configuration file failover properties to initalize
++ * the global failover parameters structure.
++ *
++ * Input:
++ * ha = adapter block pointer.
++ *
++ * Context:
++ * Kernel context.
++ */
++void
++qla2x00_fo_init_params(scsi_qla_host_t *ha)
++{
++ DEBUG3(printk("%s: entered.\n", __func__);)
++
++ /* For parameters that are not completely implemented yet, */
++
++ memset(&qla_fo_params, 0, sizeof(qla_fo_params));
++
++ if(MaxPathsPerDevice) {
++ qla_fo_params.MaxPathsPerDevice = MaxPathsPerDevice;
++ } else
++ qla_fo_params.MaxPathsPerDevice =FO_MAX_PATHS_PER_DEVICE_DEF ;
++ if(MaxRetriesPerPath) {
++ qla_fo_params.MaxRetriesPerPath = MaxRetriesPerPath;
++ } else
++ qla_fo_params.MaxRetriesPerPath =FO_MAX_RETRIES_PER_PATH_DEF;
++ if(MaxRetriesPerIo) {
++ qla_fo_params.MaxRetriesPerIo =MaxRetriesPerIo;
++ } else
++ qla_fo_params.MaxRetriesPerIo =FO_MAX_RETRIES_PER_IO_DEF;
++
++ qla_fo_params.Flags = 0;
++ qla_fo_params.FailoverNotifyType = FO_NOTIFY_TYPE_NONE;
++
++ DEBUG3(printk("%s: exiting.\n", __func__);)
++
++}
++
++/*
++ * qla2x00_send_fo_notification
++ * Sends failover notification if needed. Change the fc_lun pointer
++ * in the old path lun queue.
++ *
++ * Input:
++ * old_lp = Pointer to old fc_lun.
++ * new_lp = Pointer to new fc_lun.
++ *
++ * Returns:
++ * Local function status code.
++ *
++ * Context:
++ * Kernel context.
++ */
++uint32_t
++qla2x00_send_fo_notification(fc_lun_t *old_lp, fc_lun_t *new_lp)
++{
++ scsi_qla_host_t *old_ha = old_lp->fcport->ha;
++ int rval = QLA2X00_SUCCESS;
++ inq_cmd_rsp_t *pkt;
++ uint16_t loop_id, lun;
++ dma_addr_t phys_address;
++
++
++ ENTER("qla2x00_send_fo_notification");
++ DEBUG3(printk("%s: entered.\n", __func__);)
++
++ loop_id = old_lp->fcport->loop_id;
++ lun = old_lp->lun;
++
++ if (qla_fo_params.FailoverNotifyType == FO_NOTIFY_TYPE_LUN_RESET) {
++ rval = qla2x00_lun_reset(old_ha, loop_id, lun);
++ if (rval == QLA2X00_SUCCESS) {
++ DEBUG4(printk("qla2x00_send_fo_notification: LUN "
++ "reset succeded\n");)
++ } else {
++ DEBUG4(printk("qla2x00_send_fo_notification: LUN "
++ "reset failed\n");)
++ }
++
++ }
++ if ( (qla_fo_params.FailoverNotifyType ==
++ FO_NOTIFY_TYPE_LOGOUT_OR_LUN_RESET) ||
++ (qla_fo_params.FailoverNotifyType ==
++ FO_NOTIFY_TYPE_LOGOUT_OR_CDB) ) {
++
++ rval = qla2x00_fabric_logout(old_ha, loop_id);
++ if (rval == QLA2X00_SUCCESS) {
++ DEBUG4(printk("qla2x00_send_fo_failover_notify: "
++ "logout succeded\n");)
++ } else {
++ DEBUG4(printk("qla2x00_send_fo_failover_notify: "
++ "logout failed\n");)
++ }
++
++ }
++
++ if (qla_fo_params.FailoverNotifyType == FO_NOTIFY_TYPE_CDB) {
++ pkt = pci_alloc_consistent(old_ha->pdev,
++ sizeof(inq_cmd_rsp_t), &phys_address);
++ if (pkt == NULL) {
++ DEBUG4(printk("qla2x00_send_fo_failover_notify: "
++ "memory allocation failed\n");)
++
++ return(QLA2X00_FUNCTION_FAILED);
++ }
++
++ memset(pkt,0, sizeof(inq_cmd_rsp_t));
++ pkt->p.cmd.entry_type = COMMAND_A64_TYPE;
++ pkt->p.cmd.entry_count = 1;
++ pkt->p.cmd.lun = lun;
++ pkt->p.cmd.target = (uint8_t)loop_id;
++ pkt->p.cmd.control_flags = CF_SIMPLE_TAG;
++ memcpy(pkt->p.cmd.scsi_cdb,
++ qla_fo_params.FailoverNotifyCdb,
++ qla_fo_params.FailoverNotifyCdbLength);
++ /* FIXME This setup needs to be verified with Dennis. */
++ pkt->p.cmd.dseg_count = __constant_cpu_to_le16(1);
++ pkt->p.cmd.byte_count = __constant_cpu_to_le32(0);
++ pkt->p.cmd.dseg_0_address[0] = cpu_to_le32(
++ LSD(phys_address + sizeof (sts_entry_t)));
++ pkt->p.cmd.dseg_0_address[1] = cpu_to_le32(
++ MSD(phys_address + sizeof (sts_entry_t)));
++ pkt->p.cmd.dseg_0_length = __constant_cpu_to_le32(0);
++
++ rval = qla2x00_issue_iocb(old_ha,
++ pkt, phys_address, sizeof (inq_cmd_rsp_t));
++
++ if (rval != QLA2X00_SUCCESS ||
++ pkt->p.rsp.comp_status != CS_COMPLETE ||
++ pkt->p.rsp.scsi_status & SS_CHECK_CONDITION ||
++ pkt->inq[0] == 0x7f) {
++
++ DEBUG4(printk("qla2x00_fo_notification: send CDB "
++ "failed: comp_status = %x"
++ "scsi_status = %x inq[0] = %x\n",
++ pkt->p.rsp.comp_status,
++ pkt->p.rsp.scsi_status,
++ pkt->inq[0]);)
++ }
++
++ pci_free_consistent(old_ha->pdev,
++ sizeof(inq_cmd_rsp_t), pkt, phys_address);
++ }
++
++ DEBUG3(printk("%s: exiting. rval = %d.\n", __func__, rval);)
++
++ return rval;
++}
++
++
++/*
++ * qla2100_fo_enabled
++ * Reads and validates the failover enabled property.
++ *
++ * Input:
++ * ha = adapter state pointer.
++ * instance = HBA number.
++ *
++ * Returns:
++ * TRUE when failover is authorized else FALSE
++ *
++ * Context:
++ * Kernel context.
++ */
++uint8_t
++qla2x00_fo_enabled(scsi_qla_host_t *ha, int instance)
++{
++ uint8_t enable = FALSE;
++
++ if (ha->flags.failover_enabled)
++ enable = TRUE;
++
++ return enable;
++}
+--- /dev/null Thu Apr 11 07:25:15 2002
++++ linux-2.5.73-n9560/drivers/scsi/qla2xxx/qla_fo.cfg Thu Jul 3 15:34:42 2003
+@@ -0,0 +1,31 @@
++/******************************************************************************
++ * QLOGIC LINUX SOFTWARE
++ *
++ * QLogic ISP2x00 device driver for Linux 2.4.x
++ * Copyright (C) 2003 Qlogic Corporation
++ * (www.qlogic.com)
++ *
++ * This program is free software; you can redistribute it and/or modify it
++ * under the terms of the GNU General Public License as published by the
++ * Free Software Foundation; either version 2, or (at your option) any
++ * later version.
++ *
++ * This program is distributed in the hope that it will be useful, but
++ * WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ * General Public License for more details.
++ *
++ ******************************************************************************/
++
++/*
++ * QLogic ISP2x00 Multi-path LUN Support Driver
++ */
++int MaxPathsPerDevice = 0;
++int MaxRetriesPerPath =0 ;
++int MaxRetriesPerIo =0;
++#if defined(MODULE)
++/* insmod qla2100 <options> ql2xopts=<string> */
++MODULE_PARM(MaxPathsPerDevice, "i");
++MODULE_PARM(MaxRetriesPerPath, "i");
++MODULE_PARM(MaxRetriesPerIo, "i");
++#endif
+--- /dev/null Thu Apr 11 07:25:15 2002
++++ linux-2.5.73-n9560/drivers/scsi/qla2xxx/qla_fo.h Thu Jul 3 15:34:42 2003
+@@ -0,0 +1,75 @@
++/******************************************************************************
++ * QLOGIC LINUX SOFTWARE
++ *
++ * QLogic ISP2x00 device driver for Linux 2.5.x
++ * Copyright (C) 2003 Qlogic Corporation
++ * (www.qlogic.com)
++ *
++ * This program is free software; you can redistribute it and/or modify it
++ * under the terms of the GNU General Public License as published by the
++ * Free Software Foundation; either version 2, or (at your option) any
++ * later version.
++ *
++ * This program is distributed in the hope that it will be useful, but
++ * WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ * General Public License for more details.
++ *
++ ******************************************************************************/
++
++/*
++ * QLogic ISP2x00 Failover Header
++ *
++ */
++#ifndef _QLA_FO_H
++#define _QLA_FO_H
++
++#if defined(__cplusplus)
++extern "C"
++{
++#endif
++
++#include "qlfo.h"
++ /*
++ * This structure definition is for a scsi I/O request NOT subject to
++ * failover re-routing. It is for the use of configuration operations
++ * and diagnostics functions as definted in ExIoct.h
++ */
++ typedef struct scsi_cdb_request {
++ struct adapter_state *ha;
++ uint16_t target;
++ uint16_t lun;
++ uint8_t *cdb_ptr; /* Pointer to cdb to be sent */
++ uint8_t cdb_len; /* cdb length */
++ uint8_t direction; /* Direction of I/O for buffer */
++ uint8_t scb_len; /* Scsi completion block length */
++ uint8_t *scb_ptr; /* Scsi completion block pointer */
++ uint8_t *buf_ptr; /* Pointer to I/O buffer */
++ uint16_t buf_len; /* Buffer size */
++ }
++ SCSI_REQ_t, *SCSI_REQ_p;
++
++
++ /*
++ * Special defines
++ */
++ typedef union _FO_HBA_STAT {
++ FO_HBA_STAT_INPUT input;
++ FO_HBA_STAT_INFO info;
++ } FO_HBA_STAT;
++
++ typedef union _FO_LUN_DATA {
++ FO_LUN_DATA_INPUT input;
++ FO_LUN_DATA_LIST list;
++ } FO_LUN_DATA;
++
++ typedef union _FO_TARGET_DATA {
++ FO_TARGET_DATA_INPUT input;
++ FO_DEVICE_DATABASE list;
++ } FO_TARGET_DATA;
++
++#if defined(__cplusplus)
++}
++#endif
++
++#endif /* ifndef _QLA_FO_H */
+--- /dev/null Thu Apr 11 07:25:15 2002
++++ linux-2.5.73-n9560/drivers/scsi/qla2xxx/qla_gbl.h Thu Jul 3 15:34:42 2003
+@@ -0,0 +1,395 @@
++/********************************************************************************
++* QLOGIC LINUX SOFTWARE
++*
++* QLogic ISP2x00 device driver for Linux 2.5.x
++* Copyright (C) 2003 Qlogic Corporation
++* (www.qlogic.com)
++*
++* This program is free software; you can redistribute it and/or modify it
++* under the terms of the GNU General Public License as published by the
++* Free Software Foundation; either version 2, or (at your option) any
++* later version.
++*
++* This program is distributed in the hope that it will be useful, but
++* WITHOUT ANY WARRANTY; without even the implied warranty of
++* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++* General Public License for more details.
++*
++******************************************************************************
++* Global include file.
++******************************************************************************/
++
++
++#ifndef __QLA_GBL_H
++#define __QLA_GBL_H
++
++/*
++ * Global Data in FW files.
++ */
++extern unsigned char fw2100tp_version[];
++extern unsigned char fw2100tp_version_str[];
++extern unsigned short fw2100tp_addr01;
++extern unsigned short fw2100tp_code01[];
++extern unsigned short fw2100tp_length01;
++
++extern unsigned char fw2200ip_version[];
++extern unsigned char fw2200ip_version_str[];
++extern unsigned short fw2200ip_addr01;
++extern unsigned short fw2200ip_code01[];
++extern unsigned short fw2200ip_length01;
++
++extern unsigned char fw2300tpx_version[];
++extern unsigned char fw2300tpx_version_str[];
++extern unsigned short fw2300tpx_addr01;
++extern unsigned short fw2300tpx_code01[];
++extern unsigned short fw2300tpx_length01;
++
++extern unsigned char fw2300ipx_version[];
++extern unsigned char fw2300ipx_version_str[];
++extern unsigned short fw2300ipx_addr01;
++extern unsigned short fw2300ipx_code01[];
++extern unsigned short fw2300ipx_length01;
++
++#if defined(ISP2322)
++extern unsigned char fw2322tpx_version[];
++extern unsigned char fw2322tpx_version_str[];
++extern unsigned short fw2322tpx_addr01;
++extern unsigned short fw2322tpx_code01[];
++extern unsigned short fw2322tpx_length01;
++extern unsigned long rseqtpx_code_addr01;
++extern unsigned short rseqtpx_code01[];
++extern unsigned short rseqtpx_code_length01;
++extern unsigned long xseqtpx_code_addr01;
++extern unsigned short xseqtpx_code01[];
++extern unsigned short xseqtpx_code_length01;
++
++extern unsigned char fw2322ipx_version[];
++extern unsigned char fw2322ipx_version_str[];
++extern unsigned short fw2322ipx_addr01;
++extern unsigned short fw2322ipx_code01[];
++extern unsigned short fw2322ipx_length01;
++extern unsigned long rseqipx_code_addr01;
++extern unsigned short rseqipx_code01[];
++extern unsigned short rseqipx_code_length01;
++extern unsigned long xseqipx_code_addr01;
++extern unsigned short xseqipx_code01[];
++extern unsigned short xseqipx_code_length01;
++#endif
++
++/*
++ * Global Function Prototypes in qla_init.c source file.
++ */
++extern uint8_t qla2x00_initialize_adapter(scsi_qla_host_t *);
++extern uint8_t qla2x00_loop_resync(scsi_qla_host_t *);
++extern void qla2x00_tgt_free(scsi_qla_host_t *ha, uint16_t t);
++extern uint8_t qla2x00_fabric_login(scsi_qla_host_t *, fcdev_t *);
++extern uint8_t qla2x00_local_device_login(scsi_qla_host_t *, uint16_t);
++
++extern void qla2x00_restart_queues(scsi_qla_host_t *, uint8_t);
++
++extern os_tgt_t *qla2x00_tgt_alloc(scsi_qla_host_t *, uint16_t);
++extern os_lun_t * qla2x00_lun_alloc(scsi_qla_host_t *, uint16_t, uint16_t);
++
++extern uint8_t qla2x00_abort_isp(scsi_qla_host_t *, uint8_t);
++
++
++/*
++ * Global Data in qla_os.c source file.
++ */
++extern char qla2x00_version_str[];
++extern unsigned long qla2x00_verbose;
++extern unsigned long qla2x00_quiet;
++extern unsigned long qla2x00_reinit;
++extern unsigned long qla2x00_req_dmp;
++
++extern int num_hosts;
++extern int apiHBAInstance;
++
++extern struct _qla2x00stats qla2x00_stats;
++extern char *ql2xdevconf;
++extern int ql2xretrycount;
++extern int qla2xenbinq;
++extern int max_srbs;
++#if defined(ISP2200) || defined(ISP2300)
++extern int ql2xlogintimeout;
++extern int qlport_down_retry;
++#endif
++extern int ql2xmaxqdepth;
++extern int displayConfig;
++
++extern int ql2xfailover;
++
++extern int ConfigRequired;
++extern int recoveryTime;
++extern int failbackTime;
++
++extern int Bind;
++extern int ql2xsuspendcount;
++extern int qla2x00_retryq_dmp;
++#if defined(MODULE)
++extern char *ql2xopts;
++#endif
++extern struct list_head qla_hostlist;
++extern rwlock_t qla_hostlist_lock;
++
++extern int qla2x00_queuecommand(Scsi_Cmnd *, void (*)(Scsi_Cmnd *));
++
++extern uint8_t
++__qla2x00_suspend_lun(scsi_qla_host_t *, os_lun_t *, int, int, int);
++
++extern int qla2x00_done(scsi_qla_host_t *);
++extern void qla2x00_next(scsi_qla_host_t *);
++extern void qla2x00_flush_failover_q(scsi_qla_host_t *, os_lun_t *);
++extern void qla2x00_reset_lun_fo_counts(scsi_qla_host_t *, os_lun_t *);
++
++extern uint8_t qla2x00_check_tgt_status(scsi_qla_host_t *, Scsi_Cmnd *);
++extern uint8_t qla2x00_check_port_status(scsi_qla_host_t *, fc_port_t *);
++
++extern void qla2x00_extend_timeout(Scsi_Cmnd *, int);
++extern srb_t * qla2x00_get_new_sp (scsi_qla_host_t *ha);
++
++extern void qla2x00_mark_device_lost(scsi_qla_host_t *, fc_port_t *);
++extern void qla2x00_mark_all_devices_lost(scsi_qla_host_t *);
++
++extern int qla2x00_get_prop_xstr(scsi_qla_host_t *, char *, uint8_t *, int);
++
++extern void qla2x00_abort_queues(scsi_qla_host_t *, uint8_t);
++
++/*
++ * Global Function Prototypes in qla_iocb.c source file.
++ */
++extern request_t *qla2x00_req_pkt(scsi_qla_host_t *);
++extern request_t *qla2x00_ms_req_pkt(scsi_qla_host_t *, srb_t *);
++extern void qla2x00_isp_cmd(scsi_qla_host_t *);
++extern int qla2x00_start_scsi(srb_t *sp);
++int qla2x00_marker(scsi_qla_host_t *, uint16_t, uint16_t, uint8_t);
++int __qla2x00_marker(scsi_qla_host_t *, uint16_t, uint16_t, uint8_t);
++
++/*
++ * Global Function Prototypes in qla_mbx.c source file.
++ */
++extern uint8_t
++qla2x00_mailbox_command(scsi_qla_host_t *, mbx_cmd_t *);
++
++extern int
++qla2x00_load_ram(scsi_qla_host_t *, dma_addr_t, uint16_t, uint16_t);
++
++extern int
++qla2x00_load_ram_ext(scsi_qla_host_t *, dma_addr_t, uint32_t, uint16_t);
++
++extern int
++qla2x00_execute_fw(scsi_qla_host_t *);
++
++extern void
++qla2x00_get_fw_version(scsi_qla_host_t *, uint16_t *,
++ uint16_t *, uint16_t *, uint16_t *);
++
++extern int
++qla2x00_get_fw_options(scsi_qla_host_t *, uint16_t *, uint16_t *, uint16_t *);
++
++extern int
++qla2x00_set_fw_options(scsi_qla_host_t *,
++ uint16_t, uint16_t, uint16_t, uint16_t, uint16_t);
++
++extern int
++qla2x00_read_ram_word(scsi_qla_host_t *, uint16_t, uint16_t *);
++extern int
++qla2x00_write_ram_word(scsi_qla_host_t *, uint16_t, uint16_t);
++extern int
++qla2x00_write_ram_word_ext(scsi_qla_host_t *, uint32_t, uint16_t);
++
++extern int
++qla2x00_mbx_reg_test(scsi_qla_host_t *);
++
++extern int
++qla2x00_verify_checksum(scsi_qla_host_t *);
++
++extern int
++qla2x00_issue_iocb(scsi_qla_host_t *, void *, dma_addr_t, size_t);
++
++extern int
++qla2x00_abort_command(scsi_qla_host_t *, srb_t *);
++
++extern int
++qla2x00_abort_device(scsi_qla_host_t *, uint16_t, uint16_t);
++
++#if USE_ABORT_TGT
++extern int
++qla2x00_abort_target(fc_port_t *fcport);
++#endif
++
++extern int
++qla2x00_target_reset(scsi_qla_host_t *, uint16_t, uint16_t);
++
++extern int
++qla2x00_get_adapter_id(scsi_qla_host_t *, uint16_t *, uint8_t *, uint8_t *,
++ uint8_t *, uint16_t *);
++
++extern int
++qla2x00_get_retry_cnt(scsi_qla_host_t *, uint8_t *, uint8_t *);
++
++int
++qla2x00_loopback_test(scsi_qla_host_t *, INT_LOOPBACK_REQ *, uint16_t *);
++
++extern int
++qla2x00_init_firmware(scsi_qla_host_t *, uint16_t);
++
++extern int
++qla2x00_get_port_database(scsi_qla_host_t *, fcdev_t *, uint8_t);
++
++extern int
++qla2x00_get_firmware_state(scsi_qla_host_t *, uint16_t *);
++
++extern int
++qla2x00_get_port_name(scsi_qla_host_t *, uint16_t, uint8_t *, uint8_t);
++
++extern uint8_t
++qla2x00_get_link_status(scsi_qla_host_t *, uint8_t, void *, uint16_t *);
++
++extern int
++qla2x00_lip_reset(scsi_qla_host_t *);
++
++extern int
++qla2x00_send_sns(scsi_qla_host_t *, dma_addr_t, uint16_t, size_t);
++
++extern int
++qla2x00_login_fabric(scsi_qla_host_t *, uint16_t, uint8_t, uint8_t, uint8_t,
++ uint16_t *, uint8_t);
++
++extern int
++qla2x00_login_local_device(scsi_qla_host_t *, uint16_t, uint16_t *, uint8_t);
++
++extern int
++qla2x00_fabric_logout(scsi_qla_host_t *ha, uint16_t loop_id);
++
++extern int
++qla2x00_full_login_lip(scsi_qla_host_t *ha);
++
++extern int
++qla2x00_get_port_list(scsi_qla_host_t *, port_list_entry_t *, dma_addr_t,
++ uint16_t, uint16_t *);
++
++#if 0 /* not yet needed */
++extern int
++qla2x00_dump_ram(scsi_qla_host_t *, uint32_t, dma_addr_t, uint32_t);
++#endif
++
++extern int
++qla2x00_lun_reset(scsi_qla_host_t *, uint16_t, uint16_t);
++
++extern int
++qla2x00_send_rnid_mbx(scsi_qla_host_t *, uint16_t, uint8_t, dma_addr_t,
++ size_t, uint16_t *);
++
++extern int
++qla2x00_set_rnid_params_mbx(scsi_qla_host_t *, dma_addr_t, size_t, uint16_t *);
++
++extern int
++qla2x00_get_rnid_params_mbx(scsi_qla_host_t *, dma_addr_t, size_t, uint16_t *);
++
++#if defined(QL_DEBUG_LEVEL_3)
++extern int
++qla2x00_get_fcal_position_map(scsi_qla_host_t *ha, char *pos_map);
++#endif
++
++/*
++ * Global Data in qla_fo.c source file.
++ */
++extern SysFoParams_t qla_fo_params;
++
++/*
++ * Global Function Prototypes in qla_fo.c source file.
++ */
++extern scsi_qla_host_t *qla2x00_get_hba(int);
++extern uint32_t qla2x00_send_fo_notification(fc_lun_t *fclun_p, fc_lun_t *olun_p);
++extern void qla2x00_fo_init_params(scsi_qla_host_t *ha);
++extern uint8_t qla2x00_fo_enabled(scsi_qla_host_t *ha, int instance);
++
++/*
++ * Global Data in qla_cfg.c source file.
++ */
++extern mp_host_t *mp_hosts_base;
++extern uint8_t mp_config_required;
++/*
++ * Global Function Prototypes in qla_cfg.c source file.
++ */
++extern mp_host_t * qla2x00_cfg_find_host(scsi_qla_host_t *);
++extern uint8_t qla2x00_is_portname_in_device(mp_device_t *, uint8_t *);
++extern int qla2x00_cfg_init (scsi_qla_host_t *ha);
++extern int qla2x00_cfg_path_discovery(scsi_qla_host_t *ha);
++extern int qla2x00_cfg_event_notify(scsi_qla_host_t *ha, uint32_t i_type);
++extern fc_lun_t *qla2x00_cfg_failover(scsi_qla_host_t *ha, fc_lun_t *fp,
++ os_tgt_t *tgt, srb_t *sp);
++extern int qla2x00_cfg_get_paths( EXT_IOCTL *, FO_GET_PATHS *, int);
++extern int qla2x00_cfg_set_current_path( EXT_IOCTL *,
++ FO_SET_CURRENT_PATH *, int);
++extern void qla2x00_fo_properties(scsi_qla_host_t *ha);
++extern mp_host_t * qla2x00_add_mp_host(uint8_t *);
++extern void qla2x00_cfg_mem_free(scsi_qla_host_t *ha);
++extern mp_host_t * qla2x00_alloc_host(scsi_qla_host_t *);
++extern uint8_t qla2x00_fo_check(scsi_qla_host_t *ha, srb_t *sp);
++extern mp_path_t *qla2x00_find_path_by_name(mp_host_t *, mp_path_list_t *,
++ uint8_t *name);
++
++/*
++ * Global Function Prototypes in qla_cfgln.c source file.
++ */
++extern void qla2x00_cfg_build_path_tree( scsi_qla_host_t *ha);
++extern uint8_t qla2x00_update_mp_device(mp_host_t *,
++ fc_port_t *, uint16_t );
++extern void qla2x00_cfg_display_devices(void);
++
++/*
++ * Global Function Prototypes in qla_xioctl.c source file.
++ */
++extern void qla2x00_enqueue_aen(scsi_qla_host_t *, uint16_t, void *);
++extern int qla2x00_fo_ioctl(scsi_qla_host_t *, int, void *, int);
++extern int qla2x00_alloc_ioctl_mem(scsi_qla_host_t *);
++extern void qla2x00_free_ioctl_mem(scsi_qla_host_t *);
++extern int qla2x00_get_ioctl_scrap_mem(scsi_qla_host_t *, void **, uint32_t);
++extern void qla2x00_free_ioctl_scrap_mem(scsi_qla_host_t *);
++
++/*
++ * Global Function Prototypes in qla_inioctl.c source file.
++ */
++extern int qla2x00_read_nvram(scsi_qla_host_t *, EXT_IOCTL *, int);
++extern int qla2x00_update_nvram(scsi_qla_host_t *, EXT_IOCTL *, int);
++extern int qla2x00_write_nvram_word(scsi_qla_host_t *, uint8_t, uint16_t);
++extern int qla2x00_send_loopback(scsi_qla_host_t *, EXT_IOCTL *, int);
++extern int qla2x00_read_option_rom(scsi_qla_host_t *, EXT_IOCTL *, int);
++extern int qla2x00_update_option_rom(scsi_qla_host_t *, EXT_IOCTL *, int);
++
++
++/*
++ * Global Function Prototypes in qla_isr.c source file.
++ */
++extern irqreturn_t qla2x00_intr_handler(int, void *, struct pt_regs *);
++
++
++/*
++ * Global Function Prototypes in qla_sup.c source file.
++ */
++extern uint16_t qla2x00_get_nvram_word(scsi_qla_host_t *, uint32_t);
++extern void qla2x00_nv_write(scsi_qla_host_t *, uint16_t);
++extern void qla2x00_nv_deselect(scsi_qla_host_t *);
++extern uint8_t qla2x00_read_flash_byte(scsi_qla_host_t *, uint32_t);
++extern uint8_t qla2x00_get_flash_manufacturer(scsi_qla_host_t *);
++extern uint16_t qla2x00_get_flash_version(scsi_qla_host_t *);
++extern uint16_t qla2x00_get_flash_image(scsi_qla_host_t *, uint8_t *);
++extern uint16_t qla2x00_set_flash_image(scsi_qla_host_t *, uint8_t *);
++
++/*
++ * Global Function Prototypes in qla_vendor.c source file.
++ */
++void qla2x00_set_vend_direction(scsi_qla_host_t *, Scsi_Cmnd *, cmd_entry_t *);
++
++/*
++ * Global Function Prototypes in qla_dbg.c source file.
++ */
++extern void qla2x00_dump_isp(scsi_qla_host_t *, int);
++extern void qla2x00_dump_regs(struct Scsi_Host *);
++extern void qla2x00_dump_buffer(uint8_t *, uint32_t);
++extern void qla2x00_print_scsi_cmd(Scsi_Cmnd *);
++extern void qla2x00_print_q_info(struct os_lun *);
++
++#endif /* _QLA_GBL_H */
+--- /dev/null Thu Apr 11 07:25:15 2002
++++ linux-2.5.73-n9560/drivers/scsi/qla2xxx/qla_inioct.c Thu Jul 3 15:34:42 2003
+@@ -0,0 +1,495 @@
++/******************************************************************************
++ * QLOGIC LINUX SOFTWARE
++ *
++ * QLogic ISP2x00 device driver for Linux 2.5.x
++ * Copyright (C) 2003 Qlogic Corporation
++ * (www.qlogic.com)
++ *
++ * This program is free software; you can redistribute it and/or modify it
++ * under the terms of the GNU General Public License as published by the
++ * Free Software Foundation; either version 2, or (at your option) any
++ * later version.
++ *
++ * This program is distributed in the hope that it will be useful, but
++ * WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ * General Public License for more details.
++ *
++ ******************************************************************************/
++
++#include "qla_os.h"
++#include "qla_def.h"
++
++#include "inioct.h"
++
++extern int qla2x00_loopback_test(scsi_qla_host_t *ha, INT_LOOPBACK_REQ *req,
++ uint16_t *ret_mb);
++
++int qla2x00_read_nvram(scsi_qla_host_t *, EXT_IOCTL *, int);
++int qla2x00_update_nvram(scsi_qla_host_t *, EXT_IOCTL *, int);
++int qla2x00_write_nvram_word(scsi_qla_host_t *, uint8_t, uint16_t);
++int qla2x00_send_loopback(scsi_qla_host_t *, EXT_IOCTL *, int);
++int qla2x00_read_option_rom(scsi_qla_host_t *, EXT_IOCTL *, int);
++int qla2x00_update_option_rom(scsi_qla_host_t *, EXT_IOCTL *, int);
++
++int
++qla2x00_read_nvram(scsi_qla_host_t *ha, EXT_IOCTL *pext, int mode)
++{
++ uint8_t *usr_temp, *kernel_tmp;
++ uint16_t data;
++ uint32_t i, cnt;
++ uint32_t transfer_size;
++
++ DEBUG9(printk("qla2x00_read_nvram: entered.\n");)
++
++ if (pext->ResponseLen < sizeof(nvram_t))
++ transfer_size = pext->ResponseLen / 2;
++ else
++ transfer_size = sizeof(nvram_t) / 2;
++
++ /* Dump NVRAM. */
++ usr_temp = (uint8_t *)pext->ResponseAdr;
++ for (i = 0, cnt = 0; cnt < transfer_size; cnt++, i++) {
++ data = cpu_to_le16(qla2x00_get_nvram_word(ha, cnt));
++
++ kernel_tmp = (uint8_t *)&data;
++
++ __put_user(*kernel_tmp, usr_temp);
++
++ /* next byte */
++ usr_temp++;
++ kernel_tmp++;
++
++ __put_user(*kernel_tmp, usr_temp);
++
++ usr_temp++;
++ }
++
++ pext->Status = EXT_STATUS_OK;
++ pext->DetailStatus = EXT_STATUS_OK;
++
++ DEBUG9(printk("qla2x00_read_nvram: exiting.\n");)
++
++ return 0;
++}
++
++/*
++ * qla2x00_update_nvram
++ * Write data to NVRAM.
++ *
++ * Input:
++ * ha = adapter block pointer.
++ * pext = pointer to driver internal IOCTL structure.
++ *
++ * Returns:
++ *
++ * Context:
++ * Kernel context.
++ */
++int
++qla2x00_update_nvram(scsi_qla_host_t *ha, EXT_IOCTL *pext, int mode)
++{
++ uint8_t i, cnt;
++ uint8_t *usr_tmp, *kernel_tmp;
++ nvram_t *pnew_nv;
++ uint16_t *wptr;
++ uint16_t data;
++ uint32_t transfer_size;
++ uint8_t chksum = 0;
++ int ret = 0;
++
++ // FIXME: Endianess?
++ DEBUG9(printk("qla2x00_update_nvram: entered.\n");)
++
++ if (pext->RequestLen < sizeof(nvram_t))
++ transfer_size = pext->RequestLen;
++ else
++ transfer_size = sizeof(nvram_t);
++
++ if (qla2x00_get_ioctl_scrap_mem(ha, (void **)&pnew_nv,
++ sizeof(nvram_t))) {
++ /* not enough memory */
++ pext->Status = EXT_STATUS_NO_MEMORY;
++ DEBUG9_10(printk("%s(%ld): inst=%ld scrap not big enough. "
++ "size requested=%d.\n",
++ __func__, ha->host_no, ha->instance,
++ sizeof(nvram_t));)
++ return (ret);
++ }
++
++ /* Read from user buffer */
++ kernel_tmp = (uint8_t *)pnew_nv;
++ usr_tmp = (uint8_t *)pext->RequestAdr;
++
++ ret = verify_area(VERIFY_READ, (void *)usr_tmp, transfer_size);
++ if (ret) {
++ DEBUG9_10(printk(
++ "qla2x00_update_nvram: ERROR in buffer verify READ. "
++ "RequestAdr=%p\n", pext->RequestAdr);)
++ qla2x00_free_ioctl_scrap_mem(ha);
++ return ret;
++ }
++
++ copy_from_user(kernel_tmp, usr_tmp, transfer_size);
++
++ kernel_tmp = (uint8_t *)pnew_nv;
++
++ /* we need to checksum the nvram */
++ for (i = 0; i < sizeof(nvram_t) - 1; i++) {
++ chksum += *kernel_tmp;
++ kernel_tmp++;
++ }
++
++ chksum = ~chksum + 1;
++
++ *kernel_tmp = chksum;
++
++ /* Write to NVRAM */
++ wptr = (uint16_t *)pnew_nv;
++ for (cnt = 0; cnt < transfer_size / 2; cnt++) {
++ data = *wptr++;
++ qla2x00_write_nvram_word(ha, cnt, data);
++ }
++
++ pext->Status = EXT_STATUS_OK;
++ pext->DetailStatus = EXT_STATUS_OK;
++
++ DEBUG9(printk("qla2x00_update_nvram: exiting.\n");)
++
++ qla2x00_free_ioctl_scrap_mem(ha);
++ return 0;
++}
++
++int
++qla2x00_write_nvram_word(scsi_qla_host_t *ha, uint8_t addr, uint16_t data)
++{
++ int count;
++ uint16_t word;
++ uint32_t nv_cmd;
++ device_reg_t *reg = ha->iobase;
++
++ qla2x00_nv_write(ha, NVR_DATA_OUT);
++ qla2x00_nv_write(ha, 0);
++ qla2x00_nv_write(ha, 0);
++
++ for (word = 0; word < 8; word++)
++ qla2x00_nv_write(ha, NVR_DATA_OUT);
++
++ qla2x00_nv_deselect(ha);
++
++ /* Erase Location */
++ nv_cmd = (addr << 16) | NV_ERASE_OP;
++ nv_cmd <<= 5;
++ for (count = 0; count < 11; count++) {
++ if (nv_cmd & BIT_31)
++ qla2x00_nv_write(ha, NVR_DATA_OUT);
++ else
++ qla2x00_nv_write(ha, 0);
++
++ nv_cmd <<= 1;
++ }
++
++ qla2x00_nv_deselect(ha);
++
++ /* Wait for Erase to Finish */
++ WRT_REG_WORD(®->nvram, NVR_SELECT);
++ do {
++ NVRAM_DELAY();
++ word = RD_REG_WORD(®->nvram);
++ } while ((word & NVR_DATA_IN) == 0);
++
++ qla2x00_nv_deselect(ha);
++
++ /* Write data */
++ nv_cmd = (addr << 16) | NV_WRITE_OP;
++ nv_cmd |= data;
++ nv_cmd <<= 5;
++ for (count = 0; count < 27; count++) {
++ if (nv_cmd & BIT_31)
++ qla2x00_nv_write(ha, NVR_DATA_OUT);
++ else
++ qla2x00_nv_write(ha, 0);
++
++ nv_cmd <<= 1;
++ }
++
++ qla2x00_nv_deselect(ha);
++
++ /* Wait for NVRAM to become ready */
++ WRT_REG_WORD(®->nvram, NVR_SELECT);
++ do {
++ NVRAM_DELAY();
++ word = RD_REG_WORD(®->nvram);
++ } while ((word & NVR_DATA_IN) == 0);
++
++ qla2x00_nv_deselect(ha);
++
++ /* Disable writes */
++ qla2x00_nv_write(ha, NVR_DATA_OUT);
++ for (count = 0; count < 10; count++)
++ qla2x00_nv_write(ha, 0);
++
++ qla2x00_nv_deselect(ha);
++
++ DEBUG9(printk("qla2x00_write_nvram_word: exiting.\n");)
++
++ return 0;
++}
++
++int
++qla2x00_send_loopback(scsi_qla_host_t *ha, EXT_IOCTL *pext, int mode)
++{
++ int status;
++ uint16_t ret_mb[MAILBOX_REGISTER_COUNT];
++ INT_LOOPBACK_REQ req;
++ INT_LOOPBACK_RSP rsp;
++
++ DEBUG9(printk("qla2x00_send_loopback: entered.\n");)
++
++
++ if (pext->RequestLen != sizeof(INT_LOOPBACK_REQ)) {
++ pext->Status = EXT_STATUS_INVALID_PARAM;
++ DEBUG9_10(printk(
++ "qla2x00_send_loopback: invalid RequestLen =%d.\n",
++ pext->RequestLen);)
++ return pext->Status;
++ }
++
++ if (pext->ResponseLen != sizeof(INT_LOOPBACK_RSP)) {
++ pext->Status = EXT_STATUS_INVALID_PARAM;
++ DEBUG9_10(printk(
++ "qla2x00_send_loopback: invalid ResponseLen =%d.\n",
++ pext->ResponseLen);)
++ return pext->Status;
++ }
++
++ status = verify_area(VERIFY_READ, (void *)pext->RequestAdr,
++ pext->RequestLen);
++ if (status) {
++ pext->Status = EXT_STATUS_COPY_ERR;
++ DEBUG9_10(printk("qla2x00_send_loopback: ERROR verify read of "
++ "request buffer.\n");)
++ return pext->Status;
++ }
++
++ copy_from_user((uint8_t *)&req, (uint8_t *)pext->RequestAdr,
++ pext->RequestLen);
++
++ status = verify_area(VERIFY_READ, (void *)pext->ResponseAdr,
++ pext->ResponseLen);
++ if (status) {
++ pext->Status = EXT_STATUS_COPY_ERR;
++ DEBUG9_10(printk("qla2x00_send_loopback: ERROR verify read of "
++ "response buffer.\n");)
++ return pext->Status;
++ }
++
++ copy_from_user((uint8_t *)&rsp, (uint8_t *)pext->ResponseAdr,
++ pext->ResponseLen);
++
++ if (req.TransferCount > req.BufferLength ||
++ req.TransferCount > rsp.BufferLength) {
++
++ /* Buffer lengths not large enough. */
++ pext->Status = EXT_STATUS_INVALID_PARAM;
++
++ DEBUG9_10(printk(
++ "qla2x00_send_loopback: invalid TransferCount =%d. "
++ "req BufferLength =%d rspBufferLength =%d.\n",
++ req.TransferCount, req.BufferLength, rsp.BufferLength);)
++
++ return pext->Status;
++ }
++
++ status = verify_area(VERIFY_READ, (void *)req.BufferAddress,
++ req.TransferCount);
++ if (status) {
++ pext->Status = EXT_STATUS_COPY_ERR;
++ DEBUG9_10(printk("qla2x00_send_loopback: ERROR verify read of "
++ "user loopback data buffer.\n");)
++ return pext->Status;
++ }
++
++ copy_from_user((uint8_t *)ha->ioctl_mem, (uint8_t *)req.BufferAddress,
++ req.TransferCount);
++
++ DEBUG9(printk("qla2x00_send_loopback: req -- bufadr=%p, buflen=%x, "
++ "xfrcnt=%x, rsp -- bufadr=%p, buflen=%x.\n",
++ req.BufferAddress, req.BufferLength, req.TransferCount,
++ rsp.BufferAddress, rsp.BufferLength);)
++
++ /*
++ * AV - the caller of this IOCTL expects the FW to handle
++ * a loopdown situation and return a good status for the
++ * call function and a LOOPDOWN status for the test operations
++ */
++ /*if (ha->loop_state != LOOP_READY || */
++ if (
++ (test_bit(CFG_ACTIVE, &ha->cfg_flags)) ||
++ (test_bit(ABORT_ISP_ACTIVE, &ha->dpc_flags)) ||
++ ABORTS_ACTIVE || ha->dpc_active) {
++
++ pext->Status = EXT_STATUS_BUSY;
++ DEBUG9_10(printk("qla2x00_send_loopback(%ld): "
++ "loop not ready.\n", ha->host_no);)
++ return pext->Status;
++ }
++
++ status = qla2x00_loopback_test(ha, &req, ret_mb);
++
++ if (status) {
++ if (status == QL_STATUS_TIMEOUT ) {
++ pext->Status = EXT_STATUS_BUSY;
++ DEBUG9_10(printk("qla2x00_send_loopback: ERROR "
++ "command timed out.\n");)
++ return pext->Status;
++ } else {
++ /* EMPTY. Just proceed to copy back mailbox reg
++ * values for users to interpret.
++ */
++ DEBUG10(printk("qla2x00_send_loopback: ERROR "
++ "loopback command failed 0x%x.\n", ret_mb[0]);)
++ }
++ }
++
++ status = verify_area(VERIFY_WRITE, (void *)rsp.BufferAddress,
++ req.TransferCount);
++ if (status) {
++ pext->Status = EXT_STATUS_COPY_ERR;
++ DEBUG9_10(printk("qla2x00_send_loopback: ERROR verify "
++ "write of return data buffer.\n");)
++ return pext->Status;
++ }
++
++ DEBUG9(printk("qla2x00_send_loopback: loopback mbx cmd ok. "
++ "copying data.\n");)
++
++ /* put loopback return data in user buffer */
++ copy_to_user((uint8_t *)rsp.BufferAddress,
++ (uint8_t *)ha->ioctl_mem, req.TransferCount);
++
++ rsp.CompletionStatus = ret_mb[0];
++ if (rsp.CompletionStatus == INT_DEF_LB_COMPLETE) {
++ rsp.CrcErrorCount = ret_mb[1];
++ rsp.DisparityErrorCount = ret_mb[2];
++ rsp.FrameLengthErrorCount = ret_mb[3];
++ rsp.IterationCountLastError = (ret_mb[19] << 16) | ret_mb[18];
++ }
++
++ status = verify_area(VERIFY_WRITE, (void *)pext->ResponseAdr,
++ pext->ResponseLen);
++ if (status) {
++ pext->Status = EXT_STATUS_COPY_ERR;
++ DEBUG9_10(printk("qla2x00_send_loopback: ERROR verify "
++ "write of response buffer.\n");)
++ return pext->Status;
++ }
++
++ copy_to_user((uint8_t *)pext->ResponseAdr, (uint8_t *)&rsp,
++ pext->ResponseLen);
++
++ pext->Status = EXT_STATUS_OK;
++ pext->DetailStatus = EXT_STATUS_OK;
++
++ DEBUG9(printk("qla2x00_send_loopback: exiting.\n");)
++
++ return pext->Status;
++}
++
++int qla2x00_read_option_rom(scsi_qla_host_t *ha, EXT_IOCTL *pext, int mode)
++{
++ uint8_t *usr_tmp;
++ uint32_t addr;
++ uint32_t midpoint;
++ uint32_t transfer_size;
++ uint8_t data;
++ device_reg_t *reg = ha->iobase;
++ unsigned long cpu_flags;
++
++ DEBUG9(printk("%s: entered.\n", __func__);)
++
++ if (pext->ResponseLen != FLASH_IMAGE_SIZE) {
++ pext->Status = EXT_STATUS_BUFFER_TOO_SMALL;
++ return (1);
++ }
++
++ transfer_size = FLASH_IMAGE_SIZE;
++
++ midpoint = FLASH_IMAGE_SIZE / 2;
++ usr_tmp = (uint8_t *)pext->ResponseAdr;
++
++ /* Dump FLASH. */
++ spin_lock_irqsave(&ha->hardware_lock, cpu_flags);
++ WRT_REG_WORD(®->nvram, 0);
++ for (addr = 0; addr < transfer_size; addr++, usr_tmp++) {
++ if (addr == midpoint)
++ WRT_REG_WORD(®->nvram, NVR_SELECT);
++
++ data = qla2x00_read_flash_byte(ha, addr);
++ __put_user(data, usr_tmp);
++ }
++ spin_unlock_irqrestore(&ha->hardware_lock, cpu_flags);
++
++ pext->Status = EXT_STATUS_OK;
++ pext->DetailStatus = EXT_STATUS_OK;
++
++ DEBUG9(printk("%s: exiting.\n", __func__);)
++
++ return (0);
++}
++
++int qla2x00_update_option_rom(scsi_qla_host_t *ha, EXT_IOCTL *pext, int mode)
++{
++ int ret;
++ uint8_t *usr_tmp;
++ uint8_t *kern_tmp;
++ uint16_t status;
++ unsigned long cpu_flags;
++
++ DEBUG9(printk("%s: entered.\n", __func__);)
++
++ if (pext->RequestLen != FLASH_IMAGE_SIZE) {
++ pext->Status = EXT_STATUS_COPY_ERR;
++ return (1);
++ }
++
++ pext->Status = EXT_STATUS_OK;
++ pext->DetailStatus = EXT_STATUS_OK;
++
++ /* Read from user buffer */
++ usr_tmp = (uint8_t *)pext->RequestAdr;
++ ret = verify_area(VERIFY_READ, (void *)usr_tmp, FLASH_IMAGE_SIZE);
++ if (ret) {
++ pext->Status = EXT_STATUS_COPY_ERR;
++ DEBUG9_10(printk("%s: ERROR in buffer verify READ. "
++ "RequestAdr=%p\n",
++ __func__, pext->RequestAdr);)
++ return (ret);
++ }
++
++ kern_tmp = (uint8_t *)KMEM_ZALLOC(FLASH_IMAGE_SIZE, 30);
++ if (kern_tmp == NULL) {
++ pext->Status = EXT_STATUS_COPY_ERR;
++ printk(KERN_WARNING
++ "%s: ERROR in flash allocation.\n", __func__);
++ return (1);
++ }
++ copy_from_user(kern_tmp, usr_tmp, FLASH_IMAGE_SIZE);
++
++ /* Go with update */
++ spin_lock_irqsave(&ha->hardware_lock, cpu_flags);
++ status = qla2x00_set_flash_image(ha, kern_tmp);
++ spin_unlock_irqrestore(&ha->hardware_lock, cpu_flags);
++
++ KMEM_FREE(kern_tmp, FLASH_IMAGE_SIZE);
++
++ if (status) {
++ ret = 1;
++ pext->Status = EXT_STATUS_COPY_ERR;
++ DEBUG9_10(printk("%s: ERROR updating flash.\n", __func__);)
++ }
++
++ DEBUG9(printk("%s: exiting.\n", __func__);)
++
++ return (ret);
++}
+--- /dev/null Thu Apr 11 07:25:15 2002
++++ linux-2.5.73-n9560/drivers/scsi/qla2xxx/qla_init.c Thu Jul 3 15:34:42 2003
+@@ -0,0 +1,5945 @@
++/*
++ * QLOGIC LINUX SOFTWARE
++ *
++ * QLogic ISP2x00 device driver for Linux 2.5.x
++ * Copyright (C) 2003 Qlogic Corporation
++ * (www.qlogic.com)
++ *
++ * This program is free software; you can redistribute it and/or modify it
++ * under the terms of the GNU General Public License as published by the
++ * Free Software Foundation; either version 2, or (at your option) any
++ * later version.
++ *
++ * This program is distributed in the hope that it will be useful, but
++ * WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ * General Public License for more details.
++ *
++ */
++#include "qla_os.h"
++
++#include "qla_def.h"
++
++/*
++* QLogic ISP2x00 Hardware Support Function Prototypes.
++*/
++uint8_t qla2x00_initialize_adapter(scsi_qla_host_t *);
++
++static uint8_t qla2x00_isp_firmware(scsi_qla_host_t *);
++static void qla2x00_reset_chip(scsi_qla_host_t *);
++static uint8_t qla2x00_pci_config(scsi_qla_host_t *);
++static uint8_t qla2x00_set_cache_line(scsi_qla_host_t *);
++static uint8_t qla2x00_chip_diag(scsi_qla_host_t *);
++static uint8_t qla2x00_setup_chip(scsi_qla_host_t *ha);
++static uint8_t qla2x00_init_rings(scsi_qla_host_t *ha);
++static uint8_t qla2x00_fw_ready(scsi_qla_host_t *ha);
++static uint8_t qla2x00_nvram_config(scsi_qla_host_t *);
++
++static void qla2x00_init_fc_db(scsi_qla_host_t *);
++static void qla2x00_init_tgt_map(scsi_qla_host_t *);
++
++static uint8_t qla2x00_configure_loop(scsi_qla_host_t *);
++static uint8_t qla2x00_configure_local_loop(scsi_qla_host_t *, uint8_t );
++static uint8_t qla2x00_configure_fabric(scsi_qla_host_t *, uint8_t );
++static uint8_t qla2x00_find_all_fabric_devs(scsi_qla_host_t *,
++ struct new_dev *, uint16_t *, uint8_t *);
++static void qla2x00_device_resync(scsi_qla_host_t *);
++static int qla2x00_ga_nxt(scsi_qla_host_t *, sw_info_t *);
++static int qla2x00_gid_pt(scsi_qla_host_t *, sw_info_t *);
++static int qla2x00_gpn_id(scsi_qla_host_t *, sw_info_t *);
++static int qla2x00_gnn_id(scsi_qla_host_t *, sw_info_t *);
++static int qla2x00_gft_id(scsi_qla_host_t *, sw_info_t *);
++static int qla2x00_rft_id(scsi_qla_host_t *);
++static int qla2x00_rff_id(scsi_qla_host_t *);
++static int qla2x00_rnn_id(scsi_qla_host_t *);
++static int qla2x00_rsnn_nn(scsi_qla_host_t *);
++
++static int qla2x00_add_initiator_device(scsi_qla_host_t *, fcdev_t *);
++
++uint8_t qla2x00_fabric_login(scsi_qla_host_t *, fcdev_t *);
++uint8_t qla2x00_local_device_login(scsi_qla_host_t *, uint16_t);
++
++static uint8_t qla2x00_update_fc_database(scsi_qla_host_t *,
++ fcdev_t *, uint8_t);
++static int qla2x00_build_fcport_list(scsi_qla_host_t *ha);
++static void qla2x00_config_os(scsi_qla_host_t *ha);
++static uint16_t qla2x00_fcport_bind(scsi_qla_host_t *ha, fc_port_t *fcport);
++static int qla2x00_update_fcport(scsi_qla_host_t *ha, fc_port_t *fcport, int);
++static int qla2x00_lun_discovery(scsi_qla_host_t *ha, fc_port_t *fcport, int);
++static int qla2x00_rpt_lun_discovery(scsi_qla_host_t *ha, fc_port_t *fcport);
++static void qla2x00_cfg_lun(fc_port_t *fcport, uint16_t lun);
++
++static void qla2x00_lun_free(scsi_qla_host_t *, uint16_t, uint16_t);
++
++static void qla2x00_get_lun_mask_from_config(scsi_qla_host_t *,
++ fc_port_t *, uint16_t, uint16_t);
++static int qla2x00_bstr_to_hex(char *, uint8_t *, int);
++
++static uint8_t qla2x00_find_propname(scsi_qla_host_t *,
++ char *, char *, char *, int);
++static int qla2x00_get_prop_16chars(scsi_qla_host_t *,
++ char *, char *, char *);
++static void qla2x00_get_properties(scsi_qla_host_t *, char *);
++
++static void qla2x00_cfg_persistent_binding(scsi_qla_host_t *);
++
++static int qla2x00_restart_isp(scsi_qla_host_t *);
++static void qla2x00_reset_adapter(scsi_qla_host_t *);
++
++#define MAX_LOCAL_LOOP_IDS 127
++static uint8_t alpa_table[MAX_LOCAL_LOOP_IDS] = {
++ 0xEF, 0xE8, 0xE4, 0xE2, 0xE1, 0xE0, 0xDC, 0xDA,
++ 0xD9, 0xD6, 0xD5, 0xD4, 0xD3, 0xD2, 0xD1, 0xCE,
++ 0xCD, 0xCC, 0xCB, 0xCA, 0xC9, 0xC7, 0xC6, 0xC5,
++ 0xC3, 0xBC, 0xBA, 0xB9, 0xB6, 0xB5, 0xB4, 0xB3,
++ 0xB2, 0xB1, 0xAE, 0xAD, 0xAC, 0xAB, 0xAA, 0xA9,
++ 0xA7, 0xA6, 0xA5, 0xA3, 0x9F, 0x9E, 0x9D, 0x9B,
++ 0x98, 0x97, 0x90, 0x8F, 0x88, 0x84, 0x82, 0x81,
++ 0x80, 0x7C, 0x7A, 0x79, 0x76, 0x75, 0x74, 0x73,
++ 0x72, 0x71, 0x6E, 0x6D, 0x6C, 0x6B, 0x6A, 0x69,
++ 0x67, 0x66, 0x65, 0x63, 0x5C, 0x5A, 0x59, 0x56,
++ 0x55, 0x54, 0x53, 0x52, 0x51, 0x4E, 0x4D, 0x4C,
++ 0x4B, 0x4A, 0x49, 0x47, 0x46, 0x45, 0x43, 0x3C,
++ 0x3A, 0x39, 0x36, 0x35, 0x34, 0x33, 0x32, 0x31,
++ 0x2E, 0x2D, 0x2C, 0x2B, 0x2A, 0x29, 0x27, 0x26,
++ 0x25, 0x23, 0x1F, 0x1E, 0x1D, 0x1B, 0x18, 0x17,
++ 0x10, 0x0F, 0x08, 0x04, 0x02, 0x01, 0x00
++};
++
++/****************************************************************************/
++/* QLogic ISP2x00 Hardware Support Functions. */
++/****************************************************************************/
++
++/*
++* qla2x00_initialize_adapter
++* Initialize board.
++*
++* Input:
++* ha = adapter block pointer.
++*
++* Returns:
++* 0 = success
++*/
++uint8_t
++qla2x00_initialize_adapter(scsi_qla_host_t *ha)
++{
++ uint8_t status;
++ uint8_t isp_init = 0;
++ uint8_t restart_risc = 0;
++ uint8_t retry;
++ unsigned long wait_device = 0;
++
++ ENTER(__func__);
++
++ /* Clear adapter flags. */
++ ha->forceLip = 0;
++ ha->flags.online = FALSE;
++ ha->flags.disable_host_adapter = FALSE;
++ ha->flags.reset_active = FALSE;
++ ha->flags.watchdog_enabled = FALSE;
++ atomic_set(&ha->loop_down_timer, LOOP_DOWN_TIME);
++ ha->loop_state = LOOP_DOWN;
++ ha->device_flags = 0;
++ ha->sns_retry_cnt = 0;
++ ha->device_flags = 0;
++ ha->dpc_flags = 0;
++ ha->sns_retry_cnt = 0;
++ ha->failback_delay = 0;
++#if defined(IOCB_THROLLE_USAGE)
++ ha->iocb_cnt = 0;
++ ha->iocb_overflow_cnt = 0;
++#endif
++ ha->flags.management_server_logged_in = 0;
++ ha->marker_needed = 0;
++ ha->mbx_flags = 0;
++ ha->isp_abort_cnt = 0;
++
++ if (!(status = qla2x00_pci_config(ha))) {
++
++ qla2x00_reset_chip(ha);
++
++ /* Initialize Fibre Channel database. */
++ qla2x00_init_fc_db(ha);
++
++ /* Initialize target map database. */
++ qla2x00_init_tgt_map(ha);
++
++ /* Get Flash Version */
++ qla2x00_get_flash_version(ha);
++
++ if (qla2x00_verbose)
++ printk("scsi(%ld): Configure NVRAM parameters...\n",
++ ha->host_no);
++
++ qla2x00_nvram_config(ha);
++
++ ha->retry_count = ql2xretrycount;
++
++ if (qla2x00_verbose)
++ printk("scsi(%ld): Verifying loaded RISC code...\n",
++ ha->host_no);
++
++ qla2x00_set_cache_line(ha);
++
++ /*
++ * If the user specified a device configuration on the command
++ * line then use it as the configuration. Otherwise, we scan
++ * for all devices.
++ */
++ if (ql2xdevconf) {
++ ha->cmdline = ql2xdevconf;
++ if (!ha->flags.failover_enabled)
++ qla2x00_get_properties(ha, ql2xdevconf);
++ }
++
++ retry = 10;
++ /*
++ * Try an configure the loop.
++ */
++ do {
++ restart_risc = 0;
++ isp_init = 0;
++
++ /* If firmware needs to be loaded */
++ if (qla2x00_isp_firmware(ha)) {
++ if (qla2x00_verbose)
++ printk("scsi(%ld): Verifying chip...\n",
++ ha->host_no);
++
++ if (!(status = qla2x00_chip_diag(ha)))
++ status = qla2x00_setup_chip(ha);
++
++ if (!status) {
++ DEBUG(printk("scsi(%ld): Chip verified "
++ "and RISC loaded...\n",
++ ha->host_no));
++ }
++ }
++
++ /* Retrieve firmware information */
++ qla2x00_get_fw_version(ha, &ha->fw_major_version,
++ &ha->fw_minor_version, &ha->fw_subminor_version,
++ &ha->fw_attributes);
++
++ if (!status && !(status = qla2x00_init_rings(ha))) {
++ /* dg - 7/3/1999
++ *
++ * Wait for a successful LIP up to a maximum
++ * of (in seconds): RISC login timeout value,
++ * RISC retry count value, and port down retry
++ * value OR a minimum of 4 seconds OR If no
++ * cable, only 5 seconds.
++ */
++ DEBUG(printk("scsi(%ld): Init rings OK..."
++ "calling qla2x00_fw_ready()...\n",
++ ha->host_no));
++
++ if (!qla2x00_fw_ready(ha)) {
++ clear_bit(RESET_MARKER_NEEDED,
++ &ha->dpc_flags);
++ clear_bit(COMMAND_WAIT_NEEDED,
++ &ha->dpc_flags);
++
++ /*
++ * Go setup flash database devices
++ * with proper Loop ID's.
++ */
++ do {
++ clear_bit(LOOP_RESYNC_NEEDED,
++ &ha->dpc_flags);
++ status = qla2x00_configure_loop(ha);
++
++ /*
++ * Temp code: delay a while for certain
++ * slower devices to become ready.
++ */
++ for ((wait_device = jiffies + HZ);
++ !time_after_eq(jiffies,wait_device);) {
++ qla2x00_check_fabric_devices(ha);
++
++ set_current_state(TASK_INTERRUPTIBLE);
++ schedule_timeout(5);
++ }
++
++ } while (!atomic_read(&ha->loop_down_timer) &&
++ !(test_bit(ISP_ABORT_NEEDED, &ha->dpc_flags)) &&
++ (test_bit(LOOP_RESYNC_NEEDED, &ha->dpc_flags)) );
++ }
++
++ if (ha->flags.update_config_needed) {
++ ha->init_cb->add_firmware_options[0] |=
++ ((ha->operating_mode << 4) &
++ (BIT_6 | BIT_5 | BIT_4));
++
++ restart_risc = 1;
++ }
++
++ if (ha->mem_err) {
++ restart_risc = 1;
++ }
++ isp_init = 1;
++
++ }
++ } while (restart_risc && retry--);
++
++ if (isp_init) {
++ clear_bit(RESET_MARKER_NEEDED, &ha->dpc_flags);
++ ha->marker_needed = 1;
++ qla2x00_marker(ha, 0, 0, MK_SYNC_ALL);
++ ha->marker_needed = 0;
++
++ ha->flags.online = TRUE;
++ }
++
++ }
++
++#if defined(QL_DEBUG_LEVEL_2) || defined(QL_DEBUG_LEVEL_3)
++ if (status)
++ printk("%s(): **** FAILED ****\n", __func__);
++#endif
++
++ LEAVE(__func__);
++
++ return (status);
++}
++
++/**
++ * qla2x00_isp_firmware() - Choose firmware image.
++ * @ha: HA context
++ *
++ * Returns 0 on success.
++ */
++static uint8_t
++qla2x00_isp_firmware(scsi_qla_host_t *ha)
++{
++ uint8_t status;
++
++
++ ENTER(__func__);
++
++ /* Assume loading risc code */
++ status = 1;
++
++ if (ha->flags.disable_risc_code_load) {
++ DEBUG2(printk("scsi(%ld): RISC CODE NOT loaded\n",
++ ha->host_no));
++ printk(KERN_INFO
++ "scsi(%ld): RISC CODE NOT loaded\n", ha->host_no);
++
++ /* Verify checksum of loaded RISC code. */
++ status = qla2x00_verify_checksum(ha);
++ }
++
++ if (status) {
++ DEBUG2_3(printk("scsi(%ld): **** Load RISC code ****\n",
++ ha->host_no));
++ }
++
++ LEAVE(__func__);
++
++ return (status);
++}
++
++/**
++ * qla2x00_reset_chip() - Reset ISP chip.
++ * @ha: HA context
++ *
++ * Returns 0 on success.
++ */
++static void
++qla2x00_reset_chip(scsi_qla_host_t *ha)
++{
++ unsigned long flags = 0;
++ device_reg_t *reg = ha->iobase;
++ uint32_t cnt;
++ unsigned long mbx_flags = 0;
++ uint16_t cmd;
++
++ ENTER(__func__);
++
++ /* Disable ISP interrupts. */
++ qla2x00_disable_intrs(ha);
++
++ spin_lock_irqsave(&ha->hardware_lock, flags);
++
++ /* Turn off master enable */
++ cmd = 0;
++ pci_read_config_word(ha->pdev, PCI_COMMAND, &cmd);
++ cmd &= ~PCI_COMMAND_MASTER;
++ pci_write_config_word(ha->pdev, PCI_COMMAND, cmd);
++
++#if defined(ISP2200) || defined(ISP2300)
++ /* Pause RISC. */
++ WRT_REG_WORD(®->hccr, HCCR_PAUSE_RISC);
++ if (ha->pdev->device == QLA2312_DEVICE_ID ||
++ ha->pdev->device == QLA2322_DEVICE_ID) {
++ for (cnt = 0; cnt < 30000; cnt++) {
++ if ((RD_REG_WORD(®->hccr) & HCCR_RISC_PAUSE) != 0)
++ break;
++ udelay(100);
++ }
++ } else {
++ udelay(10);
++ }
++
++ /* Select FPM registers. */
++ WRT_REG_WORD(®->ctrl_status, 0x20);
++
++ /* FPM Soft Reset. */
++ WRT_REG_WORD(®->fpm_diag_config, 0x100);
++
++#if defined(ISP2300)
++ /* Toggle Fpm Reset. */
++ WRT_REG_WORD(®->fpm_diag_config, 0x0);
++#endif
++
++ /* Select frame buffer registers. */
++ WRT_REG_WORD(®->ctrl_status, 0x10);
++
++ /* Reset frame buffer FIFOs. */
++#if defined(ISP2200)
++ WRT_REG_WORD(®->fb_cmd, 0xa000);
++#else
++ WRT_REG_WORD(®->fb_cmd, 0x00fc);
++
++ /* Read back fb_cmd until zero or 3 seconds max */
++ for (cnt = 0; cnt < 3000; cnt++) {
++ if ((RD_REG_WORD(®->fb_cmd) & 0xff) == 0)
++ break;
++ udelay(100);
++ }
++#endif /* defined(ISP2200) */
++
++ /* Select RISC module registers. */
++ WRT_REG_WORD(®->ctrl_status, 0);
++
++ /* Reset RISC processor. */
++ WRT_REG_WORD(®->hccr, HCCR_RESET_RISC);
++
++ /* Release RISC processor. */
++ WRT_REG_WORD(®->hccr, HCCR_RELEASE_RISC);
++
++#endif /* defined(ISP2200) || defined(ISP2300) */
++
++ WRT_REG_WORD(®->hccr, HCCR_CLR_RISC_INT);
++ WRT_REG_WORD(®->hccr, HCCR_CLR_HOST_INT);
++
++ /* Reset ISP chip. */
++ WRT_REG_WORD(®->ctrl_status, CSR_ISP_SOFT_RESET);
++
++ /* Wait for RISC to recover from reset. */
++ if (ha->pdev->device == QLA2312_DEVICE_ID ||
++ ha->pdev->device == QLA2322_DEVICE_ID) {
++ udelay(10);
++ } else {
++ for (cnt = 30000; cnt; cnt--) {
++ if ((RD_REG_WORD(®->ctrl_status) &
++ CSR_ISP_SOFT_RESET) == 0)
++ break;
++ udelay(100);
++ }
++ }
++
++ /* Reset RISC processor. */
++ WRT_REG_WORD(®->hccr, HCCR_RESET_RISC);
++
++ WRT_REG_WORD(®->semaphore, 0);
++
++ /* Release RISC processor. */
++ WRT_REG_WORD(®->hccr, HCCR_RELEASE_RISC);
++
++ if (ha->pdev->device == QLA2312_DEVICE_ID ||
++ ha->pdev->device == QLA2322_DEVICE_ID) {
++ udelay(100);
++ } else {
++ for (cnt = 0; cnt < 30000; cnt++) {
++ if (!(test_bit(ABORT_ISP_ACTIVE, &ha->dpc_flags)))
++ QLA_MBX_REG_LOCK(ha);
++
++ if (RD_REG_WORD(®->mailbox0) != MBS_BUSY) {
++ if (!(test_bit(ABORT_ISP_ACTIVE,
++ &ha->dpc_flags)))
++ QLA_MBX_REG_UNLOCK(ha);
++ break;
++ }
++
++ if (!(test_bit(ABORT_ISP_ACTIVE, &ha->dpc_flags)))
++ QLA_MBX_REG_UNLOCK(ha);
++
++ udelay(100);
++ }
++ }
++
++ /* Turn on master enable */
++ cmd |= PCI_COMMAND_MASTER;
++ pci_write_config_word(ha->pdev, PCI_COMMAND, cmd);
++
++#if defined(ISP2200) || defined(ISP2300)
++ /* Disable RISC pause on FPM parity error. */
++ WRT_REG_WORD(®->hccr, HCCR_DISABLE_PARITY_PAUSE);
++#endif
++
++ /* Save PCI information. */
++ ha->isp_ctrl_status = RD_REG_WORD(®->ctrl_status);
++
++ spin_unlock_irqrestore(&ha->hardware_lock, flags);
++
++ LEAVE(__func__);
++}
++
++/**
++ * qla2x00_pci_config() - Setup device PCI configuration registers.
++ * @ha: HA context
++ *
++ * Returns 0 on success.
++ */
++static uint8_t
++qla2x00_pci_config(scsi_qla_host_t *ha)
++{
++ uint8_t status;
++ uint16_t w;
++#if defined(ISP2300)
++ uint32_t cnt;
++ unsigned long flags = 0;
++#endif
++#if MEMORY_MAPPED_IO
++ uint32_t mmapbase;
++ uint32_t page_offset, base;
++#endif
++
++ ENTER(__func__);
++
++ if (qla2x00_verbose)
++ printk("scsi(%ld): Configuring PCI space...\n",
++ ha->host_no);
++
++ /*
++ * Turn on PCI master; for system BIOSes that don't turn it on by
++ * default.
++ */
++ pci_set_master(ha->pdev);
++ pci_read_config_word(ha->pdev, PCI_REVISION_ID, &ha->revision);
++
++ if (ha->iobase)
++ return 0;
++
++ /*
++ * We want to respect framework's setting of PCI configuration space
++ * command register and also want to make sure that all bits of
++ * interest to us are properly set in command register.
++ */
++ pci_read_config_word(ha->pdev, PCI_COMMAND, &w);
++ w |= (PCI_COMMAND_IO | PCI_COMMAND_MEMORY | PCI_COMMAND_MASTER |
++ PCI_COMMAND_INVALIDATE | PCI_COMMAND_PARITY | PCI_COMMAND_SERR);
++
++#if MEMORY_MAPPED_IO
++ DEBUG(printk("scsi(%ld): I/O SPACE and MEMORY MAPPED I/O enabled.\n",
++ ha->host_no));
++#else
++ DEBUG(printk("scsi(%ld): I/O SPACE enabled and MEMORY MAPPED I/O "
++ "disabled.\n", ha->host_no));
++
++ w &= ~PCI_COMMAND_MEMORY;
++#endif
++
++#if defined(ISP2300)
++ /* PCI Specification Revision 2.3 changes */
++ if (ha->pdev->device == QLA2322_DEVICE_ID) {
++ /* Command Register -- Reset Interrupt Disable -- BIT_10 */
++ w &= ~BIT_10;
++ }
++
++ /*
++ * If this is a 2300 card and not 2312, reset the COMMAND_INVALIDATE
++ * due to a bug in the 2300. Unfortunately, the 2310 also reports
++ * itself as a 2300 so we need to get the fb revision level -- a 6
++ * indicates it really is a 2300 and not a 2310.
++ */
++ if (ha->pdev->device == QLA2300_DEVICE_ID) {
++ spin_lock_irqsave(&ha->hardware_lock, flags);
++
++ /* Pause RISC. */
++ WRT_REG_WORD(&ha->iobase->hccr, HCCR_PAUSE_RISC);
++ for (cnt = 0; cnt < 30000; cnt++) {
++ if ((RD_REG_WORD(&ha->iobase->hccr) &
++ HCCR_RISC_PAUSE) != 0)
++ break;
++
++ udelay(10);
++ }
++
++ /* Select FPM registers. */
++ WRT_REG_WORD(&ha->iobase->ctrl_status, 0x20);
++
++ /* Get the fb rev level */
++ if (RD_REG_WORD(&ha->iobase->fb_cmd) == FPM_2300)
++ w &= ~PCI_COMMAND_INVALIDATE;
++
++ /* Deselect FPM registers. */
++ WRT_REG_WORD(&ha->iobase->ctrl_status, 0x0);
++
++ /* Release RISC module. */
++ WRT_REG_WORD(&ha->iobase->hccr, HCCR_RELEASE_RISC);
++ for (cnt = 0; cnt < 30000; cnt++) {
++ if ((RD_REG_WORD(&ha->iobase->hccr) &
++ HCCR_RISC_PAUSE) == 0)
++ break;
++
++ udelay(10);
++ }
++
++ spin_unlock_irqrestore(&ha->hardware_lock, flags);
++ }
++#endif
++
++ pci_write_config_word(ha->pdev, PCI_COMMAND, w);
++
++ /* Reset expansion ROM address decode enable */
++ pci_read_config_word(ha->pdev, PCI_ROM_ADDRESS, &w);
++ w &= ~PCI_ROM_ADDRESS_ENABLE;
++ pci_write_config_word(ha->pdev, PCI_ROM_ADDRESS, w);
++
++ status = 0;
++#if MEMORY_MAPPED_IO
++ /* Get memory mapped I/O address */
++ pci_read_config_dword(ha->pdev, PCI_BASE_ADDRESS_1, &mmapbase);
++ mmapbase &= PCI_BASE_ADDRESS_MEM_MASK;
++
++ /* Find proper memory chunk for memory map I/O reg */
++ base = mmapbase & PAGE_MASK;
++ page_offset = mmapbase - base;
++
++ /* Get virtual address for I/O registers */
++ ha->mmpbase = ioremap(base, page_offset + 256);
++ if (ha->mmpbase) {
++ ha->mmpbase += page_offset;
++ ha->iobase = ha->mmpbase;
++ status = 0;
++ }
++#endif
++
++ LEAVE(__func__);
++
++ return (status);
++}
++
++/**
++ * qla2x00_set_cache_line() - Sets PCI cache line parameter.
++ * @ha: HA context
++ *
++ * Returns 0 on success.
++ */
++static uint8_t
++qla2x00_set_cache_line(struct scsi_qla_host * ha)
++{
++ unsigned char cache_size;
++
++ ENTER(__func__);
++
++ /* Set the cache line. */
++ if (!ha->flags.set_cache_line_size_1) {
++ LEAVE(__func__);
++
++ return (0);
++ }
++
++ /* Taken from drivers/net/acenic.c */
++ pci_read_config_byte(ha->pdev, PCI_CACHE_LINE_SIZE, &cache_size);
++ cache_size <<= 2;
++ if (cache_size != SMP_CACHE_BYTES) {
++ printk(KERN_INFO
++ "scsi(%ld): PCI cache line size set incorrectly "
++ "(%d bytes) by BIOS/FW, ",
++ ha->host_no, cache_size);
++
++ if (cache_size > SMP_CACHE_BYTES) {
++ printk(KERN_INFO "expecting %d.\n", SMP_CACHE_BYTES);
++ } else {
++ printk(KERN_INFO
++ "correcting to %d.\n", SMP_CACHE_BYTES);
++ pci_write_config_byte(ha->pdev,
++ PCI_CACHE_LINE_SIZE, SMP_CACHE_BYTES >> 2);
++ }
++ }
++
++ LEAVE(__func__);
++
++ return (0);
++}
++
++/**
++ * qla2x00_chip_diag() - Test chip for proper operation.
++ * @ha: HA context
++ *
++ * Returns 0 on success.
++ */
++static uint8_t
++qla2x00_chip_diag(scsi_qla_host_t *ha)
++{
++ uint8_t status;
++ device_reg_t *reg = ha->iobase;
++ unsigned long flags = 0;
++ uint16_t data;
++ uint32_t cnt;
++ uint16_t mb[5];
++
++ ENTER(__func__);
++
++ /* Assume a failed state */
++ status = 1;
++
++ DEBUG3(printk("scsi(%ld): Testing device at %lx.\n",
++ ha->host_no, (u_long)®->flash_address));
++
++ spin_lock_irqsave(&ha->hardware_lock, flags);
++
++ /* Reset ISP chip. */
++ WRT_REG_WORD(®->ctrl_status, CSR_ISP_SOFT_RESET);
++ data = qla2x00_debounce_register(®->ctrl_status);
++ for (cnt = 6000000 ; cnt && (data & CSR_ISP_SOFT_RESET); cnt--) {
++ udelay(5);
++ data = RD_REG_WORD(®->ctrl_status);
++ barrier();
++ }
++
++ if (!cnt)
++ goto chip_diag_failed;
++
++ DEBUG3(printk("scsi(%ld): Reset register cleared by chip reset\n",
++ ha->host_no));
++
++ /* Reset RISC processor. */
++ WRT_REG_WORD(®->hccr, HCCR_RESET_RISC);
++ WRT_REG_WORD(®->hccr, HCCR_RELEASE_RISC);
++
++#if defined(ISP2300)
++ /* Workaround for QLA2312 PCI parity error */
++ if (ha->pdev->device == QLA2312_DEVICE_ID ||
++ ha->pdev->device == QLA2322_DEVICE_ID) {
++ udelay(10);
++ } else {
++ data = qla2x00_debounce_register(®->mailbox0);
++ for (cnt = 6000000; cnt && (data == MBS_BUSY); cnt--) {
++ udelay(5);
++ data = RD_REG_WORD(®->mailbox0);
++ barrier();
++ }
++ }
++#else
++ data = qla2x00_debounce_register(®->mailbox0);
++ for (cnt = 6000000; cnt && (data == MBS_BUSY); cnt--) {
++ udelay(5);
++ data = RD_REG_WORD(®->mailbox0);
++ barrier();
++ }
++#endif
++ if (!cnt)
++ goto chip_diag_failed;
++
++ /* Check product ID of chip */
++ DEBUG3(printk("scsi(%ld): Checking product ID of chip\n",
++ ha->host_no));
++
++ mb[1] = RD_REG_WORD(®->mailbox1);
++ mb[2] = RD_REG_WORD(®->mailbox2);
++ mb[3] = RD_REG_WORD(®->mailbox3);
++ mb[4] = qla2x00_debounce_register(®->mailbox4);
++
++ if (mb[1] != PROD_ID_1 ||
++ (mb[2] != PROD_ID_2 && mb[2] != PROD_ID_2a) ||
++ mb[3] != PROD_ID_3 ||
++ (mb[4] != PROD_ID_4 && mb[4] != PROD_ID_4a)) {
++
++ printk(KERN_WARNING
++ "scsi(%ld): Wrong product ID = 0x%x,0x%x,0x%x,0x%x\n",
++ ha->host_no, mb[1], mb[2], mb[3], mb[4]);
++
++ goto chip_diag_failed;
++ }
++
++ /* Adjust fw RISC transfer size */
++ ha->fw_transfer_size = REQUEST_ENTRY_SIZE * REQUEST_ENTRY_CNT;
++#if defined(ISP2200)
++ if (ha->pdev->device == QLA2200_DEVICE_ID &&
++ RD_REG_WORD(®->mailbox7) == QLA2200A_RISC_ROM_VER) {
++
++ /* Limit firmware transfer size with a 2200A */
++ DEBUG3(printk("scsi(%ld): Found QLA2200A chip.\n",
++ ha->host_no));
++
++ ha->fw_transfer_size = 128;
++ }
++#endif
++
++ /* Wrap Incoming Mailboxes Test. */
++ spin_unlock_irqrestore(&ha->hardware_lock, flags);
++
++ DEBUG3(printk("scsi(%ld): Checking mailboxes.\n", ha->host_no));
++ status = qla2x00_mbx_reg_test(ha);
++ if (status) {
++ DEBUG(printk("scsi(%ld): Failed mailbox send register test\n",
++ ha->host_no));
++ printk(KERN_WARNING
++ "scsi(%ld): Failed mailbox send register test\n",
++ ha->host_no);
++ }
++ else {
++ /* Flag a successful status */
++ status = 0;
++ }
++ spin_lock_irqsave(&ha->hardware_lock, flags);
++
++chip_diag_failed:
++ if (status)
++ DEBUG2_3(printk("scsi(%ld): Chip diagnostics **** FAILED "
++ "****\n", ha->host_no));
++
++ spin_unlock_irqrestore(&ha->hardware_lock, flags);
++
++ LEAVE(__func__);
++
++ return (status);
++}
++
++/**
++ * qla2x00_setup_chip() - Load and start RISC firmware.
++ * @ha: HA context
++ *
++ * Returns 0 on success.
++ */
++static uint8_t
++qla2x00_setup_chip(scsi_qla_host_t *ha)
++{
++ uint8_t status = 0;
++ uint16_t cnt;
++ uint16_t *risc_code;
++ unsigned long risc_address;
++ unsigned long risc_code_size;
++ int num;
++ int i;
++ uint16_t *req_ring;
++ struct qla_fw_info *fw_iter;
++
++ ENTER(__func__);
++
++ /* Load firmware sequences */
++ fw_iter = ha->brd_info->fwinfo;
++ while (fw_iter->addressing != FW_INFO_ADDR_NOMORE) {
++ risc_code = fw_iter->fwcode;
++ risc_code_size = *fw_iter->fwlen;
++
++ if (fw_iter->addressing == FW_INFO_ADDR_NORMAL) {
++ risc_address = *fw_iter->fwstart;
++ } else {
++ /* Extended address */
++ risc_address = *fw_iter->lfwstart;
++ }
++
++ num = 0;
++ status = 0;
++ while (risc_code_size > 0 && !status) {
++ cnt = (uint16_t)(ha->fw_transfer_size >> 1);
++ if (cnt > risc_code_size)
++ cnt = risc_code_size;
++
++ DEBUG7(printk("scsi(%ld): Loading risc segment@ "
++ "addr %p, number of bytes 0x%x, offset 0x%lx.\n",
++ ha->host_no, risc_code, cnt, risc_address));
++
++ req_ring = (uint16_t *)ha->request_ring;
++ for (i = 0; i < cnt; i++)
++ req_ring[i] = cpu_to_le16(risc_code[i]);
++
++ /*
++ * Flush written firmware to the ha->request_ring buffer
++ * before DMA.
++ */
++ flush_cache_all();
++
++ if (fw_iter->addressing == FW_INFO_ADDR_NORMAL) {
++ status = qla2x00_load_ram(ha,
++ ha->request_dma, risc_address, cnt);
++ } else {
++ status = qla2x00_load_ram_ext(ha,
++ ha->request_dma, risc_address, cnt);
++ }
++ if (status) {
++ DEBUG(printk("scsi(%ld): [ERROR] Failed to "
++ "load segment %d of firmware\n",
++ ha->host_no, num));
++ printk(KERN_WARNING
++ "scsi(%ld): [ERROR] Failed to load "
++ "segment %d of firmware\n",
++ ha->host_no, num);
++
++ qla2x00_dump_regs(ha->host);
++ break;
++ }
++
++ risc_code += cnt;
++ risc_address += cnt;
++ risc_code_size -= cnt;
++ num++;
++ }
++
++ /* Next firmware sequence */
++ fw_iter++;
++ }
++
++ /* Verify checksum of loaded RISC code. */
++ if (!status) {
++ DEBUG(printk("scsi(%ld): Verifying Checksum of loaded RISC "
++ "code.\n", ha->host_no));
++
++ status = qla2x00_verify_checksum(ha);
++ if (status == QL_STATUS_SUCCESS) {
++ /* Start firmware execution. */
++ DEBUG(printk("scsi(%ld): Checksum OK, start "
++ "firmware.\n", ha->host_no));
++
++ status = qla2x00_execute_fw(ha);
++ }
++ else {
++ DEBUG2(printk(KERN_INFO
++ "scsi(%ld): ISP Firmware failed checksum.\n",
++ ha->host_no));
++ }
++ }
++
++ if (status) {
++ DEBUG2_3(printk("scsi(%ld): Setup chip **** FAILED ****.\n",
++ ha->host_no));
++ }
++
++ return (status);
++}
++
++/**
++ * qla2x00_init_rings() - Initializes firmware.
++ * @ha: HA context
++ *
++ * Beginning of request ring has initialization control block already built
++ * by nvram config routine.
++ *
++ * Returns 0 on success.
++ */
++static uint8_t
++qla2x00_init_rings(scsi_qla_host_t *ha)
++{
++ unsigned long flags = 0;
++ uint8_t status;
++ int cnt;
++ device_reg_t *reg = ha->iobase;
++
++
++ spin_lock_irqsave(&ha->hardware_lock, flags);
++
++ /* Clear outstanding commands array. */
++ for (cnt = 0; cnt < MAX_OUTSTANDING_COMMANDS; cnt++)
++ ha->outstanding_cmds[cnt] = 0;
++
++ ha->current_outstanding_cmd = 0;
++
++ /* Clear RSCN queue. */
++ ha->rscn_in_ptr = 0;
++ ha->rscn_out_ptr = 0;
++
++ /* Initialize firmware. */
++ ha->request_ring_ptr = ha->request_ring;
++ ha->req_ring_index = 0;
++ ha->req_q_cnt = REQUEST_ENTRY_CNT;
++ ha->response_ring_ptr = ha->response_ring;
++ ha->rsp_ring_index = 0;
++
++ WRT_REG_WORD(ISP_REQ_Q_IN(reg), 0);
++ WRT_REG_WORD(ISP_REQ_Q_OUT(reg), 0);
++ WRT_REG_WORD(ISP_RSP_Q_IN(reg), 0);
++ WRT_REG_WORD(ISP_RSP_Q_OUT(reg), 0);
++
++ spin_unlock_irqrestore(&ha->hardware_lock, flags);
++
++ DEBUG(printk("scsi(%ld): Issue init firmware.\n", ha->host_no));
++ status = qla2x00_init_firmware(ha, sizeof(init_cb_t));
++ if (status) {
++ DEBUG2_3(printk("scsi(%ld): Init firmware **** FAILED ****.\n",
++ ha->host_no));
++ } else {
++ /* Setup seriallink options */
++ uint16_t swing, emphasis;
++ uint16_t opt10, opt11;
++
++ DEBUG3(printk("scsi(%ld): Serial link options:\n",
++ ha->host_no));
++ DEBUG3(qla2x00_dump_buffer(
++ (uint8_t *)&ha->fw_seriallink_options,
++ sizeof(ha->fw_seriallink_options)));
++
++ qla2x00_get_fw_options(ha,
++ &ha->fw_options1, &ha->fw_options2, &ha->fw_options3);
++
++ ha->fw_options1 &= ~BIT_8;
++ if (ha->fw_seriallink_options[1] & BIT_2)
++ ha->fw_options1 |= BIT_8;
++
++ /* 1G settings */
++ swing = ha->fw_seriallink_options[0] & (BIT_2 | BIT_1 | BIT_0);
++ emphasis = ha->fw_seriallink_options[0] & (BIT_4 | BIT_3);
++ emphasis >>= 3;
++ opt10 = (emphasis << 14) | (swing << 8) | 0x3;
++
++ /* 2G settings */
++ swing = ha->fw_seriallink_options[0] & (BIT_7 | BIT_6 | BIT_5);
++ swing >>= 5;
++ emphasis = ha->fw_seriallink_options[1] & (BIT_1 | BIT_0);
++ opt11 = (emphasis << 14) | (swing << 8) | 0x3;
++
++ qla2x00_set_fw_options(ha, ha->fw_options1,
++ ha->fw_options2, ha->fw_options3, opt10, opt11);
++
++ DEBUG3(printk("scsi(%ld): Init firmware -- success.\n",
++ ha->host_no));
++ }
++
++ return (status);
++}
++
++/**
++ * qla2x00_fw_ready() - Waits for firmware ready.
++ * @ha: HA context
++ *
++ * Returns 0 on success.
++ */
++static uint8_t
++qla2x00_fw_ready(scsi_qla_host_t *ha)
++{
++ uint8_t status = 0;
++ unsigned long wtime, mtime;
++ uint16_t min_wait; /* Minimum wait time if loop is down */
++ uint16_t wait_time; /* Wait time if loop is coming ready */
++ uint16_t pause_time;
++ uint16_t fw_state;
++
++ /* 20 seconds for loop down. */
++ min_wait = 20;
++ ha->device_flags &= ~DFLG_NO_CABLE;
++
++ /*
++ * Firmware should take at most one RATOV to login, plus 5 seconds for
++ * our own processing.
++ */
++ if ((wait_time = (ha->retry_count*ha->login_timeout) + 5) < min_wait) {
++ wait_time = min_wait;
++ }
++
++ pause_time = 1000; /* 1000 usec */
++
++ /* Min wait time if loop down */
++ mtime = jiffies + (min_wait * HZ);
++
++ /* wait time before firmware ready */
++ wtime = jiffies + (wait_time * HZ);
++
++ /* Wait for ISP to finish LIP */
++ if (!qla2x00_quiet)
++ printk(KERN_INFO
++ "scsi(%ld): Waiting for LIP to complete...\n", ha->host_no);
++
++ DEBUG3(printk("scsi(%ld): Waiting for LIP to complete...\n",
++ ha->host_no));
++
++ do {
++ status = qla2x00_get_firmware_state(ha, &fw_state);
++
++ if (status == QL_STATUS_SUCCESS) {
++ if (fw_state == FSTATE_READY) {
++ DEBUG(printk("scsi(%ld): F/W Ready - OK \n",
++ ha->host_no));
++
++ qla2x00_get_retry_cnt(ha,
++ &ha->retry_count, &ha->login_timeout);
++
++ status = QL_STATUS_SUCCESS;
++ break;
++ }
++
++ status = QL_STATUS_ERROR;
++
++ if (atomic_read(&ha->loop_down_timer) ||
++ fw_state == FSTATE_LOSS_OF_SYNC) {
++
++ /* Loop down. Timeout on min_wait */
++ if (time_after_eq(jiffies, mtime)) {
++ printk(KERN_INFO
++ "scsi(%ld): Cable is "
++ "unplugged...\n",
++ ha->host_no);
++
++ ha->device_flags |= DFLG_NO_CABLE;
++ break;
++ }
++ }
++ } else {
++ /* Mailbox cmd failed. Timeout on min_wait. */
++ if (time_after_eq(jiffies, mtime))
++ break;
++ }
++
++ if (time_after_eq(jiffies, wtime))
++ break;
++
++ /* Delay for a while */
++ set_current_state(TASK_INTERRUPTIBLE);
++ schedule_timeout(HZ / 2);
++
++ DEBUG3(printk("scsi(%ld): fw_state=%x curr time=%lx.\n",
++ ha->host_no, fw_state, jiffies));
++ } while (1);
++
++ DEBUG(printk("scsi(%ld): fw_state=%x curr time=%lx.\n",
++ ha->host_no, fw_state, jiffies));
++
++ if (status) {
++ DEBUG2_3(printk("scsi(%ld): Firmware ready **** FAILED ****.\n",
++ ha->host_no));
++ }
++
++ return (status);
++}
++
++/*
++* qla2x00_configure_hba
++* Setup adapter context.
++*
++* Input:
++* ha = adapter state pointer.
++*
++* Returns:
++* 0 = success
++*
++* Context:
++* Kernel context.
++*/
++static uint8_t
++qla2x00_configure_hba(scsi_qla_host_t *ha)
++{
++ uint8_t rval;
++ uint16_t loop_id;
++ uint16_t topo;
++ uint8_t al_pa;
++ uint8_t area;
++ uint8_t domain;
++ char connect_type[22];
++
++ ENTER(__func__);
++
++ /* Get host addresses. */
++ rval = qla2x00_get_adapter_id(ha,
++ &loop_id, &al_pa, &area, &domain, &topo);
++ if (rval != QL_STATUS_SUCCESS) {
++ printk(KERN_WARNING
++ "scsi(%ld): ERROR -- Unable to get host loop ID.\n",
++ ha->host_no);
++ return (rval);
++ }
++
++ if (topo == 4) {
++ printk(KERN_INFO
++ "scsi(%ld): Cannot get topology - retrying.\n",
++ ha->host_no);
++ return (QL_STATUS_ERROR);
++ }
++
++ ha->loop_id = loop_id;
++
++#if defined(ISP2100)
++ /* Make sure 2100 only has loop, in case of any firmware bug. */
++ topo = 0;
++#endif
++
++ /* initialize */
++ ha->min_external_loopid = SNS_FIRST_LOOP_ID;
++ ha->operating_mode = LOOP;
++
++ switch (topo) {
++ case 0:
++ DEBUG3(printk("scsi(%ld): HBA in NL topology.\n",
++ ha->host_no));
++ ha->current_topology = ISP_CFG_NL;
++ strcpy(connect_type, "(Loop)");
++ break;
++
++ case 1:
++ DEBUG3(printk("scsi(%ld): HBA in FL topology.\n",
++ ha->host_no));
++ ha->current_topology = ISP_CFG_FL;
++ strcpy(connect_type, "(FL_Port)");
++ break;
++
++ case 2:
++ DEBUG3(printk("scsi(%ld): HBA in N P2P topology.\n",
++ ha->host_no));
++ ha->operating_mode = P2P;
++ ha->current_topology = ISP_CFG_N;
++ strcpy(connect_type, "(N_Port-to-N_Port)");
++ break;
++
++ case 3:
++ DEBUG3(printk("scsi(%ld): HBA in F P2P topology.\n",
++ ha->host_no));
++ ha->operating_mode = P2P;
++ ha->current_topology = ISP_CFG_F;
++ strcpy(connect_type, "(F_Port)");
++ break;
++
++ default:
++ DEBUG3(printk("scsi(%ld): HBA in unknown topology %x. "
++ "Using NL.\n",
++ ha->host_no, topo));
++ ha->current_topology = ISP_CFG_NL;
++ strcpy(connect_type, "(Loop)");
++ break;
++ }
++
++ /* Save Host port and loop ID. */
++ /* byte order - Big Endian */
++ ha->d_id.b.domain = domain;
++ ha->d_id.b.area = area;
++ ha->d_id.b.al_pa = al_pa;
++
++ if (!qla2x00_quiet)
++ printk(KERN_INFO
++ "scsi(%ld): Topology - %s, Host Loop address 0x%x\n",
++ ha->host_no, connect_type, ha->loop_id);
++
++ if (rval) {
++ DEBUG2_3(printk("scsi(%ld): FAILED.\n", ha->host_no));
++ } else {
++ DEBUG3(printk("scsi(%ld): exiting normally.\n", ha->host_no));
++ }
++
++ return(rval);
++}
++
++/*
++* NVRAM configuration for ISP 2xxx
++*
++* Input:
++* ha = adapter block pointer.
++*
++* Output:
++* initialization control block in response_ring
++* host adapters parameters in host adapter block
++*
++* Returns:
++* 0 = success.
++*/
++static uint8_t
++qla2x00_nvram_config(scsi_qla_host_t *ha)
++{
++ uint8_t status = 0;
++ uint8_t chksum = 0;
++ uint16_t cnt, base;
++ uint8_t *dptr1, *dptr2;
++ init_cb_t *icb = ha->init_cb;
++ nvram_t *nv = (nvram_t *)ha->request_ring;
++ uint16_t *wptr = (uint16_t *)ha->request_ring;
++#if defined(ISP2300)
++ device_reg_t *reg = ha->iobase;
++ uint16_t data;
++#endif
++
++ if (ha->flags.nvram_config_done)
++ return (status);
++
++ ENTER(__func__);
++
++ /* Determine NVRAM starting address. */
++ base = 0;
++#if defined(ISP2300)
++ if (ha->pdev->device == QLA2312_DEVICE_ID ||
++ ha->pdev->device == QLA2322_DEVICE_ID) {
++ data = RD_REG_WORD(®->ctrl_status);
++ if ((data >> 14) == 1)
++ base = 0x80;
++
++ data = RD_REG_WORD(®->nvram);
++ while (data & NVR_BUSY) {
++ udelay(100);
++ data = RD_REG_WORD(®->nvram);
++ }
++
++ /* Lock resource */
++ WRT_REG_WORD(®->host_semaphore, 0x1);
++ udelay(5);
++ data = RD_REG_WORD(®->host_semaphore);
++ while ((data & BIT_0) == 0) {
++ /* Lock failed */
++ udelay(100);
++ WRT_REG_WORD(®->host_semaphore, 0x1);
++ udelay(5);
++ data = RD_REG_WORD(®->host_semaphore);
++ }
++ }
++#endif
++
++ /* Get NVRAM data and calculate checksum. */
++ for (cnt = 0; cnt < sizeof(nvram_t)/2; cnt++) {
++ *wptr = cpu_to_le16(qla2x00_get_nvram_word(ha, (cnt+base)));
++ chksum += (uint8_t)*wptr;
++ chksum += (uint8_t)(*wptr >> 8);
++ wptr++;
++ }
++
++#if defined(ISP2300)
++ if (ha->pdev->device == QLA2312_DEVICE_ID ||
++ ha->pdev->device == QLA2322_DEVICE_ID) {
++ /* Unlock resource */
++ WRT_REG_WORD(®->host_semaphore, 0);
++ }
++#endif
++
++ DEBUG5(printk("scsi(%ld): Contents of NVRAM\n", ha->host_no));
++ DEBUG5(qla2x00_dump_buffer(
++ (uint8_t *)ha->request_ring, sizeof(nvram_t)));
++
++ /* Bad NVRAM data, set defaults parameters. */
++ if (chksum || nv->id[0] != 'I' || nv->id[1] != 'S' ||
++ nv->id[2] != 'P' || nv->id[3] != ' ' || nv->nvram_version < 1) {
++
++ /* Reset NVRAM data. */
++ DEBUG(printk("scsi(%ld): Using defaults for NVRAM - "
++ "checksum=0x%x, Id=%c, version=0x%x\n",
++ ha->host_no,
++ chksum, nv->id[0], nv->nvram_version));
++
++ memset(nv, 0, sizeof(nvram_t));
++
++ /*
++ * Set default initialization control block.
++ */
++ nv->parameter_block_version = ICB_VERSION;
++
++#if defined(ISP2300)
++ nv->firmware_options[0] = BIT_2 | BIT_1;
++ nv->firmware_options[1] = BIT_7 | BIT_5;
++ nv->add_firmware_options[0] = BIT_5;
++ nv->add_firmware_options[1] = BIT_5 | BIT_4;
++ nv->frame_payload_size = __constant_cpu_to_le16(2048);
++#elif defined(ISP2200)
++ nv->firmware_options[0] = BIT_3 | BIT_2 | BIT_1;
++ nv->firmware_options[1] = BIT_7 | BIT_5;
++ nv->add_firmware_options[0] = BIT_5 | BIT_4;
++ nv->add_firmware_options[1] = BIT_5 | BIT_4;
++ nv->frame_payload_size = __constant_cpu_to_le16(1024);
++#else /* defined(ISP2100) */
++ nv->firmware_options[0] = BIT_3 | BIT_1;
++ nv->firmware_options[1] = BIT_5;
++ nv->frame_payload_size = __constant_cpu_to_le16(1024);
++#endif
++
++ nv->max_iocb_allocation = __constant_cpu_to_le16(256);
++ nv->execution_throttle = __constant_cpu_to_le16(16);
++ nv->retry_count = 8;
++ nv->retry_delay = 1;
++
++ nv->port_name[0] = 33;
++ nv->port_name[3] = 224;
++ nv->port_name[4] = 139;
++
++ nv->login_timeout = 4;
++
++ /*
++ * Set default host adapter parameters
++ */
++ nv->host_p[1] = BIT_2;
++ nv->reset_delay = 5;
++ nv->port_down_retry_count = 8;
++ nv->max_luns_per_target = __constant_cpu_to_le16(8);
++
++ status = 1;
++ }
++
++ /* Reset Initialization control block */
++ memset(icb, 0, sizeof(init_cb_t));
++
++ /*
++ * Setup driver NVRAM options.
++ */
++ nv->firmware_options[0] |= (BIT_6 | BIT_1);
++ nv->firmware_options[0] &= ~(BIT_5 | BIT_4);
++ nv->firmware_options[1] |= (BIT_5 | BIT_0);
++ nv->firmware_options[1] &= ~BIT_4;
++#if defined(ISP2300)
++ nv->firmware_options[0] |= BIT_2;
++ nv->firmware_options[0] &= ~BIT_3;
++#elif defined(ISP2200)
++ nv->firmware_options[0] |= BIT_2;
++#endif
++
++#if !defined(FC_IP_SUPPORT)
++ /* Enable FC-Tape support */
++ nv->firmware_options[1] |= BIT_7;
++ nv->add_firmware_options[1] |= (BIT_5 | BIT_4);
++#endif
++
++ /*
++ * Copy over NVRAM RISC parameter block to initialization control block.
++ */
++ dptr1 = (uint8_t *)icb;
++ dptr2 = (uint8_t *)&nv->parameter_block_version;
++ cnt = (uint8_t *)&icb->request_q_outpointer - (uint8_t *)&icb->version;
++ while (cnt--)
++ *dptr1++ = *dptr2++;
++
++ /* Copy 2nd half. */
++ dptr1 = (uint8_t *)icb->add_firmware_options;
++ cnt = (uint8_t *)icb->reserved_3 - (uint8_t *)icb->add_firmware_options;
++ while (cnt--)
++ *dptr1++ = *dptr2++;
++
++ /* Prepare nodename */
++ if ((icb->firmware_options[1] & BIT_6) == 0) {
++ /*
++ * Firmware will apply the following mask if the nodename was
++ * not provided.
++ */
++ memcpy(icb->node_name, icb->port_name, WWN_SIZE);
++ icb->node_name[0] &= 0xF0;
++ }
++
++ /*
++ * Set host adapter parameters.
++ */
++ ha->nvram_version = nv->nvram_version;
++
++ ha->flags.disable_luns = ((nv->host_p[0] & BIT_2) ? 1 : 0);
++ ha->flags.disable_risc_code_load = ((nv->host_p[0] & BIT_4) ? 1 : 0);
++ ha->flags.set_cache_line_size_1 = ((nv->host_p[0] & BIT_5) ? 1 : 0);
++ ha->flags.enable_64bit_addressing = ((nv->host_p[1] & BIT_0) ? 1 : 0);
++ ha->flags.enable_lip_reset = ((nv->host_p[1] & BIT_1) ? 1 : 0);
++ ha->flags.enable_lip_full_login = ((nv->host_p[1] & BIT_2) ? 1 : 0);
++ ha->flags.enable_target_reset = ((nv->host_p[1] & BIT_3) ? 1 : 0);
++ ha->flags.enable_flash_db_update = ((nv->host_p[1] & BIT_4) ? 1 : 0);
++
++ ha->flags.link_down_error_enable = 1;
++
++ ha->flags.enable_target_mode =
++ ((icb->firmware_options[0] & BIT_4) ? 1 : 0);
++ ha->operating_mode =
++ (icb->add_firmware_options[0] & (BIT_6 | BIT_5 | BIT_4)) >> 4;
++
++ qla2x00_config_dma_addressing(ha);
++
++ ha->fw_seriallink_options[0] = nv->seriallink_options[0];
++ ha->fw_seriallink_options[1] = nv->seriallink_options[1];
++
++ /* save HBA serial number */
++ ha->serial0 = icb->port_name[5];
++ ha->serial1 = icb->port_name[6];
++ ha->serial2 = icb->port_name[7];
++ memcpy(ha->node_name, icb->node_name, WWN_SIZE);
++#if defined(FC_IP_SUPPORT)
++ memcpy(ha->ip_port_name, icb->port_name, WWN_SIZE);
++#endif
++
++ ha->hiwat = le16_to_cpu(icb->max_iocb_allocation);
++ ha->execution_throttle = 0xFFFF;
++ icb->execution_throttle = __constant_cpu_to_le16(0xFFFF);
++
++ ha->retry_count = nv->retry_count;
++
++ /* Set minimum login_timeout to 4 seconds. */
++ if (nv->login_timeout < ql2xlogintimeout)
++ nv->login_timeout = ql2xlogintimeout;
++ if (nv->login_timeout < 4)
++ nv->login_timeout = 4;
++ ha->login_timeout = nv->login_timeout;
++ icb->login_timeout = nv->login_timeout;
++
++/* FIXME
++ *
++ * port_down_retry_count updated twice
++ *
++ */
++ ha->port_down_retry_count = nv->port_down_retry_count;
++ ha->minimum_timeout =
++ (ha->login_timeout * ha->retry_count) + ha->port_down_retry_count;
++ ha->loop_reset_delay = nv->reset_delay;
++
++ /* Will get the value from NVRAM. */
++ ha->loop_down_timeout = LOOP_DOWN_TIMEOUT;
++ ha->loop_down_abort_time = LOOP_DOWN_TIME - ha->loop_down_timeout;
++
++ /* save OEM related items for QLA2200s and QLA2300s */
++ ha->oem_id = nv->oem_id;
++ memcpy(ha->oem_specific, nv->oem_specific, sizeof(ha->oem_specific));
++
++ ha->max_probe_luns = le16_to_cpu(nv->max_luns_per_target);
++ if (ha->max_probe_luns == 0)
++ ha->max_probe_luns = MIN_LUNS;
++
++#if defined(IOCB_THROLLE_USAGE)
++ /* High-water mark of IOCBs */
++ ha->iocb_hiwat = MAX_IOCBS_AVAILBALE;
++#endif
++
++#if USE_BIOS_MAX_LUNS
++ ha->max_luns = le16_to_cpu(nv->max_luns_per_target);
++ if (ha->max_luns == 0)
++ ha->max_luns = MAX_LUNS;
++ else if (ha->max_luns > MAX_LUNS)
++ ha->max_luns = MAX_LUNS;
++#else
++ ha->max_luns = MAX_LUNS;
++#endif
++
++/* FIXME
++ *
++ * port_down_retry_count updated twice
++ *
++ */
++ /*
++ * Need enough time to try and get the port back.
++ */
++ if (qlport_down_retry)
++ ha->port_down_retry_count = qlport_down_retry;
++ /* Set login_retry_count */
++ ha->login_retry_count = nv->retry_count;
++ if (ha->port_down_retry_count == nv->port_down_retry_count &&
++ ha->port_down_retry_count > 3)
++ ha->login_retry_count = ha->port_down_retry_count;
++ else if (ha->port_down_retry_count > ha->login_retry_count)
++ ha->login_retry_count = ha->port_down_retry_count;
++
++ ha->binding_type = Bind;
++ if ((ha->binding_type != BIND_BY_PORT_NAME) &&
++ (ha->binding_type != BIND_BY_PORT_ID) &&
++ (ha->binding_type != BIND_BY_NODE_NAME)) {
++
++ printk(KERN_WARNING
++ "scsi(%ld): Invalid binding type specified (%d), "
++ "defaulting to BIND_BY_PORT_NAME!!!\n",
++ ha->host_no, ha->binding_type);
++
++ ha->binding_type = BIND_BY_PORT_NAME;
++ }
++
++ /*
++ * Setup ring parameters in initialization control block
++ */
++ icb->request_q_outpointer = __constant_cpu_to_le16(0);
++ icb->response_q_inpointer = __constant_cpu_to_le16(0);
++ icb->request_q_length = __constant_cpu_to_le16(REQUEST_ENTRY_CNT);
++ icb->response_q_length = __constant_cpu_to_le16(RESPONSE_ENTRY_CNT);
++ icb->request_q_address[0] = cpu_to_le32(LSD(ha->request_dma));
++ icb->request_q_address[1] = cpu_to_le32(MSD(ha->request_dma));
++ icb->response_q_address[0] = cpu_to_le32(LSD(ha->response_dma));
++ icb->response_q_address[1] = cpu_to_le32(MSD(ha->response_dma));
++
++ icb->lun_enables = __constant_cpu_to_le16(0);
++ icb->command_resource_count = 0;
++ icb->immediate_notify_resource_count = 0;
++ icb->timeout = __constant_cpu_to_le16(0);
++
++ ha->flags.nvram_config_done = 1;
++
++ if (status) {
++ DEBUG2_3(printk(KERN_WARNING
++ "scsi(%ld): NVRAM configuration failed!\n", ha->host_no));
++ }
++
++ LEAVE(__func__);
++
++ return (status);
++}
++
++/*
++* qla2x00_init_fc_db
++* Initializes Fibre Channel Device Database.
++*
++* Input:
++* ha = adapter block pointer.
++*
++* Output:
++* ha->fc_db = initialized
++*/
++static void
++qla2x00_init_fc_db(scsi_qla_host_t *ha)
++{
++ uint16_t cnt;
++
++ ENTER(__func__);
++
++ /* Initialize fc database if it is not initialized. */
++ if (!ha->fc_db[0].loop_id && !ha->fc_db[1].loop_id) {
++ ha->flags.updated_fc_db = FALSE;
++
++ /* Initialize target database. */
++ for (cnt = 0; cnt < MAX_FIBRE_DEVICES; cnt++) {
++ ha->fc_db[cnt].name[0] = 0L;
++ ha->fc_db[cnt].name[1] = 0L;
++ ha->fc_db[cnt].loop_id = PORT_UNUSED;
++ ha->fc_db[cnt].port_login_retry_count =
++ ha->port_down_retry_count * PORT_RETRY_TIME;
++ ha->fc_db[cnt].flag = 0; /* v2.19.5b3 */
++ }
++ }
++
++ LEAVE(__func__);
++}
++
++
++/*
++* qla2x00_init_tgt_map
++* Initializes target map.
++*
++* Input:
++* ha = adapter block pointer.
++*
++* Output:
++* TGT_Q initialized
++*/
++static void
++qla2x00_init_tgt_map(scsi_qla_host_t *ha)
++{
++ uint32_t t;
++
++ ENTER(__func__);
++
++ for (t = 0; t < MAX_TARGETS; t++)
++ TGT_Q(ha, t) = (os_tgt_t *)NULL;
++
++ LEAVE(__func__);
++}
++
++/*
++ * qla2x00_configure_loop
++ * Updates Fibre Channel Device Database with what is actually on loop.
++ *
++ * Input:
++ * ha = adapter block pointer.
++ *
++ * Output:
++ * ha->fc_db = updated
++ *
++ * Returns:
++ * 0 = success.
++ * 1 = error.
++ * 2 = database was full and device was not configured.
++ */
++static uint8_t
++qla2x00_configure_loop(scsi_qla_host_t *ha)
++{
++ uint8_t rval = 0;
++ uint8_t rval1 = 0;
++ uint8_t enable_slot_reuse = FALSE;
++ uint16_t cnt;
++ static unsigned long flags, save_flags;
++#if defined(FC_IP_SUPPORT)
++ struct ip_device *ipdev;
++#endif
++
++ ENTER(__func__);
++
++ DEBUG(printk("scsi(%ld): Begin configure loop.\n", ha->host_no));
++
++ /* Get Initiator ID */
++ if (qla2x00_configure_hba(ha)) {
++ DEBUG(printk("scsi(%ld): Unable to configure HBA.\n",
++ ha->host_no));
++ return(1);
++ }
++
++#if defined(FC_IP_SUPPORT)
++ /* Disable all IP devices in linked list */
++ for (ipdev = ha->ipdev_db_top; ipdev; ipdev = ipdev->next)
++ ipdev->flags &= ~IP_DEV_FLAG_PRESENT;
++#endif /* FC_IP_SUPPORT */
++
++ save_flags = flags = ha->dpc_flags;
++ DEBUG(printk("scsi(%ld): Configure loop -- dpc flags =0x%lx\n",
++ ha->host_no, flags));
++
++ /* dg 02/26/02 ha->dpc_flags &= ~(LOCAL_LOOP_UPDATE | RSCN_UPDATE); */
++
++ /*
++ * If we have both an RSCN and PORT UPDATE pending then handle them
++ * both at the same time.
++ */
++ clear_bit(LOCAL_LOOP_UPDATE, &ha->dpc_flags);
++ clear_bit(RSCN_UPDATE, &ha->dpc_flags);
++ ha->mem_err = 0 ;
++
++ /* Determine what we need to do */
++ if (ha->current_topology == ISP_CFG_FL &&
++ (test_bit(LOCAL_LOOP_UPDATE, &flags))) {
++
++ ha->flags.rscn_queue_overflow = TRUE;
++ set_bit(RSCN_UPDATE, &flags);
++
++ } else if (ha->current_topology == ISP_CFG_F &&
++ (test_bit(LOCAL_LOOP_UPDATE, &flags))) {
++
++ ha->flags.rscn_queue_overflow = TRUE;
++ set_bit(RSCN_UPDATE, &flags);
++ clear_bit(LOCAL_LOOP_UPDATE, &flags);
++
++ } else if (!ha->flags.online ||
++ (test_bit(ABORT_ISP_ACTIVE, &flags))) {
++
++ ha->flags.rscn_queue_overflow = TRUE;
++ set_bit(RSCN_UPDATE, &flags);
++ set_bit(LOCAL_LOOP_UPDATE, &flags);
++ }
++
++ do {
++ if (test_bit(LOCAL_LOOP_UPDATE, &flags)) {
++ rval = rval |
++ qla2x00_configure_local_loop(ha, enable_slot_reuse);
++ }
++
++ if (test_bit(RSCN_UPDATE, &flags)) {
++ rval1 = qla2x00_configure_fabric(ha, enable_slot_reuse);
++ if ((rval1 & BIT_0) && ha->sns_retry_cnt < 8) {
++ ha->sns_retry_cnt++;
++ set_bit(LOGIN_RETRY_NEEDED, &ha->dpc_flags);
++ }
++ }
++
++ /* If devices not configured first time try reusing slots.*/
++ if (enable_slot_reuse == FALSE && (rval & BIT_1))
++ enable_slot_reuse = TRUE;
++ else
++ enable_slot_reuse = FALSE;
++
++ /* Isolate error status. */
++ if (rval & BIT_0) {
++ rval = 1;
++ } else {
++ rval = 0;
++ }
++
++ } while (enable_slot_reuse == TRUE && rval == 0);
++
++ if (!atomic_read(&ha->loop_down_timer) &&
++ !(test_bit(LOOP_RESYNC_NEEDED, &ha->dpc_flags))) {
++
++ /* Mark devices that are not present as DEV_ABSENCE */
++ for (cnt = 0; cnt < MAX_FIBRE_DEVICES; cnt++) {
++ if (ha->fc_db[cnt].loop_id & PORT_LOST_ID) {
++ ha->fc_db[cnt].flag |= DEV_ABSENCE;
++ } else {
++ /* device returned */
++ if (ha->fc_db[cnt].loop_id <
++ LAST_SNS_LOOP_ID &&
++ ha->fc_db[cnt].flag & DEV_ABSENCE) {
++ ha->fc_db[cnt].flag &= ~DEV_ABSENCE;
++ ha->fc_db[cnt].flag |= DEV_RETURN;
++ ha->fc_db[cnt].port_login_retry_count =
++ ha->port_down_retry_count *
++ PORT_RETRY_TIME;
++ }
++ }
++ }
++
++ rval1 = qla2x00_build_fcport_list(ha);
++ if (((rval1 & BIT_0) || ha->mem_err != 0) &&
++ ha->sns_retry_cnt < 8) {
++
++ ha->sns_retry_cnt++;
++ set_bit(LOGIN_RETRY_NEEDED, &ha->dpc_flags);
++ }
++
++ if (!ha->flags.failover_enabled)
++ qla2x00_config_os(ha);
++
++ /* If we found all devices then go ready */
++ if (!(test_bit(LOGIN_RETRY_NEEDED, &ha->dpc_flags))) {
++ ha->loop_state = LOOP_READY;
++
++ if (ha->flags.failover_enabled) {
++ DEBUG(printk("scsi(%ld): schedule FAILBACK "
++ "EVENT\n", ha->host_no));
++ if (!(test_and_set_bit(FAILOVER_EVENT_NEEDED,
++ &ha->dpc_flags))) {
++ ha->failback_delay = failbackTime;
++ }
++ set_bit(COMMAND_WAIT_NEEDED, &ha->dpc_flags);
++ ha->failover_type = MP_NOTIFY_LOOP_UP;
++ }
++
++ DEBUG(printk("scsi(%ld): LOOP READY\n", ha->host_no));
++ } else {
++ if (test_bit(LOCAL_LOOP_UPDATE, &save_flags))
++ set_bit(LOCAL_LOOP_UPDATE, &ha->dpc_flags);
++ if (test_bit(RSCN_UPDATE, &save_flags))
++ set_bit(RSCN_UPDATE, &ha->dpc_flags);
++ }
++ } else {
++ DEBUG(printk("scsi(%ld): Loop down counter running= %d or "
++ "Resync needed- dpc flags= %ld\n",
++ ha->host_no,
++ atomic_read(&ha->loop_down_timer), ha->dpc_flags));
++ /* ???? dg 02/26/02 rval = 1; */
++ }
++
++ if (rval) {
++ DEBUG2_3(printk("%s(%ld): *** FAILED ***\n",
++ __func__, ha->host_no));
++ } else {
++ DEBUG3(printk("%s: exiting normally\n", __func__));
++ }
++
++ return(rval);
++}
++
++/*
++ * qla2x00_configure_local_loop
++ * Updates Fibre Channel Device Database with local loop devices.
++ *
++ * Input:
++ * ha = adapter block pointer.
++ * enable_slot_reuse = allows the use of PORT_AVAILABLE slots.
++ *
++ * Returns:
++ * 0 = success.
++ * BIT_0 = error.
++ * BIT_1 = database was full and a device was not configured.
++ */
++static uint8_t
++qla2x00_configure_local_loop(scsi_qla_host_t *ha, uint8_t enable_slot_reuse)
++{
++ uint8_t status = 0;
++ uint8_t rval;
++ uint8_t port_name[8];
++ uint8_t update_status = 0;
++ uint16_t index, size;
++ dma_addr_t phys_address = 0;
++ fcdev_t device;
++ port_list_entry_t *gn_list, *port_entry;
++ uint16_t localdevices = 0;
++#if defined(FC_IP_SUPPORT)
++ uint16_t list_entry_loop_id;
++#endif
++
++ ENTER(__func__);
++
++ /*
++ * No point in continuing if the loop is in a volatile state --
++ * reschedule LOCAL_LOOP_UPDATE for later processing
++ */
++ if (test_bit(LOOP_RESYNC_NEEDED, &ha->dpc_flags)) {
++ set_bit(LOCAL_LOOP_UPDATE, &ha->dpc_flags);
++ return (0);
++ }
++
++ gn_list = pci_alloc_consistent(ha->pdev,
++ sizeof(GN_LIST_LENGTH), &phys_address);
++ if (gn_list == NULL) {
++ DEBUG2(printk("scsi(%ld): Failed to allocate memory, No local "
++ "loop\n",
++ ha->host_no));
++
++ printk(KERN_WARNING
++ "scsi(%ld): Memory Allocation failed - port_list",
++ ha->host_no);
++
++ ha->mem_err++;
++ return (BIT_0);
++ }
++ memset(gn_list, 0, sizeof(GN_LIST_LENGTH));
++
++ /* Mark all local devices PORT_LOST_ID first */
++ for (index = 0; index < MAX_FIBRE_DEVICES; index++) {
++ if (ha->fc_db[index].loop_id <= LAST_SNS_LOOP_ID &&
++ !(ha->fc_db[index].flag & DEV_PUBLIC)) {
++
++ DEBUG(printk("scsi(%ld): Marking port lost @ slot "
++ "%d %02x%02x%02x\n",
++ ha->host_no,
++ index,
++ ha->fc_db[index].d_id.b.domain,
++ ha->fc_db[index].d_id.b.area,
++ ha->fc_db[index].d_id.b.al_pa));
++
++ ha->fc_db[index].loop_id |= PORT_LOST_ID;
++ }
++ }
++
++ DEBUG3(printk("scsi(%ld): Getting FCAL position map\n", ha->host_no));
++ DEBUG3(qla2x00_get_fcal_position_map(ha, NULL));
++
++ /* Get port name list
++ *
++ * Via qla2x00_get_port_list:
++ *
++ * Bit 0 - return node names,
++ * Bit 1 - loop IDs 0-255
++ */
++#if defined(FC_IP_SUPPORT)
++ if (ha->flags.enable_ip == FALSE)
++ rval = qla2x00_get_port_list(ha,
++ gn_list, phys_address, BIT_0, &size);
++ else
++ rval = qla2x00_get_port_list(ha,
++ gn_list, phys_address, BIT_0|BIT_1, &size);
++#else
++ rval = qla2x00_get_port_list(ha, gn_list, phys_address, BIT_0, &size);
++#endif
++ if (rval) {
++ status = BIT_0;
++ goto cleanup_allocation;
++ }
++
++ DEBUG3(printk("scsi(%ld): Port list size (%d)\n", ha->host_no, size));
++ DEBUG3(qla2x00_dump_buffer((uint8_t *)gn_list, size));
++
++ /* Any valid entries returned? */
++ if (size / sizeof(port_list_entry_t) == 0)
++ goto cleanup_allocation;
++
++ port_entry = gn_list;
++ for ( ; size >= sizeof(port_list_entry_t);
++ size -= sizeof(port_list_entry_t), port_entry++) {
++
++ device.loop_id = le16_to_cpu(port_entry->loop_id);
++
++#if defined(FC_IP_SUPPORT)
++ list_entry_loop_id = device.loop_id;
++ device.loop_id &= LOOP_ID_MASK;
++#endif
++
++ /* Skip any non-local loop-ids - this includes 'known ports' */
++ if (device.loop_id > LAST_LOCAL_LOOP_ID)
++ continue;
++#if NOT_NEEDED
++ /* Skip the known ports. */
++ if ((device.loop_id == SNS_FL_PORT) ||
++ (device.loop_id == FABRIC_CONTROLLER) ||
++ (device.loop_id == SIMPLE_NAME_SERVER))
++ continue;
++#endif
++
++ device.flag = 0;
++
++ /* Prep node name -- big-endian format */
++ *((u64 *)device.name) = __swab64p((u64 *)port_entry->name);
++
++ /* Retrieve port name */
++ rval = qla2x00_get_port_name(ha, device.loop_id, port_name, 0);
++ if (rval || qla2x00_is_wwn_zero(port_name)) {
++ DEBUG2(printk("scsi(%ld): Loop -- error retrieving "
++ "port_name.\n",
++ ha->host_no));
++
++ status = BIT_0;
++ break;
++ }
++ memcpy(device.wwn, port_name, WWN_SIZE);
++
++ /* Derive portid from alpa table */
++ device.d_id.b24 = 0;
++ device.d_id.b.al_pa = alpa_table[device.loop_id];
++
++ DEBUG2_3(printk("scsi(%ld): Loop scan found device - "
++ "nodename %02x%02x%02x%02x%02x%02x%02x%02x "
++ "portname %02x%02x%02x%02x%02x%02x%02x%02x "
++ "portid %02x%02x%02x.\n",
++ ha->host_no,
++ device.name[0], device.name[1],
++ device.name[2], device.name[3],
++ device.name[4], device.name[5],
++ device.name[6], device.name[7],
++ device.wwn[0], device.wwn[1], device.wwn[2], device.wwn[3],
++ device.wwn[4], device.wwn[5], device.wwn[6], device.wwn[7],
++ device.d_id.b.domain,
++ device.d_id.b.area,
++ device.d_id.b.al_pa));
++
++#if !defined(FC_IP_SUPPORT)
++ /* SCSI type device */
++ update_status = qla2x00_update_fc_database(ha,
++ &device, enable_slot_reuse);
++ if (update_status)
++ status |= update_status;
++ else
++ localdevices++;
++#else
++ if (!(list_entry_loop_id & PLE_NOT_SCSI_DEVICE)) {
++ /* SCSI type device */
++ update_status = qla2x00_update_fc_database(ha,
++ &device, enable_slot_reuse);
++
++ if (update_status)
++ status |= update_status;
++ else
++ localdevices++;
++ } else if (ha->flags.enable_ip == TRUE) {
++ /* SCSI login failed, assume it is IP device */
++ DEBUG12(printk("scsi(%ld): Loop scan found IP device "
++ "WWNN:%02x%02x%02x%02x%02x%02x%02x%02x "
++ "DID:%02x%02x%02x.\n",
++ ha->host_no,
++ device.name[0], device.name[1],
++ device.name[2], device.name[3],
++ device.name[4], device.name[5],
++ device.name[6], device.name[7],
++ device.d_id.b.domain,
++ device.d_id.b.area,
++ device.d_id.b.al_pa));
++
++ update_status =
++ qla2x00_update_ip_device_data(ha, &device);
++ if (update_status == QL_STATUS_SUCCESS)
++ localdevices++;
++ else if (update_status == QL_STATUS_RESOURCE_ERROR)
++ status |= BIT_1;
++ else
++ status |= BIT_0;
++ }
++#endif
++ } /* for each port entry */
++
++cleanup_allocation:
++ pci_free_consistent(ha->pdev,
++ sizeof(GN_LIST_LENGTH), gn_list, phys_address);
++
++ if (status & BIT_0) {
++ DEBUG2(printk("scsi(%ld): Configure local loop error exit: "
++ "rval=%x\n", ha->host_no, rval));
++ }
++
++ if (localdevices > 0) {
++ ha->device_flags |= DFLG_LOCAL_DEVICES;
++ ha->device_flags &= ~DFLG_RETRY_LOCAL_DEVICES;
++ }
++
++ LEAVE(__func__);
++
++ return (status);
++}
++
++/*
++ * qla2x00_configure_fabric
++ * Setup SNS devices with loop ID's.
++ *
++ * Input:
++ * ha = adapter block pointer.
++ *
++ * Returns:
++ * 0 = success.
++ * BIT_0 = error
++ * BIT_1 = database was full and device was not configured.
++ */
++#define MAX_PUBLIC_LOOP_IDS LAST_SNS_LOOP_ID + 1
++
++static uint8_t
++qla2x00_configure_fabric(scsi_qla_host_t *ha, uint8_t enable_slot_reuse)
++{
++ uint8_t rval = 0;
++ uint8_t rval1;
++ uint8_t local_flags = 0;
++ uint8_t tmp_name[8];
++ fcdev_t dev;
++ uint16_t i, index, found_cnt;
++ uint16_t new_dev_cnt;
++ uint16_t tmp_loop_id;
++ uint16_t tmp_topo;
++ struct new_dev *new_dev_list;
++ struct list_head *fcil, *fcitemp;
++ fc_initiator_t *fcinitiator;
++
++ ENTER(__func__);
++
++ DEBUG2(printk("scsi(%ld): Begin configure fabric -- hba=%p\n",
++ ha->host_no, ha));
++
++ /* If FL port exists, then SNS is present */
++ rval1 = qla2x00_get_port_name(ha, SNS_FL_PORT, tmp_name, 0);
++ if (rval1 || qla2x00_is_wwn_zero(tmp_name)) {
++ DEBUG2(printk("scsi(%ld): MBC_GET_PORT_NAME Failed, No FL "
++ "Port\n", ha->host_no));
++
++ ha->device_flags &= ~SWITCH_FOUND;
++ return (0);
++ }
++
++ new_dev_list = kmalloc(sizeof(struct new_dev) * MAX_FIBRE_DEVICES,
++ GFP_ATOMIC);
++ if (new_dev_list == NULL) {
++ DEBUG2(printk("scsi(%ld): Configure Fabric allocation failed, "
++ "device list\n", ha->host_no));
++ ha->mem_err++;
++ return (BIT_0);
++ }
++
++ /* Get adapter port ID. */
++ rval = qla2x00_get_adapter_id(ha, &tmp_loop_id,
++ &ha->d_id.b.al_pa, &ha->d_id.b.area, &ha->d_id.b.domain, &tmp_topo);
++
++ /* Mark devices that need re-synchronization. */
++ qla2x00_device_resync(ha);
++ found_cnt = 0;
++ do {
++ if (test_and_clear_bit(REGISTER_FC4_NEEDED, &ha->dpc_flags)) {
++ if (qla2x00_rft_id(ha)) {
++ /* EMPTY */
++ DEBUG2(printk("scsi(%ld): Register FC-4 "
++ "TYPE failed.\n", ha->host_no));
++ }
++ if (qla2x00_rff_id(ha)) {
++ /* EMPTY */
++ DEBUG2(printk("scsi(%ld): Register FC-4 "
++ "Features failed.\n", ha->host_no));
++ }
++ if (qla2x00_rnn_id(ha)) {
++ /* EMPTY */
++ DEBUG2(printk("scsi(%ld): Register Node Name "
++ "failed.\n", ha->host_no));
++ }
++ if (qla2x00_rsnn_nn(ha)) {
++ /* EMPTY */
++ DEBUG2(printk("scsi(%ld): Register Symbolic "
++ "Node Name failed.\n", ha->host_no));
++ }
++ }
++
++ rval = qla2x00_find_all_fabric_devs(ha,
++ new_dev_list, &new_dev_cnt, &local_flags);
++ if (rval != 0)
++ break;
++
++ /*
++ * Logout all previous fabric devices marked lost, except
++ * tape devices.
++ */
++ for (index = 0; index < MAX_FIBRE_DEVICES &&
++ !atomic_read(&ha->loop_down_timer) &&
++ !(test_bit(LOOP_RESYNC_NEEDED, &ha->dpc_flags)); index++) {
++
++ if (ha->fc_db[index].loop_id & PORT_LOST_ID &&
++ (ha->fc_db[index].flag & DEV_PUBLIC) &&
++ !(ha->fc_db[index].flag & DEV_TAPE_DEVICE)) {
++
++ qla2x00_fabric_logout(ha,
++ ha->fc_db[index].loop_id & 0xff);
++ local_flags |= LOGOUT_PERFORMED;
++ }
++ }
++
++ /* Logout and remove any lost initiator devices */
++ list_for_each_safe(fcil, fcitemp, &ha->fcinitiators) {
++ fcinitiator = list_entry(fcil, fc_initiator_t, list);
++
++ if ((fcinitiator->loop_id & PORT_LOST_ID) == 0)
++ continue;
++
++ qla2x00_fabric_logout(ha, fcinitiator->loop_id & 0xff);
++ ha->fabricid[fcinitiator->loop_id &0xFF].in_use = FALSE;
++
++ list_del(&fcinitiator->list);
++ kfree(fcinitiator);
++ }
++
++ /*
++ * Scan through our database and login entries already in our
++ * database.
++ */
++ for (index = 0; index < MAX_FIBRE_DEVICES &&
++ !atomic_read(&ha->loop_down_timer) &&
++ !(test_bit(LOOP_RESYNC_NEEDED, &ha->dpc_flags)); index++) {
++
++ if (!(ha->fc_db[index].loop_id & PORT_LOGIN_NEEDED))
++ continue;
++
++ ha->fc_db[index].loop_id &= ~PORT_LOGIN_NEEDED;
++ if (ha->fc_db[index].loop_id <= LAST_SNS_LOOP_ID) {
++ /* loop_id reusable */
++ dev.loop_id = ha->fc_db[index].loop_id & 0xff;
++ } else {
++ for (i = ha->min_external_loopid;
++ i < MAX_PUBLIC_LOOP_IDS; i++) {
++
++ if (!ha->fabricid[i].in_use) {
++ ha->fabricid[i].in_use = TRUE;
++ dev.loop_id = i;
++ break;
++ }
++ }
++
++ if (i == MAX_PUBLIC_LOOP_IDS)
++ break;
++ }
++
++ dev.d_id.b24 = ha->fc_db[index].d_id.b24;
++
++ /* login and update database */
++ if (qla2x00_fabric_login(ha, &dev) == 0) {
++ ha->fc_db[index].loop_id = dev.loop_id;
++ found_cnt++;
++ }
++ }
++
++ /*
++ * Scan through new device list and login and add to our
++ * database.
++ */
++ for (index = 0; index < new_dev_cnt &&
++ !atomic_read(&ha->loop_down_timer) &&
++ !(test_bit(LOOP_RESYNC_NEEDED, &ha->dpc_flags)); index++) {
++
++ memcpy(&dev,
++ &new_dev_list[index], sizeof(struct new_dev));
++
++ dev.flag = DEV_PUBLIC;
++
++ for (i = ha->min_external_loopid;
++ i < MAX_PUBLIC_LOOP_IDS; i++) {
++
++ if (!ha->fabricid[i].in_use) {
++ ha->fabricid[i].in_use = TRUE;
++ dev.loop_id = i;
++ break;
++ }
++ }
++
++ if (i == MAX_PUBLIC_LOOP_IDS)
++ break;
++
++ if (qla2x00_fabric_login(ha, &dev) == 0) {
++ found_cnt++;
++ rval = qla2x00_update_fc_database(ha,
++ &dev, enable_slot_reuse);
++
++ if (rval) {
++ qla2x00_fabric_logout(ha, dev.loop_id);
++ ha->fabricid[i].in_use = FALSE;
++ break;
++ }
++ }
++ }
++ } while(0);
++
++ kfree(new_dev_list);
++
++ if (rval) {
++ DEBUG2(printk("scsi(%ld): Configure fabric error exit: "
++ "rval=%d\n", ha->host_no, rval));
++ } else {
++ /* EMPTY */
++ DEBUG2(if (found_cnt))
++ DEBUG2(printk("scsi(%ld) Found (%d) ports\n",
++ ha->host_no, found_cnt));
++ }
++
++ LEAVE(__func__);
++
++ return(rval);
++}
++
++
++/*
++ * qla2x00_find_all_fabric_devs
++ * Go through GAN list to find all fabric devices. Will perform
++ * necessary logout of previously existed devices that have changed
++ * and save new devices in a new device list.
++ *
++ * Input:
++ * ha = adapter block pointer.
++ * dev = database device entry pointer.
++ *
++ * Returns:
++ * 0 = success.
++ * BIT_0 = error.
++ *
++ * Context:
++ * Kernel context.
++ */
++static uint8_t
++qla2x00_find_all_fabric_devs(scsi_qla_host_t *ha,
++ struct new_dev *new_dev_list, uint16_t *new_dev_cnt, uint8_t *flags)
++{
++ fcdev_t dev;
++ uint8_t rval = 0;
++ int status = 0;
++ uint16_t i;
++ uint16_t index;
++ uint16_t new_cnt;
++ uint16_t public_count;
++ uint16_t initiator;
++ struct list_head *fcil;
++ fc_initiator_t *fcinitiator;
++
++ sw_info_t *swl;
++ sw_info_t swl_entry;
++ int swl_idx;
++ int first_dev, last_dev;
++ port_id_t wrap;
++ int ip_dev;
++
++ ENTER(__func__);
++
++ /* Try GID_PT to get device list, else GAN. */
++ swl = kmalloc(sizeof(sw_info_t) * MAX_FIBRE_DEVICES, GFP_ATOMIC);
++ if (swl == NULL) {
++ /*EMPTY*/
++ DEBUG2(printk("scsi(%ld): GID_PT allocations failed, fallback "
++ "on GAN\n", ha->host_no));
++ } else if (qla2x00_gid_pt(ha, swl) != QL_STATUS_SUCCESS) {
++ kfree(swl);
++ swl = NULL;
++ } else if (qla2x00_gpn_id(ha, swl) != QL_STATUS_SUCCESS) {
++ kfree(swl);
++ swl = NULL;
++ } else if (qla2x00_gnn_id(ha, swl) != QL_STATUS_SUCCESS) {
++ kfree(swl);
++ swl = NULL;
++ } else if (qla2x00_gft_id(ha, swl) != QL_STATUS_SUCCESS) {
++ kfree(swl);
++ swl = NULL;
++ }
++ swl_idx = 0;
++
++ /*
++ * Loop getting devices from switch. Logout the devices that were in
++ * our database but changed port ID.
++ */
++#if defined(ISP2100)
++ ha->max_public_loop_ids = LAST_SNS_LOOP_ID - SNS_FIRST_LOOP_ID + 1;
++ public_count = ha->max_public_loop_ids;
++#else
++ ha->max_public_loop_ids = MAX_PUBLIC_LOOP_IDS;
++ public_count = ha->max_public_loop_ids - ha->min_external_loopid + 2;
++#endif
++
++ /* Set start port ID scan at adapter ID. */
++ swl_entry.d_id.b24 = ha->d_id.b24;
++ first_dev = 1;
++ last_dev = 0;
++
++ new_cnt = 0; /* new device count */
++
++ for (i = 0;
++ i < public_count && !atomic_read(&ha->loop_down_timer) &&
++ !(test_bit(LOOP_RESYNC_NEEDED, &ha->dpc_flags)); i++) {
++
++ if (swl != NULL) {
++ if (last_dev) {
++ wrap.b24 = dev.d_id.b24;
++ } else {
++ dev.flag = DEV_PUBLIC;
++ dev.d_id.b24 = swl[swl_idx].d_id.b24;
++ memcpy(dev.name,
++ swl[swl_idx].node_name, WWN_SIZE);
++ memcpy(dev.wwn,
++ swl[swl_idx].port_name, WWN_SIZE);
++
++ /* IP capable device */
++ ip_dev = 0;
++ if (swl[swl_idx].type & SW_TYPE_IP)
++ ip_dev = 1;
++
++ if (swl[swl_idx].d_id.b.rsvd_1 != 0) {
++ last_dev = 1;
++ }
++ swl_idx++;
++ }
++ } else {
++ /* Send GAN to the switch */
++ rval = 0;
++ if (qla2x00_ga_nxt(ha, &swl_entry) !=
++ QL_STATUS_SUCCESS) {
++ rval |= BIT_0;
++ break;
++ }
++
++ dev.flag = DEV_PUBLIC;
++ dev.d_id.b24 = swl_entry.d_id.b24;
++ memcpy(dev.name, swl_entry.node_name, WWN_SIZE);
++ memcpy(dev.wwn, swl_entry.port_name, WWN_SIZE);
++
++ /* IP capable device */
++ ip_dev = 0;
++ if (swl_entry.type & SW_TYPE_IP)
++ ip_dev = 1;
++ }
++
++ /* If wrap on switch device list, exit. */
++ if (first_dev) {
++ wrap.b24 = dev.d_id.b24;
++ first_dev = 0;
++ } else if (dev.d_id.b24 == wrap.b24) {
++ DEBUG2(printk("scsi(%ld): device wrap (%02x%02x%02x)\n",
++ ha->host_no,
++ dev.d_id.b.domain,
++ dev.d_id.b.area,
++ dev.d_id.b.al_pa));
++ break;
++ }
++
++ DEBUG(printk("scsi(%ld): Fabric scan found device(%d) - port "
++ "Id=%02x%02x%02x\n",
++ ha->host_no, i,
++ dev.d_id.b.domain, dev.d_id.b.area, dev.d_id.b.al_pa));
++
++ /* Bypass if host adapter. */
++ if (dev.d_id.b24 == ha->d_id.b24)
++ continue;
++
++ /* Bypass reserved domain fields. */
++ if ((dev.d_id.b.domain & 0xf0) == 0xf0)
++ continue;
++
++ /* Bypass if same domain and area of adapter. */
++ if ((dev.d_id.b24 & 0xffff00) == (ha->d_id.b24 & 0xffff00))
++ continue;
++
++#if defined(FC_IP_SUPPORT)
++ /* Check for IP device */
++ if (ip_dev) {
++ /* Found IP device */
++ DEBUG12(printk("scsi(%ld): IP fabric "
++ "WWN: %02x%02x%02x%02x%02x%02x%02x%02x "
++ "DID: %02x%02x%02x.\n",
++ ha->host_no,
++ dev.name[0], dev.name[1], dev.name[2], dev.name[3],
++ dev.name[4], dev.name[5], dev.name[6], dev.name[7],
++ dev.d_id.b.domain,
++ dev.d_id.b.area,
++ dev.d_id.b.al_pa));
++
++ qla2x00_update_ip_device_data(ha, &dev);
++ continue;
++ }
++#endif
++
++ /* Bypass if initiator */
++ initiator = FALSE;
++ list_for_each(fcil, &ha->fcinitiators) {
++ fcinitiator = list_entry(fcil, fc_initiator_t, list);
++
++ if (memcmp(dev.wwn, fcinitiator->port_name, 8) != 0)
++ continue;
++
++ initiator = TRUE;
++ DEBUG(printk("scsi(%ld): found host "
++ "%02x%02x%02x%02x%02x%02x%02x%02x, "
++ "portid=%02x%02x%02x.\n",
++ ha->host_no,
++ dev.name[0], dev.name[1], dev.name[2], dev.name[3],
++ dev.name[4], dev.name[5], dev.name[6], dev.name[7],
++ dev.d_id.b.domain,
++ dev.d_id.b.area,
++ dev.d_id.b.al_pa));
++
++ /*
++ * If the initiator was marked as lost, perform the
++ * required logout and relogin the initiator by
++ * assuming a new device.
++ */
++ if ((fcinitiator->loop_id & PORT_LOST_ID) == 0)
++ break;
++
++ initiator = FALSE;
++ break;
++ }
++
++ /* Bypass if initiator */
++ if (initiator)
++ continue;
++
++ /* Locate matching device in database. */
++ for (index = 0; index < MAX_FIBRE_DEVICES; index++) {
++ if (ha->fc_db[index].loop_id == PORT_UNUSED)
++ continue;
++
++ status = 1;
++ switch (ha->binding_type) {
++ case BIND_BY_PORT_NAME:
++ status = memcmp(dev.wwn,
++ ha->fc_db[index].wwn, WWN_SIZE);
++ break;
++
++ case BIND_BY_PORT_ID:
++ status = (dev.d_id.b24 !=
++ ha->fc_db[index].d_id.b24);
++ break;
++
++ case BIND_BY_NODE_NAME:
++ status = memcmp(dev.name,
++ ha->fc_db[index].name, WWN_SIZE);
++ break;
++ }
++ if (status)
++ continue;
++
++ /*
++ * Update volatile unbound fields for PortID binding
++ * only
++ */
++ if (ha->binding_type == BIND_BY_PORT_ID) {
++ memcpy(ha->fc_db[index].name,
++ dev.name, WWN_SIZE);
++ memcpy(ha->fc_db[index].wwn,
++ dev.wwn, WWN_SIZE);
++ }
++
++ /* Now we found a matching device name */
++ DEBUG(printk("scsi(%ld): Found fabric dev %d in "
++ "tgt %d db, flags= 0x%x, loop_id=0x%04x, port="
++ "%02x%02x%02x, "
++ "name=%02x%02x%02x%02x%02x%02x%02x%02x.\n",
++ ha->host_no, i, index,
++ ha->fc_db[index].flag,
++ ha->fc_db[index].loop_id,
++ ha->fc_db[index].d_id.b.domain,
++ ha->fc_db[index].d_id.b.area,
++ ha->fc_db[index].d_id.b.al_pa,
++ dev.wwn[0], dev.wwn[1], dev.wwn[2], dev.wwn[3],
++ dev.wwn[4], dev.wwn[5], dev.wwn[6], dev.wwn[7]));
++
++ if (!(ha->fc_db[index].flag & DEV_PUBLIC)) {
++ /*
++ * This was in our database as a local device.
++ * Here we assume this device either has
++ * changed location so configure_local_loop has
++ * already done necessary clean up, or it's
++ * saved here due to persistent name binding.
++ * We'll just add it in as a fabric device.
++ */
++ /* Copy port id and name fields. */
++ ha->fc_db[index].flag |= DEV_PUBLIC;
++ ha->fc_db[index].d_id.b24 = dev.d_id.b24;
++ ha->fc_db[index].loop_id |= PORT_LOGIN_NEEDED;
++
++ break;
++ }
++
++ /* This was in our database as a fabric device. */
++ if ((ha->fc_db[index].d_id.b24 == dev.d_id.b24) &&
++ (ha->fc_db[index].loop_id <= LAST_SNS_LOOP_ID))
++ /* Device didn't change */
++ break;
++
++ if (ha->fc_db[index].loop_id == PORT_AVAILABLE) {
++ ha->fc_db[index].flag |= DEV_PUBLIC;
++ ha->fc_db[index].d_id.b24 = dev.d_id.b24;
++ ha->fc_db[index].loop_id |= PORT_LOGIN_NEEDED;
++ break;
++ }
++
++ /*
++ * Port ID changed or device was marked to be updated;
++ * logout and mark it for relogin later.
++ */
++ qla2x00_fabric_logout(ha,
++ ha->fc_db[index].loop_id & 0xff);
++ ha->fc_db[index].flag |= DEV_PUBLIC;
++ ha->fc_db[index].d_id.b24 = dev.d_id.b24;
++
++ ha->fc_db[index].loop_id |= PORT_LOGIN_NEEDED;
++ ha->fc_db[index].loop_id &= ~PORT_LOST_ID;
++
++ *flags |= LOGOUT_PERFORMED;
++
++ break;
++ }
++
++ if (index == MAX_FIBRE_DEVICES) {
++ /*
++ * Did not find a match in our database. This is a new
++ * device.
++ */
++ DEBUG3(printk("scsi(%ld): Found new device "
++ "%02x%02x%02x%02x%02x%02x%02x%02x.\n",
++ ha->host_no,
++ dev.wwn[0], dev.wwn[1], dev.wwn[2], dev.wwn[3],
++ dev.wwn[4], dev.wwn[5], dev.wwn[6], dev.wwn[7]));
++
++ memcpy(&new_dev_list[new_cnt],
++ &dev, sizeof(struct new_dev));
++ new_cnt++;
++ }
++ }
++
++ if (swl)
++ kfree(swl);
++
++ *new_dev_cnt = new_cnt;
++
++ if (new_cnt > 0)
++ ha->device_flags |= DFLG_FABRIC_DEVICES;
++
++ LEAVE(__func__);
++
++ return (rval);
++}
++
++/*
++ * qla2x00_device_resync
++ * Marks devices in the database that needs resynchronization.
++ *
++ * Input:
++ * ha = adapter block pointer.
++ *
++ * Context:
++ * Kernel context.
++ */
++static void
++qla2x00_device_resync(scsi_qla_host_t *ha)
++{
++ uint16_t index;
++ uint32_t mask;
++ rscn_t dev;
++ struct list_head *fcil;
++ fc_initiator_t *fcinitiator;
++
++ ENTER(__func__);
++
++ while (ha->rscn_out_ptr != ha->rscn_in_ptr ||
++ ha->flags.rscn_queue_overflow) {
++
++ memcpy(&dev, &ha->rscn_queue[ha->rscn_out_ptr], sizeof(rscn_t));
++
++ DEBUG(printk("scsi(%ld): device_resync: rscn_queue[%d], "
++ "portID=%02x%02x%02x.\n",
++ ha->host_no,
++ ha->rscn_out_ptr,
++ ha->rscn_queue[ha->rscn_out_ptr].d_id.b.domain,
++ ha->rscn_queue[ha->rscn_out_ptr].d_id.b.area,
++ ha->rscn_queue[ha->rscn_out_ptr].d_id.b.al_pa));
++
++ ha->rscn_out_ptr++;
++ if (ha->rscn_out_ptr == MAX_RSCN_COUNT)
++ ha->rscn_out_ptr = 0;
++
++ /* Queue overflow, set switch default case. */
++ if (ha->flags.rscn_queue_overflow) {
++ DEBUG(printk("scsi(%ld): device_resync: rscn "
++ "overflow.\n", ha->host_no));
++
++ dev.format = 3;
++ ha->flags.rscn_queue_overflow = 0;
++ }
++
++ switch (dev.format) {
++ case 0:
++ mask = 0xffffff;
++ break;
++ case 1:
++ mask = 0xffff00;
++ break;
++ case 2:
++ mask = 0xff0000;
++ break;
++ default:
++ mask = 0x0;
++ dev.d_id.b24 = 0;
++ ha->rscn_out_ptr = ha->rscn_in_ptr;
++ break;
++ }
++
++ /* Mark target devices indicated by RSCN for later processing */
++ for (index = 0; index < MAX_FIBRE_DEVICES; index++) {
++ if ((ha->fc_db[index].flag & DEV_PUBLIC) &&
++ (ha->fc_db[index].d_id.b24 & mask) ==
++ dev.d_id.b24) {
++
++ /* fabric device */
++ if (ha->fc_db[index].loop_id != PORT_UNUSED) {
++ ha->fc_db[index].loop_id |=
++ PORT_LOST_ID;
++
++ DEBUG(printk("scsi(%ld): RSCN port @ "
++ "slot %d port_id=%02x%02x%02x.\n",
++ ha->host_no,
++ index,
++ ha->fc_db[index].d_id.b.domain,
++ ha->fc_db[index].d_id.b.area,
++ ha->fc_db[index].d_id.b.al_pa));
++ }
++ }
++ }
++
++ if (dev.format == 3)
++ continue;
++
++ /*
++ * Invalidate initiator devices indicated by RSCN so we know
++ * they are no longer logged in.
++ */
++ list_for_each(fcil, &ha->fcinitiators) {
++ fcinitiator = list_entry(fcil, fc_initiator_t, list);
++
++ if ((fcinitiator->d_id.b24 & mask) != dev.d_id.b24)
++ continue;
++ if (fcinitiator->loop_id & PORT_LOST_ID ||
++ fcinitiator->loop_id & PORT_LOGIN_NEEDED)
++ continue;
++
++ fcinitiator->loop_id |= PORT_LOST_ID;
++ fcinitiator->d_id.b24 = 0;
++ }
++ }
++
++ LEAVE(__func__);
++}
++
++
++/*
++ * qla2x00_loop_resync
++ * Resync with fibre channel devices.
++ *
++ * Input:
++ * ha = adapter block pointer.
++ *
++ * Returns:
++ * 0 = success
++ */
++uint8_t
++qla2x00_loop_resync(scsi_qla_host_t *ha)
++{
++ uint8_t status;
++
++ ENTER(__func__);
++
++ ha->loop_state = LOOP_UPDATE;
++ qla2x00_stats.loop_resync++;
++ clear_bit(ISP_ABORT_RETRY, &ha->dpc_flags);
++ if (ha->flags.online) {
++ if (!(status = qla2x00_fw_ready(ha))) {
++ do {
++ /* v2.19.05b6 */
++ ha->loop_state = LOOP_UPDATE;
++
++ /*
++ * Issue marker command only when we are going
++ * to start the I/O .
++ */
++ ha->marker_needed = 1;
++
++ /* Remap devices on Loop. */
++ clear_bit(LOOP_RESYNC_NEEDED, &ha->dpc_flags);
++
++ qla2x00_configure_loop(ha);
++
++ } while (!atomic_read(&ha->loop_down_timer) &&
++ !(test_bit(ISP_ABORT_NEEDED, &ha->dpc_flags)) &&
++ (test_bit(LOOP_RESYNC_NEEDED, &ha->dpc_flags)));
++ }
++ qla2x00_restart_queues(ha,TRUE);
++ } else
++ status = 0;
++
++ if (test_bit(ISP_ABORT_NEEDED, &ha->dpc_flags)) {
++ return (1);
++ }
++
++ if (status) {
++ DEBUG2_3(printk("%s(): **** FAILED ****\n", __func__));
++ }
++
++ LEAVE(__func__);
++
++ return(status);
++}
++
++/*
++ * qla2x00_fabric_login
++ * Issue fabric login command.
++ *
++ * Input:
++ * ha = adapter block pointer.
++ * device = pointer to FC device type structure.
++ *
++ * Returns:
++ * 0 - Login successfully
++ * 1 - Login failed
++ * 2 - Initiator device
++ * 3 - Fatal error
++ */
++uint8_t
++qla2x00_fabric_login(scsi_qla_host_t *ha, fcdev_t *device)
++{
++ uint16_t status[3];
++
++ for (;;) {
++ DEBUG(printk("scsi(%ld): Trying Fabric Login w/loop id 0x%04x "
++ "for port %02x%02x%02x.\n",
++ ha->host_no, device->loop_id,
++ device->d_id.b.domain,
++ device->d_id.b.area,
++ device->d_id.b.al_pa));
++
++ /* Login device on switch. */
++ qla2x00_login_fabric(ha,
++ device->loop_id, device->d_id.b.domain,
++ device->d_id.b.area, device->d_id.b.al_pa,
++ &status[0], BIT_0);
++
++ if (status[0] == 0x4007) {
++ ha->fabricid[device->loop_id].in_use = FALSE;
++ device->loop_id = status[1];
++
++ DEBUG(printk("Fabric Login: port in use - next "
++ "loop id=0x%04x, port Id=%02x%02x%02x.\n",
++ device->loop_id,
++ device->d_id.b.domain,
++ device->d_id.b.area,
++ device->d_id.b.al_pa));
++
++ if (device->loop_id <= LAST_SNS_LOOP_ID)
++ ha->fabricid[device->loop_id].in_use = TRUE;
++ else
++ return 1;
++
++ } else if (status[0] == 0x4000) {
++ if (status[1] & 0x0001) {
++ /* Initiator only device */
++ qla2x00_add_initiator_device(ha, device);
++
++ return 2;
++ }
++
++ /* This is target capable device */
++ qla2x00_get_port_database(ha, device, 0);
++
++ DEBUG(printk("scsi(%ld): Fabric Login OK. loop "
++ "id=0x%04x, port Id=%02x%02x%02x.\n",
++ ha->host_no,
++ device->loop_id,
++ device->d_id.b.domain,
++ device->d_id.b.area,
++ device->d_id.b.al_pa));
++ return 0;
++
++ } else if (status[0] == 0x4008) {
++ if (device->loop_id++ <= LAST_SNS_LOOP_ID)
++ ha->fabricid[device->loop_id].in_use = TRUE;
++ else
++ return 1;
++
++ } else if (status[0] == 0x4006) {
++ /* No more retry needed. */
++ return 3;
++ } else {
++ DEBUG2(printk("%s(%ld): failed=%x port_id=%02x%02x%02x "
++ "loop_id=%x jiffies=%lx.\n",
++ __func__, ha->host_no, status[0],
++ device->d_id.b.domain,
++ device->d_id.b.area,
++ device->d_id.b.al_pa,
++ device->loop_id, jiffies));
++ return 1;
++ }
++ }
++}
++
++/*
++ * qla2x00_local_device_login
++ * Issue local device login command.
++ *
++ * Input:
++ * ha = adapter block pointer.
++ * loop_id = loop id of device to login to.
++ *
++ * Returns (Where's the #define!!!!):
++ * 0 - Login successfully
++ * 1 - Login failed
++ * 3 - Fatal error
++ */
++uint8_t
++qla2x00_local_device_login(scsi_qla_host_t *ha, uint16_t loop_id)
++{
++ int rval;
++ uint16_t mb[MAILBOX_REGISTER_COUNT];
++
++ memset(mb, 0, sizeof(mb));
++ rval = qla2x00_login_local_device(ha, loop_id, mb, BIT_0);
++ if (rval == QL_STATUS_SUCCESS) {
++ /* Interrogate mailbox registers for any errors */
++ if (mb[0] == 0x4005)
++ rval = 1;
++ else if (mb[0] == 0x4006)
++ /* device not in PCB table */
++ rval = 3;
++ }
++ return rval;
++}
++
++
++/**
++ * qla2x00_ga_nxt() - SNS scan for fabric devices via GA_NXT command.
++ * @ha: HA context
++ * @swl_entry: switch info entry to updated
++ *
++ * NOTE: Non-Nx_Ports are skipped.
++ *
++ * Returns 0 on success.
++ */
++static int
++qla2x00_ga_nxt(scsi_qla_host_t *ha, sw_info_t *swl_entry)
++{
++ int rval;
++
++ ms_iocb_entry_t *ms_pkt;
++ struct ct_sns_req *ct_req;
++ struct ct_sns_rsp *ct_rsp;
++
++ ENTER(__func__);
++
++retry_ga_nxt:
++ /* Issue GA_NXT */
++ /* Prepare common MS IOCB */
++ ms_pkt = qla2x00_prep_ms_iocb(ha, GA_NXT_REQ_SIZE, GA_NXT_RSP_SIZE);
++
++ /* Prepare CT request */
++ ct_req = &ha->ct_sns->p.req;
++ ct_rsp = &ha->ct_sns->p.rsp;
++ memset(ct_req, 0, sizeof(struct ct_sns_pkt));
++
++ ct_req->header.revision = 0x01;
++ ct_req->header.gs_type = 0xFC;
++ ct_req->header.gs_subtype = 0x02;
++ ct_req->command = __constant_cpu_to_be16(GA_NXT_CMD);
++ ct_req->max_rsp_size =
++ __constant_cpu_to_be16((GA_NXT_RSP_SIZE - 16) / 4);
++
++ /* Prepare CT arguments -- port_id */
++ ct_req->req.port_id.port_id[0] = swl_entry->d_id.b.domain;
++ ct_req->req.port_id.port_id[1] = swl_entry->d_id.b.area;
++ ct_req->req.port_id.port_id[2] = swl_entry->d_id.b.al_pa;
++
++ /* Execute MS IOCB */
++ rval = qla2x00_issue_iocb(ha,
++ ha->ms_iocb, ha->ms_iocb_dma, sizeof(ms_iocb_entry_t));
++ if (rval != QL_STATUS_SUCCESS) {
++ /*EMPTY*/
++ DEBUG2_3(printk("scsi(%ld): GA_NXT issue IOCB failed (%d).\n",
++ ha->host_no, rval));
++ } else if (ct_rsp->header.response !=
++ __constant_cpu_to_be16(CT_ACCEPT_RESPONSE)) {
++ DEBUG2_3(printk("scsi(%ld): GA_NXT failed, rejected request, "
++ "ga_nxt_rsp:\n", ha->host_no));
++ DEBUG2_3(qla2x00_dump_buffer((uint8_t *)&ct_rsp->header,
++ sizeof(struct ct_rsp_hdr)));
++ rval = QL_STATUS_ERROR;
++ } else if (ct_rsp->rsp.ga_nxt.port_type != NS_N_PORT_TYPE &&
++ ct_rsp->rsp.ga_nxt.port_type != NS_NL_PORT_TYPE) {
++ /* We're only interested in Nx ports */
++ DEBUG2_3(printk("scsi(%ld): GA_NXT skipping *NON* Nx_Port - "
++ "nodename %02x%02x%02x%02x%02x%02x%02x%02x "
++ "portname %02x%02x%02x%02x%02x%02x%02x%02x "
++ "portid=%02x%02x%02x port_type=%x.\n",
++ ha->host_no,
++ ct_rsp->rsp.ga_nxt.node_name[0],
++ ct_rsp->rsp.ga_nxt.node_name[1],
++ ct_rsp->rsp.ga_nxt.node_name[2],
++ ct_rsp->rsp.ga_nxt.node_name[3],
++ ct_rsp->rsp.ga_nxt.node_name[4],
++ ct_rsp->rsp.ga_nxt.node_name[5],
++ ct_rsp->rsp.ga_nxt.node_name[6],
++ ct_rsp->rsp.ga_nxt.node_name[7],
++ ct_rsp->rsp.ga_nxt.port_name[0],
++ ct_rsp->rsp.ga_nxt.port_name[1],
++ ct_rsp->rsp.ga_nxt.port_name[2],
++ ct_rsp->rsp.ga_nxt.port_name[3],
++ ct_rsp->rsp.ga_nxt.port_name[4],
++ ct_rsp->rsp.ga_nxt.port_name[5],
++ ct_rsp->rsp.ga_nxt.port_name[6],
++ ct_rsp->rsp.ga_nxt.port_name[7],
++ ct_rsp->rsp.ga_nxt.port_id[0],
++ ct_rsp->rsp.ga_nxt.port_id[1],
++ ct_rsp->rsp.ga_nxt.port_id[2],
++ ct_rsp->rsp.ga_nxt.port_type));
++ goto retry_ga_nxt;
++ } else {
++ /* Populate switch info entry. */
++ swl_entry->d_id.b.domain = ct_rsp->rsp.ga_nxt.port_id[0];
++ swl_entry->d_id.b.area = ct_rsp->rsp.ga_nxt.port_id[1];
++ swl_entry->d_id.b.al_pa = ct_rsp->rsp.ga_nxt.port_id[2];
++
++ memcpy(swl_entry->node_name,
++ ct_rsp->rsp.ga_nxt.node_name, WWN_SIZE);
++ memcpy(swl_entry->port_name,
++ ct_rsp->rsp.ga_nxt.port_name, WWN_SIZE);
++
++ swl_entry->type = SW_TYPE_SCSI;
++ if (ct_rsp->rsp.ga_nxt.fc4_types[3] & 0x20)
++ swl_entry->type |= SW_TYPE_IP;
++
++ DEBUG2_3(printk("scsi(%ld): GA_NXT entry - "
++ "nodename %02x%02x%02x%02x%02x%02x%02x%02x "
++ "portname %02x%02x%02x%02x%02x%02x%02x%02x "
++ "portid=%02x%02x%02x type=%02x.\n",
++ ha->host_no,
++ swl_entry->node_name[0], swl_entry->node_name[1],
++ swl_entry->node_name[2], swl_entry->node_name[3],
++ swl_entry->node_name[4], swl_entry->node_name[5],
++ swl_entry->node_name[6], swl_entry->node_name[7],
++ swl_entry->port_name[0], swl_entry->port_name[1],
++ swl_entry->port_name[2], swl_entry->port_name[3],
++ swl_entry->port_name[4], swl_entry->port_name[5],
++ swl_entry->port_name[6], swl_entry->port_name[7],
++ swl_entry->d_id.b.domain,
++ swl_entry->d_id.b.area,
++ swl_entry->d_id.b.al_pa,
++ swl_entry->type));
++ }
++
++ LEAVE(__func__);
++
++ return (rval);
++}
++
++/**
++ * qla2x00_gid_pt() - SNS scan for fabric devices via GID_PT command.
++ * @ha: HA context
++ * @list: switch info entries to populate
++ *
++ * NOTE: Non-Nx_Ports are not requested.
++ *
++ * Returns 0 on success.
++ */
++static int
++qla2x00_gid_pt(scsi_qla_host_t *ha, sw_info_t *list)
++{
++ int rval;
++ uint16_t i;
++
++ ms_iocb_entry_t *ms_pkt;
++ struct ct_sns_req *ct_req;
++ struct ct_sns_rsp *ct_rsp;
++
++ struct ct_sns_gid_pt_data *gid_data;
++
++ ENTER(__func__);
++
++ gid_data = NULL;
++
++ /* Issue GID_PT */
++ /* Prepare common MS IOCB */
++ ms_pkt = qla2x00_prep_ms_iocb(ha, GID_PT_REQ_SIZE, GID_PT_RSP_SIZE);
++
++ /* Prepare CT request */
++ ct_req = &ha->ct_sns->p.req;
++ ct_rsp = &ha->ct_sns->p.rsp;
++ memset(ct_req, 0, sizeof(struct ct_sns_pkt));
++
++ ct_req->header.revision = 0x01;
++ ct_req->header.gs_type = 0xFC;
++ ct_req->header.gs_subtype = 0x02;
++ ct_req->command = __constant_cpu_to_be16(GID_PT_CMD);
++ ct_req->max_rsp_size =
++ __constant_cpu_to_be16((GID_PT_RSP_SIZE - 16) / 4);
++
++ /* Prepare CT arguments -- port_type */
++ ct_req->req.gid_pt.port_type = NS_NX_PORT_TYPE;
++
++ /* Execute MS IOCB */
++ rval = qla2x00_issue_iocb(ha,
++ ha->ms_iocb, ha->ms_iocb_dma, sizeof(ms_iocb_entry_t));
++ if (rval != QL_STATUS_SUCCESS) {
++ /*EMPTY*/
++ DEBUG2_3(printk("scsi(%ld): GID_PT issue IOCB failed (%d).\n",
++ ha->host_no, rval));
++ } else if (ct_rsp->header.response !=
++ __constant_cpu_to_be16(CT_ACCEPT_RESPONSE)) {
++ DEBUG2_3(printk("scsi(%ld): GID_PT failed, rejected request, "
++ "gid_pt_rsp:\n", ha->host_no));
++ DEBUG2_3(qla2x00_dump_buffer((uint8_t *)&ct_rsp->header,
++ sizeof(struct ct_rsp_hdr)));
++ rval = QL_STATUS_ERROR;
++ } else {
++ /* Set port IDs in switch info list. */
++ for (i = 0; i < MAX_FIBRE_DEVICES; i++) {
++ memset(&list[i], 0, sizeof(sw_info_t));
++ gid_data = &ct_rsp->rsp.gid_pt.entries[i];
++ list[i].d_id.b.domain = gid_data->port_id[0];
++ list[i].d_id.b.area = gid_data->port_id[1];
++ list[i].d_id.b.al_pa = gid_data->port_id[2];
++
++ /* Last one exit. */
++ if (gid_data->control_byte & BIT_7) {
++ list[i].d_id.b.rsvd_1 = gid_data->control_byte;
++ break;
++ }
++ }
++ }
++
++ LEAVE(__func__);
++
++ return (rval);
++}
++
++/**
++ * qla2x00_gpn_id() - SNS Get Port Name (GPN_ID) query.
++ * @ha: HA context
++ * @list: switch info entries to populate
++ *
++ * Returns 0 on success.
++ */
++static int
++qla2x00_gpn_id(scsi_qla_host_t *ha, sw_info_t *list)
++{
++ int rval;
++ uint16_t i;
++
++ ms_iocb_entry_t *ms_pkt;
++ struct ct_sns_req *ct_req;
++ struct ct_sns_rsp *ct_rsp;
++
++ ENTER(__func__);
++
++ for (i = 0; i < MAX_FIBRE_DEVICES; i++) {
++ /* Issue GPN_ID */
++ /* Prepare common MS IOCB */
++ ms_pkt = qla2x00_prep_ms_iocb(ha,
++ GPN_ID_REQ_SIZE, GPN_ID_RSP_SIZE);
++
++ /* Prepare CT request */
++ ct_req = &ha->ct_sns->p.req;
++ ct_rsp = &ha->ct_sns->p.rsp;
++ memset(ct_req, 0, sizeof(struct ct_sns_pkt));
++
++ ct_req->header.revision = 0x01;
++ ct_req->header.gs_type = 0xFC;
++ ct_req->header.gs_subtype = 0x02;
++ ct_req->command = __constant_cpu_to_be16(GPN_ID_CMD);
++ ct_req->max_rsp_size =
++ __constant_cpu_to_be16((GPN_ID_RSP_SIZE - 16) / 4);
++
++ /* Prepare CT arguments -- port_id */
++ ct_req->req.port_id.port_id[0] = list[i].d_id.b.domain;
++ ct_req->req.port_id.port_id[1] = list[i].d_id.b.area;
++ ct_req->req.port_id.port_id[2] = list[i].d_id.b.al_pa;
++
++ /* Execute MS IOCB */
++ rval = qla2x00_issue_iocb(ha,
++ ha->ms_iocb, ha->ms_iocb_dma, sizeof(ms_iocb_entry_t));
++ if (rval != QL_STATUS_SUCCESS) {
++ /*EMPTY*/
++ DEBUG2_3(printk("scsi(%ld): GPN_ID issue IOCB failed "
++ "(%d).\n",
++ ha->host_no, rval));
++ } else if (ct_rsp->header.response !=
++ __constant_cpu_to_be16(CT_ACCEPT_RESPONSE)) {
++ DEBUG2_3(printk("scsi(%ld): GPN_ID failed, rejected "
++ "request, gpn_id_rsp:\n", ha->host_no));
++ DEBUG2_3(qla2x00_dump_buffer((uint8_t *)&ct_rsp->header,
++ sizeof(struct ct_rsp_hdr)));
++ rval = QL_STATUS_ERROR;
++ } else {
++ /* Save portname */
++ memcpy(list[i].port_name,
++ ct_rsp->rsp.gpn_id.port_name, WWN_SIZE);
++ }
++
++ /* Last device exit. */
++ if (list[i].d_id.b.rsvd_1 != 0)
++ break;
++ }
++
++ LEAVE(__func__);
++
++ return (rval);
++}
++
++/**
++ * qla2x00_gnn_id() - SNS Get Node Name (GPN_ID) query.
++ * @ha: HA context
++ * @list: switch info entries to populate
++ *
++ * Returns 0 on success.
++ */
++static int
++qla2x00_gnn_id(scsi_qla_host_t *ha, sw_info_t *list)
++{
++ int rval;
++ uint16_t i;
++
++ ms_iocb_entry_t *ms_pkt;
++ struct ct_sns_req *ct_req;
++ struct ct_sns_rsp *ct_rsp;
++
++ ENTER(__func__);
++
++ for (i = 0; i < MAX_FIBRE_DEVICES; i++) {
++ /* Issue GNN_ID */
++ /* Prepare common MS IOCB */
++ ms_pkt = qla2x00_prep_ms_iocb(ha,
++ GNN_ID_REQ_SIZE, GNN_ID_RSP_SIZE);
++
++ /* Prepare CT request */
++ ct_req = &ha->ct_sns->p.req;
++ ct_rsp = &ha->ct_sns->p.rsp;
++ memset(ct_req, 0, sizeof(struct ct_sns_pkt));
++
++ ct_req->header.revision = 0x01;
++ ct_req->header.gs_type = 0xFC;
++ ct_req->header.gs_subtype = 0x02;
++ ct_req->command = __constant_cpu_to_be16(GNN_ID_CMD);
++ ct_req->max_rsp_size =
++ __constant_cpu_to_be16((GNN_ID_RSP_SIZE - 16) / 4);
++
++ /* Prepare CT arguments -- port_id */
++ ct_req->req.port_id.port_id[0] = list[i].d_id.b.domain;
++ ct_req->req.port_id.port_id[1] = list[i].d_id.b.area;
++ ct_req->req.port_id.port_id[2] = list[i].d_id.b.al_pa;
++
++ /* Execute MS IOCB */
++ rval = qla2x00_issue_iocb(ha,
++ ha->ms_iocb, ha->ms_iocb_dma, sizeof(ms_iocb_entry_t));
++ if (rval != QL_STATUS_SUCCESS) {
++ /*EMPTY*/
++ DEBUG2_3(printk("scsi(%ld): GNN_ID issue IOCB failed "
++ "(%d).\n",
++ ha->host_no, rval));
++ } else if (ct_rsp->header.response !=
++ __constant_cpu_to_be16(CT_ACCEPT_RESPONSE)) {
++ DEBUG2_3(printk("scsi(%ld): GNN_ID failed, rejected "
++ "request, gnn_id_rsp:\n", ha->host_no));
++ DEBUG2_3(qla2x00_dump_buffer((uint8_t *)&ct_rsp->header,
++ sizeof(struct ct_rsp_hdr)));
++ rval = QL_STATUS_ERROR;
++ } else {
++ /* Save nodename */
++ memcpy(list[i].node_name,
++ ct_rsp->rsp.gnn_id.node_name, WWN_SIZE);
++ }
++
++ /* Last device exit. */
++ if (list[i].d_id.b.rsvd_1 != 0)
++ break;
++ }
++
++ LEAVE(__func__);
++
++ return (rval);
++}
++
++/**
++ * qla2x00_gft_id() - SNS Get FC-4 TYPEs (GFT_ID) query.
++ * @ha: HA context
++ * @list: switch info entries to populate
++ *
++ * Returns 0 on success.
++ */
++static int
++qla2x00_gft_id(scsi_qla_host_t *ha, sw_info_t *list)
++{
++ int rval;
++ uint16_t i;
++
++ ms_iocb_entry_t *ms_pkt;
++ struct ct_sns_req *ct_req;
++ struct ct_sns_rsp *ct_rsp;
++
++ ENTER(__func__);
++
++ for (i = 0; i < MAX_FIBRE_DEVICES; i++) {
++ /* Issue GFT_ID */
++ /* Prepare common MS IOCB */
++ ms_pkt = qla2x00_prep_ms_iocb(ha,
++ GFT_ID_REQ_SIZE, GFT_ID_RSP_SIZE);
++
++ /* Prepare CT request */
++ ct_req = &ha->ct_sns->p.req;
++ ct_rsp = &ha->ct_sns->p.rsp;
++ memset(ct_req, 0, sizeof(struct ct_sns_pkt));
++
++ ct_req->header.revision = 0x01;
++ ct_req->header.gs_type = 0xFC;
++ ct_req->header.gs_subtype = 0x02;
++ ct_req->command = __constant_cpu_to_be16(GFT_ID_CMD);
++ ct_req->max_rsp_size =
++ __constant_cpu_to_be16((GFT_ID_RSP_SIZE - 16) / 4);
++
++ /* Prepare CT arguments -- port_id */
++ ct_req->req.port_id.port_id[0] = list[i].d_id.b.domain;
++ ct_req->req.port_id.port_id[1] = list[i].d_id.b.area;
++ ct_req->req.port_id.port_id[2] = list[i].d_id.b.al_pa;
++
++ /* Execute MS IOCB */
++ rval = qla2x00_issue_iocb(ha,
++ ha->ms_iocb, ha->ms_iocb_dma, sizeof(ms_iocb_entry_t));
++ if (rval != QL_STATUS_SUCCESS) {
++ /*EMPTY*/
++ DEBUG2_3(printk("scsi(%ld): GFT_ID issue IOCB failed "
++ "(%d).\n",
++ ha->host_no, rval));
++ } else if (ct_rsp->header.response !=
++ __constant_cpu_to_be16(CT_ACCEPT_RESPONSE)) {
++ DEBUG2_3(printk("scsi(%ld): GFT_ID failed, rejected "
++ "request, gft_id_rsp:\n", ha->host_no));
++ DEBUG2_3(qla2x00_dump_buffer((uint8_t *)&ct_rsp->header,
++ sizeof(struct ct_rsp_hdr)));
++ rval = QL_STATUS_ERROR;
++ } else {
++ /* FCP-3 check necessary? No, assume FCP-3 */
++ /*if (ct_rsp->rsp.gft_id.fc4_types[2] & 0x01)*/
++ list[i].type = SW_TYPE_SCSI;
++ if (ct_rsp->rsp.gft_id.fc4_types[3] & 0x20)
++ list[i].type |= SW_TYPE_IP;
++
++ DEBUG2_3(printk("scsi(%ld): GID_PT entry - "
++ "nodename %02x%02x%02x%02x%02x%02x%02x%02x "
++ "portname %02x%02x%02x%02x%02x%02x%02x%02x "
++ "portid=%02x%02x%02x type=%02x.\n",
++ ha->host_no,
++ list[i].node_name[0], list[i].node_name[1],
++ list[i].node_name[2], list[i].node_name[3],
++ list[i].node_name[4], list[i].node_name[5],
++ list[i].node_name[6], list[i].node_name[7],
++ list[i].port_name[0], list[i].port_name[1],
++ list[i].port_name[2], list[i].port_name[3],
++ list[i].port_name[4], list[i].port_name[5],
++ list[i].port_name[6], list[i].port_name[7],
++ list[i].d_id.b.domain,
++ list[i].d_id.b.area,
++ list[i].d_id.b.al_pa,
++ list[i].type));
++ }
++
++ /* Last device exit. */
++ if (list[i].d_id.b.rsvd_1 != 0)
++ break;
++ }
++
++ LEAVE(__func__);
++
++ return (rval);
++}
++
++/**
++ * qla2x00_rft_id() - SNS Register FC-4 TYPEs (RFT_ID) supported by the HBA.
++ * @ha: HA context
++ *
++ * Returns 0 on success.
++ */
++static int
++qla2x00_rft_id(scsi_qla_host_t *ha)
++{
++ int rval;
++
++ ms_iocb_entry_t *ms_pkt;
++ struct ct_sns_req *ct_req;
++ struct ct_sns_rsp *ct_rsp;
++
++ ENTER(__func__);
++
++ /* Issue RFT_ID */
++ /* Prepare common MS IOCB */
++ ms_pkt = qla2x00_prep_ms_iocb(ha, RFT_ID_REQ_SIZE, RFT_ID_RSP_SIZE);
++
++ /* Prepare CT request */
++ ct_req = &ha->ct_sns->p.req;
++ ct_rsp = &ha->ct_sns->p.rsp;
++ memset(ct_req, 0, sizeof(struct ct_sns_pkt));
++
++ ct_req->header.revision = 0x01;
++ ct_req->header.gs_type = 0xFC;
++ ct_req->header.gs_subtype = 0x02;
++ ct_req->command = __constant_cpu_to_be16(RFT_ID_CMD);
++ ct_req->max_rsp_size =
++ __constant_cpu_to_be16((RFT_ID_RSP_SIZE - 16) / 4);
++
++ /* Prepare CT arguments -- port_id, FC-4 types */
++ ct_req->req.rft_id.port_id[0] = ha->d_id.b.domain;
++ ct_req->req.rft_id.port_id[1] = ha->d_id.b.area;
++ ct_req->req.rft_id.port_id[2] = ha->d_id.b.al_pa;
++
++ ct_req->req.rft_id.fc4_types[2] = 0x01; /* FCP-3 */
++ ha->active_fc4_types = EXT_DEF_FC4_TYPE_SCSI;
++
++#if defined(FC_IP_SUPPORT)
++ if (ha->flags.enable_ip) {
++ ct_req->req.rft_id.fc4_types[3] = 0x20; /* IP over FC */
++ ha->active_fc4_types |= EXT_DEF_FC4_TYPE_IP;
++ }
++#endif
++#if defined(FC_VI_SUPPORT)
++ ct_req->req.rft_id.fc4_types[8] = 0x01; /* FC-VI */
++ ha->active_fc4_types |= EXT_DEF_FC4_TYPE_VI;
++#endif
++
++ /* Execute MS IOCB */
++ rval = qla2x00_issue_iocb(ha,
++ ha->ms_iocb, ha->ms_iocb_dma, sizeof(ms_iocb_entry_t));
++ if (rval != QL_STATUS_SUCCESS) {
++ /*EMPTY*/
++ DEBUG2_3(printk("scsi(%ld): RFT_ID issue IOCB failed (%d).\n",
++ ha->host_no, rval));
++ } else if (ct_rsp->header.response !=
++ __constant_cpu_to_be16(CT_ACCEPT_RESPONSE)) {
++ DEBUG2_3(printk("scsi(%ld): RFT_ID failed, rejected "
++ "request, rft_id_rsp:\n", ha->host_no));
++ DEBUG2_3(qla2x00_dump_buffer((uint8_t *)&ct_rsp->header,
++ sizeof(struct ct_rsp_hdr)));
++ rval = QL_STATUS_ERROR;
++ } else {
++ DEBUG2(printk("scsi(%ld): RFT_ID exiting normally.\n",
++ ha->host_no));
++ }
++
++ LEAVE(__func__);
++
++ return (rval);
++}
++
++/**
++ * qla2x00_rff_id() - SNS Register FC-4 Features (RFF_ID) supported by the HBA.
++ * @ha: HA context
++ *
++ * Returns 0 on success.
++ */
++static int
++qla2x00_rff_id(scsi_qla_host_t *ha)
++{
++ int rval;
++
++ ms_iocb_entry_t *ms_pkt;
++ struct ct_sns_req *ct_req;
++ struct ct_sns_rsp *ct_rsp;
++
++ ENTER(__func__);
++
++ /* Issue RFF_ID */
++ /* Prepare common MS IOCB */
++ ms_pkt = qla2x00_prep_ms_iocb(ha, RFF_ID_REQ_SIZE, RFF_ID_RSP_SIZE);
++
++ /* Prepare CT request */
++ ct_req = &ha->ct_sns->p.req;
++ ct_rsp = &ha->ct_sns->p.rsp;
++ memset(ct_req, 0, sizeof(struct ct_sns_pkt));
++
++ ct_req->header.revision = 0x01;
++ ct_req->header.gs_type = 0xFC;
++ ct_req->header.gs_subtype = 0x02;
++ ct_req->command = __constant_cpu_to_be16(RFF_ID_CMD);
++ ct_req->max_rsp_size =
++ __constant_cpu_to_be16((RFF_ID_RSP_SIZE - 16) / 4);
++
++ /* Prepare CT arguments -- port_id, FC-4 feature, FC-4 type */
++ ct_req->req.rff_id.port_id[0] = ha->d_id.b.domain;
++ ct_req->req.rff_id.port_id[1] = ha->d_id.b.area;
++ ct_req->req.rff_id.port_id[2] = ha->d_id.b.al_pa;
++
++ if (!ha->flags.enable_target_mode)
++ ct_req->req.rff_id.fc4_feature = 0x02; /* SCSI Initiator */
++
++ ct_req->req.rff_id.fc4_type = 0x08; /* SCSI - FCP */
++
++ /* Execute MS IOCB */
++ rval = qla2x00_issue_iocb(ha,
++ ha->ms_iocb, ha->ms_iocb_dma, sizeof(ms_iocb_entry_t));
++ if (rval != QL_STATUS_SUCCESS) {
++ /*EMPTY*/
++ DEBUG2_3(printk("scsi(%ld): RFF_ID issue IOCB failed (%d).\n",
++ ha->host_no, rval));
++ } else if (ct_rsp->header.response !=
++ __constant_cpu_to_be16(CT_ACCEPT_RESPONSE)) {
++ DEBUG2_3(printk("scsi(%ld): RFF_ID failed, rejected "
++ "request, rff_id_rsp:\n", ha->host_no));
++ DEBUG2_3(qla2x00_dump_buffer((uint8_t *)&ct_rsp->header,
++ sizeof(struct ct_rsp_hdr)));
++ rval = QL_STATUS_ERROR;
++ } else {
++ DEBUG2(printk("scsi(%ld): RFF_ID exiting normally.\n",
++ ha->host_no));
++ }
++
++ LEAVE(__func__);
++
++ return (rval);
++}
++
++/**
++ * qla2x00_rnn_id() - SNS Register Node Name (RNN_ID) of the HBA.
++ * @ha: HA context
++ *
++ * Returns 0 on success.
++ */
++static int
++qla2x00_rnn_id(scsi_qla_host_t *ha)
++{
++ int rval;
++
++ ms_iocb_entry_t *ms_pkt;
++ struct ct_sns_req *ct_req;
++ struct ct_sns_rsp *ct_rsp;
++
++ ENTER(__func__);
++
++ /* Issue RNN_ID */
++ /* Prepare common MS IOCB */
++ ms_pkt = qla2x00_prep_ms_iocb(ha, RNN_ID_REQ_SIZE, RNN_ID_RSP_SIZE);
++
++ /* Prepare CT request */
++ ct_req = &ha->ct_sns->p.req;
++ ct_rsp = &ha->ct_sns->p.rsp;
++ memset(ct_req, 0, sizeof(struct ct_sns_pkt));
++
++ ct_req->header.revision = 0x01;
++ ct_req->header.gs_type = 0xFC;
++ ct_req->header.gs_subtype = 0x02;
++ ct_req->command = __constant_cpu_to_be16(RNN_ID_CMD);
++ ct_req->max_rsp_size =
++ __constant_cpu_to_be16((RNN_ID_RSP_SIZE - 16) / 4);
++
++ /* Prepare CT arguments -- port_id, node_name */
++ ct_req->req.rnn_id.port_id[0] = ha->d_id.b.domain;
++ ct_req->req.rnn_id.port_id[1] = ha->d_id.b.area;
++ ct_req->req.rnn_id.port_id[2] = ha->d_id.b.al_pa;
++
++ memcpy(ct_req->req.rnn_id.node_name, ha->init_cb->node_name, WWN_SIZE);
++
++ /* Execute MS IOCB */
++ rval = qla2x00_issue_iocb(ha,
++ ha->ms_iocb, ha->ms_iocb_dma, sizeof(ms_iocb_entry_t));
++ if (rval != QL_STATUS_SUCCESS) {
++ /*EMPTY*/
++ DEBUG2_3(printk("scsi(%ld): RNN_ID issue IOCB failed (%d).\n",
++ ha->host_no, rval));
++ } else if (ct_rsp->header.response !=
++ __constant_cpu_to_be16(CT_ACCEPT_RESPONSE)) {
++ DEBUG2_3(printk("scsi(%ld): RNN_ID failed, rejected "
++ "request, rnn_id_rsp:\n", ha->host_no));
++ DEBUG2_3(qla2x00_dump_buffer((uint8_t *)&ct_rsp->header,
++ sizeof(struct ct_rsp_hdr)));
++ rval = QL_STATUS_ERROR;
++ } else {
++ DEBUG2(printk("scsi(%ld): RNN_ID exiting normally.\n",
++ ha->host_no));
++ }
++
++ LEAVE(__func__);
++
++ return (rval);
++}
++
++/**
++ * qla2x00_rsnn_nn() - SNS Register Symbolic Node Name (RSNN_NN) of the HBA.
++ * @ha: HA context
++ *
++ * Returns 0 on success.
++ */
++static int
++qla2x00_rsnn_nn(scsi_qla_host_t *ha)
++{
++ int rval;
++ uint8_t *snn;
++ uint8_t version[20];
++
++ ms_iocb_entry_t *ms_pkt;
++ struct ct_sns_req *ct_req;
++ struct ct_sns_rsp *ct_rsp;
++
++ ENTER(__func__);
++
++ /* Issue RSNN_NN */
++ /* Prepare common MS IOCB */
++ /* Request size adjusted after CT preparation */
++ ms_pkt = qla2x00_prep_ms_iocb(ha, 0, RSNN_NN_RSP_SIZE);
++
++ /* Prepare CT request */
++ ct_req = &ha->ct_sns->p.req;
++ ct_rsp = &ha->ct_sns->p.rsp;
++ memset(ct_req, 0, sizeof(struct ct_sns_pkt));
++
++ ct_req->header.revision = 0x01;
++ ct_req->header.gs_type = 0xFC;
++ ct_req->header.gs_subtype = 0x02;
++ ct_req->command = __constant_cpu_to_be16(RSNN_NN_CMD);
++ ct_req->max_rsp_size =
++ __constant_cpu_to_be16((RSNN_NN_RSP_SIZE - 16) / 4);
++
++ /* Prepare CT arguments -- node_name, symbolic node_name, size */
++ memcpy(ct_req->req.rsnn_nn.node_name, ha->init_cb->node_name, WWN_SIZE);
++
++ /* Prepare the Symbolic Node Name */
++ /* Board type */
++ snn = ct_req->req.rsnn_nn.sym_node_name;
++#if defined(ISP2300)
++ if (ha->pdev->device == QLA2312_DEVICE_ID) {
++ switch (ha->pdev->subsystem_device) {
++ case 0x0100:
++ strcpy(snn , "QLA2340");
++ break;
++
++ case 0x0101:
++ strcpy(snn , "QLA2342");
++ break;
++
++ case 0x0102:
++ strcpy(snn , "QLA2312");
++ break;
++
++ default:
++ strcpy(snn , "QLA2312");
++ break;
++ }
++ } else {
++ strcpy(snn ,"QLA23xx");
++ }
++#else
++ sprintf(snn, "QLA%04x", ha->pdev->device);
++#endif
++
++ /* Firmware version */
++ strcat(snn, " FW:v");
++ sprintf(version, "%d.%02d.%02d", ha->fw_major_version,
++ ha->fw_minor_version, ha->fw_subminor_version);
++ strcat(snn, version);
++
++ /* Driver version */
++ strcat(snn, " DVR:v");
++ strcat(snn, qla2x00_version_str);
++
++ /* Calculate SNN length */
++ ct_req->req.rsnn_nn.name_len = (uint8_t)strlen(snn);
++
++ /* Update MS IOCB request */
++ ms_pkt->req_bytecount =
++ cpu_to_le32(24 + 1 + ct_req->req.rsnn_nn.name_len);
++ ms_pkt->dseg_req_length = ms_pkt->req_bytecount;
++
++ /* Execute MS IOCB */
++ rval = qla2x00_issue_iocb(ha,
++ ha->ms_iocb, ha->ms_iocb_dma, sizeof(ms_iocb_entry_t));
++ if (rval != QL_STATUS_SUCCESS) {
++ /*EMPTY*/
++ DEBUG2_3(printk("scsi(%ld): RSNN_NN issue IOCB failed (%d).\n",
++ ha->host_no, rval));
++ } else if (ct_rsp->header.response !=
++ __constant_cpu_to_be16(CT_ACCEPT_RESPONSE)) {
++ DEBUG2_3(printk("scsi(%ld): RSNN_NN failed, rejected "
++ "request, rsnn_id_rsp:\n", ha->host_no));
++ DEBUG2_3(qla2x00_dump_buffer((uint8_t *)&ct_rsp->header,
++ sizeof(struct ct_rsp_hdr)));
++ rval = QL_STATUS_ERROR;
++ } else {
++ DEBUG2(printk("scsi(%ld): RSNN_NN exiting normally.\n",
++ ha->host_no));
++ }
++
++ LEAVE(__func__);
++
++ return (rval);
++}
++
++static int
++qla2x00_add_initiator_device(scsi_qla_host_t *ha, fcdev_t *device)
++{
++ int ret;
++ fc_initiator_t *fcinitiator;
++
++ ret = 1;
++ fcinitiator = kmalloc(sizeof(fc_initiator_t), GFP_ATOMIC);
++ if (fcinitiator != NULL) {
++ /* Setup initiator structure. */
++ memset(fcinitiator, 0, sizeof(fc_initiator_t));
++
++ memcpy(fcinitiator->node_name, device->name, WWN_SIZE);
++ memcpy(fcinitiator->port_name, device->wwn, WWN_SIZE);
++ fcinitiator->d_id.b24 = device->d_id.b24;
++ fcinitiator->loop_id = device->loop_id;
++ list_add_tail(&fcinitiator->list, &ha->fcinitiators);
++ ret = 0;
++ } else {
++ printk(KERN_WARNING
++ "%s(): Memory Allocation failed - FCINITIATOR\n",
++ __func__);
++ }
++
++ return (ret);
++}
++
++/*
++ * qla2x00_restart_queues
++ * Restart device queues.
++ *
++ * Input:
++ * ha = adapter block pointer.
++ *
++ * Context:
++ * Kernel/Interrupt context.
++ */
++void
++qla2x00_restart_queues(scsi_qla_host_t *ha, uint8_t flush)
++{
++ srb_t *sp;
++ int retry_q_cnt = 0;
++ int pending_q_cnt = 0;
++ struct list_head *list, *temp;
++ unsigned long flags = 0;
++ struct list_head *hal;
++ scsi_qla_host_t *vis_ha;
++
++
++ ENTER(__func__);
++
++ clear_bit(RESTART_QUEUES_NEEDED, &ha->dpc_flags);
++
++ /*
++ * start pending queue
++ */
++ pending_q_cnt = ha->qthreads;
++ if (flush) {
++ spin_lock_irqsave(&ha->list_lock,flags);
++ list_for_each_safe(list, temp, &ha->pending_queue) {
++ sp = list_entry(list, srb_t, list);
++ /*
++ * When time expire return request back to OS as BUSY
++ */
++ __del_from_pending_queue(ha, sp);
++ CMD_RESULT(sp->cmd) = DID_BUS_BUSY << 16;
++ CMD_HANDLE(sp->cmd) = (unsigned char *)NULL;
++ __add_to_done_queue(ha, sp);
++ }
++ spin_unlock_irqrestore(&ha->list_lock, flags);
++ } else {
++ if (!list_empty(&ha->pending_queue))
++ qla2x00_next(ha);
++ }
++
++ /*
++ * Clear out our retry queue
++ */
++ if (flush) {
++ spin_lock_irqsave(&ha->list_lock, flags);
++ retry_q_cnt = ha->retry_q_cnt;
++ list_for_each_safe(list, temp, &ha->retry_queue) {
++ sp = list_entry(list, srb_t, list);
++ /* when time expire return request back to OS as BUSY */
++ __del_from_retry_queue(ha, sp);
++ CMD_RESULT(sp->cmd) = DID_BUS_BUSY << 16;
++ CMD_HANDLE(sp->cmd) = (unsigned char *) NULL;
++ __add_to_done_queue(ha, sp);
++ }
++ spin_unlock_irqrestore(&ha->list_lock, flags);
++
++ DEBUG2(printk("%s(%ld): callback %d commands.\n",
++ __func__,
++ ha->host_no,
++ retry_q_cnt);)
++ }
++
++ DEBUG2(printk("%s(%ld): active=%ld, retry=%d, pending=%d, "
++ "done=%ld, failover=%d, scsi retry=%d commands.\n",
++ __func__,
++ ha->host_no,
++ ha->actthreads,
++ ha->retry_q_cnt,
++ pending_q_cnt,
++ ha->done_q_cnt,
++ ha->failover_cnt,
++ ha->scsi_retry_q_cnt);)
++
++ if (ha->flags.failover_enabled) {
++ /* Try and start all visible adapters */
++ read_lock(&qla_hostlist_lock);
++ list_for_each(hal, &qla_hostlist) {
++ vis_ha = list_entry(hal, scsi_qla_host_t, list);
++
++ if (!list_empty(&vis_ha->pending_queue))
++ qla2x00_next(vis_ha);
++
++ DEBUG2(printk("host(%ld):Commands busy=%d "
++ "failed=%d\nin_recovery=%d "
++ "eh_active=%d\n ",
++ vis_ha->host_no,
++ vis_ha->host->host_busy,
++ vis_ha->host->host_failed,
++ vis_ha->host->in_recovery,
++ vis_ha->host->eh_active);)
++ }
++ read_unlock(&qla_hostlist_lock);
++ }
++
++ if (!list_empty(&ha->done_queue))
++ schedule_work(&ha->run_qla_task);
++
++ LEAVE(__func__);
++}
++
++/*
++ * qla2x00_update_fc_database
++ * This routine updates the device data in the database.
++ *
++ * Input:
++ * ha = adapter block pointer.
++ * device = device data pointer.
++ *
++ * Returns:
++ * 0 = success, if device found or added to database.
++ * BIT_0 = error
++ * BIT_1 = database was full and device was not configured.
++ */
++static uint8_t
++qla2x00_update_fc_database(scsi_qla_host_t *ha,
++ fcdev_t *device, uint8_t enable_slot_reuse)
++{
++ int rval;
++ uint16_t cnt, i;
++
++ DEBUG(printk("scsi(%ld): Found device - "
++ "nodename=%02x%02x%02x%02x%02x%02x%02x%02x, "
++ "portname=%02x%02x%02x%02x%02x%02x%02x%02x, "
++ "port Id=%02x%02x%02x, loop id=%04x\n",
++ ha->host_no,
++ device->name[0], device->name[1],
++ device->name[2], device->name[3],
++ device->name[4], device->name[5],
++ device->name[6], device->name[7],
++ device->wwn[0], device->wwn[1],
++ device->wwn[2], device->wwn[3],
++ device->wwn[4], device->wwn[5],
++ device->wwn[6], device->wwn[7],
++ device->d_id.b.domain, device->d_id.b.area, device->d_id.b.al_pa,
++ device->loop_id));
++
++ /* Look for device in database. */
++ for (cnt = 0; cnt < MAX_FIBRE_DEVICES; cnt++) {
++ if (ha->fc_db[cnt].loop_id == PORT_UNUSED)
++ continue;
++
++ rval = 1;
++ switch (ha->binding_type) {
++ case BIND_BY_PORT_NAME:
++ rval = memcmp(device->wwn,
++ ha->fc_db[cnt].wwn, WWN_SIZE);
++ break;
++
++ case BIND_BY_PORT_ID:
++ rval = (device->d_id.b24 != ha->fc_db[cnt].d_id.b24);
++ break;
++
++ case BIND_BY_NODE_NAME:
++ rval = memcmp(device->name,
++ ha->fc_db[cnt].name, WWN_SIZE);
++ break;
++ }
++ if (rval)
++ continue;
++
++ DEBUG(printk("scsi(%ld): Reusing slot %d for device "
++ "%02x%02x%02x%02x%02x%02x%02x%02x\n",
++ ha->host_no, cnt,
++ device->wwn[0],
++ device->wwn[1],
++ device->wwn[2],
++ device->wwn[3],
++ device->wwn[4],
++ device->wwn[5],
++ device->wwn[6],
++ device->wwn[7]));
++
++ if (device->flag & DEV_PUBLIC) {
++ ha->fc_db[cnt].flag |= DEV_PUBLIC;
++ } else {
++ if (ha->fc_db[cnt].flag & DEV_PUBLIC) {
++ ha->fc_db[cnt].flag &= ~DEV_PUBLIC;
++ ha->fabricid[ha->fc_db[cnt].loop_id].in_use
++ = FALSE;
++ }
++ }
++
++ ha->fc_db[cnt].loop_id = device->loop_id;
++ ha->fc_db[cnt].d_id.b24 = device->d_id.b24;
++
++ /* Update volatile unbound fields for PortID binding only */
++ if (ha->binding_type == BIND_BY_PORT_ID) {
++ memcpy(ha->fc_db[cnt].name, device->name, WWN_SIZE);
++ memcpy(ha->fc_db[cnt].wwn, device->wwn, WWN_SIZE);
++ }
++
++ return (0);
++ }
++
++ /* Find a empty slot and add device into database. */
++ for (i = 0; i < MAX_FIBRE_DEVICES; i++) {
++
++/* FlexServ Patch */
++#if QLA2XXX_HOTSWAP_ENUMERATION
++ /*
++ * Enumerate upon the actual ID so add-single-device works
++ */
++ if (i != device->loop_id) {
++ continue;
++ }
++#endif
++
++ if ((ha->fc_db[i].loop_id == PORT_UNUSED) ||
++ (ha->fc_db[i].loop_id == PORT_NEED_MAP)) {
++
++ DEBUG(printk("scsi(%ld): New slot %d for device "
++ "%02x%02x%02x%02x%02x%02x%02x%02x\n",
++ ha->host_no, i,
++ device->wwn[0],
++ device->wwn[1],
++ device->wwn[2],
++ device->wwn[3],
++ device->wwn[4],
++ device->wwn[5],
++ device->wwn[6],
++ device->wwn[7]));
++
++ memcpy(ha->fc_db[i].name, device->name, WWN_SIZE);
++ memcpy(ha->fc_db[i].wwn, device->wwn, WWN_SIZE);
++ ha->fc_db[i].loop_id = device->loop_id;
++ ha->fc_db[i].d_id.b24 = device->d_id.b24;
++
++ if (device->flag & DEV_PUBLIC)
++ ha->fc_db[i].flag |= DEV_PUBLIC;
++
++ ha->flags.updated_fc_db = TRUE;
++
++ return (0);
++ }
++ }
++
++ if (enable_slot_reuse) {
++ for (i = 0; i < MAX_FIBRE_DEVICES; i++) {
++ if (ha->fc_db[i].loop_id == PORT_AVAILABLE) {
++ DEBUG(printk("scsi(%ld): Assigned slot %d "
++ "reuse for device "
++ "%02x%02x%02x%02x%02x%02x%02x%02x\n",
++ ha->host_no, i,
++ device->wwn[0],
++ device->wwn[1],
++ device->wwn[2],
++ device->wwn[3],
++ device->wwn[4],
++ device->wwn[5],
++ device->wwn[6],
++ device->wwn[7]));
++
++ memcpy(ha->fc_db[i].name,
++ device->name, WWN_SIZE);
++ memcpy(ha->fc_db[i].wwn,
++ device->wwn, WWN_SIZE);
++ ha->fc_db[i].loop_id = device->loop_id;
++ ha->fc_db[i].d_id.b24 = device->d_id.b24;
++
++ if (device->flag & DEV_PUBLIC)
++ ha->fc_db[i].flag |= DEV_PUBLIC;
++
++ ha->flags.updated_fc_db = TRUE;
++
++ return (0);
++ }
++ }
++ }
++
++ return(BIT_1);
++}
++
++/*
++ * qla2x00_build_fcport_list
++ * Updates device on list.
++ *
++ * Input:
++ * ha = adapter block pointer.
++ * fcport = port structure pointer.
++ *
++ * Return:
++ * 0 - Success
++ * BIT_0 - error
++ *
++ * Context:
++ * Kernel context.
++ */
++static int
++qla2x00_build_fcport_list(scsi_qla_host_t *ha)
++{
++// FIXME: FIX THIS C*!P!!!
++ int rval;
++ fcdev_t *dev;
++ int found = 0;
++ int cnt, i;
++ struct list_head *fcpl;
++ fc_port_t *fcport;
++
++ ENTER(__func__);
++
++ for (cnt = 0; cnt < MAX_FIBRE_DEVICES; cnt++) {
++ dev = &ha->fc_db[cnt];
++
++ /* Skip if zero port name */
++ if (qla2x00_is_wwn_zero(dev->wwn)) {
++ continue;
++ }
++
++ DEBUG3(printk("scsi(%ld): found tgt %d in fc_db.\n",
++ ha->host_no, cnt));
++
++ /* Check for matching device in port list. */
++ i = 0;
++ found = 0;
++ fcport = NULL;
++ list_for_each(fcpl, &ha->fcports) {
++ fcport = list_entry(fcpl, fc_port_t, list);
++
++ rval = 1;
++ switch (ha->binding_type) {
++ case BIND_BY_PORT_NAME:
++ rval = memcmp(dev->wwn,
++ fcport->port_name,
++ WWN_SIZE);
++ break;
++
++ case BIND_BY_PORT_ID:
++ rval = (dev->d_id.b24 !=
++ fcport->d_id.b24);
++ break;
++
++ case BIND_BY_NODE_NAME:
++ rval = memcmp(dev->name,
++ fcport->node_name,
++ WWN_SIZE);
++ break;
++ }
++ if (rval) {
++ i++;
++ continue;
++ }
++
++ /*
++ * Update volatile unbound fields for PortID binding
++ * only
++ */
++ if (ha->binding_type == BIND_BY_PORT_ID) {
++ memcpy(fcport->node_name, dev->name, WWN_SIZE);
++ memcpy(fcport->port_name, dev->wwn, WWN_SIZE);
++ }
++
++ DEBUG(printk("%s(): Found matching port %02x%02x%02x, "
++ "device flags= 0x%x\n",
++ __func__,
++ dev->d_id.b.domain,
++ dev->d_id.b.area,
++ dev->d_id.b.al_pa,
++ dev->flag);)
++
++ /* if device found is missing then mark it */
++ if (dev->flag & DEV_ABSENCE) {
++ DEBUG(printk("%s(): Port missing --- "
++ "(port_name) -> "
++ "%02x%02x%02x%02x%02x"
++ "%02x%02x%02x, "
++ "loop id = 0x%04x\n",
++ __func__,
++ fcport->port_name[0],
++ fcport->port_name[1],
++ fcport->port_name[2],
++ fcport->port_name[3],
++ fcport->port_name[4],
++ fcport->port_name[5],
++ fcport->port_name[6],
++ fcport->port_name[7],
++ fcport->loop_id);)
++
++ fcport->loop_id = FC_NO_LOOP_ID;
++
++ qla2x00_mark_device_lost(ha, fcport);
++
++ found++;
++ break;
++ }
++
++ /* if device was missing but returned */
++ if (fcport->loop_id == FC_NO_LOOP_ID ||
++ !(dev->flag & DEV_PUBLIC) ||
++ atomic_read(&fcport->state) != FC_ONLINE) {
++
++ DEBUG(printk("%s(): Port returned +++ "
++ "(port_name) -> "
++ "%02x%02x%02x%02x%02x"
++ "%02x%02x%02x, "
++ "loop id = 0x%04x\n",
++ __func__,
++ fcport->port_name[0],
++ fcport->port_name[1],
++ fcport->port_name[2],
++ fcport->port_name[3],
++ fcport->port_name[4],
++ fcport->port_name[5],
++ fcport->port_name[6],
++ fcport->port_name[7],
++ fcport->loop_id);)
++
++ fcport->loop_id = dev->loop_id;
++ fcport->old_loop_id = dev->loop_id;
++ fcport->d_id.b24 = dev->d_id.b24;
++
++ if (qla2x00_update_fcport(ha, fcport, cnt)) {
++ DEBUG2(printk("%s(%ld): update_fcport "
++ "failed.\n",
++ __func__,
++ ha->host_no);)
++
++ return BIT_0;
++ }
++
++ found++;
++ break;
++ }
++
++ DEBUG(printk("%s(): Match - fcport[%d] = fc_db[%d] "
++ "(ignored) -> "
++ "%02x%02x%02x%02x%02x%02x%02x%02x, "
++ "loop id = 0x%04x\n",
++ __func__,
++ i,
++ cnt,
++ fcport->port_name[0],
++ fcport->port_name[1],
++ fcport->port_name[2],
++ fcport->port_name[3],
++ fcport->port_name[4],
++ fcport->port_name[5],
++ fcport->port_name[6],
++ fcport->port_name[7],
++ fcport->loop_id);)
++
++ fcport->loop_id = dev->loop_id;
++ fcport->old_loop_id = dev->loop_id;
++
++ found++;
++ break;
++ }
++ if (found)
++ continue;
++
++ /* Add device to port list. */
++ DEBUG3(printk("%s(%ld): adding new device to list.\n",
++ __func__,
++ ha->host_no);)
++
++ fcport = kmalloc(sizeof(fc_port_t), GFP_ATOMIC);
++ if (fcport == NULL)
++ break;
++
++ memset(fcport, 0, sizeof(fc_port_t));
++
++ INIT_LIST_HEAD(&fcport->fcluns);
++
++ /* copy fields into fcport */
++ memcpy(fcport->port_name, dev->wwn, WWN_SIZE);
++ memcpy(fcport->node_name, dev->name, WWN_SIZE);
++
++ fcport->dev_id = cnt;
++
++ if (dev->flag & DEV_ABSENCE) {
++ DEBUG(printk("%s(): Port missing --- "
++ "(port_name) -> "
++ "%02x%02x%02x%02x"
++ "%02x%02x%02x%02x, "
++ "loop id = 0x%04x\n",
++ __func__,
++ fcport->port_name[0],
++ fcport->port_name[1],
++ fcport->port_name[2],
++ fcport->port_name[3],
++ fcport->port_name[4],
++ fcport->port_name[5],
++ fcport->port_name[6],
++ fcport->port_name[7],
++ fcport->loop_id);)
++
++ fcport->loop_id = FC_NO_LOOP_ID;
++
++ qla2x00_mark_device_lost(ha, fcport);
++ } else {
++ fcport->loop_id = dev->loop_id;
++ fcport->old_loop_id = dev->loop_id;
++ }
++
++ fcport->d_id.b24 = dev->d_id.b24;
++
++ DEBUG(printk("%s(): New Device +++ (port_name) -> "
++ "%02x%02x%02x%02x%02x%02x%02x%02x, "
++ "loop id = 0x%04x\n",
++ __func__,
++ fcport->port_name[0],
++ fcport->port_name[1],
++ fcport->port_name[2],
++ fcport->port_name[3],
++ fcport->port_name[4],
++ fcport->port_name[5],
++ fcport->port_name[6],
++ fcport->port_name[7],
++ fcport->loop_id);)
++
++ /* flags */
++ if (dev->flag & DEV_PUBLIC)
++ fcport->flags |= FC_FABRIC_DEVICE;
++
++ if (dev->flag & DEV_INITIATOR)
++ fcport->flags |= FC_INITIATOR_DEVICE;
++
++ /* Assume the device supports RLC */
++ fcport->flags |= FC_SUPPORT_RPT_LUNS;
++
++ if (!ha->flags.failover_enabled)
++ qla2x00_get_lun_mask_from_config(ha, fcport, cnt, 0);
++
++ /* Add to our list */
++ list_add_tail(&fcport->list, &ha->fcports);
++
++ if (qla2x00_update_fcport(ha, fcport, cnt)) {
++ DEBUG2(printk("%s(%ld): update_fcport failed.\n",
++ __func__,
++ ha->host_no);)
++
++ return BIT_0;
++ }
++ }
++
++ LEAVE(__func__);
++
++ return (0);
++}
++
++/*
++ * qla2x00_config_os
++ * Setup OS target and LUN structures.
++ *
++ * Input:
++ * ha = adapter state pointer.
++ *
++ * Context:
++ * Kernel context.
++ */
++static void
++qla2x00_config_os(scsi_qla_host_t *ha)
++{
++ struct list_head *fcpl;
++ fc_port_t *fcport;
++ struct list_head *fcll;
++ fc_lun_t *fclun;
++ os_lun_t *lq;
++ uint16_t t, l;
++
++
++ DEBUG3(printk("%s(%ld): entered.\n", __func__, ha->host_no);)
++
++ list_for_each(fcpl, &ha->fcports) {
++ fcport = list_entry(fcpl, fc_port_t, list);
++
++ /* Allocate target */
++#if 0
++ if (fcport->loop_id == FC_NO_LOOP_ID)
++ continue;
++#endif
++
++ /* Bind fcport to target number. */
++ DEBUG5(printk("%s(%ld): fcport bind= %p\n",
++ __func__,
++ ha->host_no, fcport);)
++
++ if ((t = qla2x00_fcport_bind(ha, fcport)) == MAX_TARGETS)
++ continue;
++
++#if VSA
++ if ((ha->fc_db[t].flag & DEV_FLAG_VSA))
++ fcport->flags |= FC_VSA;
++#endif
++ DEBUG5(printk("%s(%ld): going to alloc lun for tgt %d. mask="
++ "%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x"
++ "%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x"
++ "%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x"
++ ".\n",
++ __func__,
++ ha->host_no,
++ t,
++ fcport->lun_mask.mask[0],
++ fcport->lun_mask.mask[1],
++ fcport->lun_mask.mask[2],
++ fcport->lun_mask.mask[3],
++ fcport->lun_mask.mask[4],
++ fcport->lun_mask.mask[5],
++ fcport->lun_mask.mask[6],
++ fcport->lun_mask.mask[7],
++ fcport->lun_mask.mask[8],
++ fcport->lun_mask.mask[9],
++ fcport->lun_mask.mask[10],
++ fcport->lun_mask.mask[11],
++ fcport->lun_mask.mask[12],
++ fcport->lun_mask.mask[13],
++ fcport->lun_mask.mask[14],
++ fcport->lun_mask.mask[15],
++ fcport->lun_mask.mask[16],
++ fcport->lun_mask.mask[17],
++ fcport->lun_mask.mask[18],
++ fcport->lun_mask.mask[19],
++ fcport->lun_mask.mask[20],
++ fcport->lun_mask.mask[21],
++ fcport->lun_mask.mask[22],
++ fcport->lun_mask.mask[23],
++ fcport->lun_mask.mask[24],
++ fcport->lun_mask.mask[25],
++ fcport->lun_mask.mask[26],
++ fcport->lun_mask.mask[27],
++ fcport->lun_mask.mask[28],
++ fcport->lun_mask.mask[29],
++ fcport->lun_mask.mask[30],
++ fcport->lun_mask.mask[31]);)
++
++ /* Allocate LUNs */
++ list_for_each(fcll, &fcport->fcluns) {
++ fclun = list_entry(fcll, fc_lun_t, list);
++
++ l = fclun->lun; /* Must not exceed MAX_LUN */
++
++ /*
++ * Always alloc LUN 0 so kernel will scan past LUN 0.
++ */
++ if (l != 0 &&
++ (EXT_IS_LUN_BIT_SET(&(fcport->lun_mask), l))) {
++
++ /* mask this LUN */
++ continue;
++ }
++
++ if ((lq = qla2x00_lun_alloc(ha, t, l)) == NULL)
++ continue;
++
++ lq->fclun = fclun;
++ }
++ }
++
++ DEBUG3(printk("%s(%ld): exiting normally.\n", __func__, ha->host_no);)
++}
++
++/*
++ * qla2x00_fcport_bind
++ * Locates a target number for FC port.
++ *
++ * Input:
++ * ha = adapter state pointer.
++ * fcport = FC port structure pointer.
++ *
++ * Returns:
++ * target number
++ *
++ * Context:
++ * Kernel context.
++ */
++static uint16_t
++qla2x00_fcport_bind(scsi_qla_host_t *ha, fc_port_t *fcport)
++{
++ int rval;
++ uint16_t t;
++ os_tgt_t *tq;
++
++ ENTER(__func__);
++
++ /* Check for tgt already allocated for persistent binding. */
++ for (t = 0; t < MAX_TARGETS; t++) {
++ if ((tq = TGT_Q(ha, t)) == NULL)
++ continue;
++
++ rval = 0;
++ switch (ha->binding_type) {
++ case BIND_BY_PORT_NAME:
++ rval = memcmp(fcport->port_name,
++ tq->port_name, WWN_SIZE);
++ break;
++
++ case BIND_BY_PORT_ID:
++ rval = (fcport->d_id.b24 != tq->d_id.b24);
++ break;
++
++ case BIND_BY_NODE_NAME:
++ rval = memcmp(fcport->node_name,
++ tq->node_name, WWN_SIZE);
++ break;
++ }
++ /* Found a persistently bound match */
++ if (rval == 0)
++ break;
++ }
++
++ if (fcport->loop_id == FC_NO_LOOP_ID) {
++ DEBUG(tq = TGT_Q(ha, t);)
++ DEBUG(printk("scsi%ld: Missing target ID %02x @ %p to "
++ "loop id: %04x, port state=0x%x, "
++ "port down retry=%d\n",
++ ha->host_no,
++ t,
++ tq,
++ fcport->loop_id,
++ atomic_read(&fcport->state),
++ atomic_read(&fcport->port_down_timer));)
++ return (MAX_TARGETS);
++ }
++
++ if (t != MAX_TARGETS) {
++ tq = TGT_Q(ha, t);
++ tq->vis_port = fcport;
++
++ DEBUG(printk("scsi%ld: Assigning target ID %02x @ %p to "
++ "loop id: %04x, port state=0x%x, "
++ "port down retry=%d\n",
++ ha->host_no,
++ t,
++ tq,
++ fcport->loop_id,
++ atomic_read(&fcport->state),
++ atomic_read(&fcport->port_down_timer));)
++ return (t);
++ }
++
++ /* Check for persistent binding not yet configured. */
++ for (t = 0; t < MAX_TARGETS; t++) {
++ rval = 0;
++ switch (ha->binding_type) {
++ case BIND_BY_PORT_NAME:
++ rval = memcmp(fcport->port_name,
++ ha->fc_db[t].wwn, WWN_SIZE);
++ break;
++
++ case BIND_BY_PORT_ID:
++ rval = (fcport->d_id.b24 !=
++ ha->fc_db[t].d_id.b24);
++ break;
++
++ case BIND_BY_NODE_NAME:
++ rval = memcmp(fcport->node_name,
++ ha->fc_db[t].name, WWN_SIZE);
++ break;
++ }
++ /* Found not-yet-allocated target at t */
++ if (rval == 0)
++ break;
++ }
++
++ if (t == MAX_TARGETS) {
++ /* Check if slot at loop ID is available. */
++ t = fcport->loop_id;
++ if (TGT_Q(ha, t) != NULL) {
++ /* Locate first free target id in db for device. */
++ for (t = 0; t < MAX_TARGETS; t++) {
++ if (TGT_Q(ha, t) == NULL)
++ break;
++ }
++ }
++ }
++
++ if (t != MAX_TARGETS) {
++ tq = qla2x00_tgt_alloc(ha, t);
++ if (tq != NULL) {
++ memcpy(tq->port_name, fcport->port_name, WWN_SIZE);
++ tq->d_id.b24 = fcport->d_id.b24;
++ memcpy(tq->node_name, fcport->node_name, WWN_SIZE);
++ }
++ else
++ t = MAX_TARGETS;
++ }
++
++ if (t == MAX_TARGETS) {
++ DEBUG2(printk("%s(): **** FAILED ****", __func__);)
++ printk(KERN_WARNING
++ "%s(): **** FAILED ****", __func__);
++ } else {
++ if (!ha->flags.failover_enabled) {
++ /* fcport IS the visible port in non-failover mode */
++ tq = TGT_Q(ha, t);
++ tq->vis_port = fcport;
++ }
++
++ DEBUG(tq = TGT_Q(ha, t);)
++ DEBUG(printk("scsi%ld: Assigning target ID %02x @ %p to "
++ "loop id: %04x, port state=0x%x, "
++ "port down retry=%d\n",
++ ha->host_no,
++ t,
++ tq,
++ fcport->loop_id,
++ atomic_read(&fcport->state),
++ atomic_read(&fcport->port_down_timer));)
++ }
++
++ LEAVE(__func__);
++
++ return (t);
++}
++
++/*
++ * qla2x00_update_fcport
++ * Updates device on list.
++ *
++ * Input:
++ * ha = adapter block pointer.
++ * fcport = port structure pointer.
++ *
++ * Return:
++ * 0 - Success
++ * BIT_0 - error
++ *
++ * Context:
++ * Kernel context.
++ */
++static int
++qla2x00_update_fcport(scsi_qla_host_t *ha, fc_port_t *fcport, int index)
++{
++ DEBUG4(printk("%s(): entered, loop_id = %d\n",
++ __func__,
++ fcport->loop_id);)
++
++ fcport->port_login_retry_count =
++ ha->port_down_retry_count * PORT_RETRY_TIME;
++ atomic_set(&fcport->state, FC_ONLINE);
++ fcport->login_retry = 0;
++ fcport->ha = ha;
++ atomic_set(&fcport->port_down_timer,
++ ha->port_down_retry_count * PORT_RETRY_TIME);
++
++ /* Do LUN discovery. */
++ return (qla2x00_lun_discovery(ha, fcport, index));
++}
++
++/*
++ * qla2x00_lun_discovery
++ * Issue SCSI inquiry command for LUN discovery.
++ *
++ * Input:
++ * ha = adapter block pointer.
++ * fcport = FC port structure pointer.
++ *
++ * Return:
++ * 0 - Success
++ * BIT_0 - error
++ *
++ * Context:
++ * Kernel context.
++ */
++static int
++qla2x00_lun_discovery(scsi_qla_host_t *ha, fc_port_t *fcport, int index)
++{
++ inq_cmd_rsp_t *pkt;
++ int rval;
++ uint16_t lun;
++ struct list_head *fcll;
++ fc_lun_t *fclun;
++ int found;
++ dma_addr_t phys_address = 0;
++ int disconnected;
++ int retry;
++ fcdev_t dev;
++ int rlc_succeeded;
++ uint16_t comp_status;
++ uint16_t scsi_status;
++
++ ENTER(__func__);
++
++ /*
++ * Immediately issue a RLC to the fcport
++ */
++ rlc_succeeded = 0;
++ if (qla2x00_rpt_lun_discovery(ha, fcport) == QLA2X00_SUCCESS) {
++ /*
++ * We always need at least LUN 0 to be present in our fclun
++ * list if RLC succeeds.
++ */
++ qla2x00_cfg_lun(fcport, 0);
++ /*
++ * At least do an inquiry on LUN 0 to determine peripheral
++ * qualifier type.
++ */
++ rlc_succeeded = 1;
++ }
++
++ /*
++ * RLC failed for some reason, try basic inquiries
++ */
++ pkt = pci_alloc_consistent(ha->pdev,
++ sizeof(inq_cmd_rsp_t), &phys_address);
++ if (pkt == NULL) {
++ printk(KERN_WARNING
++ "scsi(%ld): Memory Allocation failed - INQ\n",
++ ha->host_no);
++
++ ha->mem_err++;
++ return BIT_0;
++ }
++
++ for (lun = 0; lun < ha->max_probe_luns; lun++) {
++ retry = 2;
++ do {
++ memset(pkt, 0, sizeof(inq_cmd_rsp_t));
++ pkt->p.cmd.entry_type = COMMAND_A64_TYPE;
++ pkt->p.cmd.entry_count = 1;
++ pkt->p.cmd.lun = cpu_to_le16(lun);
++#if defined(EXTENDED_IDS)
++ pkt->p.cmd.target = cpu_to_le16(fcport->loop_id & 0xFF);
++#else
++ pkt->p.cmd.target = (uint8_t)fcport->loop_id;
++#endif
++ pkt->p.cmd.control_flags =
++ __constant_cpu_to_le16(CF_READ | CF_SIMPLE_TAG);
++ pkt->p.cmd.scsi_cdb[0] = INQ_SCSI_OPCODE;
++ pkt->p.cmd.scsi_cdb[4] = INQ_DATA_SIZE;
++ pkt->p.cmd.dseg_count = __constant_cpu_to_le16(1);
++ pkt->p.cmd.timeout = __constant_cpu_to_le16(10);
++ pkt->p.cmd.byte_count =
++ __constant_cpu_to_le32(INQ_DATA_SIZE);
++ pkt->p.cmd.dseg_0_address[0] = cpu_to_le32(
++ LSD(phys_address + sizeof(sts_entry_t)));
++ pkt->p.cmd.dseg_0_address[1] = cpu_to_le32(
++ MSD(phys_address + sizeof(sts_entry_t)));
++ pkt->p.cmd.dseg_0_length =
++ __constant_cpu_to_le32(INQ_DATA_SIZE);
++
++ DEBUG5(printk("scsi(%ld): Lun Inquiry - fcport=%p,"
++ " lun (%d)\n",
++ ha->host_no, fcport, lun));
++
++ rval = qla2x00_issue_iocb(ha,
++ pkt, phys_address, sizeof(inq_cmd_rsp_t));
++
++ comp_status = le16_to_cpu(pkt->p.rsp.comp_status);
++ scsi_status = le16_to_cpu(pkt->p.rsp.scsi_status);
++
++ DEBUG5(printk("scsi(%ld): lun (%d) inquiry - "
++ "inq[0]= 0x%x, comp status 0x%x, scsi status 0x%x, "
++ "rval=%d\n",
++ ha->host_no,
++ lun, pkt->inq[0],
++ comp_status, scsi_status, rval));
++
++ /* if port not logged in then try and login */
++ if (lun == 0 && comp_status == CS_PORT_LOGGED_OUT) {
++ memset(&dev, 0, sizeof (dev));
++ dev.d_id.b24 = ha->fc_db[index].d_id.b24;
++
++ /* login and update database */
++ if (qla2x00_fabric_login(ha, &dev) == 0)
++ ha->fc_db[index].loop_id = dev.loop_id;
++ }
++ } while ((rval != QLA2X00_SUCCESS ||
++ comp_status != CS_COMPLETE) && retry--);
++
++ if (rval != QLA2X00_SUCCESS ||
++ comp_status != CS_COMPLETE ||
++ (scsi_status & SS_CHECK_CONDITION)) {
++
++ DEBUG(printk("scsi(%ld): Failed lun inquiry - "
++ "inq[0]= 0x%x, comp status 0x%x, scsi status 0x%x. "
++ "loop_id=%d\n",
++ ha->host_no,
++ pkt->inq[0],
++ comp_status, scsi_status,
++ fcport->loop_id));
++
++ break;
++ }
++
++ disconnected = 0;
++
++ /*
++ * We only need to issue an inquiry on LUN 0 to determine the
++ * port's peripheral qualifier type
++ */
++ if (rlc_succeeded == 1) {
++ if (pkt->inq[0] == 0 || pkt->inq[0] == 0xc) {
++ fcport->flags &= ~(FC_TAPE_DEVICE);
++ ha->fc_db[index].flag &= ~DEV_TAPE_DEVICE;
++ } else if (pkt->inq[0] == 1 || pkt->inq[0] == 8) {
++ fcport->flags |= FC_TAPE_DEVICE;
++ ha->fc_db[index].flag |= DEV_TAPE_DEVICE;
++ }
++
++ /* Stop the scan */
++ break;
++ }
++
++ /* inq[0] ==:
++ * 0x0- Hard Disk.
++ * 0xc- is a processor device.
++ * 0x1- is a Tape Device.
++ * 0x8- is a medium changer device
++ * which is basically a Tape device.
++ */
++ if (pkt->inq[0] == 0 || pkt->inq[0] == 0xc) {
++ fcport->flags &= ~(FC_TAPE_DEVICE);
++ ha->fc_db[index].flag &= ~DEV_TAPE_DEVICE;
++ } else if (pkt->inq[0] == 1 || pkt->inq[0] == 8) {
++ fcport->flags |= FC_TAPE_DEVICE;
++ ha->fc_db[index].flag |= DEV_TAPE_DEVICE;
++ } else if (pkt->inq[0] == 0x20 || pkt->inq[0] == 0x7f) {
++ disconnected++;
++ } else {
++ continue;
++ }
++
++ /* Allocate LUN if not already allocated. */
++ found = 0;
++ list_for_each(fcll, &fcport->fcluns) {
++ fclun = list_entry(fcll, fc_lun_t, list);
++
++ if (fclun->lun == lun) {
++ found++;
++ break;
++ }
++ }
++ if (found)
++ continue;
++
++ /* Add this lun to our list */
++ fclun = kmalloc(sizeof(fc_lun_t), GFP_ATOMIC);
++ if (fclun != NULL) {
++ fcport->lun_cnt++;
++ /* Setup LUN structure. */
++ memset(fclun, 0, sizeof(fc_lun_t));
++
++ fclun->fcport = fcport;
++ fclun->lun = lun;
++
++ if (disconnected)
++ fclun->flags |= FC_DISCON_LUN;
++
++ list_add_tail(&fclun->list, &fcport->fcluns);
++
++ DEBUG5(printk("scsi(%ld): Allocated fclun %p, lun=%d"
++ "disconnected=%d\n",
++ ha->host_no,
++ fclun,
++ fclun->lun,
++ disconnected));
++ } else {
++ printk(KERN_WARNING
++ "scsi(%ld): Memory Allocation failed - fclun\n",
++ ha->host_no);
++
++ ha->mem_err++;
++ pci_free_consistent(ha->pdev,
++ sizeof(inq_cmd_rsp_t), pkt, phys_address);
++
++ return BIT_0;
++ }
++
++ }
++
++ DEBUG(printk("scsi(%ld): fcport lun count=%d, fcport= %p\n",
++ ha->host_no, fcport->lun_cnt, fcport));
++
++ pci_free_consistent(ha->pdev, sizeof(inq_cmd_rsp_t), pkt, phys_address);
++
++ LEAVE(__func__);
++
++ return 0;
++}
++
++/*
++ * qla2x00_rpt_lun_discovery
++ * Issue SCSI report LUN command for LUN discovery.
++ *
++ * Input:
++ * ha: adapter state pointer.
++ * fcport: FC port structure pointer.
++ *
++ * Returns:
++ * qla2x00 local function return status code.
++ *
++ * Context:
++ * Kernel context.
++ */
++static int
++qla2x00_rpt_lun_discovery(scsi_qla_host_t *ha, fc_port_t *fcport)
++{
++ rpt_lun_cmd_rsp_t *pkt;
++ dma_addr_t phys_address = 0;
++ int rval;
++ uint32_t len, cnt;
++ uint8_t retries;
++ uint16_t lun;
++ uint16_t comp_status;
++ uint16_t scsi_status;
++
++ ENTER(__func__);
++
++ /* Assume a failed status */
++ rval = QLA2X00_FAILED;
++
++ /* No point in continuing if the device doesn't support RLC */
++ if (!(fcport->flags & FC_SUPPORT_RPT_LUNS))
++ return (rval);
++
++ pkt = pci_alloc_consistent(ha->pdev,
++ sizeof(rpt_lun_cmd_rsp_t), &phys_address);
++ if (pkt == NULL) {
++ printk(KERN_WARNING
++ "scsi(%ld): Memory Allocation failed - RLC",
++ ha->host_no);
++
++ ha->mem_err++;
++ return BIT_0;
++ }
++
++ for (retries = 4; retries; retries--) {
++ memset(pkt, 0, sizeof(rpt_lun_cmd_rsp_t));
++ pkt->p.cmd.entry_type = COMMAND_A64_TYPE;
++ pkt->p.cmd.entry_count = 1;
++#if defined(EXTENDED_IDS)
++ pkt->p.cmd.target = cpu_to_le16(fcport->loop_id & 0xFF);
++#else
++ pkt->p.cmd.target = (uint8_t)fcport->loop_id;
++#endif
++ pkt->p.cmd.control_flags =
++ __constant_cpu_to_le16(CF_READ | CF_SIMPLE_TAG);
++ pkt->p.cmd.scsi_cdb[0] = RPT_LUN_SCSI_OPCODE;
++ pkt->p.cmd.scsi_cdb[8] = MSB(sizeof(rpt_lun_lst_t));
++ pkt->p.cmd.scsi_cdb[9] = LSB(sizeof(rpt_lun_lst_t));
++ pkt->p.cmd.dseg_count = __constant_cpu_to_le16(1);
++ pkt->p.cmd.timeout = __constant_cpu_to_le16(10);
++ pkt->p.cmd.byte_count =
++ __constant_cpu_to_le32(sizeof(rpt_lun_lst_t));
++ pkt->p.cmd.dseg_0_address[0] = cpu_to_le32(
++ LSD(phys_address + sizeof(sts_entry_t)));
++ pkt->p.cmd.dseg_0_address[1] = cpu_to_le32(
++ MSD(phys_address + sizeof(sts_entry_t)));
++ pkt->p.cmd.dseg_0_length =
++ __constant_cpu_to_le32(sizeof(rpt_lun_lst_t));
++
++ rval = qla2x00_issue_iocb(ha,
++ pkt, phys_address, sizeof(rpt_lun_cmd_rsp_t));
++
++ comp_status = le16_to_cpu(pkt->p.rsp.comp_status);
++ scsi_status = le16_to_cpu(pkt->p.rsp.scsi_status);
++
++ if (rval != QLA2X00_SUCCESS ||
++ comp_status != CS_COMPLETE ||
++ scsi_status & SS_CHECK_CONDITION) {
++
++ /* Device underrun, treat as OK. */
++ if (comp_status == CS_DATA_UNDERRUN &&
++ scsi_status & SS_RESIDUAL_UNDER) {
++
++ rval = QLA2X00_SUCCESS;
++ break;
++ }
++
++ DEBUG(printk("scsi(%ld): RLC failed to issue iocb! "
++ "fcport = %p rval = %x cs = %x ss = %x\n",
++ ha->host_no,
++ fcport,
++ rval, comp_status, scsi_status));
++
++ rval = QLA2X00_FAILED;
++ if (scsi_status & SS_CHECK_CONDITION) {
++ DEBUG2(printk("scsi(%ld): RLC "
++ "SS_CHECK_CONDITION Sense Data "
++ "%02x %02x %02x %02x %02x %02x %02x %02x\n",
++ ha->host_no,
++ pkt->p.rsp.req_sense_data[0],
++ pkt->p.rsp.req_sense_data[1],
++ pkt->p.rsp.req_sense_data[2],
++ pkt->p.rsp.req_sense_data[3],
++ pkt->p.rsp.req_sense_data[4],
++ pkt->p.rsp.req_sense_data[5],
++ pkt->p.rsp.req_sense_data[6],
++ pkt->p.rsp.req_sense_data[7]));
++ /* No point in retrying if ILLEGAL REQUEST */
++ if (pkt->p.rsp.req_sense_data[2] ==
++ ILLEGAL_REQUEST) {
++ /* Clear RLC support flag */
++ fcport->flags &= ~(FC_SUPPORT_RPT_LUNS);
++ break;
++ }
++ }
++ } else {
++ break;
++ }
++ }
++
++ /* Test for report LUN failure. */
++ if (rval == QLA2X00_SUCCESS) {
++ /* Configure LUN list. */
++ len = be32_to_cpu(pkt->list.hdr.len);
++ len /= 8;
++ if (len == 0) {
++ rval = QLA2X00_FAILED;
++ } else {
++ for (cnt = 0; cnt < len; cnt++) {
++ lun = CHAR_TO_SHORT(pkt->list.lst[cnt].lsb,
++ pkt->list.lst[cnt].msb.b);
++
++ DEBUG3(printk("scsi(%ld): RLC lun = (%d)\n",
++ ha->host_no, lun));
++
++ /* We only support 0 through MAX_LUNS-1 range */
++ if (lun < MAX_LUNS) {
++ qla2x00_cfg_lun(fcport, lun);
++ }
++ }
++ rval = QLA2X00_SUCCESS;
++ }
++ } else {
++ rval = QLA2X00_FAILED;
++ }
++
++ pci_free_consistent(ha->pdev,
++ sizeof(rpt_lun_cmd_rsp_t), pkt, phys_address);
++
++
++ LEAVE(__func__);
++
++ return (rval);
++}
++
++/*
++ * qla2x00_cfg_lun
++ * Configures LUN into fcport LUN list.
++ *
++ * Input:
++ * fcport: FC port structure pointer.
++ * lun: LUN number.
++ *
++ * Context:
++ * Kernel context.
++ */
++static void
++qla2x00_cfg_lun(fc_port_t *fcport, uint16_t lun)
++{
++ int found;
++ struct list_head *fcll;
++ fc_lun_t *fclun;
++
++ /* Allocate LUN if not already allocated. */
++ found = 0;
++ list_for_each(fcll, &fcport->fcluns) {
++ fclun = list_entry(fcll, fc_lun_t, list);
++
++ if (fclun->lun == lun) {
++ found++;
++ break;
++ }
++ }
++ if (!found) {
++ fclun = kmalloc(sizeof(fc_lun_t), GFP_ATOMIC);
++ if (fclun != NULL) {
++ fcport->lun_cnt++;
++ /* Setup LUN structure. */
++ memset(fclun, 0, sizeof(fc_lun_t));
++ fclun->fcport = fcport;
++ fclun->lun = lun;
++ /* How dow we assign the following */
++ /* fclun->state = FCS_ONLINE; */
++
++ list_add_tail(&fclun->list, &fcport->fcluns);
++ } else {
++ printk(KERN_WARNING
++ "%s(): Memory Allocation failed - FCLUN\n",
++ __func__);
++ }
++ }
++}
++
++/*
++ * qla2x00_tgt_alloc
++ * Allocate and pre-initialize target queue.
++ *
++ * Input:
++ * ha = adapter block pointer.
++ * t = SCSI target number.
++ *
++ * Returns:
++ * NULL = failure
++ *
++ * Context:
++ * Kernel context.
++ */
++os_tgt_t *
++qla2x00_tgt_alloc(scsi_qla_host_t *ha, uint16_t t)
++{
++ os_tgt_t *tq;
++
++ ENTER(__func__);
++
++ /*
++ * If SCSI addressing OK, allocate TGT queue and lock.
++ */
++ if (t >= MAX_TARGETS) {
++ DEBUG2(printk("%s(%ld): *** Invalid target number, exiting ***",
++ __func__,
++ ha->host_no);)
++ return (NULL);
++ }
++
++ tq = TGT_Q(ha, t);
++ if (tq == NULL) {
++ tq = kmalloc(sizeof(os_tgt_t), GFP_ATOMIC);
++ if (tq != NULL) {
++ DEBUG(printk("Alloc Target %d @ %p\n", t, tq);)
++
++ memset(tq, 0, sizeof(os_tgt_t));
++ tq->flags = TGT_TAGGED_QUEUE;
++ tq->ha = ha;
++
++ TGT_Q(ha, t) = tq;
++ }
++ }
++ if (tq != NULL) {
++ tq->port_down_retry_count = ha->port_down_retry_count;
++ } else {
++ printk(KERN_WARNING
++ "%s(%ld): Failed to allocate target\n",
++ __func__,
++ ha->host_no);
++ ha->mem_err++;
++ }
++
++ LEAVE(__func__);
++
++ return (tq);
++}
++
++/*
++ * qla2x00_tgt_free
++ * Frees target and LUN queues.
++ *
++ * Input:
++ * ha = adapter block pointer.
++ * t = SCSI target number.
++ *
++ * Context:
++ * Kernel context.
++ */
++void
++qla2x00_tgt_free(scsi_qla_host_t *ha, uint16_t t)
++{
++ os_tgt_t *tq;
++ uint16_t l;
++
++ ENTER(__func__);
++
++ /*
++ * If SCSI addressing OK, allocate TGT queue and lock.
++ */
++ if (t >= MAX_TARGETS) {
++ DEBUG2(printk("%s(): **** FAILED exiting ****", __func__);)
++
++ return;
++ }
++
++ tq = TGT_Q(ha, t);
++ if (tq != NULL) {
++ TGT_Q(ha, t) = NULL;
++ DEBUG(printk("Dealloc target @ %p -- deleted\n", tq);)
++
++ /* Free LUN structures. */
++ for (l = 0; l < MAX_LUNS; l++)
++ qla2x00_lun_free(ha, t, l);
++
++ kfree(tq);
++ }
++
++ LEAVE(__func__);
++
++ return;
++}
++
++/*
++ * qla2x00_lun_alloc
++ * Allocate and initialize LUN queue.
++ *
++ * Input:
++ * ha = adapter block pointer.
++ * t = SCSI target number.
++ * l = LUN number.
++ *
++ * Returns:
++ * NULL = failure
++ *
++ * Context:
++ * Kernel context.
++ */
++os_lun_t *
++qla2x00_lun_alloc(scsi_qla_host_t *ha, uint16_t t, uint16_t l)
++{
++ os_lun_t *lq;
++
++ ENTER(__func__);
++
++ /*
++ * If SCSI addressing OK, allocate LUN queue.
++ */
++ if (t >= MAX_TARGETS ||
++ l >= MAX_LUNS ||
++ TGT_Q(ha, t) == NULL) {
++
++ DEBUG2(printk("%s(): tgt=%d, tgt_q= %p, lun=%d, "
++ "instance=%ld **** FAILED exiting ****\n",
++ __func__,
++ t,
++ TGT_Q(ha,t),
++ l,
++ ha->instance);)
++
++ return (NULL);
++ }
++
++ lq = LUN_Q(ha, t, l);
++ if (lq == NULL) {
++ lq = kmalloc(sizeof(os_lun_t), GFP_ATOMIC);
++ if (lq != NULL) {
++
++ DEBUG5(printk("Alloc Lun %d @ %p \n",l,lq);)
++
++ memset(lq, 0, sizeof (os_lun_t));
++ LUN_Q(ha, t, l) = lq;
++ /*
++ * The following lun queue initialization code
++ * must be duplicated in alloc_ioctl_mem function
++ * for ioctl_lq.
++ */
++ lq->q_state = LUN_STATE_READY;
++ spin_lock_init(&lq->q_lock);
++ } else {
++ /*EMPTY*/
++ DEBUG2(printk("%s(): Failed to allocate lun %d ***\n",
++ __func__,
++ l);)
++ printk(KERN_WARNING
++ "scsi(%ld): Memory Allocation failed - FCLUN\n",
++ ha->host_no);
++ ha->mem_err++;
++ }
++ }
++
++ if (lq == NULL) {
++ DEBUG2(printk("%s(): **** FAILED exiting ****\n", __func__);)
++ } else {
++ LEAVE(__func__);
++ }
++
++ return (lq);
++}
++
++/*
++ * qla2x00_lun_free
++ * Frees LUN queue.
++ *
++ * Input:
++ * ha = adapter block pointer.
++ * t = SCSI target number.
++ *
++ * Context:
++ * Kernel context.
++ */
++static void
++qla2x00_lun_free(scsi_qla_host_t *ha, uint16_t t, uint16_t l)
++{
++ os_lun_t *lq;
++
++ ENTER(__func__);
++
++ /*
++ * If SCSI addressing OK, allocate TGT queue and lock.
++ */
++ if (t >= MAX_TARGETS || l >= MAX_LUNS) {
++ DEBUG2(printk("%s(): **** FAILED exiting ****", __func__);)
++
++ return;
++ }
++
++ if (TGT_Q(ha, t) != NULL &&
++ (lq = LUN_Q(ha, t, l)) != NULL) {
++
++ LUN_Q(ha, t, l) = NULL;
++ kfree(lq);
++
++ DEBUG3(printk("Dealloc lun @ %p -- deleted\n", lq);)
++ }
++
++ LEAVE(__func__);
++
++ return;
++}
++
++
++/*
++ * qla2x00_get_lun_mask_from_config
++ * Get lun mask from the configuration parameters.
++ * Bit order is little endian.
++ *
++ * Input:
++ * ha -- Host adapter
++ * tgt -- target/device number
++ * port -- pointer to port
++ */
++static void
++qla2x00_get_lun_mask_from_config(scsi_qla_host_t *ha,
++ fc_port_t *port, uint16_t tgt, uint16_t dev_no)
++{
++ char propbuf[60]; /* size of search string */
++ int rval, lun, l;
++ lun_bit_mask_t lun_mask, *mask_ptr = &lun_mask;
++
++ /* Get "target-N-device-N-lun-mask" as a 256 bit lun_mask*/
++ sprintf(propbuf, "scsi-qla%ld-tgt-%d-di-%d-lun-disabled",
++ ha->instance, tgt, dev_no);
++
++ rval = qla2x00_get_prop_xstr(ha, propbuf, (uint8_t *)&lun_mask,
++ sizeof(lun_bit_mask_t));
++ if (rval != -1 &&
++ (rval == sizeof(lun_bit_mask_t))) {
++
++ DEBUG3(printk("%s(%ld): lun mask for port %p from file:\n",
++ __func__,
++ ha->host_no,
++ port);)
++ DEBUG3(qla2x00_dump_buffer((uint8_t *)&port->lun_mask,
++ sizeof(lun_bit_mask_t));)
++
++ for (lun = 8 * sizeof(lun_bit_mask_t) - 1, l = 0;
++ lun >= 0;
++ lun--, l++) {
++
++ if (EXT_IS_LUN_BIT_SET(mask_ptr, lun))
++ EXT_SET_LUN_BIT((&port->lun_mask),l);
++ else
++ EXT_CLR_LUN_BIT((&port->lun_mask),l);
++ }
++
++ DEBUG3(printk("%s(%ld): returning lun mask for port "
++ "%02x%02x%02x%02x%02x%02x%02x%02x:\n",
++ __func__,
++ ha->host_no,
++ port->port_name[0], port->port_name[1],
++ port->port_name[2], port->port_name[3],
++ port->port_name[4], port->port_name[5],
++ port->port_name[6], port->port_name[7]);)
++ DEBUG3(qla2x00_dump_buffer((uint8_t *)&port->lun_mask,
++ sizeof(lun_bit_mask_t));)
++ }
++}
++
++/*
++ * qla2x00_bstr_to_hex
++ * Convert hex byte string to number.
++ *
++ * Input:
++ * s = byte string pointer.
++ * bp = byte pointer for number.
++ * size = number of bytes.
++ *
++ * Context:
++ * Kernel/Interrupt context.
++ */
++static int
++qla2x00_bstr_to_hex(char *s, uint8_t *bp, int size)
++{
++ int cnt;
++ uint8_t n;
++
++ ENTER(__func__);
++
++ for (cnt = 0; *s != '\0' && cnt / 2 < size; cnt++) {
++ if (*s >= 'A' && *s <= 'F') {
++ n = (*s++ - 'A') + 10;
++ } else if (*s >= 'a' && *s <= 'f') {
++ n = (*s++ - 'a') + 10;
++ } else if (*s >= '0' && *s <= '9') {
++ n = *s++ - '0';
++ } else {
++ cnt = 0;
++ break;
++ }
++
++ if (cnt & BIT_0)
++ *bp++ |= n;
++ else
++ *bp = n << 4;
++ }
++ /* fixme(dg) Need to swap data little endian */
++
++ LEAVE(__func__);
++
++ return (cnt / 2);
++}
++
++/*
++ * qla2x00_get_prop_xstr
++ * Get a string property value for the specified property name and
++ * convert from the property string found in the configuration file,
++ * which are ASCII characters representing nibbles, 2 characters represent
++ * the hexdecimal value for a byte in the byte array.
++ * The byte array is initialized to zero.
++ * The resulting converted value is in big endian format (MSB at byte0).
++ *
++ * Input:
++ * ha = adapter state pointer.
++ * propname = property name pointer.
++ * propval = pointer where to store converted property val.
++ * size = max or expected size of 'propval' array.
++ *
++ * Returns:
++ * 0 = empty value string or invalid character in string
++ * >0 = count of characters converted
++ * -1 = property not found
++ *
++ * Context:
++ * Kernel context.
++ */
++int
++qla2x00_get_prop_xstr(scsi_qla_host_t *ha,
++ char *propname, uint8_t *propval, int size)
++{
++ char *propstr;
++ int rval = -1;
++ static char buf[LINESIZE];
++
++ ENTER(__func__);
++
++ /* Get the requested property string */
++ rval = qla2x00_find_propname(ha, propname, buf, ha->cmdline, size*2);
++ DEBUG3(printk("%s(): Ret rval from find propname = %d\n",
++ __func__,
++ rval);)
++
++ propstr = &buf[0];
++ if (*propstr == '=')
++ propstr++; /* ignore equal sign */
++
++ if (rval == 0) { /* not found */
++ LEAVE(__func__);
++ return (-1);
++ }
++
++ rval = qla2x00_bstr_to_hex(propstr, (uint8_t *)propval, size);
++ if (rval == 0) {
++ /* Invalid character in value string */
++ printk(KERN_INFO
++ "%s(): %s Invalid hex string for property\n",
++ __func__,
++ propname);
++ printk(KERN_INFO
++ " Invalid string - %s\n",
++ propstr);
++ }
++
++ LEAVE(__func__);
++
++ return (rval);
++}
++
++/*
++ * qla2x00_find_propname
++ * Get property in database.
++ *
++ * Input:
++ * ha = adapter structure pointer.
++ * db = pointer to database
++ * propstr = pointer to dest array for string
++ * propname = name of property to search for.
++ * siz = size of property
++ *
++ * Returns:
++ * 0 = no property
++ * size = index of property
++ *
++ * Context:
++ * Kernel context.
++ */
++static uint8_t
++qla2x00_find_propname(scsi_qla_host_t *ha,
++ char *propname, char *propstr,
++ char *db, int siz)
++{
++ char *cp;
++
++ /* find the specified string */
++ if (db) {
++ /* find the property name */
++ if ((cp = strstr(db,propname)) != NULL) {
++ while ((*cp) && *cp != '=')
++ cp++;
++ if (*cp) {
++ strncpy(propstr, cp, siz+1);
++ propstr[siz+1] = '\0';
++ DEBUG(printk("qla2x00_find_propname: found "
++ "property = {%s}\n",
++ propstr);)
++ return (siz); /* match */
++ }
++ }
++ }
++
++ return (0);
++}
++
++
++/*
++ * qla2x00_get_prop_16chars
++ * Get an 8-byte property value for the specified property name by
++ * converting from the property string found in the configuration file.
++ * The resulting converted value is in big endian format (MSB at byte0).
++ *
++ * Input:
++ * ha = adapter state pointer.
++ * propname = property name pointer.
++ * propval = pointer to location for the converted property val.
++ * db = pointer to database
++ *
++ * Returns:
++ * 0 = value returned successfully.
++ *
++ * Context:
++ * Kernel context.
++ */
++static int
++qla2x00_get_prop_16chars(scsi_qla_host_t *ha,
++ char *propname, char *propval, char *db)
++{
++ char *propstr;
++ int i, k;
++ int rval;
++ uint8_t nval;
++ uint8_t *pchar;
++ uint8_t *ret_byte;
++ uint8_t *tmp_byte;
++ uint8_t *retval = (uint8_t*)propval;
++ uint8_t tmpval[8] = {0, 0, 0, 0, 0, 0, 0, 0};
++ uint16_t max_byte_cnt = 8; /* 16 chars = 8 bytes */
++ uint16_t max_strlen = 16;
++ static char buf[LINESIZE];
++
++ rval = qla2x00_find_propname(ha, propname, buf, db, max_strlen);
++
++ propstr = &buf[0];
++ if (*propstr == '=')
++ propstr++; /* ignore equal sign */
++
++ if (rval == 0) {
++ return (1);
++ }
++
++ /* Convert string to numbers. */
++ pchar = (uint8_t *)propstr;
++ tmp_byte = (uint8_t *)tmpval;
++
++ rval = 0;
++ for (i = 0; i < max_strlen; i++) {
++ /*
++ * Check for invalid character, two at a time,
++ * then convert them starting with first byte.
++ */
++
++ if ((pchar[i] >= '0') && (pchar[i] <= '9')) {
++ nval = pchar[i] - '0';
++ } else if ((pchar[i] >= 'A') && (pchar[i] <= 'F')) {
++ nval = pchar[i] - 'A' + 10;
++ } else if ((pchar[i] >= 'a') && (pchar[i] <= 'f')) {
++ nval = pchar[i] - 'a' + 10;
++ } else {
++ /* invalid character */
++ rval = 1;
++ break;
++ }
++
++ if (i & BIT_0) {
++ *tmp_byte = *tmp_byte | nval;
++ tmp_byte++;
++ } else {
++ *tmp_byte = *tmp_byte | nval << 4;
++ }
++ }
++
++ if (rval != 0) {
++ /* Encountered invalid character. */
++ return (rval);
++ }
++
++ /* Copy over the converted value. */
++ ret_byte = retval;
++ tmp_byte = tmpval;
++
++ i = max_byte_cnt;
++ k = 0;
++ while (i--) {
++ *ret_byte++ = *tmp_byte++;
++ }
++
++ /* big endian retval[0]; */
++ return (0);
++}
++
++/*
++* qla2x00_get_properties
++* Find all properties for the specified adapeter in
++* command line.
++*
++* Input:
++* ha = adapter block pointer.
++* cmdline = pointer to command line string
++*
++* Context:
++* Kernel context.
++*/
++static void
++qla2x00_get_properties(scsi_qla_host_t *ha, char *cmdline)
++{
++ static char propbuf[LINESIZE];
++ uint8_t tmp_name[8];
++
++ /* Adapter FC node names. */
++ sprintf(propbuf, "scsi-qla%d-adapter-node", (int) ha->instance);
++ qla2x00_get_prop_16chars (ha,
++ propbuf,
++ (uint8_t *)(&ha->init_cb->node_name),
++ cmdline);
++
++ sprintf(propbuf, "scsi-qla%d-adapter-port", (int) ha->instance);
++
++ /* DG 04/07 check portname of adapter */
++ qla2x00_get_prop_16chars (ha,
++ propbuf,
++ tmp_name,
++ cmdline);
++ if (memcmp(ha->init_cb->port_name, tmp_name, 8) != 0) {
++ /*
++ * Adapter port name is WWN, and cannot be changed.
++ * Inform users of the mismatch, then just continue driver
++ * loading using the original adapter port name in NVRAM.
++ */
++ printk(KERN_WARNING
++ "qla2x00: qla%ld found mismatch in "
++ "adapter port names.\n",
++ ha->instance);
++ printk(KERN_INFO
++ " qla%ld port name found in NVRAM "
++ "-> %02x%02x%02x%02x%02x%02x%02x%02x\n",
++ ha->instance,
++ ha->init_cb->port_name[0],
++ ha->init_cb->port_name[1],
++ ha->init_cb->port_name[2],
++ ha->init_cb->port_name[3],
++ ha->init_cb->port_name[4],
++ ha->init_cb->port_name[5],
++ ha->init_cb->port_name[6],
++ ha->init_cb->port_name[7]);
++ printk(KERN_INFO
++ " qla%ld port name found on command line "
++ "-> %02x%02x%02x%02x%02x%02x%02x%02x\n",
++ ha->instance,
++ tmp_name[0],
++ tmp_name[1],
++ tmp_name[2],
++ tmp_name[3],
++ tmp_name[4],
++ tmp_name[5],
++ tmp_name[6],
++ tmp_name[7]);
++ printk(KERN_INFO
++ " Using port name from NVRAM.\n");
++ }
++
++ qla2x00_cfg_persistent_binding(ha);
++}
++
++/*
++ * qla2x00_cfg_persistent_binding
++ * Get driver configuration file target persistent binding entries.
++ *
++ * Input:
++ * ha = adapter block pointer.
++ *
++ * Context:
++ * Kernel context.
++ */
++static void
++qla2x00_cfg_persistent_binding(scsi_qla_host_t *ha)
++{
++ int rval;
++ static char propbuf[LINESIZE];
++ uint16_t tgt;
++ uint16_t dev_no = 0; /* not used */
++ char *cmdline = ha->cmdline;
++ port_id_t d_id, *pd_id;
++ uint8_t portid[3];
++ uint8_t node_name[8], *pnn;
++ uint8_t port_name[8], *ppn;
++ os_tgt_t *tq;
++
++ ENTER(__func__);
++
++ /* FC name for devices */
++ for (tgt = 0; tgt < MAX_FIBRE_DEVICES; tgt++) {
++
++ /*
++ * Retrive as much information as possible (PN/PID/NN).
++ *
++ * Based on binding type, skip incomplete entries.
++ */
++ ppn = port_name;
++ sprintf(propbuf, "scsi-qla%d-tgt-%d-di-%d-port",
++ (int)ha->instance, tgt, dev_no);
++ rval = qla2x00_get_prop_16chars(ha, propbuf, ppn, cmdline);
++ if (rval != 0)
++ ppn = NULL;
++ if (ha->binding_type == BIND_BY_PORT_NAME && rval != 0)
++ continue;
++
++ pd_id = &d_id;
++ sprintf(propbuf, "scsi-qla%d-tgt-%d-di-%d-pid",
++ (int)ha->instance, tgt, dev_no);
++ rval = qla2x00_get_prop_xstr(ha,
++ propbuf, portid, sizeof(portid));
++ if (rval == -1 || rval != sizeof(portid))
++ pd_id = NULL;
++ if (ha->binding_type == BIND_BY_PORT_ID &&
++ (rval == -1 || rval != sizeof(portid)))
++ continue;
++
++ pnn = node_name;
++ sprintf(propbuf, "scsi-qla%d-tgt-%d-di-%d-node",
++ (int)ha->instance, tgt, dev_no);
++ rval = qla2x00_get_prop_16chars(ha, propbuf, pnn, cmdline);
++ if (rval != 0)
++ pnn = NULL;
++ if (ha->binding_type == BIND_BY_NODE_NAME && rval != 0)
++ continue;
++
++ tq = qla2x00_tgt_alloc(ha, tgt);
++ if (tq == NULL) {
++ printk(KERN_WARNING
++ "%s(): Unable to allocate memory for target\n",
++ __func__);
++ continue;
++ }
++
++ ha->fc_db[tgt].loop_id = PORT_AVAILABLE;
++ ha->fc_db[tgt].flag = 0; /* v2.19.05b3 */
++ ha->fc_db[tgt].flag |= DEV_CONFIGURED;
++
++ if (ppn != NULL) {
++ memcpy(tq->port_name, ppn, WWN_SIZE);
++ memcpy(ha->fc_db[tgt].wwn, ppn, WWN_SIZE);
++ }
++ if (pd_id != NULL) {
++ /*
++ * The portid is read in big-endian format, convert
++ * before updating information
++ */
++ pd_id->r.d_id[0] = portid[2];
++ pd_id->r.d_id[1] = portid[1];
++ pd_id->r.d_id[2] = portid[0];
++ tq->d_id.b24 = pd_id->b24;
++ ha->fc_db[tgt].d_id.b24 = pd_id->b24;
++ }
++ if (pnn != NULL) {
++ memcpy(tq->node_name, pnn, WWN_SIZE);
++ memcpy(ha->fc_db[tgt].name, pnn, WWN_SIZE);
++ }
++
++ DEBUG(printk("Target %03d - configured by user: ",tgt);)
++ switch (ha->binding_type) {
++ case BIND_BY_PORT_NAME:
++ DEBUG(printk("tgt-%03d="
++ "%02x%02x%02x%02x%02x%02x%02x%02x\n",
++ tgt,
++ ppn[0], ppn[1], ppn[2], ppn[3],
++ ppn[4], ppn[5], ppn[6], ppn[7]);)
++ break;
++
++ case BIND_BY_PORT_ID:
++ DEBUG(printk("tgt-%03d=%02x%02x%02x\n",
++ tgt,
++ pd_id->b.domain,
++ pd_id->b.area,
++ pd_id->b.al_pa));
++ break;
++
++ case BIND_BY_NODE_NAME:
++ DEBUG(printk("tgt-%03d="
++ "%02x%02x%02x%02x%02x%02x%02x%02x\n",
++ tgt,
++ pnn[0], pnn[1], pnn[2], pnn[3],
++ pnn[4], pnn[5], pnn[6], pnn[7]);)
++ break;
++ }
++ /* look for VSA */
++#if VSA
++ qla2x00_get_vsa_opt_from_config(ha, tgt, dev_no);
++#endif
++
++ }
++
++ LEAVE(__func__);
++}
++
++/*
++* qla2x00_abort_isp
++* Resets ISP and aborts all outstanding commands.
++*
++* Input:
++* ha = adapter block pointer.
++*
++* Returns:
++* 0 = success
++*/
++uint8_t
++qla2x00_abort_isp(scsi_qla_host_t *ha, uint8_t flag)
++{
++ unsigned long flags = 0;
++ uint16_t cnt;
++ srb_t *sp;
++ uint8_t status = 0;
++
++ ENTER("qla2x00_abort_isp");
++
++ if (ha->flags.online) {
++ ha->flags.online = FALSE;
++ clear_bit(COMMAND_WAIT_NEEDED, &ha->dpc_flags);
++ clear_bit(COMMAND_WAIT_ACTIVE, &ha->dpc_flags);
++ clear_bit(ISP_ABORT_NEEDED, &ha->dpc_flags);
++ qla2x00_stats.ispAbort++;
++ ha->total_isp_aborts++; /* used by ioctl */
++ ha->sns_retry_cnt = 0;
++
++ printk(KERN_INFO
++ "scsi(%ld): Performing ISP error recovery - ha= %p.\n",
++ ha->host_no, ha);
++ qla2x00_reset_chip(ha);
++
++ if (ha->loop_state != LOOP_DOWN) {
++ ha->loop_state = LOOP_DOWN;
++ atomic_set(&ha->loop_down_timer, LOOP_DOWN_TIME);
++ qla2x00_mark_all_devices_lost(ha);
++ }
++
++#if defined(FC_IP_SUPPORT)
++ /* Return all IP send packets */
++ for (cnt = 0; cnt < MAX_SEND_PACKETS; cnt++) {
++ if (ha->active_scb_q[cnt] != NULL) {
++ /* Via IP callback */
++ (*ha->send_completion_routine)
++ (ha->active_scb_q[cnt]);
++
++ ha->active_scb_q[cnt] = NULL;
++ }
++ }
++#endif
++
++ spin_lock_irqsave(&ha->hardware_lock, flags);
++ /* Requeue all commands in outstanding command list. */
++ for (cnt = 1; cnt < MAX_OUTSTANDING_COMMANDS; cnt++) {
++ sp = ha->outstanding_cmds[cnt];
++ if (sp) {
++ ha->outstanding_cmds[cnt] = 0;
++ if( ha->actthreads )
++ ha->actthreads--;
++ sp->lun_queue->out_cnt--;
++#if defined(IOCB_THROLLE_USAGE)
++ ha->iocb_cnt -= sp->iocb_cnt;
++#endif
++
++ sp->flags = 0;
++
++ /*
++ * We need to send the command back to OS now
++ * if returning RESET status for kernel's
++ * error handling.
++ */
++ if (flag == 0) {
++ CMD_RESULT(sp->cmd) = DID_BUS_BUSY << 16;
++ } else {
++ CMD_RESULT(sp->cmd) = DID_RESET << 16;
++ }
++ CMD_HANDLE(sp->cmd) = (unsigned char *) NULL;
++ add_to_done_queue(ha, sp);
++ }
++ }
++
++ spin_unlock_irqrestore(&ha->hardware_lock, flags);
++
++#if defined(ISP2100)
++ qla2100_nvram_config(ha);
++#else
++ qla2x00_nvram_config(ha);
++#endif
++
++ if (!qla2x00_restart_isp(ha)) {
++ clear_bit(RESET_MARKER_NEEDED, &ha->dpc_flags);
++
++ if (!atomic_read(&ha->loop_down_timer)) {
++ /*
++ * Issue marker command only when we are going
++ * to start the I/O .
++ */
++ ha->marker_needed = 1;
++ }
++
++ ha->flags.online = TRUE;
++
++#if defined(FC_IP_SUPPORT)
++ /* Reenable IP support */
++ if (ha->flags.enable_ip) {
++ set_bit(REGISTER_FC4_NEEDED, &ha->dpc_flags);
++ qla2x00_ip_initialize(ha);
++ }
++#endif
++ /* Enable ISP interrupts. */
++ qla2x00_enable_intrs(ha);
++
++ /* v2.19.5b6 Return all commands */
++ qla2x00_abort_queues(ha, TRUE);
++
++ /* Restart queues that may have been stopped. */
++ qla2x00_restart_queues(ha,TRUE);
++ ha->isp_abort_cnt = 0;
++ clear_bit(ISP_ABORT_RETRY, &ha->dpc_flags);
++ } else { /* failed the ISP abort */
++ ha->flags.online = TRUE;
++ if( test_bit(ISP_ABORT_RETRY, &ha->dpc_flags) ){
++ if( ha->isp_abort_cnt == 0 ){
++ printk(KERN_WARNING
++ "qla2x00(%ld): ISP error recovery failed - "
++ "board disabled\n",ha->host_no);
++ /*
++ * The next call disables the board
++ * completely.
++ */
++ qla2x00_reset_adapter(ha);
++ qla2x00_abort_queues(ha, FALSE);
++ ha->flags.online = TRUE;
++ clear_bit(ISP_ABORT_RETRY, &ha->dpc_flags);
++ status = 0;
++ } else { /* schedule another ISP abort */
++ ha->isp_abort_cnt--;
++ DEBUG(printk("qla%ld: ISP abort - retry remainning %d\n",
++ ha->host_no,
++ ha->isp_abort_cnt);)
++ status = 1;
++ }
++ } else {
++ ha->isp_abort_cnt = MAX_RETRIES_OF_ISP_ABORT;
++ DEBUG(printk( "qla2x00(%ld): ISP error recovery - "
++ "retrying (%d) more times\n",ha->host_no,
++ ha->isp_abort_cnt);)
++ set_bit(ISP_ABORT_RETRY, &ha->dpc_flags);
++ status = 1;
++ }
++ }
++
++ }
++
++ if (status) {
++ printk(KERN_INFO
++ "qla2x00_abort_isp(%ld): **** FAILED ****\n",
++ ha->host_no);
++ } else {
++ DEBUG(printk(KERN_INFO
++ "qla2x00_abort_isp(%ld): exiting.\n",
++ ha->host_no);)
++ }
++
++ return(status);
++}
++
++/*
++* qla2x00_restart_isp
++* restarts the ISP after a reset
++*
++* Input:
++* ha = adapter block pointer.
++*
++* Returns:
++* 0 = success
++*/
++static int
++qla2x00_restart_isp(scsi_qla_host_t *ha)
++{
++ uint8_t status = 0;
++#if defined(ISP2300)
++ device_reg_t *reg;
++ unsigned long flags = 0;
++#endif
++
++ /* If firmware needs to be loaded */
++ if (qla2x00_isp_firmware(ha)) {
++ ha->flags.online = FALSE;
++ if (!(status = qla2x00_chip_diag(ha))) {
++#if defined(ISP2300)
++ reg = ha->iobase;
++ spin_lock_irqsave(&ha->hardware_lock, flags);
++ /* Disable SRAM, Instruction RAM and GP RAM parity. */
++ WRT_REG_WORD(®->hccr, (HCCR_ENABLE_PARITY + 0x0));
++ spin_unlock_irqrestore(&ha->hardware_lock, flags);
++#endif
++ status = qla2x00_setup_chip(ha);
++#if defined(ISP2300)
++ spin_lock_irqsave(&ha->hardware_lock, flags);
++
++ /* Enable proper parity */
++ if (ha->pdev->device == QLA2312_DEVICE_ID ||
++ ha->pdev->device == QLA2322_DEVICE_ID)
++ /* SRAM, Instruction RAM and GP RAM parity */
++ WRT_REG_WORD(®->hccr,
++ (HCCR_ENABLE_PARITY + 0x7));
++ else
++ /* SRAM parity */
++ WRT_REG_WORD(®->hccr,
++ (HCCR_ENABLE_PARITY + 0x1));
++
++ spin_unlock_irqrestore(&ha->hardware_lock, flags);
++#endif
++ }
++ }
++ if (!status && !(status = qla2x00_init_rings(ha))) {
++ clear_bit(RESET_MARKER_NEEDED, &ha->dpc_flags);
++ clear_bit(COMMAND_WAIT_NEEDED, &ha->dpc_flags);
++ if (!(status = qla2x00_fw_ready(ha))) {
++ DEBUG(printk("%s(): Start configure loop, "
++ "status = %d\n",
++ __func__,
++ status);)
++ ha->flags.online = TRUE;
++ do {
++ clear_bit(LOOP_RESYNC_NEEDED, &ha->dpc_flags);
++ qla2x00_configure_loop(ha);
++ } while (!atomic_read(&ha->loop_down_timer) &&
++ !(test_bit(ISP_ABORT_NEEDED, &ha->dpc_flags)) &&
++ (test_bit(LOOP_RESYNC_NEEDED, &ha->dpc_flags)));
++ }
++
++ /* if no cable then assume it's good */
++ if ((ha->device_flags & DFLG_NO_CABLE))
++ status = 0;
++
++ DEBUG(printk("%s(): Configure loop done, status = 0x%x\n",
++ __func__,
++ status);)
++ }
++ return (status);
++}
++
++/*
++* qla2x00_reset_adapter
++* Reset adapter.
++*
++* Input:
++* ha = adapter block pointer.
++*/
++static void
++qla2x00_reset_adapter(scsi_qla_host_t *ha)
++{
++ unsigned long flags = 0;
++ device_reg_t *reg = ha->iobase;
++
++ ENTER(__func__);
++
++ ha->flags.online = FALSE;
++ qla2x00_disable_intrs(ha);
++ /* Reset RISC processor. */
++ spin_lock_irqsave(&ha->hardware_lock, flags);
++ WRT_REG_WORD(®->hccr, HCCR_RESET_RISC);
++ WRT_REG_WORD(®->hccr, HCCR_RELEASE_RISC);
++ spin_unlock_irqrestore(&ha->hardware_lock, flags);
++
++ LEAVE(__func__);
++}
+--- /dev/null Thu Apr 11 07:25:15 2002
++++ linux-2.5.73-n9560/drivers/scsi/qla2xxx/qla_inline.h Thu Jul 3 15:34:42 2003
+@@ -0,0 +1,375 @@
++/*
++ * QLOGIC LINUX SOFTWARE
++ *
++ * QLogic ISP2x00 device driver for Linux 2.5.x
++ * Copyright (C) 2003 Qlogic Corporation
++ * (www.qlogic.com)
++ *
++ * This program is free software; you can redistribute it and/or modify it
++ * under the terms of the GNU General Public License as published by the
++ * Free Software Foundation; either version 2, or (at your option) any
++ * later version.
++ *
++ * This program is distributed in the hope that it will be useful, but
++ * WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ * General Public License for more details.
++ *
++ */
++
++
++static __inline__ uint16_t qla2x00_debounce_register(volatile uint16_t *);
++/*
++ * qla2x00_debounce_register
++ * Debounce register.
++ *
++ * Input:
++ * port = register address.
++ *
++ * Returns:
++ * register value.
++ */
++static __inline__ uint16_t
++qla2x00_debounce_register(volatile uint16_t *addr)
++{
++ volatile uint16_t first;
++ volatile uint16_t second;
++
++ do {
++ first = RD_REG_WORD(addr);
++ barrier();
++ second = RD_REG_WORD(addr);
++ } while (first != second);
++
++ return (first);
++}
++
++static __inline__ void qla2x00_config_dma_addressing(scsi_qla_host_t *ha);
++
++/**
++ * qla2x00_config_dma_addressing() - Configure OS DMA addressing method.
++ * @ha: HA context
++ *
++ * At exit, the @ha's flags.enable_64bit_addressing set to indicated
++ * supported addressing method.
++ */
++static __inline__ void
++qla2x00_config_dma_addressing(scsi_qla_host_t *ha)
++{
++ /*
++ * Given the two variants pci_set_dma_mask(), allow the compiler to
++ * assist in setting the proper dma mask.
++ */
++ if (sizeof(dma_addr_t) > 4) {
++ ha->flags.enable_64bit_addressing = 1;
++ /* Update our PCI device dma_mask for full 64 bits */
++ if (pci_set_dma_mask(ha->pdev, 0xffffffffffffffffULL)) {
++ printk("scsi(%ld): Failed to set 64 bit PCI DMA mask, "
++ "using 32 bits\n",
++ ha->host_no);
++ ha->flags.enable_64bit_addressing = 0;
++ pci_set_dma_mask(ha->pdev, 0xffffffff);
++ }
++ }
++ else {
++ ha->flags.enable_64bit_addressing = 0;
++ pci_set_dma_mask(ha->pdev, 0xffffffff);
++ }
++ printk(KERN_INFO
++ "scsi(%ld): %d Bit DMA Addressing Enabled.\n",
++ ha->host_no,
++ (ha->flags.enable_64bit_addressing ? 64 : 32));
++}
++
++
++static __inline__ int qla2x00_normalize_dma_addr(
++ dma_addr_t *e_addr, uint32_t *e_len,
++ dma_addr_t *ne_addr, uint32_t *ne_len);
++
++/**
++ * qla2x00_normalize_dma_addr() - Normalize an DMA address.
++ * @e_addr: Raw DMA address
++ * @e_len: Raw DMA length
++ * @ne_addr: Normalized second DMA address
++ * @ne_len: Normalized second DMA length
++ *
++ * If the address does not span a 4GB page boundary, the contents of @ne_addr
++ * and @ne_len are undefined. @e_len is updated to reflect a normalization.
++ *
++ * Example:
++ *
++ * ffffabc0ffffeeee (e_addr) start of DMA address
++ * 0000000020000000 (e_len) length of DMA transfer
++ * ffffabc11fffeeed end of DMA transfer
++ *
++ * Is the 4GB boundary crossed?
++ *
++ * ffffabc0ffffeeee (e_addr)
++ * ffffabc11fffeeed (e_addr + e_len - 1)
++ * 00000001e0000003 ((e_addr ^ (e_addr + e_len - 1))
++ * 0000000100000000 ((e_addr ^ (e_addr + e_len - 1)) & ~(0xffffffff)
++ *
++ * Compute start of second DMA segment:
++ *
++ * ffffabc0ffffeeee (e_addr)
++ * ffffabc1ffffeeee (0x100000000 + e_addr)
++ * ffffabc100000000 (0x100000000 + e_addr) & ~(0xffffffff)
++ * ffffabc100000000 (ne_addr)
++ *
++ * Compute length of second DMA segment:
++ *
++ * 00000000ffffeeee (e_addr & 0xffffffff)
++ * 0000000000001112 (0x100000000 - (e_addr & 0xffffffff))
++ * 000000001fffeeee (e_len - (0x100000000 - (e_addr & 0xffffffff))
++ * 000000001fffeeee (ne_len)
++ *
++ * Adjust length of first DMA segment
++ *
++ * 0000000020000000 (e_len)
++ * 0000000000001112 (e_len - ne_len)
++ * 0000000000001112 (e_len)
++ *
++ * Returns non-zero if the specified address was normalized, else zero.
++ */
++static __inline__ int
++qla2x00_normalize_dma_addr(
++ dma_addr_t *e_addr, uint32_t *e_len,
++ dma_addr_t *ne_addr, uint32_t *ne_len)
++{
++ int normalized;
++
++ normalized = 0;
++ if ((*e_addr ^ (*e_addr + *e_len - 1)) & ~(0xFFFFFFFFULL)) {
++ /* Compute normalized crossed address and len */
++ *ne_addr = (0x100000000ULL + *e_addr) & ~(0xFFFFFFFFULL);
++ *ne_len = *e_len - (0x100000000ULL - (*e_addr & 0xFFFFFFFFULL));
++ *e_len -= *ne_len;
++
++ normalized++;
++ }
++ return (normalized);
++}
++
++static __inline__ void qla2x00_poll(scsi_qla_host_t *);
++static inline void
++qla2x00_poll(scsi_qla_host_t *ha)
++{
++ qla2x00_intr_handler(0, ha, NULL);
++}
++
++
++static __inline__ void qla2x00_enable_intrs(scsi_qla_host_t *);
++static __inline__ void qla2x00_disable_intrs(scsi_qla_host_t *);
++
++static inline void
++qla2x00_enable_intrs(scsi_qla_host_t *ha)
++{
++ unsigned long flags = 0;
++ device_reg_t *reg;
++
++ spin_lock_irqsave(&ha->hardware_lock, flags);
++ reg = ha->iobase;
++ ha->interrupts_on = 1;
++ /* enable risc and host interrupts */
++ WRT_REG_WORD(®->ictrl, ICR_EN_INT | ICR_EN_RISC);
++ CACHE_FLUSH(®->ictrl);
++ spin_unlock_irqrestore(&ha->hardware_lock, flags);
++
++}
++
++static inline void
++qla2x00_disable_intrs(scsi_qla_host_t *ha)
++{
++ unsigned long flags = 0;
++ device_reg_t *reg;
++
++ spin_lock_irqsave(&ha->hardware_lock, flags);
++ reg = ha->iobase;
++ ha->interrupts_on = 0;
++ /* disable risc and host interrupts */
++ WRT_REG_WORD(®->ictrl, 0);
++ CACHE_FLUSH(®->ictrl);
++ spin_unlock_irqrestore(&ha->hardware_lock, flags);
++}
++
++
++static __inline__ int qla2x00_is_wwn_zero(uint8_t *);
++
++/*
++ * qla2x00_is_wwn_zero - Check for zero node name
++ *
++ * Input:
++ * wwn = Pointer to WW name to check
++ *
++ * Returns:
++ * TRUE if name is 0 else FALSE
++ *
++ * Context:
++ * Kernel context.
++ */
++static __inline__ int
++qla2x00_is_wwn_zero(uint8_t *wwn)
++{
++ int cnt;
++
++ for (cnt = 0; cnt < WWN_SIZE ; cnt++, wwn++) {
++ if (*wwn != 0)
++ break;
++ }
++ /* if zero return TRUE */
++ if (cnt == WWN_SIZE)
++ return (1);
++ else
++ return (0);
++}
++
++static __inline__ uint8_t
++qla2x00_suspend_lun(scsi_qla_host_t *, os_lun_t *, int, int);
++static __inline__ uint8_t
++qla2x00_delay_lun(scsi_qla_host_t *, os_lun_t *, int);
++
++static __inline__ uint8_t
++qla2x00_suspend_lun(scsi_qla_host_t *ha, os_lun_t *lq, int time, int count)
++{
++ return (__qla2x00_suspend_lun(ha, lq, time, count, 0));
++}
++
++static __inline__ uint8_t
++qla2x00_delay_lun(scsi_qla_host_t *ha, os_lun_t *lq, int time)
++{
++ return (__qla2x00_suspend_lun(ha, lq, time, 1, 1));
++}
++
++
++
++static __inline__ void qla2x00_chg_endian(uint8_t *, size_t);
++/*
++ * qla2x00_chg_endian
++ * Change endianess of byte array.
++ *
++ * Input:
++ * buf = array pointer.
++ * size = size of array in bytes.
++ *
++ * Context:
++ * Kernel context.
++ */
++static __inline__ void
++qla2x00_chg_endian(uint8_t *buf, size_t size)
++{
++ uint8_t byte;
++ size_t cnt1;
++ size_t cnt;
++
++ cnt1 = size - 1;
++ for (cnt = 0; cnt < size / 2; cnt++) {
++ byte = buf[cnt1];
++ buf[cnt1] = buf[cnt];
++ buf[cnt] = byte;
++ cnt1--;
++ }
++}
++
++static __inline__ void qla2x00_check_fabric_devices(scsi_qla_host_t *);
++/*
++ * This routine will wait for fabric devices for
++ * the reset delay.
++ */
++static __inline__ void qla2x00_check_fabric_devices(scsi_qla_host_t *ha)
++{
++ uint16_t fw_state;
++
++ qla2x00_get_firmware_state(ha, &fw_state);
++}
++
++static inline void qla2x00_filter_command(scsi_qla_host_t *ha, srb_t *sp);
++static inline void
++qla2x00_filter_command(scsi_qla_host_t *ha, srb_t *sp)
++{
++ Scsi_Cmnd *cp = sp->cmd;
++ uint8_t *strp;
++
++ /*
++ * Special case considertaion on an Inquiry command (0x12) for Lun 0,
++ * device responds with no devices (0x7F), then Linux will not scan
++ * further Luns. While reporting that some device exists on Lun 0 Linux
++ * will scan all devices on this target.
++ */
++ if (qla2xenbinq && (cp->cmnd[0] == INQUIRY) && (SCSI_LUN_32(cp) == 0)) {
++ strp = (uint8_t *)cp->request_buffer;
++ if (*strp == 0x7f) {
++ /* Make lun unassigned and processor type */
++ *strp = 0x23;
++ }
++ }
++}
++
++static __inline__ void * qla2x00_kmem_zalloc(int, int, int);
++/*
++ * qla2x00_kmem_zalloc
++ * Allocate and zero out the block of memory
++ */
++static __inline__ void *
++qla2x00_kmem_zalloc(int siz, int code, int id)
++{
++ uint8_t *bp;
++
++ if ((bp = kmalloc(siz, code)) != NULL) {
++ memset(bp, 0, siz);
++ }
++#if QL_TRACE_MEMORY
++ if (mem_trace_ptr == 1000)
++ mem_trace_ptr = 0;
++ mem_trace[mem_trace_ptr] = (u_long ) bp;
++ mem_id[mem_trace_ptr++] = (u_long ) id;
++#endif
++
++ return ((void *)bp);
++}
++
++
++static __inline__ ms_iocb_entry_t *
++qla2x00_prep_ms_iocb(scsi_qla_host_t *, uint32_t, uint32_t);
++/**
++ * qla2x00_prep_ms_iocb() - Prepare common MS IOCB fields for SNS CT query.
++ * @ha: HA context
++ * @req_size: request size in bytes
++ * @rsp_size: response size in bytes
++ *
++ * Returns a pointer to the @ha's ms_iocb.
++ */
++static __inline__ ms_iocb_entry_t *
++qla2x00_prep_ms_iocb(scsi_qla_host_t *ha, uint32_t req_size, uint32_t rsp_size)
++{
++ ms_iocb_entry_t *ms_pkt;
++
++ ms_pkt = ha->ms_iocb;
++ memset(ms_pkt, 0, sizeof(ms_iocb_entry_t));
++
++ ms_pkt->entry_type = MS_IOCB_TYPE;
++ ms_pkt->entry_count = 1;
++#if defined(EXTENDED_IDS)
++ ms_pkt->loop_id = __constant_cpu_to_le16(SIMPLE_NAME_SERVER);
++#else
++ ms_pkt->loop_id = SIMPLE_NAME_SERVER;
++#endif
++ ms_pkt->control_flags =
++ __constant_cpu_to_le16(CF_READ | CF_HEAD_TAG);
++ ms_pkt->timeout = __constant_cpu_to_le16(25);
++ ms_pkt->cmd_dsd_count = __constant_cpu_to_le16(1);
++ ms_pkt->total_dsd_count = __constant_cpu_to_le16(2);
++ ms_pkt->rsp_bytecount = cpu_to_le32(rsp_size);
++ ms_pkt->req_bytecount = cpu_to_le32(req_size);
++
++ ms_pkt->dseg_req_address[0] = cpu_to_le32(LSD(ha->ct_sns_dma));
++ ms_pkt->dseg_req_address[1] = cpu_to_le32(MSD(ha->ct_sns_dma));
++ ms_pkt->dseg_req_length = ms_pkt->req_bytecount;
++
++ ms_pkt->dseg_rsp_address[0] = cpu_to_le32(LSD(ha->ct_sns_dma));
++ ms_pkt->dseg_rsp_address[1] = cpu_to_le32(MSD(ha->ct_sns_dma));
++ ms_pkt->dseg_rsp_length = ms_pkt->rsp_bytecount;
++
++ return (ms_pkt);
++}
++
++
+--- /dev/null Thu Apr 11 07:25:15 2002
++++ linux-2.5.73-n9560/drivers/scsi/qla2xxx/qla_iocb.c Thu Jul 3 15:34:42 2003
+@@ -0,0 +1,1276 @@
++/******************************************************************************
++ * QLOGIC LINUX SOFTWARE
++ *
++ * QLogic ISP2x00 device driver for Linux 2.5.x
++ * Copyright (C) 2003 Qlogic Corporation
++ * (www.qlogic.com)
++ *
++ * This program is free software; you can redistribute it and/or modify it
++ * under the terms of the GNU General Public License as published by the
++ * Free Software Foundation; either version 2, or (at your option) any
++ * later version.
++ *
++ * This program is distributed in the hope that it will be useful, but
++ * WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ * General Public License for more details.
++ *
++ ******************************************************************************/
++
++#include "qla_os.h"
++#include "qla_def.h"
++
++static inline uint16_t qla2x00_get_cmd_direction(Scsi_Cmnd *cmd);
++
++static inline int qla2x00_cmd_build_iocb(scsi_qla_host_t *ha,
++ srb_t *sp, cmd_entry_t *cmd_pkt, uint16_t *req_q_cnt,
++ uint16_t *req_ring_index, request_t **request_ring_ptr,
++ uint16_t *tot_iocbs, uint16_t *tot_dsds);
++
++static inline int qla2x00_cmd_build_64bit_iocbs(scsi_qla_host_t *ha,
++ srb_t *sp, cmd_entry_t *cmd_pkt, uint16_t *req_q_cnt,
++ uint16_t *req_ring_index, request_t **request_ring_ptr,
++ uint16_t *tot_iocbs, uint16_t *tot_dsds);
++
++static inline int qla2x00_cmd_build_32bit_iocbs(scsi_qla_host_t *ha,
++ srb_t *sp, cmd_entry_t *cmd_pkt, uint16_t *req_q_cnt,
++ uint16_t *req_ring_index, request_t **request_ring_ptr,
++ uint16_t *tot_iocbs, uint16_t *tot_dsds);
++
++static inline int qla2x00_check_request_ring(scsi_qla_host_t *ha,
++ uint16_t tot_iocbs, uint16_t req_ring_index, uint16_t *req_q_cnt);
++
++static inline cont_a64_entry_t *qla2x00_prep_a64_cont_packet(
++ scsi_qla_host_t *ha,
++ uint16_t *req_ring_index, request_t **request_ring_ptr);
++
++static inline cont_entry_t *qla2x00_prep_cont_packet(scsi_qla_host_t *ha,
++ uint16_t *req_ring_index, request_t **request_ring_ptr);
++
++
++/* Command queuing function */
++
++/**
++ * qla2x00_get_cmd_direction() - Determine control_flag data direction.
++ * @cmd: SCSI command
++ *
++ * This is ridiculous, the mid-layer applications should perform this step for
++ * all commands sent down through the SCSI layers. The following is a terrible
++ * hack.
++ *
++ * Returns the proper CF_* direction based on CDB.
++ */
++static inline uint16_t
++qla2x00_get_cmd_direction(Scsi_Cmnd *cmd)
++{
++ uint16_t cflags;
++
++ cflags = 0;
++
++#if defined(SANE_USAGE_OF_CMD_DIRECTION)
++ /* Set transfer direction */
++ if (cmd->sc_data_direction == SCSI_DATA_WRITE)
++ cflags = CF_WRITE;
++ else if (cmd->sc_data_direction == SCSI_DATA_READ)
++ cflags = CF_READ;
++ else {
++ switch (cmd->data_cmnd[0]) {
++ case WRITE_6:
++ case WRITE_10:
++ case WRITE_12:
++ case WRITE_BUFFER:
++ case WRITE_LONG:
++ case WRITE_SAME:
++ case WRITE_VERIFY:
++ case WRITE_VERIFY_12:
++ case FORMAT_UNIT:
++ case SEND_VOLUME_TAG:
++ case MODE_SELECT:
++ case SEND_DIAGNOSTIC:
++ case MODE_SELECT_10:
++ cflags = CF_WRITE;
++ break;
++ default:
++ cflags = CF_READ;
++ break;
++ }
++ }
++#else
++ switch (cmd->data_cmnd[0]) {
++ case WRITE_6:
++ case WRITE_10:
++ case WRITE_12:
++ case WRITE_BUFFER:
++ case WRITE_LONG:
++ case WRITE_SAME:
++ case WRITE_VERIFY:
++ case WRITE_VERIFY_12:
++ case FORMAT_UNIT:
++ case SEND_VOLUME_TAG:
++ case MODE_SELECT:
++ case SEND_DIAGNOSTIC:
++ case MODE_SELECT_10:
++ cflags = CF_WRITE;
++ break;
++ default:
++ if (cmd->sc_data_direction == SCSI_DATA_WRITE)
++ cflags = CF_WRITE;
++ else
++ cflags = CF_READ;
++ break;
++ }
++#endif
++
++ return (cflags);
++}
++
++/**
++ * qla2x00_check_request_ring() - Checks request ring for additional IOCB space.
++ * @ha: HA context
++ * @tot_iocbs: Number of IOCBs required
++ * @req_ring_index: Current index to request ring
++ * @req_q_cnt: Number of free request entries
++ *
++ * Returns non-zero if no additional room available on request ring, else zero.
++ */
++static inline int
++qla2x00_check_request_ring(scsi_qla_host_t *ha,
++ uint16_t tot_iocbs, uint16_t req_ring_index, uint16_t *req_q_cnt)
++{
++ uint16_t ret;
++ uint16_t cnt;
++ device_reg_t *reg;
++
++ reg = ha->iobase;
++
++ /* If room for request in request ring for at least N IOCB */
++ ret = 0;
++ if ((tot_iocbs + 2) >= *req_q_cnt) {
++ /*
++ * Calculate number of free request entries.
++ */
++ cnt = RD_REG_WORD(ISP_REQ_Q_OUT(reg));
++ if (req_ring_index < cnt)
++ *req_q_cnt = cnt - req_ring_index;
++ else
++ *req_q_cnt = REQUEST_ENTRY_CNT - (req_ring_index - cnt);
++ }
++ if ((tot_iocbs + 2) >= *req_q_cnt) {
++ DEBUG5(printk("scsi(%ld): in-ptr=%x req_q_cnt=%x "
++ "tot_iocbs=%x.\n",
++ ha->host_no, req_ring_index, *req_q_cnt, tot_iocbs));
++
++ ret++;
++ }
++#if defined(IOCB_THROLLE_USAGE)
++ if ((ha->iocb_cnt + tot_iocbs) >= ha->iocb_hiwat) {
++ DEBUG5(printk("%s(): Not Enough IOCBS for request. "
++ "iocb_cnt=%x, tot_iocbs=%x, hiwat=%x.\n",
++ __func__, ha->iocb_cnt, tot_iocbs, ha->iocb_hiwat));
++#if defined(IOCB_HIT_RATE)
++ ha->iocb_overflow_cnt++;
++#endif
++ ret++;
++ }
++#endif
++
++ return (ret);
++}
++
++/**
++ * qla2x00_prep_a64_cont_packet() - Initialize an A64 continuation packet.
++ * @ha: HA context
++ * @req_ring_index: Current index to request ring
++ * @req_ring_ptr: Current pointer to request ring
++ *
++ * Returns a pointer to the continuation packet.
++ */
++static inline cont_a64_entry_t *
++qla2x00_prep_a64_cont_packet(scsi_qla_host_t *ha,
++ uint16_t *req_ring_index, request_t **request_ring_ptr)
++{
++ cont_a64_entry_t *cont_pkt;
++
++ /* Adjust ring index. */
++ *req_ring_index += 1;
++ if (*req_ring_index == REQUEST_ENTRY_CNT) {
++ *req_ring_index = 0;
++ *request_ring_ptr = ha->request_ring;
++ } else
++ *request_ring_ptr += 1;
++
++ cont_pkt = (cont_a64_entry_t *)(*request_ring_ptr);
++
++ /* Load packet defaults. */
++ *((uint32_t *)(&cont_pkt->entry_type)) =
++ __constant_cpu_to_le32(CONTINUE_A64_TYPE);
++ //cont_pkt->entry_type = CONTINUE_A64_TYPE;
++ //cont_pkt->entry_count = 0;
++ //cont_pkt->sys_define = (uint8_t)req_ring_index;
++
++ return (cont_pkt);
++}
++
++/**
++ * qla2x00_prep_cont_packet() - Initialize a continuation packet.
++ * @ha: HA context
++ * @req_ring_index: Current index to request ring
++ * @req_ring_ptr: Current pointer to request ring
++ *
++ * Returns a pointer to the continuation packet.
++ */
++static inline cont_entry_t *
++qla2x00_prep_cont_packet(scsi_qla_host_t *ha,
++ uint16_t *req_ring_index, request_t **request_ring_ptr)
++{
++ cont_entry_t *cont_pkt;
++
++ /* Adjust ring index. */
++ *req_ring_index += 1;
++ if (*req_ring_index == REQUEST_ENTRY_CNT) {
++ *req_ring_index = 0;
++ *request_ring_ptr = ha->request_ring;
++ } else
++ *request_ring_ptr += 1;
++
++ cont_pkt = (cont_entry_t *)(*request_ring_ptr);
++
++ /* Load packet defaults. */
++ *((uint32_t *)(&cont_pkt->entry_type)) =
++ __constant_cpu_to_le32(CONTINUE_TYPE);
++ //cont_pkt->entry_type = CONTINUE_TYPE;
++ //cont_pkt->entry_count = 0;
++ //cont_pkt->sys_define = (uint8_t)req_ring_index;
++
++ return (cont_pkt);
++}
++
++static inline int
++qla2x00_cmd_build_64bit_iocbs(scsi_qla_host_t *ha,
++ srb_t *sp,
++ cmd_entry_t *cmd_pkt,
++ uint16_t *req_q_cnt,
++ uint16_t *req_ring_index, request_t **request_ring_ptr,
++ uint16_t *tot_iocbs, uint16_t *tot_dsds)
++{
++ uint16_t avail_dsds;
++ uint32_t *cur_dsd;
++ Scsi_Cmnd *cmd;
++
++ cmd = sp->cmd;
++
++ /* No data transfer */
++ if (cmd->request_bufflen == 0 ||
++ cmd->sc_data_direction == SCSI_DATA_NONE) {
++ cmd_pkt->byte_count = __constant_cpu_to_le32(0);
++ return (QL_STATUS_SUCCESS);
++ }
++
++ cmd_pkt->control_flags |= cpu_to_le16(qla2x00_get_cmd_direction(cmd));
++ sp->dir = cmd_pkt->control_flags &
++ __constant_cpu_to_le16(CF_READ | CF_WRITE);
++
++ /* Two DSDs are available in the command 64 IOCB */
++ avail_dsds = 2;
++ cur_dsd = (uint32_t *)&cmd_pkt->dseg_0_address;
++
++ /* Load data segments */
++ if (cmd->use_sg != 0) {
++ struct scatterlist *cur_seg;
++ struct scatterlist *end_seg;
++ int nseg;
++
++ cur_seg = (struct scatterlist *)cmd->request_buffer;
++ nseg = pci_map_sg(ha->pdev, cur_seg, cmd->use_sg,
++ scsi_to_pci_dma_dir(cmd->sc_data_direction));
++ end_seg = cur_seg + nseg;
++ while (cur_seg < end_seg) {
++ int failed;
++ dma_addr_t sle_dma;
++ uint32_t sle_len;
++ dma_addr_t nml_dma;
++ uint32_t nml_len;
++ uint32_t normalized;
++ cont_a64_entry_t *cont_pkt;
++
++ /* Allocate additional continuation packets? */
++ if (avail_dsds == 0) {
++ *tot_iocbs += 1;
++ failed = qla2x00_check_request_ring(ha,
++ *tot_iocbs,
++ *req_ring_index,
++ req_q_cnt);
++ if (failed) {
++ goto mapped_queuing_error_64;
++ }
++
++ cont_pkt = qla2x00_prep_a64_cont_packet(ha,
++ req_ring_index,
++ request_ring_ptr);
++
++ cur_dsd = (uint32_t *)&cont_pkt->dseg_0_address;
++ avail_dsds = 5;
++ }
++
++ sle_dma = sg_dma_address(cur_seg);
++ sle_len = sg_dma_len(cur_seg);
++
++ normalized = qla2x00_normalize_dma_addr(
++ &sle_dma, &sle_len,
++ &nml_dma, &nml_len);
++
++ /* One entry always consumed */
++ *cur_dsd++ = cpu_to_le32(LSD(sle_dma));
++ *cur_dsd++ = cpu_to_le32(MSD(sle_dma));
++ *cur_dsd++ = cpu_to_le32(sle_len);
++ *tot_dsds += 1;
++ avail_dsds--;
++
++ cur_seg++;
++ if (!normalized)
++ continue;
++
++ /*
++ * Allocate additional continuation packets?
++ */
++ if (avail_dsds == 0) {
++ *tot_iocbs += 1;
++ failed = qla2x00_check_request_ring(ha,
++ *tot_iocbs,
++ *req_ring_index,
++ req_q_cnt);
++ if (failed)
++ goto mapped_queuing_error_64;
++
++ cont_pkt = qla2x00_prep_a64_cont_packet(ha,
++ req_ring_index,
++ request_ring_ptr);
++
++ cur_dsd = (uint32_t *)&cont_pkt->dseg_0_address;
++ avail_dsds = 5;
++ }
++
++ *cur_dsd++ = cpu_to_le32(LSD(nml_dma));
++ *cur_dsd++ = cpu_to_le32(MSD(nml_dma));
++ *cur_dsd++ = cpu_to_le32(nml_len);
++ *tot_dsds += 1;
++ avail_dsds--;
++ }
++ }
++ else {
++ /*
++ * No more than 1 (one) IOCB is needed for this type of
++ * request, even if the DMA address spans the 4GB page
++ * boundary.
++ *
++ * @tot_dsds == 1 if non-spanning, else 2
++ */
++ dma_addr_t req_dma;
++ uint32_t req_len;
++ dma_addr_t nml_dma;
++ uint32_t nml_len;
++ uint32_t normalized;
++ struct page *page;
++ unsigned long offset;
++
++ page = virt_to_page(cmd->request_buffer);
++ offset = ((unsigned long)cmd->request_buffer & ~PAGE_MASK);
++ req_dma = pci_map_page(ha->pdev,
++ page,
++ offset,
++ cmd->request_bufflen,
++ scsi_to_pci_dma_dir(cmd->sc_data_direction));
++ req_len = cmd->request_bufflen;
++
++ sp->saved_dma_handle = req_dma;
++
++ normalized = qla2x00_normalize_dma_addr(
++ &req_dma, &req_len,
++ &nml_dma, &nml_len);
++
++ /* One entry always consumed */
++ *cur_dsd++ = cpu_to_le32(LSD(req_dma));
++ *cur_dsd++ = cpu_to_le32(MSD(req_dma));
++ *cur_dsd++ = cpu_to_le32(req_len);
++ *tot_dsds += 1;
++
++ if (normalized) {
++ *cur_dsd++ = cpu_to_le32(LSD(nml_dma));
++ *cur_dsd++ = cpu_to_le32(MSD(nml_dma));
++ *cur_dsd++ = cpu_to_le32(nml_len);
++ *tot_dsds += 1;
++ }
++ }
++
++ return (QL_STATUS_SUCCESS);
++
++mapped_queuing_error_64:
++ pci_unmap_sg(ha->pdev, (struct scatterlist *)cmd->request_buffer,
++ cmd->use_sg, scsi_to_pci_dma_dir(cmd->sc_data_direction));
++ return (QL_STATUS_ERROR);
++}
++
++static inline int
++qla2x00_cmd_build_32bit_iocbs(scsi_qla_host_t *ha,
++ srb_t *sp,
++ cmd_entry_t *cmd_pkt,
++ uint16_t *req_q_cnt,
++ uint16_t *req_ring_index, request_t **request_ring_ptr,
++ uint16_t *tot_iocbs, uint16_t *tot_dsds)
++{
++ uint16_t avail_dsds;
++ uint32_t *cur_dsd;
++ Scsi_Cmnd *cmd;
++
++ cmd = sp->cmd;
++
++ /* No data transfer */
++ if (cmd->request_bufflen == 0 ||
++ cmd->sc_data_direction == SCSI_DATA_NONE) {
++ cmd_pkt->byte_count = __constant_cpu_to_le32(0);
++ return (QL_STATUS_SUCCESS);
++ }
++
++ cmd_pkt->control_flags |= cpu_to_le16(qla2x00_get_cmd_direction(cmd));
++ sp->dir = cmd_pkt->control_flags &
++ __constant_cpu_to_le16(CF_READ | CF_WRITE);
++
++ /* Three DSDs are available in the command IOCB */
++ avail_dsds = 3;
++ cur_dsd = (uint32_t *)&cmd_pkt->dseg_0_address;
++
++ /* Load data segments */
++ if (cmd->use_sg != 0) {
++ struct scatterlist *cur_seg;
++ struct scatterlist *end_seg;
++ int nseg;
++
++ cur_seg = (struct scatterlist *)cmd->request_buffer;
++ nseg = pci_map_sg(ha->pdev, cur_seg, cmd->use_sg,
++ scsi_to_pci_dma_dir(cmd->sc_data_direction));
++ end_seg = cur_seg + nseg;
++
++ while (cur_seg < end_seg) {
++ int failed;
++ dma_addr_t sle_dma;
++ uint32_t sle_len;
++ cont_entry_t *cont_pkt;
++
++ /* Allocate additional continuation packets? */
++ if (avail_dsds == 0) {
++ *tot_iocbs += 1;
++ failed = qla2x00_check_request_ring(ha,
++ *tot_iocbs,
++ *req_ring_index,
++ req_q_cnt);
++ if (failed) {
++ goto mapped_queuing_error_32;
++ }
++
++ cont_pkt = qla2x00_prep_cont_packet(ha,
++ req_ring_index,
++ request_ring_ptr);
++
++ cur_dsd = (uint32_t *)&cont_pkt->dseg_0_address;
++ avail_dsds = 7;
++ }
++
++ sle_dma = sg_dma_address(cur_seg);
++ sle_len = sg_dma_len(cur_seg);
++
++ /* One entry always consumed */
++ *cur_dsd++ = cpu_to_le32(sle_dma);
++ *cur_dsd++ = cpu_to_le32(sle_len);
++ *tot_dsds += 1;
++ avail_dsds--;
++
++ cur_seg++;
++ }
++ }
++ else {
++ /*
++ * No more than 1 (one) IOCB is needed for this type of request.
++ */
++ dma_addr_t req_dma;
++ uint32_t req_len;
++ struct page *page;
++ unsigned long offset;
++
++ page = virt_to_page(cmd->request_buffer);
++ offset = ((unsigned long)cmd->request_buffer & ~PAGE_MASK);
++ req_dma = pci_map_page(ha->pdev,
++ page,
++ offset,
++ cmd->request_bufflen,
++ scsi_to_pci_dma_dir(cmd->sc_data_direction));
++ req_len = cmd->request_bufflen;
++
++ sp->saved_dma_handle = req_dma;
++
++ /* One entry always consumed */
++ *cur_dsd++ = cpu_to_le32(req_dma);
++ *cur_dsd++ = cpu_to_le32(req_len);
++ *tot_dsds += 1;
++ }
++
++ return (QL_STATUS_SUCCESS);
++
++mapped_queuing_error_32:
++ pci_unmap_sg(ha->pdev, (struct scatterlist *)cmd->request_buffer,
++ cmd->use_sg, scsi_to_pci_dma_dir(cmd->sc_data_direction));
++ return (QL_STATUS_ERROR);
++}
++
++static inline int
++qla2x00_cmd_build_iocb(scsi_qla_host_t *ha,
++ srb_t *sp,
++ cmd_entry_t *cmd_pkt,
++ uint16_t *req_q_cnt,
++ uint16_t *req_ring_index, request_t **request_ring_ptr,
++ uint16_t *tot_iocbs, uint16_t *tot_dsds)
++{
++ int ret;
++
++ ret = QL_STATUS_ERROR;
++
++ if (ha->flags.enable_64bit_addressing) {
++ *((uint32_t *)(&cmd_pkt->entry_type)) =
++ __constant_cpu_to_le32(COMMAND_A64_TYPE);
++ //cmd_pkt->entry_type = COMMAND_A64_TYPE;
++ //cmd_pkt->entry_count = (uint8_t)tot_iocbs;
++ //cmd_pkt->sys_define = (uint8_t)ha->req_ring_index;
++ //cmd_pkt->entry_status = 0;
++
++ ret = qla2x00_cmd_build_64bit_iocbs(ha,
++ sp, cmd_pkt, req_q_cnt, req_ring_index, request_ring_ptr,
++ tot_iocbs, tot_dsds);
++
++ } else {
++ *((uint32_t *)(&cmd_pkt->entry_type)) =
++ __constant_cpu_to_le32(COMMAND_TYPE);
++ //cmd_pkt->entry_type = COMMAND_TYPE;
++ //cmd_pkt->entry_count = (uint8_t)tot_iocbs;
++ //cmd_pkt->sys_define = (uint8_t)ha->req_ring_index;
++ //cmd_pkt->entry_status = 0;
++
++ ret = qla2x00_cmd_build_32bit_iocbs(ha,
++ sp, cmd_pkt, req_q_cnt, req_ring_index, request_ring_ptr,
++ tot_iocbs, tot_dsds);
++ }
++
++ return (ret);
++}
++
++/**
++ * qla2x00_start_scsi() - Send a SCSI command to the ISP
++ * @sp: command to send to the ISP
++ *
++ * Returns non-zero if a failure occured, else zero.
++ */
++int
++qla2x00_start_scsi(srb_t *sp)
++{
++ int ret;
++ unsigned long flags;
++ uint16_t failed;
++ scsi_qla_host_t *ha;
++ fc_lun_t *fclun;
++ Scsi_Cmnd *cmd;
++ uint16_t req_q_cnt;
++ uint16_t req_ring_index;
++ request_t *request_ring_ptr;
++ uint32_t *clr_ptr;
++ uint32_t found;
++ uint32_t index;
++ uint32_t handle;
++ uint16_t tot_iocbs;
++ uint16_t tot_dsds;
++ cmd_entry_t *cmd_pkt;
++ uint32_t timeout;
++
++ device_reg_t *reg;
++ uint16_t reg_flushed;
++
++ ENTER(__func__);
++
++ /* Setup device pointers. */
++ ret = 0;
++ fclun = sp->lun_queue->fclun;
++ ha = fclun->fcport->ha;
++
++ cmd = sp->cmd;
++ reg = ha->iobase;
++
++ DEBUG3(printk("scsi(%ld): cmd=%p sp=%p CDB=%x\n",
++ ha->host_no,
++ cmd, sp, cmd->cmnd[0]));
++
++ /* Send marker if required */
++ if (ha->marker_needed != 0) {
++ if (qla2x00_marker(ha, 0, 0, MK_SYNC_ALL) != QLA2X00_SUCCESS) {
++ return (QL_STATUS_ERROR);
++ }
++ ha->marker_needed = 0;
++ }
++
++ /* Acquire ring specific lock */
++ spin_lock_irqsave(&ha->hardware_lock, flags);
++
++ /* Save ha fields for post-update */
++ req_ring_index = ha->req_ring_index;
++ request_ring_ptr = ha->request_ring_ptr;
++ req_q_cnt = ha->req_q_cnt;
++
++ tot_dsds = 0;
++ tot_iocbs = 1;
++
++ /* Allocate space for an additional IOCB */
++ failed = qla2x00_check_request_ring(ha,
++ tot_iocbs, req_ring_index, &req_q_cnt);
++ if (failed)
++ goto queuing_error;
++
++ /* Check for room in outstanding command list. */
++ found = 0;
++ handle = ha->current_outstanding_cmd;
++ for (index = 1; index < MAX_OUTSTANDING_COMMANDS; index++) {
++ handle++;
++ if (handle == MAX_OUTSTANDING_COMMANDS)
++ handle = 1;
++ if (ha->outstanding_cmds[handle] == 0) {
++ found = 1;
++ ha->current_outstanding_cmd = handle;
++ break;
++ }
++ }
++ if (!found) {
++ DEBUG5(printk("scsi(%ld): Unable to queue command -- NO ROOM "
++ "IN OUTSTANDING ARRAY (req_q_cnt=%lx).\n",
++ ha->host_no,
++ (u_long)ha->req_q_cnt));
++ goto queuing_error;
++ }
++
++ /*
++ * Build command packet.
++ */
++ cmd_pkt = (cmd_entry_t *)request_ring_ptr;
++
++ cmd_pkt->handle = handle;
++
++ /* Zero out remaining portion of packet. */
++ clr_ptr = (uint32_t *)cmd_pkt + 2;
++ for (index = 2; index < REQUEST_ENTRY_SIZE / 4; index++)
++ *clr_ptr++ = 0;
++
++ /* Set target ID */
++#if defined(EXTENDED_IDS)
++ cmd_pkt->target = cpu_to_le16(fclun->fcport->loop_id & 0xFF);
++#else
++ cmd_pkt->target = (uint8_t)fclun->fcport->loop_id;
++#endif
++
++ /* Set LUN number*/
++#if VSA
++ if ((cmd->data_cmnd[0] == 0x26) ||
++ (cmd->data_cmnd[0] == 0xA0) ||
++ (cmd->data_cmnd[0] == 0xCB) ) {
++ cmd_pkt->lun = cpu_to_le16(fclun->lun);
++ } else if ((fclun->fcport->flags & FC_VSA))
++ cmd_pkt->lun = cpu_to_le16(fclun->lun | 0x4000);
++ else
++ cmd_pkt->lun = cpu_to_le16(fclun->lun);
++#else
++ cmd_pkt->lun = cpu_to_le16(fclun->lun);
++#endif
++
++ /* Update tagged queuing modifier */
++ cmd_pkt->control_flags = __constant_cpu_to_le16(CF_SIMPLE_TAG);
++ if (cmd->device->tagged_queue) {
++ switch (cmd->tag) {
++ case HEAD_OF_QUEUE_TAG:
++ cmd_pkt->control_flags =
++ __constant_cpu_to_le16(CF_HEAD_TAG);
++ break;
++ case ORDERED_QUEUE_TAG:
++ cmd_pkt->control_flags =
++ __constant_cpu_to_le16(CF_ORDERED_TAG);
++ break;
++ }
++ }
++
++ /*
++ * Allocate at least 5 (+ QLA_CMD_TIMER_DELTA) seconds for RISC timeout.
++ */
++ timeout = (uint32_t) CMD_TIMEOUT(cmd)/HZ;
++ if (timeout > 65535)
++ cmd_pkt->timeout = __constant_cpu_to_le16(0);
++ if (timeout > 25)
++ cmd_pkt->timeout = cpu_to_le16((uint16_t)timeout -
++ (5 + QLA_CMD_TIMER_DELTA));
++ else
++ cmd_pkt->timeout = cpu_to_le16((uint16_t)timeout);
++
++ /* Load SCSI command packet. */
++ memcpy(cmd_pkt->scsi_cdb, cmd->cmnd, cmd->cmd_len);
++
++ cmd_pkt->byte_count = cpu_to_le32((uint32_t)cmd->request_bufflen);
++
++ /* Load IOCB segments */
++ ret = qla2x00_cmd_build_iocb(ha,
++ sp,
++ cmd_pkt,
++ &req_q_cnt, &req_ring_index, &request_ring_ptr,
++ &tot_iocbs, &tot_dsds);
++ if (ret)
++ goto queuing_error;
++
++ /* Set total data segment count. */
++ cmd_pkt->dseg_count = cpu_to_le16(tot_dsds);
++ cmd_pkt->entry_count = (uint8_t)tot_iocbs;
++
++ /* Update ha fields */
++ ha->req_ring_index = req_ring_index;
++ ha->request_ring_ptr = request_ring_ptr;
++ ha->req_q_cnt = req_q_cnt;
++ ha->req_q_cnt -= tot_iocbs;
++#if defined(IOCB_THROLLE_USAGE)
++ ha->iocb_cnt += tot_iocbs;
++
++ sp->iocb_cnt = tot_iocbs;
++#endif
++
++ /* Add command to the active array */
++ ha->outstanding_cmds[handle] = sp;
++ CMD_HANDLE(sp->cmd) = (unsigned char *)(u_long)handle;
++
++ /* Adjust ring index. */
++ ha->req_ring_index++;
++ if (ha->req_ring_index == REQUEST_ENTRY_CNT) {
++ ha->req_ring_index = 0;
++ ha->request_ring_ptr = ha->request_ring;
++ } else
++ ha->request_ring_ptr++;
++
++ ha->actthreads++;
++ ha->total_ios++;
++ sp->ha = ha;
++ sp->lun_queue->out_cnt++;
++ sp->flags |= SRB_DMA_VALID;
++ sp->state = SRB_ACTIVE_STATE;
++ sp->u_start = jiffies;
++
++ /* Set chip new ring index. */
++ reg_flushed = CACHE_FLUSH(ISP_REQ_Q_IN(reg));
++ WRT_REG_WORD(ISP_REQ_Q_IN(reg), ha->req_ring_index);
++
++ spin_unlock_irqrestore(&ha->hardware_lock, flags);
++ return (QL_STATUS_SUCCESS);
++
++queuing_error:
++ spin_unlock_irqrestore(&ha->hardware_lock, flags);
++ return (QL_STATUS_ERROR);
++}
++
++
++/**
++ * qla2x00_marker() - Send a marker IOCB to the firmware.
++ * @ha: HA context
++ * @loop_id: loop ID
++ * @lun: LUN
++ * @type: marker modifier
++ *
++ * Can be called from both normal and interrupt context.
++ *
++ * Returns non-zero if a failure occured, else zero.
++ */
++int
++__qla2x00_marker(scsi_qla_host_t *ha,
++ uint16_t loop_id,
++ uint16_t lun,
++ uint8_t type)
++{
++ mrk_entry_t *pkt;
++
++ ENTER(__func__);
++
++ pkt = (mrk_entry_t *)qla2x00_req_pkt(ha);
++ if (pkt == NULL) {
++ DEBUG2_3(printk("%s(): **** FAILED ****\n", __func__));
++
++ return (QL_STATUS_ERROR);
++ }
++
++ pkt->entry_type = MARKER_TYPE;
++ pkt->modifier = type;
++
++ if (type != MK_SYNC_ALL) {
++ pkt->lun = cpu_to_le16(lun);
++#if defined(EXTENDED_IDS)
++ pkt->target = cpu_to_le16(loop_id & 0xFF);
++#else
++ pkt->target = (uint8_t)loop_id;
++#endif
++ }
++
++ /* Issue command to ISP */
++ qla2x00_isp_cmd(ha);
++
++ LEAVE(__func__);
++
++ return (QL_STATUS_SUCCESS);
++}
++
++int
++qla2x00_marker(scsi_qla_host_t *ha,
++ uint16_t loop_id,
++ uint16_t lun,
++ uint8_t type)
++{
++ int ret;
++ unsigned long flags = 0;
++
++ spin_lock_irqsave(&ha->hardware_lock, flags);
++ ret = __qla2x00_marker(ha, loop_id, lun, type);
++ spin_unlock_irqrestore(&ha->hardware_lock, flags);
++
++ return (ret);
++}
++
++/**
++ * qla2x00_req_pkt() - Retrieve a request packet from the request ring.
++ * @ha: HA context
++ *
++ * Note: The caller must hold the hardware lock before calling this routine.
++ *
++ * Returns NULL if function failed, else, a pointer to the request packet.
++ */
++request_t *
++qla2x00_req_pkt(scsi_qla_host_t *ha)
++{
++ device_reg_t *reg = ha->iobase;
++ request_t *pkt = NULL;
++ uint16_t cnt;
++ uint32_t *dword_ptr;
++ uint32_t timer;
++ uint16_t req_cnt = 1;
++
++ ENTER(__func__);
++
++ /* Wait 1 second for slot. */
++ for (timer = HZ; timer; timer--) {
++ if ((req_cnt + 2) >= ha->req_q_cnt) {
++ /* Calculate number of free request entries. */
++ cnt = qla2x00_debounce_register(ISP_REQ_Q_OUT(reg));
++ if (ha->req_ring_index < cnt)
++ ha->req_q_cnt = cnt - ha->req_ring_index;
++ else
++ ha->req_q_cnt = REQUEST_ENTRY_CNT -
++ (ha->req_ring_index - cnt);
++ }
++ /* If room for request in request ring. */
++ if ((req_cnt + 2) < ha->req_q_cnt) {
++ ha->req_q_cnt--;
++ pkt = ha->request_ring_ptr;
++
++ /* Zero out packet. */
++ dword_ptr = (uint32_t *)pkt;
++ for (cnt = 0; cnt < REQUEST_ENTRY_SIZE / 4; cnt++)
++ *dword_ptr++ = 0;
++
++ /* Set system defined field. */
++ pkt->sys_define = (uint8_t)ha->req_ring_index;
++
++ /* Set entry count. */
++ pkt->entry_count = 1;
++
++ break;
++ }
++
++ /* Release ring specific lock */
++ spin_unlock(&ha->hardware_lock);
++
++ udelay(2); /* 2 us */
++
++ /* Check for pending interrupts. */
++ /* During init we issue marker directly */
++ if (!ha->marker_needed)
++ qla2x00_poll(ha);
++
++ spin_lock_irq(&ha->hardware_lock);
++ }
++ if (!pkt) {
++ DEBUG2_3(printk("%s(): **** FAILED ****\n", __func__));
++ }
++
++ LEAVE(__func__);
++
++ return (pkt);
++}
++
++/**
++ * qla2x00_ms_req_pkt() - Retrieve a Management Server request packet from
++ * the request ring.
++ * @ha: HA context
++ * @sp: pointer to handle post function call
++ *
++ * Note: The caller must hold the hardware lock before calling this routine.
++ *
++ * Returns NULL if function failed, else, a pointer to the request packet.
++ */
++request_t *
++qla2x00_ms_req_pkt(scsi_qla_host_t *ha, srb_t *sp)
++{
++ device_reg_t *reg = ha->iobase;
++ request_t *pkt = NULL;
++ uint16_t cnt, i, index;
++ uint32_t *dword_ptr;
++ uint32_t timer;
++ uint8_t found = 0;
++ uint16_t req_cnt = 1;
++
++ ENTER(__func__);
++
++ /* Wait 1 second for slot. */
++ for (timer = HZ; timer; timer--) {
++ if ((req_cnt + 2) >= ha->req_q_cnt) {
++ /* Calculate number of free request entries. */
++ cnt = qla2x00_debounce_register(ISP_REQ_Q_OUT(reg));
++ if (ha->req_ring_index < cnt) {
++ ha->req_q_cnt = cnt - ha->req_ring_index;
++ } else {
++ ha->req_q_cnt = REQUEST_ENTRY_CNT -
++ (ha->req_ring_index - cnt);
++ }
++ }
++
++ /* Check for room in outstanding command list. */
++ cnt = ha->current_outstanding_cmd;
++ for (index = 1; index < MAX_OUTSTANDING_COMMANDS; index++) {
++ cnt++;
++ if (cnt == MAX_OUTSTANDING_COMMANDS)
++ cnt = 1;
++
++ if (ha->outstanding_cmds[cnt] == 0) {
++ found = 1;
++ ha->current_outstanding_cmd = cnt;
++ break;
++ }
++ }
++
++ /* If room for request in request ring. */
++ if (found && (req_cnt + 2) < ha->req_q_cnt) {
++ pkt = ha->request_ring_ptr;
++
++ /* Zero out packet. */
++ dword_ptr = (uint32_t *)pkt;
++ for (i = 0; i < REQUEST_ENTRY_SIZE / 4; i++ )
++ *dword_ptr++ = 0;
++
++ DEBUG5(printk("%s(): putting sp=%p in "
++ "outstanding_cmds[%x]\n",
++ __func__,
++ sp, cnt));
++
++ ha->outstanding_cmds[cnt] = sp;
++
++ /* save the handle */
++ CMD_HANDLE(sp->cmd) = (unsigned char *) (u_long) cnt;
++ CMD_SP(sp->cmd) = (void *)sp;
++
++ ha->req_q_cnt--;
++ pkt->handle = (uint32_t)cnt;
++
++ /* Set system defined field. */
++ pkt->sys_define = (uint8_t)ha->req_ring_index;
++ pkt->entry_status = 0;
++
++ break;
++ }
++
++ /* Release ring specific lock */
++ spin_unlock(&ha->hardware_lock);
++ udelay(20);
++
++ /* Check for pending interrupts. */
++ qla2x00_poll(ha);
++
++ spin_lock_irq(&ha->hardware_lock);
++ }
++ if (!pkt) {
++ DEBUG2_3(printk("%s(): **** FAILED ****\n", __func__));
++ }
++
++ LEAVE(__func__);
++
++ return (pkt);
++}
++
++/**
++ * qla2x00_isp_cmd() - Modify the request ring pointer.
++ * @ha: HA context
++ *
++ * Note: The caller must hold the hardware lock before calling this routine.
++ */
++void
++qla2x00_isp_cmd(scsi_qla_host_t *ha)
++{
++ device_reg_t *reg = ha->iobase;
++
++ ENTER(__func__);
++
++ DEBUG5(printk("%s(): IOCB data:\n", __func__));
++ DEBUG5(qla2x00_dump_buffer(
++ (uint8_t *)ha->request_ring_ptr, REQUEST_ENTRY_SIZE));
++
++ /* Adjust ring index. */
++ ha->req_ring_index++;
++ if (ha->req_ring_index == REQUEST_ENTRY_CNT) {
++ ha->req_ring_index = 0;
++ ha->request_ring_ptr = ha->request_ring;
++ } else
++ ha->request_ring_ptr++;
++
++ /* Set chip new ring index. */
++ WRT_REG_WORD(ISP_REQ_Q_IN(reg), ha->req_ring_index);
++
++ LEAVE(__func__);
++}
++
++// TODO: Complete implementation.
++// TODO: Add support for EXTENDED_IDS.
++#ifdef COMPLETE_IMPLEMENTATION
++
++/* MAILBOX IOCB stuff */
++
++/**
++ * qla2x00_send_login_port_iocb() - Login to a device.
++ * @ha: SCSI driver HA context
++ * @ipdev: IP device to login to
++ *
++ * This routine will build and send a mailbox IOCB to login to a fabric port.
++ *
++ * The qla2x00_mailbox_iocb_done() routine will be called upon IOCB
++ * completion, where further processing is performed.
++ *
++ * Returns QL_STATUS_SUCCESS if the operation succeeded.
++ */
++static int
++qla2x00_send_login_port_iocb(scsi_qla_host_t *ha, fcdev_t *device)
++{
++ unsigned long flags = 0;
++ struct mbx_entry *mbxentry;
++
++ DEBUG2(printk("%s(): port ID: %x\n",
++ __func__,
++ device->port_id[2]<<16 |
++ device->port_id[1]<<8 |
++ device->port_id[0]);)
++
++ /* Send marker if required */
++ if (ha->marker_needed != 0) {
++ if (qla2x00_marker(ha, 0, 0, MK_SYNC_ALL) != QLA2X00_SUCCESS)
++ return (QL_STATUS_ERROR);
++ ha->marker_needed = 0;
++ }
++
++ spin_lock_irqsave(&ha->hardware_lock, flags);
++
++ mbxentry = (struct mbx_entry *)qla2x00_req_pkt(ha);
++ if (mbxentry == NULL) {
++ DEBUG2(printk("%s(): failed\n", __func__);)
++
++ spin_unlock_irqrestore(&ha->hardware_lock, flags);
++
++ return (QL_STATUS_ERROR);
++ }
++
++ /* Build fabric login MBX IOCB */
++ mbxentry->entry_type = ET_MAILBOX_COMMAND;
++ mbxentry->entry_count = 1;
++ mbxentry->sys_define1 = SOURCE_SCSI;
++ mbxentry->entry_status = 0;
++ mbxentry->handle = cpu_to_le32(device->dev_id |
++ (MBC_LOGIN_FABRIC_PORT << 16));
++ mbxentry->loop_id = device->loop_id;
++ mbxentry->mb0 = __constant_cpu_to_le16(MBC_LOGIN_FABRIC_PORT);
++ mbxentry->mb1 = cpu_to_le16((device->loop_id << 8) |
++ (MBC_NO_PROCESS_LOGIN |
++ MBC_NO_PLOGI_IF_LOGGED_IN));
++ mbxentry->mb2 = cpu_to_le16(device->port_id[2]);
++ mbxentry->mb3 = cpu_to_le16((device->port_id[1] << 8) |
++ device->port_id[0]);
++ mbxentry->mb6 = __constant_cpu_to_le16(0);
++ mbxentry->mb7 = __constant_cpu_to_le16(0);
++
++ /* Issue command to ISP */
++ qla2x00_isp_cmd(ha);
++
++ spin_unlock_irqrestore(&ha->hardware_lock, flags);
++
++ return (QL_STATUS_SUCCESS);
++}
++
++/**
++ * qla2x00_send_logout_port_iocb() - Logout an FC device.
++ * @ha: SCSI driver HA context
++ * @device: FC device to logout
++ *
++ * This routine will build and send a mailbox IOCB to logout a fabric port.
++ *
++ * The qla2x00_mailbox_iocb_done() routine will be called upon IOCB
++ * completion, where further processing is performed.
++ *
++ * Returns QL_STATUS_SUCCESS if the operation succeeded.
++ */
++static int
++qla2x00_send_logout_port_iocb(scsi_qla_host_t *ha, fcdev_t *device)
++{
++ unsigned long flags = 0;
++ struct mbx_entry *mbxentry;
++
++ DEBUG2(printk("%s(): port ID: %x\n",
++ __func__,
++ device->port_id[2]<<16 |
++ device->port_id[1]<<8 |
++ device->port_id[0]);)
++
++ /* Send marker if required */
++ if (ha->marker_needed != 0) {
++ if (qla2x00_marker(ha, 0, 0, MK_SYNC_ALL) != QLA2X00_SUCCESS)
++ return (QL_STATUS_ERROR);
++ ha->marker_needed = 0;
++ }
++
++ spin_lock_irqsave(&ha->hardware_lock, flags);
++
++ mbxentry = (struct mbx_entry *)qla2x00_req_pkt(ha);
++ if (mbxentry == NULL) {
++ DEBUG3(printk("%s(): failed\n", __func__);)
++
++ spin_unlock_irqrestore(&ha->hardware_lock, flags);
++
++ return (QL_STATUS_ERROR);
++ }
++
++ /* Build fabric logout MBX IOCB */
++ mbxentry->entry_type = ET_MAILBOX_COMMAND;
++ mbxentry->entry_count = 1;
++ mbxentry->sys_define1 = SOURCE_SCSI;
++ mbxentry->entry_status = 0;
++ mbxentry->handle = cpu_to_le32(device->dev_id |
++ (MBC_LOGOUT_FABRIC_PORT << 16));
++ mbxentry->loop_id = device->loop_id;
++ mbxentry->mb0 = __constant_cpu_to_le16(MBC_LOGOUT_FABRIC_PORT);
++ mbxentry->mb1 = cpu_to_le16(device->loop_id << 8);
++ mbxentry->mb2 = __constant_cpu_to_le16(0);
++ mbxentry->mb3 = __constant_cpu_to_le16(0);
++ mbxentry->mb6 = __constant_cpu_to_le16(0);
++ mbxentry->mb7 = __constant_cpu_to_le16(0);
++
++ /* Issue command to ISP */
++ qla2x00_isp_cmd(ha);
++
++ spin_unlock_irqrestore(&ha->hardware_lock, flags);
++
++ return (QL_STATUS_SUCCESS);
++}
++
++/**
++ * qla2x00_mailbox_iocb_done() - Process an mailbox IOCB completion.
++ * @ha: SCSI driver HA context
++ * @mbxentry: completed mailbox IOCB entry
++ *
++ * This routine is currently used for fabric login and logouts only.
++ */
++static void
++qla2x00_mailbox_iocb_done(scsi_qla_host_t *ha, struct mbx_entry *mbxentry)
++{
++ int status;
++ uint16_t cmd;
++ uint16_t index;
++ fcdev *device;
++
++// FIXME: endianess?
++ /* Parse-out originating mailbox command */
++ cmd = MSW(mbxentry->handle);
++
++ DEBUG2(printk("%s: cmd %x, status %x, mb0 %x, mb1 %x, mb2 %x\n",
++ __func__,
++ cmd,
++ mbxentry->status,
++ mbxentry->mb0,
++ mbxentry->mb1,
++ mbxentry->mb2);)
++
++ /* Get device block pointer */
++ index = LSW(mbxentry->handle);
++ if (index >= QLLAN_MAX_IP_DEVICES) {
++ /* Bad handle from ISP */
++ DEBUG3(printk("%s: bad handle from isp\n", __func__);)
++
++ /* TODO: Cleanup??? */
++
++ return;
++ }
++// FIXME FROM HERE!!!
++ ipdev = &ha->ipdev_db[index];
++
++ if (cmd == MBC_LOGOUT_FABRIC_PORT) {
++ /* Check fabric logout completion status */
++ if (/*mbxentry->status == CS_COMPLETE && */
++ mbxentry->mb0 == MBS_COMMAND_COMPLETE) {
++
++ /* Logout successful -- do nothing */
++ }
++ else {
++ DEBUG12(printk("%s: fabric logout failed\n", __func__);)
++ }
++ }
++ else {
++ /* Check fabric login completion status */
++ /* Note: sometimes ISP returns Status=0x30 and MB0=0x4000 */
++ /* Therefore, only check mb0 for now */
++ if (/* mbxentry->status == CS_COMPLETE && */
++ mbxentry->mb0 == MBS_COMMAND_COMPLETE) {
++
++ /* Login successful */
++ ipdev->flags |= IP_DEV_FLAG_PRESENT;
++ }
++ else if (mbxentry->mb0 == MBS_PORT_ID_IN_USE) {
++ /* Different loop ID already assigned to port ID */
++ /* Use the one that is already assigned */
++ qla2x00_free_loopid(ha, ipdev->loop_id);
++ ipdev->loop_id = mbxentry->mb1;
++
++ /* Do logout first and then relogin */
++ qla2x00_ip_send_logout_port_iocb(ha, ipdev, 1);
++ qla2x00_ip_send_login_port_iocb(ha, ipdev, 1);
++ }
++ else if (mbxentry->mb0 == MBS_LOOP_ID_IN_USE) {
++ /* Loop ID already used for different port ID */
++ /* Get a new loop ID and reissue login request */
++ status = qla2x00_reserve_loopid(ha, &ipdev->loop_id);
++ if (status == QL_STATUS_SUCCESS) {
++ qla2x00_ip_send_login_port_iocb(ha, ipdev, 1);
++ }
++ else {
++ DEBUG12(printk("%s: out of loop IDs\n",
++ __func__);)
++
++ qla2x00_free_ip_block(ha, ipdev);
++ }
++ }
++ else {
++ /* Login failed, return resources */
++ DEBUG12(printk("%s: fabric login failed\n", __func__);)
++
++ qla2x00_free_loopid(ha, ipdev->loop_id);
++ qla2x00_free_ip_block(ha, ipdev);
++ }
++ }
++}
++
++#endif
++
++
+--- /dev/null Thu Apr 11 07:25:15 2002
++++ linux-2.5.73-n9560/drivers/scsi/qla2xxx/qla_ip.c Thu Jul 3 15:34:42 2003
+@@ -0,0 +1,1769 @@
++/******************************************************************************
++ * QLOGIC LINUX SOFTWARE
++ *
++ * QLogic ISP2x00 device driver for Linux 2.5.x
++ * Copyright (C) 2003 Qlogic Corporation
++ * (www.qlogic.com)
++ *
++ * This program is free software; you can redistribute it and/or modify it
++ * under the terms of the GNU General Public License as published by the
++ * Free Software Foundation; either version 2, or (at your option) any
++ * later version.
++ *
++ * This program is distributed in the hope that it will be useful, but
++ * WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ * General Public License for more details.
++ *
++ ******************************************************************************/
++
++/****************************************************************************
++ Please see revision.notes for revision history.
++*****************************************************************************/
++
++static __u8 hwbroadcast_addr[ETH_ALEN] = { [0 ... ETH_ALEN-1] = 0xFF };
++
++
++/**
++ * qla2x00_ip_initialize() - Initialize RISC IP support.
++ * @ha: SCSI driver HA context
++ *
++ * Prior to RISC IP initialization, this routine, if necessary, will reset all
++ * buffers in the receive buffer ring.
++ *
++ * Returns TRUE if the RISC IP initialization succeeds.
++ */
++static int
++qla2x00_ip_initialize(scsi_qla_host_t *ha)
++{
++ int i;
++ int status;
++ unsigned long flags;
++ device_reg_t *reg;
++ static mbx_cmd_t mc;
++ mbx_cmd_t *mcp = &mc;
++ struct ip_init_cb *ipinit_cb;
++ dma_addr_t ipinit_cb_dma;
++
++ DEBUG12(printk("%s: enter\n", __func__);)
++
++ status = FALSE;
++
++ /* Initialize IP data in ha */
++ ha->ipdev_db_top = NULL;
++ ha->ipdev_db_bottom = NULL;
++ ha->ipdev_db_next_free = &ha->ipdev_db[0];
++ for (i = 0; i < QLLAN_MAX_IP_DEVICES; i++) {
++ ha->ipdev_db[i].index = i;
++ ha->ipdev_db[i].next = &ha->ipdev_db[i+1];
++ }
++ ha->ipdev_db[QLLAN_MAX_IP_DEVICES-1].next = NULL;
++
++ /* Reset/pack buffers owned by RISC in receive buffer ring */
++ if (ha->rec_entries_in != ha->rec_entries_out) {
++ struct buffer_cb *bcb;
++ uint16_t rec_out;
++ struct risc_rec_entry *rec_entry;
++
++ bcb = ha->receive_buffers;
++ rec_out = ha->rec_entries_out;
++
++ /*
++ * Must locate all RISC owned buffers and pack them in the
++ * buffer ring.
++ */
++ /* between IpBufferOut and IpBufferIN */
++ for (i = 0; i < ha->max_receive_buffers; i++, bcb++) {
++ if (test_bit(BCB_RISC_OWNS_BUFFER, &bcb->state)) {
++ /*
++ * Set RISC owned buffer into receive buffer
++ * ring.
++ */
++ rec_entry = &ha->risc_rec_q[rec_out];
++ rec_entry->handle = bcb->handle;
++ rec_entry->data_addr_low =
++ LSD(bcb->skb_data_dma);
++ rec_entry->data_addr_high =
++ MSD(bcb->skb_data_dma);
++ if (rec_out < IP_BUFFER_QUEUE_DEPTH - 1)
++ rec_out++;
++ else
++ rec_out = 0;
++ }
++ }
++
++ /* Verify correct number of RISC owned buffers were found */
++ if (rec_out != ha->rec_entries_in) {
++ /* Incorrect number of RISC owned buffers?? */
++ DEBUG12(printk("%s: incorrect number of RISC "
++ "owned buffers, disable IP\n",
++ __func__);)
++ ha->flags.enable_ip = FALSE;
++ return (FALSE);
++ }
++ }
++
++ /* Init RISC buffer pointer */
++ spin_lock_irqsave(&ha->hardware_lock, flags);
++ reg = ha->iobase;
++ WRT_REG_WORD(®->mailbox8, ha->rec_entries_in);
++ spin_unlock_irqrestore(&ha->hardware_lock, flags);
++
++ /* Wait for a ready state from the adapter */
++ while (!ha->init_done || ha->dpc_active) {
++ set_current_state(TASK_INTERRUPTIBLE);
++ schedule_timeout(HZ);
++ }
++
++ /* Setup IP initialization control block */
++ ipinit_cb = pci_alloc_consistent(ha->pdev,
++ sizeof(struct ip_init_cb),
++ &ipinit_cb_dma);
++ if (ipinit_cb) {
++ memset(ipinit_cb, 0, sizeof(struct ip_init_cb));
++ ipinit_cb->version = IPICB_VERSION;
++ ipinit_cb->firmware_options =
++ __constant_cpu_to_le16(
++ IPICB_OPTION_NO_BROADCAST_FASTPOST |
++ IPICB_OPTION_64BIT_ADDRESSING);
++ ipinit_cb->header_size = cpu_to_le16(ha->header_size);
++ ipinit_cb->mtu = cpu_to_le16((uint16_t)ha->mtu);
++ ipinit_cb->receive_buffer_size =
++ cpu_to_le16((uint16_t)ha->receive_buff_data_size);
++ ipinit_cb->receive_queue_size =
++ __constant_cpu_to_le16(IP_BUFFER_QUEUE_DEPTH);
++ ipinit_cb->low_water_mark =
++ __constant_cpu_to_le16(IPICB_LOW_WATER_MARK);
++ ipinit_cb->receive_queue_addr[0] =
++ cpu_to_le16(LSW(ha->risc_rec_q_dma));
++ ipinit_cb->receive_queue_addr[1] =
++ cpu_to_le16(MSW(ha->risc_rec_q_dma));
++ ipinit_cb->receive_queue_addr[2] =
++ cpu_to_le16(LSW(MSD(ha->risc_rec_q_dma)));
++ ipinit_cb->receive_queue_addr[3] =
++ cpu_to_le16(MSW(MSD(ha->risc_rec_q_dma)));
++ ipinit_cb->receive_queue_in = cpu_to_le16(ha->rec_entries_out);
++ ipinit_cb->fast_post_count =
++ __constant_cpu_to_le16(IPICB_FAST_POST_COUNT);
++ ipinit_cb->container_count =
++ __constant_cpu_to_le16(IPICB_BUFFER_CONTAINER_COUNT);
++ ipinit_cb->resource_allocation =
++ __constant_cpu_to_le16(IPICB_IOCB_RESERVE_COUNT);
++
++ /* Issue mailbox command to initialize IP firmware */
++ mcp->mb[0] = MBC_INITIALIZE_IP;
++ mcp->mb[2] = MSW(ipinit_cb_dma);
++ mcp->mb[3] = LSW(ipinit_cb_dma);
++ mcp->mb[6] = MSW(MSD(ipinit_cb_dma));
++ mcp->mb[7] = LSW(MSD(ipinit_cb_dma));
++ mcp->out_mb = MBX_7|MBX_6|MBX_3|MBX_2|MBX_0;
++ mcp->in_mb = MBX_0;
++ mcp->tov = 30;
++ mcp->buf_size = sizeof(struct ip_init_cb);
++ mcp->flags = MBX_DMA_OUT;
++
++ status = qla2x00_mailbox_command(ha, mcp);
++ if (status == QL_STATUS_SUCCESS) {
++ /* IP initialization successful */
++ DEBUG12(printk("%s: successful\n", __func__);)
++
++ ha->flags.enable_ip = TRUE;
++
++ /* Force database update */
++ set_bit(LOOP_RESYNC_NEEDED, &ha->dpc_flags);
++ set_bit(LOCAL_LOOP_UPDATE, &ha->dpc_flags);
++ set_bit(REGISTER_FC4_NEEDED, &ha->dpc_flags);
++
++ /* qla2x00_loop_resync(ha); */
++ if (ha->dpc_wait && !ha->dpc_active) {
++ up(ha->dpc_wait);
++ }
++ status = TRUE;
++ }
++ else {
++ DEBUG12(printk("%s: MBC_INITIALIZE_IP "
++ "failed %x MB0 %x\n",
++ __func__,
++ status,
++ mcp->mb[0]);)
++ status = FALSE;
++ }
++ pci_free_consistent(ha->pdev, sizeof(struct ip_init_cb),
++ ipinit_cb, ipinit_cb_dma);
++
++ }
++ else {
++ DEBUG12(printk("%s: memory allocation error\n", __func__);)
++ }
++
++ return (status);
++}
++
++/**
++ * qla2x00_ip_send_complete() - Handle IP send completion.
++ * @ha: SCSI driver HA context
++ * @handle: handle to completed send_cb
++ * @comp_status: Firmware completion status of send_cb
++ *
++ * Upon cleanup of the internal active-scb queue, the IP driver is notified of
++ * the completion.
++ */
++static void
++qla2x00_ip_send_complete(scsi_qla_host_t *ha,
++ uint32_t handle, uint16_t comp_status)
++{
++ struct send_cb *scb;
++
++ /* Set packet pointer from queue entry handle */
++ if (handle < MAX_SEND_PACKETS) {
++ scb = ha->active_scb_q[handle];
++ if (scb) {
++ ha->ipreq_cnt--;
++ ha->active_scb_q[handle] = NULL;
++
++ scb->comp_status = comp_status;
++ pci_unmap_single(ha->pdev,
++ scb->skb_data_dma,
++ scb->skb->len,
++ PCI_DMA_TODEVICE);
++
++ /* Return send packet to IP driver */
++ (*ha->send_completion_routine)(scb);
++ return;
++ }
++ }
++
++ /* Invalid handle from RISC, reset RISC firmware */
++ printk(KERN_WARNING
++ "%s: Bad IP send handle %x - aborting ISP\n",
++ __func__, handle);
++
++ set_bit(ISP_ABORT_NEEDED, &ha->dpc_flags);
++}
++
++/**
++ * qla2x00_ip_receive() - Handle IP receive IOCB.
++ * @ha: SCSI driver HA context
++ * @pkt: RISC IP receive packet
++ *
++ * Upon preparation of one or more buffer_cbs, the IP driver is notified of
++ * the received packet.
++ */
++static void
++qla2x00_ip_receive(scsi_qla_host_t *ha, response_t *pkt)
++{
++ uint32_t handle;
++ uint32_t packet_size;
++ uint16_t linked_bcb_cnt;
++ uint32_t rec_data_size;
++ uint16_t comp_status;
++ struct buffer_cb *bcb;
++ struct buffer_cb *nbcb;
++ struct ip_rec_entry *iprec_entry;
++
++ DEBUG12(printk("%s: enter\n", __func__);)
++
++ iprec_entry = (struct ip_rec_entry *)pkt;
++ comp_status = le16_to_cpu(iprec_entry->comp_status);
++
++ /* If split buffer, set header size for 1st buffer */
++ if (comp_status & IPREC_STATUS_SPLIT_BUFFER)
++ rec_data_size = ha->header_size;
++ else
++ rec_data_size = ha->receive_buff_data_size;
++
++ handle = iprec_entry->buffer_handles[0];
++ if (handle >= ha->max_receive_buffers) {
++ /* Invalid handle from RISC, reset RISC firmware */
++ printk(KERN_WARNING
++ "%s: Bad IP buffer handle %x (> buffer_count)...Post "
++ "ISP Abort\n",
++ __func__,
++ handle);
++ set_bit(ISP_ABORT_NEEDED, &ha->dpc_flags);
++ return;
++ }
++
++ bcb = &ha->receive_buffers[handle];
++
++ if (!test_and_clear_bit(BCB_RISC_OWNS_BUFFER, &bcb->state)) {
++ /* Invalid handle from RISC, reset RISC firmware */
++ printk(KERN_WARNING
++ "%s: Bad IP buffer handle %x (!RISC_owned)...Post "
++ "ISP Abort\n",
++ __func__,
++ handle);
++ set_bit(ISP_ABORT_NEEDED, &ha->dpc_flags);
++ return;
++ }
++
++ packet_size = le16_to_cpu(iprec_entry->sequence_length);
++ bcb->comp_status = comp_status;
++ bcb->packet_size = packet_size;
++ nbcb = bcb;
++
++ /* Prepare any linked buffers */
++ for (linked_bcb_cnt = 1; ; linked_bcb_cnt++) {
++ if (packet_size > rec_data_size) {
++ nbcb->rec_data_size = rec_data_size;
++ packet_size -= rec_data_size;
++
++ /*
++ * If split buffer, only use header size on 1st buffer
++ */
++ rec_data_size = ha->receive_buff_data_size;
++
++ handle = iprec_entry->buffer_handles[linked_bcb_cnt];
++ if (handle >= ha->max_receive_buffers) {
++ /*
++ * Invalid handle from RISC reset RISC firmware
++ */
++ printk(KERN_WARNING
++ "%s: Bad IP buffer handle %x (> "
++ "buffer_count - PS)...Post ISP Abort\n",
++ __func__,
++ handle);
++ set_bit(ISP_ABORT_NEEDED, &ha->dpc_flags);
++ return;
++ }
++ nbcb->next_bcb = &ha->receive_buffers[handle];
++ nbcb = nbcb->next_bcb;
++
++ if (!test_and_clear_bit(BCB_RISC_OWNS_BUFFER,
++ &nbcb->state)) {
++ /*
++ * Invalid handle from RISC reset RISC firmware
++ */
++ printk(KERN_WARNING
++ "%s: Bad IP buffer handle %x "
++ "(!RISC_owned - PS)...Post ISP Abort\n",
++ __func__,
++ handle);
++ set_bit(ISP_ABORT_NEEDED, &ha->dpc_flags);
++ return;
++ }
++ }
++ else {
++ /* Single buffer_cb */
++ nbcb->rec_data_size = packet_size;
++ nbcb->next_bcb = NULL;
++ break;
++ }
++ }
++
++ /* Check for incoming ARP packet with matching IP address */
++ if (le16_to_cpu(iprec_entry->service_class) == 0) {
++ uint8_t port_id[3];
++ struct ip_device *ipdev;
++ struct packet_header *packethdr;
++
++ packethdr = (struct packet_header *)bcb->skb_data;
++
++ /* Scan list of IP devices to see if login needed */
++ for (ipdev = ha->ipdev_db_top; ipdev; ipdev = ipdev->next) {
++ if (!memcmp(&ipdev->port_name[2],
++ packethdr->networkh.s.na.addr, ETH_ALEN)) {
++ /* Device already in IP list, skip login */
++ goto skip_device_login;
++ }
++ }
++
++ /* Device not in list, need to do login */
++ port_id[2] = iprec_entry->s_idhigh;
++// FIXME: endianess?
++ port_id[1] = MSB(iprec_entry->s_idlow);
++ port_id[0] = LSB(iprec_entry->s_idlow);
++
++ /* Make sure its not a local device */
++ if (port_id[2] == ha->d_id.b.domain &&
++ port_id[1] == ha->d_id.b.area) {
++
++ goto skip_device_login;
++ }
++
++ if (qla2x00_add_new_ip_device(ha,
++ PUBLIC_LOOP_DEVICE,
++ port_id,
++ packethdr->networkh.s.fcaddr,
++ TRUE,
++ 1) == QL_STATUS_FATAL_ERROR) {
++
++ /* Fatal error, reinitialize */
++ set_bit(ISP_ABORT_NEEDED, &ha->dpc_flags);
++ }
++
++ }
++
++skip_device_login:
++
++ /* Pass received packet to IP driver */
++ bcb->linked_bcb_cnt = linked_bcb_cnt;
++ (*ha->receive_packets_routine)(ha->receive_packets_context, bcb);
++
++ /* Keep track of RISC buffer pointer (for IP reinit) */
++ ha->rec_entries_out += linked_bcb_cnt;
++ if (ha->rec_entries_out >= IP_BUFFER_QUEUE_DEPTH)
++ ha->rec_entries_out -= IP_BUFFER_QUEUE_DEPTH;
++}
++
++/**
++ * qla2x00_ip_receive_fastpost() - Handle IP receive fastpost.
++ * @ha: SCSI driver HA context
++ * @type: RISC fastpost type
++ *
++ * Upon preparation of one or more buffer_cbs, the IP driver is notified of
++ * the received packet.
++ */
++static void
++qla2x00_ip_receive_fastpost(scsi_qla_host_t *ha, uint16_t type)
++{
++ uint32_t handle;
++ uint32_t packet_size;
++ uint16_t linked_bcb_cnt;
++ uint32_t rec_data_size;
++ volatile uint16_t *next_mb;
++ device_reg_t *reg = ha->iobase;
++ struct buffer_cb *bcb;
++ struct buffer_cb *nbcb;
++
++ DEBUG12(printk("%s: enter\n", __func__);)
++
++ next_mb = ®->mailbox10;
++
++ /* If split buffer, set header size for 1st buffer */
++ if (type == MBA_IP_RECEIVE_COMPLETE_SPLIT)
++ rec_data_size = ha->header_size;
++ else
++ rec_data_size = ha->receive_buff_data_size;
++
++ handle = RD_REG_WORD(next_mb);
++ if (handle >= ha->max_receive_buffers) {
++ goto invalid_handle;
++ }
++
++ bcb = &ha->receive_buffers[handle];
++
++ if (!test_and_clear_bit(BCB_RISC_OWNS_BUFFER, &bcb->state)) {
++ goto invalid_handle;
++ }
++
++ packet_size = RD_REG_WORD(®->mailbox3);
++ /* Fastpost entries are always successfully transferred */
++ bcb->comp_status = CS_COMPLETE;
++ bcb->packet_size = packet_size;
++ nbcb = bcb;
++
++ /* Prepare any linked buffers */
++ for (linked_bcb_cnt = 1; ; linked_bcb_cnt++) {
++ if (packet_size > rec_data_size) {
++ nbcb->rec_data_size = rec_data_size;
++ packet_size -= rec_data_size;
++ /*
++ * If split buffer, only use header size on 1st buffer
++ */
++ rec_data_size = ha->receive_buff_data_size;
++
++ next_mb++;
++ handle = RD_REG_WORD(next_mb);
++ if (handle >= ha->max_receive_buffers) {
++invalid_handle:
++ printk(KERN_WARNING
++ "%s: bad IP receive fast post handle "
++ "%x\n",
++ __func__,
++ handle);
++ set_bit(ISP_ABORT_NEEDED, &ha->dpc_flags);
++ return;
++ }
++
++ nbcb->next_bcb = &ha->receive_buffers[handle];
++ nbcb = nbcb->next_bcb;
++
++ if (!test_and_clear_bit(BCB_RISC_OWNS_BUFFER,
++ &nbcb->state)) {
++ goto invalid_handle;
++ }
++ }
++ else {
++ /* Single buffer_cb */
++ nbcb->rec_data_size = packet_size;
++ nbcb->next_bcb = NULL;
++ break;
++ }
++ }
++
++ /* Pass received packet to IP driver */
++ bcb->linked_bcb_cnt = linked_bcb_cnt;
++ (*ha->receive_packets_routine)(ha->receive_packets_context, bcb);
++
++ /* Keep track of RISC buffer pointer (for IP reinit) */
++ ha->rec_entries_out += linked_bcb_cnt;
++ if (ha->rec_entries_out >= IP_BUFFER_QUEUE_DEPTH)
++ ha->rec_entries_out -= IP_BUFFER_QUEUE_DEPTH;
++}
++
++/**
++ * qla2x00_convert_to_arp() - Convert an IP send packet to an ARP packet
++ * @ha: SCSI driver HA context
++ * @scb: The send_cb structure to convert
++ *
++ * Returns TRUE if conversion successful.
++ */
++static int
++qla2x00_convert_to_arp(scsi_qla_host_t *ha, struct send_cb *scb)
++{
++ struct sk_buff *skb;
++ struct packet_header *packethdr;
++ struct arp_header *arphdr;
++ struct ip_header *iphdr;
++
++ DEBUG12(printk("%s: convert packet to ARP\n", __func__);)
++
++ skb = scb->skb;
++ packethdr = scb->header;
++ arphdr = (struct arp_header *)skb->data;
++ iphdr = (struct ip_header *)skb->data;
++
++ if (packethdr->snaph.ethertype == __constant_htons(ETH_P_IP)) {
++ /* Convert IP packet to ARP packet */
++ packethdr->networkh.d.na.naa = NAA_IEEE_MAC_TYPE;
++ packethdr->networkh.d.na.unused = 0;
++ memcpy(packethdr->networkh.d.na.addr,
++ hwbroadcast_addr, ETH_ALEN);
++ packethdr->snaph.ethertype = __constant_htons(ETH_P_ARP);
++
++ arphdr->ar_tip = iphdr->iph.daddr;
++ arphdr->ar_sip = iphdr->iph.saddr;
++ arphdr->arph.ar_hrd = __constant_htons(ARPHRD_IEEE802);
++ arphdr->arph.ar_pro = __constant_htons(ETH_P_IP);
++ arphdr->arph.ar_hln = ETH_ALEN;
++ arphdr->arph.ar_pln = sizeof(iphdr->iph.daddr); /* 4 */
++ arphdr->arph.ar_op = __constant_htons(ARPOP_REQUEST);
++ memcpy(arphdr->ar_sha, packethdr->networkh.s.na.addr, ETH_ALEN);
++ memset(arphdr->ar_tha, 0, ETH_ALEN);
++
++ skb->len = sizeof(struct arp_header);
++
++ return (TRUE);
++ }
++ else {
++ return (FALSE);
++ }
++}
++
++/**
++ * qla2x00_get_ip_loopid() - Retrieve loop id of an IP device.
++ * @ha: SCSI driver HA context
++ * @packethdr: IP device to remove
++ * @loop_id: loop id of discovered device
++ *
++ * This routine will interrogate the packet header to determine if the sender is
++ * in the list of active IP devices. The first two bytes of the destination
++ * address will be modified to match the port name stored in the active IP
++ * device list.
++ *
++ * Returns TRUE if a valid loop id is returned.
++ */
++static int
++qla2x00_get_ip_loopid(scsi_qla_host_t *ha,
++ struct packet_header *packethdr, uint8_t *loop_id)
++{
++ struct ip_device *ipdev;
++
++ /* Scan list of logged in IP devices for match */
++ for (ipdev = ha->ipdev_db_top; ipdev; ipdev = ipdev->next) {
++ if (memcmp(&ipdev->port_name[2],
++ &(packethdr->networkh.d.fcaddr[2]), ETH_ALEN))
++ continue;
++
++ /* Found match, return loop ID */
++ *loop_id = (uint8_t)ipdev->loop_id;
++
++ /* Update first 2 bytes of port name */
++ packethdr->networkh.d.fcaddr[0] = ipdev->port_name[0];
++ packethdr->networkh.d.fcaddr[1] = ipdev->port_name[1];
++
++ if (ipdev != ha->ipdev_db_top) {
++ /* Device not at top, move it to top of list */
++ /* Unhook it first */
++ if (ipdev == ha->ipdev_db_bottom) {
++ ha->ipdev_db_bottom = ipdev->last;
++ ipdev->last->next = NULL;
++ }
++ else {
++ ipdev->last->next = ipdev->next;
++ ipdev->next->last = ipdev->last;
++ }
++
++ /* Now put it at top of list */
++ ipdev->next = ha->ipdev_db_top;
++ ipdev->last = NULL;
++ ha->ipdev_db_top->last = ipdev;
++ ha->ipdev_db_top = ipdev;
++ }
++ return (TRUE);
++ }
++
++ /* Check for broadcast packet */
++ if (!memcmp(packethdr->networkh.d.na.addr,
++ hwbroadcast_addr, ETH_ALEN)) {
++ /* Broadcast packet, return broadcast loop ID */
++ *loop_id = BROADCAST;
++
++ /* Update destination NAA of header */
++ packethdr->networkh.d.na.naa = NAA_IEEE_MAC_TYPE;
++ packethdr->networkh.d.na.unused = 0;
++
++ return (TRUE);
++ }
++
++ /* Check for multicast packet */
++ if (packethdr->networkh.d.na.addr[0] & 0x01) {
++ /* Use broadcast loop ID for multicast packets */
++ *loop_id = BROADCAST;
++
++ /* Update destination NAA of header */
++ packethdr->networkh.d.na.naa = NAA_IEEE_MAC_TYPE;
++ packethdr->networkh.d.na.unused = 0;
++
++ return (TRUE);
++ }
++
++ /* TODO */
++ /* Try sending FARP IOCB to request login */
++
++ DEBUG12(printk("%s: ID not found for "
++ "XX XX %02x %02x %02x %02x %02x %02x\n",
++ __func__,
++ packethdr->networkh.d.na.addr[0],
++ packethdr->networkh.d.na.addr[1],
++ packethdr->networkh.d.na.addr[2],
++ packethdr->networkh.d.na.addr[3],
++ packethdr->networkh.d.na.addr[4],
++ packethdr->networkh.d.na.addr[5]);)
++
++ return (FALSE);
++}
++
++/**
++ * qla2x00_reserve_loopid() - Reserve an unused public loop id.
++ * @ha: SCSI driver HA context
++ * @loop_id: loop id reserved
++ *
++ * Returns QL_STATUS_SUCCESS if a valid loop id is returned.
++ */
++static int
++qla2x00_reserve_loopid(scsi_qla_host_t *ha, uint16_t *loop_id)
++{
++ int i;
++
++ /* Look for unused loop ID */
++ for (i = ha->min_external_loopid; i < ha->max_public_loop_ids; i++) {
++ if (ha->fabricid[i].in_use)
++ continue;
++
++ /* Found free loop ID */
++ ha->fabricid[i].in_use = TRUE;
++ *loop_id = i;
++
++ DEBUG12(printk("%s: assigned loop ID %x\n",
++ __func__,
++ *loop_id);)
++
++ return (QL_STATUS_SUCCESS);
++ }
++
++ /* Out of loop IDs */
++ *loop_id = ha->max_public_loop_ids + 1; /* Set out of range */
++
++ DEBUG12(printk("%s: out of loop IDs\n", __func__);)
++
++ return (QL_STATUS_RESOURCE_ERROR);
++}
++
++/**
++ * qla2x00_free_loopid() - Free a public loop id.
++ * @ha: SCSI driver HA context
++ * @loop_id: loop id to free
++ */
++static void
++qla2x00_free_loopid(scsi_qla_host_t *ha, uint16_t loop_id)
++{
++ if (loop_id < ha->max_public_loop_ids) {
++ ha->fabricid[loop_id].in_use = FALSE;
++ DEBUG12(printk("%s: free loop ID %x\n",
++ __func__,
++ loop_id);)
++ }
++ else {
++ DEBUG12(printk("%s: loop ID %x out of range\n",
++ __func__,
++ loop_id);)
++ }
++}
++
++
++/**
++ * qla2x00_add_new_ip_device() - Add a new IP capable device to the list.
++ * @ha: SCSI driver HA context
++ * @loop_id: loop id, if a private loop, of the new device
++ * @port_id: port id of the new device
++ * @port_name: port name of the new device
++ * @force_add: should the function force the addition of the device
++ * @ha_locked: Flag indicating if the function is called with the hardware lock
++ *
++ * Prior to RISC IP initialization, this routine, if necessary, will reset all
++ * buffers in the receive buffer ring.
++ *
++ * Returns QL_STATUS_SUCCESS if there were no errors adding the device.
++ */
++static int
++qla2x00_add_new_ip_device(scsi_qla_host_t *ha,
++ uint16_t loop_id,
++ uint8_t *port_id,
++ uint8_t *port_name,
++ int force_add,
++ uint32_t ha_locked)
++{
++ int status;
++ struct ip_device *ipdev;
++
++ /* Get free IP device block */
++ status = qla2x00_reserve_ip_block(ha, &ipdev);
++ if (status == QL_STATUS_RESOURCE_ERROR) {
++ if (!force_add)
++ return (status);
++
++ /*
++ * Out of IP blocks, bump public device at bottom of list
++ */
++ DEBUG12(printk("%s: bump device from IP list\n", __func__);)
++
++ for (ipdev = ha->ipdev_db_bottom; ipdev; ipdev = ipdev->last) {
++ if (!(ipdev->flags & IP_DEV_FLAG_PUBLIC_DEVICE))
++ continue;
++
++ /* Do fabric logout and free loop ID */
++ qla2x00_ip_send_logout_port_iocb(ha, ipdev, ha_locked);
++ qla2x00_free_loopid(ha, ipdev->loop_id);
++
++ /* Move device to top of list */
++ qla2x00_free_ip_block(ha, ipdev);
++ status = qla2x00_reserve_ip_block(ha, &ipdev);
++ break;
++ }
++ if (status != QL_STATUS_SUCCESS)
++ return (status);
++ }
++
++ /* Save IP port name */
++ memcpy(ipdev->port_name, port_name, WWN_SIZE);
++
++ if (loop_id != PUBLIC_LOOP_DEVICE) {
++ /* Private loop device */
++ ipdev->loop_id = loop_id;
++ ipdev->flags = IP_DEV_FLAG_PRESENT;
++
++ DEBUG12(printk("%s: WWN:%02x%02x%02x%02x%02x%02x%02x%02x, "
++ "LoopID:%x\n",
++ __func__,
++ ipdev->port_name[0],
++ ipdev->port_name[1],
++ ipdev->port_name[2],
++ ipdev->port_name[3],
++ ipdev->port_name[4],
++ ipdev->port_name[5],
++ ipdev->port_name[6],
++ ipdev->port_name[7],
++ ipdev->loop_id);)
++ }
++ else {
++ /* Public device */
++ /* Reserve public loop ID, save it in database */
++ status = qla2x00_reserve_loopid(ha, &ipdev->loop_id);
++ if (status == QL_STATUS_RESOURCE_ERROR) {
++ struct ip_device *ipdev_bump;
++
++ if (!force_add) {
++ /* Failed to get loop ID */
++ DEBUG12(printk("%s: failed to get loop ID\n",
++ __func__);)
++ qla2x00_free_ip_block(ha, ipdev);
++
++ return (status);
++ }
++
++ /*
++ * Out of loop IDs, bump public device at bottom of
++ * list.
++ */
++ DEBUG12(printk("%s: bump device from IP list\n",
++ __func__);)
++
++ for (ipdev_bump = ha->ipdev_db_bottom;
++ ipdev_bump;
++ ipdev_bump = ipdev_bump->last) {
++
++ if (!(ipdev_bump->flags &
++ IP_DEV_FLAG_PUBLIC_DEVICE))
++ continue;
++
++ /*
++ * Do fabric logout, steal loop ID, free bumped
++ * IP block.
++ */
++ qla2x00_ip_send_logout_port_iocb(ha,
++ ipdev_bump, ha_locked);
++ ipdev->loop_id = ipdev_bump->loop_id;
++ qla2x00_free_ip_block(ha, ipdev_bump);
++
++ status = QL_STATUS_SUCCESS;
++ break;
++ }
++
++ if (status != QL_STATUS_SUCCESS) {
++ /* Failed to get loop ID */
++ DEBUG12(printk("%s: failed to get loop ID\n",
++ __func__);)
++ qla2x00_free_ip_block(ha, ipdev);
++
++ return (status);
++ }
++ }
++
++ /* Save device data */
++ ipdev->port_id[0] = port_id[0];
++ ipdev->port_id[1] = port_id[1];
++ ipdev->port_id[2] = port_id[2];
++ ipdev->flags = IP_DEV_FLAG_PUBLIC_DEVICE;
++
++ /* Login public device */
++ status = qla2x00_ip_send_login_port_iocb(ha, ipdev, ha_locked);
++ if (status == QL_STATUS_SUCCESS) {
++ DEBUG12(printk("%s: "
++ "WWN:%02x%02x%02x%02x%02x%02x%02x%02x, "
++ "LoopID:%x, PortID:%x\n",
++ __func__,
++ ipdev->port_name[0],
++ ipdev->port_name[1],
++ ipdev->port_name[2],
++ ipdev->port_name[3],
++ ipdev->port_name[4],
++ ipdev->port_name[5],
++ ipdev->port_name[6],
++ ipdev->port_name[7],
++ ipdev->loop_id,
++ ipdev->port_id[2]<<16 |
++ ipdev->port_id[1]<<8 |
++ ipdev->port_id[0]);)
++ }
++ else {
++ /* Login failed, return resources */
++ qla2x00_free_loopid(ha, ipdev->loop_id);
++ qla2x00_free_ip_block(ha, ipdev);
++ }
++ }
++
++ return (status);
++}
++
++/**
++ * qla2x00_free_ip_block() - Remove an IP device from the active IP list.
++ * @ha: SCSI driver HA context
++ * @ipdev: IP device to remove
++ */
++static void
++qla2x00_free_ip_block(scsi_qla_host_t *ha, struct ip_device *ipdev)
++{
++ /* Unhook IP device block from active list */
++ if (ipdev->last == NULL)
++ ha->ipdev_db_top = ipdev->next;
++ else
++ ipdev->last->next = ipdev->next;
++
++ if (ipdev->next == NULL)
++ ha->ipdev_db_bottom = ipdev->last;
++ else
++ ipdev->next->last = ipdev->last;
++
++ /* Add IP device block to free list */
++ ipdev->next = ha->ipdev_db_next_free;
++ ha->ipdev_db_next_free = ipdev;
++}
++
++/**
++ * qla2x00_reserve_ip_block() - Move an IP device to the IP device list.
++ * @ha: SCSI driver HA context
++ * @ipdevblk: reserved IP device to add
++ *
++ * This routine will move the unused @ipdevblk from the free list to the top of
++ * the active IP device list.
++ *
++ * Returns QL_STATUS_SUCCESS if the operation succeeded.
++ */
++static int
++qla2x00_reserve_ip_block(scsi_qla_host_t *ha, struct ip_device **ipdevblk)
++{
++ struct ip_device *ipdev;
++
++ /* Get free IP device block */
++ ipdev = ha->ipdev_db_next_free;
++ if (ipdev) {
++ /* Remove IP device block from free list */
++ ha->ipdev_db_next_free = ipdev->next;
++
++ /* Add IP device block to top of IP device list */
++ ipdev->next = ha->ipdev_db_top;
++ ipdev->last = NULL;
++ if (ha->ipdev_db_top == NULL)
++ ha->ipdev_db_bottom = ipdev;
++ else
++ ha->ipdev_db_top->last = ipdev;
++ ha->ipdev_db_top = ipdev;
++
++ *ipdevblk = ipdev;
++
++ return (QL_STATUS_SUCCESS);
++ }
++
++ /* Out of IP blocks */
++ DEBUG12(printk("%s: out of IP blocks\n", __func__);)
++
++ return (QL_STATUS_RESOURCE_ERROR);
++}
++
++/**
++ * qla2x00_update_ip_device_data() - Update IP device list with driver data.
++ * @ha: SCSI driver HA context
++ * @fcdev: SCSI driver FC device list
++ *
++ * This routine searchs for the device port name in the current IP database and
++ * updates the IP device list.
++ *
++ * If device found:
++ * - Handle device movement between public and private loops
++ * - Mark device present
++ * - Log in device if necessary
++ * If device not found and private loop device:
++ * - Insert the new entry in database
++ * If device not found and public IP device:
++ * - Ignore device until packet received from device
++ *
++ * Returns QL_STATUS_SUCCESS if the operation succeeded.
++ */
++static int
++qla2x00_update_ip_device_data(scsi_qla_host_t *ha, fcdev_t *fcdev)
++{
++ int status;
++ struct ip_device *ipdev;
++
++ status = 0;
++
++ if (!ha->flags.enable_ip) {
++ /* IP not enabled, just return */
++ return (QL_STATUS_SUCCESS);
++ }
++
++ /* Scan list of IP devices for match */
++ for (ipdev = ha->ipdev_db_top; ipdev; ipdev = ipdev->next) {
++ if (memcmp(fcdev->wwn, ipdev->port_name, WWN_SIZE))
++ continue;
++
++ /* Found device in IP device list */
++ DEBUG12(printk("%s: already in IP list, port ID: %x\n",
++ __func__,
++ ipdev->port_id[2] << 16 |
++ ipdev->port_id[1] << 8 |
++ ipdev->port_id[0]);)
++
++ if (fcdev->flag != DEV_PUBLIC &&
++ !(ipdev->flags & IP_DEV_FLAG_PUBLIC_DEVICE)) {
++ /*
++ * Device on private loop now, was on private loop
++ * before.
++ */
++ DEBUG12(printk("%s: was private loop, now "
++ "private loop\n",
++ __func__);)
++
++ /* Update private loop ID in database */
++ ipdev->loop_id = fcdev->loop_id;
++ ipdev->flags |= IP_DEV_FLAG_PRESENT;
++ }
++ else if (fcdev->flag != DEV_PUBLIC &&
++ (ipdev->flags & IP_DEV_FLAG_PUBLIC_DEVICE)) {
++ /*
++ * Device on private loop now, was public device before.
++ */
++ DEBUG12(printk("%s: was public, now private loop\n",
++ __func__);)
++
++ /*
++ * If loop ID changed, logout device and free loop ID.
++ */
++ if (fcdev->loop_id != ipdev->loop_id) {
++ qla2x00_ip_send_logout_port_iocb(ha, ipdev, 0);
++ qla2x00_free_loopid(ha, ipdev->loop_id);
++
++ /*
++ * Clear public device flag and save private
++ * loop ID in database.
++ */
++ ipdev->flags &= ~IP_DEV_FLAG_PUBLIC_DEVICE;
++ ipdev->loop_id = fcdev->loop_id;
++ }
++ ipdev->flags |= IP_DEV_FLAG_PRESENT;
++ }
++ else if (fcdev->flag == DEV_PUBLIC &&
++ !(ipdev->flags & IP_DEV_FLAG_PUBLIC_DEVICE)) {
++ /*
++ * Device public now, was on private loop before.
++ */
++ DEBUG12(printk("%s: was private loop, now public\n",
++ __func__);)
++
++ /*
++ * Reserve public loop ID, save it in database.
++ */
++ status = qla2x00_reserve_loopid(ha, &ipdev->loop_id);
++ if (status == QL_STATUS_SUCCESS) {
++ /*
++ * Save port ID and set public device flag.
++ */
++ ipdev->port_id[0] = fcdev->d_id.r.d_id[0];
++ ipdev->port_id[1] = fcdev->d_id.r.d_id[1];
++ ipdev->port_id[2] = fcdev->d_id.r.d_id[2];
++ ipdev->flags |= IP_DEV_FLAG_PUBLIC_DEVICE;
++
++ /* Login public device */
++ status = qla2x00_ip_send_login_port_iocb(ha,
++ ipdev, 0);
++ }
++ if (status == QL_STATUS_RESOURCE_ERROR) {
++ /* Out of loop IDs */
++ ipdev->flags &= ~IP_DEV_FLAG_PUBLIC_DEVICE;
++ }
++ }
++ else {
++ /*
++ * Device public now, was public device before.
++ */
++ DEBUG12(printk("%s: was public, now public\n",
++ __func__);)
++
++ /* Check if port ID changed */
++ if (ipdev->port_id[0] != fcdev->d_id.r.d_id[0] ||
++ ipdev->port_id[1] != fcdev->d_id.r.d_id[1] ||
++ ipdev->port_id[2] != fcdev->d_id.r.d_id[2]) {
++
++ /* Save new port ID */
++ ipdev->port_id[0] = fcdev->d_id.r.d_id[0];
++ ipdev->port_id[1] = fcdev->d_id.r.d_id[1];
++ ipdev->port_id[2] = fcdev->d_id.r.d_id[2];
++
++ DEBUG12(printk("%s: Port ID changed\n",
++ __func__);)
++
++ /* Logout public device */
++ qla2x00_ip_send_logout_port_iocb(ha, ipdev, 0);
++ }
++
++ /* Login public device */
++ status = qla2x00_ip_send_login_port_iocb(ha, ipdev, 0);
++ if (status == QL_STATUS_RESOURCE_ERROR) {
++ /* Out of loop IDs */
++ ipdev->flags &= ~IP_DEV_FLAG_PUBLIC_DEVICE;
++ }
++ }
++ return (status);
++ }
++
++ /* Device not found in database */
++ DEBUG12(printk("%s: device NOT in list\n", __func__);)
++
++ /* If private loop device, add device to IP list */
++ /* Public devices will be added as needed when packet received */
++ if (fcdev->flag != DEV_PUBLIC) {
++ /* Add (force) new private loop device to IP list */
++ status = qla2x00_add_new_ip_device(ha,
++ fcdev->loop_id,
++ NULL,
++ fcdev->wwn,
++ TRUE,
++ 0);
++ }
++
++ /* The following code is temporary, until FARP supported */
++ /* Login all IP public devices for now */
++ if (fcdev->flag == DEV_PUBLIC) {
++ /* Add (don't force) new public device to IP list */
++ status = qla2x00_add_new_ip_device(ha,
++ PUBLIC_LOOP_DEVICE,
++ (uint8_t *)&fcdev->d_id,
++ fcdev->wwn,
++ FALSE,
++ 0);
++ }
++
++ return (status);
++}
++
++/**
++ * qla2x00_ip_send_login_port_iocb() - Login to an IP device.
++ * @ha: SCSI driver HA context
++ * @ipdev: IP device to login to
++ * @ha_locked: Flag indicating if the function is called with the hardware lock
++ *
++ * This routine will build and send a mailbox IOCB to login to a fabric port.
++ *
++ * The qla2x00_ip_mailbox_iocb_done() routine will be called upon IOCB
++ * completion, where further processing is performed.
++ *
++ * Returns QL_STATUS_SUCCESS if the operation succeeded.
++ */
++static int
++qla2x00_ip_send_login_port_iocb(scsi_qla_host_t *ha,
++ struct ip_device *ipdev, uint32_t ha_locked)
++{
++ unsigned long flags = 0;
++ struct mbx_entry *mbxentry;
++
++ DEBUG12(printk("%s: port ID: %x\n",
++ __func__,
++ ipdev->port_id[2]<<16 |
++ ipdev->port_id[1]<<8 |
++ ipdev->port_id[0]);)
++
++ /* Send marker if required */
++ if (ha->marker_needed != 0) {
++ if (ha_locked) {
++ if(__qla2x00_marker(ha,
++ 0, 0, MK_SYNC_ALL) != QLA2X00_SUCCESS)
++ return (QL_STATUS_ERROR);
++ }
++ else {
++ if(qla2x00_marker(ha,
++ 0, 0, MK_SYNC_ALL) != QLA2X00_SUCCESS)
++ return (QL_STATUS_ERROR);
++ }
++ ha->marker_needed = 0;
++ }
++
++ if (!ha_locked)
++ spin_lock_irqsave(&ha->hardware_lock, flags);
++
++ mbxentry = (struct mbx_entry *)qla2x00_req_pkt(ha);
++ if (mbxentry == NULL) {
++ DEBUG12(printk("%s: failed\n", __func__);)
++
++ if (!ha_locked)
++ spin_unlock_irqrestore(&ha->hardware_lock, flags);
++
++ return (QL_STATUS_ERROR);
++ }
++
++ /* Build fabric login MBX IOCB */
++ mbxentry->entry_type = ET_MAILBOX_COMMAND;
++ mbxentry->entry_count = 1;
++ mbxentry->sys_define1 = SOURCE_IP;
++ mbxentry->entry_status = 0;
++ mbxentry->handle = cpu_to_le32(ipdev->index |
++ (MBC_LOGIN_FABRIC_PORT << 16));
++ mbxentry->loop_id = ipdev->loop_id;
++ mbxentry->mb0 = __constant_cpu_to_le16(MBC_LOGIN_FABRIC_PORT);
++ mbxentry->mb1 = cpu_to_le16((ipdev->loop_id << 8) |
++ (MBC_NO_PROCESS_LOGIN |
++ MBC_NO_PLOGI_IF_LOGGED_IN));
++ mbxentry->mb2 = cpu_to_le16(ipdev->port_id[2]);
++ mbxentry->mb3 = cpu_to_le16((ipdev->port_id[1] << 8) |
++ ipdev->port_id[0]);
++ mbxentry->mb6 = __constant_cpu_to_le16(0);
++ mbxentry->mb7 = __constant_cpu_to_le16(0);
++
++ /* Issue command to ISP */
++ qla2x00_isp_cmd(ha);
++
++ if (!ha_locked)
++ spin_unlock_irqrestore(&ha->hardware_lock, flags);
++
++ return (QL_STATUS_SUCCESS);
++}
++
++/**
++ * qla2x00_ip_send_logout_port_iocb() - Logout an IP device.
++ * @ha: SCSI driver HA context
++ * @ipdev: IP device to logout
++ * @ha_locked: Flag indicating if the function is called with the hardware lock
++ *
++ * This routine will build and send a mailbox IOCB to logout a fabric port.
++ *
++ * The qla2x00_ip_mailbox_iocb_done() routine will be called upon IOCB
++ * completion, where further processing is performed.
++ *
++ * Returns QL_STATUS_SUCCESS if the operation succeeded.
++ */
++static int
++qla2x00_ip_send_logout_port_iocb(scsi_qla_host_t *ha,
++ struct ip_device *ipdev, uint32_t ha_locked)
++{
++ unsigned long flags = 0;
++ struct mbx_entry *mbxentry;
++
++ DEBUG12(printk("%s: port ID: %x\n",
++ __func__,
++ ipdev->port_id[2]<<16 |
++ ipdev->port_id[1]<<8 |
++ ipdev->port_id[0]);)
++
++ /* Send marker if required */
++ if (ha->marker_needed != 0) {
++ if (ha_locked) {
++ if(__qla2x00_marker(ha,
++ 0, 0, MK_SYNC_ALL) != QLA2X00_SUCCESS)
++ return (QL_STATUS_ERROR);
++ }
++ else {
++ if(qla2x00_marker(ha,
++ 0, 0, MK_SYNC_ALL) != QLA2X00_SUCCESS)
++ return (QL_STATUS_ERROR);
++ }
++ ha->marker_needed = 0;
++ }
++
++ if (!ha_locked)
++ spin_lock_irqsave(&ha->hardware_lock, flags);
++
++ mbxentry = (struct mbx_entry *)qla2x00_req_pkt(ha);
++ if (mbxentry == NULL) {
++ DEBUG12(printk("%s: failed\n", __func__);)
++
++ if (!ha_locked)
++ spin_unlock_irqrestore(&ha->hardware_lock, flags);
++
++ return (QL_STATUS_ERROR);
++ }
++
++ /* Build fabric logout MBX IOCB */
++ mbxentry->entry_type = ET_MAILBOX_COMMAND;
++ mbxentry->entry_count = 1;
++ mbxentry->sys_define1 = SOURCE_IP;
++ mbxentry->entry_status = 0;
++ mbxentry->handle = cpu_to_le32(ipdev->index |
++ (MBC_LOGOUT_FABRIC_PORT << 16));
++ mbxentry->loop_id = ipdev->loop_id;
++ mbxentry->mb0 = __constant_cpu_to_le16(MBC_LOGOUT_FABRIC_PORT);
++ mbxentry->mb1 = cpu_to_le16(ipdev->loop_id << 8);
++ mbxentry->mb2 = __constant_cpu_to_le16(0);
++ mbxentry->mb3 = __constant_cpu_to_le16(0);
++ mbxentry->mb6 = __constant_cpu_to_le16(0);
++ mbxentry->mb7 = __constant_cpu_to_le16(0);
++
++ /* Issue command to ISP */
++ qla2x00_isp_cmd(ha);
++
++ if (!ha_locked)
++ spin_unlock_irqrestore(&ha->hardware_lock, flags);
++
++ return (QL_STATUS_SUCCESS);
++}
++
++/**
++ * qla2x00_ip_mailbox_iocb_done() - Process an mailbox IOCB completion.
++ * @ha: SCSI driver HA context
++ * @mbxentry: completed mailbox IOCB entry
++ *
++ * This routine is currently used for fabric login and logouts only.
++ */
++static void
++qla2x00_ip_mailbox_iocb_done(scsi_qla_host_t *ha, struct mbx_entry *mbxentry)
++{
++ int status;
++ uint16_t cmd;
++ uint16_t index;
++ struct ip_device *ipdev;
++// FIXME: endianess?
++ /* Parse-out originating mailbox command */
++ cmd = MSW(mbxentry->handle);
++
++ DEBUG12(printk("%s: cmd %x, status %x, mb0 %x, mb1 %x, mb2 %x\n",
++ __func__,
++ cmd,
++ mbxentry->status,
++ mbxentry->mb0,
++ mbxentry->mb1,
++ mbxentry->mb2);)
++
++ /* Get device block pointer */
++ index = LSW(mbxentry->handle);
++ if (index >= QLLAN_MAX_IP_DEVICES) {
++ /* Bad handle from ISP */
++ DEBUG12(printk("%s: bad handle from isp\n", __func__);)
++
++ /* TODO: Cleanup??? */
++
++ return;
++ }
++
++ ipdev = &ha->ipdev_db[index];
++
++ if (cmd == MBC_LOGOUT_FABRIC_PORT) {
++ /* Check fabric logout completion status */
++ if (/*mbxentry->status == CS_COMPLETE && */
++ mbxentry->mb0 == MBS_COMMAND_COMPLETE) {
++
++ /* Logout successful -- do nothing */
++ }
++ else {
++ DEBUG12(printk("%s: fabric logout failed\n", __func__);)
++ }
++ }
++ else {
++ /* Check fabric login completion status */
++ /* Note: sometimes ISP returns Status=0x30 and MB0=0x4000 */
++ /* Therefore, only check mb0 for now */
++ if (/* mbxentry->status == CS_COMPLETE && */
++ mbxentry->mb0 == MBS_COMMAND_COMPLETE) {
++
++ /* Login successful */
++ ipdev->flags |= IP_DEV_FLAG_PRESENT;
++ }
++ else if (mbxentry->mb0 == MBS_PORT_ID_IN_USE) {
++ /* Different loop ID already assigned to port ID */
++ /* Use the one that is already assigned */
++ qla2x00_free_loopid(ha, ipdev->loop_id);
++ ipdev->loop_id = mbxentry->mb1;
++
++ /* Do logout first and then relogin */
++ qla2x00_ip_send_logout_port_iocb(ha, ipdev, 1);
++ qla2x00_ip_send_login_port_iocb(ha, ipdev, 1);
++ }
++ else if (mbxentry->mb0 == MBS_LOOP_ID_IN_USE) {
++ /* Loop ID already used for different port ID */
++ /* Get a new loop ID and reissue login request */
++ status = qla2x00_reserve_loopid(ha, &ipdev->loop_id);
++ if (status == QL_STATUS_SUCCESS) {
++ qla2x00_ip_send_login_port_iocb(ha, ipdev, 1);
++ }
++ else {
++ DEBUG12(printk("%s: out of loop IDs\n",
++ __func__);)
++
++ qla2x00_free_ip_block(ha, ipdev);
++ }
++ }
++ else {
++ /* Login failed, return resources */
++ DEBUG12(printk("%s: fabric login failed\n", __func__);)
++
++ qla2x00_free_loopid(ha, ipdev->loop_id);
++ qla2x00_free_ip_block(ha, ipdev);
++ }
++ }
++}
++
++
++/**
++ * qla2x00_ip_inquiry() - Discover IP-capable adapters.
++ * @adapter_num: adapter number to check (instance)
++ * @inq_data: return bd_inquiry data of the discovered adapter
++ *
++ * This routine is called by the IP driver to discover adapters that support IP
++ * and to get adapter parameters from the SCSI driver.
++ *
++ * Returns TRUE if the specified adapter supports IP.
++ */
++#if defined (ISP2200)
++int
++qla2200_ip_inquiry(uint16_t adapter_num, struct bd_inquiry *inq_data)
++#elif defined(ISP2300)
++int
++qla2300_ip_inquiry(uint16_t adapter_num, struct bd_inquiry *inq_data)
++#endif
++{
++ int found;
++ struct list_head *hal;
++ scsi_qla_host_t *ha;
++
++ /* Verify structure size and version */
++ if ((inq_data->length != BDI_LENGTH) ||
++ (inq_data->version != BDI_VERSION)) {
++
++ DEBUG12(printk("%s: incompatable structure\n", __func__);)
++ return (FALSE);
++ }
++
++ /* Find the specified host adapter */
++ ha = NULL;
++ found = 0;
++ read_lock(&qla_hostlist_lock);
++ list_for_each(hal, &qla_hostlist) {
++ ha = list_entry(hal, scsi_qla_host_t, list);
++
++ if (ha->instance == adapter_num) {
++ found++;
++ break;
++ }
++ }
++ read_unlock(&qla_hostlist_lock);
++
++ if (found) {
++ if (!ha->flags.online)
++ return (FALSE);
++
++ DEBUG12(printk("%s: found adapter %d\n",
++ __func__,
++ adapter_num);)
++
++ /* Return inquiry data to backdoor IP driver */
++ set_bit(BDI_IP_SUPPORT, &inq_data->options);
++ if (ha->flags.enable_64bit_addressing)
++ set_bit(BDI_64BIT_ADDRESSING, &inq_data->options);
++ inq_data->ha = ha;
++ inq_data->risc_rec_q = ha->risc_rec_q;
++ inq_data->risc_rec_q_size = IP_BUFFER_QUEUE_DEPTH;
++ inq_data->link_speed = ha->current_speed;
++ memcpy(inq_data->port_name, ha->ip_port_name, WWN_SIZE);
++ inq_data->pdev = ha->pdev;
++ inq_data->ip_enable_routine = qla2x00_ip_enable;
++ inq_data->ip_disable_routine = qla2x00_ip_disable;
++ inq_data->ip_add_buffers_routine = qla2x00_add_buffers;
++ inq_data->ip_send_packet_routine = qla2x00_send_packet;
++ inq_data->ip_tx_timeout_routine = qla2x00_tx_timeout;
++ return (TRUE);
++ }
++ return (FALSE);
++}
++
++/**
++ * qla2x00_ip_enable() - Create IP-driver/SCSI-driver IP connection.
++ * @ha: SCSI driver HA context
++ * @enable_data: bd_enable data describing the IP connection
++ *
++ * This routine is called by the IP driver to enable an IP connection to the
++ * SCSI driver and to pass in IP driver parameters.
++ *
++ * The HA context is propagated with the specified @enable_data and the
++ * Firmware is initialized for IP support.
++ *
++ * Returns TRUE if the IP connection was successfully enabled.
++ */
++static int
++qla2x00_ip_enable(scsi_qla_host_t *ha, struct bd_enable *enable_data)
++{
++ int status;
++
++ DEBUG12(printk("%s: enable adapter %d\n", __func__, (int)ha->host_no);)
++
++ status = FALSE;
++
++ /* Verify structure size and version and adapter online */
++ if (!(ha->flags.online) ||
++ (enable_data->length != BDE_LENGTH) ||
++ (enable_data->version != BDE_VERSION)) {
++
++ DEBUG12(printk("%s: incompatable structure or offline\n",
++ __func__);)
++ return (status);
++ }
++
++ /* Save parameters from IP driver */
++ ha->mtu = enable_data->mtu;
++ ha->header_size = enable_data->header_size;
++ ha->receive_buffers = enable_data->receive_buffers;
++ ha->max_receive_buffers = enable_data->max_receive_buffers;
++ ha->receive_buff_data_size = enable_data->receive_buff_data_size;
++ if (test_bit(BDE_NOTIFY_ROUTINE, &enable_data->options)) {
++ ha->notify_routine = enable_data->notify_routine;
++ ha->notify_context = enable_data->notify_context;
++ }
++ ha->send_completion_routine = enable_data->send_completion_routine;
++ ha->receive_packets_routine = enable_data->receive_packets_routine;
++ ha->receive_packets_context = enable_data->receive_packets_context;
++
++ /* Enable RISC IP support */
++ status = qla2x00_ip_initialize(ha);
++ if (!status) {
++ DEBUG12(printk("%s: IP initialization failed", __func__);)
++ ha->notify_routine = NULL;
++ }
++ return (status);
++}
++
++/**
++ * qla2x00_ip_disable() - Remove IP-driver/SCSI-driver IP connection.
++ * @ha: SCSI driver HA context
++ *
++ * This routine is called by the IP driver to disable a previously created IP
++ * connection.
++ *
++ * A Firmware call to disable IP support is issued.
++ */
++static void
++qla2x00_ip_disable(scsi_qla_host_t *ha)
++{
++ int rval;
++ static mbx_cmd_t mc;
++ mbx_cmd_t *mcp = &mc;
++
++ DEBUG12(printk("%s: disable adapter %d\n", __func__, (int)ha->host_no);)
++
++ /* Wait for a ready state from the adapter */
++ while (!ha->init_done || ha->dpc_active) {
++ set_current_state(TASK_INTERRUPTIBLE);
++ schedule_timeout(HZ);
++ }
++
++ /* Disable IP support */
++ ha->flags.enable_ip = FALSE;
++
++ mcp->mb[0] = MBC_DISABLE_IP;
++ mcp->out_mb = MBX_0;
++ mcp->in_mb = MBX_0;
++ mcp->tov = 30;
++ mcp->flags = 0;
++ rval = qla2x00_mailbox_command(ha, mcp);
++ if (rval == QL_STATUS_SUCCESS) {
++ /* IP disabled successful */
++ DEBUG12(printk(KERN_INFO
++ "%s: successful\n", __func__);)
++ }
++ else {
++ DEBUG12(printk(KERN_WARNING
++ "%s: MBC_DISABLE_IP failed\n", __func__);)
++ }
++
++ /* Reset IP parameters */
++ ha->rec_entries_in = 0;
++ ha->rec_entries_out = 0;
++ ha->notify_routine = NULL;
++}
++
++/**
++ * qla2x00_add_buffers() - Adds buffers to the receive buffer queue.
++ * @ha: SCSI driver HA context
++ * @rec_count: The number of receive buffers to add to the queue
++ * @ha_locked: Flag indicating if the function is called with the hardware lock
++ *
++ * This routine is called by the IP driver to pass new buffers to the receive
++ * buffer queue.
++ */
++static void
++qla2x00_add_buffers(scsi_qla_host_t *ha, uint16_t rec_count, int ha_locked)
++{
++ int i;
++ uint16_t rec_in;
++ uint16_t handle;
++ unsigned long flags = 0;
++ device_reg_t *reg;
++ struct risc_rec_entry *risc_rec_q;
++ struct buffer_cb *bcbs;
++
++ flags = 0;
++ risc_rec_q = ha->risc_rec_q;
++ rec_in = ha->rec_entries_in;
++ bcbs = ha->receive_buffers;
++
++ /* Set RISC owns buffer flag on new entries */
++ for (i = 0; i < rec_count; i++) {
++ handle = risc_rec_q[rec_in].handle;
++ set_bit(BCB_RISC_OWNS_BUFFER, &(bcbs[handle].state));
++ if (rec_in < IP_BUFFER_QUEUE_DEPTH - 1)
++ rec_in++;
++ else
++ rec_in = 0;
++ }
++
++ /* Update RISC buffer pointer */
++ if (!ha_locked)
++ spin_lock_irqsave(&ha->hardware_lock, flags);
++
++ reg = ha->iobase;
++ WRT_REG_WORD(®->mailbox8, rec_in);
++ ha->rec_entries_in = rec_in;
++
++ if (!ha_locked)
++ spin_unlock_irqrestore(&ha->hardware_lock, flags);
++}
++
++/**
++ * qla2x00_send_packet() - Transmit a send_cb.
++ * @ha: SCSI driver HA context
++ * @scb: The send_cb structure to send
++ *
++ * This routine is called by the IP driver to pass @scb (IP packet) to the ISP
++ * for transmission.
++ *
++ * Returns QL_STATUS_SUCCESS if @scb was sent, QL_STATUS_RESOURCE_ERROR if the
++ * RISC was too busy to send, or QL_STATUS_ERROR.
++ */
++static int
++qla2x00_send_packet(scsi_qla_host_t *ha, struct send_cb *scb)
++{
++ int i;
++ uint16_t cnt;
++ uint16_t temp;
++ uint32_t handle;
++ unsigned long flags;
++ struct ip_cmd_entry *ipcmd_entry;
++ struct sk_buff *skb;
++ device_reg_t *reg;
++
++ DEBUG12(printk("%s: enter\n", __func__);)
++
++ skb = scb->skb;
++ reg = ha->iobase;
++
++ /* Check adapter state */
++ if (!ha->flags.online) {
++ return (QL_STATUS_ERROR);
++ }
++
++ /* Send marker if required */
++ if (ha->marker_needed != 0) {
++ if(qla2x00_marker(ha, 0, 0, MK_SYNC_ALL) != QLA2X00_SUCCESS) {
++ printk(KERN_WARNING
++ "%s: Unable to issue marker.\n",
++ __func__);
++ return (QL_STATUS_ERROR);
++ }
++ ha->marker_needed = 0;
++ }
++
++ /* Acquire ring specific lock */
++ spin_lock_irqsave(&ha->hardware_lock, flags);
++
++ if (ha->req_q_cnt < 4) {
++ /* Update number of free request entries */
++ cnt = qla2x00_debounce_register(ISP_REQ_Q_OUT(reg));
++ if (ha->req_ring_index < cnt)
++ ha->req_q_cnt = cnt - ha->req_ring_index;
++ else
++ ha->req_q_cnt = REQUEST_ENTRY_CNT -
++ (ha->req_ring_index - cnt);
++ }
++
++ if (ha->req_q_cnt >= 4) {
++ /* Get tag handle for command */
++ handle = ha->current_scb_q_idx;
++ for (i = 0; i < MAX_SEND_PACKETS; i++) {
++ handle++;
++ if (handle == MAX_SEND_PACKETS)
++ handle = 0;
++ if (ha->active_scb_q[handle] == NULL) {
++ ha->current_scb_q_idx = handle;
++ goto found_handle;
++ }
++ }
++ }
++
++ /* Low on resources, try again later */
++ spin_unlock_irqrestore(&ha->hardware_lock, flags);
++ printk(KERN_WARNING
++ "%s: Low on resources, try again later...\n",
++ __func__);
++
++ return (QL_STATUS_RESOURCE_ERROR);
++
++found_handle:
++
++ /* Build ISP command packet */
++ ipcmd_entry = (struct ip_cmd_entry *)ha->request_ring_ptr;
++
++ /* OPTIMIZATION ??? */
++ /* Throughput increases an additional 10 Mbps with the following code */
++ *((uint32_t *)(&ipcmd_entry->entry_type)) =
++ __constant_cpu_to_le32(ET_IP_COMMAND_64 | (1 << 8));
++ //ipcmd_entry->entry_type = ET_IP_COMMAND_64;
++ //ipcmd_entry->entry_count = 1;
++ //ipcmd_entry->sys_define = 0;
++ //ipcmd_entry->entry_status = 0;
++
++ ipcmd_entry->handle = handle;
++ ipcmd_entry->reserved_1 = 0;
++
++ /* Get destination loop ID for packet */
++ if (!qla2x00_get_ip_loopid(ha, scb->header, &ipcmd_entry->loop_id)) {
++ /* Failed to get loop ID, convert packet to ARP */
++ if (qla2x00_convert_to_arp(ha, scb)) {
++ /* Broadcast ARP */
++ ipcmd_entry->loop_id = BROADCAST;
++ }
++ else {
++ /* Return packet */
++ spin_unlock_irqrestore(&ha->hardware_lock, flags);
++ printk(KERN_WARNING
++ "%s: Unable to determine loop id for "
++ "destination.\n",
++ __func__);
++ return (QL_STATUS_ERROR);
++ }
++ }
++
++ /* Default five second firmware timeout */
++ ipcmd_entry->timeout = __constant_cpu_to_le16(5);
++ ipcmd_entry->control_flags = __constant_cpu_to_le16(CF_WRITE);
++ ipcmd_entry->reserved_2 = 0;
++ ipcmd_entry->service_class = __constant_cpu_to_le16(0);
++
++ ipcmd_entry->data_seg_count = __constant_cpu_to_le16(2);
++ ipcmd_entry->ds.data_segs64[0].address[0] =
++ cpu_to_le32(LSD(scb->header_dma));
++ ipcmd_entry->ds.data_segs64[0].address[1] =
++ cpu_to_le32(MSD(scb->header_dma));
++ ipcmd_entry->ds.data_segs64[0].length =
++ __constant_cpu_to_le32(sizeof(struct packet_header));
++ scb->skb_data_dma = pci_map_single(ha->pdev,
++ skb->data, skb->len,
++ PCI_DMA_TODEVICE);
++ ipcmd_entry->ds.data_segs64[1].address[0] =
++ cpu_to_le32(LSD(scb->skb_data_dma));
++ ipcmd_entry->ds.data_segs64[1].address[1] =
++ cpu_to_le32(MSD(scb->skb_data_dma));
++ ipcmd_entry->ds.data_segs64[1].length = cpu_to_le32(skb->len);
++
++ ipcmd_entry->byte_count =
++ cpu_to_le32(skb->len + sizeof(struct packet_header));
++
++ /* Adjust ring index. */
++ ha->req_ring_index++;
++ if (ha->req_ring_index == REQUEST_ENTRY_CNT) {
++ ha->req_ring_index = 0;
++ ha->request_ring_ptr = ha->request_ring;
++ } else
++ ha->request_ring_ptr++;
++
++ ha->ipreq_cnt++;
++ ha->req_q_cnt--;
++ ha->active_scb_q[handle] = scb;
++
++ /* Set chip new ring index. */
++ temp = CACHE_FLUSH(ISP_REQ_Q_IN(reg));
++ WRT_REG_WORD(ISP_REQ_Q_IN(reg), ha->req_ring_index);
++
++ spin_unlock_irqrestore(&ha->hardware_lock, flags);
++
++ return (QL_STATUS_SUCCESS);
++}
++
++/**
++ * qla2x00_tx_timeout() - Handle transmission timeout.
++ * @ha: SCSI driver HA context
++ *
++ * This routine is called by the IP driver to handle packet transmission
++ * timeouts.
++ *
++ * Returns QL_STATUS_SUCCESS if timeout handling completed successfully.
++ */
++static int
++qla2x00_tx_timeout(scsi_qla_host_t *ha)
++{
++ /* TODO: complete interface */
++
++ /* Reset RISC firmware for basic recovery */
++ printk(KERN_WARNING
++ "%s: A transmission timeout occured - aborting ISP\n",
++ __func__);
++ set_bit(ISP_ABORT_NEEDED, &ha->dpc_flags);
++
++ return (QL_STATUS_SUCCESS);
++}
+--- /dev/null Thu Apr 11 07:25:15 2002
++++ linux-2.5.73-n9560/drivers/scsi/qla2xxx/qla_ip.h Thu Jul 3 15:34:42 2003
+@@ -0,0 +1,420 @@
++/******************************************************************************
++ * QLOGIC LINUX SOFTWARE
++ *
++ * QLogic ISP2x00 IP network driver for Linux 2.5.x
++ * Copyright (C) 2003 Qlogic Corporation
++ * (www.qlogic.com)
++ *
++ * This program is free software; you can redistribute it and/or modify it
++ * under the terms of the GNU General Public License as published by the
++ * Free Software Foundation; either version 2, or (at your option) any
++ * later version.
++ *
++ * This program is distributed in the hope that it will be useful, but
++ * WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ * General Public License for more details.
++ *
++ ******************************************************************************/
++
++/****************************************************************************
++ Please see revision.notes for revision history.
++*****************************************************************************/
++
++#if !defined(_QLA_IP_H_)
++#define _QLA_IP_H_
++
++#define MAX_SEND_PACKETS 32 /* Maximum # send packets */
++#define MAX_RECEIVE_BUFFERS 64 /* Maximum # receive buffers */
++#define MIN_RECEIVE_BUFFERS 8 /* Minimum # receive buffers */
++#define IP_BUFFER_QUEUE_DEPTH (MAX_RECEIVE_BUFFERS+1)
++
++/* Async notification types */
++#define NOTIFY_EVENT_LINK_DOWN 1 /* Link went down */
++#define NOTIFY_EVENT_LINK_UP 2 /* Link is back up */
++#define NOTIFY_EVENT_RESET_DETECTED 3 /* Reset detected */
++
++/* QLogic subroutine status definitions */
++#define QL_STATUS_SUCCESS 0
++#define QL_STATUS_ERROR 1
++#define QL_STATUS_FATAL_ERROR 2
++#define QL_STATUS_RESOURCE_ERROR 3
++#define QL_STATUS_LOOP_ID_IN_USE 4
++#define QL_STATUS_NO_DATA 5
++
++/************************************************************************/
++/* RFC 2625 -- networking structure definitions */
++/************************************************************************/
++
++/* Network header definitions */
++struct network_address
++{
++#if defined(__LITTLE_ENDIAN_BITFIELD)
++ __u16 unused:12,
++ naa:4;
++#elif defined (__BIG_ENDIAN_BITFIELD)
++ __u16 naa:4,
++ unused:12;
++#else
++#error "Please fix <asm/byteorder.h>"
++#endif
++
++#define NAA_IEEE_MAC_TYPE 1 /* NAA code - IEEE MAC addr */
++
++ __u8 addr[6];
++};
++
++struct network_header
++{
++ union
++ {
++ struct network_address na;
++ __u8 fcaddr[8];
++ } d;
++
++ union
++ {
++ struct network_address na;
++ __u8 fcaddr[8];
++ } s;
++};
++
++/* SNAP header definitions */
++/* from linux/if_fc.h */
++struct snap_header
++{
++ __u8 dsap; /* destination SAP */
++ __u8 ssap; /* source SAP */
++#define LLC_SAP_IEEE_802DOT2 0xAA /* LLC SAP code - IEEE 802.2 */
++
++ __u8 llc; /* LLC control field */
++#define LLC_CONTROL 0x03 /* LLC control code */
++
++ __u8 protid[3]; /* protocol id */
++#define SNAP_OUI 0x00 /* SNAP OUI code */
++
++ __u16 ethertype; /* ether type field */
++};
++
++/* Packet header definitions */
++struct packet_header
++{
++ struct network_header networkh;
++ struct snap_header snaph;
++};
++
++/* ARP header definitions */
++/* from linux/if_arp.h */
++struct arp_header
++{
++ struct arphdr arph;
++ __u8 ar_sha[ETH_ALEN]; /* sender hardware address */
++ __u32 ar_sip; /* sender IP address */
++ __u8 ar_tha[ETH_ALEN]; /* target hardware address */
++ __u32 ar_tip; /* target IP address */
++};
++
++/* IP header definitions */
++struct ip_header
++{
++ struct iphdr iph;
++ __u32 options; /* IP packet options */
++};
++
++
++/************************************************************************/
++/* Support structures. */
++/************************************************************************/
++
++/* Definitions for IP support */
++#define LOOP_ID_MASK 0x00FF
++#define PLE_NOT_SCSI_DEVICE 0x8000 /* Upper bit of loop ID set */
++ /* if not SCSI */
++
++/* Receive buffer control block definitions */
++struct buffer_cb
++{
++ uint16_t handle; /* ISP buffer handle */
++ uint16_t comp_status; /* completion status from FW */
++
++ uint32_t state; /* Buffer CB state */
++#define BCB_RISC_OWNS_BUFFER 1
++
++ struct sk_buff *skb; /* Socket buffer */
++ uint8_t *skb_data; /* Socket buffer data */
++ dma_addr_t skb_data_dma; /* SKB data physical address */
++ uint32_t rec_data_size; /* Size of received data */
++ uint32_t packet_size; /* Size of packet received */
++
++ uint16_t linked_bcb_cnt; /* # of linked CBs for packet */
++ uint16_t unused2;
++ struct buffer_cb *next_bcb; /* Next buffer CB */
++};
++
++/* Send control block definitions */
++struct send_cb
++{
++ uint16_t comp_status; /* completion status from FW */
++#define SCB_CS_COMPLETE 0x0
++#define SCB_CS_INCOMPLETE 0x1
++#define SCB_CS_RESET 0x4
++#define SCB_CS_ABORTED 0x5
++#define SCB_CS_TIMEOUT 0x6
++#define SCB_CS_PORT_UNAVAILABLE 0x28
++#define SCB_CS_PORT_LOGGED_OUT 0x29
++#define SCB_CS_PORT_CONFIG_CHG 0x2A
++#define SCB_CS_FW_RESOURCE_UNAVAILABLE 0x2C
++
++ uint16_t unused1;
++
++ void *qdev; /* netdev private structure */
++
++ struct packet_header *header; /* Network and SNAP headers */
++ dma_addr_t header_dma; /* Header physical address */
++
++ struct sk_buff *skb; /* socket buffer to send */
++ dma_addr_t skb_data_dma; /* skb data physical address */
++};
++
++/* IP device data structure */
++#define QLLAN_MAX_IP_DEVICES 64 /* Maximum number of IP devices */
++
++struct ip_device
++{
++ uint16_t index;
++ uint16_t unused1;
++
++ uint32_t flags;
++#define IP_DEV_FLAG_PRESENT 0x00000001
++#define IP_DEV_FLAG_PUBLIC_DEVICE 0x00000002
++
++ uint16_t loop_id;
++#define PUBLIC_LOOP_DEVICE ((uint16_t)-1)
++
++ uint16_t unused2;
++ uint8_t port_id[3];
++ uint8_t unused3;
++ uint8_t port_name[8];
++
++ struct ip_device *next;
++ struct ip_device *last;
++};
++
++/************************************************************************/
++/* Definitions for Backdoor Inquiry. */
++/************************************************************************/
++
++struct bd_inquiry
++{
++ uint16_t length; /* Length of structure */
++#define BDI_LENGTH sizeof(struct bd_inquiry)
++
++ uint16_t version; /* Structure version number */
++/* NOTE: Update this value anytime the structure changes */
++#define BDI_VERSION 2
++
++ /* Exports */
++ uint32_t options; /* supported options */
++#define BDI_IP_SUPPORT 1 /* IP supported */
++#define BDI_64BIT_ADDRESSING 2 /* 64bit address supported */
++
++ void *ha; /* Driver ha pointer */
++ void *risc_rec_q; /* RISC receive queue */
++ uint16_t risc_rec_q_size; /* size */
++
++ uint16_t link_speed; /* Current link speed */
++#define BDI_1GBIT_PORTSPEED 1 /* operating at 1GBIT */
++#define BDI_2GBIT_PORTSPEED 2 /* operating at 2GBIT */
++#define BDI_10GBIT_PORTSPEED 4 /* operating at 10GBIT */
++
++ uint8_t port_name[8]; /* Adapter port name */
++
++ struct pci_dev *pdev; /* PCI device information */
++
++ /* Pointers to SCSI-backdoor callbacks */
++ void *ip_enable_routine;
++ void *ip_disable_routine;
++ void *ip_add_buffers_routine;
++ void *ip_send_packet_routine;
++ void *ip_tx_timeout_routine;
++
++ uint32_t unused2[9];
++};
++
++/************************************************************************/
++/* Definitions for Backdoor Enable. */
++/************************************************************************/
++
++struct bd_enable
++{
++ uint16_t length; /* Length of structure */
++#define BDE_LENGTH sizeof(struct bd_enable)
++
++ uint16_t version; /* Structure version number */
++/* NOTE: Update this value anytime the structure changes */
++#define BDE_VERSION 2
++
++ /* Imports */
++ uint32_t options; /* supported options */
++#define BDE_NOTIFY_ROUTINE 1 /* notify routine imported */
++
++ uint32_t mtu; /* maximum transfer size */
++ uint16_t header_size; /* split header size */
++ uint16_t unused1;
++
++ void *receive_buffers; /* receive buffers array */
++ uint16_t max_receive_buffers; /* max # receive buffers */
++ uint16_t unused2;
++ uint32_t receive_buff_data_size; /* buffer size */
++
++ /* Pointers to IP-backdoor callbacks */
++ void *notify_routine;
++ void *notify_context;
++ void *send_completion_routine;
++ void *receive_packets_routine;
++ void *receive_packets_context;
++
++ uint32_t unused3[9];
++};
++
++
++/************************************************************************/
++/* RISC interface structures */
++/************************************************************************/
++
++/* IP mailbox commands */
++#define MBC_INITIALIZE_IP 0x0077
++#define MBC_DISABLE_IP 0x0079
++
++/* IP async events */
++#define MBA_IP_TRANSMIT_COMPLETE 0x8022
++#define MBA_IP_RECEIVE_COMPLETE 0x8023
++#define MBA_IP_BROADCAST_RECEIVED 0x8024
++#define MBA_IP_RECEIVE_BUFFERS_LOW 0x8025
++#define MBA_IP_OUT_OF_BUFFERS 0x8026
++#define MBA_IP_RECEIVE_COMPLETE_SPLIT 0x8027
++
++/* IP fast post completions for 2300 */
++#define RHS_IP_SEND_COMPLETE 0x18
++#define RHS_IP_RECV_COMPLETE 0x19
++#define RHS_IP_RECV_DA_COMPLETE 0x1B
++
++/* RISC IP receive buffer queue entry structure */
++struct risc_rec_entry
++{
++ uint32_t data_addr_low;
++ uint32_t data_addr_high;
++ uint16_t handle;
++ uint16_t unused;
++};
++
++/* Firmware IP initialization control block definitions */
++struct ip_init_cb
++{
++ uint8_t version;
++#define IPICB_VERSION 0x01
++
++ uint8_t reserved_1;
++
++ uint16_t firmware_options;
++#define IPICB_OPTION_64BIT_ADDRESSING 0x0001
++#define IPICB_OPTION_NO_BROADCAST_FASTPOST 0x0002
++#define IPICB_OPTION_OUT_OF_BUFFERS_EVENT 0x0004
++
++ uint16_t header_size;
++ uint16_t mtu;
++ uint16_t receive_buffer_size;
++ uint16_t reserved_2;
++ uint16_t reserved_3;
++ uint16_t reserved_4;
++ uint16_t reserved_5;
++
++ uint16_t receive_queue_size;
++ uint16_t low_water_mark;
++#define IPICB_LOW_WATER_MARK 0
++
++ uint16_t receive_queue_addr[4];
++ uint16_t receive_queue_in;
++ uint16_t fast_post_count;
++#define IPICB_FAST_POST_COUNT 4
++
++ uint16_t container_count;
++#define IPICB_BUFFER_CONTAINER_COUNT 64
++
++ uint16_t resource_allocation;
++#define IPICB_IOCB_RESERVE_COUNT 250
++};
++
++
++/* IP IOCB types */
++
++/* Data segment descriptor structures */
++struct data_seg
++{
++ uint32_t address;
++ uint32_t length;
++};
++
++struct data_seg_a64
++{
++ uint32_t address[2];
++ uint32_t length;
++};
++
++/* IP Command IOCB structure */
++struct ip_cmd_entry
++{
++ uint8_t entry_type;
++#define ET_IP_COMMAND_32 0x13
++#define ET_IP_COMMAND_64 0x1B
++
++ uint8_t entry_count;
++ uint8_t sys_define;
++ uint8_t entry_status;
++
++ uint32_t handle;
++ uint8_t reserved_1;
++ uint8_t loop_id;
++ uint16_t comp_status;
++ uint16_t control_flags;
++ uint16_t reserved_2;
++ uint16_t timeout;
++ uint16_t data_seg_count;
++ uint16_t service_class;
++ uint16_t reserved_3[7];
++ uint32_t byte_count;
++ union
++ {
++ struct data_seg data_segs[3];
++ struct data_seg_a64 data_segs64[2];
++ } ds;
++};
++
++/* IP Receive IOCB structure */
++#define ET_IP_RECEIVE_CONTINUATION 0x2B
++
++struct ip_rec_entry
++{
++ uint8_t entry_type;
++#define ET_IP_RECEIVE 0x23
++
++ uint8_t entry_count;
++ uint8_t segment_count;
++ uint8_t entry_status;
++
++ uint16_t s_idlow;
++ uint8_t s_idhigh;
++ uint8_t reserved_1;
++ uint8_t reserved_2;
++ uint8_t loop_id;
++ uint16_t comp_status;
++#define IPREC_STATUS_SPLIT_BUFFER 0x0001
++
++ uint16_t service_class;
++ uint16_t sequence_length;
++
++#define IPREC_MAX_HANDLES 24
++ uint16_t buffer_handles[IPREC_MAX_HANDLES];
++};
++
++#endif /* _QLA_IP_H_ */
+--- /dev/null Thu Apr 11 07:25:15 2002
++++ linux-2.5.73-n9560/drivers/scsi/qla2xxx/qla_isr.c Thu Jul 3 15:34:42 2003
+@@ -0,0 +1,1474 @@
++/*
++ * QLOGIC LINUX SOFTWARE
++ *
++ * QLogic ISP2x00 device driver for Linux 2.5.x
++ * Copyright (C) 2003 Qlogic Corporation
++ * (www.qlogic.com)
++ *
++ * This program is free software; you can redistribute it and/or modify it
++ * under the terms of the GNU General Public License as published by the
++ * Free Software Foundation; either version 2, or (at your option) any
++ * later version.
++ *
++ * This program is distributed in the hope that it will be useful, but
++ * WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ * General Public License for more details.
++ *
++ */
++
++#include "qla_os.h"
++
++#include "qla_def.h"
++
++static void qla2x00_mbx_completion(scsi_qla_host_t *, uint16_t);
++static void qla2x00_async_event(scsi_qla_host_t *, uint32_t);
++static void qla2x00_process_completed_request(struct scsi_qla_host *, int);
++static void qla2x00_response_pkt(scsi_qla_host_t *, uint16_t);
++static void qla2x00_status_entry(scsi_qla_host_t *, sts_entry_t *);
++static void qla2x00_status_cont_entry(scsi_qla_host_t *, sts_cont_entry_t *);
++static void qla2x00_error_entry(scsi_qla_host_t *, response_t *);
++static void qla2x00_ms_entry(scsi_qla_host_t *, ms_iocb_entry_t *);
++
++static int qla2x00_check_sense(Scsi_Cmnd *cp, os_lun_t *);
++
++/**
++ * qla2x00_intr_handler() - Process interrupts for the ISP.
++ * @irq:
++ * @dev_id: SCSI driver HA context
++ * @regs:
++ *
++ * Called by system whenever the host adapter generates an interrupt.
++ *
++ * Returns handled flag.
++ */
++irqreturn_t
++qla2x00_intr_handler(int irq, void *dev_id, struct pt_regs *regs)
++{
++ scsi_qla_host_t *ha;
++ device_reg_t *reg;
++ uint32_t mbx;
++ uint16_t stat;
++ int status = 0;
++ unsigned long flags = 0;
++ unsigned long mbx_flags = 0;
++ unsigned long intr_iter;
++
++ /* Don't loop forever, interrupt are OFF */
++ intr_iter = 50;
++
++ ha = (scsi_qla_host_t *) dev_id;
++ if (!ha) {
++ printk(KERN_INFO
++ "%s(): NULL host pointer\n", __func__);
++ return (IRQ_NONE);
++ }
++
++ reg = ha->iobase;
++
++ spin_lock_irqsave(&ha->hardware_lock, flags);
++
++ for (;;) {
++ /* Relax CPU! */
++ if (!(intr_iter--))
++ break;
++
++#if defined(ISP2100) || defined(ISP2200)
++ if ((RD_REG_WORD(®->istatus) & ISR_RISC_INT) == 0) {
++ break;
++ }
++
++ if (RD_REG_WORD(®->semaphore) & BIT_0) {
++ WRT_REG_WORD(®->hccr, HCCR_CLR_RISC_INT);
++
++ /* Get mailbox data. */
++ mbx = RD_REG_WORD(®->mailbox0);
++ if (mbx > 0x3fff && mbx < 0x8000) {
++ qla2x00_mbx_completion(ha, (uint16_t)mbx);
++ status |= MBX_INTERRUPT;
++ } else if (mbx > 0x7fff && mbx < 0xc000) {
++ qla2x00_async_event(ha, mbx);
++ } else {
++ /*EMPTY*/
++ DEBUG2(printk("scsi(%ld): Unrecognized "
++ "interrupt type (%d)\n",
++ ha->host_no, mbx));
++ }
++ /* Release mailbox registers. */
++ WRT_REG_WORD(®->semaphore, 0);
++ } else {
++ stat = RD_REG_WORD(®->mailbox5);
++ qla2x00_response_pkt(ha, stat);
++
++ WRT_REG_WORD(®->hccr, HCCR_CLR_RISC_INT);
++ }
++
++#else /* ISP2300 */
++ if ((ha->pdev->device == QLA2312_DEVICE_ID ||
++ ha->pdev->device == QLA2322_DEVICE_ID) &&
++ (RD_REG_WORD(®->istatus) & ISR_RISC_INT) == 0) {
++ break;
++ }
++
++ stat = RD_REG_WORD(®->host_status_lo);
++ if ((stat & HSR_INT) == 0) {
++ break;
++ }
++ if (stat & HSR_RISC_PAUSED) {
++ uint16_t hccr;
++
++ hccr = RD_REG_WORD(®->hccr);
++ printk(KERN_INFO
++ "scsi(%ld): RISC paused, dumping HCCR (%x)\n",
++ ha->host_no,
++ hccr);
++
++ /*
++ * Issue a "HARD" reset in order for the RISC interrupt
++ * bit to be cleared. Schedule a big hammmer to get
++ * out of the RISC PAUSED state.
++ */
++ WRT_REG_WORD(®->hccr, HCCR_RESET_RISC);
++ set_bit(ISP_ABORT_NEEDED, &ha->dpc_flags);
++ break;
++ }
++ mbx = RD_REG_WORD(®->host_status_hi);
++ switch (stat & 0xff) {
++ case 0x1:
++ case 0x2:
++ case 0x10:
++ case 0x11:
++ qla2x00_mbx_completion(ha, (uint16_t)mbx);
++ status |= MBX_INTERRUPT;
++
++ /* Release mailbox registers. */
++ WRT_REG_WORD(®->semaphore, 0);
++ break;
++ case 0x12:
++ qla2x00_async_event(ha, mbx);
++ break;
++ case 0x13:
++ qla2x00_response_pkt(ha, (uint16_t)mbx);
++ break;
++ case 0x16:
++ mbx = mbx << 16 | MBA_SCSI_COMPLETION;
++ qla2x00_async_event(ha, mbx);
++ break;
++#if defined(FC_IP_SUPPORT)
++ case 0x18:
++ WRT_REG_WORD(®->hccr, HCCR_CLR_RISC_INT);
++ qla2x00_ip_send_complete(ha, mbx, CS_COMPLETE);
++ continue;
++ break;
++ case 0x19:
++ qla2x00_ip_receive_fastpost(ha,
++ MBA_IP_RECEIVE_COMPLETE);
++ break;
++ case 0x1b:
++ qla2x00_ip_receive_fastpost(ha,
++ MBA_IP_RECEIVE_COMPLETE_SPLIT);
++ break;
++#endif
++ default:
++ DEBUG2(printk("scsi(%ld): Unrecognized interrupt type "
++ "(%d)\n",
++ ha->host_no, stat & 0xff));
++ break;
++ }
++
++ WRT_REG_WORD(®->hccr, HCCR_CLR_RISC_INT);
++#endif
++ }
++
++ spin_unlock_irqrestore(&ha->hardware_lock, flags);
++
++ ha->total_isr_cnt++;
++
++ if (test_bit(MBX_INTR_WAIT, &ha->mbx_cmd_flags) &&
++ (status & MBX_INTERRUPT) && ha->flags.mbox_int) {
++
++ /* There was a mailbox completion */
++ DEBUG3(printk("%s(%ld): Going to get mbx reg lock.\n",
++ __func__, ha->host_no));
++
++ QLA_MBX_REG_LOCK(ha);
++
++ MBOX_TRACE(ha, BIT_5);
++ if (ha->mcp == NULL) {
++ DEBUG3(printk("%s(%ld): Error mbx pointer.\n",
++ __func__, ha->host_no));
++ } else {
++ DEBUG3(printk("%s(%ld): Going to set mbx intr flags. "
++ "cmd=%x.\n",
++ __func__, ha->host_no, ha->mcp->mb[0]));
++ }
++ set_bit(MBX_INTERRUPT, &ha->mbx_cmd_flags);
++
++ DEBUG3(printk("%s(%ld): Going to wake up mbx function for "
++ "completion.\n",
++ __func__, ha->host_no));
++
++ MBOX_TRACE(ha,BIT_6);
++ up(&ha->mbx_intr_sem);
++
++ DEBUG3(printk("%s(%ld): Going to release mbx reg lock.\n",
++ __func__, ha->host_no));
++ QLA_MBX_REG_UNLOCK(ha);
++ }
++
++ if (!list_empty(&ha->done_queue))
++ schedule_work(&ha->run_qla_task);
++
++ /* Wakeup the DPC routine */
++ if ((!ha->flags.mbox_busy &&
++ (test_bit(ISP_ABORT_NEEDED, &ha->dpc_flags) ||
++ test_bit(RESET_MARKER_NEEDED, &ha->dpc_flags) ||
++ test_bit(LOOP_RESYNC_NEEDED, &ha->dpc_flags))) &&
++ ha->dpc_wait && !ha->dpc_active) {
++
++ up(ha->dpc_wait);
++ }
++
++ return (IRQ_HANDLED);
++}
++
++/**
++ * qla2x00_mbx_completion() - Process mailbox command completions.
++ * @ha: SCSI driver HA context
++ * @mb0: Mailbox0 register
++ */
++static void
++qla2x00_mbx_completion(scsi_qla_host_t *ha, uint16_t mb0)
++{
++ uint16_t cnt;
++ uint16_t *wptr;
++ device_reg_t *reg = ha->iobase;
++
++ ENTER(__func__);
++
++ /* Load return mailbox registers. */
++ ha->flags.mbox_int = TRUE;
++ ha->mailbox_out[0] = mb0;
++ wptr = (uint16_t *)®->mailbox1;
++
++ for (cnt = 1; cnt < MAILBOX_REGISTER_COUNT; cnt++) {
++#if defined(ISP2200)
++ if (cnt == 8)
++ wptr = (uint16_t *)®->mailbox8;
++#endif
++ if (cnt == 4 || cnt == 5)
++ ha->mailbox_out[cnt] = qla2x00_debounce_register(wptr);
++ else
++ ha->mailbox_out[cnt] = RD_REG_WORD(wptr);
++
++ wptr++;
++ }
++
++ if (ha->mcp) {
++ DEBUG3(printk("%s(%ld): Got mailbox completion. cmd=%x.\n",
++ __func__, ha->host_no, ha->mcp->mb[0]));
++ } else {
++ DEBUG2_3(printk("%s(%ld): MBX pointer ERROR!\n",
++ __func__, ha->host_no));
++ }
++
++ LEAVE(__func__);
++}
++
++/**
++ * qla2x00_async_event() - Process aynchronous events.
++ * @ha: SCSI driver HA context
++ * @mb0: Mailbox0 register
++ */
++static void
++qla2x00_async_event(scsi_qla_host_t *ha, uint32_t mbx)
++{
++ uint32_t index;
++ uint16_t mb[4];
++ device_reg_t *reg = ha->iobase;
++ uint8_t rscn_queue_index;
++
++ ENTER(__func__);
++
++ /* Setup to process completions */
++ mb[0] = LSW(mbx);
++ switch(mb[0]) {
++ case MBA_SCSI_COMPLETION: /* Fast Post */
++#if defined(ISP2100) || defined(ISP2200)
++ mb[1] = RD_REG_WORD(®->mailbox1);
++#else
++ mb[1] = MSW(mbx);
++#endif
++ mb[2] = RD_REG_WORD(®->mailbox2);
++
++ DEBUG5(printk("%s(): mailbox response completion.\n",
++ __func__));
++
++ if (!ha->flags.online)
++ break;
++
++ /* Get outstanding command index */
++ index = (uint32_t)(mb[2] << 16 | mb[1]);
++ qla2x00_process_completed_request(ha, index);
++ break;
++
++#if defined(FC_IP_SUPPORT)
++ case MBA_IP_TRANSMIT_COMPLETE: /* IP Completion */
++ mb[1] = RD_REG_WORD(®->mailbox1);
++
++ qla2x00_ip_send_complete(ha, mb[1], CS_COMPLETE);
++ break;
++
++ case MBA_IP__RECEIVE_COMPLETE:
++ case MBA_IP_RECEIVE_COMPLETE_SPLIT:
++ qla2x00_ip_receive_fastpost(ha, mb[0]);
++ break;
++#endif /* FC_IP_SUPPORT */
++
++ case MBA_RESET: /* Reset */
++ DEBUG2(printk("scsi(%ld): Asynchronous RESET.\n", ha->host_no));
++
++ set_bit(RESET_MARKER_NEEDED, &ha->dpc_flags);
++ break;
++
++ case MBA_SYSTEM_ERR: /* System Error */
++ mb[1] = RD_REG_WORD(®->mailbox1);
++ mb[2] = RD_REG_WORD(®->mailbox2);
++ mb[3] = RD_REG_WORD(®->mailbox3);
++
++ printk(KERN_INFO
++ "scsi(%ld): ISP System Error - mbx1=%xh mbx2=%xh "
++ "mbx3=%xh.\n",
++ ha->host_no, mb[1], mb[2], mb[3]);
++
++ qla2x00_dump_isp(ha, 1);
++
++ set_bit(ISP_ABORT_NEEDED, &ha->dpc_flags);
++ break;
++
++ case MBA_REQ_TRANSFER_ERR: /* Request Transfer Error */
++ DEBUG2(printk("scsi(%ld): ISP Request Transfer Error.\n",
++ ha->host_no));
++ printk(KERN_WARNING
++ "scsi(%ld): ISP Request Transfer Error.\n", ha->host_no);
++
++ set_bit(ISP_ABORT_NEEDED, &ha->dpc_flags);
++ break;
++
++ case MBA_RSP_TRANSFER_ERR: /* Response Transfer Error */
++ DEBUG2(printk("scsi(%ld): ISP Response Transfer Error.\n",
++ ha->host_no));
++ printk(KERN_WARNING
++ "scsi(%ld): ISP Response Transfer Error.\n", ha->host_no);
++
++ set_bit(ISP_ABORT_NEEDED, &ha->dpc_flags);
++ break;
++
++ case MBA_WAKEUP_THRES: /* Request Queue Wake-up */
++ DEBUG2(printk("scsi(%ld): Asynchronous WAKEUP_THRES.\n",
++ ha->host_no));
++ break;
++
++ case MBA_LIP_OCCURRED: /* Loop Initialization Procedure */
++ mb[1] = RD_REG_WORD(®->mailbox1);
++
++ DEBUG2(printk("scsi(%ld): Asynchronous LIP Occured.\n",
++ ha->host_no));
++ printk(KERN_INFO
++ "scsi(%ld): Asynchronous LIP Occured.\n", ha->host_no);
++
++ /* Save LIP sequence. */
++ ha->lip_seq = mb[1];
++ if (ha->loop_state != LOOP_DOWN) {
++ ha->loop_state = LOOP_DOWN;
++ atomic_set(&ha->loop_down_timer, LOOP_DOWN_TIME);
++ qla2x00_mark_all_devices_lost(ha);
++ }
++
++ set_bit(COMMAND_WAIT_NEEDED, &ha->dpc_flags);
++ set_bit(REGISTER_FC4_NEEDED, &ha->dpc_flags);
++
++ ha->flags.management_server_logged_in = 0;
++
++ /* Update AEN queue. */
++ if (ha->ioctl->flags & IOCTL_AEN_TRACKING_ENABLE) {
++ qla2x00_enqueue_aen(ha, MBA_LIP_OCCURRED, NULL);
++ }
++
++ ha->total_lip_cnt++;
++ break;
++
++ case MBA_LOOP_UP: /* Loop Up Event */
++ mb[1] = RD_REG_WORD(®->mailbox1);
++
++ DEBUG2(printk("scsi(%ld): Asynchronous LOOP UP.\n",
++ ha->host_no));
++ printk(KERN_INFO
++ "scsi(%ld): LOOP UP detected.\n", ha->host_no);
++
++ ha->flags.management_server_logged_in = 0;
++
++ /* Update AEN queue. */
++ if (ha->ioctl->flags & IOCTL_AEN_TRACKING_ENABLE) {
++ qla2x00_enqueue_aen(ha, MBA_LOOP_UP, NULL);
++ }
++
++ /* Save the current speed for use by ioctl and IP driver */
++ ha->current_speed = EXT_DEF_PORTSPEED_1GBIT;
++#if defined(ISP2300)
++ if (mb[1] == 1)
++ ha->current_speed = EXT_DEF_PORTSPEED_2GBIT;
++#endif
++ break;
++
++ case MBA_LOOP_DOWN: /* Loop Down Event */
++ DEBUG2(printk("scsi(%ld): Asynchronous LOOP DOWN.\n",
++ ha->host_no));
++ printk(KERN_INFO
++ "scsi(%ld): LOOP DOWN detected.\n", ha->host_no);
++
++ if (ha->loop_state != LOOP_DOWN) {
++ ha->loop_state = LOOP_DOWN;
++ atomic_set(&ha->loop_down_timer, LOOP_DOWN_TIME);
++ qla2x00_mark_all_devices_lost(ha);
++ }
++
++ ha->flags.management_server_logged_in = 0;
++ ha->current_speed = 0; /* reset value */
++
++ /* Update AEN queue. */
++ if (ha->ioctl->flags & IOCTL_AEN_TRACKING_ENABLE) {
++ qla2x00_enqueue_aen(ha, MBA_LOOP_DOWN, NULL);
++ }
++ break;
++
++ case MBA_LIP_RESET: /* LIP reset occurred */
++ DEBUG2(printk("scsi(%ld): Asynchronous LIP RESET.\n",
++ ha->host_no));
++ printk(KERN_INFO
++ "scsi(%ld): LIP reset occured.\n", ha->host_no);
++
++ if (ha->loop_state != LOOP_DOWN) {
++ ha->loop_state = LOOP_DOWN;
++ atomic_set(&ha->loop_down_timer, LOOP_DOWN_TIME);
++ qla2x00_mark_all_devices_lost(ha);
++ }
++
++ set_bit(COMMAND_WAIT_NEEDED, &ha->dpc_flags);
++ set_bit(RESET_MARKER_NEEDED, &ha->dpc_flags);
++
++ ha->operating_mode = LOOP;
++ ha->flags.management_server_logged_in = 0;
++
++ /* Update AEN queue. */
++ if (ha->ioctl->flags & IOCTL_AEN_TRACKING_ENABLE) {
++ qla2x00_enqueue_aen(ha, MBA_LIP_RESET, NULL);
++ }
++
++ ha->total_lip_cnt++;
++ break;
++
++#if !defined(ISP2100)
++ case MBA_LINK_MODE_UP: /* Link mode up. */
++ DEBUG2(printk("scsi(%ld): Asynchronous LINK MODE UP.\n",
++ ha->host_no));
++ printk(KERN_INFO
++ "scsi(%ld): Link mode is up.\n",
++ ha->host_no);
++
++ /*
++ * Until there's a transition from loop down to loop up, treat
++ * this as loop down only.
++ */
++ if (ha->loop_state != LOOP_DOWN) {
++ ha->loop_state = LOOP_DOWN;
++ if (!atomic_read(&ha->loop_down_timer))
++ atomic_set(&ha->loop_down_timer,
++ LOOP_DOWN_TIME);
++ qla2x00_mark_all_devices_lost(ha);
++ }
++
++ if (!(test_bit(ABORT_ISP_ACTIVE, &ha->dpc_flags))) {
++ set_bit(COMMAND_WAIT_NEEDED, &ha->dpc_flags);
++ set_bit(RESET_MARKER_NEEDED, &ha->dpc_flags);
++ }
++ set_bit(REGISTER_FC4_NEEDED, &ha->dpc_flags);
++ break;
++
++ case MBA_UPDATE_CONFIG: /* Update Configuration. */
++ mb[1] = RD_REG_WORD(®->mailbox1);
++
++ DEBUG2(printk("scsi(%ld): Asynchronous UPDATE CONFIG.\n",
++ ha->host_no));
++ printk(KERN_INFO
++ "scsi(%ld): Configuration change detected: value=%x.\n",
++ ha->host_no, mb[1]);
++
++ if (ha->loop_state != LOOP_DOWN) {
++ ha->loop_state = LOOP_DOWN;
++ if (!atomic_read(&ha->loop_down_timer))
++ atomic_set(&ha->loop_down_timer,
++ LOOP_DOWN_TIME);
++ qla2x00_mark_all_devices_lost(ha);
++ }
++
++ set_bit(LOOP_RESYNC_NEEDED, &ha->dpc_flags);
++ set_bit(LOCAL_LOOP_UPDATE, &ha->dpc_flags);
++ break;
++#endif /* #if !defined(ISP2100) */
++
++ case MBA_PORT_UPDATE: /* Port database update */
++ /*
++ * If PORT UPDATE is global (recieved LIP_OCCURED/LIP_RESET
++ * event etc. earlier indicating loop is down) then process
++ * it. Otherwise ignore it and Wait for RSCN to come in.
++ */
++ if (ha->loop_state != LOOP_DOWN) {
++ DEBUG2(printk("scsi(%ld): Asynchronous PORT UPDATE "
++ "ignored.\n", ha->host_no));
++ printk(KERN_INFO
++ "scsi(%ld): Asynchronous PORT UPDATE ignored.\n",
++ ha->host_no);
++ break;
++ }
++
++ DEBUG2(printk("scsi(%ld): Asynchronous PORT UPDATE.\n",
++ ha->host_no));
++ printk(KERN_INFO
++ "scsi(%ld): Port database changed.\n", ha->host_no);
++
++ /*
++ * Mark all devices as missing so we will login again.
++ */
++ ha->loop_state = LOOP_UP;
++
++ atomic_set(&ha->loop_down_timer, 0);
++ qla2x00_mark_all_devices_lost(ha);
++
++ ha->flags.rscn_queue_overflow = 1;
++
++ set_bit(LOOP_RESYNC_NEEDED, &ha->dpc_flags);
++ set_bit(LOCAL_LOOP_UPDATE, &ha->dpc_flags);
++
++ /* Update AEN queue. */
++ if (ha->ioctl->flags & IOCTL_AEN_TRACKING_ENABLE) {
++ qla2x00_enqueue_aen(ha, MBA_PORT_UPDATE, NULL);
++ }
++ break;
++
++ case MBA_SCR_UPDATE: /* State Change Registration */
++ mb[1] = RD_REG_WORD(®->mailbox1);
++ mb[2] = RD_REG_WORD(®->mailbox2);
++
++ DEBUG2(printk("scsi(%ld): Asynchronous RSCR UPDATE.\n",
++ ha->host_no));
++ DEBUG(printk(KERN_INFO
++ "scsi(%ld): RSCN database changed - 0x%x, 0x%x.\n",
++ ha->host_no, mb[1], mb[2]));
++
++ rscn_queue_index = ha->rscn_in_ptr + 1;
++ if (rscn_queue_index == MAX_RSCN_COUNT)
++ rscn_queue_index = 0;
++ if (rscn_queue_index != ha->rscn_out_ptr) {
++ ha->rscn_queue[ha->rscn_in_ptr].format =
++ MSB(mb[1]);
++ ha->rscn_queue[ha->rscn_in_ptr].d_id.b.domain =
++ LSB(mb[1]);
++ ha->rscn_queue[ha->rscn_in_ptr].d_id.b.area =
++ MSB(mb[2]);
++ ha->rscn_queue[ha->rscn_in_ptr].d_id.b.al_pa =
++ LSB(mb[2]);
++ ha->rscn_in_ptr = rscn_queue_index;
++ } else {
++ ha->flags.rscn_queue_overflow = 1;
++ }
++
++ ha->loop_state = LOOP_UPDATE;
++ atomic_set(&ha->loop_down_timer, 0);
++ ha->flags.management_server_logged_in = 0;
++
++ set_bit(LOOP_RESYNC_NEEDED, &ha->dpc_flags);
++ set_bit(RSCN_UPDATE, &ha->dpc_flags);
++
++ /* Update AEN queue. */
++ if (ha->ioctl->flags & IOCTL_AEN_TRACKING_ENABLE) {
++ qla2x00_enqueue_aen(ha, MBA_RSCN_UPDATE, &mb[0]);
++ }
++ break;
++ }
++}
++
++/**
++ * qla2x00_process_completed_request() - Process a Fast Post response.
++ * @ha: SCSI driver HA context
++ * @index: SRB index
++ */
++static void
++qla2x00_process_completed_request(struct scsi_qla_host *ha, int index)
++{
++ srb_t *sp;
++ struct scsi_qla_host *vis_ha;
++
++ ENTER(__func__);
++
++ /* Validate handle. */
++ if (index >= MAX_OUTSTANDING_COMMANDS) {
++ DEBUG2(printk("scsi(%ld): Invalid SCSI completion handle %d.\n",
++ ha->host_no, index));
++ printk(KERN_WARNING
++ "scsi(%ld): Invalid SCSI completion handle %d.\n",
++ ha->host_no, index);
++
++ set_bit(ISP_ABORT_NEEDED, &ha->dpc_flags);
++ return;
++ }
++
++ sp = ha->outstanding_cmds[index];
++ if (sp) {
++ /* Free outstanding command slot. */
++ ha->outstanding_cmds[index] = 0;
++#if defined(IOCB_THROLLE_USAGE)
++ ha->iocb_cnt -= sp->iocb_cnt;
++#endif
++ vis_ha = (scsi_qla_host_t *)sp->cmd->device->host->hostdata;
++ if (ha->actthreads)
++ ha->actthreads--;
++ sp->lun_queue->out_cnt--;
++ sp->flags |= SRB_ISP_COMPLETED;
++ CMD_COMPL_STATUS(sp->cmd) = 0L;
++ CMD_SCSI_STATUS(sp->cmd) = 0L;
++
++ /* Save ISP completion status */
++ CMD_RESULT(sp->cmd) = DID_OK << 16;
++ sp->fo_retry_cnt = 0;
++ add_to_done_queue(ha, sp);
++ } else {
++ DEBUG2(printk("scsi(%ld): Invalid ISP SCSI completion handle\n",
++ ha->host_no));
++ printk(KERN_WARNING
++ "scsi(%ld): Invalid ISP SCSI completion handle\n",
++ ha->host_no);
++
++ set_bit(ISP_ABORT_NEEDED, &ha->dpc_flags);
++ }
++
++ LEAVE(__func__);
++}
++
++/**
++ * qla2x00_response_pkt() - Process response queue entries.
++ * @ha: SCSI driver HA context
++ * @index: Response queue out pointer
++ */
++static void
++qla2x00_response_pkt(scsi_qla_host_t *ha, uint16_t index)
++{
++ device_reg_t *reg = ha->iobase;
++ response_t *pkt;
++
++ ENTER(__func__);
++
++ if (!ha->flags.online)
++ return;
++
++ if (index >= RESPONSE_ENTRY_CNT) {
++ /* Invalid response pointer value. */
++ DEBUG(printk("scsi(%ld): Response Pointer Error - index=%x.\n",
++ ha->host_no, index));
++
++ set_bit(ISP_ABORT_NEEDED, &ha->dpc_flags);
++ return;
++ }
++
++ while (ha->rsp_ring_index != index) {
++ pkt = ha->response_ring_ptr;
++
++ DEBUG5(printk("%s(%ld): ha->rsp_ring_index=%ld index=%ld.\n",
++ __func__, ha->host_no,
++ (u_long)ha->rsp_ring_index, (u_long)index));
++ DEBUG5(printk("%s(%ld): response packet data:",
++ __func__, ha->host_no));
++ DEBUG5(qla2x00_dump_buffer((uint8_t *)pkt,
++ RESPONSE_ENTRY_SIZE));
++
++ ha->rsp_ring_index++;
++ if (ha->rsp_ring_index == RESPONSE_ENTRY_CNT) {
++ ha->rsp_ring_index = 0;
++ ha->response_ring_ptr = ha->response_ring;
++ } else {
++ ha->response_ring_ptr++;
++ }
++
++#if defined(FC_IP_SUPPORT)
++ /*
++ * This code is temporary until FW is fixed. FW is mistakenly
++ * setting bit 6 on Mailbox IOCB response
++ */
++ pkt->entry_status &= 0x3f;
++#endif
++
++ if (pkt->entry_status != 0) {
++ DEBUG3(printk(KERN_INFO
++ "scsi(%ld): Process error entry.\n", ha->host_no));
++
++ qla2x00_error_entry(ha, pkt);
++ continue;
++ }
++
++ switch (pkt->entry_type) {
++ case STATUS_TYPE:
++ qla2x00_status_entry(ha, (sts_entry_t *)pkt);
++ break;
++
++ case STATUS_CONT_TYPE:
++ qla2x00_status_cont_entry(ha, (sts_cont_entry_t *)pkt);
++ break;
++
++ case MS_IOCB_TYPE:
++ qla2x00_ms_entry(ha, (ms_iocb_entry_t *)pkt);
++ break;
++
++#if defined(FC_IP_SUPPORT)
++ case ET_IP_COMMAND_64:
++ /* Handle IP send completion */
++ qla2x00_ip_send_complete(ha,
++ pkt->handle, le16_to_cpu(pkt->comp_status));
++ break;
++
++ case ET_IP_RECEIVE:
++ /* Handle IP receive packet */
++ qla2x00_ip_receive(ha, pkt);
++ break;
++
++ case ET_MAILBOX_COMMAND:
++ if (pkt->sys_define == SOURCE_IP) {
++ qla2x00_ip_mailbox_iocb_done(ha,
++ (struct mbx_entry *)pkt);
++ break;
++ }
++#endif /* FC_IP_SUPPORT */
++
++ default:
++ /* Type Not Supported. */
++ DEBUG4(printk(KERN_WARNING
++ "scsi(%ld): Received unknown response pkt type %x "
++ "entry status=%x.\n",
++ ha->host_no, pkt->entry_type, pkt->entry_status));
++ break;
++ }
++ }
++
++ /* Adjust ring index */
++ WRT_REG_WORD(ISP_RSP_Q_OUT(reg), ha->rsp_ring_index);
++
++ LEAVE(__func__);
++}
++
++/**
++ * qla2x00_status_entry() - Process a Status IOCB entry.
++ * @ha: SCSI driver HA context
++ * @pkt: Entry pointer
++ */
++static void
++qla2x00_status_entry(scsi_qla_host_t *ha, sts_entry_t *pkt )
++{
++ uint32_t b, t, l;
++ scsi_qla_host_t *vis_ha;
++ srb_t *sp;
++ os_lun_t *lq;
++ os_tgt_t *tq;
++ fc_port_t *fcport;
++ Scsi_Cmnd *cp;
++ uint16_t comp_status;
++ uint16_t scsi_status;
++ uint8_t lscsi_status;
++ uint32_t resid;
++ uint8_t sense_sz = 0;
++
++
++ ENTER(__func__);
++
++ /* Validate handle. */
++ if (pkt->handle < MAX_OUTSTANDING_COMMANDS) {
++ sp = ha->outstanding_cmds[pkt->handle];
++ /* Free outstanding command slot. */
++ ha->outstanding_cmds[pkt->handle] = 0;
++ } else
++ sp = NULL;
++
++ if (sp == NULL) {
++ DEBUG2(printk("scsi(%ld): Status Entry invalid handle.\n",
++ ha->host_no));
++ printk(KERN_WARNING
++ "scsi(%ld): Status Entry invalid handle.\n", ha->host_no);
++
++ set_bit(ISP_ABORT_NEEDED, &ha->dpc_flags);
++ if (ha->dpc_wait && !ha->dpc_active)
++ up(ha->dpc_wait);
++ return;
++ }
++
++ cp = sp->cmd;
++ if (cp == NULL) {
++ DEBUG2(printk("scsi(%ld): Cmd already returned back to OS "
++ "pkt->handle: %d sp=%p sp->state:%d\n",
++ ha->host_no, pkt->handle, sp, sp->state));
++ printk(KERN_WARNING
++ "scsi(%ld): Cmd is NULL: already returned to OS (sp=%p)\n",
++ ha->host_no, sp);
++ return;
++ }
++
++ /*
++ * Set the visible adapter for lun Q access.
++ */
++ vis_ha = (scsi_qla_host_t *)cp->device->host->hostdata;
++ if (ha->actthreads)
++ ha->actthreads--;
++
++ if (sp->lun_queue == NULL) {
++ DEBUG2(printk("scsi(%ld): Status Entry invalid lun "
++ "pointer.\n", ha->host_no));
++ printk(KERN_WARNING
++ "scsi(%ld): Status Entry invalid lun pointer.\n",
++ ha->host_no);
++
++ set_bit(ISP_ABORT_NEEDED, &ha->dpc_flags);
++ if (ha->dpc_wait && !ha->dpc_active)
++ up(ha->dpc_wait);
++ return;
++ }
++
++ sp->lun_queue->out_cnt--;
++#if defined(IOCB_THROLLE_USAGE)
++ ha->iocb_cnt -= sp->iocb_cnt;
++#endif
++
++ comp_status = le16_to_cpu(pkt->comp_status);
++ /* Mask of reserved bits 12-15. Before we examine the scsi status */
++ scsi_status = le16_to_cpu(pkt->scsi_status) & SS_MASK;
++ lscsi_status = scsi_status & STATUS_MASK;
++
++ CMD_ENTRY_STATUS(cp) = pkt->entry_status;
++ CMD_COMPL_STATUS(cp) = comp_status;
++ CMD_SCSI_STATUS(cp) = scsi_status;
++
++ /* dg 10/11 */
++ sp->flags |= SRB_ISP_COMPLETED;
++
++ /* Generate LU queue on cntrl, target, LUN */
++ b = SCSI_BUS_32(cp);
++ t = SCSI_TCN_32(cp);
++ l = SCSI_LUN_32(cp);
++
++ tq = sp->tgt_queue;
++ lq = sp->lun_queue;
++
++ /*
++ * If loop is in transient state Report DID_BUS_BUSY
++ */
++ if (!(sp->flags & SRB_IOCTL) &&
++ (atomic_read(&ha->loop_down_timer) ||
++ ha->loop_state != LOOP_READY) &&
++ (comp_status != CS_COMPLETE || scsi_status != 0)) {
++
++ DEBUG2(printk("scsi(%ld:%d:%d:%d): Loop Not Ready - "
++ "pid=%lx.\n",
++ ha->host_no,
++ b, t, l, sp->cmd->serial_number));
++
++ qla2x00_extend_timeout(sp->cmd, EXTEND_CMD_TIMEOUT);
++ add_to_retry_queue(ha, sp);
++ return;
++ }
++
++ /*
++ * Based on Host and scsi status generate status code for Linux
++ */
++ switch (comp_status) {
++ case CS_COMPLETE:
++ /*
++ * Host complted command OK. Check SCSI Status to determine
++ * the correct Host status.
++ */
++ if (scsi_status == 0) {
++ CMD_RESULT(cp) = DID_OK << 16;
++
++ /* Perform any post command processing */
++ qla2x00_filter_command(ha, sp);
++ } else { /* Check for non zero scsi status */
++ if (lscsi_status == SS_BUSY_CONDITION) {
++ CMD_RESULT(cp) =
++ DID_BUS_BUSY << 16 | lscsi_status;
++ } else {
++ CMD_RESULT(cp) =
++ DID_OK << 16 | lscsi_status;
++
++ if (lscsi_status != SS_CHECK_CONDITION)
++ break;
++
++ /*
++ * Copy Sense Data into sense buffer
++ */
++ memset(cp->sense_buffer,
++ 0, sizeof(cp->sense_buffer));
++
++ if (!(scsi_status & SS_SENSE_LEN_VALID))
++ break;
++
++ if (le16_to_cpu(pkt->req_sense_length) <
++ CMD_SNSLEN(cp))
++ sense_sz =
++ le16_to_cpu(pkt->req_sense_length);
++ else
++ sense_sz = CMD_SNSLEN(cp) - 1;
++
++ CMD_ACTUAL_SNSLEN(cp) = sense_sz;
++ sp->request_sense_length = sense_sz;
++ sp->request_sense_ptr =
++ (void *)cp->sense_buffer;
++
++ if (sp->request_sense_length > 32)
++ sense_sz = 32;
++
++ memcpy(cp->sense_buffer,
++ pkt->req_sense_data, sense_sz);
++
++ sp->request_sense_ptr += sense_sz;
++ sp->request_sense_length -= sense_sz;
++ if (sp->request_sense_length != 0)
++ ha->status_srb = sp;
++
++ if (!(sp->flags & SRB_IOCTL) &&
++ qla2x00_check_sense(cp, lq) ==
++ QL_STATUS_SUCCESS) {
++ /*
++ * Throw away status_cont if any
++ */
++ ha->status_srb = NULL;
++ add_to_scsi_retry_queue(ha, sp);
++ return;
++ }
++
++ DEBUG5(printk("%s(): Check condition Sense "
++ "data, scsi(%ld:%d:%d:%d) cmd=%p "
++ "pid=%ld\n",
++ __func__,
++ ha->host_no,
++ b, t, l,
++ cp, cp->serial_number));
++ if (sense_sz)
++ DEBUG5(qla2x00_dump_buffer(
++ cp->sense_buffer,
++ CMD_ACTUAL_SNSLEN(cp)));
++ }
++ }
++ break;
++
++ case CS_DATA_UNDERRUN:
++ DEBUG2(printk(KERN_INFO
++ "scsi(%ld:%d:%d) UNDERRUN status detected 0x%x-0x%x.\n",
++ ha->host_no,
++ t, l, comp_status, scsi_status));
++
++ resid = le32_to_cpu(pkt->residual_length);
++ CMD_RESID_LEN(cp) = resid;
++
++ /*
++ * Check to see if SCSI Status is non zero. If so report SCSI
++ * Status.
++ */
++ if (lscsi_status != 0) {
++ if (lscsi_status == SS_BUSY_CONDITION) {
++ CMD_RESULT(cp) =
++ DID_BUS_BUSY << 16 | lscsi_status;
++ } else {
++ CMD_RESULT(cp) =
++ DID_OK << 16 | lscsi_status;
++
++ if (lscsi_status != SS_CHECK_CONDITION)
++ break;
++
++ /*
++ * Copy Sense Data into sense buffer
++ */
++ memset(cp->sense_buffer,
++ 0, sizeof(cp->sense_buffer));
++
++ if (!(scsi_status & SS_SENSE_LEN_VALID))
++ break;
++
++ if (le16_to_cpu(pkt->req_sense_length) <
++ CMD_SNSLEN(cp))
++ sense_sz =
++ le16_to_cpu(pkt->req_sense_length);
++ else
++ sense_sz = CMD_SNSLEN(cp) - 1;
++
++ CMD_ACTUAL_SNSLEN(cp) = sense_sz;
++ sp->request_sense_length = sense_sz;
++ sp->request_sense_ptr =
++ (void *)cp->sense_buffer;
++
++ if (sp->request_sense_length > 32)
++ sense_sz = 32;
++
++ memcpy(cp->sense_buffer,
++ pkt->req_sense_data, sense_sz);
++
++ sp->request_sense_ptr += sense_sz;
++ sp->request_sense_length -= sense_sz;
++ if (sp->request_sense_length != 0)
++ ha->status_srb = sp;
++
++ if (!(sp->flags & SRB_IOCTL) &&
++ (qla2x00_check_sense(cp, lq) ==
++ QL_STATUS_SUCCESS)) {
++ ha->status_srb = NULL;
++ add_to_scsi_retry_queue(ha,sp);
++ return;
++ }
++
++ DEBUG5(printk("%s(): Check condition Sense "
++ "data, scsi(%ld:%d:%d:%d) cmd=%p "
++ "pid=%ld\n",
++ __func__,
++ ha->host_no,
++ b, t, l,
++ cp, cp->serial_number));
++ if (sense_sz)
++ DEBUG5(qla2x00_dump_buffer(
++ cp->sense_buffer,
++ CMD_ACTUAL_SNSLEN(cp)));
++ }
++ } else {
++ /*
++ * If RISC reports underrun and target does not report
++ * it then we must have a lost frame, so tell upper
++ * layer to retry it by reporting a bus busy.
++ */
++ if (!(scsi_status & SS_RESIDUAL_UNDER)) {
++ DEBUG2(printk("scsi(%ld:%d:%d:%d) Dropped "
++ "frame(s) detected (%x of %x bytes)..."
++ "retrying command.\n",
++ ha->host_no,
++ b, t, l, resid, CMD_XFRLEN(cp)));
++
++ CMD_RESULT(cp) = DID_BUS_BUSY << 16;
++ ha->dropped_frame_error_cnt++;
++ break;
++ }
++
++ /*
++ * Handle mid-layer underflow???
++ *
++ * For kernels less than 2.4, the driver must return
++ * an error if an underflow is detected. For kernels
++ * equal-to and above 2.4, the mid-layer will
++ * appearantly handle the underflow by detecting the
++ * residual count -- unfortunately, we do not see
++ * where this is actually being done. In the interim,
++ * we will return DID_ERROR.
++ */
++ cp->resid = resid;
++/* TODO:
++ *
++ * Determine if this is a valid check for 2.5
++ */
++#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
++ if ((unsigned)(CMD_XFRLEN(cp) - resid) <
++ cp->underflow) {
++ printk(KERN_INFO
++ "scsi(%ld): Mid-layer underflow detected "
++ "(%x of %x bytes) wanted %x bytes..."
++ "returning DID_ERROR status!\n",
++ ha->host_no,
++ resid, CMD_XFRLEN(cp), cp->underflow);
++
++ CMD_RESULT(cp) = DID_ERROR << 16;
++ break;
++ }
++#endif
++ /* Everybody online, looking good... */
++ CMD_RESULT(cp) = DID_OK << 16;
++
++ /* Perform any post command processing */
++ qla2x00_filter_command(ha, sp);
++ }
++ break;
++
++ case CS_PORT_LOGGED_OUT:
++ case CS_PORT_CONFIG_CHG:
++ case CS_PORT_BUSY:
++ case CS_INCOMPLETE:
++ case CS_PORT_UNAVAILABLE:
++ /*
++ * If the port is in Target Down state, return all IOs for this
++ * Target with DID_NO_CONNECT ELSE Queue the IOs in the
++ * retry_queue.
++ */
++ fcport = lq->fclun->fcport;
++ DEBUG2(printk("scsi(%ld:%d:%d): status_entry: Port Down "
++ "pid=%ld, compl status=0x%x, port state=0x%x\n",
++ ha->host_no,
++ t, l,
++ sp->cmd->serial_number,
++ comp_status,
++ atomic_read(&fcport->state)));
++
++ if ((sp->flags & SRB_IOCTL) ||
++ (atomic_read(&fcport->state) == FC_DEVICE_DEAD)) {
++ CMD_RESULT(cp) = DID_NO_CONNECT << 16;
++ add_to_done_queue(ha, sp);
++ } else {
++ qla2x00_extend_timeout(cp, EXTEND_CMD_TIMEOUT);
++ add_to_retry_queue(ha, sp);
++ }
++
++ if (atomic_read(&fcport->state) == FC_ONLINE) {
++ qla2x00_mark_device_lost(ha, fcport);
++ }
++
++ return;
++ break;
++
++ case CS_RESET:
++ DEBUG2(printk(KERN_INFO
++ "scsi(%ld): RESET status detected 0x%x-0x%x.\n",
++ ha->host_no, comp_status, scsi_status));
++
++ if (sp->flags & SRB_IOCTL) {
++ CMD_RESULT(cp) = DID_RESET << 16;
++ }
++ else {
++ qla2x00_extend_timeout(cp, EXTEND_CMD_TIMEOUT);
++ add_to_retry_queue(ha, sp);
++ return;
++ }
++ break;
++
++ case CS_ABORTED:
++ /*
++ * hv2.19.12 - DID_ABORT does not retry the request if we
++ * aborted this request then abort otherwise it must be a
++ * reset.
++ */
++ DEBUG2(printk(KERN_INFO
++ "scsi(%ld): ABORT status detected 0x%x-0x%x.\n",
++ ha->host_no, comp_status, scsi_status));
++
++ CMD_RESULT(cp) = DID_RESET << 16;
++ break;
++
++ case CS_TIMEOUT:
++ DEBUG2(printk(KERN_INFO
++ "scsi(%ld:%d:%d:%d): TIMEOUT status detected 0x%x-0x%x.\n",
++ ha->host_no,
++ b, t, l,
++ comp_status, scsi_status));
++
++ CMD_RESULT(cp) = DID_BUS_BUSY << 16;
++
++ fcport = lq->fclun->fcport;
++// Dump FW
++printk("***TIMEOUT cmd=(%lx) cdb=(%x)\n\n", cp->serial_number, cp->cmnd[0]);
++//qla2x00_dump_isp(ha, 1);
++
++ /*
++ * Check to see if logout occurred
++ */
++ t = SCSI_TCN_32(cp);
++ if ((le16_to_cpu(pkt->status_flags) & IOCBSTAT_SF_LOGO)) {
++ DEBUG2(printk("scsi: Timeout occurred with Logo, "
++ "status flag (%x) with public device loop id "
++ "(%x), attempt new recovery\n",
++ le16_to_cpu(pkt->status_flags),
++ ha->fc_db[t].loop_id));
++
++ ha->fc_db[t].flag |= DEV_RELOGIN;
++ fcport->login_retry = ha->login_retry_count;
++ set_bit(RELOGIN_NEEDED, &ha->dpc_flags);
++ }
++ break;
++
++ case CS_QUEUE_FULL:
++ DEBUG2(printk(KERN_INFO
++ "scsi(%ld): QUEUE FULL status detected 0x%x-0x%x.\n",
++ ha->host_no, comp_status, scsi_status));
++
++ /*
++ * SCSI Mid-Layer handles device queue full.
++ */
++ CMD_RESULT(cp) = DID_OK << 16 | lscsi_status;
++
++/* Adjust queue depth */
++{
++int ret;
++
++ret = scsi_track_queue_full(cp->device, sp->lun_queue->out_cnt-1);
++printk("scsi(%ld:%d:%d:%d): QUEUE FULL adjustments -- "
++ "outstanding/adjusted (%ld/%d) -- qd/lqfd/lqfc (%d/%d/%d).\n",
++ ha->host_no,
++ cp->device->channel, cp->device->id, cp->device->lun,
++ sp->lun_queue->out_cnt-1, ret,
++ cp->device->queue_depth,
++ cp->device->last_queue_full_count,
++ cp->device->last_queue_full_depth);
++}
++
++
++ break;
++
++ default:
++ DEBUG3(printk("scsi(%ld): Error detected (unknown status) "
++ "0x%x-0x%x.\n",
++ ha->host_no, comp_status, scsi_status));
++ printk(KERN_INFO
++ "scsi(%ld): Unknown status detected 0x%x-0x%x.\n",
++ ha->host_no, comp_status, scsi_status);
++
++ CMD_RESULT(cp) = DID_ERROR << 16;
++ break;
++ }
++
++ /* Place command on done queue. */
++ if (ha->status_srb == NULL)
++ add_to_done_queue(ha, sp);
++
++ LEAVE(__func__);
++}
++
++/**
++ * qla2x00_status_cont_entry() - Process a Status Continuations entry.
++ * @ha: SCSI driver HA context
++ * @pkt: Entry pointer
++ *
++ * Extended sense data.
++ */
++static void
++qla2x00_status_cont_entry(scsi_qla_host_t *ha, sts_cont_entry_t *pkt)
++{
++ uint8_t sense_sz = 0;
++ srb_t *sp = ha->status_srb;
++ Scsi_Cmnd *cp;
++
++ ENTER(__func__);
++
++ if (sp != NULL && sp->request_sense_length != 0) {
++ cp = sp->cmd;
++ if (cp == NULL) {
++ DEBUG2(printk("%s(): Cmd already returned back to OS "
++ "sp=%p sp->state:%d\n",
++ __func__, sp, sp->state));
++ printk(KERN_INFO
++ "%s(): cmd is NULL: already returned to OS "
++ "(sp=%p)\n",
++ __func__, sp);
++
++ ha->status_srb = NULL;
++ return;
++ }
++
++ if (sp->request_sense_length > sizeof (pkt->req_sense_data)) {
++ sense_sz = sizeof(pkt->req_sense_data);
++ } else {
++ sense_sz = sp->request_sense_length;
++ }
++
++ /* Move sense data. */
++ memcpy(sp->request_sense_ptr, pkt->req_sense_data, sense_sz);
++ DEBUG5(qla2x00_dump_buffer(sp->request_sense_ptr, sense_sz));
++
++ sp->request_sense_ptr += sense_sz;
++ sp->request_sense_length -= sense_sz;
++
++ /* Place command on done queue. */
++ if (sp->request_sense_length == 0) {
++ add_to_done_queue(ha, sp);
++ ha->status_srb = NULL;
++ }
++ }
++
++ LEAVE(__func__);
++}
++
++/**
++ * qla2x00_error_entry() - Process an error entry.
++ * @ha: SCSI driver HA context
++ * @pkt: Entry pointer
++ */
++static void
++qla2x00_error_entry(scsi_qla_host_t *ha, response_t *pkt)
++{
++ srb_t *sp;
++
++ ENTER(__func__);
++
++#if defined(QL_DEBUG_LEVEL_2)
++ if (pkt->entry_status & RF_INV_E_ORDER)
++ printk("%s(%ld): Invalid Entry Order\n",
++ __func__, ha->host_no);
++ else if (pkt->entry_status & RF_INV_E_COUNT)
++ printk("%s(%ld): Invalid Entry Count\n",
++ __func__, ha->host_no);
++ else if (pkt->entry_status & RF_INV_E_PARAM)
++ printk("%s(%ld): Invalid Entry Parameter\n",
++ __func__, ha->host_no);
++ else if (pkt->entry_status & RF_INV_E_TYPE)
++ printk("%s(%ld): Invalid Entry Type\n",
++ __func__, ha->host_no);
++ else if (pkt->entry_status & RF_BUSY)
++ printk("%s(%ld): Busy\n",
++ __func__, ha->host_no);
++ else
++ printk("%s(%ld): UNKNOWN flag error\n",
++ __func__, ha->host_no);
++#endif
++
++ /* Validate handle. */
++ if (pkt->handle < MAX_OUTSTANDING_COMMANDS)
++ sp = ha->outstanding_cmds[pkt->handle];
++ else
++ sp = NULL;
++
++ if (sp) {
++ /* Free outstanding command slot. */
++ ha->outstanding_cmds[pkt->handle] = 0;
++ if (ha->actthreads)
++ ha->actthreads--;
++ sp->lun_queue->out_cnt--;
++#if defined(IOCB_THROLLE_USAGE)
++ ha->iocb_cnt -= sp->iocb_cnt;
++#endif
++
++ sp->flags |= SRB_ISP_COMPLETED;
++
++ /* Bad payload or header */
++ if (pkt->entry_status &
++ (RF_INV_E_ORDER | RF_INV_E_COUNT |
++ RF_INV_E_PARAM | RF_INV_E_TYPE)) {
++ CMD_RESULT(sp->cmd) = DID_ERROR << 16;
++ } else if (pkt->entry_status & RF_BUSY) {
++ CMD_RESULT(sp->cmd) = DID_BUS_BUSY << 16;
++ } else {
++ CMD_RESULT(sp->cmd) = DID_ERROR << 16;
++ }
++ /* Place command on done queue. */
++ add_to_done_queue(ha, sp);
++
++ } else if (pkt->entry_type == COMMAND_A64_TYPE ||
++ pkt->entry_type == COMMAND_TYPE) {
++ DEBUG2(printk("scsi(%ld): Error entry - invalid handle\n",
++ ha->host_no));
++ printk(KERN_WARNING
++ "scsi(%ld): Error entry - invalid handle\n",
++ ha->host_no);
++
++ set_bit(ISP_ABORT_NEEDED, &ha->dpc_flags);
++ if (ha->dpc_wait && !ha->dpc_active)
++ up(ha->dpc_wait);
++ }
++
++ LEAVE(__func__);
++}
++
++/**
++ * qla2x00_ms_entry() - Process a Management Server entry.
++ * @ha: SCSI driver HA context
++ * @index: Response queue out pointer
++ */
++static void
++qla2x00_ms_entry(scsi_qla_host_t *ha, ms_iocb_entry_t *pkt)
++{
++ srb_t *sp;
++
++ ENTER(__func__);
++
++ DEBUG3(printk("%s(%ld): pkt=%p pkthandle=%d.\n",
++ __func__, ha->host_no, pkt, pkt->handle1));
++
++ /* Validate handle. */
++ if (pkt->handle1 < MAX_OUTSTANDING_COMMANDS)
++ sp = ha->outstanding_cmds[pkt->handle1];
++ else
++ sp = NULL;
++
++ if (sp == NULL) {
++ DEBUG2(printk("scsi(%ld): MS entry - invalid handle\n",
++ ha->host_no));
++ printk(KERN_WARNING
++ "scsi(%ld): MS entry - invalid handle\n",
++ ha->host_no);
++
++ set_bit(ISP_ABORT_NEEDED, &ha->dpc_flags);
++ return;
++ }
++
++ CMD_COMPL_STATUS(sp->cmd) = le16_to_cpu(pkt->status);
++ CMD_ENTRY_STATUS(sp->cmd) = pkt->entry_status;
++
++ /* Free outstanding command slot. */
++ ha->outstanding_cmds[pkt->handle1] = 0;
++ sp->flags |= SRB_ISP_COMPLETED;
++
++ add_to_done_queue(ha, sp);
++
++ LEAVE(__func__);
++}
++
++/**
++ * qla2x00_check_sense() - Perform any sense data interrogation.
++ * @cp: SCSI Command
++ * @lq: Lun queue
++ *
++ * Returns QL_STATUS_SUCCESS if the lun queue is suspended, else
++ * QL_STATUS_ERROR (lun queue not suspended).
++ */
++static int
++qla2x00_check_sense(Scsi_Cmnd *cp, os_lun_t *lq)
++{
++ scsi_qla_host_t *ha;
++ srb_t *sp;
++ fc_port_t *fcport;
++
++ ha = (scsi_qla_host_t *) cp->device->host->hostdata;
++ if (((cp->sense_buffer[0] & 0x70) >> 4) != 7) {
++ return (QL_STATUS_ERROR);
++ }
++
++ sp = (srb_t * )CMD_SP(cp);
++ sp->flags |= SRB_GOT_SENSE;
++
++ switch (cp->sense_buffer[2] & 0xf) {
++ case RECOVERED_ERROR:
++ CMD_RESULT(cp) = DID_OK << 16;
++ cp->sense_buffer[0] = 0;
++ break;
++
++ case NOT_READY:
++ fcport = lq->fclun->fcport;
++
++ /*
++ * Suspend the lun only for hard disk device type.
++ */
++ if (!(fcport->flags & FC_TAPE_DEVICE) &&
++ lq->q_state != LUN_STATE_TIMEOUT) {
++ /*
++ * If target is in process of being ready then suspend
++ * lun for 6 secs and retry all the commands.
++ */
++ if (cp->sense_buffer[12] == 0x4 &&
++ cp->sense_buffer[13] == 0x1) {
++
++ /* Suspend the lun for 6 secs */
++ qla2x00_suspend_lun(ha,
++ lq, 6, ql2xsuspendcount);
++
++ return (QL_STATUS_SUCCESS);
++ }
++ }
++ break;
++ }
++
++ return (QL_STATUS_ERROR);
++}
+--- /dev/null Thu Apr 11 07:25:15 2002
++++ linux-2.5.73-n9560/drivers/scsi/qla2xxx/qla_listops.h Thu Jul 3 15:34:42 2003
+@@ -0,0 +1,397 @@
++/******************************************************************************
++ * QLOGIC LINUX SOFTWARE
++ *
++ * QLogic ISP2x00 device driver for Linux 2.5.x
++ * Copyright (C) 2003 Qlogic Corporation
++ * (www.qlogic.com)
++ *
++ * This program is free software; you can redistribute it and/or modify it
++ * under the terms of the GNU General Public License as published by the
++ * Free Software Foundation; either version 2, or (at your option) any
++ * later version.
++ *
++ * This program is distributed in the hope that it will be useful, but
++ * WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ * General Public License for more details.
++ *
++ ******************************************************************************/
++
++/* Management functions for various lists */
++
++/*
++ * Found in kernel 2.4.9 and higher in include/linux/lists.h
++ *
++ * Iterate over a list safe against removal of list.
++ *
++ */
++#if !defined(list_for_each_safe)
++#define list_for_each_safe(pos, n, head) \
++ for( pos= (head)->next, n = pos->next; pos != (head); \
++ pos = n, n = pos->next )
++#endif
++
++/* __add_to_done_queue()
++ *
++ * Place SRB command on done queue.
++ *
++ * Input:
++ * ha = host pointer
++ * sp = srb pointer.
++ * Locking:
++ * this function assumes the ha->list_lock is already taken
++ */
++static inline void
++__add_to_done_queue(struct scsi_qla_host * ha, srb_t * sp)
++{
++ /*
++ if (sp->state != SRB_NO_QUEUE_STATE &&
++ sp->state != SRB_ACTIVE_STATE)
++ BUG();
++ */
++
++ /* Place block on done queue */
++ sp->cmd->host_scribble = (unsigned char *) NULL;
++ sp->state = SRB_DONE_STATE;
++ list_add_tail(&sp->list,&ha->done_queue);
++ ha->done_q_cnt++;
++ sp->ha = ha;
++}
++
++/* __add_to_free_queue()
++ *
++ * Place SRB command on free queue.
++ *
++ * Input:
++ * ha = host pointer
++ * sp = srb pointer.
++ * Locking:
++ * this function assumes the ha->list_lock is already taken
++ */
++static inline void
++__add_to_free_queue(struct scsi_qla_host * ha, srb_t * sp)
++{
++ /*
++ if (atomic_read(&sp->ref_count) != 0)
++ BUG();
++ */
++
++
++ /* Place block on free queue */
++ sp->state = SRB_FREE_STATE;
++ list_add_tail(&sp->list,&ha->free_queue);
++ ha->srb_cnt++;
++}
++
++static inline void
++__add_to_retry_queue(struct scsi_qla_host * ha, srb_t * sp)
++{
++ /*
++ if( sp->state != SRB_NO_QUEUE_STATE &&
++ sp->state != SRB_ACTIVE_STATE)
++ BUG();
++ */
++
++ /* Place block on retry queue */
++ list_add_tail(&sp->list,&ha->retry_queue);
++ ha->retry_q_cnt++;
++ sp->flags |= SRB_WATCHDOG;
++ ha->flags.watchdog_enabled = TRUE;
++ sp->state = SRB_RETRY_STATE;
++ sp->ha = ha;
++}
++
++static inline void
++__add_to_scsi_retry_queue(struct scsi_qla_host * ha, srb_t * sp)
++{
++ /*
++ if( sp->state != SRB_NO_QUEUE_STATE &&
++ sp->state != SRB_ACTIVE_STATE)
++ BUG();
++ */
++
++ /* Place block on retry queue */
++ list_add_tail(&sp->list,&ha->scsi_retry_queue);
++ ha->scsi_retry_q_cnt++;
++ sp->state = SRB_SCSI_RETRY_STATE;
++ sp->ha = ha;
++}
++
++static inline void
++add_to_done_queue(struct scsi_qla_host * ha, srb_t * sp)
++{
++ unsigned long flags;
++
++ spin_lock_irqsave(&ha->list_lock, flags);
++ __add_to_done_queue(ha,sp);
++ spin_unlock_irqrestore(&ha->list_lock, flags);
++}
++
++static inline void
++add_to_free_queue(struct scsi_qla_host * ha, srb_t * sp)
++{
++ unsigned long flags;
++
++ spin_lock_irqsave(&ha->list_lock, flags);
++ __add_to_free_queue(ha,sp);
++ spin_unlock_irqrestore(&ha->list_lock, flags);
++}
++
++static inline void
++add_to_retry_queue(struct scsi_qla_host * ha, srb_t * sp)
++{
++ unsigned long flags;
++
++ spin_lock_irqsave(&ha->list_lock, flags);
++ __add_to_retry_queue(ha,sp);
++ spin_unlock_irqrestore(&ha->list_lock, flags);
++}
++
++static inline void
++add_to_scsi_retry_queue(struct scsi_qla_host * ha, srb_t * sp)
++{
++ unsigned long flags;
++
++ spin_lock_irqsave(&ha->list_lock, flags);
++ __add_to_scsi_retry_queue(ha,sp);
++ spin_unlock_irqrestore(&ha->list_lock, flags);
++}
++
++/*
++ * __del_from_retry_queue
++ * Function used to remove a command block from the
++ * watchdog timer queue.
++ *
++ * Note: Must insure that command is on watchdog
++ * list before calling del_from_retry_queue
++ * if (sp->flags & SRB_WATCHDOG)
++ *
++ * Input:
++ * ha = adapter block pointer.
++ * sp = srb pointer.
++ * Locking:
++ * this function assumes the list_lock is already taken
++ */
++static inline void
++__del_from_retry_queue(struct scsi_qla_host * ha, srb_t * sp)
++{
++ list_del_init(&sp->list);
++
++ if (list_empty(&ha->retry_queue))
++ ha->flags.watchdog_enabled = FALSE;
++ sp->flags &= ~(SRB_WATCHDOG | SRB_BUSY);
++ sp->state = SRB_NO_QUEUE_STATE;
++ ha->retry_q_cnt--;
++}
++
++/*
++ * __del_from_scsi_retry_queue
++ * Function used to remove a command block from the
++ * scsi retry queue.
++ *
++ * Input:
++ * ha = adapter block pointer.
++ * sp = srb pointer.
++ * Locking:
++ * this function assumes the list_lock is already taken
++ */
++static inline void
++__del_from_scsi_retry_queue(struct scsi_qla_host * ha, srb_t * sp)
++{
++ list_del_init(&sp->list);
++
++ ha->scsi_retry_q_cnt--;
++ sp->state = SRB_NO_QUEUE_STATE;
++}
++
++/*
++ * del_from_retry_queue
++ * Function used to remove a command block from the
++ * watchdog timer queue.
++ *
++ * Note: Must insure that command is on watchdog
++ * list before calling del_from_retry_queue
++ * if (sp->flags & SRB_WATCHDOG)
++ *
++ * Input:
++ * ha = adapter block pointer.
++ * sp = srb pointer.
++ * Locking:
++ * this function takes and releases the list_lock
++ */
++static inline void
++del_from_retry_queue(struct scsi_qla_host * ha, srb_t * sp)
++{
++ unsigned long flags;
++
++ /* if (unlikely(!(sp->flags & SRB_WATCHDOG)))
++ BUG();*/
++ spin_lock_irqsave(&ha->list_lock, flags);
++
++ /* if (unlikely(list_empty(&ha->retry_queue)))
++ BUG();*/
++
++ __del_from_retry_queue(ha,sp);
++
++ spin_unlock_irqrestore(&ha->list_lock, flags);
++}
++/*
++ * del_from_scsi_retry_queue
++ * Function used to remove a command block from the
++ * scsi retry queue.
++ *
++ * Input:
++ * ha = adapter block pointer.
++ * sp = srb pointer.
++ * Locking:
++ * this function takes and releases the list_lock
++ */
++static inline void
++del_from_scsi_retry_queue(struct scsi_qla_host * ha, srb_t * sp)
++{
++ unsigned long flags;
++
++ spin_lock_irqsave(&ha->list_lock, flags);
++
++ /* if (unlikely(list_empty(&ha->scsi_retry_queue)))
++ BUG();*/
++
++ __del_from_scsi_retry_queue(ha,sp);
++
++ spin_unlock_irqrestore(&ha->list_lock, flags);
++}
++
++static inline void
++__del_from_free_queue(struct scsi_qla_host * ha, srb_t * sp)
++{
++ ha->srb_cnt--;
++ list_del_init(&sp->list);
++ sp->state = SRB_NO_QUEUE_STATE;
++}
++
++/*
++ * __add_to_pending_queue
++ * Add the standard SCB job to the bottom of standard SCB commands.
++ *
++ * Input:
++ * COMPLETE!!!
++ * q = SCSI LU pointer.
++ * sp = srb pointer.
++ * SCSI_LU_Q lock must be already obtained.
++ */
++static inline void
++__add_to_pending_queue(struct scsi_qla_host *ha, srb_t * sp)
++{
++ /*
++ if( sp->state != SRB_NO_QUEUE_STATE &&
++ sp->state != SRB_FREE_STATE &&
++ sp->state != SRB_ACTIVE_STATE)
++ BUG();
++ */
++
++ list_add_tail(&sp->list, &ha->pending_queue);
++ ha->qthreads++;
++ sp->state = SRB_PENDING_STATE;
++}
++
++static inline void
++__add_to_pending_queue_head(struct scsi_qla_host *ha, srb_t * sp)
++{
++ /*
++ if( sp->state != SRB_NO_QUEUE_STATE &&
++ sp->state != SRB_FREE_STATE &&
++ sp->state != SRB_ACTIVE_STATE)
++ BUG();
++ */
++
++ list_add(&sp->list, &ha->pending_queue);
++ ha->qthreads++;
++ sp->state = SRB_PENDING_STATE;
++}
++
++static inline void
++add_to_pending_queue(struct scsi_qla_host *ha, srb_t *sp)
++{
++ unsigned long flags;
++
++ spin_lock_irqsave(&ha->list_lock, flags);
++ __add_to_pending_queue(ha, sp);
++ spin_unlock_irqrestore(&ha->list_lock, flags);
++}
++static inline void
++add_to_pending_queue_head(struct scsi_qla_host *ha, srb_t *sp)
++{
++ unsigned long flags;
++
++ spin_lock_irqsave(&ha->list_lock, flags);
++ __add_to_pending_queue_head(ha, sp);
++ spin_unlock_irqrestore(&ha->list_lock, flags);
++}
++
++static inline void
++__del_from_pending_queue(struct scsi_qla_host *ha, srb_t *sp)
++{
++ list_del_init(&sp->list);
++ ha->qthreads--;
++ sp->state = SRB_NO_QUEUE_STATE;
++}
++
++/*
++ * Failover Stuff.
++ */
++static inline void
++__add_to_failover_queue(struct scsi_qla_host * ha, srb_t * sp)
++{
++ /*
++ if( sp->state != SRB_NO_QUEUE_STATE &&
++ sp->state != SRB_ACTIVE_STATE)
++ BUG();
++ */
++
++ list_add_tail(&sp->list,&ha->failover_queue);
++ ha->failover_cnt++;
++ sp->state = SRB_FAILOVER_STATE;
++ sp->ha = ha;
++}
++
++static inline void add_to_failover_queue(struct scsi_qla_host * ha, srb_t * sp)
++{
++ unsigned long flags;
++
++ spin_lock_irqsave(&ha->list_lock, flags);
++
++ __add_to_failover_queue(ha,sp);
++
++ spin_unlock_irqrestore(&ha->list_lock, flags);
++}
++static inline void __del_from_failover_queue(struct scsi_qla_host * ha, srb_t *
++ sp)
++{
++ ha->failover_cnt--;
++ list_del_init(&sp->list);
++ sp->state = SRB_NO_QUEUE_STATE;
++}
++
++static inline void del_from_failover_queue(struct scsi_qla_host * ha, srb_t * sp)
++{
++ unsigned long flags;
++
++ spin_lock_irqsave(&ha->list_lock, flags);
++
++ __del_from_failover_queue(ha,sp);
++
++ spin_unlock_irqrestore(&ha->list_lock, flags);
++}
++
++static inline void
++del_from_pending_queue(struct scsi_qla_host * ha, srb_t * sp)
++{
++ unsigned long flags;
++
++ spin_lock_irqsave(&ha->list_lock, flags);
++
++ __del_from_pending_queue(ha,sp);
++
++ spin_unlock_irqrestore(&ha->list_lock, flags);
++}
++
+--- /dev/null Thu Apr 11 07:25:15 2002
++++ linux-2.5.73-n9560/drivers/scsi/qla2xxx/qla_mbx.c Thu Jul 3 15:34:42 2003
+@@ -0,0 +1,2884 @@
++/*
++ * QLOGIC LINUX SOFTWARE
++ *
++ * QLogic ISP2x00 device driver for Linux 2.5.x
++ * Copyright (C) 2003 Qlogic Corporation
++ * (www.qlogic.com)
++ *
++ * This program is free software; you can redistribute it and/or modify it
++ * under the terms of the GNU General Public License as published by the
++ * Free Software Foundation; either version 2, or (at your option) any
++ * later version.
++ *
++ * This program is distributed in the hope that it will be useful, but
++ * WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ * General Public License for more details.
++ *
++ */
++
++#include "qla_os.h"
++
++#include "qla_def.h"
++
++/*
++ * Local Function Prototypes.
++ */
++static void
++qla2x00_mbx_sem_timeout(unsigned long);
++
++static uint8_t
++qla2x00_get_mbx_access(scsi_qla_host_t *, uint32_t);
++
++static uint8_t
++qla2x00_release_mbx_access(scsi_qla_host_t *, uint32_t);
++
++static uint8_t
++qla2x00_mbx_q_add(scsi_qla_host_t *, mbx_cmdq_t **);
++
++static void
++qla2x00_mbx_q_get(scsi_qla_host_t *, mbx_cmdq_t **);
++
++static void
++qla2x00_mbx_q_memb_alloc(scsi_qla_host_t *, mbx_cmdq_t **);
++
++static void
++qla2x00_mbx_q_memb_free(scsi_qla_host_t *, mbx_cmdq_t *);
++
++/***************************/
++/* Function implementation */
++/***************************/
++
++static void
++qla2x00_mbx_sem_timeout(unsigned long data)
++{
++ struct semaphore *sem_ptr = (struct semaphore *)data;
++
++ DEBUG11(printk("qla2x00_sem_timeout: entered.\n");)
++
++ if (sem_ptr != NULL) {
++ up(sem_ptr);
++ }
++
++ DEBUG11(printk("qla2x00_mbx_sem_timeout: exiting.\n");)
++}
++
++/*
++ * tov = timeout value in seconds
++ */
++static uint8_t
++qla2x00_get_mbx_access(scsi_qla_host_t *ha, uint32_t tov)
++{
++ uint8_t ret;
++ int prev_val = 1; /* assume no access yet */
++ mbx_cmdq_t *ptmp_mbq;
++ struct timer_list tmp_cmd_timer;
++ unsigned long cpu_flags;
++
++
++ DEBUG11(printk("qla2x00_get_mbx_access(%ld): entered.\n",
++ ha->host_no);)
++
++ while (1) {
++ if (test_bit(MBX_CMD_WANT, &ha->mbx_cmd_flags) == 0) {
++
++ DEBUG11(printk("qla2x00_get_mbx_access(%ld): going "
++ " to test access flags.\n", ha->host_no);)
++
++ /* No one else is waiting. Go ahead and try to
++ * get access.
++ */
++ if ((prev_val = test_and_set_bit(MBX_CMD_ACTIVE,
++ &ha->mbx_cmd_flags)) == 0) {
++ break;
++ }
++ }
++
++ /* wait for previous command to finish */
++ DEBUG(printk("qla2x00_get_mbx_access(%ld): access "
++ "flags=%lx. busy. Waiting for access. curr time=0x%lx.\n",
++ ha->host_no, ha->mbx_cmd_flags, jiffies);)
++
++ DEBUG11(printk("qla2x00_get_mbx_access(%ld): access "
++ "flags=%lx. busy. Waiting for access. curr time=0x%lx.\n",
++ ha->host_no, ha->mbx_cmd_flags, jiffies);)
++
++ /*
++ * Init timer and get semaphore from mbx q. After we got valid
++ * semaphore pointer the MBX_CMD_WANT flag would also had
++ * been set.
++ */
++ qla2x00_mbx_q_add(ha, &ptmp_mbq);
++
++ if (ptmp_mbq == NULL) {
++ /* queue full? problem? can't proceed. */
++ DEBUG2_3_11(printk("qla2x00_get_mbx_access(%ld): ERROR "
++ "no more mbx_q allowed. exiting.\n", ha->host_no);)
++
++ break;
++ }
++
++ /* init timer and semaphore */
++ init_timer(&tmp_cmd_timer);
++ tmp_cmd_timer.data = (unsigned long)&ptmp_mbq->cmd_sem;
++ tmp_cmd_timer.function =
++ (void (*)(unsigned long))qla2x00_mbx_sem_timeout;
++ tmp_cmd_timer.expires = jiffies + tov * HZ;
++
++ DEBUG11(printk("get_mbx_access(%ld): adding timer. "
++ "curr time=0x%lx timeoutval=0x%lx.\n",
++ ha->host_no, jiffies, tmp_cmd_timer.expires);)
++
++ /* wait. */
++/* add_timer(&tmp_cmd_timer);*/
++ DEBUG11(printk("get_mbx_access(%ld): going to sleep. "
++ "current time=0x%lx.\n", ha->host_no, jiffies);)
++
++ down_interruptible(&ptmp_mbq->cmd_sem);
++
++ DEBUG11(printk("get_mbx_access(%ld): woke up. current "
++ "time=0x%lx.\n",
++ ha->host_no, jiffies);)
++
++/* del_timer(&tmp_cmd_timer);*/
++
++ /* try to get lock again. we'll test later to see
++ * if we actually got the lock.
++ */
++ prev_val = test_and_set_bit(MBX_CMD_ACTIVE,
++ &ha->mbx_cmd_flags);
++
++ /*
++ * After we tried to get access then we check to see
++ * if we need to clear the MBX_CMD_WANT flag. Don't clear
++ * this flag before trying to get access or else another
++ * new thread might grab it before we did.
++ */
++ spin_lock_irqsave(&ha->mbx_q_lock, cpu_flags);
++ if (ha->mbx_q_head == NULL) {
++ /* We're the last thread in queue. */
++ clear_bit(MBX_CMD_WANT, &ha->mbx_cmd_flags);
++ }
++ qla2x00_mbx_q_memb_free(ha, ptmp_mbq);
++ spin_unlock_irqrestore(&ha->mbx_q_lock, cpu_flags);
++
++ break;
++ }
++
++ if (prev_val == 0) {
++ /* We got the lock */
++ DEBUG11(printk("qla2x00_get_mbx_access(%ld): success.\n",
++ ha->host_no);)
++
++ ret = QL_STATUS_SUCCESS;
++ } else {
++ /* Timeout or resource error. */
++ DEBUG2_3_11(printk("qla2x00_get_mbx_access(%ld): timed out.\n",
++ ha->host_no);)
++
++ ret = QL_STATUS_TIMEOUT;
++ }
++
++ return ret;
++}
++
++static uint8_t
++qla2x00_release_mbx_access(scsi_qla_host_t *ha, uint32_t tov)
++{
++ mbx_cmdq_t *next_thread;
++
++ DEBUG11(printk("qla2x00_release_mbx_access:(%ld): entered.\n",
++ ha->host_no);)
++
++ clear_bit(MBX_CMD_ACTIVE, &ha->mbx_cmd_flags);
++
++ /* Wake up one pending mailbox cmd thread in queue. */
++ qla2x00_mbx_q_get(ha, &next_thread);
++ if (next_thread) {
++ DEBUG11(printk("qla2x00_release_mbx_access: found pending "
++ "mbx cmd. Waking up sem in %p.\n", &next_thread);)
++ up(&next_thread->cmd_sem);
++ }
++
++ DEBUG11(printk("qla2x00_release_mbx_access:(%ld): exiting.\n",
++ ha->host_no);)
++
++ return QL_STATUS_SUCCESS;
++}
++
++/* Allocates a mbx_cmdq_t struct and add to the mbx_q list. */
++static uint8_t
++qla2x00_mbx_q_add(scsi_qla_host_t *ha, mbx_cmdq_t **ret_mbq)
++{
++ uint8_t ret;
++ unsigned long cpu_flags;
++ mbx_cmdq_t *ptmp = NULL;
++
++ spin_lock_irqsave(&ha->mbx_q_lock, cpu_flags);
++
++ DEBUG11(printk("qla2x00_mbx_q_add: got mbx_q spinlock. "
++ "Inst=%d.\n", apiHBAInstance);)
++
++ qla2x00_mbx_q_memb_alloc(ha, &ptmp);
++ if (ptmp == NULL) {
++ /* can't add any more threads */
++ DEBUG2_3_11(printk("qla2x00_mbx_q_add: ERROR no more "
++ "ioctl threads allowed. Inst=%d.\n", apiHBAInstance);)
++
++ ret = QL_STATUS_RESOURCE_ERROR;
++ } else {
++ if (ha->mbx_q_tail == NULL) {
++ /* First thread to queue. */
++ set_bit(IOCTL_WANT, &ha->mbx_cmd_flags);
++
++ ha->mbx_q_head = ptmp;
++ } else {
++ ha->mbx_q_tail->pnext = ptmp;
++ }
++ ha->mbx_q_tail = ptmp;
++
++ /* Now init the semaphore */
++ init_MUTEX_LOCKED(&ptmp->cmd_sem);
++ ret = QL_STATUS_SUCCESS;
++ }
++
++ *ret_mbq = ptmp;
++
++ DEBUG11(printk("qla2x00_mbx_q_add: going to release spinlock. "
++ "ret_mbq=%p, ret=%d. Inst=%d.\n", *ret_mbq, ret, apiHBAInstance);)
++
++ spin_unlock_irqrestore(&ha->mbx_q_lock, cpu_flags);
++
++ return ret;
++}
++
++/* Just remove and return first member from mbx_cmdq. Don't free anything. */
++static void
++qla2x00_mbx_q_get(scsi_qla_host_t *ha, mbx_cmdq_t **ret_mbq)
++{
++ unsigned long cpu_flags;
++
++ spin_lock_irqsave(&ha->mbx_q_lock, cpu_flags);
++
++ DEBUG11(printk("qla2x00_mbx_q_get: got mbx_q spinlock. "
++ "Inst=%d.\n", apiHBAInstance);)
++
++ /* Remove from head */
++ *ret_mbq = ha->mbx_q_head;
++ if (ha->mbx_q_head != NULL) {
++ ha->mbx_q_head = ha->mbx_q_head->pnext;
++ if (ha->mbx_q_head == NULL) {
++ /* That's the last one in queue. */
++ ha->mbx_q_tail = NULL;
++ }
++ (*ret_mbq)->pnext = NULL;
++ }
++
++ DEBUG11(printk("qla2x00_mbx_q_remove: return ret_mbq=%p. Going to "
++ "release spinlock. Inst=%d.\n", *ret_mbq, apiHBAInstance);)
++
++ spin_unlock_irqrestore(&ha->mbx_q_lock, cpu_flags);
++}
++
++/* Find a free mbx_q member from the array. Must already got the
++ * mbx_q_lock spinlock.
++ */
++static void
++qla2x00_mbx_q_memb_alloc(scsi_qla_host_t *ha, mbx_cmdq_t **ret_mbx_q_memb)
++{
++ mbx_cmdq_t *ptmp = NULL;
++
++ DEBUG11(printk("qla2x00_mbx_q_memb_alloc: entered. "
++ "Inst=%d.\n", apiHBAInstance);)
++
++ ptmp = ha->mbx_sem_pool_head;
++ if (ptmp != NULL) {
++ ha->mbx_sem_pool_head = ptmp->pnext;
++ ptmp->pnext = NULL;
++ if (ha->mbx_sem_pool_head == NULL) {
++ ha->mbx_sem_pool_tail = NULL;
++ }
++ } else {
++ /* We ran out of pre-allocated semaphores. Try to allocate
++ * a new one.
++ */
++ ptmp = (void *)KMEM_ZALLOC(sizeof(mbx_cmdq_t), 40);
++ }
++
++ *ret_mbx_q_memb = ptmp;
++
++ DEBUG11(printk("qla2x00_mbx_q_memb_alloc: return waitq_memb=%p. "
++ "Inst=%d.\n", *ret_mbx_q_memb, apiHBAInstance);)
++}
++
++/* Add the specified mbx_q member back to the free semaphore pool. Must
++ * already got the mbx_q_lock spinlock.
++ */
++static void
++qla2x00_mbx_q_memb_free(scsi_qla_host_t *ha, mbx_cmdq_t *pfree_mbx_q_memb)
++{
++ DEBUG11(printk("qla2x00_mbx_q_memb_free: entered. Inst=%d.\n",
++ apiHBAInstance);)
++
++ if (pfree_mbx_q_memb != NULL) {
++ if (ha->mbx_sem_pool_tail != NULL) {
++ /* Add to tail */
++ ha->mbx_sem_pool_tail->pnext = pfree_mbx_q_memb;
++ } else {
++ ha->mbx_sem_pool_head = pfree_mbx_q_memb;
++ }
++ ha->mbx_sem_pool_tail = pfree_mbx_q_memb;
++ }
++
++ /* put it back to the free pool. */
++
++ DEBUG11(printk("qla2x00_mbx_q_memb_free: exiting. "
++ "Inst=%d.\n", apiHBAInstance);)
++}
++
++/*
++ * qla2x00_mailbox_command
++ * Issue mailbox command and waits for completion.
++ *
++ * Input:
++ * ha = adapter block pointer.
++ * mcp = driver internal mbx struct pointer.
++ *
++ * Output:
++ * mb[MAX_MAILBOX_REGISTER_COUNT] = returned mailbox data.
++ *
++ * Returns:
++ * 0 : QL_STATUS_SUCCESS = cmd performed success
++ * 1 : QL_STATUS_ERROR (error encountered)
++ * 6 : QL_STATUS_TIMEOUT (timeout condition encountered)
++ *
++ * Context:
++ * Kernel context.
++ */
++uint8_t
++qla2x00_mailbox_command(scsi_qla_host_t *ha, mbx_cmd_t *mcp)
++{
++ unsigned long flags = 0;
++ device_reg_t *reg = ha->iobase;
++ struct timer_list tmp_intr_timer;
++ uint8_t abort_active = test_bit(ABORT_ISP_ACTIVE, &ha->dpc_flags);
++ uint8_t io_lock_on = ha->init_done;
++ uint8_t mbx_count;
++ uint8_t status = 0;
++ uint8_t tmp_stat = 0;
++ uint16_t command;
++ uint16_t *iptr, *optr;
++ uint32_t cnt;
++ uint32_t mboxes;
++ unsigned long mbx_flags = 0;
++ unsigned long wait_time;
++
++ DEBUG11(printk("qla2x00_mailbox_command(%ld): entered.\n",
++ ha->host_no);)
++ /*
++ * Wait for active mailbox commands to finish by waiting at most
++ * tov seconds. This is to serialize actual issuing of mailbox cmds
++ * during non ISP abort time.
++ */
++ if (!abort_active) {
++ tmp_stat = qla2x00_get_mbx_access(ha, mcp->tov);
++ if (tmp_stat != QL_STATUS_SUCCESS) {
++ /* Timeout occurred. Return error. */
++ DEBUG2_3_11(printk("qla2x00_mailbox_command(%ld): cmd "
++ "access timeout. Exiting.\n", ha->host_no);)
++ return QL_STATUS_TIMEOUT;
++ }
++ }
++
++ ha->flags.mbox_busy = TRUE;
++ /* Save mailbox command for debug */
++ ha->mcp = mcp;
++
++ /* Try to get mailbox register access */
++ if (!abort_active)
++ QLA_MBX_REG_LOCK(ha);
++
++ DEBUG11(printk("scsi%d: prepare to issue mbox cmd=0x%x.\n",
++ (int)ha->host_no, mcp->mb[0]);)
++
++ ha->mbox_trace = 0;
++
++ spin_lock_irqsave(&ha->hardware_lock, flags);
++
++ /* Load mailbox registers. */
++ optr = (uint16_t *)®->mailbox0;
++ mbx_count = MAILBOX_REGISTER_COUNT;
++
++ iptr = mcp->mb;
++ command = mcp->mb[0];
++ mboxes = mcp->out_mb;
++
++ for (cnt = 0; cnt < mbx_count; cnt++) {
++#if defined(ISP2200)
++ if (cnt == 8) {
++ optr = (uint16_t *)®->mailbox8;
++ }
++#endif
++ if (mboxes & BIT_0) {
++ WRT_REG_WORD(optr, *iptr);
++ }
++
++ mboxes >>= 1;
++ optr++;
++ iptr++;
++ }
++
++#if defined(QL_DEBUG_LEVEL_1)
++ printk("qla2x00_mailbox_command: Loaded MBX registers "
++ "(displayed in bytes) = \n");
++ qla2x00_dump_buffer((uint8_t *)mcp->mb, 16);
++ printk("\n");
++ qla2x00_dump_buffer(((uint8_t *)mcp->mb + 0x10), 16);
++ printk("\n");
++ qla2x00_dump_buffer(((uint8_t *)mcp->mb + 0x20), 8);
++ printk("\n");
++ printk("qla2x00_mailbox_command: I/O address = %lx.\n",
++ (u_long)optr);
++ qla2x00_dump_regs(ha->host);
++#endif
++
++ /* Issue set host interrupt command to send cmd out. */
++ ha->flags.mbox_int = FALSE;
++ clear_bit(MBX_INTERRUPT, &ha->mbx_cmd_flags);
++
++ /* Unlock mbx registers and wait for interrupt */
++
++ DEBUG11(printk("qla2x00_mailbox_command: going to unlock irq & "
++ "waiting for interrupt. jiffies=%lx.\n", jiffies);)
++
++ /* Wait for mbx cmd completion until timeout */
++
++ if (!abort_active && io_lock_on) {
++ /* sleep on completion semaphore */
++ DEBUG11(printk("qla2x00_mailbox_command(%ld): "
++ "INTERRUPT MODE. Initializing timer.\n",
++ ha->host_no);)
++
++ init_timer(&tmp_intr_timer);
++ tmp_intr_timer.data = (unsigned long)&ha->mbx_intr_sem;
++ tmp_intr_timer.expires = jiffies + mcp->tov * HZ;
++ tmp_intr_timer.function =
++ (void (*)(unsigned long))qla2x00_mbx_sem_timeout;
++
++ DEBUG11(printk("qla2x00_mailbox_command(%ld): "
++ "Adding timer.\n", ha->host_no);)
++ add_timer(&tmp_intr_timer);
++
++ DEBUG11(printk("qla2x00_mailbox_command: going to "
++ "unlock & sleep. time=0x%lx.\n", jiffies);)
++
++ MBOX_TRACE(ha,BIT_0);
++ set_bit(MBX_INTR_WAIT, &ha->mbx_cmd_flags);
++
++ WRT_REG_WORD(®->hccr, HCCR_SET_HOST_INT);
++ spin_unlock_irqrestore(&ha->hardware_lock, flags);
++
++ if (!abort_active)
++ QLA_MBX_REG_UNLOCK(ha);
++
++ MBOX_TRACE(ha,BIT_1);
++
++ /* Wait for either the timer to expire
++ * or the mbox completion interrupt
++ */
++ down_interruptible(&ha->mbx_intr_sem);
++
++ DEBUG11(printk("qla2x00_mailbox_command:"
++ "waking up."
++ "time=0x%lx\n", jiffies);)
++ clear_bit(MBX_INTR_WAIT, &ha->mbx_cmd_flags);
++
++ /* delete the timer */
++ del_timer(&tmp_intr_timer);
++#if QLA2100_LIPTEST
++ if (mbxtimeout) {
++ DEBUG(printk("qla2x00_mailbox_command(%ld): "
++ "INTERRUPT MODE - testing timeout handling.\n",
++ ha->host_no);)
++ ha->flags.mbox_int= FALSE;
++ }
++ mbxtimeout= 0;
++#endif
++
++ } else {
++
++ DEBUG3_11(printk("qla2x00_mailbox_command(%ld): cmd=%x "
++ "POLLING MODE.\n", ha->host_no, command);)
++
++ WRT_REG_WORD(®->hccr, HCCR_SET_HOST_INT);
++ spin_unlock_irqrestore(&ha->hardware_lock, flags);
++ if (!abort_active)
++ QLA_MBX_REG_UNLOCK(ha);
++
++
++ wait_time = jiffies + mcp->tov * HZ; /* wait at most tov secs */
++ while (!ha->flags.mbox_int) {
++ if (time_after(jiffies, wait_time))
++ break;
++
++ /* Check for pending interrupts. */
++ qla2x00_poll(ha);
++
++ udelay(10); /* v4.27 */
++ } /* while */
++ }
++
++ if (!abort_active)
++ QLA_MBX_REG_LOCK(ha);
++
++ /* Check whether we timed out */
++ if (ha->flags.mbox_int) {
++
++ DEBUG3_11(printk("qla2x00_mailbox_cmd: cmd %x completed.\n",
++ command);)
++
++ /* Got interrupt. Clear the flag. */
++ ha->flags.mbox_int = FALSE;
++ clear_bit(MBX_INTERRUPT, &ha->mbx_cmd_flags);
++
++ if( ha->mailbox_out[0] != MBS_CMD_CMP ) {
++ qla2x00_stats.mboxerr++;
++ status = QL_STATUS_ERROR;
++ }
++
++ /* Load return mailbox registers. */
++ optr = mcp->mb;
++ iptr = (uint16_t *)&ha->mailbox_out[0];
++ mboxes = mcp->in_mb;
++ for (cnt = 0; cnt < mbx_count; cnt++) {
++
++ if (mboxes & BIT_0)
++ *optr = *iptr;
++
++ mboxes >>= 1;
++ optr++;
++ iptr++;
++ }
++ } else {
++
++#if defined(QL_DEBUG_LEVEL_2) || defined(QL_DEBUG_LEVEL_3) || \
++ defined(QL_DEBUG_LEVEL_11)
++ printk("qla2x00_mailbox_command(%ld): **** MB Command Timeout "
++ "for cmd %x ****\n", ha->host_no, command);
++ printk("qla2x00_mailbox_command: icontrol=%x jiffies=%lx\n",
++ RD_REG_WORD(®->ictrl), jiffies);
++ printk("qla2x00_mailbox_command: *** mailbox[0] = 0x%x ***\n",
++ RD_REG_WORD(optr));
++ qla2x00_dump_regs(ha->host);
++#endif
++
++ qla2x00_stats.mboxtout++;
++ status = QL_STATUS_TIMEOUT;
++ }
++
++ if (!abort_active)
++ QLA_MBX_REG_UNLOCK(ha);
++
++ ha->flags.mbox_busy = FALSE;
++
++ /* Clean up */
++ ha->mcp = NULL;
++
++ if (!abort_active) {
++ DEBUG11(printk("qla2x00_mailbox_cmd: checking for additional "
++ "resp interrupt.\n");)
++
++ /* polling mode for non isp_abort commands. */
++ qla2x00_poll(ha);
++ }
++
++ if (status == QL_STATUS_TIMEOUT ) {
++ if (!io_lock_on || (mcp->flags & IOCTL_CMD)) {
++ /* not in dpc. schedule it for dpc to take over. */
++ DEBUG(printk("qla2x00_mailbox_command(%ld): timeout "
++ "schedule isp_abort_needed.\n",
++ ha->host_no);)
++ DEBUG2_3_11(printk("qla2x00_mailbox_command(%ld): "
++ "timeout schedule isp_abort_needed.\n",
++ ha->host_no);)
++ set_bit(ISP_ABORT_NEEDED, &ha->dpc_flags);
++ if (ha->dpc_wait && !ha->dpc_active)
++ up(ha->dpc_wait);
++
++ } else if (!abort_active) {
++
++ /* call abort directly since we are in the DPC thread */
++ DEBUG(printk("qla2x00_mailbox_command(%ld): timeout "
++ "calling abort_isp\n", ha->host_no);)
++ DEBUG2_3_11(printk("qla2x00_mailbox_command(%ld): "
++ "timeout calling abort_isp\n", ha->host_no);)
++
++ set_bit(ABORT_ISP_ACTIVE, &ha->dpc_flags);
++ clear_bit(ISP_ABORT_NEEDED, &ha->dpc_flags);
++ if (qla2x00_abort_isp(ha, 0)) {
++ /* failed. retry later. */
++ set_bit(ISP_ABORT_NEEDED, &ha->dpc_flags);
++ }
++ clear_bit(ABORT_ISP_ACTIVE, &ha->dpc_flags);
++
++ DEBUG(printk("qla2x00_mailbox_command: finished "
++ "abort_isp\n");)
++ DEBUG2_3_11(printk("qla2x00_mailbox_command: finished "
++ "abort_isp\n");)
++ }
++ }
++
++ /* Allow next mbx cmd to come in. */
++ if (!abort_active) {
++ tmp_stat = qla2x00_release_mbx_access(ha, mcp->tov);
++
++ if (status == 0)
++ status = tmp_stat;
++ }
++
++ if (status) {
++ DEBUG2_3_11(printk("qla2x00_mailbox_command(%ld): **** FAILED. "
++ "mbx0=%x, mbx1=%x, mbx2=%x, cmd=%x ****\n",
++ ha->host_no, mcp->mb[0], mcp->mb[1], mcp->mb[2], command);)
++ } else {
++ DEBUG11(printk("qla2x00_mailbox_command(%ld): done.\n",
++ ha->host_no);)
++ }
++
++ DEBUG11(printk("qla2x00_mailbox_command(%ld): exiting.\n",
++ ha->host_no);)
++
++ return status;
++}
++
++/*
++ * qla2x00_load_ram
++ * Load adapter RAM using DMA.
++ *
++ * Input:
++ * ha = adapter block pointer.
++ *
++ * Returns:
++ * qla2x00 local function return status code.
++ *
++ * Context:
++ * Kernel context.
++ */
++int
++qla2x00_load_ram(scsi_qla_host_t *ha, dma_addr_t req_dma,
++ uint16_t risc_addr, uint16_t risc_code_size)
++{
++ int rval;
++ mbx_cmd_t mc;
++ mbx_cmd_t *mcp = &mc;
++ uint32_t req_len;
++ dma_addr_t nml_dma;
++ uint32_t nml_len;
++ uint32_t normalized;
++
++ DEBUG11(printk("qla2x00_load_ram(%ld): entered.\n",
++ ha->host_no);)
++
++ req_len = risc_code_size;
++ nml_dma = 0;
++ nml_len = 0;
++
++ normalized = qla2x00_normalize_dma_addr(
++ &req_dma, &req_len,
++ &nml_dma, &nml_len);
++
++ /* Load first segment */
++ mcp->mb[0] = MBC_LOAD_RAM_A64;
++ mcp->mb[1] = risc_addr;
++ mcp->mb[2] = MSW(req_dma);
++ mcp->mb[3] = LSW(req_dma);
++ mcp->mb[4] = (uint16_t)req_len;
++ mcp->mb[6] = MSW(MSD(req_dma));
++ mcp->mb[7] = LSW(MSD(req_dma));
++
++ mcp->out_mb = MBX_7|MBX_6|MBX_4|MBX_3|MBX_2|MBX_1|MBX_0;
++ mcp->in_mb = MBX_0;
++ mcp->tov = 30;
++ mcp->flags = 0;
++ rval = (int)qla2x00_mailbox_command(ha, mcp);
++
++ /* Load second segment - if necessary */
++ if (normalized && (rval == QL_STATUS_SUCCESS)) {
++ mcp->mb[0] = MBC_LOAD_RAM_A64;
++ mcp->mb[1] = risc_addr + (uint16_t)req_len;
++ mcp->mb[2] = MSW(nml_dma);
++ mcp->mb[3] = LSW(nml_dma);
++ mcp->mb[4] = (uint16_t)nml_len;
++ mcp->mb[6] = MSW(MSD(nml_dma));
++ mcp->mb[7] = LSW(MSD(nml_dma));
++
++ mcp->out_mb = MBX_7|MBX_6|MBX_4|MBX_3|MBX_2|MBX_1|MBX_0;
++ mcp->in_mb = MBX_0;
++ mcp->tov = 30;
++ mcp->flags = 0;
++ rval = (int)qla2x00_mailbox_command(ha, mcp);
++ }
++
++ if (rval == QL_STATUS_SUCCESS) {
++ /* Empty */
++ DEBUG11(printk("qla2x00_load_ram(%ld): done.\n",
++ ha->host_no);)
++ } else {
++ /* Empty */
++ DEBUG2_3_11(printk("qla2x00_load_ram(%ld): failed. rval=%x "
++ "mb[0]=%x.\n",
++ ha->host_no, rval, mcp->mb[0]);)
++ }
++ return rval;
++}
++
++/*
++ * qla2x00_load_ram_ext
++ * Load adapter extended RAM using DMA.
++ *
++ * Input:
++ * ha = adapter block pointer.
++ *
++ * Returns:
++ * qla2x00 local function return status code.
++ *
++ * Context:
++ * Kernel context.
++ */
++int
++qla2x00_load_ram_ext(scsi_qla_host_t *ha,
++ dma_addr_t req_dma, uint32_t risc_addr, uint16_t risc_code_size)
++{
++ int rval;
++ mbx_cmd_t mc;
++ mbx_cmd_t *mcp = &mc;
++ uint32_t req_len;
++ dma_addr_t nml_dma;
++ uint32_t nml_len;
++ uint32_t normalized;
++
++ DEBUG11(printk("%s(%ld): entered.\n", __func__, ha->host_no));
++
++ req_len = risc_code_size;
++ nml_dma = 0;
++ nml_len = 0;
++
++ normalized = qla2x00_normalize_dma_addr(
++ &req_dma, &req_len,
++ &nml_dma, &nml_len);
++
++ /* Load first segment */
++ mcp->mb[0] = MBC_LOAD_RAM_EXTENDED;
++ mcp->mb[1] = LSW(risc_addr);
++ mcp->mb[2] = MSW(req_dma);
++ mcp->mb[3] = LSW(req_dma);
++ mcp->mb[4] = (uint16_t)req_len;
++ mcp->mb[6] = MSW(MSD(req_dma));
++ mcp->mb[7] = LSW(MSD(req_dma));
++ mcp->mb[8] = MSW(risc_addr);
++
++ mcp->out_mb = MBX_8|MBX_7|MBX_6|MBX_4|MBX_3|MBX_2|MBX_1|MBX_0;
++ mcp->in_mb = MBX_0;
++ mcp->tov = 30;
++ mcp->flags = 0;
++ rval = (int)qla2x00_mailbox_command(ha, mcp);
++
++ /* Load second segment - if necessary */
++ if (normalized && (rval == QL_STATUS_SUCCESS)) {
++ risc_addr += req_len;
++ mcp->mb[0] = MBC_LOAD_RAM_EXTENDED;
++ mcp->mb[1] = LSW(risc_addr);
++ mcp->mb[2] = MSW(nml_dma);
++ mcp->mb[3] = LSW(nml_dma);
++ mcp->mb[4] = (uint16_t)nml_len;
++ mcp->mb[6] = MSW(MSD(nml_dma));
++ mcp->mb[7] = LSW(MSD(nml_dma));
++ mcp->mb[8] = MSW(risc_addr);
++
++ mcp->out_mb = MBX_8|MBX_7|MBX_6|MBX_4|MBX_3|MBX_2|MBX_1|MBX_0;
++ mcp->in_mb = MBX_0;
++ mcp->tov = 30;
++ mcp->flags = 0;
++ rval = (int)qla2x00_mailbox_command(ha, mcp);
++ }
++
++ if (rval != QL_STATUS_SUCCESS) {
++ /*EMPTY*/
++ DEBUG2_3_11(printk("%s(%ld): failed=%x mb[0]=%x.\n",
++ __func__, ha->host_no, rval, mcp->mb[0]));
++ } else {
++ /*EMPTY*/
++ DEBUG11(printk("%s(%ld): done.\n", __func__, ha->host_no));
++ }
++
++ return rval;
++}
++
++/*
++ * qla2x00_execute_fw
++ * Start adapter firmware.
++ *
++ * Input:
++ * ha = adapter block pointer.
++ * TARGET_QUEUE_LOCK must be released.
++ * ADAPTER_STATE_LOCK must be released.
++ *
++ * Returns:
++ * qla2x00 local function return status code.
++ *
++ * Context:
++ * Kernel context.
++ */
++int
++qla2x00_execute_fw(scsi_qla_host_t *ha)
++{
++ int rval;
++ mbx_cmd_t mc;
++ mbx_cmd_t *mcp = &mc;
++
++ DEBUG11(printk("qla2x00_execute_fw(%ld): entered.\n",
++ ha->host_no);)
++
++ mcp->mb[0] = MBC_EXECUTE_FIRMWARE;
++ mcp->mb[1] = *ha->brd_info->fwinfo[0].fwstart;
++ mcp->out_mb = MBX_1|MBX_0;
++ if (ha->pdev->device == QLA2322_DEVICE_ID) {
++ mcp->mb[2] = 0;
++ mcp->out_mb |= MBX_2;
++ }
++ mcp->in_mb = MBX_0;
++ mcp->tov = 30;
++ mcp->flags = 0;
++ rval = qla2x00_mailbox_command(ha, mcp);
++
++ DEBUG11(printk("qla2x00_execute_fw(%ld): done.\n",
++ ha->host_no);)
++
++ return rval;
++}
++
++/*
++ * qla2x00_get_fw_version
++ * Get firmware version.
++ *
++ * Input:
++ * ha: adapter state pointer.
++ * major: pointer for major number.
++ * minor: pointer for minor number.
++ * subminor: pointer for subminor number.
++ *
++ * Returns:
++ * qla2x00 local function return status code.
++ *
++ * Context:
++ * Kernel context.
++ */
++void
++qla2x00_get_fw_version(scsi_qla_host_t *ha, uint16_t *major,
++ uint16_t *minor, uint16_t *subminor, uint16_t *attributes)
++{
++ int rval;
++ mbx_cmd_t mc;
++ mbx_cmd_t *mcp = &mc;
++
++ DEBUG11(printk("%s(%ld): entered.\n", __func__, ha->host_no));
++
++ mcp->mb[0] = MBC_ABOUT_FIRMWARE;
++ mcp->out_mb = MBX_0;
++ mcp->in_mb = MBX_6|MBX_3|MBX_2|MBX_1|MBX_0;
++ mcp->flags = 0;
++ mcp->tov = 30;
++ rval = qla2x00_mailbox_command(ha, mcp);
++
++ /* Return mailbox data. */
++ *major = mcp->mb[1];
++ *minor = mcp->mb[2];
++ *subminor = mcp->mb[3];
++ *attributes = mcp->mb[6];
++
++ if (rval != QL_STATUS_SUCCESS) {
++ /*EMPTY*/
++ DEBUG2_3_11(printk("%s(%ld): failed=%x.\n",
++ __func__, ha->host_no, rval));
++ } else {
++ /*EMPTY*/
++ DEBUG11(printk("%s(%ld): done.\n", __func__, ha->host_no));
++ }
++}
++
++/*
++ * qla2x00_get_fw_options
++ * Set firmware options.
++ *
++ * Input:
++ * ha = adapter block pointer.
++ * fwopt = pointer for firmware options.
++ *
++ * Returns:
++ * qla2x00 local function return status code.
++ *
++ * Context:
++ * Kernel context.
++ */
++int
++qla2x00_get_fw_options(scsi_qla_host_t *ha,
++ uint16_t *fwopts1, uint16_t *fwopts2, uint16_t *fwopts3)
++{
++ int rval;
++ mbx_cmd_t mc;
++ mbx_cmd_t *mcp = &mc;
++
++ DEBUG11(printk("%s(%ld): entered.\n", __func__, ha->host_no));
++
++ mcp->mb[0] = MBC_GET_FIRMWARE_OPTIONS;
++ mcp->out_mb = MBX_0;
++ mcp->in_mb = MBX_3|MBX_2|MBX_1|MBX_0;
++ mcp->tov = 30;
++ mcp->flags = 0;
++ rval = (int)qla2x00_mailbox_command(ha, mcp);
++
++ if (rval != QL_STATUS_SUCCESS) {
++ /*EMPTY*/
++ DEBUG2_3_11(printk("%s(%ld): failed=%x.\n",
++ __func__, ha->host_no, rval));
++ } else {
++ *fwopts1 = mcp->mb[1];
++ *fwopts2 = mcp->mb[2];
++ *fwopts3 = mcp->mb[3];
++
++ DEBUG11(printk("%s(%ld): done.\n", __func__, ha->host_no));
++ }
++
++ return rval;
++}
++
++
++/*
++ * qla2x00_set_fw_options
++ * Set firmware options.
++ *
++ * Input:
++ * ha = adapter block pointer.
++ * fwopt = pointer for firmware options.
++ *
++ * Returns:
++ * qla2x00 local function return status code.
++ *
++ * Context:
++ * Kernel context.
++ */
++int
++qla2x00_set_fw_options(scsi_qla_host_t *ha,
++ uint16_t fwopts1, uint16_t fwopts2, uint16_t fwopts3,
++ uint16_t fwopts10, uint16_t fwopts11)
++{
++ int rval;
++ mbx_cmd_t mc;
++ mbx_cmd_t *mcp = &mc;
++
++ DEBUG11(printk("%s(%ld): entered.\n", __func__, ha->host_no));
++
++ mcp->mb[0] = MBC_SET_FIRMWARE_OPTIONS;
++ mcp->mb[1] = fwopts1;
++ mcp->mb[2] = fwopts2;
++ mcp->mb[3] = fwopts3;
++ mcp->mb[10] = fwopts10;
++ mcp->mb[11] = fwopts11;
++ mcp->mb[12] = 0; /* Undocumented, but used */
++ mcp->out_mb = MBX_12|MBX_11|MBX_10|MBX_3|MBX_2|MBX_1|MBX_0;
++ mcp->in_mb = MBX_0;
++ mcp->tov = 30;
++ mcp->flags = 0;
++
++ rval = (int)qla2x00_mailbox_command(ha, mcp);
++
++ if (rval != QL_STATUS_SUCCESS) {
++ /*EMPTY*/
++ DEBUG2_3_11(printk("%s(%ld): failed=%x.\n",
++ __func__, ha->host_no, rval));
++ } else {
++ /*EMPTY*/
++ DEBUG11(printk("%s(%ld): done.\n", __func__, ha->host_no));
++ }
++
++ return rval;
++}
++
++/*
++ * qla2x00_read_ram_word
++ *
++ * Input:
++ * ha = adapter block pointer.
++ *
++ * Returns:
++ * qla2x00 local function return status code.
++ *
++ * Context:
++ * Kernel context.
++ */
++int
++qla2x00_read_ram_word(scsi_qla_host_t *ha, uint16_t addr, uint16_t *data)
++{
++ int rval;
++ mbx_cmd_t mc;
++ mbx_cmd_t *mcp = &mc;
++
++ DEBUG11(printk("qla2x00_read_ram_word(%ld): entered.\n",
++ ha->host_no);)
++
++ mcp->mb[0] = MBC_READ_RAM_WORD;
++ mcp->mb[1] = addr;
++
++ mcp->out_mb = MBX_1|MBX_0;
++ mcp->in_mb = MBX_0|MBX_2;
++ mcp->tov = 30;
++ mcp->flags = 0;
++
++ rval = (int)qla2x00_mailbox_command(ha, mcp);
++
++ if (rval != QL_STATUS_SUCCESS) {
++ /*EMPTY*/
++ DEBUG2_3_11(printk("qla2x00_read_ram_word(%ld): failed=%x.\n",
++ ha->host_no, rval);)
++ } else {
++ *data = mcp->mb[2];
++ DEBUG11(printk("qla2x00_read_ram_word(%ld): done.\n",
++ ha->host_no);)
++ }
++
++ return rval;
++}
++
++/*
++ * qla2x00_write_ram_word
++ *
++ * Input:
++ * ha = adapter block pointer.
++ *
++ * Returns:
++ * qla2x00 local function return status code.
++ *
++ * Context:
++ * Kernel context.
++ */
++int
++qla2x00_write_ram_word(scsi_qla_host_t *ha, uint16_t addr, uint16_t data)
++{
++ int rval;
++ mbx_cmd_t mc;
++ mbx_cmd_t *mcp = &mc;
++
++ DEBUG11(printk("qla2x00_write_ram_word(%ld): entered.\n",
++ ha->host_no);)
++
++ mcp->mb[0] = MBC_WRITE_RAM_WORD;
++ mcp->mb[1] = addr;
++ mcp->mb[2] = data;
++ mcp->out_mb = MBX_2|MBX_1|MBX_0;
++ mcp->in_mb = MBX_0;
++ mcp->tov = 30;
++ mcp->flags = 0;
++
++ rval = (int)qla2x00_mailbox_command(ha, mcp);
++
++ if (rval != QL_STATUS_SUCCESS) {
++ /*EMPTY*/
++ DEBUG2_3_11(printk("qla2x00_write_ram_word(%ld): failed=%x.\n",
++ ha->host_no, rval);)
++ } else {
++ /*EMPTY*/
++ DEBUG11(printk("qla2x00_write_ram_word(%ld): done.\n",
++ ha->host_no);)
++ }
++
++ return rval;
++}
++
++/*
++ * qla2x00_write_ram_word_ext
++ *
++ * Input:
++ * ha = adapter block pointer.
++ *
++ * Returns:
++ * qla2x00 local function return status code.
++ *
++ * Context:
++ * Kernel context.
++ */
++int
++qla2x00_write_ram_word_ext(scsi_qla_host_t *ha, uint32_t addr, uint16_t data)
++{
++ int rval;
++ mbx_cmd_t mc;
++ mbx_cmd_t *mcp = &mc;
++
++ DEBUG11(printk("%s(%ld): entered.\n", __func__, ha->host_no));
++
++ mcp->mb[0] = MBC_WRITE_RAM_WORD_EXTENDED;
++ mcp->mb[1] = LSW(addr);
++ mcp->mb[2] = data;
++ mcp->mb[8] = MSW(addr);
++ mcp->out_mb = MBX_8|MBX_2|MBX_1|MBX_0;
++ mcp->in_mb = MBX_0;
++ mcp->tov = 30;
++ mcp->flags = 0;
++
++ rval = (int)qla2x00_mailbox_command(ha, mcp);
++
++ if (rval != QL_STATUS_SUCCESS) {
++ /*EMPTY*/
++ DEBUG2_3_11(printk("%s(%ld): failed=%x.\n",
++ __func__, ha->host_no, rval));
++ } else {
++ /*EMPTY*/
++ DEBUG11(printk("%s(%ld): done.\n", __func__, ha->host_no));
++ }
++
++ return rval;
++}
++
++/*
++ * qla2x00_mbx_reg_test
++ * Mailbox register wrap test.
++ *
++ * Input:
++ * ha = adapter block pointer.
++ * TARGET_QUEUE_LOCK must be released.
++ * ADAPTER_STATE_LOCK must be released.
++ *
++ * Returns:
++ * qla2x00 local function return status code.
++ *
++ * Context:
++ * Kernel context.
++ */
++int
++qla2x00_mbx_reg_test(scsi_qla_host_t *ha)
++{
++ int rval;
++ mbx_cmd_t mc;
++ mbx_cmd_t *mcp = &mc;
++
++ DEBUG11(printk("qla2x00_mbx_reg_test(%ld): entered.\n",
++ ha->host_no);)
++
++ mcp->mb[0] = MBC_MAILBOX_REGISTER_TEST;
++ mcp->mb[1] = 0xAAAA;
++ mcp->mb[2] = 0x5555;
++ mcp->mb[3] = 0xAA55;
++ mcp->mb[4] = 0x55AA;
++ mcp->mb[5] = 0xA5A5;
++ mcp->mb[6] = 0x5A5A;
++ mcp->mb[7] = 0x2525;
++ mcp->out_mb = MBX_7|MBX_6|MBX_5|MBX_4|MBX_3|MBX_2|MBX_1|MBX_0;
++ mcp->in_mb = MBX_7|MBX_6|MBX_5|MBX_4|MBX_3|MBX_2|MBX_1|MBX_0;
++ mcp->tov = 30;
++ mcp->flags = 0;
++ rval = (int)qla2x00_mailbox_command(ha, mcp);
++
++ if (rval == QL_STATUS_SUCCESS) {
++ if (mcp->mb[1] != 0xAAAA || mcp->mb[2] != 0x5555 ||
++ mcp->mb[3] != 0xAA55 || mcp->mb[4] != 0x55AA)
++ rval = QL_STATUS_ERROR;
++ if (mcp->mb[5] != 0xA5A5 || mcp->mb[6] != 0x5A5A ||
++ mcp->mb[7] != 0x2525)
++ rval = QL_STATUS_ERROR;
++ }
++
++ if (rval != QL_STATUS_SUCCESS) {
++ /*EMPTY*/
++ DEBUG2_3_11(printk("qla2x00_mbx_reg_test(%ld): failed=%x.\n",
++ ha->host_no, rval);)
++ } else {
++ /*EMPTY*/
++ DEBUG11(printk("qla2x00_mbx_reg_test(%ld): done.\n",
++ ha->host_no);)
++ }
++
++ return rval;
++}
++
++/*
++ * qla2x00_verify_checksum
++ * Verify firmware checksum.
++ *
++ * Input:
++ * ha = adapter block pointer.
++ * TARGET_QUEUE_LOCK must be released.
++ * ADAPTER_STATE_LOCK must be released.
++ *
++ * Returns:
++ * qla2x00 local function return status code.
++ *
++ * Context:
++ * Kernel context.
++ */
++int
++qla2x00_verify_checksum(scsi_qla_host_t *ha)
++{
++ int rval;
++ mbx_cmd_t mc;
++ mbx_cmd_t *mcp = &mc;
++
++ DEBUG11(printk("qla2x00_verify_checksum(%ld): entered.\n",
++ ha->host_no);)
++
++ mcp->mb[0] = MBC_VERIFY_CHECKSUM;
++ mcp->mb[1] = *ha->brd_info->fwinfo[0].fwstart;
++ mcp->out_mb = MBX_1|MBX_0;
++ mcp->in_mb = MBX_2|MBX_0;
++ mcp->tov = 30;
++ mcp->flags = 0;
++ rval = (int)qla2x00_mailbox_command(ha, mcp);
++
++ if (rval != QL_STATUS_SUCCESS) {
++ /*EMPTY*/
++ DEBUG2_3_11(printk("qla2x00_verify_checksum(%ld): failed=%x.\n",
++ ha->host_no, rval);)
++ } else {
++ /*EMPTY*/
++ DEBUG11(printk("qla2x00_verify_checksum(%ld): done.\n",
++ ha->host_no);)
++ }
++
++ return rval;
++}
++
++/*
++ * qla2x00_issue_iocb
++ * Issue IOCB using mailbox command
++ *
++ * Input:
++ * ha = adapter state pointer.
++ * buffer = buffer pointer.
++ * phys_addr = physical address of buffer.
++ * size = size of buffer.
++ * TARGET_QUEUE_LOCK must be released.
++ * ADAPTER_STATE_LOCK must be released.
++ *
++ * Returns:
++ * qla2x00 local function return status code.
++ *
++ * Context:
++ * Kernel context.
++ */
++int
++qla2x00_issue_iocb(scsi_qla_host_t *ha, void* buffer, dma_addr_t phys_addr,
++ size_t size)
++{
++ int rval;
++ mbx_cmd_t mc;
++ mbx_cmd_t *mcp = &mc;
++
++ ENTER("qla2x00_issue_iocb: started");
++
++ mcp->mb[0] = MBC_IOCB_EXECUTE_A64;
++ mcp->mb[1] = 0;
++ mcp->mb[2] = MSW(phys_addr);
++ mcp->mb[3] = LSW(phys_addr);
++ mcp->mb[6] = MSW(MSD(phys_addr));
++ mcp->mb[7] = LSW(MSD(phys_addr));
++ mcp->out_mb = MBX_7|MBX_6|MBX_3|MBX_2|MBX_1|MBX_0;
++ mcp->in_mb = MBX_2|MBX_0;
++ mcp->tov = 30;
++ mcp->flags = 0;
++ rval = (int)qla2x00_mailbox_command(ha, mcp);
++
++ if (rval != QLA2X00_SUCCESS) {
++ /*EMPTY*/
++ DEBUG(printk("qla2x00_issue_iocb(%ld): failed rval 0x%x",
++ ha->host_no,rval);)
++ DEBUG2(printk("qla2x00_issue_iocb(%ld): failed rval 0x%x",
++ ha->host_no,rval);)
++ } else {
++ /*EMPTY*/
++ LEAVE("qla2x00_issue_iocb: exiting normally");
++ }
++
++ return rval;
++}
++
++/*
++ * qla2x00_abort_command
++ * Abort command aborts a specified IOCB.
++ *
++ * Input:
++ * ha = adapter block pointer.
++ * sp = SB structure pointer.
++ *
++ * Returns:
++ * qla2x00 local function return status code.
++ *
++ * Context:
++ * Kernel context.
++ */
++int
++qla2x00_abort_command(scsi_qla_host_t *ha, srb_t *sp)
++{
++ unsigned long flags = 0;
++ scsi_qla_host_t *curr_ha;
++ fc_port_t *fcport;
++ int rval;
++ uint32_t handle;
++ uint16_t t;
++ mbx_cmd_t mc;
++ mbx_cmd_t *mcp = &mc;
++ os_lun_t *lq = sp->lun_queue;
++
++ DEBUG11(printk("qla2x00_abort_command(%ld): entered.\n",
++ ha->host_no);)
++
++ curr_ha = lq->fclun->fcport->ha;
++ t = SCSI_TCN_32(sp->cmd);
++ fcport = lq->fclun->fcport;
++ if (curr_ha->loop_state == LOOP_DOWN ||
++ atomic_read(&fcport->state) == FC_DEVICE_LOST) {
++ /* v2.19.8 Ignore abort request if port is down */
++ return 1;
++ }
++
++ spin_lock_irqsave(&ha->hardware_lock, flags);
++ for (handle = 1; handle < MAX_OUTSTANDING_COMMANDS; handle++) {
++ if( ha->outstanding_cmds[handle] == sp )
++ break;
++ }
++ spin_unlock_irqrestore(&ha->hardware_lock, flags);
++
++ if (handle == MAX_OUTSTANDING_COMMANDS) {
++ /* command not found */
++ return QL_STATUS_ERROR;
++ }
++
++ mcp->mb[0] = MBC_ABORT_COMMAND;
++#if defined(EXTENDED_IDS)
++ mcp->mb[1] = fcport->loop_id & 0xFF;
++#else
++ mcp->mb[1] = fcport->loop_id << 8;
++#endif
++ mcp->mb[2] = (uint16_t)handle;
++ mcp->mb[3] = (uint16_t)(handle >> 16);
++ mcp->mb[6] = (uint16_t)lq->fclun->lun;
++ mcp->out_mb = MBX_6|MBX_3|MBX_2|MBX_1|MBX_0;
++ mcp->in_mb = MBX_0;
++ mcp->tov = 30;
++ mcp->flags = 0;
++
++ rval = (int)qla2x00_mailbox_command(ha, mcp);
++
++ if (rval != QL_STATUS_SUCCESS) {
++ DEBUG2_3_11(printk("qla2x00_abort_command(%ld): failed=%x.\n",
++ ha->host_no, rval);)
++ } else {
++ sp->flags |= SRB_ABORT_PENDING;
++ DEBUG11(printk("qla2x00_abort_command(%ld): done.\n",
++ ha->host_no);)
++ }
++
++ return rval;
++}
++
++/*
++ * qla2x00_abort_device
++ *
++ * Input:
++ * ha = adapter block pointer.
++ * loop_id = FC loop ID
++ * lun = SCSI LUN.
++ *
++ * Returns:
++ * qla2x00 local function return status code.
++ *
++ * Context:
++ * Kernel context.
++ */
++int
++qla2x00_abort_device(scsi_qla_host_t *ha, uint16_t loop_id, uint16_t lun)
++{
++ int rval;
++ mbx_cmd_t mc;
++ mbx_cmd_t *mcp = &mc;
++
++ DEBUG11(printk("qla2x00_abort_device(%ld): entered.\n",
++ ha->host_no);)
++
++ mcp->mb[0] = MBC_ABORT_DEVICE;
++#if defined(EXTENDED_IDS)
++ mcp->mb[1] = loop_id & 0xFF;
++#else
++ mcp->mb[1] = loop_id << 8;
++#endif
++ mcp->mb[2] = lun;
++ mcp->out_mb = MBX_2|MBX_1|MBX_0;
++ mcp->in_mb = MBX_0;
++ mcp->tov = 30;
++ mcp->flags = 0;
++ rval = (int)qla2x00_mailbox_command(ha, mcp);
++
++ /* Issue marker command. */
++ qla2x00_marker(ha, loop_id, lun, MK_SYNC_ID_LUN);
++
++ if (rval != QL_STATUS_SUCCESS) {
++ set_bit(ISP_ABORT_NEEDED, &ha->dpc_flags);
++ if (ha->dpc_wait && !ha->dpc_active)
++ up(ha->dpc_wait);
++ DEBUG2_3_11(printk("qla2x00_abort_device(%ld): failed=%x.\n",
++ ha->host_no, rval);)
++ } else {
++ /*EMPTY*/
++ DEBUG11(printk("qla2x00_abort_device(%ld): done.\n",
++ ha->host_no);)
++ }
++
++ return rval;
++}
++
++#if USE_ABORT_TGT
++/*
++ * qla2x00_abort_target
++ * Issue abort target mailbox command.
++ *
++ * Input:
++ * ha = adapter block pointer.
++ * b = Always 0.
++ * t = SCSI ID.
++ * TARGET_QUEUE_LOCK must be released.
++ * ADAPTER_STATE_LOCK must be released.
++ *
++ * Returns:
++ * qla2x00 local function return status code.
++ *
++ * Context:
++ * Kernel context.
++ */
++int
++qla2x00_abort_target(fc_port_t *fcport)
++{
++ int rval;
++ uint16_t loop_id;
++ mbx_cmd_t mc;
++ mbx_cmd_t *mcp = &mc;
++
++ DEBUG11(printk("qla2x00_abort_target(%ld): entered.\n",
++ fcport->ha->host_no);)
++
++ if (fcport == NULL) {
++ /* no target to abort */
++ return 0;
++ }
++
++ loop_id = fcport->loop_id;
++
++ mcp->mb[0] = MBC_ABORT_TARGET;
++#if defined(EXTENDED_IDS)
++ mcp->mb[1] = loop_id & 0xFF;
++#else
++ mcp->mb[1] = loop_id << 8;
++#endif
++ mcp->mb[2] = fcport->ha->loop_reset_delay;
++ mcp->out_mb = MBX_2|MBX_1|MBX_0;
++#if defined(EXTENDED_IDS)
++ mcp->mb[10] = 0;
++ mcp->out_mb |= MBX_10;
++#endif
++ mcp->in_mb = MBX_0;
++ mcp->tov = 30;
++ mcp->flags = 0;
++ rval = (int)qla2x00_mailbox_command(fcport->ha, mcp);
++
++ /* Issue marker command. */
++/* qla2x00_marker(fcport->ha, loop_id, 0, MK_SYNC_ID);*/
++ fcport->ha->marker_needed = 1;
++
++ if (rval != QL_STATUS_SUCCESS) {
++/* set_bit(ISP_ABORT_NEEDED, &ha->dpc_flags);
++ if (ha->dpc_wait && !ha->dpc_active)
++ up(ha->dpc_wait); */
++ DEBUG2_3_11(printk("qla2x00_abort_target(%ld): failed=%x.\n",
++ fcport->ha->host_no, rval);)
++ } else {
++ /*EMPTY*/
++ DEBUG11(printk("qla2x00_abort_target(%ld): done.\n",
++ fcport->ha->host_no);)
++ }
++
++ return rval;
++}
++#endif
++
++/*
++ * qla2x00_target_reset
++ * Issue target reset mailbox command.
++ *
++ * Input:
++ * ha = adapter block pointer.
++ * TARGET_QUEUE_LOCK must be released.
++ * ADAPTER_STATE_LOCK must be released.
++ *
++ * Returns:
++ * qla2x00 local function return status code.
++ *
++ * Context:
++ * Kernel context.
++ */
++int
++qla2x00_target_reset(scsi_qla_host_t *ha, uint16_t b, uint16_t t)
++{
++ int rval;
++ mbx_cmd_t mc;
++ mbx_cmd_t *mcp = &mc;
++ os_tgt_t *tgt;
++
++ DEBUG11(printk("qla2x00_target_reset(%ld): entered.\n", ha->host_no);)
++
++ tgt = TGT_Q(ha, t);
++ if (tgt->vis_port == NULL) {
++ /* no target to abort */
++ return 0;
++ }
++ if (atomic_read(&tgt->vis_port->state) != FC_ONLINE) {
++ /* target not online */
++ return 0;
++ }
++
++ mcp->mb[0] = MBC_TARGET_RESET;
++#if defined(EXTENDED_IDS)
++ mcp->mb[1] = tgt->vis_port->loop_id & 0xFF;
++#else
++ mcp->mb[1] = tgt->vis_port->loop_id << 8;
++#endif
++ mcp->mb[2] = ha->loop_reset_delay;
++ mcp->out_mb = MBX_2|MBX_1|MBX_0;
++ mcp->in_mb = MBX_0;
++ mcp->tov = 30;
++ mcp->flags = 0;
++ rval = (int)qla2x00_mailbox_command(ha, mcp);
++
++ if (rval != QL_STATUS_SUCCESS) {
++ /*EMPTY*/
++ DEBUG2_3_11(printk("qla2x00_target_reset(%ld): failed=%x.\n",
++ ha->host_no, rval);)
++ } else {
++ /*EMPTY*/
++ DEBUG11(printk("qla2x00_target_reset(%ld): done.\n",
++ ha->host_no);)
++ }
++
++ return rval;
++}
++
++/*
++ * qla2x00_get_adapter_id
++ * Get adapter ID and topology.
++ *
++ * Input:
++ * ha = adapter block pointer.
++ * id = pointer for loop ID.
++ * al_pa = pointer for AL_PA.
++ * area = pointer for area.
++ * domain = pointer for domain.
++ * top = pointer for topology.
++ * TARGET_QUEUE_LOCK must be released.
++ * ADAPTER_STATE_LOCK must be released.
++ *
++ * Returns:
++ * qla2x00 local function return status code.
++ *
++ * Context:
++ * Kernel context.
++ */
++int
++qla2x00_get_adapter_id(scsi_qla_host_t *ha, uint16_t *id, uint8_t *al_pa,
++ uint8_t *area, uint8_t *domain, uint16_t *top)
++{
++ int rval;
++ mbx_cmd_t mc;
++ mbx_cmd_t *mcp = &mc;
++
++ DEBUG11(printk("qla2x00_get_adapter_id(%ld): entered.\n",
++ ha->host_no);)
++
++ mcp->mb[0] = MBC_GET_ADAPTER_LOOP_ID;
++ mcp->out_mb = MBX_0;
++ mcp->in_mb = MBX_7|MBX_6|MBX_3|MBX_2|MBX_1|MBX_0;
++ mcp->tov = 30;
++ mcp->flags = 0;
++ rval = (int)qla2x00_mailbox_command(ha, mcp);
++
++ /* Return data. */
++ *id = mcp->mb[1];
++ *al_pa = LSB(mcp->mb[2]);
++ *area = MSB(mcp->mb[2]);
++ *domain = LSB(mcp->mb[3]);
++ *top = mcp->mb[6];
++
++ if (rval != QL_STATUS_SUCCESS) {
++ /*EMPTY*/
++ DEBUG2_3_11(printk("qla2x00_get_adapter_id(%ld): failed=%x.\n",
++ ha->host_no, rval);)
++ } else {
++ /*EMPTY*/
++ DEBUG11(printk("qla2x00_get_adapter_id(%ld): done.\n",
++ ha->host_no);)
++ }
++
++ return rval;
++}
++
++/*
++ * qla2x00_get_retry_cnt
++ * Get current firmware login retry count and delay.
++ *
++ * Input:
++ * ha = adapter block pointer.
++ * retry_cnt = pointer to login retry count.
++ * tov = pointer to login timeout value.
++ *
++ * Returns:
++ * qla2x00 local function return status code.
++ *
++ * Context:
++ * Kernel context.
++ */
++int
++qla2x00_get_retry_cnt(scsi_qla_host_t *ha, uint8_t *retry_cnt, uint8_t *tov)
++{
++ int rval;
++ uint16_t ratov;
++ mbx_cmd_t mc;
++ mbx_cmd_t *mcp = &mc;
++
++ DEBUG11(printk("qla2x00_get_retry_cnt(%ld): entered.\n",
++ ha->host_no);)
++
++ mcp->mb[0] = MBC_GET_RETRY_COUNT;
++ mcp->out_mb = MBX_0;
++ mcp->in_mb = MBX_3|MBX_2|MBX_1|MBX_0;
++ mcp->tov = 30;
++ mcp->flags = 0;
++ rval = (int)qla2x00_mailbox_command(ha, mcp);
++
++ if (rval != QL_STATUS_SUCCESS) {
++ /*EMPTY*/
++ DEBUG2_3_11(printk("qla2x00_get_retry_cnt(%ld): failed = %x.\n",
++ ha->host_no, mcp->mb[0]);)
++ } else {
++ /* Convert returned data and check our values. */
++ ratov = (mcp->mb[3]/2) / 10; /* mb[3] value is in 100ms */
++ if (mcp->mb[1] * ratov > (*retry_cnt) * (*tov)) {
++ /* Update to the larger values */
++ *retry_cnt = (uint8_t)mcp->mb[1];
++ *tov = ratov;
++ }
++
++ DEBUG11(printk("qla2x00_get_retry_cnt(%ld): done. mb3=%d "
++ "ratov=%d.\n", ha->host_no, mcp->mb[3], ratov);)
++ }
++
++ return rval;
++}
++
++/*
++ * qla2x00_loopback_test
++ * Send out a LOOPBACK mailbox command.
++ *
++ * Input:
++ * ha = adapter block pointer.
++ * retry_cnt = pointer to login retry count.
++ * tov = pointer to login timeout value.
++ *
++ * Returns:
++ * qla2x00 local function return status code.
++ *
++ * Context:
++ * Kernel context.
++ */
++int
++qla2x00_loopback_test(scsi_qla_host_t *ha, INT_LOOPBACK_REQ *req,
++ uint16_t *ret_mb)
++{
++ int rval;
++ mbx_cmd_t mc;
++ mbx_cmd_t *mcp = &mc;
++
++ memset(mcp->mb, 0 , sizeof(mcp->mb));
++
++ mcp->mb[0] = MBC_DIAGNOSTIC_LOOP_BACK;
++ mcp->mb[1] = req->Options;
++ mcp->mb[10] = LSW(req->TransferCount);
++ mcp->mb[11] = MSW(req->TransferCount);
++
++ mcp->mb[14] = LSW(ha->ioctl_mem_phys); /* send data address */
++ mcp->mb[15] = MSW(ha->ioctl_mem_phys);
++ mcp->mb[20] = LSW(MSD(ha->ioctl_mem_phys));
++ mcp->mb[21] = MSW(MSD(ha->ioctl_mem_phys));
++
++ mcp->mb[16] = LSW(ha->ioctl_mem_phys); /* rcv data address */
++ mcp->mb[17] = MSW(ha->ioctl_mem_phys);
++ mcp->mb[6] = LSW(MSD(ha->ioctl_mem_phys));
++ mcp->mb[7] = MSW(MSD(ha->ioctl_mem_phys));
++
++ mcp->mb[18] = LSW(req->IterationCount); /* iteration count lsb */
++ mcp->mb[19] = MSW(req->IterationCount); /* iteration count msb */
++
++ mcp->out_mb = MBX_21|MBX_20|MBX_19|MBX_18|MBX_17|MBX_16|MBX_15|
++ MBX_14|MBX_13|MBX_12|MBX_11|MBX_10|MBX_7|MBX_6|MBX_1|MBX_0;
++ mcp->in_mb = MBX_19|MBX_18|MBX_3|MBX_2|MBX_1|MBX_0;
++ mcp->buf_size = req->TransferCount;
++ mcp->flags = MBX_DMA_OUT|MBX_DMA_IN|IOCTL_CMD;
++ mcp->tov = 30;
++
++ DEBUG11(printk("qla2x00_send_loopback: req.Options=%x iterations=%x "
++ "MAILBOX_CNT=%d.\n", req->Options, req->IterationCount,
++ MAILBOX_REGISTER_COUNT);)
++
++ rval = qla2x00_mailbox_command(ha, mcp);
++
++ /* Always copy back return mailbox values. */
++ memcpy((void *)ret_mb, (void *)mcp->mb, sizeof(mcp->mb));
++
++ if (rval != QL_STATUS_SUCCESS) {
++ /* Empty. */
++ DEBUG2_3_11(printk(
++ "qla2x00_loopback_test(%ld): mailbox command FAILED=%x.\n",
++ ha->host_no, mcp->mb[0]);)
++ } else {
++ /* Empty. */
++ DEBUG11(printk(
++ "qla2x00_loopback_test(%ld): done.\n", ha->host_no);)
++ }
++
++ return rval;
++}
++
++/*
++ * qla2x00_init_firmware
++ * Initialize adapter firmware.
++ *
++ * Input:
++ * ha = adapter block pointer.
++ * dptr = Initialization control block pointer.
++ * size = size of initialization control block.
++ * TARGET_QUEUE_LOCK must be released.
++ * ADAPTER_STATE_LOCK must be released.
++ *
++ * Returns:
++ * qla2x00 local function return status code.
++ *
++ * Context:
++ * Kernel context.
++ */
++int
++qla2x00_init_firmware(scsi_qla_host_t *ha, uint16_t size)
++{
++ int rval;
++ mbx_cmd_t mc;
++ mbx_cmd_t *mcp = &mc;
++
++ DEBUG11(printk("qla2x00_init_firmware(%ld): entered.\n",
++ ha->host_no);)
++
++ mcp->mb[0] = MBC_INITIALIZE_FIRMWARE;
++ mcp->mb[2] = MSW(ha->init_cb_dma);
++ mcp->mb[3] = LSW(ha->init_cb_dma);
++ mcp->mb[4] = 0;
++ mcp->mb[5] = 0;
++ mcp->mb[6] = MSW(MSD(ha->init_cb_dma));
++ mcp->mb[7] = LSW(MSD(ha->init_cb_dma));
++ mcp->out_mb = MBX_7|MBX_6|MBX_3|MBX_2|MBX_0;
++ mcp->in_mb = MBX_5|MBX_4|MBX_0;
++ mcp->buf_size = size;
++ mcp->flags = MBX_DMA_OUT;
++ mcp->tov = 30;
++ rval = (int)qla2x00_mailbox_command(ha, mcp);
++
++ if (rval != QL_STATUS_SUCCESS) {
++ /*EMPTY*/
++ DEBUG2_3_11(printk("qla2x00_init_firmware(%ld): failed=%x "
++ "mb0=%x.\n",
++ ha->host_no, rval, mcp->mb[0]);)
++ } else {
++ /*EMPTY*/
++ DEBUG11(printk("qla2x00_init_firmware(%ld): done.\n",
++ ha->host_no);)
++ }
++
++ return rval;
++}
++
++/*
++ * qla2x00_get_port_database
++ * Issue normal/enhanced get port database mailbox command
++ * and copy device name as necessary.
++ *
++ * Input:
++ * ha = adapter state pointer.
++ * dev = structure pointer.
++ * opt = enhanced cmd option byte.
++ *
++ * Returns:
++ * qla2x00 local function return status code.
++ *
++ * Context:
++ * Kernel context.
++ */
++int
++qla2x00_get_port_database(scsi_qla_host_t *ha, fcdev_t *dev, uint8_t opt)
++{
++ int rval;
++ mbx_cmd_t mc;
++ mbx_cmd_t *mcp = &mc;
++ port_database_t *pd;
++ dma_addr_t phys_address = 0;
++
++ DEBUG11(printk("qla2x00_get_port_database(%ld): entered.\n",
++ ha->host_no);)
++
++ pd = pci_alloc_consistent(ha->pdev, PORT_DATABASE_SIZE, &phys_address);
++ if (pd == NULL) {
++ DEBUG2_3_11(printk("qla2x00_get_port_database(%ld): **** "
++ "Mem Alloc Failed ****",
++ ha->host_no);)
++ return QL_STATUS_RESOURCE_ERROR;
++ }
++
++ memset(pd, 0, PORT_DATABASE_SIZE);
++
++ if (opt != 0)
++ mcp->mb[0] = MBC_ENHANCED_GET_PORT_DATABASE;
++ else
++ mcp->mb[0] = MBC_GET_PORT_DATABASE;
++
++#if defined(EXTENDED_IDS)
++ mcp->mb[1] = dev->loop_id & 0xFF;
++#else
++ mcp->mb[1] = dev->loop_id << 8 | opt;
++#endif
++ mcp->mb[2] = MSW(phys_address);
++ mcp->mb[3] = LSW(phys_address);
++ mcp->mb[6] = MSW(MSD(phys_address));
++ mcp->mb[7] = LSW(MSD(phys_address));
++ mcp->out_mb = MBX_7|MBX_6|MBX_3|MBX_2|MBX_1|MBX_0;
++#if defined(EXTENDED_IDS)
++ mcp->mb[10] = opt;
++ mcp->out_mb |= MBX_10;
++#endif
++ mcp->in_mb = MBX_0;
++ mcp->buf_size = PORT_DATABASE_SIZE;
++ mcp->flags = MBX_DMA_IN;
++ /*mcp->tov = ha->retry_count * ha->login_timeout * 2;*/
++ mcp->tov = ha->login_timeout * 2;
++ rval = (int)qla2x00_mailbox_command(ha, mcp);
++
++ if (rval == QL_STATUS_SUCCESS) {
++ /* Save some data */
++ /* Names are big endian. */
++ memcpy((void *)&dev->name[0],(void *)&pd->node_name[0], 8);
++ memcpy((void *)&dev->wwn[0], (void *)&pd->port_name[0], 8);
++
++ /* Get port_id of device. */
++ dev->d_id.b.al_pa = pd->port_id[2];
++ dev->d_id.b.area = pd->port_id[3];
++ dev->d_id.b.domain = pd->port_id[0];
++ dev->d_id.b.rsvd_1 = 0;
++
++ /* Get initiator status of device. */
++ pd->prli_svc_param_word_3[0] & BIT_5 ?
++ (dev->flag = dev->flag | DEV_INITIATOR) :
++ (dev->flag = dev->flag & ~DEV_INITIATOR);
++
++ /* Check for logged in and whether target device. */
++ if (pd->master_state != PD_STATE_PORT_LOGGED_IN &&
++ pd->slave_state != PD_STATE_PORT_LOGGED_IN) {
++ rval = QL_STATUS_ERROR;
++ } else if (pd->master_state == PD_STATE_PORT_UNAVAILABLE) {
++ rval = QL_STATUS_ERROR;
++ }
++ }
++
++ pci_free_consistent(ha->pdev, PORT_DATABASE_SIZE, pd, phys_address);
++
++ if (rval != QL_STATUS_SUCCESS) {
++ /*EMPTY*/
++ DEBUG2_3_11(printk("qla2x00_get_port_database(%ld): "
++ "failed=%x.\n", ha->host_no, rval);)
++ } else {
++ /*EMPTY*/
++ DEBUG11(printk("qla2x00_get_port_database(%ld): done.\n",
++ ha->host_no);)
++ }
++
++ return rval;
++}
++
++/*
++ * qla2x00_get_firmware_state
++ * Get adapter firmware state.
++ *
++ * Input:
++ * ha = adapter block pointer.
++ * dptr = pointer for firmware state.
++ * TARGET_QUEUE_LOCK must be released.
++ * ADAPTER_STATE_LOCK must be released.
++ *
++ * Returns:
++ * qla2x00 local function return status code.
++ *
++ * Context:
++ * Kernel context.
++ */
++int
++qla2x00_get_firmware_state(scsi_qla_host_t *ha, uint16_t *dptr)
++{
++ int rval;
++ mbx_cmd_t mc;
++ mbx_cmd_t *mcp = &mc;
++
++ DEBUG11(printk("qla2x00_get_firmware_state(%ld): entered.\n",
++ ha->host_no);)
++
++ mcp->mb[0] = MBC_GET_FIRMWARE_STATE;
++ mcp->out_mb = MBX_0;
++ mcp->in_mb = MBX_2|MBX_1|MBX_0;
++ mcp->tov = 30;
++ mcp->flags = 0;
++ rval = (int)qla2x00_mailbox_command(ha, mcp);
++
++ /* Return firmware state. */
++ *dptr = mcp->mb[1];
++
++ if (rval != QL_STATUS_SUCCESS) {
++ /*EMPTY*/
++ DEBUG2_3_11(printk("qla2x00_get_firmware_state(%ld): "
++ "failed=%x.\n", ha->host_no, rval);)
++ } else {
++ /*EMPTY*/
++ DEBUG11(printk("qla2x00_get_firmware_state(%ld): done.\n",
++ ha->host_no);)
++ }
++
++ return rval;
++}
++
++/*
++ * qla2x00_get_port_name
++ * Issue get port name mailbox command.
++ * Returned name is in big endian format.
++ *
++ * Input:
++ * ha = adapter block pointer.
++ * loop_id = loop ID of device.
++ * name = pointer for name.
++ * TARGET_QUEUE_LOCK must be released.
++ * ADAPTER_STATE_LOCK must be released.
++ *
++ * Returns:
++ * qla2x00 local function return status code.
++ *
++ * Context:
++ * Kernel context.
++ */
++int
++qla2x00_get_port_name(scsi_qla_host_t *ha, uint16_t loop_id, uint8_t *name,
++ uint8_t opt)
++{
++ int rval;
++ mbx_cmd_t mc;
++ mbx_cmd_t *mcp = &mc;
++
++ DEBUG11(printk("qla2x00_get_port_name(%ld): entered.\n",
++ ha->host_no);)
++
++ mcp->mb[0] = MBC_GET_PORT_NAME;
++#if defined(EXTENDED_IDS)
++ mcp->mb[1] = loop_id & 0xFF;
++#else
++ mcp->mb[1] = loop_id << 8 | opt;
++#endif
++ mcp->out_mb = MBX_1|MBX_0;
++#if defined(EXTENDED_IDS)
++ mcp->mb[10] = opt;
++ mcp->out_mb |= MBX_10;
++#endif
++ mcp->in_mb = MBX_7|MBX_6|MBX_3|MBX_2|MBX_1|MBX_0;
++ mcp->tov = 30;
++ mcp->flags = 0;
++ rval = (int)qla2x00_mailbox_command(ha, mcp);
++
++ if (rval != QL_STATUS_SUCCESS) {
++ /*EMPTY*/
++ DEBUG2_3_11(printk("qla2x00_get_port_name(%ld): failed=%x.\n",
++ ha->host_no, rval);)
++ } else {
++ if (name != NULL) {
++ /* This function returns name in big endian. */
++ name[0] = LSB(mcp->mb[2]);
++ name[1] = MSB(mcp->mb[2]);
++ name[2] = LSB(mcp->mb[3]);
++ name[3] = MSB(mcp->mb[3]);
++ name[4] = LSB(mcp->mb[6]);
++ name[5] = MSB(mcp->mb[6]);
++ name[6] = LSB(mcp->mb[7]);
++ name[7] = MSB(mcp->mb[7]);
++ }
++
++ DEBUG11(printk("qla2x00_get_port_name(%ld): done.\n",
++ ha->host_no);)
++ }
++
++ return rval;
++}
++
++/*
++ * qla2x00_get_link_status
++ *
++ * Input:
++ * ha = adapter block pointer.
++ * loop_id = device loop ID.
++ * ret_buf = pointer to link status return buffer.
++ *
++ * Returns:
++ * 0 = success.
++ * BIT_0 = mem alloc error.
++ * BIT_1 = mailbox error.
++ */
++uint8_t
++qla2x00_get_link_status(scsi_qla_host_t *ha, uint8_t loop_id, void *ret_buf,
++ uint16_t *status)
++{
++ int rval;
++ mbx_cmd_t mc;
++ mbx_cmd_t *mcp = &mc;
++ link_stat_t *stat_buf;
++ dma_addr_t phys_address = 0;
++
++
++ DEBUG11(printk("qla2x00_get_link_status(%ld): entered.\n",
++ ha->host_no);)
++
++ stat_buf = pci_alloc_consistent(ha->pdev, sizeof(link_stat_t),
++ &phys_address);
++ if (stat_buf == NULL) {
++ DEBUG2_3_11(printk("qla2x00_get_link_status(%ld): Failed to "
++ "allocate memory.\n", ha->host_no));
++ return BIT_0;
++ }
++
++ memset(stat_buf, 0, sizeof(link_stat_t));
++
++ mcp->mb[0] = MBC_GET_LINK_STATUS;
++#if defined(EXTENDED_IDS)
++ mcp->mb[1] = loop_id & 0xFF;
++#else
++ mcp->mb[1] = loop_id << 8;
++#endif
++ mcp->mb[2] = MSW(phys_address);
++ mcp->mb[3] = LSW(phys_address);
++ mcp->mb[6] = MSW(MSD(phys_address));
++ mcp->mb[7] = LSW(MSD(phys_address));
++ mcp->out_mb = MBX_7|MBX_6|MBX_3|MBX_2|MBX_1|MBX_0;
++#if defined(EXTENDED_IDS)
++ mcp->mb[10] = 0;
++ mcp->out_mb |= MBX_10;
++#endif
++ mcp->in_mb = MBX_0;
++ mcp->tov = 30;
++ mcp->flags = IOCTL_CMD;
++ rval = (int)qla2x00_mailbox_command(ha, mcp);
++
++ if (rval == QL_STATUS_SUCCESS) {
++
++ if (mcp->mb[0] != MBS_COMMAND_COMPLETE) {
++ DEBUG2_3_11(printk("qla2x00_get_link_status(%ld): cmd "
++ "failed. mbx0=%x.\n", ha->host_no, mcp->mb[0]);)
++ status[0] = mcp->mb[0];
++ rval = BIT_1;
++ } else {
++ /* copy over data */
++ memcpy(ret_buf, stat_buf,sizeof(link_stat_t));
++ DEBUG(printk("qla2x00_get_link_status(%ld): stat dump: "
++ "fail_cnt=%d loss_sync=%d loss_sig=%d seq_err=%d "
++ "inval_xmt_word=%d inval_crc=%d.\n",
++ ha->host_no,
++ stat_buf->link_fail_cnt, stat_buf->loss_sync_cnt,
++ stat_buf->loss_sig_cnt, stat_buf->prim_seq_err_cnt,
++ stat_buf->inval_xmit_word_cnt,
++ stat_buf->inval_crc_cnt);)
++ DEBUG11(printk("qla2x00_get_link_status(%ld): stat "
++ "dump: fail_cnt=%d loss_sync=%d loss_sig=%d "
++ "seq_err=%d inval_xmt_word=%d inval_crc=%d.\n",
++ ha->host_no,
++ stat_buf->link_fail_cnt, stat_buf->loss_sync_cnt,
++ stat_buf->loss_sig_cnt, stat_buf->prim_seq_err_cnt,
++ stat_buf->inval_xmit_word_cnt,
++ stat_buf->inval_crc_cnt);)
++ }
++ } else {
++ /* Failed. */
++ DEBUG2_3_11(printk("qla2x00_get_link_status(%ld): failed=%x.\n",
++ ha->host_no, rval);)
++ rval = BIT_1;
++ }
++
++ pci_free_consistent(ha->pdev, sizeof(link_stat_t),
++ stat_buf, phys_address);
++
++ return rval;
++}
++
++/*
++ * qla2x00_lip_reset
++ * Issue LIP reset mailbox command.
++ *
++ * Input:
++ * ha = adapter block pointer.
++ * TARGET_QUEUE_LOCK must be released.
++ * ADAPTER_STATE_LOCK must be released.
++ *
++ * Returns:
++ * qla2x00 local function return status code.
++ *
++ * Context:
++ * Kernel context.
++ */
++int
++qla2x00_lip_reset(scsi_qla_host_t *ha)
++{
++ int rval;
++ mbx_cmd_t mc;
++ mbx_cmd_t *mcp = &mc;
++
++ DEBUG11(printk("qla2x00_lip_reset(%ld): entered.\n",
++ ha->host_no);)
++
++ mcp->mb[0] = MBC_LIP_RESET;
++#if defined(EXTENDED_IDS)
++ mcp->mb[1] = 0x00ff;
++#else
++ mcp->mb[1] = 0xff00;
++#endif
++ mcp->mb[2] = ha->loop_reset_delay;
++ mcp->mb[3] = 0;
++ mcp->out_mb = MBX_3|MBX_2|MBX_1|MBX_0;
++#if defined(EXTENDED_IDS)
++ mcp->mb[10] = 0;
++ mcp->out_mb |= MBX_10;
++#endif
++ mcp->in_mb = MBX_0;
++ mcp->tov = 30;
++ mcp->flags = 0;
++ rval = (int)qla2x00_mailbox_command(ha, mcp);
++
++ if (rval != QL_STATUS_SUCCESS) {
++ /*EMPTY*/
++ DEBUG2_3_11(printk("qla2x00_lip_reset(%ld): failed=%x.\n",
++ ha->host_no, rval);)
++ } else {
++ /*EMPTY*/
++ DEBUG11(printk("qla2x00_lip_reset(%ld): done.\n",
++ ha->host_no);)
++ }
++
++ return rval;
++}
++
++/*
++ * qla2x00_send_sns
++ * Send SNS command.
++ *
++ * Input:
++ * ha = adapter block pointer.
++ * sns = pointer for command.
++ * cmd_size = command size.
++ * buf_size = response/command size.
++ * TARGET_QUEUE_LOCK must be released.
++ * ADAPTER_STATE_LOCK must be released.
++ *
++ * Returns:
++ * qla2x00 local function return status code.
++ *
++ * Context:
++ * Kernel context.
++ */
++int
++qla2x00_send_sns(scsi_qla_host_t *ha, dma_addr_t sns_phys_address,
++ uint16_t cmd_size, size_t buf_size)
++{
++ int rval;
++ mbx_cmd_t mc;
++ mbx_cmd_t *mcp = &mc;
++
++ DEBUG11(printk("qla2x00_send_sns(%ld): entered.\n",
++ ha->host_no);)
++
++ mcp->mb[0] = MBC_SEND_SNS_COMMAND;
++ mcp->mb[1] = cmd_size;
++ mcp->mb[2] = MSW(sns_phys_address);
++ mcp->mb[3] = LSW(sns_phys_address);
++ mcp->mb[6] = MSW(MSD(sns_phys_address));
++ mcp->mb[7] = LSW(MSD(sns_phys_address));
++ mcp->out_mb = MBX_7|MBX_6|MBX_3|MBX_2|MBX_1|MBX_0;
++ mcp->in_mb = MBX_0|MBX_1;
++ mcp->buf_size = buf_size;
++ mcp->flags = MBX_DMA_OUT|MBX_DMA_IN;
++ /*mcp->tov = ha->retry_count * ha->login_timeout * 2;*/
++ mcp->tov = ha->login_timeout * 2;
++
++ DEBUG11(printk("qla2x00_send_sns: retry cnt=%d ratov=%d total "
++ "tov=%d.\n", ha->retry_count, ha->login_timeout, mcp->tov);)
++
++ rval = (int)qla2x00_mailbox_command(ha, mcp);
++
++ if (rval != QL_STATUS_SUCCESS) {
++ /*EMPTY*/
++ DEBUG(printk("qla2x00_send_sns(%ld): failed=%x mb[0]=%x "
++ "mb[1]=%x.\n",
++ ha->host_no, rval, mcp->mb[0], mcp->mb[1]);)
++ DEBUG2_3_11(printk("qla2x00_send_sns(%ld): failed=%x mb[0]=%x "
++ "mb[1]=%x.\n",
++ ha->host_no, rval, mcp->mb[0], mcp->mb[1]);)
++ } else {
++ /*EMPTY*/
++ DEBUG11(printk("qla2x00_send_sns(%ld): done.\n",
++ ha->host_no);)
++ }
++
++ return rval;
++}
++
++/*
++ * qla2x00_login_fabric
++ * Issue login fabric port mailbox command.
++ *
++ * Input:
++ * ha = adapter block pointer.
++ * loop_id = device loop ID.
++ * domain = device domain.
++ * area = device area.
++ * al_pa = device AL_PA.
++ * status = pointer for return status.
++ * opt = command options.
++ * TARGET_QUEUE_LOCK must be released.
++ * ADAPTER_STATE_LOCK must be released.
++ *
++ * Returns:
++ * qla2x00 local function return status code.
++ *
++ * Context:
++ * Kernel context.
++ */
++int
++qla2x00_login_fabric(scsi_qla_host_t *ha, uint16_t loop_id, uint8_t domain,
++ uint8_t area, uint8_t al_pa, uint16_t *status, uint8_t opt)
++{
++ int rval;
++ mbx_cmd_t mc;
++ mbx_cmd_t *mcp = &mc;
++
++ DEBUG11(printk("qla2x00_login_fabric(%ld): entered.\n",
++ ha->host_no);)
++
++ mcp->mb[0] = MBC_LOGIN_FABRIC_PORT;
++#if defined(EXTENDED_IDS)
++ mcp->mb[1] = loop_id & 0xFF;
++#else
++ mcp->mb[1] = (loop_id << 8) | opt;
++#endif
++ mcp->mb[2] = domain;
++ mcp->mb[3] = area << 8 | al_pa;
++ mcp->out_mb = MBX_3|MBX_2|MBX_1|MBX_0;
++#if defined(EXTENDED_IDS)
++ mcp->mb[10] = opt;
++ mcp->out_mb |= MBX_10;
++#endif
++ mcp->in_mb = MBX_2|MBX_1|MBX_0;
++ /*mcp->tov = ha->retry_count * ha->login_timeout * 2;*/
++ mcp->tov = ha->login_timeout * 2;
++ mcp->flags = 0;
++ rval = (int)qla2x00_mailbox_command(ha, mcp);
++
++ /* Return mailbox statuses. */
++ if (status != NULL) {
++ *status++ = mcp->mb[0];
++ *status++ = mcp->mb[1];
++ *status = mcp->mb[2];
++ }
++
++ if (rval != QL_STATUS_SUCCESS) {
++ /* RLU tmp code: need to change main mailbox_command function to
++ * return ok even when the mailbox completion value is not
++ * SUCCESS. The caller needs to be responsible to interpret
++ * the return values of this mailbox command if we're not
++ * to change too much of the existing code.
++ */
++ if (mcp->mb[0] == 0x4001 || mcp->mb[0] == 0x4002 ||
++ mcp->mb[0] == 0x4003 || mcp->mb[0] == 0x4005 ||
++ mcp->mb[0] == 0x4006)
++ rval = QL_STATUS_SUCCESS;
++
++ /*EMPTY*/
++ DEBUG2_3_11(printk("qla2x00_login_fabric(%ld): failed=%x "
++ "mb[1]=%x mb[2]=%x.\n",
++ ha->host_no, rval, mcp->mb[1], mcp->mb[2]);)
++ } else {
++ /*EMPTY*/
++ DEBUG11(printk("qla2x00_login_fabric(%ld): done.\n",
++ ha->host_no);)
++ }
++
++ return rval;
++}
++
++/*
++ * qla2x00_login_local_device
++ * Issue login loop port mailbox command.
++ *
++ * Input:
++ * ha = adapter block pointer.
++ * loop_id = device loop ID.
++ * opt = command options.
++ *
++ * Returns:
++ * Return status code.
++ *
++ * Context:
++ * Kernel context.
++ *
++ */
++int
++qla2x00_login_local_device(scsi_qla_host_t *ha,
++ uint16_t loop_id, uint16_t *mb_ret, uint8_t opt)
++{
++ int rval;
++ mbx_cmd_t mc;
++ mbx_cmd_t *mcp = &mc;
++
++ DEBUG3(printk("%s(%ld): entered.\n", __func__, ha->host_no);)
++
++ mcp->mb[0] = MBC_LOGIN_LOOP_PORT;
++#if defined(EXTENDED_IDS)
++ mcp->mb[1] = loop_id & 0xFF;
++#else
++ mcp->mb[1] = (loop_id << 8);
++#endif
++ mcp->mb[2] = opt;
++ mcp->out_mb = MBX_2|MBX_1|MBX_0;
++ mcp->in_mb = MBX_7|MBX_6|MBX_1|MBX_0;
++ mcp->tov = ha->login_timeout * 2;
++ mcp->flags = 0;
++ rval = (int)qla2x00_mailbox_command(ha, mcp);
++
++ /* Return mailbox statuses. */
++ if (mb_ret != NULL) {
++ mb_ret[0] = mcp->mb[0];
++ mb_ret[1] = mcp->mb[1];
++ mb_ret[6] = mcp->mb[6];
++ mb_ret[7] = mcp->mb[7];
++ }
++
++ if (rval != QL_STATUS_SUCCESS) {
++ /* AV tmp code: need to change main mailbox_command function to
++ * return ok even when the mailbox completion value is not
++ * SUCCESS. The caller needs to be responsible to interpret
++ * the return values of this mailbox command if we're not
++ * to change too much of the existing code.
++ */
++ if (mcp->mb[0] == 0x4005 || mcp->mb[0] == 0x4006)
++ rval = QL_STATUS_SUCCESS;
++
++ DEBUG(printk("%s(%ld): failed=%x mb[0]=%x mb[1]=%x "
++ "mb[6]=%x mb[7]=%x.\n",
++ __func__, ha->host_no, rval, mcp->mb[0], mcp->mb[1],
++ mcp->mb[6], mcp->mb[7]);)
++ DEBUG2_3(printk("%s(%ld): failed=%x mb[0]=%x mb[1]=%x "
++ "mb[6]=%x mb[7]=%x.\n",
++ __func__, ha->host_no, rval, mcp->mb[0], mcp->mb[1],
++ mcp->mb[6], mcp->mb[7]);)
++ } else {
++ /*EMPTY*/
++ DEBUG3(printk("%s(%ld): done.\n", __func__, ha->host_no);)
++ }
++
++ return (rval);
++}
++
++/*
++ * qla2x00_fabric_logout
++ * Issue logout fabric port mailbox command.
++ *
++ * Input:
++ * ha = adapter block pointer.
++ * loop_id = device loop ID.
++ * TARGET_QUEUE_LOCK must be released.
++ * ADAPTER_STATE_LOCK must be released.
++ *
++ * Returns:
++ * qla2x00 local function return status code.
++ *
++ * Context:
++ * Kernel context.
++ */
++int
++qla2x00_fabric_logout(scsi_qla_host_t *ha, uint16_t loop_id)
++{
++ int rval;
++ mbx_cmd_t mc;
++ mbx_cmd_t *mcp = &mc;
++
++ DEBUG11(printk("qla2x00_fabric_logout(%ld): entered.\n",
++ ha->host_no);)
++
++ mcp->mb[0] = MBC_LOGOUT_FABRIC_PORT;
++#if defined(EXTENDED_IDS)
++ mcp->mb[1] = loop_id & 0xFF;
++#else
++ mcp->mb[1] = loop_id << 8;
++#endif
++ mcp->out_mb = MBX_1|MBX_0;
++#if defined(EXTENDED_IDS)
++ mcp->mb[10] = 0;
++ mcp->out_mb |= MBX_10;
++#endif
++ mcp->in_mb = MBX_1|MBX_0;
++ mcp->tov = 30;
++ mcp->flags = 0;
++ rval = (int)qla2x00_mailbox_command(ha, mcp);
++
++ if (rval != QL_STATUS_SUCCESS) {
++ /*EMPTY*/
++ DEBUG2_3_11(printk("qla2x00_fabric_logout(%ld): failed=%x "
++ "mbx1=%x.\n",
++ ha->host_no, rval, mcp->mb[1]);)
++ } else {
++ /*EMPTY*/
++ DEBUG11(printk("qla2x00_fabric_logout(%ld): done.\n",
++ ha->host_no);)
++ }
++
++ return rval;
++}
++
++/*
++ * qla2x00_full_login_lip
++ * Issue full login LIP mailbox command.
++ *
++ * Input:
++ * ha = adapter block pointer.
++ * TARGET_QUEUE_LOCK must be released.
++ * ADAPTER_STATE_LOCK must be released.
++ *
++ * Returns:
++ * qla2x00 local function return status code.
++ *
++ * Context:
++ * Kernel context.
++ */
++int
++qla2x00_full_login_lip(scsi_qla_host_t *ha)
++{
++ int rval;
++ mbx_cmd_t mc;
++ mbx_cmd_t *mcp = &mc;
++
++ DEBUG11(printk("qla2x00_full_login_lip(%ld): entered.\n",
++ ha->host_no);)
++
++ mcp->mb[0] = MBC_LIP_FULL_LOGIN;
++ mcp->mb[1] = 0;
++ mcp->mb[2] = 0;
++ mcp->mb[3] = 0;
++ mcp->out_mb = MBX_3|MBX_2|MBX_1|MBX_0;
++ mcp->in_mb = MBX_0;
++ mcp->tov = 30;
++ mcp->flags = 0;
++ rval = (int)qla2x00_mailbox_command(ha, mcp);
++
++ if (rval != QL_STATUS_SUCCESS) {
++ /*EMPTY*/
++ DEBUG2_3_11(printk("qla2x00_full_login_lip(%ld): failed=%x.\n",
++ ha->instance, rval);)
++ } else {
++ /*EMPTY*/
++ DEBUG11(printk("qla2x00_full_login_lip(%ld): done.\n",
++ ha->host_no);)
++ }
++
++ return rval;
++}
++
++/*
++ * qla2x00_get_port_list
++ *
++ * Input:
++ * ha = adapter block pointer.
++ * TARGET_QUEUE_LOCK must be released.
++ * ADAPTER_STATE_LOCK must be released.
++ *
++ * Returns:
++ * qla2x00 local function return status code.
++ *
++ * Context:
++ * Kernel context.
++ */
++int
++qla2x00_get_port_list(scsi_qla_host_t *ha, port_list_entry_t *gp_list,
++ dma_addr_t gpl_phys_address, uint16_t opt, uint16_t *size)
++{
++ int rval;
++ mbx_cmd_t mc;
++ mbx_cmd_t *mcp = &mc;
++
++ DEBUG11(printk("qla2x00_get_port_list(%ld): entered.\n",
++ ha->host_no);)
++
++ if( gp_list == NULL ) {
++ return QL_STATUS_ERROR;
++ }
++
++ mcp->mb[0] = MBC_GET_PORT_LIST;
++ mcp->mb[1] = opt;
++ mcp->mb[2] = MSW(gpl_phys_address);
++ mcp->mb[3] = LSW(gpl_phys_address);
++ mcp->mb[6] = MSW(MSD(gpl_phys_address));
++ mcp->mb[7] = LSW(MSD(gpl_phys_address));
++
++ mcp->out_mb = MBX_7|MBX_6|MBX_3|MBX_2|MBX_1|MBX_0;
++ mcp->in_mb = MBX_1|MBX_0;
++ mcp->tov = 30;
++ mcp->flags = 0;
++ rval = (int)qla2x00_mailbox_command(ha, mcp);
++
++ if (rval != QL_STATUS_SUCCESS) {
++ /*EMPTY*/
++ DEBUG2_3_11(printk("qla2x00_get_port_list(%ld): failed=%x.\n",
++ ha->host_no, rval);)
++ } else {
++ *size = mcp->mb[1];
++ DEBUG11(printk("qla2x00_get_port_list(%ld): done.\n",
++ ha->host_no);)
++ }
++
++ return rval;
++}
++
++#if 0 /* not yet needed */
++int
++qla2x00_dump_ram(scsi_qla_host_t *ha, uint32_t risc_address,
++ dma_addr_t ispdump_dma, uint32_t size)
++{
++ int rval;
++ mbx_cmd_t mc;
++ mbx_cmd_t *mcp = &mc;
++
++ mcp->mb[0] = MBC_DUMP_RAM;
++ mcp->mb[1] = risc_address & 0xffff;
++ mcp->mb[2] = MSW(ispdump_dma);
++ mcp->mb[3] = LSW(ispdump_dma);
++ mcp->mb[4] = 0;
++ mcp->mb[6] = MSW(MSD(ispdump_dma));
++ mcp->mb[7] = LSW(MSD(ispdump_dma));
++
++ mcp->out_mb = MBX_7|MBX_6|MBX_4|MBX_3|MBX_2|MBX_1|MBX_0;
++ mcp->in_mb = MBX_0;
++ mcp->tov = 30;
++ mcp->flags = 0;
++ rval = qla2x00_mailbox_command(ha, mcp);
++
++ return rval;
++}
++#endif
++
++/*
++ * qla2x00_lun_reset
++ * Issue lun reset mailbox command.
++ *
++ * Input:
++ * ha = adapter block pointer.
++ * loop_id = device loop ID.
++ * lun = lun to be reset.
++ * TARGET_QUEUE_LOCK must be released.
++ * ADAPTER_STATE_LOCK must be released.
++ *
++ * Returns:
++ * qla2x00 local function return status code.
++ *
++ * Context:
++ * Kernel context.
++ */
++int
++qla2x00_lun_reset(scsi_qla_host_t *ha, uint16_t loop_id, uint16_t lun)
++{
++ int rval;
++ mbx_cmd_t mc;
++ mbx_cmd_t *mcp = &mc;
++
++ ENTER("qla2x00_lun_reset");
++
++ mcp->mb[0] = MBC_LUN_RESET;
++#if defined(EXTENDED_IDS)
++ mcp->mb[1] = loop_id & 0xFF;
++#else
++ mcp->mb[1] = loop_id << 8;
++#endif
++ mcp->mb[2] = lun;
++ mcp->out_mb = MBX_2|MBX_1|MBX_0;
++ mcp->in_mb = MBX_0;
++ mcp->tov = 30;
++ mcp->flags = 0;
++ rval = qla2x00_mailbox_command(ha, mcp);
++
++ if (rval != QLA2X00_SUCCESS) {
++ /*EMPTY*/
++ printk(KERN_WARNING "qla2x00_lun_reset(%d): failed = %d",
++ (int)ha->instance, rval);
++ } else {
++ /*EMPTY*/
++ LEAVE("qla2x00_lun_reset: exiting normally");
++ }
++
++ return rval;
++}
++
++/*
++ * qla2x00_send_rnid_mbx
++ * Issue RNID ELS using mailbox command
++ *
++ * Input:
++ * ha = adapter state pointer.
++ * loop_id = loop ID of the target device.
++ * data_fmt = currently supports only 0xDF.
++ * buffer = buffer pointer.
++ * buf_size = size of buffer.
++ * mb_reg = pointer to return mailbox registers.
++ *
++ * Returns:
++ * qla2x00 local function return status code.
++ *
++ * Context:
++ * Kernel context.
++ */
++int
++qla2x00_send_rnid_mbx(scsi_qla_host_t *ha, uint16_t loop_id, uint8_t data_fmt,
++ dma_addr_t buf_phys_addr, size_t buf_size, uint16_t *mb_reg)
++{
++ int rval;
++ mbx_cmd_t mc;
++ mbx_cmd_t *mcp = &mc;
++
++ DEBUG11(printk("qla2x00_send_rnid_mbx(%ld): entered.\n",
++ ha->host_no);)
++
++ mcp->mb[0] = MBC_SEND_RNID_ELS;
++#if defined(EXTENDED_IDS)
++ mcp->mb[1] = loop_id & 0xFF;
++#else
++ mcp->mb[1] = (loop_id << 8 ) | data_fmt;
++#endif
++ mcp->mb[2] = MSW(buf_phys_addr);
++ mcp->mb[3] = LSW(buf_phys_addr);
++ mcp->mb[6] = MSW(MSD(buf_phys_addr));
++ mcp->mb[7] = LSW(MSD(buf_phys_addr));
++ mcp->out_mb = MBX_7|MBX_6|MBX_3|MBX_2|MBX_1|MBX_0;
++#if defined(EXTENDED_IDS)
++ mcp->mb[10] = data_fmt;
++ mcp->out_mb |= MBX_10;
++#endif
++ mcp->in_mb = MBX_1|MBX_0;
++ mcp->buf_size = buf_size;
++ mcp->flags = MBX_DMA_IN;
++ mcp->tov = 30;
++ rval = (int)qla2x00_mailbox_command(ha, mcp);
++
++ if (rval != QL_STATUS_SUCCESS) {
++ memcpy(mb_reg, mcp->mb, 2 * 2); /* 2 status regs */
++
++ DEBUG2_3_11(printk("qla2x00_send_rnid_mbx(%ld): failed=%x "
++ "mb[1]=%x.\n",
++ ha->host_no, mcp->mb[0], mcp->mb[1]);)
++ } else {
++ /*EMPTY*/
++ DEBUG11(printk("qla2x00_send_rnid_mbx(%ld): done.\n",
++ ha->host_no);)
++ }
++
++ return (rval);
++}
++
++/*
++ * qla2x00_set_rnid_params_mbx
++ * Set RNID parameters using mailbox command
++ *
++ * Input:
++ * ha = adapter state pointer.
++ * buffer = buffer pointer.
++ * buf_size = size of buffer.
++ * mb_reg = pointer to return mailbox registers.
++ *
++ * Returns:
++ * qla2x00 local function return status code.
++ *
++ * Context:
++ * Kernel context.
++ */
++int
++qla2x00_set_rnid_params_mbx(scsi_qla_host_t *ha, dma_addr_t buf_phys_addr,
++ size_t buf_size, uint16_t *mb_reg)
++{
++ int rval;
++ mbx_cmd_t mc;
++ mbx_cmd_t *mcp = &mc;
++
++ DEBUG11(printk("qla2x00_set_rnid_params_mbx(%ld): entered.\n",
++ ha->host_no);)
++
++ mcp->mb[0] = MBC_SET_RNID_PARAMS;
++ mcp->mb[1] = 0;
++ mcp->mb[2] = MSW(buf_phys_addr);
++ mcp->mb[3] = LSW(buf_phys_addr);
++ mcp->mb[6] = MSW(MSD(buf_phys_addr));
++ mcp->mb[7] = LSW(MSD(buf_phys_addr));
++ mcp->out_mb = MBX_7|MBX_6|MBX_3|MBX_2|MBX_1|MBX_0;
++ mcp->in_mb = MBX_1|MBX_0;
++ mcp->buf_size = buf_size;
++ mcp->flags = MBX_DMA_OUT;
++ mcp->tov = 30;
++ rval = (int)qla2x00_mailbox_command(ha, mcp);
++
++ if (rval != QLA2X00_SUCCESS) {
++ memcpy(mb_reg, mcp->mb, 2 * 2); /* 2 status regs */
++
++ DEBUG2_3_11(printk("qla2x00_set_rnid_params_mbx(%ld): "
++ "failed=%x mb[1]=%x.\n",
++ ha->host_no, mcp->mb[0], mcp->mb[1]);)
++ } else {
++ /*EMPTY*/
++ DEBUG11(printk("qla2x00_set_rnid_params_mbx(%ld): done.\n",
++ ha->host_no);)
++ }
++
++ return (rval);
++}
++
++/*
++ * qla2x00_get_rnid_params_mbx
++ * Get RNID parameters using mailbox command
++ *
++ * Input:
++ * ha = adapter state pointer.
++ * buffer = buffer pointer.
++ * buf_size = size of buffer.
++ * mb_reg = pointer to return mailbox registers.
++ *
++ * Returns:
++ * qla2x00 local function return status code.
++ *
++ * Context:
++ * Kernel context.
++ */
++int
++qla2x00_get_rnid_params_mbx(scsi_qla_host_t *ha, dma_addr_t buf_phys_addr,
++ size_t buf_size, uint16_t *mb_reg)
++{
++ int rval;
++ mbx_cmd_t mc;
++ mbx_cmd_t *mcp = &mc;
++
++ DEBUG11(printk("qla2x00_get_rnid_params_mbx(%ld): entered.\n",
++ ha->host_no);)
++
++ mcp->mb[0] = MBC_GET_RNID_PARAMS;
++ mcp->mb[1] = 0;
++ mcp->mb[2] = MSW(buf_phys_addr);
++ mcp->mb[3] = LSW(buf_phys_addr);
++ mcp->mb[6] = MSW(MSD(buf_phys_addr));
++ mcp->mb[7] = LSW(MSD(buf_phys_addr));
++ mcp->out_mb = MBX_7|MBX_6|MBX_3|MBX_2|MBX_1|MBX_0;
++ mcp->in_mb = MBX_1|MBX_0;
++ mcp->buf_size = buf_size;
++ mcp->flags = MBX_DMA_IN;
++ mcp->tov = 30;
++ rval = (int)qla2x00_mailbox_command(ha, mcp);
++
++ if (rval != QLA2X00_SUCCESS) {
++ memcpy(mb_reg, mcp->mb, 2 * 2); /* 2 status regs */
++
++ DEBUG2_3_11(printk("qla2x00_get_rnid_params_mbx(%ld): "
++ "failed=%x mb[1]=%x.\n",
++ ha->host_no, mcp->mb[0], mcp->mb[1]);)
++ } else {
++ /*EMPTY*/
++ DEBUG11(printk("qla2x00_get_rnid_params_mbx(%ld): done.\n",
++ ha->host_no);)
++ }
++
++ return (rval);
++}
++
++#if defined(QL_DEBUG_LEVEL_3)
++/*
++ * qla2x00_get_fcal_position_map
++ * Get FCAL (LILP) position map using mailbox command
++ *
++ * Input:
++ * ha = adapter state pointer.
++ * pos_map = buffer pointer (can be NULL).
++ *
++ * Returns:
++ * qla2x00 local function return status code.
++ *
++ * Context:
++ * Kernel context.
++ */
++int
++qla2x00_get_fcal_position_map(scsi_qla_host_t *ha, char *pos_map)
++{
++ int rval;
++ mbx_cmd_t mc;
++ mbx_cmd_t *mcp = &mc;
++ char *pmap;
++ dma_addr_t pmap_dma;
++
++ pmap = pci_alloc_consistent(ha->pdev, FCAL_MAP_SIZE, &pmap_dma);
++ if (pmap == NULL) {
++ DEBUG2_3_11(printk("%s(%ld): **** Mem Alloc Failed ****",
++ __func__, ha->host_no));
++ return QL_STATUS_RESOURCE_ERROR;
++ }
++
++ memset(pmap, 0, FCAL_MAP_SIZE);
++
++ mcp->mb[0] = MBC_GET_FCAL_MAP;
++ mcp->mb[2] = MSW(pmap_dma);
++ mcp->mb[3] = LSW(pmap_dma);
++ mcp->mb[6] = MSW(MSD(pmap_dma));
++ mcp->mb[7] = LSW(MSD(pmap_dma));
++ mcp->out_mb = MBX_7|MBX_6|MBX_3|MBX_2|MBX_0;
++ mcp->in_mb = MBX_1|MBX_0;
++ mcp->buf_size = FCAL_MAP_SIZE;
++ mcp->flags = MBX_DMA_IN;
++ mcp->tov = ha->login_timeout * 2;
++ rval = (int)qla2x00_mailbox_command(ha, mcp);
++
++ if (rval == QL_STATUS_SUCCESS) {
++ DEBUG11(printk("%s(%ld): (mb0=%x/mb1=%x) FC/AL Position Map "
++ "size (%x)\n",
++ __func__, ha->host_no,
++ mcp->mb[0], mcp->mb[1], (unsigned)pmap[0]));
++ DEBUG11(qla2x00_dump_buffer(pmap, pmap[0] + 1));
++
++ if (pos_map)
++ memcpy(pos_map, pmap, FCAL_MAP_SIZE);
++ }
++ pci_free_consistent(ha->pdev, FCAL_MAP_SIZE, pmap, pmap_dma);
++
++ if (rval != QL_STATUS_SUCCESS) {
++ DEBUG2_3_11(printk("%s(%ld): failed=%x.\n",
++ __func__, ha->host_no, rval));
++ } else {
++ DEBUG11(printk("%s(%ld): done.\n",
++ __func__, ha->host_no));
++ }
++
++ return rval;
++}
++#endif
+--- /dev/null Thu Apr 11 07:25:15 2002
++++ linux-2.5.73-n9560/drivers/scsi/qla2xxx/qla_os.c Thu Jul 3 15:34:42 2003
+@@ -0,0 +1,5879 @@
++/*
++ * QLOGIC LINUX SOFTWARE
++ *
++ * QLogic ISP2x00 device driver for Linux 2.5.x
++ * Copyright (C) 2003 Qlogic Corporation
++ * (www.qlogic.com)
++ *
++ * This program is free software; you can redistribute it and/or modify it
++ * under the terms of the GNU General Public License as published by the
++ * Free Software Foundation; either version 2, or (at your option) any
++ * later version.
++ *
++ * This program is distributed in the hope that it will be useful, but
++ * WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ * General Public License for more details.
++ *
++ */
++#define QLA_MODVERSION
++#include "qla_os.h"
++
++#include "qla_def.h"
++
++/*
++ * Driver version
++ */
++char qla2x00_version_str[40] = { 0 };
++
++/*
++* Command line options.
++*/
++unsigned long qla2x00_verbose = 1L;
++unsigned long qla2x00_quiet = 0L;
++unsigned long qla2x00_reinit = 1L;
++unsigned long qla2x00_req_dmp = 0L;
++
++/*
++ * Stats for all adpaters.
++ */
++struct _qla2x00stats qla2x00_stats;
++
++/*
++ * Ioctl related information.
++ */
++int num_hosts = 0;
++int apiHBAInstance = 0;
++
++/*
++ * Module parameter information and variables
++ */
++
++char *ql2xdevconf = NULL;
++#if MPIO_SUPPORT
++int ql2xretrycount = 30;
++#else
++int ql2xretrycount = 20;
++#endif
++int qla2xenbinq = 1;
++int max_srbs = MAX_SRBS;
++#if defined(ISP2200) || defined(ISP2300)
++int ql2xlogintimeout = 20;
++int qlport_down_retry = 0;
++#endif
++int ql2xmaxqdepth = 0;
++int displayConfig = 0;
++
++/* Enable for failover */
++#if MPIO_SUPPORT
++int ql2xfailover = 1;
++#else
++int ql2xfailover = 0;
++#endif
++
++int ConfigRequired = 0;
++int recoveryTime = MAX_RECOVERYTIME;
++int failbackTime = MAX_FAILBACKTIME;
++
++/* Persistent binding type */
++int Bind = BIND_BY_PORT_NAME;
++
++int ql2xsuspendcount = SUSPEND_COUNT;
++
++int qla2x00_retryq_dmp = 0;
++
++#if defined(MODULE)
++char *ql2xopts = NULL;
++
++static char dummy_buffer[60] =
++ "Please don't add commas in your insmod command!!\n";
++
++/* insmod qla2100 ql2xopts=verbose" */
++MODULE_PARM(ql2xopts, "s");
++MODULE_PARM_DESC(ql2xopts,
++ "Additional driver options.");
++
++MODULE_PARM(ql2xfailover, "i");
++MODULE_PARM_DESC(ql2xfailover,
++ "Driver failover support: 0 to disable; 1 to enable. "
++ "Default behaviour based on compile-time option "
++ "MPIO_SUPPORT.");
++
++MODULE_PARM(ql2xmaxqdepth, "i");
++MODULE_PARM_DESC(ql2xmaxqdepth,
++ "Maximum queue depth to report for target devices.");
++
++#if defined(ISP2200) || defined(ISP2300)
++MODULE_PARM(ql2xlogintimeout,"i");
++MODULE_PARM_DESC(ql2xlogintimeout,
++ "Login timeout value in seconds.");
++
++MODULE_PARM(qlport_down_retry,"i");
++MODULE_PARM_DESC(qlport_down_retry,
++ "Maximum number of command retries to a port that returns"
++ "a PORT-DOWN status.");
++#endif
++
++MODULE_PARM(ql2xretrycount,"i");
++MODULE_PARM_DESC(ql2xretrycount,
++ "Maximum number of mid-layer retries allowed for a command. "
++ "Default value in non-failover mode is 20, "
++ "in failover mode, 30.");
++
++MODULE_PARM(max_srbs,"i");
++MODULE_PARM_DESC(max_srbs,
++ "Maximum number of simultaneous commands allowed for an HBA.");
++
++MODULE_PARM(displayConfig, "i");
++MODULE_PARM_DESC(displayConfig,
++ "If 1 then display the configuration used in "
++ "/etc/modules.conf.");
++
++MODULE_PARM(ConfigRequired, "i");
++MODULE_PARM_DESC(ConfigRequired,
++ "If 1, then only configured devices passed in through the"
++ "ql2xopts parameter will be presented to the OS");
++
++MODULE_PARM(recoveryTime, "i");
++MODULE_PARM_DESC(recoveryTime,
++ "Recovery time in seconds before a target device is sent I/O "
++ "after a failback is performed.");
++
++MODULE_PARM(failbackTime, "i");
++MODULE_PARM_DESC(failbackTime,
++ "Delay in seconds before a failback is performed.");
++
++MODULE_PARM(Bind, "i");
++MODULE_PARM_DESC(Bind,
++ "Target persistent binding method: "
++ "0 by Portname (default); 1 by PortID; 2 by Nodename. ");
++
++MODULE_PARM(ql2xsuspendcount,"i");
++MODULE_PARM_DESC(ql2xsuspendcount,
++ "Number of 6-second suspend iterations to perform while a "
++ "target returns a <NOT READY> status. Default is 10 "
++ "iterations.");
++#endif
++
++MODULE_AUTHOR("QLogic Corporation");
++MODULE_DESCRIPTION("QLogic " ISP_NAME " FC-SCSI Host Bus Adapter driver");
++MODULE_LICENSE("GPL");
++
++
++/*
++ * Proc structures and functions
++ */
++struct info_str {
++ char *buffer;
++ int length;
++ off_t offset;
++ int pos;
++};
++
++static void copy_mem_info(struct info_str *, char *, int);
++static int copy_info(struct info_str *, char *, ...);
++
++
++/*
++ * List of host adapters
++ */
++struct list_head qla_hostlist;
++rwlock_t qla_hostlist_lock;
++
++
++/*
++ * PCI driver interface definitions
++ */
++#define ISP21XX_FW_INDEX 0
++#define ISP22XX_FW_INDEX 0
++#define ISP23XX_FW_INDEX 0
++#define ISP232X_FW_INDEX 2
++
++static struct qla_fw_info qla_fw_tbl[] = {
++#if defined(ISP2100)
++ /* Start of 21xx firmware list */
++ {
++ .addressing = FW_INFO_ADDR_NORMAL,
++ .fwcode = &fw2100tp_code01[0],
++ .fwlen = &fw2100tp_length01,
++ .fwstart = &fw2100tp_addr01,
++ },
++#endif
++
++#if defined(ISP2200)
++ /* Start of 22xx firmware list */
++ {
++ .addressing = FW_INFO_ADDR_NORMAL,
++ .fwcode = &fw2200ip_code01[0],
++ .fwlen = &fw2200ip_length01,
++ .fwstart = &fw2200ip_addr01,
++ },
++#endif
++
++#if defined(ISP2300)
++ /* Start of 23xx firmware list */
++#if defined(TPX)
++ {
++ .addressing = FW_INFO_ADDR_NORMAL,
++ .fwcode = &fw2300tpx_code01[0],
++ .fwlen = &fw2300tpx_length01,
++ .fwstart = &fw2300tpx_addr01,
++ },
++#else
++ {
++ .addressing = FW_INFO_ADDR_NORMAL,
++ .fwcode = &fw2300ipx_code01[0],
++ .fwlen = &fw2300ipx_length01,
++ .fwstart = &fw2300ipx_addr01,
++ },
++#endif
++
++#if defined(ISP2322)
++ /* End of 23xx firmware list */
++ { FW_INFO_ADDR_NOMORE, },
++
++ /* Start of 232x firmware list */
++#if defined(TPX)
++ {
++ .addressing = FW_INFO_ADDR_NORMAL,
++ .fwcode = &fw2322tpx_code01[0],
++ .fwlen = &fw2322tpx_length01,
++ .fwstart = &fw2322tpx_addr01,
++ },
++ {
++ .addressing = FW_INFO_ADDR_EXTENDED,
++ .fwcode = &rseqtpx_code01[0],
++ .fwlen = &rseqtpx_code_length01,
++ .lfwstart = &rseqtpx_code_addr01,
++ },
++ {
++ .addressing = FW_INFO_ADDR_EXTENDED,
++ .fwcode = &xseqtpx_code01[0],
++ .fwlen = &xseqtpx_code_length01,
++ .lfwstart = &xseqtpx_code_addr01,
++ },
++#else
++ {
++ .addressing = FW_INFO_ADDR_NORMAL,
++ .fwcode = &fw2322ipx_code01[0],
++ .fwlen = &fw2322ipx_length01,
++ .fwstart = &fw2322ipx_addr01,
++ },
++ {
++ .addressing = FW_INFO_ADDR_EXTENDED,
++ .fwcode = &rseqipx_code01[0],
++ .fwlen = &rseqipx_code_length01,
++ .lfwstart = &rseqipx_code_addr01,
++ },
++ {
++ .addressing = FW_INFO_ADDR_EXTENDED,
++ .fwcode = &xseqipx_code01[0],
++ .fwlen = &xseqipx_code_length01,
++ .lfwstart = &xseqipx_code_addr01,
++ },
++#endif
++
++#endif
++
++#endif
++
++ /* End of firmware list */
++ { FW_INFO_ADDR_NOMORE, },
++};
++
++#define ISP21XX_BRD_INDEX 0
++#define ISP22XX_BRD_INDEX 0
++#define ISP23XX_BRD_INDEX 0
++#define ISP2312_BRD_INDEX 1
++#define ISP2322_BRD_INDEX 2
++
++static struct qla_board_info qla_board_tbl[] = {
++#if defined(ISP2100)
++ {
++ .name = "QLA2100 ",
++ .fwinfo = &qla_fw_tbl[ISP21XX_FW_INDEX],
++ }
++#endif
++
++#if defined(ISP2200)
++ {
++ .name = "QLA2200 ",
++ .fwinfo = &qla_fw_tbl[ISP22XX_FW_INDEX],
++ }
++#endif
++
++#if defined(ISP2300)
++ {
++ .name = "QLA2300 ",
++ .fwinfo = &qla_fw_tbl[ISP23XX_FW_INDEX],
++ },
++
++ {
++ .name = "QLA2312 ",
++ .fwinfo = &qla_fw_tbl[ISP23XX_FW_INDEX],
++ },
++
++#if defined(ISP2322)
++ {
++ .name = "QLA2322 ",
++ .fwinfo = &qla_fw_tbl[ISP232X_FW_INDEX],
++ }
++#endif
++#endif
++};
++
++static struct pci_device_id qla_pci_tbl[] __devinitdata = {
++#if defined(ISP2100)
++ {
++ .vendor = QLA2X00_VENDOR_ID,
++ .device = QLA2100_DEVICE_ID,
++ .subvendor = PCI_ANY_ID,
++ .subdevice = PCI_ANY_ID,
++ .driver_data
++ = (unsigned long)&qla_board_tbl[ISP21XX_BRD_INDEX],
++ },
++#endif
++
++#if defined(ISP2200)
++ {
++ .vendor = QLA2X00_VENDOR_ID,
++ .device = QLA2200_DEVICE_ID,
++ .subvendor = PCI_ANY_ID,
++ .subdevice = PCI_ANY_ID,
++ .driver_data
++ = (unsigned long)&qla_board_tbl[ISP22XX_BRD_INDEX],
++ },
++#endif
++
++#if defined(ISP2300)
++ {
++ .vendor = QLA2X00_VENDOR_ID,
++ .device = QLA2300_DEVICE_ID,
++ .subvendor = PCI_ANY_ID,
++ .subdevice = PCI_ANY_ID,
++ .driver_data
++ = (unsigned long)&qla_board_tbl[ISP23XX_BRD_INDEX],
++ },
++
++ {
++ .vendor = QLA2X00_VENDOR_ID,
++ .device = QLA2312_DEVICE_ID,
++ .subvendor = PCI_ANY_ID,
++ .subdevice = PCI_ANY_ID,
++ .driver_data
++ = (unsigned long)&qla_board_tbl[ISP2312_BRD_INDEX],
++ },
++
++#if defined(ISP2322)
++ {
++ .vendor = QLA2X00_VENDOR_ID,
++ .device = QLA2322_DEVICE_ID,
++ .subvendor = PCI_ANY_ID,
++ .subdevice = PCI_ANY_ID,
++ .driver_data
++ = (unsigned long)&qla_board_tbl[ISP2322_BRD_INDEX],
++ },
++#endif
++#endif
++ {0 , 0}
++};
++MODULE_DEVICE_TABLE(pci, qla_pci_tbl);
++
++static int __devinit qla_probe_device(struct pci_dev *,
++ const struct pci_device_id *);
++static void __devexit qla_remove_device(struct pci_dev *);
++static void qla2x00_free_device(scsi_qla_host_t *);
++
++struct pci_driver qla_pci_driver = {
++ .name = DRIVER_NAME,
++ .id_table = qla_pci_tbl,
++
++ .probe = qla_probe_device,
++ .remove = __devexit_p(qla_remove_device),
++};
++
++
++/*
++ * SCSI host template entry points
++ */
++static int qla2x00_detect(Scsi_Host_Template *);
++static int qla2x00_release(struct Scsi_Host *);
++static const char *qla2x00_info(struct Scsi_Host *);
++static int qla2xxx_slave_configure(Scsi_Device * device);
++static int qla2x00_biosparam(struct scsi_device *,
++ struct block_device *, sector_t, int[]);
++extern int qla2x00_ioctl(Scsi_Device *, int , void *);
++static int qla2xxx_eh_abort(Scsi_Cmnd *);
++static int qla2xxx_eh_device_reset(Scsi_Cmnd *);
++static int qla2xxx_eh_bus_reset(Scsi_Cmnd *);
++static int qla2xxx_eh_host_reset(Scsi_Cmnd *);
++static uint8_t qla2x00_loop_reset(scsi_qla_host_t *ha);
++static int qla2x00_device_reset(scsi_qla_host_t *, uint16_t, uint16_t);
++
++static int qla2x00_proc_info(char *, char **, off_t, int, int, int);
++
++static uint8_t qla2x00_register_with_Linux(scsi_qla_host_t *, uint8_t);
++
++#if defined (CONFIG_SCSIFCHOTSWAP) || defined(CONFIG_GAMAP)
++int qla2x00_get_scsi_info_from_wwn(int mode, unsigned long long wwn, int *host, int *channel, int *lun, int *id);
++int qla2x00_get_wwn_from_scsi_info(int host, int id, unsigned long long *wwn);
++#endif /* CONFIG_SCSIFCHOTSWAP || CONFIG_GAMAP */
++
++#if !defined(MODULE)
++static int __init qla2x00_setup(char *);
++#else
++static void qla2x00_setup(char *);
++#endif
++static char *qla2x00_get_line(char *, char *);
++static int qla2x00_get_tokens(char *, char **, int);
++
++
++static Scsi_Host_Template qla2x00_driver_template = {
++ .module = THIS_MODULE,
++ .name = DRIVER_NAME,
++ .proc_name = DRIVER_NAME,
++ .proc_info = qla2x00_proc_info,
++ .detect = qla2x00_detect,
++ .release = qla2x00_release,
++ .info = qla2x00_info,
++ .ioctl = qla2x00_ioctl,
++ .queuecommand = qla2x00_queuecommand,
++
++ .eh_abort_handler = qla2xxx_eh_abort,
++ .eh_device_reset_handler = qla2xxx_eh_device_reset,
++ .eh_bus_reset_handler = qla2xxx_eh_bus_reset,
++ .eh_host_reset_handler = qla2xxx_eh_host_reset,
++ .bios_param = qla2x00_biosparam,
++
++ .slave_configure = qla2xxx_slave_configure,
++
++ .this_id = -1,
++ .can_queue = 255,
++ .cmd_per_lun = 3,
++ .sg_tablesize = SG_ALL,
++ .use_clustering = ENABLE_CLUSTERING,
++ .unchecked_isa_dma = 0,
++ .max_sectors = 8192,
++ .highmem_io = 1,
++};
++
++static void qla2x00_display_fc_names(scsi_qla_host_t *);
++
++/* TODO Convert to inlines
++ *
++ * Timer routines
++ */
++#define WATCH_INTERVAL 1 /* number of seconds */
++
++static void qla2x00_timer(scsi_qla_host_t *);
++
++static __inline__ void qla2x00_start_timer(scsi_qla_host_t *,
++ void *, unsigned long);
++static __inline__ void qla2x00_restart_timer(scsi_qla_host_t *, unsigned long);
++static __inline__ void qla2x00_stop_timer(scsi_qla_host_t *);
++
++static inline void
++qla2x00_start_timer(scsi_qla_host_t *ha, void *func, unsigned long interval)
++{
++ init_timer(&ha->timer);
++ ha->timer.expires = jiffies + interval * HZ;
++ ha->timer.data = (unsigned long)ha;
++ ha->timer.function = (void (*)(unsigned long))func;
++ add_timer(&ha->timer);
++ ha->timer_active = 1;
++}
++
++static inline void
++qla2x00_restart_timer(scsi_qla_host_t *ha, unsigned long interval)
++{
++ mod_timer(&ha->timer, jiffies + interval * HZ);
++}
++
++static __inline__ void
++qla2x00_stop_timer(scsi_qla_host_t *ha)
++{
++ del_timer_sync(&ha->timer);
++ ha->timer_active = 0;
++}
++
++
++static void qla2x00_cmd_timeout(srb_t *sp);
++static __inline__ void qla2x00_add_timer_to_cmd(srb_t *sp, int timeout);
++static __inline__ void qla2x00_delete_timer_from_cmd(srb_t *sp);
++
++/**************************************************************************
++* qla2x00_add_timer_to_cmd
++*
++* Description:
++* Creates a timer for the specified command. The timeout is usually
++* the command time from kernel minus 2 secs.
++*
++* Input:
++* sp - pointer to validate
++*
++* Returns:
++* None.
++**************************************************************************/
++static inline void
++qla2x00_add_timer_to_cmd(srb_t *sp, int timeout)
++{
++ init_timer(&sp->timer);
++ sp->timer.expires = jiffies + timeout * HZ;
++ sp->timer.data = (unsigned long) sp;
++ sp->timer.function = (void (*) (unsigned long))qla2x00_cmd_timeout;
++ add_timer(&sp->timer);
++}
++
++/**************************************************************************
++* qla2x00_delete_timer_from_cmd
++*
++* Description:
++* Delete the timer for the specified command.
++*
++* Input:
++* sp - pointer to validate
++*
++* Returns:
++* None.
++**************************************************************************/
++static inline void
++qla2x00_delete_timer_from_cmd(srb_t *sp)
++{
++ if (sp->timer.function != NULL) {
++ del_timer(&sp->timer);
++ sp->timer.function = NULL;
++ sp->timer.data = (unsigned long) NULL;
++ }
++}
++
++static __inline__ void qla2x00_callback(scsi_qla_host_t *, Scsi_Cmnd *);
++static __inline__ void sp_put(struct scsi_qla_host * ha, srb_t *sp);
++static __inline__ void sp_get(struct scsi_qla_host * ha, srb_t *sp);
++static __inline__ void __sp_put(struct scsi_qla_host * ha, srb_t *sp);
++static __inline__ void
++qla2x00_delete_from_done_queue(scsi_qla_host_t *, srb_t *);
++
++/**************************************************************************
++* sp_put
++*
++* Description:
++* Decrement reference count and call the callback if we're the last
++* owner of the specified sp. Will get io_request_lock before calling
++* the callback.
++*
++* Input:
++* ha - pointer to the scsi_qla_host_t where the callback is to occur.
++* sp - pointer to srb_t structure to use.
++*
++* Returns:
++*
++**************************************************************************/
++static inline void
++sp_put(struct scsi_qla_host * ha, srb_t *sp)
++{
++ unsigned long flags;
++
++ if (atomic_read(&sp->ref_count) == 0) {
++ printk(KERN_INFO
++ "%s(): **** SP->ref_count not zero\n",
++ __func__);
++ DEBUG2(BUG();)
++
++ return;
++ }
++
++ if (!atomic_dec_and_test(&sp->ref_count))
++ {
++ return;
++ }
++
++ spin_lock_irqsave(ha->host->host_lock, flags);
++
++ qla2x00_callback(ha, sp->cmd);
++
++ spin_unlock_irqrestore(ha->host->host_lock, flags);
++}
++
++/**************************************************************************
++* sp_get
++*
++* Description:
++* Increment reference count of the specified sp.
++*
++* Input:
++* sp - pointer to srb_t structure to use.
++*
++* Returns:
++*
++**************************************************************************/
++static inline void
++sp_get(struct scsi_qla_host * ha, srb_t *sp)
++{
++ atomic_inc(&sp->ref_count);
++
++ if (atomic_read(&sp->ref_count) > 2) {
++ printk(KERN_INFO
++ "%s(): **** SP->ref_count greater than two\n",
++ __func__);
++ DEBUG2(BUG();)
++
++ return;
++ }
++}
++
++/**************************************************************************
++* __sp_put
++*
++* Description:
++* Decrement reference count and call the callback if we're the last
++* owner of the specified sp. Will NOT get io_request_lock before calling
++* the callback.
++*
++* Input:
++* ha - pointer to the scsi_qla_host_t where the callback is to occur.
++* sp - pointer to srb_t structure to use.
++*
++* Returns:
++*
++**************************************************************************/
++static inline void
++__sp_put(struct scsi_qla_host * ha, srb_t *sp)
++{
++ if (atomic_read(&sp->ref_count) == 0) {
++ printk(KERN_INFO
++ "%s(): **** SP->ref_count not zero\n",
++ __func__);
++ DEBUG2(BUG();)
++
++ return;
++ }
++
++ if (!atomic_dec_and_test(&sp->ref_count))
++ {
++ return;
++ }
++
++ qla2x00_callback(ha, sp->cmd);
++}
++
++
++/*
++* qla2x00_callback
++* Returns the completed SCSI command to LINUX.
++*
++* Input:
++* ha -- Host adapter structure
++* cmd -- SCSI mid-level command structure.
++* Returns:
++* None
++* Note:From failover point of view we always get the sp
++* from vis_ha pool in queuecommand.So when we put it
++* back to the pool it has to be the vis_ha.
++* So rely on Scsi_Cmnd to get the vis_ha and not on sp.
++*/
++static inline void
++qla2x00_callback(scsi_qla_host_t *ha, Scsi_Cmnd *cmd)
++{
++ srb_t *sp = (srb_t *) CMD_SP(cmd);
++ scsi_qla_host_t *vis_ha;
++ os_lun_t *lq;
++ int got_sense;
++ unsigned long cpu_flags = 0;
++
++ ENTER(__func__);
++
++ CMD_HANDLE(cmd) = (unsigned char *) NULL;
++ vis_ha = (scsi_qla_host_t *) cmd->device->host->hostdata;
++
++ if (sp == NULL) {
++ printk(KERN_INFO
++ "%s(): **** CMD derives a NULL SP\n",
++ __func__);
++ DEBUG2(BUG();)
++ return;
++ }
++
++ /*
++ * If command status is not DID_BUS_BUSY then go ahead and freed sp.
++ */
++ /*
++ * Cancel command timeout
++ */
++ qla2x00_delete_timer_from_cmd(sp);
++
++ /*
++ * Put SP back in the free queue
++ */
++ sp->cmd = NULL;
++ CMD_SP(cmd) = NULL;
++ lq = sp->lun_queue;
++ got_sense = (sp->flags & SRB_GOT_SENSE)? 1: 0;
++ add_to_free_queue(vis_ha, sp);
++
++ if ((CMD_RESULT(cmd)>>16) == DID_OK) {
++ /* device ok */
++ ha->total_bytes += cmd->bufflen;
++ if (!got_sense) {
++ /* If lun was suspended then clear retry count */
++ spin_lock_irqsave(&lq->q_lock, cpu_flags);
++ if (!test_bit(LUN_EXEC_DELAYED, &lq->q_flag))
++ lq->q_state = LUN_STATE_READY;
++ spin_unlock_irqrestore(&lq->q_lock, cpu_flags);
++ }
++ } else if ((CMD_RESULT(cmd)>>16) == DID_ERROR) {
++ /* device error */
++ ha->total_dev_errs++;
++ }
++
++ if (cmd->flags & IS_RESETTING) {
++ CMD_RESULT(cmd) = (int)DID_RESET << 16;
++ }
++
++ /* Call the mid-level driver interrupt handler */
++ (*(cmd)->scsi_done)(cmd);
++
++ LEAVE(__func__);
++}
++
++static inline void
++qla2x00_delete_from_done_queue(scsi_qla_host_t *dest_ha, srb_t *sp)
++{
++ /* remove command from done list */
++ list_del_init(&sp->list);
++ dest_ha->done_q_cnt--;
++ sp->state = SRB_NO_QUEUE_STATE;
++
++ if (sp->flags & SRB_DMA_VALID) {
++ sp->flags &= ~SRB_DMA_VALID;
++
++ /* Release memory used for this I/O */
++ if (sp->cmd->use_sg) {
++ pci_unmap_sg(dest_ha->pdev,
++ sp->cmd->request_buffer,
++ sp->cmd->use_sg,
++ scsi_to_pci_dma_dir(
++ sp->cmd->sc_data_direction));
++ } else if (sp->cmd->request_bufflen) {
++ pci_unmap_page(dest_ha->pdev,
++ sp->saved_dma_handle,
++ sp->cmd->request_bufflen,
++ scsi_to_pci_dma_dir(
++ sp->cmd->sc_data_direction));
++ }
++ }
++}
++
++static int qla2x00_do_dpc(void *data);
++static uint8_t qla2x00_check_for_devices_online(scsi_qla_host_t *);
++
++static void qla2x00_rst_aen(scsi_qla_host_t *);
++static void qla2x00_done_work(void *);
++
++static void qla2x00_process_failover(scsi_qla_host_t *);
++
++static uint8_t qla2x00_mem_alloc(scsi_qla_host_t *);
++static void qla2x00_mem_free(scsi_qla_host_t *ha);
++uint8_t qla2x00_allocate_sp_pool( scsi_qla_host_t *ha);
++void qla2x00_free_sp_pool(scsi_qla_host_t *ha);
++
++
++static int apidev_init(struct Scsi_Host *);
++static int apidev_cleanup(void);
++static int apidev_open(struct inode *, struct file *);
++static int apidev_close(struct inode *, struct file *);
++static int apidev_ioctl(struct inode *,
++ struct file *, unsigned int, unsigned long arg);
++
++/*************************************************************************
++* qla2x00_set_info
++*
++* Description:
++* Set parameters for the driver from the /proc filesystem.
++*
++* Returns:
++*************************************************************************/
++int
++qla2x00_set_info(char *buffer, int length, struct Scsi_Host *shost)
++{
++ return (-ENOSYS); /* Currently this is a no-op */
++}
++
++/**************************************************************************
++* qla2x00_detect
++*
++* Description:
++* This routine will probe for Qlogic FC SCSI host adapters.
++* It returns the number of host adapters of a particular
++* type that were found. It also initialize all data necessary for
++* the driver. It is passed-in the host number, so that it
++* knows where its first entry is in the scsi_hosts[] array.
++*
++* Input:
++* template - pointer to SCSI template
++*
++* Returns:
++* num - number of host adapters found.
++**************************************************************************/
++int
++qla2x00_detect(Scsi_Host_Template *template)
++{
++#if defined(MODULE)
++ DEBUG2(printk("DEBUG: qla2x00_set_info() starts at address = %p\n",
++ qla2x00_set_info));
++ printk(KERN_INFO
++ "qla2x00_set_info() starts at address = %p\n",
++ qla2x00_set_info);
++
++ /*
++ * If we are called as a module, the qla2100 pointer may not be null
++ * and it would point to our bootup string, just like on the lilo
++ * command line. IF not NULL, then process this config string with
++ * qla2x00_setup
++ *
++ * Boot time Options To add options at boot time add a line to your
++ * lilo.conf file like:
++ * append="qla2100=verbose,tag_info:{{32,32,32,32},{32,32,32,32}}"
++ * which will result in the first four devices on the first two
++ * controllers being set to a tagged queue depth of 32.
++ */
++ if (ql2xopts)
++ qla2x00_setup(ql2xopts);
++ if (dummy_buffer[0] != 'P')
++ printk(KERN_WARNING
++ "qla2x00: Please read the file "
++ "/usr/src/linux/drivers/scsi/README.qla2x00\n"
++ "qla2x00: to see the proper way to specify options to "
++ "the qla2x00 module\n"
++ "qla2x00: Specifically, don't use any commas when passing "
++ "arguments to\n"
++ "qla2x00: insmod or else it might trash certain memory "
++ "areas.\n");
++#endif
++
++ rwlock_init(&qla_hostlist_lock);
++ INIT_LIST_HEAD(&qla_hostlist);
++
++ pci_module_init(&qla_pci_driver);
++
++ return (num_hosts);
++}
++
++/**************************************************************************
++* qla2x00_register_with_Linux
++*
++* Description:
++* Free the passed in Scsi_Host memory structures prior to unloading the
++* module.
++*
++* Input:
++* ha - pointer to host adapter structure
++* maxchannels - MAX number of channels.
++*
++* Returns:
++* 0 - Sucessfully reserved resources.
++* 1 - Failed to reserved a resource.
++**************************************************************************/
++static uint8_t
++qla2x00_register_with_Linux(scsi_qla_host_t *ha, uint8_t maxchannels)
++{
++ struct Scsi_Host *host = ha->host;
++
++ host->can_queue = max_srbs; /* default value:-MAX_SRBS(4096) */
++ host->cmd_per_lun = 3;
++ host->max_cmd_len = MAX_CMDSZ;
++
++#if defined (CONFIG_SCSIFCHOTSWAP) || defined(CONFIG_GAMAP)
++ host->hostt->get_scsi_info_from_wwn = qla2x00_get_scsi_info_from_wwn;
++ host->hostt->get_wwn_from_scsi_info = qla2x00_get_wwn_from_scsi_info;
++#endif /* CONFIG_SCSIFCHOTSWAP || CONFIG_GAMAP */
++
++ host->n_io_port = 0xFF;
++
++#if MEMORY_MAPPED_IO
++ host->base = (unsigned long)ha->mmpbase;
++#else
++ host->base = 0;
++#endif
++
++ host->max_channel = maxchannels;
++ host->max_lun = ha->max_luns;
++ host->unique_id = ha->instance;
++ host->max_id = ha->max_targets;
++
++ /* set our host ID (need to do something about our two IDs) */
++ host->this_id = 255;
++
++#if defined(CONFIG_MD_MULTIHOST_FC)
++ {
++ unsigned long i;
++ unsigned long j;
++
++ union {
++ __u64 identifier;
++ char wwn[WWN_SIZE];
++ } foo;
++
++ for (i = 0, j = WWN_SIZE-1; i < WWN_SIZE; i++, j--) {
++ foo.wwn[i] = ha->init_cb->port_name[j];
++ }
++
++ host->fc_wwn = foo.identifier;
++ }
++#endif /* CONFIG_MD_MULTIHOST_FC */
++
++ /* Register the I/O space with Linux */
++ if (request_region(host->io_port, 0xff, DRIVER_NAME) == 0) {
++ printk(KERN_WARNING
++ "scsi(%ld): Failed to reserved i/o base region "
++ "0x%04lx-0x%04lx already in use\n",
++ ha->host_no,
++ host->io_port, host->io_port + 0xff);
++ return 1;
++ }
++
++ /* Register the IRQ with Linux (sharable) */
++ if (request_irq(host->irq, qla2x00_intr_handler,
++ SA_INTERRUPT|SA_SHIRQ, DRIVER_NAME, ha)) {
++ printk(KERN_WARNING
++ "scsi(%ld): Failed to reserve interrupt %d already in "
++ "use\n",
++ ha->host_no, host->irq);
++ release_region(host->io_port, 0xff);
++ return 1;
++ }
++
++ /* Initialized the timer */
++ qla2x00_start_timer(ha, qla2x00_timer, WATCH_INTERVAL);
++
++ return 0;
++}
++
++
++/**************************************************************************
++* qla2x00_release
++*
++* Description:
++* Free the passed in Scsi_Host memory structures prior to unloading the
++* module.
++*
++* Input:
++* ha - pointer to host adapter structure
++*
++* Returns:
++* 0 - Always returns good status
++**************************************************************************/
++int
++qla2x00_release(struct Scsi_Host *host)
++{
++ scsi_qla_host_t *ha;
++
++ if (host != NULL) {
++ ha = (scsi_qla_host_t *)host->hostdata;
++ list_del(&ha->list);
++ qla2x00_free_device(ha);
++ }
++
++ if (list_empty(&qla_hostlist))
++ pci_unregister_driver(&qla_pci_driver);
++
++ return 0;
++}
++
++/**************************************************************************
++* qla2x00_info
++*
++* Description:
++*
++* Input:
++* host - pointer to Scsi host adapter structure
++*
++* Returns:
++* Return a text string describing the driver.
++**************************************************************************/
++const char *
++qla2x00_info(struct Scsi_Host *host)
++{
++ static char qla2x00_buffer[255];
++ char *bp;
++ scsi_qla_host_t *ha;
++
++ /*
++ * We must create the api node here instead of qla2x00_detect since we
++ * want the api node to be subdirectory of /proc/scsi/qla2x00 which
++ * will not have been created when qla2x00_detect exits, but which will
++ * have been created by this point.
++ */
++ apidev_init(host);
++
++ bp = &qla2x00_buffer[0];
++ ha = (scsi_qla_host_t *)host->hostdata;
++ memset(bp, 0, sizeof(qla2x00_buffer));
++
++ sprintf(bp,
++ "QLogic %sPCI to Fibre Channel Host Adapter: bus %d device %d "
++ "irq %d\n Firmware version: %2d.%02d.%02d, "
++ "Driver version %s\n",
++ ha->brd_info->name,
++ ha->pdev->bus->number,
++ PCI_SLOT(ha->pdev->devfn),
++ host->irq,
++ ha->fw_major_version,
++ ha->fw_minor_version,
++ ha->fw_subminor_version,
++ qla2x00_version_str);
++
++ return bp;
++}
++
++/**************************************************************************
++* qla2x00_queuecommand
++*
++* Description:
++* Queue a command to the controller.
++*
++* Input:
++* cmd - pointer to Scsi cmd structure
++* fn - pointer to Scsi done function
++*
++* Returns:
++* 0 - Always
++*
++* Note:
++* The mid-level driver tries to ensures that queuecommand never gets invoked
++* concurrently with itself or the interrupt handler (although the
++* interrupt handler may call this routine as part of request-completion
++* handling).
++**************************************************************************/
++int
++qla2x00_queuecommand(Scsi_Cmnd *cmd, void (*fn)(Scsi_Cmnd *))
++{
++ fc_port_t *fcport;
++ os_lun_t *lq;
++ os_tgt_t *tq;
++ scsi_qla_host_t *ha, *ha2;
++ srb_t *sp;
++ struct Scsi_Host *host;
++ uint32_t b, t, l;
++#if BITS_PER_LONG <= 32
++ uint32_t handle;
++#else
++ u_long handle;
++#endif
++
++ ENTER(__func__);
++
++ host = cmd->device->host;
++ ha = (scsi_qla_host_t *) host->hostdata;
++
++ cmd->scsi_done = fn;
++
++ spin_unlock(ha->host->host_lock);
++
++ /*
++ * Allocate a command packet from the "sp" pool. If we cant get back
++ * one then let scsi layer come back later.
++ */
++ if ((sp = qla2x00_get_new_sp(ha)) == NULL) {
++ printk(KERN_WARNING
++ "scsi(%ld): Couldn't allocate memory for sp - retried.\n",
++ ha->host_no);
++
++ spin_lock_irq(ha->host->host_lock);
++
++ LEAVE(__func__);
++ return (1);
++ }
++
++ sp->cmd = cmd;
++ CMD_SP(cmd) = (void *)sp;
++
++ sp->flags = 0;
++ if (CMD_RESID_LEN(cmd) & SRB_IOCTL) {
++ /* Need to set sp->flags */
++ sp->flags |= SRB_IOCTL;
++ CMD_RESID_LEN(cmd) = 0; /* Clear it since no more use. */
++ }
++
++ sp->fo_retry_cnt = 0;
++#if defined(IOCB_THROLLE_USAGE)
++ sp->iocb_cnt = 0;
++#endif
++
++ if (cmd->allowed < ql2xretrycount) {
++ cmd->allowed = ql2xretrycount;
++ }
++
++ /* Generate LU queue on bus, target, LUN */
++ b = SCSI_BUS_32(cmd);
++ t = SCSI_TCN_32(cmd);
++ l = SCSI_LUN_32(cmd);
++
++ /*
++ * Start Command Timer. Typically it will be 2 seconds less than what
++ * is requested by the Host such that we can return the IO before
++ * aborts are called.
++ */
++ if ((CMD_TIMEOUT(cmd)/HZ) > QLA_CMD_TIMER_DELTA)
++ qla2x00_add_timer_to_cmd(sp,
++ (CMD_TIMEOUT(cmd)/HZ) - QLA_CMD_TIMER_DELTA);
++ else
++ qla2x00_add_timer_to_cmd(sp, (CMD_TIMEOUT(cmd)/HZ));
++
++ if (l >= ha->max_luns) {
++ CMD_RESULT(cmd) = DID_NO_CONNECT << 16;
++
++ spin_lock_irq(ha->host->host_lock);
++
++ __sp_put(ha, sp);
++ LEAVE(__func__);
++
++ return (0);
++ }
++
++ if ((tq = (os_tgt_t *) TGT_Q(ha, t)) != NULL &&
++ (lq = (os_lun_t *) LUN_Q(ha, t, l)) != NULL ) {
++
++ fcport = lq->fclun->fcport;
++ ha2 = fcport->ha;
++ } else {
++ lq = NULL;
++ fcport = NULL;
++ ha2 = ha;
++ }
++
++ /* Set an invalid handle until we issue the command to ISP */
++ /* then we will set the real handle value. */
++ handle = INVALID_HANDLE;
++ CMD_HANDLE(cmd) = (unsigned char *)handle;
++
++ /* Bookkeeping information */
++ sp->r_start = jiffies; /* time the request was recieved */
++ sp->u_start = 0;
++
++ /* Setup device queue pointers. */
++ sp->tgt_queue = tq;
++ sp->lun_queue = lq;
++
++ /*
++ * NOTE : q is NULL
++ *
++ * 1. When device is added from persistent binding but has not been
++ * discovered yet.The state of loopid == PORT_AVAIL.
++ * 2. When device is never found on the bus.(loopid == UNUSED)
++ *
++ * IF Device Queue is not created, or device is not in a valid state
++ * and link down error reporting is enabled, reject IO.
++ */
++ if (fcport == NULL) {
++ DEBUG3(printk("scsi(%ld:%2d:%2d): port unavailable\n",
++ ha->host_no,t,l));
++
++ CMD_RESULT(cmd) = DID_NO_CONNECT << 16;
++
++ spin_lock_irq(ha->host->host_lock);
++
++ __sp_put(ha, sp);
++
++ return (0);
++ }
++
++ DEBUG5(printk("scsi(%ld:%2d:%2d): (queuecmd) queue sp = %p, "
++ "flags=0x%x fo retry=%d, pid=%ld, cmd flags= 0x%x\n",
++ ha->host_no,
++ t, l,
++ sp, sp->flags, sp->fo_retry_cnt,
++ cmd->serial_number,cmd->flags));
++ DEBUG5(qla2x00_print_scsi_cmd(cmd));
++
++ sp->flags &= ~SRB_ISP_COMPLETED;
++
++ sp->fclun = lq->fclun;
++ sp->ha = ha2;
++
++ sp->cmd_length = CMD_CDBLEN(cmd);
++
++ if (cmd->sc_data_direction == SCSI_DATA_UNKNOWN &&
++ cmd->request_bufflen != 0) {
++
++ DEBUG2(printk(KERN_WARNING
++ "scsi(%ld): Incorrect data direction - transfer "
++ "length=%d, direction=%d, pid=%ld, opcode=%x\n",
++ ha->host_no,
++ cmd->request_bufflen,
++ cmd->sc_data_direction,
++ cmd->serial_number,
++ cmd->cmnd[0]));
++ }
++
++ /* Final pre-check */
++ if (atomic_read(&fcport->state) == FC_DEVICE_DEAD) {
++ /*
++ * Add the command to the done-queue for later failover
++ * processing
++ */
++ CMD_RESULT(cmd) = DID_NO_CONNECT << 16;
++ add_to_done_queue(ha, sp);
++ schedule_work(&ha->run_qla_task);
++
++ spin_lock_irq(ha->host->host_lock);
++ return (0);
++ }
++
++ add_to_pending_queue(ha, sp);
++
++ /* First start cmds for this lun if possible */
++ qla2x00_next(ha);
++
++ spin_lock_irq(ha->host->host_lock);
++
++ LEAVE(__func__);
++ return (0);
++}
++
++/*
++ * qla2x00_eh_wait_on_command
++ * Waits for the command to be returned by the Firmware for some
++ * max time.
++ *
++ * Input:
++ * ha = actual ha whose done queue will contain the command
++ * returned by firmware.
++ * cmd = Scsi Command to wait on.
++ * flag = Abort/Reset(Bus or Device Reset)
++ *
++ * Return:
++ * Not Found : 0
++ * Found : 1
++ */
++static int
++qla2x00_eh_wait_on_command(scsi_qla_host_t *ha, Scsi_Cmnd *cmd)
++{
++#define ABORT_WAIT_TIME 10 /* seconds */
++#define EH_ACTIVE 1 /* Error Handler Active */
++
++ int found = 0;
++ int done = 0;
++ srb_t *rp;
++ struct list_head *list, *temp;
++ u_long cpu_flags = 0;
++ u_long max_wait_time = ABORT_WAIT_TIME;
++
++ ENTER(__func__);
++
++ do {
++ /* Check on done queue */
++ if (!found) {
++ spin_lock_irqsave(&ha->list_lock, cpu_flags);
++ list_for_each_safe(list, temp, &ha->done_queue) {
++ rp = list_entry(list, srb_t, list);
++
++ /*
++ * Found command. Just exit and wait for the
++ * cmd sent to OS.
++ */
++ if (cmd == rp->cmd) {
++ found++;
++ DEBUG3(printk("%s: found in done "
++ "queue.\n", __func__);)
++ break;
++ }
++ }
++ spin_unlock_irqrestore(&ha->list_lock, cpu_flags);
++ }
++
++ /* Checking to see if its returned to OS */
++ rp = (srb_t *) CMD_SP(cmd);
++ if (rp == NULL ) {
++ done++;
++ break;
++ }
++
++ spin_unlock_irq(ha->host->host_lock);
++
++ set_current_state(TASK_INTERRUPTIBLE);
++ schedule_timeout(2*HZ);
++
++ spin_lock_irq(ha->host->host_lock);
++
++ } while ((max_wait_time--));
++
++ DEBUG2(if (done))
++ DEBUG2(printk("%s: found cmd=%p.\n", __func__, cmd);)
++
++ LEAVE(__func__);
++
++ return(done);
++}
++
++/**************************************************************************
++* qla2xxx_eh_abort
++*
++* Description:
++* The abort function will abort the specified command.
++*
++* Input:
++* cmd = Linux SCSI command packet to be aborted.
++*
++* Returns:
++* Either SUCCESS or FAILED.
++*
++* Note:
++**************************************************************************/
++int
++qla2xxx_eh_abort(Scsi_Cmnd *cmd)
++{
++ int i;
++ int return_status = FAILED;
++ os_lun_t *q;
++ scsi_qla_host_t *ha;
++ scsi_qla_host_t *vis_ha;
++ srb_t *sp;
++ srb_t *rp;
++ struct list_head *list, *temp;
++ struct Scsi_Host *host;
++ uint8_t found = 0;
++ uint32_t b, t, l;
++ unsigned long flags;
++
++
++ ENTER("qla2xxx_eh_abort");
++
++ /* Get the SCSI request ptr */
++ sp = (srb_t *) CMD_SP(cmd);
++
++ /*
++ * If sp is NULL, command is already returned.
++ * sp is NULLed just before we call back scsi_done
++ *
++ */
++ if ((sp == NULL)) {
++ /* no action - we don't have command */
++ DEBUG(printk("qla2xxx_eh_abort: cmd already done sp=%p\n",sp);)
++ return(SUCCESS);
++ }
++ if (sp) {
++ DEBUG(printk("qla2xxx_eh_abort: refcount %i \n",
++ atomic_read(&sp->ref_count));)
++ }
++
++ vis_ha = (scsi_qla_host_t *) cmd->device->host->hostdata;
++ vis_ha->eh_start=0;
++ if (vis_ha->flags.failover_enabled)
++ /* Get Actual HA pointer */
++ ha = (scsi_qla_host_t *)sp->ha;
++ else
++ ha = (scsi_qla_host_t *)cmd->device->host->hostdata;
++
++ host = ha->host;
++
++ /* Generate LU queue on bus, target, LUN */
++ b = SCSI_BUS_32(cmd);
++ t = SCSI_TCN_32(cmd);
++ l = SCSI_LUN_32(cmd);
++ q = GET_LU_Q(vis_ha, t, l);
++
++ /*
++ * if no LUN queue then something is very wrong!!!
++ */
++ if (q == NULL) {
++ printk(KERN_WARNING
++ "qla2x00: (%x:%x:%x) No LUN queue.\n", b, t, l);
++
++ /* no action - we don't have command */
++ return(FAILED);
++ }
++
++ DEBUG2(printk("scsi(%ld): ABORTing cmd=%p sp=%p jiffies = 0x%lx, "
++ "timeout=%x, dpc_flags=%lx, vis_ha->dpc_flags=%lx\n",
++ ha->host_no,
++ cmd,
++ sp,
++ jiffies,
++ CMD_TIMEOUT(cmd)/HZ,
++ ha->dpc_flags,
++ vis_ha->dpc_flags);)
++ DEBUG2(qla2x00_print_scsi_cmd(cmd));
++ DEBUG2(qla2x00_print_q_info(q);)
++
++ /* Search done queue */
++ spin_lock_irqsave(&ha->list_lock,flags);
++ list_for_each_safe(list, temp, &ha->done_queue) {
++ rp = list_entry(list, srb_t, list);
++
++ if (cmd != rp->cmd)
++ continue;
++
++ /*
++ * Found command. No need to remove command from done list.
++ * Just proceed to call done.
++ */
++ return_status = SUCCESS;
++ found++;
++ qla2x00_delete_from_done_queue(ha, sp);
++
++ break;
++ } /* list_for_each_safe() */
++ spin_unlock_irqrestore(&ha->list_lock, flags);
++
++ /*
++ * Return immediately if the aborted command was already in the done
++ * queue
++ */
++ if (found) {
++ printk(KERN_INFO "qla2xxx_eh_abort: Returning completed "
++ "command=%p sp=%p\n", cmd, sp);
++ __sp_put(ha, sp);
++ return (return_status);
++ }
++
++
++ /*
++ * See if this command is in the retry queue
++ */
++ if (!found) {
++ DEBUG3(printk("qla2xxx_eh_abort: searching sp %p "
++ "in retry queue.\n", sp);)
++
++ spin_lock_irqsave(&ha->list_lock, flags);
++ list_for_each_safe(list, temp, &ha->retry_queue) {
++ rp = list_entry(list, srb_t, list);
++
++ if (cmd != rp->cmd)
++ continue;
++
++
++ DEBUG2(printk("qla2xxx_eh_abort: found "
++ "in retry queue. SP=%p\n", sp);)
++
++ __del_from_retry_queue(ha, rp);
++ CMD_RESULT(rp->cmd) = DID_ABORT << 16;
++ __add_to_done_queue(ha, rp);
++
++ return_status = SUCCESS;
++ found++;
++
++ break;
++
++ } /* list_for_each_safe() */
++ spin_unlock_irqrestore(&ha->list_lock, flags);
++ }
++
++ /*
++ * Search failover queue
++ */
++ if (ha->flags.failover_enabled) {
++ if (!found) {
++ DEBUG3(printk("qla2xxx_eh_abort: searching sp %p "
++ "in failover queue.\n", sp);)
++
++ spin_lock_irqsave(&ha->list_lock, flags);
++ list_for_each_safe(list, temp, &ha->failover_queue) {
++ rp = list_entry(list, srb_t, list);
++
++ if (cmd != rp->cmd)
++ continue;
++
++ DEBUG2(printk(KERN_WARNING
++ "qla2xxx_eh_abort: found "
++ "in failover queue. SP=%p\n",
++ sp);)
++
++ /* Remove srb from failover queue. */
++ __del_from_failover_queue(ha, rp);
++ CMD_RESULT(rp->cmd) = DID_ABORT << 16;
++ __add_to_done_queue(ha, rp);
++
++ return_status = SUCCESS;
++ found++;
++
++ break;
++
++ } /* list_for_each_safe() */
++ spin_unlock_irqrestore(&ha->list_lock, flags);
++ } /*End of if !found */
++ }
++
++ /*
++ * Our SP pointer points at the command we want to remove from the
++ * pending queue providing we haven't already sent it to the adapter.
++ */
++ if (!found) {
++ DEBUG3(printk("qla2xxx_eh_abort: searching sp %p "
++ "in pending queue.\n", sp);)
++
++ spin_lock_irqsave(&vis_ha->list_lock, flags);
++ list_for_each_safe(list, temp, &vis_ha->pending_queue) {
++ rp = list_entry(list, srb_t, list);
++ if (rp->cmd != cmd)
++ continue;
++
++ /* Remove srb from LUN queue. */
++ rp->flags |= SRB_ABORTED;
++
++ DEBUG2(printk("qla2xxx_eh_abort: Cmd in pending queue."
++ " serial_number %ld.\n",
++ sp->cmd->serial_number);)
++
++ __del_from_pending_queue(vis_ha, rp);
++ CMD_RESULT(cmd) = DID_ABORT << 16;
++
++ __add_to_done_queue(vis_ha, rp);
++
++ return_status = SUCCESS;
++
++ found++;
++ break;
++ } /* list_for_each_safe() */
++ spin_unlock_irqrestore(&vis_ha->list_lock, flags);
++ } /*End of if !found */
++
++ if (!found) { /* find the command in our active list */
++ DEBUG3(printk("qla2xxx_eh_abort: searching sp %p "
++ "in outstanding queue.\n", sp);)
++
++ spin_lock_irqsave(&ha->hardware_lock, flags);
++ for (i = 1; i < MAX_OUTSTANDING_COMMANDS; i++) {
++ sp = ha->outstanding_cmds[i];
++
++ if (sp == NULL)
++ continue;
++
++ if (sp->cmd != cmd)
++ continue;
++
++
++ DEBUG2(printk("qla2xxx_eh_abort(%ld): aborting sp %p "
++ "from RISC. pid=%d sp->state=%x\n",
++ ha->host_no,
++ sp,
++ (int)sp->cmd->serial_number,
++ sp->state);)
++ DEBUG(qla2x00_print_scsi_cmd(cmd);)
++ DEBUG(qla2x00_print_q_info(q);)
++
++ /* Get a reference to the sp and drop the lock.*/
++ sp_get(ha,sp);
++
++ spin_unlock_irqrestore(&ha->hardware_lock, flags);
++ spin_unlock(ha->host->host_lock);
++
++ if (qla2x00_abort_command(ha, sp)) {
++ DEBUG2(printk("qla2xxx_eh_abort: abort_command "
++ "mbx failed.\n");)
++ return_status = FAILED;
++ } else {
++ DEBUG3(printk("qla2xxx_eh_abort: abort_command "
++ " mbx success.\n");)
++ return_status = SUCCESS;
++ }
++
++ sp_put(ha,sp);
++
++ spin_lock_irq(ha->host->host_lock);
++ spin_lock_irqsave(&ha->hardware_lock, flags);
++
++ /*
++ * Regardless of mailbox command status, go check on
++ * done queue just in case the sp is already done.
++ */
++ break;
++
++ }/*End of for loop */
++ spin_unlock_irqrestore(&ha->hardware_lock, flags);
++
++ } /*End of if !found */
++
++ /*Waiting for our command in done_queue to be returned to OS.*/
++ if (qla2x00_eh_wait_on_command(ha, cmd) != 0) {
++ DEBUG2(printk("qla2xxx_eh_abort: cmd returned back to OS.\n");)
++ return_status = SUCCESS;
++ }
++
++ if (return_status == FAILED) {
++ printk(KERN_INFO "qla2xxx_eh_abort Exiting: status=Failed\n");
++ return FAILED;
++ }
++
++ DEBUG(printk("qla2xxx_eh_abort: Exiting. return_status=0x%x.\n",
++ return_status));
++
++ LEAVE("qla2xxx_eh_abort");
++
++ return(return_status);
++}
++
++/**************************************************************************
++* qla2x00_eh_wait_for_pending_target_commands
++*
++* Description:
++* Waits for all the commands to come back from the specified target.
++*
++* Input:
++* ha - pointer to scsi_qla_host structure.
++* t - target
++* Returns:
++* Either SUCCESS or FAILED.
++*
++* Note:
++**************************************************************************/
++int
++qla2x00_eh_wait_for_pending_target_commands(scsi_qla_host_t *ha, int t)
++{
++ int cnt;
++ int status;
++ unsigned long flags;
++ srb_t *sp;
++ Scsi_Cmnd *cmd;
++
++ status = 0;
++
++ /*
++ * Waiting for all commands for the designated target in the active
++ * array
++ */
++ for (cnt = 1; cnt < MAX_OUTSTANDING_COMMANDS; cnt++) {
++ spin_lock_irqsave(&ha->hardware_lock, flags);
++ sp = ha->outstanding_cmds[cnt];
++ if (sp) {
++ cmd = sp->cmd;
++ spin_unlock_irqrestore(&ha->hardware_lock, flags);
++ if (SCSI_TCN_32(cmd) == t) {
++ qla2x00_eh_wait_on_command(ha, cmd);
++ }
++ }
++ else {
++ spin_unlock_irqrestore(&ha->hardware_lock, flags);
++ }
++ }
++ return (status);
++}
++
++
++/**************************************************************************
++* qla2xxx_eh_device_reset
++*
++* Description:
++* The device reset function will reset the target and abort any
++* executing commands.
++*
++* NOTE: The use of SP is undefined within this context. Do *NOT*
++* attempt to use this value, even if you determine it is
++* non-null.
++*
++* Input:
++* cmd = Linux SCSI command packet of the command that cause the
++* bus device reset.
++*
++* Returns:
++* SUCCESS/FAILURE (defined as macro in scsi.h).
++*
++**************************************************************************/
++int
++qla2xxx_eh_device_reset(Scsi_Cmnd *cmd)
++{
++ int return_status = SUCCESS;
++ uint32_t b, t, l;
++ scsi_qla_host_t *ha;
++
++#if defined(LOGOUT_AFTER_DEVICE_RESET)
++ os_lun_t *lq;
++ fc_port_t *fcport;
++#endif
++
++ ENTER(__func__);
++
++ if (cmd == NULL) {
++ printk(KERN_INFO
++ "%s(): **** SCSI mid-layer passing in NULL cmd\n",
++ __func__);
++ DEBUG2(BUG();)
++
++ return (FAILED);
++ }
++
++ /* Verify the device exists. */
++ ha = (scsi_qla_host_t *)cmd->device->host->hostdata;
++ ha->eh_start = 0;
++ b = SCSI_BUS_32(cmd);
++ t = SCSI_TCN_32(cmd);
++ l = SCSI_LUN_32(cmd);
++ if (TGT_Q(ha, t) == NULL) {
++ printk(KERN_INFO
++ "%s(): **** CMD derives a NULL TGT_Q\n",
++ __func__);
++ DEBUG2(BUG();)
++
++ return (FAILED);
++ }
++
++ ha = (scsi_qla_host_t *)cmd->device->host->hostdata;
++
++#if STOP_ON_RESET
++ printk(debug_buff,"Resetting Device= 0x%x\n", (int)cmd);
++/* WE SHOULD NOT call this function, since it dereferences SP */
++ //qla2x00_print_scsi_cmd(cmd);
++ qla2x00_panic(__func__, ha->host);
++#endif
++
++ if (qla2x00_verbose)
++ printk(KERN_INFO
++ "scsi(%ld:%d:%d:%d): DEVICE RESET ISSUED.\n",
++ ha->host_no, (int)b, (int)t, (int)l);
++
++ DEBUG2(printk("scsi(%ld): DEVICE_RESET cmd=%p jiffies = 0x%lx, "
++ "timeout=%x, dpc_flags=%lx, status=%x allowed=%d "
++ "cmd.state=%x\n",
++ ha->host_no,
++ cmd,
++ jiffies,
++ CMD_TIMEOUT(cmd)/HZ,
++ ha->dpc_flags,
++ cmd->result,
++ cmd->allowed,
++ cmd->state);)
++/* WE SHOULD NOT call this function, since it dereferences SP */
++ //qla2x00_print_scsi_cmd(cmd);
++
++ if (!((test_bit(ABORT_ISP_ACTIVE, &ha->dpc_flags)) ||
++ (test_bit(LOOP_RESET_NEEDED, &ha->dpc_flags)) ||
++ (test_bit(ISP_ABORT_NEEDED, &ha->dpc_flags)) ||
++ (!atomic_read(&ha->loop_down_timer) &&
++ ha->loop_state == LOOP_DOWN)||
++ test_bit(CFG_ACTIVE, &ha->cfg_flags) ||
++ ha->loop_state != LOOP_READY)) {
++
++ clear_bit(DEVICE_RESET_NEEDED, &ha->dpc_flags);
++
++ spin_unlock_irq(ha->host->host_lock);
++
++ if (qla2x00_device_reset(ha, t, l) != 0) {
++ return_status = FAILED;
++ }
++
++#if defined(LOGOUT_AFTER_DEVICE_RESET)
++ if (return_status == SUCCESS) {
++ lq = (os_lun_t *)LUN_Q(ha, t, l);
++ fcport = lq->fclun->fcport;
++
++ if (fcport->flags & FC_FABRIC_DEVICE) {
++ qla2x00_fabric_logout(ha,
++ ha->fc_db[t].loop_id & 0xff);
++ ha->fc_db[t].flag |= DEV_RELOGIN;
++ qla2x00_mark_device_lost(ha, fcport);
++ }
++ }
++#endif
++
++ spin_lock_irq(ha->host->host_lock);
++ } else {
++ /*
++ * Wait a while for the loop to come back. Return SUCCESS
++ * for the kernel to try again.
++ */
++ spin_unlock_irq(ha->host->host_lock);
++
++ set_current_state(TASK_INTERRUPTIBLE);
++ schedule_timeout(5 * HZ);
++
++ spin_lock_irq(ha->host->host_lock);
++
++ return_status = SUCCESS;
++ }
++
++ if (return_status == FAILED) {
++ DEBUG2(printk("%s() Exiting: Reset Failed\n", __func__);)
++ return (FAILED);
++ }
++
++ /* Waiting for all commands to complete for the device */
++ if (qla2x00_eh_wait_for_pending_target_commands(ha, t))
++ return_status = FAILED;
++
++ if (return_status == FAILED) {
++ printk(KERN_INFO "%s() Exiting: status = Failed\n", __func__);
++ return (FAILED);
++ }
++
++ LEAVE(__func__);
++
++ return (return_status);
++}
++
++/**************************************************************************
++* qla2x00_eh_wait_for_pending_commands
++*
++* Description:
++* Waits for all the commands to come back from the specified host.
++*
++* Input:
++* ha - pointer to scsi_qla_host structure.
++*
++* Returns:
++* 1 : SUCCESS
++* 0 : FAILED
++*
++* Note:
++**************************************************************************/
++int
++qla2x00_eh_wait_for_pending_commands(scsi_qla_host_t *ha)
++{
++ int cnt;
++ int status;
++ unsigned long flags;
++ srb_t *sp;
++ Scsi_Cmnd *cmd;
++
++ status = 1;
++
++ /*
++ * Waiting for all commands for the designated target in the active
++ * array
++ */
++ for (cnt = 1; cnt < MAX_OUTSTANDING_COMMANDS; cnt++) {
++ spin_lock_irqsave(&ha->hardware_lock, flags);
++ sp = ha->outstanding_cmds[cnt];
++ if (sp) {
++ cmd = sp->cmd;
++ spin_unlock_irqrestore(&ha->hardware_lock, flags);
++ status = qla2x00_eh_wait_on_command(ha, cmd);
++ }
++ else {
++ spin_unlock_irqrestore(&ha->hardware_lock, flags);
++ }
++ }
++ return (status);
++}
++
++
++/**************************************************************************
++* qla2xxx_eh_bus_reset
++*
++* Description:
++* The bus reset function will reset the bus and abort any executing
++* commands.
++*
++* Input:
++* cmd = Linux SCSI command packet of the command that cause the
++* bus reset.
++*
++* Returns:
++* SUCCESS/FAILURE (defined as macro in scsi.h).
++*
++**************************************************************************/
++int
++qla2xxx_eh_bus_reset(Scsi_Cmnd *cmd)
++{
++ int return_status = SUCCESS;
++ uint32_t b, t, l;
++ srb_t *sp;
++ int found;
++ struct list_head *hal;
++ scsi_qla_host_t *ha, *search_ha;
++
++
++ ENTER("qla2xxx_eh_bus_reset");
++
++ if (cmd == NULL) {
++ printk(KERN_INFO
++ "%s(): **** SCSI mid-layer passing in NULL cmd\n",
++ __func__);
++ DEBUG2(BUG();)
++
++ return (FAILED);
++ }
++
++ b = SCSI_BUS_32(cmd);
++ t = SCSI_TCN_32(cmd);
++ l = SCSI_LUN_32(cmd);
++
++ ha = (scsi_qla_host_t *) cmd->device->host->hostdata;
++ ha->eh_start=0;
++ sp = (srb_t *) CMD_SP(cmd);
++
++ if (ha == NULL) {
++ printk(KERN_INFO
++ "%s(): **** CMD derives a NULL HA\n",
++ __func__);
++ DEBUG2(BUG();)
++
++ return (FAILED);
++ }
++
++ found = 0;
++ read_lock(&qla_hostlist_lock);
++ list_for_each(hal, &qla_hostlist) {
++ search_ha = list_entry(hal, scsi_qla_host_t, list);
++
++ if (search_ha == ha) {
++ found ++;
++ break;
++ }
++ }
++ read_unlock(&qla_hostlist_lock);
++
++ if (!found) {
++ printk(KERN_INFO
++ "%s(): **** CMD derives a NULL search HA\n",
++ __func__);
++ DEBUG2(BUG();)
++
++ return (FAILED);
++ }
++
++#if STOP_ON_RESET
++ printk("Resetting the Bus= 0x%x\n", (int)cmd);
++ qla2x00_print_scsi_cmd(cmd);
++ qla2x00_panic("qla2100_reset", ha->host);
++#endif
++
++ if (qla2x00_verbose)
++ printk(KERN_INFO
++ "scsi(%ld:%d:%d:%d): LOOP RESET ISSUED.\n",
++ ha->host_no, (int)b, (int)t, (int)l);
++
++ if (!((test_bit(ABORT_ISP_ACTIVE, &ha->dpc_flags)) ||
++ (test_bit(ISP_ABORT_NEEDED, &ha->dpc_flags)) ||
++ (!atomic_read(&ha->loop_down_timer) &&
++ ha->loop_state == LOOP_DOWN)||
++ test_bit(CFG_ACTIVE, &ha->cfg_flags) ||
++ ha->loop_state != LOOP_READY)) {
++
++ clear_bit(LOOP_RESET_NEEDED, &ha->dpc_flags);
++ spin_unlock_irq(ha->host->host_lock);
++
++ if (qla2x00_loop_reset(ha) != 0) {
++ return_status = FAILED;
++ }
++ spin_lock_irq(ha->host->host_lock);
++ } else {
++ /*
++ * Wait a while for the loop to come back. Return SUCCESS
++ * for the kernel to try again.
++ */
++ spin_unlock_irq(ha->host->host_lock);
++
++ set_current_state(TASK_INTERRUPTIBLE);
++ schedule_timeout(5 * HZ);
++
++ spin_lock_irq(ha->host->host_lock);
++
++ return_status = SUCCESS;
++ }
++
++ if (return_status == FAILED) {
++ DEBUG2(printk("qla2xxx_eh_bus_reset Exiting: Reset Failed\n");)
++ printk("qla2xxx_eh_bus_reset Exiting: Reset Failed\n");
++ return FAILED;
++ }
++
++ /* Blocking Call. It goes to sleep waiting for cmd to get to done q */
++ /* Waiting for our command in done_queue to be returned to OS.*/
++
++ if ( qla2x00_eh_wait_for_pending_commands(ha) == 0) {
++ return_status = FAILED;
++ }
++
++ if(return_status == FAILED) {
++ printk(KERN_INFO "qla2xxx_eh_bus_reset Exiting: status=Failed\n");
++ return FAILED;
++ } else
++ printk(KERN_INFO "qla2xxx_eh_bus_reset Exiting: status=SUCCESS\n");
++
++ LEAVE("qla2xxx_eh_bus_reset");
++
++ return (return_status);
++}
++
++/**************************************************************************
++* qla2xxx_eh_host_reset
++*
++* Description:
++* The reset function will reset the Adapter.
++*
++* Input:
++* cmd = Linux SCSI command packet of the command that cause the
++* adapter reset.
++*
++* Returns:
++* Either SUCCESS or FAILED.
++*
++* Note:
++**************************************************************************/
++int
++qla2xxx_eh_host_reset(Scsi_Cmnd *cmd)
++{
++ int return_status = SUCCESS;
++ srb_t *sp;
++ uint32_t b, t, l;
++ int found;
++ struct list_head *hal;
++ scsi_qla_host_t *ha, *search_ha;
++
++ ENTER("qla2xxx_eh_host_reset");
++
++ if (cmd == NULL) {
++ printk(KERN_INFO
++ "%s(): **** SCSI mid-layer passing in NULL cmd\n",
++ __func__);
++ DEBUG2(BUG();)
++
++ return (FAILED);
++ }
++
++ ha = (scsi_qla_host_t *)cmd->device->host->hostdata;
++ ha->eh_start= 0;
++ /* Find actual ha */
++ sp = (srb_t *)CMD_SP(cmd);
++ if (ha->flags.failover_enabled && sp != NULL)
++ ha = sp->ha;
++ else
++ ha = (scsi_qla_host_t *)cmd->device->host->hostdata;
++
++ if (ha == NULL) {
++ printk(KERN_INFO
++ "%s(): **** CMD derives a NULL HA\n",
++ __func__);
++ DEBUG2(BUG();)
++
++ return (FAILED);
++ }
++
++ found = 0;
++ read_lock(&qla_hostlist_lock);
++ list_for_each(hal, &qla_hostlist) {
++ search_ha = list_entry(hal, scsi_qla_host_t, list);
++
++ if (search_ha == ha) {
++ found ++;
++ break;
++ }
++ }
++ read_unlock(&qla_hostlist_lock);
++
++ if (!found) {
++ printk(KERN_INFO
++ "%s(): **** CMD derives a NULL search HA\n",
++ __func__);
++ DEBUG2(BUG();)
++
++ return (FAILED);
++ }
++
++ /* Display which one we're actually resetting for debug. */
++ DEBUG(printk("qla2xxx_eh_host_reset: entered for scsi%ld. "
++ "Resetting host_no %ld.\n",
++ ((scsi_qla_host_t *)cmd->device->host->hostdata)->host_no,
++ ha->host_no));
++
++#if STOP_ON_RESET
++ printk("Host Reset... Command=\n");
++ qla2x00_print_scsi_cmd(cmd);
++ qla2x00_panic("qla2xxx_eh_host_reset", ha->host);
++#endif
++
++ /*
++ * Now issue reset.
++ */
++ b = SCSI_BUS_32(cmd);
++ t = SCSI_TCN_32(cmd);
++ l = SCSI_LUN_32(cmd);
++
++ if (qla2x00_verbose) {
++ printk(KERN_INFO
++ "scsi(%ld:%d:%d:%d): now issue ADAPTER RESET.\n",
++ ((scsi_qla_host_t *)cmd->device->host->hostdata)->host_no,
++ (int)b,
++ (int)t,
++ (int)l);
++ }
++
++ DEBUG2(printk(KERN_INFO
++ "scsi(%ld:%d:%d:%d): now issue ADAPTER RESET.\n",
++ ((scsi_qla_host_t *)cmd->device->host->hostdata)->host_no,
++ (int)b, (int)t, (int)l));
++
++ if (!(test_bit(ABORT_ISP_ACTIVE, &ha->dpc_flags))) {
++ set_bit(ABORT_ISP_ACTIVE, &ha->dpc_flags);
++
++ spin_unlock_irq(ha->host->host_lock);
++
++ if (qla2x00_abort_isp(ha, 1)) {
++ /* failed. try later */
++ set_bit(ISP_ABORT_NEEDED, &ha->dpc_flags);
++ return_status = FAILED;
++
++ DEBUG2(printk(KERN_WARNING
++ "scsi(%ld:%d:%d:%d): ha %ld ADAPTER RESET "
++ "failed. Scheduled retry later.\n",
++ ((scsi_qla_host_t *)cmd->device->host->hostdata)->host_no,
++ (int)b, (int)t, (int)l, ha->host_no);)
++ } else {
++ return_status = SUCCESS;
++ }
++
++ spin_lock_irq(ha->host->host_lock);
++
++ clear_bit(ABORT_ISP_ACTIVE, &ha->dpc_flags);
++ } else {
++ /*
++ * Already active. Sleep a while then return SUCCESS for kernel
++ * to retry the IO.
++ */
++ spin_unlock_irq(ha->host->host_lock);
++
++ set_current_state(TASK_INTERRUPTIBLE);
++ schedule_timeout(5 * HZ);
++
++ spin_lock_irq(ha->host->host_lock);
++
++ return_status = SUCCESS;
++ }
++ if ( return_status == FAILED) {
++ DEBUG2(printk("qla2xxx_eh_host_reset Exiting: Reset Failed\n");)
++ return FAILED;
++ }
++
++ /* Waiting for our command in done_queue to be returned to OS.*/
++ if ( qla2x00_eh_wait_for_pending_commands(ha) == 0) {
++ return_status = FAILED;
++ }
++
++ if(return_status == FAILED) {
++ printk(KERN_INFO "qla2xxx_eh_host_reset Exiting: status=Failed\n");
++ return FAILED;
++ } else
++ printk(KERN_INFO "qla2xxx_eh_host_reset Exiting: status=SUCCESS\n");
++
++ LEAVE("qla2xxx_eh_host_reset");
++
++ return(return_status);
++}
++
++
++/*
++* qla2x00_loop_reset
++* Issue loop reset.
++*
++* Input:
++* ha = adapter block pointer.
++*
++* Returns:
++* 0 = success
++*/
++static uint8_t
++qla2x00_loop_reset(scsi_qla_host_t *ha)
++{
++ uint8_t status = QL_STATUS_SUCCESS;
++ uint16_t t;
++ os_tgt_t *tq;
++
++ ENTER(__func__);
++
++ if (ha->flags.enable_lip_reset) {
++ status = qla2x00_lip_reset(ha);
++ }
++
++ if (status == QL_STATUS_SUCCESS && ha->flags.enable_target_reset) {
++ for (t = 0; t < MAX_FIBRE_DEVICES; t++) {
++ if ((tq = TGT_Q(ha, t)) == NULL)
++ continue;
++
++ if (tq->vis_port == NULL)
++ continue;
++
++ status = qla2x00_target_reset(ha, 0, t);
++ if (status != QL_STATUS_SUCCESS) {
++ break;
++ }
++ }
++ }
++
++ if (status == QL_STATUS_SUCCESS &&
++ ((!ha->flags.enable_target_reset &&
++ !ha->flags.enable_lip_reset) ||
++ ha->flags.enable_lip_full_login)) {
++
++ status = qla2x00_full_login_lip(ha);
++ }
++
++ /* Issue marker command only when we are going to start the I/O */
++ ha->marker_needed = 1;
++
++ if (status) {
++ /* Empty */
++ DEBUG2_3(printk("%s(%ld): **** FAILED ****\n",
++ __func__,
++ ha->host_no);)
++ } else {
++ /* Empty */
++ DEBUG3(printk("%s(%ld): exiting normally.\n",
++ __func__,
++ ha->host_no);)
++ }
++
++ LEAVE(__func__);
++
++ return(status);
++}
++
++/*
++ * qla2x00_device_reset
++ * Issue bus device reset message to the target.
++ *
++ * Input:
++ * ha = adapter block pointer.
++ * t = SCSI ID.
++ * TARGET_QUEUE_LOCK must be released.
++ * ADAPTER_STATE_LOCK must be released.
++ *
++ * Context:
++ * Kernel context.
++ */
++static int
++qla2x00_device_reset(scsi_qla_host_t *vis_ha, uint16_t tgt, uint16_t lun)
++{
++#if !USE_ABORT_TGT
++ uint16_t l;
++ fc_port_t *fcport;
++#endif
++ os_lun_t *lq;
++ uint8_t status = 0;
++
++ ENTER(__func__);
++
++#if USE_ABORT_TGT
++ /* Abort Target command will clear Reservation */
++ lq = GET_LU_Q(vis_ha, tgt, lun);
++ if (lq && lq->fclun)
++ status = qla2x00_abort_target(lq->fclun->fcport);
++#else
++ /* Abort Device command will not clear Reservation */
++ for (l = 0; l < MAX_LUNS; l++) {
++ lq = GET_LU_Q(vis_ha, tgt, l);
++ if (lq == NULL)
++ continue;
++
++ fcport = lq->fclun->fcport;
++ if (LOOP_RDY(fcport->ha)) {
++ qla2x00_abort_device(fcport->ha,
++ fcport->loop_id,
++ lq->fclun->lun);
++ }
++ }
++#endif
++
++ LEAVE(__func__);
++
++ return( status );
++}
++
++/**************************************************************************
++* qla1200_biosparam
++*
++* Description:
++* Return the disk geometry for the given SCSI device.
++**************************************************************************/
++int
++qla2x00_biosparam(struct scsi_device *sdev,
++ struct block_device *bdev, sector_t capacity, int geom[])
++{
++ int heads, sectors, cylinders;
++
++ heads = 64;
++ sectors = 32;
++ cylinders = (unsigned long)capacity / (heads * sectors);
++ if (cylinders > 1024) {
++ heads = 255;
++ sectors = 63;
++ cylinders = (unsigned long)capacity / (heads * sectors);
++ }
++
++ geom[0] = heads;
++ geom[1] = sectors;
++ geom[2] = cylinders;
++
++ return (0);
++}
++
++/**************************************************************************
++ * qla2x00_slave_configure
++ * Determines the queue depth for a given device. There are two ways
++ * a queue depth can be obtained for a tagged queueing device. One
++ * way is the default queue depth which is determined by whether
++ * If it is defined, then it is used
++ * as the default queue depth. Otherwise, we use either 4 or 8 as the
++ * default queue depth (dependent on the number of hardware SCBs).
++ **************************************************************************/
++int
++qla2xxx_slave_configure(Scsi_Device * device)
++{
++ int queue_depth = 64;
++
++ if (device->tagged_supported) {
++#if defined(MODULE)
++ if (!(ql2xmaxqdepth == 0 || ql2xmaxqdepth > 256))
++ queue_depth = ql2xmaxqdepth;
++#endif
++ ql2xmaxqdepth = queue_depth;
++
++ scsi_adjust_queue_depth(device, MSG_ORDERED_TAG, queue_depth);
++
++ printk(KERN_INFO
++ "scsi(%d:%d:%d:%d): Enabled tagged queuing, queue "
++ "depth %d.\n",
++ device->host->host_no,
++ device->channel, device->id, device->lun,
++ device->queue_depth);
++ } else {
++ scsi_adjust_queue_depth(device, 0 /* TCQ off */,
++ device->host->hostt->cmd_per_lun /* 3 */);
++ }
++
++ return (0);
++}
++
++/*
++ * PCI driver interface
++ */
++static int __devinit
++qla_probe_device(struct pci_dev *pdev, const struct pci_device_id *ent)
++{
++ device_reg_t *reg;
++ struct Scsi_Host *host;
++ scsi_qla_host_t *ha;
++ unsigned long flags = 0;
++ unsigned long wait_switch = 0;
++
++ if (pci_enable_device(pdev))
++ return -1;
++
++ printk(KERN_INFO
++ "qla2x00: Found VID=%x DID=%x SSVID=%x SSDID=%x\n",
++ pdev->vendor, pdev->device,
++ pdev->subsystem_vendor, pdev->subsystem_device);
++
++ if (ql2xfailover) {
++ sprintf(qla2x00_version_str, "%s-fo", QLA2100_VERSION);
++ } else {
++ sprintf(qla2x00_version_str, "%s", QLA2100_VERSION);
++ }
++
++ host = scsi_register(&qla2x00_driver_template, sizeof(scsi_qla_host_t));
++ if (host == NULL) {
++ printk(KERN_WARNING
++ "qla2x00: Couldn't register with scsi layer!\n");
++ return -1;
++ }
++
++ /* Clear our data area */
++ ha = (scsi_qla_host_t *)host->hostdata;
++ memset(ha, 0, sizeof(scsi_qla_host_t));
++
++ ha->host_no = host->host_no;
++ ha->host = host;
++
++ /* Sanitize the information from PCI BIOS. */
++ host->irq = pdev->irq;
++ host->io_port = pci_resource_start(pdev, 0);
++ ha->pdev = pdev;
++ scsi_set_device(host, &pdev->dev);
++
++ ha->brd_info = (struct qla_board_info *)ent->driver_data;
++
++ if (qla2x00_verbose) {
++ printk(KERN_INFO
++ "scsi(%d): Found a %s @ bus %d, device 0x%x, irq %d, "
++ "iobase 0x%lx\n",
++ host->host_no,
++ ha->brd_info->name,
++ ha->pdev->bus->number,
++ PCI_SLOT(ha->pdev->devfn),
++ host->irq, host->io_port);
++ }
++
++ ha->iobase = (device_reg_t *) host->io_port;
++
++ spin_lock_init(&ha->hardware_lock);
++
++ /* 4.23 Initialize /proc/scsi/qla2x00 counters */
++ ha->actthreads = 0;
++ ha->qthreads = 0;
++ ha->dump_done = 0;
++ ha->total_isr_cnt = 0;
++ ha->total_isp_aborts = 0;
++ ha->total_lip_cnt = 0;
++ ha->total_dev_errs = 0;
++ ha->total_ios = 0;
++ ha->total_bytes = 0;
++
++ if (qla2x00_mem_alloc(ha)) {
++ printk(KERN_WARNING
++ "scsi(%d): [ERROR] Failed to allocate memory for adapter\n",
++ host->host_no);
++
++ qla2x00_mem_free(ha);
++
++ scsi_unregister(host);
++
++ return -1;
++ }
++
++ ha->prev_topology = 0;
++ ha->ports = MAX_BUSES;
++
++#if defined(ISP2100)
++ ha->max_targets = MAX_TARGETS_2100;
++#else
++ ha->max_targets = MAX_TARGETS_2200;
++#endif
++
++ /* load the F/W, read paramaters, and init the H/W */
++ ha->instance = num_hosts;
++
++ init_MUTEX_LOCKED(&ha->mbx_intr_sem);
++
++ INIT_LIST_HEAD(&ha->list);
++ INIT_LIST_HEAD(&ha->fcports);
++ INIT_LIST_HEAD(&ha->fcinitiators);
++ INIT_LIST_HEAD(&ha->done_queue);
++ INIT_LIST_HEAD(&ha->retry_queue);
++ INIT_LIST_HEAD(&ha->scsi_retry_queue);
++ INIT_LIST_HEAD(&ha->failover_queue);
++ INIT_LIST_HEAD(&ha->pending_queue);
++
++ if (ql2xfailover)
++ ha->flags.failover_enabled = 1;
++ else
++ ha->flags.failover_enabled = 0;
++
++ INIT_WORK(&ha->run_qla_task, qla2x00_done_work, (void *) ha);
++
++ /*
++ * These locks are used to prevent more than one CPU
++ * from modifying the queue at the same time. The
++ * higher level "io_request_lock" will reduce most
++ * contention for these locks.
++ */
++ spin_lock_init(&ha->mbx_bits_lock);
++ spin_lock_init(&ha->mbx_reg_lock);
++ spin_lock_init(&ha->mbx_q_lock);
++ spin_lock_init(&ha->list_lock);
++
++ if (qla2x00_initialize_adapter(ha) &&
++ !(ha->device_flags & DFLG_NO_CABLE)) {
++
++ printk(KERN_WARNING
++ "scsi(%ld): Failed to initialize adapter\n", ha->host_no);
++
++ DEBUG2(printk("scsi(%ld): Failed to initialize adapter - "
++ "Adapter flags %x.\n",
++ ha->host_no, ha->device_flags));
++
++ qla2x00_mem_free(ha);
++
++ scsi_unregister(host);
++
++ return -1;
++ }
++
++ /*
++ * Startup the kernel thread for this host adapter
++ */
++ init_completion(&ha->dpc_inited);
++ init_completion(&ha->dpc_exited);
++
++ ha->dpc_should_die = 0;
++ ha->dpc_pid = kernel_thread(qla2x00_do_dpc, ha, 0);
++ if (ha->dpc_pid < 0) {
++ printk(KERN_WARNING
++ "scsi(%ld): Unable to start DPC thread!\n", ha->host_no);
++
++ qla2x00_mem_free(ha);
++
++ scsi_unregister(host);
++
++ return -1;
++ }
++ wait_for_completion(&ha->dpc_inited);
++
++ /* Mark preallocated Loop IDs in use. */
++ ha->fabricid[SNS_FL_PORT].in_use = TRUE;
++ ha->fabricid[FABRIC_CONTROLLER].in_use = TRUE;
++ ha->fabricid[SIMPLE_NAME_SERVER].in_use = TRUE;
++
++ /* Register our resources with Linux */
++ if (qla2x00_register_with_Linux(ha, ha->ports - 1)) {
++ printk(KERN_WARNING
++ "scsi(%ld): Failed to register resources.\n",
++ ha->host_no);
++
++ qla2x00_mem_free(ha);
++
++ scsi_unregister(host);
++
++ return -1;
++ }
++
++ DEBUG2(printk("DEBUG: detect hba %ld at address = %p\n",
++ ha->host_no, ha));
++
++ reg = ha->iobase;
++
++ /* Disable ISP interrupts. */
++ qla2x00_disable_intrs(ha);
++
++ /* Ensure mailbox registers are free. */
++ spin_lock_irqsave(&ha->hardware_lock, flags);
++ WRT_REG_WORD(®->semaphore, 0);
++ WRT_REG_WORD(®->hccr, HCCR_CLR_RISC_INT);
++ WRT_REG_WORD(®->hccr, HCCR_CLR_HOST_INT);
++
++ /* Enable proper parity */
++#if defined(ISP2300)
++ if (ha->pdev->device == QLA2312_DEVICE_ID ||
++ ha->pdev->device == QLA2322_DEVICE_ID)
++ /* SRAM, Instruction RAM and GP RAM parity */
++ WRT_REG_WORD(®->hccr, (HCCR_ENABLE_PARITY + 0x7));
++ else
++ /* SRAM parity */
++ WRT_REG_WORD(®->hccr, (HCCR_ENABLE_PARITY + 0x1));
++#endif
++ spin_unlock_irqrestore(&ha->hardware_lock, flags);
++
++ /*
++ * if failover is enabled read the user configuration
++ */
++ if (ha->flags.failover_enabled) {
++ if (ConfigRequired > 0)
++ mp_config_required = 1;
++ else
++ mp_config_required = 0;
++
++ DEBUG(printk("qla2x00_detect: qla2x00_cfg_init for hba %ld\n",
++ ha->instance));
++
++ qla2x00_cfg_init(ha);
++ }
++
++ /* Enable chip interrupts. */
++ qla2x00_enable_intrs(ha);
++
++ /* Insert new entry into the list of adapters */
++ write_lock(&qla_hostlist_lock);
++ list_add_tail(&ha->list, &qla_hostlist);
++ write_unlock(&qla_hostlist_lock);
++
++ /* v2.19.5b6 */
++ /*
++ * Wait around max loop_reset_delay secs for the devices to come
++ * on-line. We don't want Linux scanning before we are ready.
++ *
++ */
++ for (wait_switch = jiffies + (ha->loop_reset_delay * HZ);
++ time_before(jiffies,wait_switch) &&
++ !(ha->device_flags & (DFLG_NO_CABLE | DFLG_FABRIC_DEVICES))
++ && (ha->device_flags & SWITCH_FOUND) ;) {
++
++ qla2x00_check_fabric_devices(ha);
++
++ set_current_state(TASK_INTERRUPTIBLE);
++ schedule_timeout(5);
++ }
++
++ /* List the target we have found */
++ if (displayConfig && (!ha->flags.failover_enabled))
++ qla2x00_display_fc_names(ha);
++
++ pci_set_drvdata(pdev, ha);
++ ha->init_done = 1;
++ num_hosts++;
++
++ if (displayConfig && ha->flags.failover_enabled)
++ qla2x00_cfg_display_devices();
++
++ return 0;
++}
++
++static void __devexit
++qla_remove_device(struct pci_dev *pdev)
++{
++ struct list_head *hal, *temp;
++ scsi_qla_host_t *ha, *iter_ha;
++
++ ha = pci_get_drvdata(pdev);
++
++ /* Sanity check -- make sure the entry is in our list */
++ write_lock(&qla_hostlist_lock);
++ list_for_each_safe(hal, temp, &qla_hostlist) {
++ iter_ha = list_entry(hal, scsi_qla_host_t, list);
++
++ if (iter_ha == ha) {
++ list_del(&ha->list);
++ qla2x00_free_device(ha);
++ break;
++ }
++ }
++ write_unlock(&qla_hostlist_lock);
++}
++
++static void
++qla2x00_free_device(scsi_qla_host_t *ha)
++{
++ int ret;
++ struct Scsi_Host *host;
++
++ host = ha->host;
++
++ /* turn-off interrupts on the card */
++ if (ha->interrupts_on)
++ qla2x00_disable_intrs(ha);
++
++ /* Detach interrupts */
++ if (host->irq)
++ free_irq(host->irq, ha);
++
++ /* release io space registers */
++ if (host->io_port)
++ release_region(host->io_port, 0xff);
++
++ /* Disable timer */
++ if (ha->timer_active)
++ qla2x00_stop_timer(ha);
++
++ /* Kill the kernel thread for this host */
++ if (ha->dpc_pid >= 0) {
++ ha->dpc_should_die = 1;
++ wmb();
++ ret = kill_proc(ha->dpc_pid, SIGTERM, 1);
++ if (ret) {
++ printk(KERN_ERR
++ "scsi(%ld): Unable to signal DPC thread -- (%d)\n",
++ ha->host_no, ret);
++
++ /* TODO: SOMETHING MORE??? */
++ } else {
++ wait_for_completion(&ha->dpc_exited);
++ }
++ }
++
++#if MEMORY_MAPPED_IO
++ if (ha->mmpbase) {
++ iounmap((void *) (((unsigned long) ha->mmpbase) & PAGE_MASK));
++ }
++#endif
++
++ apidev_cleanup();
++
++ qla2x00_mem_free(ha);
++
++ if (ha->flags.failover_enabled)
++ qla2x00_cfg_mem_free(ha);
++
++ ha->flags.online = FALSE;
++
++ scsi_unregister(host);
++}
++
++
++/*
++ * The following support functions are adopted to handle
++ * the re-entrant qla2x00_proc_info correctly.
++ */
++static void
++copy_mem_info(struct info_str *info, char *data, int len)
++{
++ if (info->pos + len > info->offset + info->length)
++ len = info->offset + info->length - info->pos;
++
++ if (info->pos + len < info->offset) {
++ info->pos += len;
++ return;
++ }
++
++ if (info->pos < info->offset) {
++ off_t partial;
++
++ partial = info->offset - info->pos;
++ data += partial;
++ info->pos += partial;
++ len -= partial;
++ }
++
++ if (len > 0) {
++ memcpy(info->buffer, data, len);
++ info->pos += len;
++ info->buffer += len;
++ }
++}
++
++static int
++copy_info(struct info_str *info, char *fmt, ...)
++{
++ va_list args;
++ char buf[256];
++ int len;
++
++ va_start(args, fmt);
++ len = vsprintf(buf, fmt, args);
++ va_end(args);
++
++ copy_mem_info(info, buf, len);
++
++ return (len);
++}
++
++/*************************************************************************
++* qla2x00_proc_info
++*
++* Description:
++* Return information to handle /proc support for the driver.
++*
++* inout : decides the direction of the dataflow and the meaning of the
++* variables
++* buffer: If inout==FALSE data is being written to it else read from it
++* (ptr to a page buffer)
++* *start: If inout==FALSE start of the valid data in the buffer
++* offset: If inout==FALSE starting offset from the beginning of all
++* possible data to return.
++* length: If inout==FALSE max number of bytes to be written into the buffer
++* else number of bytes in "buffer"
++* Returns:
++* < 0: error. errno value.
++* >= 0: sizeof data returned.
++*************************************************************************/
++int
++qla2x00_proc_info(char *buffer,
++ char **start, off_t offset, int length, int hostno, int inout)
++{
++ struct Scsi_Host *host;
++ struct info_str info;
++ int i;
++ int retval = -EINVAL;
++ os_lun_t *up;
++ uint32_t t, l;
++ uint32_t tmp_sn;
++ unsigned long *flags;
++ struct list_head *list, *temp;
++ unsigned long cpu_flags;
++ uint8_t *loop_state;
++#if REQ_TRACE
++ Scsi_Cmnd *cp;
++ srb_t *sp;
++#endif
++ int found;
++ struct list_head *hal;
++ scsi_qla_host_t *ha;
++
++ DEBUG3(printk(KERN_INFO
++ "Entering proc_info buff_in=%p, offset=0x%lx, length=0x%x, "
++ "hostno=%d\n", buffer, offset, length, hostno);)
++
++ ha = NULL;
++ host = NULL;
++
++ /* Find the host that was specified */
++ found = 0;
++ read_lock(&qla_hostlist_lock);
++ list_for_each(hal, &qla_hostlist) {
++ ha = list_entry(hal, scsi_qla_host_t, list);
++
++ if (ha->host->host_no == hostno) {
++ found++;
++ break;
++ }
++ }
++ read_unlock(&qla_hostlist_lock);
++
++ /* if host wasn't found then exit */
++ if (!found) {
++ DEBUG2_3(printk(KERN_WARNING
++ "%s: Can't find adapter for host number %d\n",
++ __func__, hostno);)
++
++ return (retval);
++ }
++
++ host = ha->host;
++
++ if (inout == TRUE) {
++ /* Has data been written to the file? */
++ DEBUG3(printk(
++ "%s: has data been written to the file. \n",
++ __func__);)
++ return (qla2x00_set_info(buffer, length, host));
++ }
++
++ if (start) {
++ *start = buffer;
++ }
++
++ info.buffer = buffer;
++ info.length = length;
++ info.offset = offset;
++ info.pos = 0;
++
++ /* start building the print buffer */
++ copy_info(&info,
++ "QLogic PCI to Fibre Channel Host Adapter for " ISP_NAME ":\n"
++ " Firmware version: %2d.%02d.%02d ",
++ ha->fw_major_version,
++ ha->fw_minor_version,
++ ha->fw_subminor_version);
++
++ switch (ha->fw_attributes & 0xFF) {
++ case 0x7:
++ copy_info(&info, "EF");
++ break;
++ case 0x17:
++ copy_info(&info, "TP");
++ break;
++ case 0x37:
++ copy_info(&info, "IP");
++ break;
++ case 0x77:
++ copy_info(&info, "VI");
++ break;
++ default:
++ copy_info(&info, "(%x)", ha->fw_attributes);
++ break;
++ }
++ if (ha->fw_attributes & 0x100)
++ copy_info(&info, "X");
++ copy_info(&info, ", ");
++
++ copy_info(&info, "Driver version %s\n", qla2x00_version_str);
++
++ copy_info(&info, "Entry address = %p\n", qla2x00_set_info);
++
++ tmp_sn = ((ha->serial0 & 0x1f) << 16) | (ha->serial2 << 8) |
++ ha->serial1;
++ copy_info(&info, "HBA: %s, Serial# %c%05d\n",
++ ha->brd_info->name, ('A' + tmp_sn/100000), (tmp_sn%100000));
++
++ copy_info(&info,
++ "Request Queue = 0x%lx, Response Queue = 0x%lx\n",
++ (long unsigned int)ha->request_dma,
++ (long unsigned int)ha->response_dma);
++
++ copy_info(&info,
++ "Request Queue count= %ld, Response Queue count= %ld\n",
++ (long)REQUEST_ENTRY_CNT, (long)RESPONSE_ENTRY_CNT);
++
++ copy_info(&info,
++ "Total number of active commands = %ld\n",
++ ha->actthreads);
++
++ copy_info(&info,
++ "Total number of interrupts = %ld\n",
++ (long)ha->total_isr_cnt);
++
++#if defined(FC_IP_SUPPORT)
++ copy_info(&info,
++ "Total number of active IP commands = %ld\n",
++ ha->ipreq_cnt);
++#endif
++
++#if defined(IOCB_THROLLE_USAGE)
++#if defined(IOCB_HIT_RATE)
++ copy_info(&info,
++ "Total number of IOCBs (used/max/#hit) "
++ "= (%d/%d/%d)\n",
++ (int)ha->iocb_cnt,
++ (int)ha->iocb_hiwat,
++ (int)ha->iocb_overflow_cnt);
++#else
++ copy_info(&info,
++ "Total number of IOCBs (used/max) "
++ "= (%d/%d)\n",
++ (int)ha->iocb_cnt, (int)ha->iocb_hiwat);
++#endif
++#endif
++
++
++ copy_info(&info,
++ "Total number of queued commands = %d\n",
++ (max_srbs - ha->srb_cnt));
++
++ copy_info(&info,
++ " Device queue depth = 0x%x\n",
++ (ql2xmaxqdepth == 0) ? 16 : ql2xmaxqdepth);
++
++ copy_info(&info,
++ "Number of free request entries = %d\n", ha->req_q_cnt);
++
++ copy_info(&info,
++ "Number of mailbox timeouts = %ld\n",
++ qla2x00_stats.mboxtout);
++
++ copy_info(&info,
++ "Number of ISP aborts = %ld\n",qla2x00_stats.ispAbort);
++
++ copy_info(&info,
++ "Number of loop resyncs = %ld\n",
++ qla2x00_stats.loop_resync);
++
++ copy_info(&info,
++ "Number of retries for empty slots = %ld\n",
++ qla2x00_stats.outarray_full);
++
++ copy_info(&info,
++ "Number of reqs in pending_q= %ld, retry_q= %d, "
++ "done_q= %ld, scsi_retry_q= %d\n",
++ ha->qthreads, ha->retry_q_cnt,
++ ha->done_q_cnt, ha->scsi_retry_q_cnt);
++
++ if (ha->flags.failover_enabled) {
++ copy_info(&info,
++ "Number of reqs in failover_q= %d\n",
++ ha->failover_cnt);
++ }
++
++ flags = (unsigned long *) &ha->flags;
++
++ if (ha->loop_state == LOOP_DOWN) {
++ loop_state = "DOWN";
++ } else if (ha->loop_state ==LOOP_UP) {
++ loop_state = "UP";
++ } else if (ha->loop_state ==LOOP_READY) {
++ loop_state = "READY";
++ } else if (ha->loop_state ==LOOP_TIMEOUT) {
++ loop_state = "TIMEOUT";
++ } else if (ha->loop_state ==LOOP_UPDATE) {
++ loop_state = "UPDATE";
++ } else {
++ loop_state = "UNKNOWN";
++ }
++
++ copy_info(&info,
++ "Host adapter:loop state= <%s>, flags= 0x%lx\n",
++ loop_state , *flags);
++
++ copy_info(&info, "Dpc flags = 0x%lx\n", ha->dpc_flags);
++
++ copy_info(&info, "MBX flags = 0x%x\n", ha->mbx_flags);
++
++ copy_info(&info, "SRB Free Count = %d\n", ha->srb_cnt);
++
++ copy_info(&info, "Port down retry = %3.3d\n",
++ ha->port_down_retry_count);
++
++ copy_info(&info, "Login retry count = %3.3d\n",
++ ha->login_retry_count);
++
++ copy_info(&info,
++ "Commands retried with dropped frame(s) = %d\n",
++ ha->dropped_frame_error_cnt);
++
++ copy_info(&info, "\n");
++
++#if REQ_TRACE
++ if (qla2x00_req_dmp) {
++ copy_info(&info,
++ "Outstanding Commands on controller:\n");
++
++ for (i = 1; i < MAX_OUTSTANDING_COMMANDS; i++) {
++ if ((sp = ha->outstanding_cmds[i]) == NULL) {
++ continue;
++ }
++
++ if ((cp = sp->cmd) == NULL) {
++ continue;
++ }
++
++ copy_info(&info, "(%d): Pid=%d, sp flags=0x%lx"
++ ", cmd=0x%p, state=%d\n",
++ i,
++ (int)sp->cmd->serial_number,
++ (long)sp->flags,
++ CMD_SP(sp->cmd),
++ (int)sp->state);
++
++ if (info.pos >= info.offset + info.length) {
++ /* No need to continue */
++ goto profile_stop;
++ }
++ }
++ }
++#endif /* REQ_TRACE */
++
++ if (qla2x00_retryq_dmp) {
++ if (!list_empty(&ha->retry_queue)) {
++ copy_info(&info,
++ "qla%ld: Retry queue requests:\n",
++ ha->host_no);
++
++ spin_lock_irqsave(&ha->list_lock, cpu_flags);
++
++ i = 0;
++ list_for_each_safe(list, temp, &ha->retry_queue) {
++ sp = list_entry(list, srb_t, list);
++ t = SCSI_TCN_32(sp->cmd);
++ l = SCSI_LUN_32(sp->cmd);
++
++ copy_info(&info,
++ "%d: target=%d, lun=%d, "
++ "pid=%ld sp=%p, sp->flags=0x%x,"
++ "sp->state= %d\n",
++ i, t, l,
++ sp->cmd->serial_number, sp,
++ sp->flags, sp->state );
++
++ i++;
++
++ if (info.pos >= info.offset + info.length) {
++ /* No need to continue */
++ goto profile_stop;
++ }
++ }
++
++ spin_unlock_irqrestore(&ha->list_lock, cpu_flags);
++
++ } /* if (!list_empty(&ha->retry_queue))*/
++ } /* if ( qla2x00_retryq_dmp ) */
++
++ /* 2.25 node/port display to proc */
++ /* Display the node name for adapter */
++ copy_info(&info, "\nSCSI Device Information:\n");
++ copy_info(&info,
++ "scsi-qla%d-adapter-node="
++ "%02x%02x%02x%02x%02x%02x%02x%02x;\n",
++ (int)ha->instance,
++ ha->init_cb->node_name[0],
++ ha->init_cb->node_name[1],
++ ha->init_cb->node_name[2],
++ ha->init_cb->node_name[3],
++ ha->init_cb->node_name[4],
++ ha->init_cb->node_name[5],
++ ha->init_cb->node_name[6],
++ ha->init_cb->node_name[7]);
++
++ /* display the port name for adapter */
++ copy_info(&info,
++ "scsi-qla%d-adapter-port="
++ "%02x%02x%02x%02x%02x%02x%02x%02x;\n",
++ (int)ha->instance,
++ ha->init_cb->port_name[0],
++ ha->init_cb->port_name[1],
++ ha->init_cb->port_name[2],
++ ha->init_cb->port_name[3],
++ ha->init_cb->port_name[4],
++ ha->init_cb->port_name[5],
++ ha->init_cb->port_name[6],
++ ha->init_cb->port_name[7]);
++
++ /* Print out device port names */
++ for (i = 0; i < MAX_FIBRE_DEVICES; i++) {
++ if (ha->fc_db[i].loop_id == PORT_UNUSED) {
++ continue;
++ }
++
++ if (ha->flags.failover_enabled) {
++ copy_info(&info,
++ "scsi-qla%d-port-%d="
++ "%02x%02x%02x%02x%02x%02x%02x%02x:"
++ "%02x%02x%02x%02x%02x%02x%02x%02x;\n",
++ (int)ha->instance, i,
++ ha->fc_db[i].name[0],
++ ha->fc_db[i].name[1],
++ ha->fc_db[i].name[2],
++ ha->fc_db[i].name[3],
++ ha->fc_db[i].name[4],
++ ha->fc_db[i].name[5],
++ ha->fc_db[i].name[6],
++ ha->fc_db[i].name[7],
++ ha->fc_db[i].wwn[0],
++ ha->fc_db[i].wwn[1],
++ ha->fc_db[i].wwn[2],
++ ha->fc_db[i].wwn[3],
++ ha->fc_db[i].wwn[4],
++ ha->fc_db[i].wwn[5],
++ ha->fc_db[i].wwn[6],
++ ha->fc_db[i].wwn[7]);
++ } else {
++ copy_info(&info,
++ "scsi-qla%d-target-%d="
++ "%02x%02x%02x%02x%02x%02x%02x%02x;\n",
++ (int)ha->instance, i,
++ ha->fc_db[i].wwn[0],
++ ha->fc_db[i].wwn[1],
++ ha->fc_db[i].wwn[2],
++ ha->fc_db[i].wwn[3],
++ ha->fc_db[i].wwn[4],
++ ha->fc_db[i].wwn[5],
++ ha->fc_db[i].wwn[6],
++ ha->fc_db[i].wwn[7]);
++ }
++
++ } /* 2.25 node/port display to proc */
++
++ copy_info(&info, "\nSCSI LUN Information:\n");
++
++ copy_info(&info, "(Id:Lun)\n");
++
++ /* scan for all equipment stats */
++ for (t = 0; t < MAX_FIBRE_DEVICES; t++) {
++ /* scan all luns */
++ for (l = 0; l < ha->max_luns; l++) {
++ up = (os_lun_t *) GET_LU_Q(ha, t, l);
++
++ if (up == NULL) {
++ continue;
++ }
++ if (up->fclun == NULL) {
++ continue;
++ }
++ if (up->fclun->flags & FC_DISCON_LUN) {
++ continue;
++ }
++
++ copy_info(&info,
++ "(%2d:%2d): Total reqs %ld,",
++ t,l,up->io_cnt);
++
++ copy_info(&info,
++ " Pending reqs %ld,",
++ up->out_cnt);
++
++ if (up->io_cnt < 3) {
++ copy_info(&info,
++ " flags 0x%x*,",
++ (int)up->q_flag);
++ } else {
++ copy_info(&info,
++ " flags 0x%x,",
++ (int)up->q_flag);
++ }
++
++ copy_info(&info,
++ " %ld:%d:%02x,",
++ up->fclun->fcport->ha->instance,
++ up->fclun->fcport->cur_path,
++ up->fclun->fcport->loop_id);
++
++ copy_info(&info, "\n");
++
++ if (info.pos >= info.offset + info.length) {
++ /* No need to continue */
++ goto profile_stop;
++ }
++ }
++
++ if (info.pos >= info.offset + info.length) {
++ /* No need to continue */
++ break;
++ }
++ }
++
++profile_stop:
++
++ retval = info.pos > info.offset ? info.pos - info.offset : 0;
++
++ DEBUG3(printk(KERN_INFO
++ "Exiting proc_info: info.pos=%d, offset=0x%lx, "
++ "length=0x%x\n", info.pos, offset, length);)
++
++#if QLA2100_LIPTEST
++ qla2x00_lip = 1;
++#endif
++
++ return (retval);
++}
++
++#if defined (CONFIG_SCSIFCHOTSWAP) || defined(CONFIG_GAMAP)
++union wwnmap {
++ unsigned long long wwn;
++ unsigned char wwn_u8[8];
++};
++
++int qla2x00_get_scsi_info_from_wwn (int mode,
++ unsigned long long wwn,
++ int *host,
++ int *channel,
++ int *lun,
++ int *id) {
++
++scsi_qla_host_t *list;
++Scsi_Device *scsi_device;
++union wwnmap wwncompare;
++union wwnmap wwncompare2;
++int i, j, k;
++
++ /*
++ * Retrieve big endian version of world wide name
++ */
++ wwncompare2.wwn = wwn;
++ for (j = 0, k=7; j < 8; j++, k--) {
++ wwncompare.wwn_u8[j] = wwncompare2.wwn_u8[k];
++ }
++
++ /*
++ * query all hosts searching for WWN
++ */
++ for (list = qla2x00_hostlist; list; list = list->next) {
++ for (i = 0; i < MAX_FIBRE_DEVICES; i++) {
++ /*
++ * Scan all devices in FibreChannel database
++ * if WWN match found, return SCSI device information
++ */
++ if (memcmp (wwncompare.wwn_u8, list->fc_db[i].name, 8) == 0) {
++ /*
++ * If inserting, avoid scan for channel and lun information
++ */
++ if (mode == 0) {
++ *channel = 0;
++ *lun = 0;
++ *host = list->host->host_no;
++ *id = i;
++ return (0);
++ }
++
++
++ /*
++ * WWN matches, find channel and lun information from scsi
++ * device
++ */
++ for (scsi_device = list->host->host_queue; scsi_device; scsi_device = scsi_device->next) {
++ if (scsi_device->id == i) {
++ *channel = scsi_device->channel;
++ *lun = scsi_device->lun;
++ break;
++ }
++ }
++ if (scsi_device == 0) {
++ return (-ENOENT);
++ }
++ /*
++ * Device found, return all data
++ */
++ *host = list->host->host_no;
++ *id = i;
++ return (0);
++ } /* memcmp */
++ } /* i < MAXFIBREDEVICES */
++ }
++ return (-ENOENT);
++}
++
++int qla2x00_get_wwn_from_scsi_info (int host, int id, unsigned long long *wwn) {
++scsi_qla_host_t *list;
++union wwnmap wwnendian;
++union wwnmap wwnendian2;
++int j, k;
++
++ /*
++ * Examine all QLogic hosts
++ */
++ for (list = qla2x00_hostlist; list; list = list->next) {
++ if (host == list->host->host_no) {
++ /*
++ * Get endian corrected 64 bit WWN
++ */
++
++ memcpy (&wwnendian2.wwn, list->fc_db[id].name, 8);
++ for (j = 0, k=7; j < 8; j++, k--) {
++ wwnendian.wwn_u8[j] = wwnendian2.wwn_u8[k];
++ }
++ *wwn = wwnendian.wwn;
++ return (0);
++ }
++ }
++ return (-ENOENT);
++}
++#endif /* CONFIG_SCSIFCHOTSWAP || CONFIG_GAMAP */
++
++/**************************************************************************
++* qla2x00_setup
++*
++* Handle Linux boot parameters. This routine allows for assigning a value
++* to a parameter with a ';' between the parameter and the value.
++* ie. qla2x00=arg0;arg1;...;argN;<properties .... properties> OR
++* via the command line.
++* ie. qla2x00 ql2xopts=arg0;arg1;...;argN;<properties .... properties>
++**************************************************************************/
++#if !defined(MODULE)
++static int __init
++qla2x00_setup(char *s)
++#else
++void
++qla2x00_setup(char *s)
++#endif
++{
++ char *cp, *np;
++ char *slots[MAXARGS];
++ char **argv = &slots[0];
++ static char buf[LINESIZE];
++ int argc, opts;
++
++#if !defined(MODULE)
++ if (s == NULL || *s == '\0')
++ return 0;
++#endif
++
++ /*
++ * Determine if we have any properties.
++ */
++ cp = s;
++ opts = 1;
++ while (*cp && (np = qla2x00_get_line(cp, buf)) != NULL) {
++ if (strncmp("scsi-qla",buf,8) == 0) {
++ DEBUG(printk("qla2100: devconf=%s\n",cp);)
++
++ ql2xdevconf = cp;
++ (opts > 0)? opts-- : 0;
++ break;
++ }
++ opts++;
++ cp = np;
++ }
++
++ /*
++ * Parse the args before the properties
++ */
++ if (opts) {
++ opts = (opts > MAXARGS-1)? MAXARGS-1: opts;
++ argc = qla2x00_get_tokens(s, argv, opts);
++ while (argc > 0) {
++ cp = *argv;
++ DEBUG(printk("scsi: found cmd arg =[%s]\n", cp));
++
++ if (strcmp(cp, "verbose") == 0) {
++ DEBUG(printk("qla2100: verbose\n"));
++ qla2x00_verbose++;
++ } else if (strcmp(cp, "quiet") == 0) {
++ qla2x00_quiet = 1;
++ } else if (strcmp(cp, "reinit_on_loopdown") == 0) {
++ qla2x00_reinit++;
++ DEBUG(printk("qla2100: reinit_on_loopdown\n"));
++ }
++ argc--, argv++;
++ }
++ }
++
++#if !defined(MODULE)
++ if (ql2xdevconf)
++ return 1;
++ else
++ return 0;
++#endif
++}
++
++#if !defined(MODULE)
++__setup("ql2xopts=", qla2x00_setup);
++#endif
++
++/********************** qla2x00_get_line *********************
++* qla2x00_get_line
++* Copy a substring from the specified string. The substring
++* consists of any number of chars seperated by white spaces (i.e. spaces)
++* and ending with a newline '\n' or a semicolon ';'.
++*
++* Enter:
++* str - orig string
++* line - substring
++*
++* Returns:
++* cp - pointer to next string
++* or
++* null - End of string
++*************************************************************/
++static char *
++qla2x00_get_line(char *str, char *line)
++{
++ register char *cp = str;
++ register char *sp = line;
++
++ /* skip preceeding spaces */
++ while (*cp && *cp == ' ')
++ ++cp;
++ while ((*cp) && *cp != '\n' && *cp != ';') /* end of line */
++ *sp++ = *cp++;
++
++ *sp = '\0';
++
++ DEBUG5(printk("%s(): %s\n", __func__, line));
++
++ if( (*cp) ) {
++ cp++;
++ return (cp);
++ }
++
++ return (NULL);
++}
++
++
++/**************************** get_tokens *********************
++* Parse command line into argv1, argv2, ... argvX
++* Arguments are seperated by white spaces and colons and end
++* with a NULL.
++*************************************************************/
++static int
++qla2x00_get_tokens(char *line, char **argv, int maxargs)
++{
++ register char *cp = line;
++ int count = 0;
++
++ while (*cp && count < maxargs) {
++ /* skip preceeding spaces */
++ while ((*cp) && *cp == ' ')
++ ++cp;
++ /* symbol starts here */
++ argv[count++] = cp;
++ /* skip symbols */
++ while ((*cp) && !(*cp == ' ' || *cp == ';' || *cp == ':'))
++ cp++;
++ /* replace comma or space with a null */
++ if((*cp) && (*cp ==' ' ) && argv[count-1] != cp)
++ *cp++ = '\0';
++ }
++ return (count);
++}
++
++/*
++* qla2x00_display_fc_names
++* This routine will the node names of the different devices found
++* after port inquiry.
++*
++* Input:
++* cmd = SCSI command structure
++*
++* Returns:
++* None.
++*/
++static void
++qla2x00_display_fc_names(scsi_qla_host_t *ha)
++{
++ uint16_t tgt;
++ os_tgt_t *tq;
++
++ /* Display the node name for adapter */
++ printk(KERN_INFO
++ "scsi-qla%d-adapter-node=%02x%02x%02x%02x%02x%02x%02x%02x\\;\n",
++ (int)ha->instance,
++ ha->init_cb->node_name[0],
++ ha->init_cb->node_name[1],
++ ha->init_cb->node_name[2],
++ ha->init_cb->node_name[3],
++ ha->init_cb->node_name[4],
++ ha->init_cb->node_name[5],
++ ha->init_cb->node_name[6],
++ ha->init_cb->node_name[7]);
++
++ /* display the port name for adapter */
++ printk(KERN_INFO
++ "scsi-qla%d-adapter-port=%02x%02x%02x%02x%02x%02x%02x%02x\\;\n",
++ (int)ha->instance,
++ ha->init_cb->port_name[0],
++ ha->init_cb->port_name[1],
++ ha->init_cb->port_name[2],
++ ha->init_cb->port_name[3],
++ ha->init_cb->port_name[4],
++ ha->init_cb->port_name[5],
++ ha->init_cb->port_name[6],
++ ha->init_cb->port_name[7]);
++
++ /* Print out device port names */
++ for (tgt = 0; tgt < MAX_TARGETS; tgt++) {
++ if ((tq = ha->otgt[tgt]) == NULL)
++ continue;
++
++ if (tq->vis_port == NULL)
++ continue;
++
++ switch (ha->binding_type) {
++ case BIND_BY_PORT_NAME:
++ printk(KERN_INFO
++ "scsi-qla%d-tgt-%d-di-0-port="
++ "%02x%02x%02x%02x%02x%02x%02x%02x\\;\n",
++ (int)ha->instance,
++ tgt,
++ tq->port_name[0],
++ tq->port_name[1],
++ tq->port_name[2],
++ tq->port_name[3],
++ tq->port_name[4],
++ tq->port_name[5],
++ tq->port_name[6],
++ tq->port_name[7]);
++
++ break;
++
++ case BIND_BY_PORT_ID:
++ printk(KERN_INFO
++ "scsi-qla%d-tgt-%d-di-0-pid="
++ "%02x%02x%02x\\;\n",
++ (int)ha->instance,
++ tgt,
++ tq->d_id.b.domain,
++ tq->d_id.b.area,
++ tq->d_id.b.al_pa);
++ break;
++
++ case BIND_BY_NODE_NAME:
++ printk(KERN_INFO
++ "scsi-qla%d-tgt-%d-di-0-node="
++ "%02x%02x%02x%02x%02x%02x%02x%02x\\;\n",
++ (int)ha->instance,
++ tgt,
++ tq->node_name[0],
++ tq->node_name[1],
++ tq->node_name[2],
++ tq->node_name[3],
++ tq->node_name[4],
++ tq->node_name[5],
++ tq->node_name[6],
++ tq->node_name[7]);
++ break;
++ }
++
++#if VSA
++ printk(KERN_INFO
++ "scsi-qla%d-target-%d-vsa=01;\n", (int)ha->instance, tgt);
++#endif
++ }
++}
++
++/*
++ * qla2x00_suspend_lun
++ * Suspend lun and start port down timer
++ *
++ * Input:
++ * ha = visable adapter block pointer.
++ * lq = lun queue
++ * cp = Scsi command pointer
++ * time = time in seconds
++ * count = number of times to let time expire
++ * delay_lun = non-zero, if lun should be delayed rather than suspended
++ *
++ * Return:
++ * QL_STATUS_SUCCESS -- suspended lun
++ * QL_STATUS_ERROR -- Didn't suspend lun
++ *
++ * Context:
++ * Interrupt context.
++ */
++uint8_t
++__qla2x00_suspend_lun(scsi_qla_host_t *ha,
++ os_lun_t *lq, int time, int count, int delay_lun)
++{
++ srb_t *sp;
++ struct list_head *list, *temp;
++ unsigned long flags;
++ uint8_t status;
++
++ /* if the lun_q is already suspended then don't do it again */
++ if (lq->q_state == LUN_STATE_READY ||lq->q_state == LUN_STATE_RUN) {
++
++ spin_lock_irqsave(&lq->q_lock, flags);
++ if (lq->q_state == LUN_STATE_READY) {
++ lq->q_max = count;
++ lq->q_count = 0;
++ }
++ /* Set the suspend time usually 6 secs */
++ atomic_set(&lq->q_timer, time);
++
++ /* now suspend the lun */
++ lq->q_state = LUN_STATE_WAIT;
++
++ if (delay_lun) {
++ set_bit(LUN_EXEC_DELAYED, &lq->q_flag);
++ DEBUG(printk(KERN_INFO
++ "scsi(%ld): Delay lun execution for %d secs, "
++ "count=%d, max count=%d, state=%d\n",
++ ha->host_no,
++ time,
++ lq->q_count, lq->q_max, lq->q_state));
++ } else {
++ DEBUG(printk(KERN_INFO
++ "scsi(%ld): Suspend lun for %d secs, count=%d, "
++ "max count=%d, state=%d\n",
++ ha->host_no,
++ time,
++ lq->q_count, lq->q_max, lq->q_state));
++ }
++ spin_unlock_irqrestore(&lq->q_lock, flags);
++
++ /*
++ * Remove all pending commands from request queue and put them
++ * in the scsi_retry queue.
++ */
++ spin_lock_irqsave(&ha->list_lock, flags);
++ list_for_each_safe(list, temp, &ha->pending_queue) {
++ sp = list_entry(list, srb_t, list);
++ if (sp->lun_queue != lq)
++ continue;
++
++ __del_from_pending_queue(ha, sp);
++
++ if (sp->cmd->allowed < count)
++ sp->cmd->allowed = count;
++ __add_to_scsi_retry_queue(ha,sp);
++
++ } /* list_for_each_safe */
++ spin_unlock_irqrestore(&ha->list_lock, flags);
++ status = QL_STATUS_SUCCESS;
++ } else {
++ status = QL_STATUS_ERROR;
++ }
++
++ return (status);
++
++}
++
++/*
++ * qla2x00_mark_device_lost Updates fcport state when device goes offline.
++ *
++ * Input: ha = adapter block pointer. fcport = port structure pointer.
++ *
++ * Return: None.
++ *
++ * Context:
++ */
++void qla2x00_mark_device_lost(scsi_qla_host_t *ha, fc_port_t *fcport)
++{
++ /*
++ * We may need to retry the login, so don't change the state of the
++ * port but do the retries.
++ */
++ if (atomic_read(&fcport->state) != FC_DEVICE_DEAD)
++ atomic_set(&fcport->state, FC_DEVICE_LOST);
++
++ if (fcport->login_retry == 0) {
++ fcport->login_retry = ha->login_retry_count;
++ set_bit(RELOGIN_NEEDED, &ha->dpc_flags);
++
++ DEBUG(printk("scsi(%ld): Port login retry: "
++ "%02x%02x%02x%02x%02x%02x%02x%02x, "
++ "id = 0x%04x retry cnt=%d\n",
++ ha->host_no,
++ fcport->port_name[0],
++ fcport->port_name[1],
++ fcport->port_name[2],
++ fcport->port_name[3],
++ fcport->port_name[4],
++ fcport->port_name[5],
++ fcport->port_name[6],
++ fcport->port_name[7],
++ fcport->loop_id,
++ fcport->login_retry));
++ }
++}
++
++/*
++ * qla2x00_mark_all_devices_lost
++ * Updates fcport state when device goes offline.
++ *
++ * Input:
++ * ha = adapter block pointer.
++ * fcport = port structure pointer.
++ *
++ * Return:
++ * None.
++ *
++ * Context:
++ */
++void
++qla2x00_mark_all_devices_lost(scsi_qla_host_t *ha)
++{
++ struct list_head *fcpl;
++ fc_port_t *fcport;
++
++ list_for_each(fcpl, &ha->fcports) {
++ fcport = list_entry(fcpl, fc_port_t, list);
++
++ /*
++ * No point in marking the device as lost, if the device is
++ * already DEAD.
++ */
++ if (atomic_read(&fcport->state) == FC_DEVICE_DEAD)
++ continue;
++
++ atomic_set(&fcport->state, FC_DEVICE_LOST);
++ }
++}
++
++/*
++* qla2x00_mem_alloc
++* Allocates adapter memory.
++*
++* Returns:
++* 0 = success.
++* 1 = failure.
++*/
++static uint8_t
++qla2x00_mem_alloc(scsi_qla_host_t *ha)
++{
++ uint8_t status = 1;
++ uint8_t i;
++ int retry= 10;
++ mbx_cmdq_t *ptmp;
++ mbx_cmdq_t *tmp_q_head;
++ mbx_cmdq_t *tmp_q_tail;
++
++ ENTER(__func__);
++
++ do {
++ /*
++ * This will loop only once if everything goes well, else some
++ * number of retries will be performed to get around a kernel
++ * bug where available mem is not allocated until after a
++ * little delay and a retry.
++ */
++
++#if defined(FC_IP_SUPPORT)
++ ha->risc_rec_q = pci_alloc_consistent(ha->pdev,
++ ((IP_BUFFER_QUEUE_DEPTH) * (sizeof(struct risc_rec_entry))),
++ &ha->risc_rec_q_dma);
++ if (ha->risc_rec_q == NULL) {
++ printk(KERN_WARNING
++ "scsi(%ld): Memory Allocation failed - "
++ "risc_rec_q\n",
++ ha->host_no);
++
++ set_current_state(TASK_INTERRUPTIBLE);
++ schedule_timeout(HZ/10);
++
++ continue;
++ }
++#endif /* #if defined(FC_IP_SUPPORT) */
++
++ ha->request_ring = pci_alloc_consistent(ha->pdev,
++ ((REQUEST_ENTRY_CNT + 1) * (sizeof(request_t))),
++ &ha->request_dma);
++ if (ha->request_ring == NULL) {
++ printk(KERN_WARNING
++ "scsi(%ld): Memory Allocation failed - "
++ "request_ring\n",
++ ha->host_no);
++
++ qla2x00_mem_free(ha);
++ set_current_state(TASK_INTERRUPTIBLE);
++ schedule_timeout(HZ/10);
++
++ continue;
++ }
++
++ ha->response_ring = pci_alloc_consistent(ha->pdev,
++ ((RESPONSE_ENTRY_CNT + 1) * (sizeof(response_t))),
++ &ha->response_dma);
++ if (ha->response_ring == NULL) {
++ printk(KERN_WARNING
++ "scsi(%ld): Memory Allocation failed - "
++ "response_ring\n",
++ ha->host_no);
++
++ qla2x00_mem_free(ha);
++ set_current_state(TASK_INTERRUPTIBLE);
++ schedule_timeout(HZ/10);
++
++ continue;
++ }
++
++ /* get consistent memory allocated for init control block */
++ ha->init_cb = pci_alloc_consistent(ha->pdev,
++ sizeof(init_cb_t), &ha->init_cb_dma);
++ if (ha->init_cb == NULL) {
++ printk(KERN_WARNING
++ "scsi(%ld): Memory Allocation failed - "
++ "init_cb\n",
++ ha->host_no);
++
++ qla2x00_mem_free(ha);
++ set_current_state(TASK_INTERRUPTIBLE);
++ schedule_timeout(HZ/10);
++
++ continue;
++ }
++ memset(ha->init_cb, 0, sizeof(init_cb_t));
++
++ /* Allocate ioctl related memory. */
++ if (qla2x00_alloc_ioctl_mem(ha)) {
++ printk(KERN_WARNING
++ "scsi(%ld): Memory Allocation failed - "
++ "ioctl_mem\n",
++ ha->host_no);
++
++ qla2x00_mem_free(ha);
++ set_current_state(TASK_INTERRUPTIBLE);
++ schedule_timeout(HZ/10);
++
++ continue;
++ }
++
++ if (qla2x00_allocate_sp_pool(ha)) {
++ printk(KERN_WARNING
++ "scsi(%ld): Memory Allocation failed - "
++ "qla2x00_allocate_sp_pool()\n",
++ ha->host_no);
++
++ qla2x00_mem_free(ha);
++ set_current_state(TASK_INTERRUPTIBLE);
++ schedule_timeout(HZ/10);
++
++ continue;
++ }
++
++ /*
++ * Allocate an initial list of mailbox semaphore queue to be
++ * used for serialization of the mailbox commands.
++ */
++ tmp_q_head = (void *)KMEM_ZALLOC(sizeof(mbx_cmdq_t), 20);
++ if (tmp_q_head == NULL) {
++ /* error */
++ printk(KERN_WARNING
++ "scsi(%ld): Memory Allocation failed - "
++ "mbx_cmd_q",
++ ha->host_no);
++
++ qla2x00_mem_free(ha);
++ set_current_state(TASK_INTERRUPTIBLE);
++ schedule_timeout(HZ/10);
++
++ continue;
++ }
++ ha->mbx_sem_pool_head = tmp_q_head;
++ tmp_q_tail = tmp_q_head;
++
++ /* Now try to allocate more */
++ for (i = 1; i < MBQ_INIT_LEN; i++) {
++ ptmp = (void *)KMEM_ZALLOC(sizeof(mbx_cmdq_t), 20 + i);
++ if (ptmp == NULL) {
++ /*
++ * Error. Just exit. If more is needed later
++ * they will be allocated at that time.
++ */
++ break;
++ }
++ tmp_q_tail->pnext = ptmp;
++ tmp_q_tail = ptmp;
++ }
++ ha->mbx_sem_pool_tail = tmp_q_tail;
++
++ /* Get consistent memory allocated for MS IOCB */
++ ha->ms_iocb = pci_alloc_consistent(ha->pdev,
++ sizeof(ms_iocb_entry_t), &ha->ms_iocb_dma);
++ if (ha->ms_iocb == NULL) {
++ /* error */
++ printk(KERN_WARNING
++ "scsi(%ld): Memory Allocation failed - ms_iocb\n",
++ ha->host_no);
++
++ qla2x00_mem_free(ha);
++ set_current_state(TASK_INTERRUPTIBLE);
++ schedule_timeout(HZ/10);
++
++ continue;
++ }
++ memset(ha->ms_iocb, 0, sizeof(ms_iocb_entry_t));
++
++ /* Get consistent memory allocated for CT SNS commands */
++ ha->ct_sns = pci_alloc_consistent(ha->pdev,
++ sizeof(struct ct_sns_pkt), &ha->ct_sns_dma);
++ if (ha->ct_sns == NULL) {
++ /* error */
++ printk(KERN_WARNING
++ "scsi(%ld): Memory Allocation failed - ct_sns\n",
++ ha->host_no);
++
++ qla2x00_mem_free(ha);
++ set_current_state(TASK_INTERRUPTIBLE);
++ schedule_timeout(HZ/10);
++
++ continue;
++ }
++ memset(ha->ct_sns, 0, sizeof(struct ct_sns_pkt));
++
++ /* Done all allocations without any error. */
++ status = 0;
++
++ } while (retry-- && status != 0);
++
++ if (status) {
++ printk(KERN_WARNING
++ "%s(): **** FAILED ****\n", __func__);
++ }
++
++ LEAVE(__func__);
++
++ return(status);
++}
++
++/*
++* qla2x00_mem_free
++* Frees all adapter allocated memory.
++*
++* Input:
++* ha = adapter block pointer.
++*/
++static void
++qla2x00_mem_free(scsi_qla_host_t *ha)
++{
++ uint32_t t;
++ struct list_head *fcpl, *fcptemp;
++ fc_port_t *fcport;
++ struct list_head *fcll, *fcltemp;
++ fc_lun_t *fclun;
++ mbx_cmdq_t *ptmp;
++ mbx_cmdq_t *tmp_q_head;
++ unsigned long wtime;/* max wait time if mbx cmd is busy. */
++ struct list_head *fcil, *fcitemp;
++ fc_initiator_t *fcinitiator;
++
++ ENTER(__func__);
++
++ if (ha == NULL) {
++ /* error */
++ DEBUG2(printk("%s(): ERROR invalid ha pointer.\n", __func__));
++ return;
++ }
++
++ /* Free the target queues */
++ for (t = 0; t < MAX_TARGETS; t++) {
++ qla2x00_tgt_free(ha, t);
++ }
++
++ /* Make sure all other threads are stopped. */
++ wtime = 60 * HZ;
++ while ((ha->dpc_wait != NULL || ha->mbx_q_head != NULL) && wtime) {
++ set_current_state(TASK_INTERRUPTIBLE);
++ wtime = schedule_timeout(wtime);
++ }
++
++ /* Now free the mbx sem pool */
++ tmp_q_head = ha->mbx_sem_pool_head;
++ while (tmp_q_head != NULL) {
++ ptmp = tmp_q_head->pnext;
++ KMEM_FREE(tmp_q_head, sizeof(mbx_cmdq_t));
++ tmp_q_head = ptmp;
++ }
++ ha->mbx_sem_pool_head = NULL;
++
++ /* free ioctl memory */
++ qla2x00_free_ioctl_mem(ha);
++
++ /* Free host database. */
++ list_for_each_safe(fcil, fcitemp, &ha->fcinitiators) {
++ fcinitiator = list_entry(fcil, fc_initiator_t, list);
++
++ list_del(&fcinitiator->list);
++ kfree(fcinitiator);
++ }
++ INIT_LIST_HEAD(&ha->fcinitiators);
++
++ /* free sp pool */
++ qla2x00_free_sp_pool(ha);
++
++ if (ha->ct_sns) {
++ pci_free_consistent(ha->pdev,
++ sizeof(struct ct_sns_pkt), ha->ct_sns, ha->ct_sns_dma);
++ }
++ if (ha->ms_iocb) {
++ pci_free_consistent(ha->pdev,
++ sizeof(ms_iocb_entry_t), ha->ms_iocb, ha->ms_iocb_dma);
++ }
++
++ if (ha->init_cb) {
++ pci_free_consistent(ha->pdev,
++ sizeof(init_cb_t), ha->init_cb, ha->init_cb_dma);
++ }
++
++ if (ha->request_ring) {
++ pci_free_consistent(ha->pdev,
++ ((REQUEST_ENTRY_CNT + 1) * (sizeof(request_t))),
++ ha->request_ring, ha->request_dma);
++ }
++
++ if (ha->response_ring) {
++ pci_free_consistent(ha->pdev,
++ ((RESPONSE_ENTRY_CNT + 1) * (sizeof(response_t))),
++ ha->response_ring, ha->response_dma);
++ }
++
++#if defined(FC_IP_SUPPORT)
++ if (ha->risc_rec_q) {
++ pci_free_consistent(ha->pdev,
++ ((IP_BUFFER_QUEUE_DEPTH) * (sizeof(struct risc_rec_entry))),
++ ha->risc_rec_q, ha->risc_rec_q_dma);
++ }
++ ha->risc_rec_q = NULL;
++ ha->risc_rec_q_dma = 0;
++#endif
++
++ ha->ct_sns = NULL;
++ ha->ms_iocb = NULL;
++
++ ha->init_cb = NULL;
++ ha->request_ring = NULL;
++ ha->request_dma = 0;
++ ha->response_ring = NULL;
++ ha->response_dma = 0;
++
++ list_for_each_safe(fcpl, fcptemp, &ha->fcports) {
++ fcport = list_entry(fcpl, fc_port_t, list);
++
++ /* fc luns */
++ list_for_each_safe(fcll, fcltemp, &fcport->fcluns) {
++ fclun = list_entry(fcll, fc_lun_t, list);
++
++ list_del_init(&fclun->list);
++ kfree(fclun);
++ }
++
++ /* fc ports */
++ list_del_init(&fcport->list);
++ kfree(fcport);
++ }
++ INIT_LIST_HEAD(&ha->fcports);
++
++ LEAVE(__func__);
++}
++
++/*
++ * qla2x00_allocate_sp_pool
++ * This routine is called during initialization to allocate
++ * memory for local srb_t.
++ *
++ * Input:
++ * ha = adapter block pointer.
++ *
++ * Context:
++ * Kernel context.
++ *
++ * Note: Sets the ref_count for non Null sp to one.
++ */
++uint8_t
++qla2x00_allocate_sp_pool(scsi_qla_host_t *ha)
++{
++ srb_t *sp;
++ int i;
++ uint8_t status = QL_STATUS_SUCCESS;
++
++ ENTER(__func__);
++
++ INIT_LIST_HEAD(&ha->free_queue);
++ ha->srb_alloc_cnt = 0;
++
++ ha->srb_pool_order = get_order(max_srbs * sizeof(srb_t));
++ ha->srb_pool =
++ (srb_t *) __get_free_pages(GFP_KERNEL, ha->srb_pool_order);
++ if (ha->srb_pool != NULL) {
++ for (i = 0, sp = ha->srb_pool; i < max_srbs; i++, sp++) {
++ memset(sp, 0, sizeof(srb_t));
++ __add_to_free_queue (ha, sp);
++ sp->magic = SRB_MAGIC;
++ sp->ref_num = ha->srb_alloc_cnt;
++ sp->host_no = ha->host_no;
++ atomic_set(&sp->ref_count, 0);
++
++ ha->srb_alloc_cnt++;
++ }
++ }
++
++ /*
++ * If we fail to allocte memory return an error
++ */
++ if (ha->srb_alloc_cnt == 0)
++ status = QL_STATUS_ERROR;
++
++ printk(KERN_INFO
++ "scsi(%ld): Allocated %d SRB(s).\n",
++ ha->host_no, ha->srb_alloc_cnt);
++
++ LEAVE(__func__);
++
++ return (status);
++}
++
++/*
++ * This routine frees all adapter allocated memory.
++ *
++ */
++void
++qla2x00_free_sp_pool( scsi_qla_host_t *ha)
++{
++ int cnt_free_srbs = 0;
++ srb_t *sp;
++ struct list_head *list, *temp;
++
++ /*
++ * Count the number of entries, remove the entries from the list, then
++ * free the pool.
++ */
++ list_for_each_safe(list, temp, &ha->free_queue) {
++ sp = list_entry(list, srb_t, list);
++
++ __del_from_free_queue(ha, sp);
++ cnt_free_srbs++;
++ }
++ free_pages((unsigned long)ha->srb_pool, ha->srb_pool_order);
++
++ if (cnt_free_srbs != ha->srb_alloc_cnt) {
++ DEBUG(printk("scsi(%ld): Did not free all srbs, Free count = "
++ "%d, Alloc Count = %d\n",
++ ha->host_no, cnt_free_srbs, ha->srb_alloc_cnt));
++ printk(KERN_INFO
++ "scsi(%ld): Did not free all srbs, Free count = %d, "
++ "Alloc Count = %d\n",
++ ha->host_no, cnt_free_srbs, ha->srb_alloc_cnt);
++ }
++}
++
++
++
++/**************************************************************************
++* qla2x00_do_dpc
++* This kernel thread is a task that is schedule by the interrupt handler
++* to perform the background processing for interrupts.
++*
++* Notes:
++* This task always run in the context of a kernel thread. It
++* is kick-off by the driver's detect code and starts up
++* up one per adapter. It immediately goes to sleep and waits for
++* some fibre event. When either the interrupt handler or
++* the timer routine detects a event it will one of the task
++* bits then wake us up.
++**************************************************************************/
++static int
++qla2x00_do_dpc(void *data)
++{
++ DECLARE_MUTEX_LOCKED(sem);
++ scsi_qla_host_t *ha;
++ fcdev_t dev;
++ struct list_head *fcpl;
++ fc_port_t *fcport;
++ os_lun_t *q;
++ srb_t *sp;
++ uint8_t status;
++ uint32_t t;
++ unsigned long flags = 0;
++ struct list_head *list, *templist;
++ int dead_cnt, online_cnt;
++
++ ha = (scsi_qla_host_t *)data;
++
++ lock_kernel();
++
++ daemonize("%s_dpc%ld", DRIVER_NAME, ha->host_no);
++ allow_signal(SIGTERM);
++
++ ha->dpc_wait = &sem;
++
++ unlock_kernel();
++
++ complete(&ha->dpc_inited);
++
++ while (1) {
++ /*
++ * If we get a signal, it means we are supposed to go
++ * away and die. This typically happens if the user is
++ * trying to unload a module.
++ */
++ DEBUG3(printk("qla2x00: DPC handler sleeping\n"));
++
++ down_interruptible(&sem);
++
++ if (signal_pending(current))
++ break; /* get out */
++
++ if (ha->dpc_should_die)
++ break;
++
++ if (!list_empty(&ha->done_queue))
++ schedule_work(&ha->run_qla_task);
++
++ DEBUG3(printk("qla2x00: DPC handler waking up\n"));
++
++ /* Initialization not yet finished. Don't do anything yet. */
++ if (!ha->init_done || ha->dpc_active)
++ continue;
++
++ DEBUG3(printk("scsi(%ld): DPC handler\n", ha->host_no));
++
++ /* spin_lock_irqsave(&io_request_lock, ha->cpu_flags);*/
++ ha->dpc_active = 1;
++
++ /* Determine what action is necessary */
++
++ /* Process commands in retry queue */
++ if (test_and_clear_bit(PORT_RESTART_NEEDED, &ha->dpc_flags)) {
++ DEBUG(printk("scsi(%ld): DPC checking retry_q. "
++ "total=%d\n",
++ ha->host_no, ha->retry_q_cnt));
++
++ spin_lock_irqsave(&ha->list_lock, flags);
++ dead_cnt = online_cnt = 0;
++ list_for_each_safe(list, templist, &ha->retry_queue) {
++ sp = list_entry(list, srb_t, list);
++ q = sp->lun_queue;
++ DEBUG3(printk("scsi(%ld): pid=%ld sp=%p, "
++ "spflags=0x%x, q_flag= 0x%lx\n",
++ ha->host_no,
++ sp->cmd->serial_number,
++ sp, sp->flags, q->q_flag));
++
++ if (q == NULL)
++ continue;
++ fcport = q->fclun->fcport;
++
++ if (atomic_read(&fcport->state) ==
++ FC_DEVICE_DEAD) {
++
++ __del_from_retry_queue(ha, sp);
++ CMD_RESULT(sp->cmd) =
++ DID_NO_CONNECT << 16;
++ CMD_HANDLE(sp->cmd) =
++ (unsigned char *) NULL;
++ __add_to_done_queue(ha, sp);
++ dead_cnt++;
++ } else if (atomic_read(&fcport->state) !=
++ FC_DEVICE_LOST) {
++
++ __del_from_retry_queue(ha, sp);
++ CMD_RESULT(sp->cmd) =
++ DID_BUS_BUSY << 16;
++ CMD_HANDLE(sp->cmd) =
++ (unsigned char *) NULL;
++ __add_to_done_queue(ha, sp);
++ online_cnt++;
++ }
++ } /* list_for_each_safe() */
++ spin_unlock_irqrestore(&ha->list_lock, flags);
++
++ DEBUG(printk("scsi(%ld): done processing retry queue "
++ "- dead=%d, online=%d\n ",
++ ha->host_no, dead_cnt, online_cnt));
++ }
++
++ /* Process commands in scsi retry queue */
++ if (test_and_clear_bit(SCSI_RESTART_NEEDED, &ha->dpc_flags)) {
++ /*
++ * Any requests we want to delay for some period is put
++ * in the scsi retry queue with a delay added. The
++ * timer will schedule a "scsi_restart_needed" every
++ * second as long as there are requests in the scsi
++ * queue.
++ */
++ DEBUG(printk("scsi(%ld): DPC checking scsi "
++ "retry_q.total=%d\n",
++ ha->host_no, ha->scsi_retry_q_cnt));
++
++ online_cnt = 0;
++ spin_lock_irqsave(&ha->list_lock, flags);
++ list_for_each_safe(list,
++ templist,
++ &ha->scsi_retry_queue) {
++
++ sp = list_entry(list, srb_t, list);
++ q = sp->lun_queue;
++
++ DEBUG3(printk("scsi(%ld): scsi_retry_q: "
++ "pid=%ld sp=%p, spflags=0x%x, "
++ "q_flag= 0x%lx,q_state=%d\n",
++ ha->host_no,
++ sp->cmd->serial_number,
++ sp, sp->flags, q->q_flag, q->q_state));
++
++ /* Was this lun suspended */
++ if (q->q_state != LUN_STATE_WAIT) {
++ online_cnt++;
++ __del_from_scsi_retry_queue(ha, sp);
++ __add_to_retry_queue(ha,sp);
++ }
++
++ /* Was this command suspended for N secs */
++ if (sp->delay != 0) {
++ sp->delay--;
++ if (sp->delay == 0) {
++ online_cnt++;
++ __del_from_scsi_retry_queue(
++ ha, sp);
++ __add_to_retry_queue(ha,sp);
++ }
++ }
++ }
++ spin_unlock_irqrestore(&ha->list_lock, flags);
++
++ DEBUG(if (online_cnt > 0))
++ DEBUG(printk("scsi(%ld): dpc() found scsi reqs to "
++ "restart= %d\n",
++ ha->host_no, online_cnt));
++ }
++
++ if (ha->flags.mbox_busy) {
++ if (!list_empty(&ha->done_queue))
++ schedule_work(&ha->run_qla_task);
++
++ ha->dpc_active = 0;
++ continue;
++ }
++
++ if (test_and_clear_bit(ISP_ABORT_NEEDED, &ha->dpc_flags)) {
++
++ DEBUG(printk("scsi(%ld): dpc: sched "
++ "qla2x00_abort_isp ha = %p\n",
++ ha->host_no, ha));
++ if (!(test_and_set_bit(ABORT_ISP_ACTIVE,
++ &ha->dpc_flags))) {
++
++ if (qla2x00_abort_isp(ha, 0)) {
++ /* failed. retry later */
++ set_bit(ISP_ABORT_NEEDED,
++ &ha->dpc_flags);
++ }
++ clear_bit(ABORT_ISP_ACTIVE, &ha->dpc_flags);
++ }
++ DEBUG(printk("scsi(%ld): dpc: qla2x00_abort_isp end\n",
++ ha->host_no));
++ }
++
++ if (test_and_clear_bit(LOOP_RESET_NEEDED, &ha->dpc_flags)) {
++
++ DEBUG(printk("scsi(%ld): Loop Reset Needed -- "
++ "calling qla2x00_loop_reset().\n",
++ ha->host_no));
++
++ qla2x00_loop_reset(ha);
++ }
++
++ if (test_and_clear_bit(DEVICE_ABORT_NEEDED, &ha->dpc_flags)) {
++
++ DEBUG(printk("scsi(%ld): Device Abort Needed -- "
++ "calling qla2x00_abort_device().\n",
++ ha->host_no));
++
++ t = ha->reset_tgt_id;
++ if (ha->otgt[t] && ha->otgt[t]->vis_port)
++ qla2x00_abort_device(ha,
++ ha->otgt[t]->vis_port->loop_id,
++ ha->reset_lun);
++ }
++
++ if (test_and_clear_bit(RESET_MARKER_NEEDED, &ha->dpc_flags) &&
++ (!(test_and_set_bit(RESET_ACTIVE, &ha->dpc_flags)))) {
++
++ DEBUG(printk("scsi(%ld): qla2x00_reset_marker()\n",
++ ha->host_no));
++
++ qla2x00_rst_aen(ha);
++ clear_bit(RESET_ACTIVE, &ha->dpc_flags);
++ }
++
++ /* Retry each device up to login retry count */
++ if ((test_and_clear_bit(RELOGIN_NEEDED, &ha->dpc_flags)) &&
++ !test_bit(LOOP_RESYNC_NEEDED, &ha->dpc_flags) &&
++ ha->loop_state != LOOP_DOWN) {
++
++ DEBUG(printk("scsi(%ld): qla2x00_port_login()\n",
++ ha->host_no));
++
++ list_for_each(fcpl, &ha->fcports) {
++ fcport = list_entry(fcpl, fc_port_t, list);
++
++ /*
++ * If the port is not ONLINE then try to login
++ * to it if we haven't run out of retries.
++ */
++ if (atomic_read(&fcport->state) != FC_ONLINE &&
++ fcport->login_retry) {
++
++ fcport->login_retry--;
++ memset(&dev, 0, sizeof(fcdev_t));
++ dev.loop_id = fcport->old_loop_id;
++ dev.d_id.b24 = fcport->d_id.b24;
++ if (ha->fc_db[fcport->dev_id].flag &
++ DEV_PUBLIC)
++ status = qla2x00_fabric_login(
++ ha, &dev);
++ else
++ status =
++ qla2x00_local_device_login(
++ ha,
++ (dev.loop_id & 0xff));
++
++ if (status == QL_STATUS_SUCCESS) {
++ ha->fc_db[fcport->dev_id].loop_id = dev.loop_id;
++ fcport->loop_id = dev.loop_id;
++ fcport->old_loop_id = dev.loop_id;
++
++ DEBUG(printk("scsi(%ld): port login OK: logged in ID 0x%x\n",
++ ha->host_no, fcport->loop_id));
++
++ fcport->port_login_retry_count =
++ ha->port_down_retry_count * PORT_RETRY_TIME;
++ atomic_set(&fcport->state, FC_ONLINE);
++ atomic_set(&fcport->port_down_timer,
++ ha->port_down_retry_count * PORT_RETRY_TIME);
++
++ fcport->login_retry = 0;
++ } else if (status == 1) {
++ if (dev.loop_id != fcport->old_loop_id) {
++ fcport->old_loop_id = dev.loop_id;
++ ha->fc_db[fcport->dev_id].loop_id = dev.loop_id;
++ }
++
++ set_bit(RELOGIN_NEEDED, &ha->dpc_flags);
++ /* retry the login again */
++ DEBUG(printk("scsi(%ld): Retrying %d login again loop_id 0x%x\n",
++ ha->host_no,
++ fcport->login_retry, fcport->loop_id));
++ } else {
++ fcport->login_retry = 0;
++ }
++ }
++ if (test_bit(LOOP_RESYNC_NEEDED, &ha->dpc_flags))
++ break;
++ }
++ DEBUG(printk("scsi(%ld): qla2x00_port_login - end\n",
++ ha->host_no));
++ }
++
++ if ((test_bit(LOGIN_RETRY_NEEDED, &ha->dpc_flags)) &&
++ ha->loop_state != LOOP_DOWN ) {
++
++ clear_bit(LOGIN_RETRY_NEEDED, &ha->dpc_flags);
++ DEBUG(printk("scsi(%ld): qla2x00_login_retry()\n",
++ ha->host_no));
++
++ set_bit(LOOP_RESYNC_NEEDED, &ha->dpc_flags);
++
++ DEBUG(printk("scsi(%ld): qla2x00_login_retry - end\n",
++ ha->host_no));
++ }
++
++ if (test_and_clear_bit(LOOP_RESYNC_NEEDED, &ha->dpc_flags)) {
++
++ DEBUG(printk("scsi(%ld): qla2x00_loop_resync()\n",
++ ha->host_no));
++
++ if (!(test_and_set_bit(LOOP_RESYNC_ACTIVE,
++ &ha->dpc_flags))) {
++
++ qla2x00_loop_resync(ha);
++
++ clear_bit(LOOP_RESYNC_ACTIVE, &ha->dpc_flags);
++ }
++
++ DEBUG(printk("scsi(%ld): qla2x00_loop_resync - end\n",
++ ha->host_no));
++ }
++
++ if (ha->flags.failover_enabled) {
++ /*
++ * If we are not processing a ioctl or one of
++ * the ports are still MISSING or need a resync
++ * then process the failover event.
++ */
++ if (!test_bit(CFG_ACTIVE, &ha->cfg_flags)) {
++ if (qla2x00_check_for_devices_online(ha)) {
++ if (test_and_clear_bit(FAILOVER_EVENT, &ha->dpc_flags)) {
++
++ DEBUG(printk("scsi(%ld): qla2x00_cfg_event_notify()\n",
++ ha->host_no));
++
++ if (ha->flags.online) {
++ qla2x00_cfg_event_notify(ha, ha->failover_type);
++ }
++
++ DEBUG(printk("scsi(%ld): qla2x00_cfg_event_notify - end\n",
++ ha->host_no));
++ }
++ }
++
++ if (test_and_clear_bit(FAILOVER_NEEDED, &ha->dpc_flags)) {
++ /*
++ * Get any requests from failover queue
++ */
++ DEBUG(printk("scsi(%ld): qla2x00_process_failover()\n",
++ ha->host_no));
++
++ qla2x00_process_failover(ha);
++
++ DEBUG(printk("scsi(%ld): qla2x00_process_failover - end\n",
++ ha->host_no));
++ }
++ }
++ }
++
++ if (test_bit(RESTART_QUEUES_NEEDED, &ha->dpc_flags)) {
++ DEBUG(printk("scsi(%ld): qla2x00_restart_queues()\n",
++ ha->host_no));
++
++ qla2x00_restart_queues(ha,FALSE);
++
++ DEBUG(printk("scsi(%ld): qla2x00_restart_queues - end\n",
++ ha->host_no));
++ }
++
++ if (test_bit(ABORT_QUEUES_NEEDED, &ha->dpc_flags)) {
++
++ DEBUG(printk("scsi(%ld): qla2x00_abort_queues()\n",
++ ha->host_no));
++
++ qla2x00_abort_queues(ha, FALSE);
++
++ DEBUG(printk("scsi(%ld): qla2x00_abort_queues - end\n",
++ ha->host_no));
++ }
++
++ if (!ha->interrupts_on)
++ qla2x00_enable_intrs(ha);
++
++ if (!list_empty(&ha->done_queue))
++ schedule_work(&ha->run_qla_task);
++
++ ha->dpc_active = 0;
++ } /* End of while(1) */
++
++ DEBUG(printk("scsi(%ld): DPC handler exiting\n", ha->host_no));
++
++ /*
++ * Make sure that nobody tries to wake us up again.
++ */
++ ha->dpc_wait = NULL;
++ ha->dpc_active = 0;
++
++ complete_and_exit(&ha->dpc_exited, 0);
++}
++
++/*
++ * qla2x00_abort_queues
++ * Abort all commands on queues on device
++ *
++ * Input:
++ * ha = adapter block pointer.
++ *
++ * Context:
++ * Interrupt context.
++ */
++void
++qla2x00_abort_queues(scsi_qla_host_t *ha, uint8_t doneqflg)
++{
++
++ srb_t *sp;
++ struct list_head *list, *temp;
++ unsigned long flags;
++
++ ENTER(__func__);
++
++ clear_bit(ABORT_QUEUES_NEEDED, &ha->dpc_flags);
++
++ /* Return all commands device queues. */
++ spin_lock_irqsave(&ha->list_lock,flags);
++ list_for_each_safe(list, temp, &ha->pending_queue) {
++ sp = list_entry(list, srb_t, list);
++
++ if (sp->flags & SRB_ABORTED)
++ continue;
++
++ /* Remove srb from LUN queue. */
++ __del_from_pending_queue(ha, sp);
++
++ /* Set ending status. */
++ CMD_RESULT(sp->cmd) = DID_BUS_BUSY << 16;
++
++ __add_to_done_queue(ha, sp);
++ }
++ spin_unlock_irqrestore(&ha->list_lock, flags);
++
++ LEAVE(__func__);
++}
++
++/*
++ * qla2x00_check_for_devices_online
++ *
++ * Check fcport state of all devices to make sure online.
++ *
++ * Input:
++ * ha = adapter block pointer.
++ *
++ * Return:
++ * None.
++ *
++ * Context:
++ */
++static uint8_t
++qla2x00_check_for_devices_online(scsi_qla_host_t *ha)
++{
++ struct list_head *fcpl;
++ fc_port_t *fcport;
++ int found, cnt;
++
++ found = 0;
++ cnt = 0;
++
++ list_for_each(fcpl, &ha->fcports) {
++ fcport = list_entry(fcpl, fc_port_t, list);
++
++ if ((atomic_read(&fcport->state) == FC_ONLINE) ||
++ (atomic_read(&fcport->state) == FC_DEVICE_DEAD))
++ found++;
++
++ cnt++;
++ }
++ if (cnt == found) {
++ DEBUG5(printk("%s(%ld): all online\n",
++ __func__,
++ ha->host_no);)
++ return 1;
++ } else
++ return 0;
++}
++
++/*
++* qla2x00_rst_aen
++* Processes asynchronous reset.
++*
++* Input:
++* ha = adapter block pointer.
++*/
++static void
++qla2x00_rst_aen(scsi_qla_host_t *ha)
++{
++ ENTER(__func__);
++
++ if (ha->flags.online && !ha->flags.reset_active &&
++ !atomic_read(&ha->loop_down_timer) &&
++ !(test_bit(ABORT_ISP_ACTIVE, &ha->dpc_flags))) {
++
++ /* 10/15 ha->flags.reset_active = TRUE; */
++ do {
++ clear_bit(RESET_MARKER_NEEDED, &ha->dpc_flags);
++
++ /*
++ * Issue marker command only when we are going to start
++ * the I/O.
++ */
++ ha->marker_needed = 1;
++ } while (!atomic_read(&ha->loop_down_timer) &&
++ (test_bit(RESET_MARKER_NEEDED, &ha->dpc_flags)));
++
++ /* 10/15 ha->flags.reset_active = FALSE; */
++ }
++
++ LEAVE(__func__);
++}
++
++
++/*
++ * This routine will alloacte SP from the free queue
++ * input:
++ * scsi_qla_host_t *
++ * output:
++ * srb_t * or NULL
++ */
++srb_t *
++qla2x00_get_new_sp(scsi_qla_host_t *ha)
++{
++ srb_t * sp = NULL;
++ ulong flags;
++
++ spin_lock_irqsave(&ha->list_lock, flags);
++ if (!list_empty(&ha->free_queue)) {
++ sp = list_entry(ha->free_queue.next, srb_t, list);
++ __del_from_free_queue(ha, sp);
++ }
++ spin_unlock_irqrestore(&ha->list_lock, flags);
++
++ if (sp) {
++#if defined(QL_DEBUG_LEVEL_4)
++ if ((int)atomic_read(&sp->ref_count) != 0) {
++ printk(KERN_WARNING
++ "scsi(%ld): WARNING ref_count not zero!\n",
++ ha->host_no);
++ }
++#endif
++
++ sp_get(ha, sp);
++ }
++
++ return (sp);
++}
++
++/**************************************************************************
++* qla2x00_timer
++*
++* Description:
++* One second timer
++*
++* Context: Interrupt
++***************************************************************************/
++static void
++qla2x00_timer(scsi_qla_host_t *ha)
++{
++ int t,l;
++ unsigned long cpu_flags = 0;
++ struct list_head *fcpl;
++ fc_port_t *fcport;
++ os_lun_t *lq;
++ os_tgt_t *tq;
++ int start_dpc = 0;
++
++ /*
++ * We try and restart any request in the retry queue every second.
++ */
++ if (!list_empty(&ha->retry_queue)) {
++ set_bit(PORT_RESTART_NEEDED, &ha->dpc_flags);
++ start_dpc++;
++ }
++
++ /*
++ * We try and restart any request in the scsi_retry queue every second.
++ */
++ if (!list_empty(&ha->scsi_retry_queue)) {
++ set_bit(SCSI_RESTART_NEEDED, &ha->dpc_flags);
++ start_dpc++;
++ }
++
++ /*
++ * We try and failover any request in the failover queue every second.
++ */
++ if (!list_empty(&ha->failover_queue)) {
++ set_bit(FAILOVER_NEEDED, &ha->dpc_flags);
++ start_dpc++;
++ }
++
++ /*
++ * Ports - Port down timer.
++ *
++ * Whenever, a port is in the LOST state we start decrementing its port
++ * down timer every second until it reaches zero. Once it reaches zero
++ * the port it marked DEAD.
++ */
++ t = 0;
++ list_for_each(fcpl, &ha->fcports) {
++ fcport = list_entry(fcpl, fc_port_t, list);
++
++ if (atomic_read(&fcport->state) == FC_DEVICE_LOST) {
++
++ if (atomic_read(&fcport->port_down_timer) == 0)
++ continue;
++
++ if (atomic_dec_and_test(&fcport->port_down_timer) != 0)
++ atomic_set(&fcport->state, FC_DEVICE_DEAD);
++
++ DEBUG(printk("scsi(%ld): fcport-%d - port retry count: "
++ "%d remainning\n",
++ ha->host_no,
++ t, atomic_read(&fcport->port_down_timer)));
++ }
++ t++;
++ } /* End of for fcport */
++
++ /*
++ * LUNS - lun suspend timer.
++ *
++ * Whenever, a lun is suspended the timer starts decrementing its
++ * suspend timer every second until it reaches zero. Once it reaches
++ * zero the lun retry count is decremented.
++ */
++
++ /*
++ * FIXME(dg) - Need to convert this linear search of luns into a search
++ * of a list of suspended luns.
++ */
++ for (t = 0; t < ha->max_targets; t++) {
++ if ((tq = ha->otgt[t]) == NULL)
++ continue;
++
++ for (l = 0; l < ha->max_luns; l++) {
++ if ((lq = (os_lun_t *) tq->olun[l]) == NULL)
++ continue;
++
++ spin_lock_irqsave(&lq->q_lock, cpu_flags);
++ if (lq->q_state == LUN_STATE_WAIT &&
++ atomic_read(&lq->q_timer) != 0) {
++
++ if (atomic_dec_and_test(&lq->q_timer) != 0) {
++ /*
++ * A delay should immediately
++ * transition to a READY state
++ */
++ if (test_and_clear_bit(LUN_EXEC_DELAYED,
++ &lq->q_flag)) {
++ lq->q_state = LUN_STATE_READY;
++ }
++ else {
++ lq->q_count++;
++ if (lq->q_count == lq->q_max)
++ lq->q_state =
++ LUN_STATE_TIMEOUT;
++ else
++ lq->q_state =
++ LUN_STATE_RUN;
++ }
++ }
++ DEBUG3(printk("scsi(%ld): lun%d - timer %d, "
++ "count=%d, max=%d, state=%d\n",
++ ha->host_no,
++ l,
++ atomic_read(&lq->q_timer),
++ lq->q_count, lq->q_max, lq->q_state));
++ }
++ spin_unlock_irqrestore(&lq->q_lock, cpu_flags);
++ } /* End of for luns */
++ } /* End of for targets */
++
++ /* Loop down handler. */
++ if (atomic_read(&ha->loop_down_timer) > 0 &&
++ !(test_bit(ABORT_ISP_ACTIVE, &ha->dpc_flags)) && ha->flags.online) {
++
++ /* dg 10/30 if (atomic_read(&ha->loop_down_timer) == LOOP_DOWN_TIME) { */
++ if (atomic_read(&ha->loop_down_timer) ==
++ ha->loop_down_abort_time ) {
++
++ DEBUG(printk("scsi(%ld): Loop Down - aborting the "
++ "queues before time expire\n",
++ ha->host_no));
++
++ set_bit(ABORT_QUEUES_NEEDED, &ha->dpc_flags);
++ start_dpc++;
++ }
++
++ /* if the loop has been down for 4 minutes, reinit adapter */
++ if (atomic_dec_and_test(&ha->loop_down_timer) != 0) {
++ DEBUG(printk("scsi(%ld): Loop down exceed 4 mins - "
++ "restarting queues.\n",
++ ha->host_no));
++
++ set_bit(RESTART_QUEUES_NEEDED, &ha->dpc_flags);
++ start_dpc++;
++ if (!(ha->device_flags & DFLG_NO_CABLE) &&
++ qla2x00_reinit && !ha->flags.failover_enabled) {
++
++ DEBUG(printk("scsi(%ld): Loop down - "
++ "aborting ISP.\n",
++ ha->host_no));
++
++ set_bit(ISP_ABORT_NEEDED, &ha->dpc_flags);
++ }
++ }
++ DEBUG3(printk("scsi(%ld): Loop Down - seconds remainning %d\n",
++ ha->host_no,
++ atomic_read(&ha->loop_down_timer)));
++ }
++
++ /*
++ * Done Q Handler -- dgFIXME This handler will kick off doneq if we
++ * haven't process it in 2 seconds.
++ */
++ if (!list_empty(&ha->done_queue))
++ schedule_work(&ha->run_qla_task);
++
++#if QLA2100_LIPTEST
++ /*
++ * This block is used to periodically schedule isp abort after
++ * qla2x00_lip flag is set.
++ */
++
++ /*
++ if (qla2x00_lip && (ha->forceLip++) == (60*2)) {
++ printk("timer: schedule isp abort.\n");
++ set_bit(ISP_ABORT_NEEDED, &ha->dpc_flags);
++ ha->forceLip = 0;
++ }
++ */
++
++ /*
++ * This block is used to periodically schedule mailbox cmd timeout
++ * simulation
++ */
++ if (qla2x00_lip && (ha->forceLip++) == (60*6)) {
++ printk("qla2x00_timer: Going to force mbx timeout\n");
++
++ ha->forceLip = 0;
++ mbxtimeout = 1;
++ }
++#endif
++
++ if (test_bit(FAILOVER_EVENT_NEEDED, &ha->dpc_flags)) {
++ if (ha->failback_delay) {
++ ha->failback_delay--;
++ if (ha->failback_delay == 0) {
++ set_bit(FAILOVER_EVENT, &ha->dpc_flags);
++ clear_bit(FAILOVER_EVENT_NEEDED,
++ &ha->dpc_flags);
++ }
++ } else {
++ set_bit(FAILOVER_EVENT, &ha->dpc_flags);
++ clear_bit(FAILOVER_EVENT_NEEDED, &ha->dpc_flags);
++ }
++ }
++
++ /* Schedule the DPC routine if needed */
++ if ((test_bit(ISP_ABORT_NEEDED, &ha->dpc_flags) ||
++ test_bit(LOOP_RESYNC_NEEDED, &ha->dpc_flags) ||
++ start_dpc ||
++ test_bit(LOGIN_RETRY_NEEDED, &ha->dpc_flags) ||
++ test_bit(FAILOVER_EVENT, &ha->dpc_flags) ||
++ test_bit(FAILOVER_NEEDED, &ha->dpc_flags) ||
++ test_bit(MAILBOX_CMD_NEEDED, &ha->dpc_flags)) &&
++ ha->dpc_wait && !ha->dpc_active ) {
++
++ up(ha->dpc_wait);
++ }
++
++ qla2x00_restart_timer(ha, WATCH_INTERVAL);
++}
++
++/*
++ * qla2x00_extend_timeout
++ * This routine will extend the timeout to the specified value.
++ *
++ * Input:
++ * cmd = SCSI command structure
++ *
++ * Returns:
++ * None.
++ */
++void
++qla2x00_extend_timeout(Scsi_Cmnd *cmd, int timeout)
++{
++ srb_t *sp = (srb_t *) CMD_SP(cmd);
++ u_long our_jiffies = (timeout * HZ) + jiffies;
++
++ sp->ext_history= 0;
++ sp->e_start = jiffies;
++ if (cmd->eh_timeout.function) {
++ mod_timer(&cmd->eh_timeout,our_jiffies);
++ sp->ext_history |= 1;
++ }
++ if (sp->timer.function != NULL) {
++ /*
++ * Our internal timer should timeout before the midlayer has a
++ * chance begin the abort process
++ */
++ mod_timer(&sp->timer,our_jiffies - (QLA_CMD_TIMER_DELTA * HZ));
++
++ sp->ext_history |= 2;
++ }
++}
++
++/**************************************************************************
++* qla2x00_cmd_timeout
++*
++* Description:
++* Handles the command if it times out in any state.
++*
++* Input:
++* sp - pointer to validate
++*
++* Returns:
++* None.
++* Note:Need to add the support for if( sp->state == SRB_FAILOVER_STATE).
++**************************************************************************/
++static void
++qla2x00_cmd_timeout(srb_t *sp)
++{
++ int t, l;
++ int processed;
++ scsi_qla_host_t *vis_ha, *dest_ha;
++ Scsi_Cmnd *cmd;
++ ulong flags;
++#if defined(QL_DEBUG_LEVEL_3)
++ ulong cpu_flags;
++#endif
++ fc_port_t *fcport;
++
++ cmd = sp->cmd;
++ vis_ha = (scsi_qla_host_t *)cmd->device->host->hostdata;
++
++ DEBUG3(printk("cmd_timeout: Entering sp->state = %x\n", sp->state));
++
++ t = SCSI_TCN_32(cmd);
++ l = SCSI_LUN_32(cmd);
++ fcport = sp->fclun->fcport;
++ dest_ha = sp->ha;
++
++ /*
++ * If IO is found either in retry Queue
++ * OR in Lun Queue
++ * Return this IO back to host
++ */
++ spin_lock_irqsave(&vis_ha->list_lock, flags);
++ processed = 0;
++ if (sp->state == SRB_PENDING_STATE) {
++ __del_from_pending_queue(vis_ha, sp);
++ DEBUG2(printk("scsi(%ld): Found in Pending queue pid %ld, "
++ "State = %x., fcport state=%d jiffies=%lx\n",
++ vis_ha->host_no,
++ sp->cmd->serial_number, sp->state,
++ atomic_read(&fcport->state), jiffies));
++
++ /*
++ * If FC_DEVICE is marked as dead return the cmd with
++ * DID_NO_CONNECT status. Otherwise set the host_byte to
++ * DID_BUS_BUSY to let the OS retry this cmd.
++ */
++ if (atomic_read(&fcport->state) == FC_DEVICE_DEAD) {
++ cmd->result = DID_NO_CONNECT << 16;
++ } else {
++ cmd->result = DID_BUS_BUSY << 16;
++ }
++ __add_to_done_queue(vis_ha, sp);
++ processed++;
++ }
++ spin_unlock_irqrestore(&vis_ha->list_lock, flags);
++
++ if (processed) {
++ schedule_work(&vis_ha->run_qla_task);
++
++ return;
++ }
++
++ spin_lock_irqsave(&dest_ha->list_lock, flags);
++ if ((sp->state == SRB_RETRY_STATE) ||
++ (sp->state == SRB_SCSI_RETRY_STATE) ||
++ (sp->state == SRB_FAILOVER_STATE)) {
++
++ DEBUG2(printk("scsi(%ld): Found in (Scsi) Retry queue or "
++ "failover Q pid %ld, State = %x., fcport state=%d "
++ "jiffies=%lx retried=%d\n",
++ dest_ha->host_no,
++ sp->cmd->serial_number, sp->state,
++ atomic_read(&fcport->state),
++ jiffies, sp->cmd->retries));
++
++ if ((sp->state == SRB_RETRY_STATE)) {
++ __del_from_retry_queue(dest_ha, sp);
++ } else if ((sp->state == SRB_SCSI_RETRY_STATE)) {
++ __del_from_scsi_retry_queue(dest_ha, sp);
++ } else if ((sp->state == SRB_FAILOVER_STATE)) {
++ __del_from_failover_queue(dest_ha, sp);
++ }
++
++ /*
++ * If FC_DEVICE is marked as dead return the cmd with
++ * DID_NO_CONNECT status. Otherwise set the host_byte to
++ * DID_BUS_BUSY to let the OS retry this cmd.
++ */
++ if (dest_ha->flags.failover_enabled) {
++ cmd->result = DID_BUS_BUSY << 16;
++ } else {
++ if (atomic_read(&fcport->state) == FC_DEVICE_DEAD) {
++ cmd->result = DID_NO_CONNECT << 16;
++ qla2x00_extend_timeout(cmd, EXTEND_CMD_TIMEOUT);
++ } else {
++ cmd->result = DID_BUS_BUSY << 16;
++ }
++ }
++
++ __add_to_done_queue(dest_ha, sp);
++ processed++;
++ }
++ spin_unlock_irqrestore(&dest_ha->list_lock, flags);
++
++ if (processed) {
++ schedule_work(&dest_ha->run_qla_task);
++
++ return;
++ }
++/* TODO: Remove this code!!! */
++#if defined(QL_DEBUG_LEVEL_3)
++ spin_lock_irqsave(&dest_ha->list_lock, cpu_flags);
++ if (sp->state == SRB_DONE_STATE) {
++ /* IO in done_q -- leave it */
++ DEBUG(printk("scsi(%ld): Found in Done queue pid %ld sp=%p.\n",
++ dest_ha->host_no, sp->cmd->serial_number, sp));
++ } else if (sp->state == SRB_SUSPENDED_STATE) {
++ DEBUG(printk("scsi(%ld): Found SP %p in suspended state "
++ "- pid %d:\n",
++ dest_ha->host_no,sp,
++ (int)sp->cmd->serial_number));
++ DEBUG(qla2x00_dump_buffer((uint8_t *)sp, sizeof(srb_t));)
++ } else if (sp->state == SRB_ACTIVE_STATE) {
++ /*
++ * IO is with ISP find the command in our active list.
++ */
++ spin_unlock_irqrestore(&dest_ha->list_lock, cpu_flags);
++ spin_lock_irqsave(&dest_ha->hardware_lock, flags);
++ if (sp ==
++ dest_ha->outstanding_cmds[(u_long)CMD_HANDLE(sp->cmd)]) {
++
++ DEBUG(printk("cmd_timeout: Found in ISP \n");)
++
++ sp->state = SRB_ACTIVE_TIMEOUT_STATE;
++ spin_unlock_irqrestore(&dest_ha->hardware_lock, flags);
++ } else {
++ spin_unlock_irqrestore(&dest_ha->hardware_lock, flags);
++ printk(KERN_INFO
++ "qla_cmd_timeout: State indicates it is with "
++ "ISP, But not in active array\n");
++ }
++ spin_lock_irqsave(&dest_ha->list_lock, cpu_flags); /* 01/03 */
++ } else if (sp->state == SRB_ACTIVE_TIMEOUT_STATE) {
++ DEBUG(printk("qla2100%ld: Found in Active timeout state"
++ "pid %ld, State = %x., \n",
++ dest_ha->host_no,
++ sp->cmd->serial_number, sp->state);)
++ } else {
++ /* EMPTY */
++ DEBUG2(printk("cmd_timeout%ld: LOST command state = "
++ "0x%x, sp=%p\n",
++ vis_ha->host_no, sp->state,sp);)
++
++ printk(KERN_INFO
++ "cmd_timeout: LOST command state = 0x%x\n", sp->state);
++ }
++ spin_unlock_irqrestore(&dest_ha->list_lock, cpu_flags);
++#endif
++
++ DEBUG3(printk("cmd_timeout: Leaving\n");)
++}
++
++/*
++ * qla2x00_done_work
++ *
++ * This is a task to process completion only similar to a
++ * bottom half handler.
++ *
++ * Input:
++ * p -- pointer to hba struct
++ *
++ */
++void
++qla2x00_done_work(void *p)
++{
++ scsi_qla_host_t *ha = (scsi_qla_host_t *) p;
++
++ ENTER(__func__);
++
++ set_bit(TASKLET_SCHED, &ha->dpc_flags);
++
++ if (!list_empty(&ha->done_queue))
++ qla2x00_done(ha);
++
++ clear_bit(TASKLET_SCHED, &ha->dpc_flags);
++
++ LEAVE(__func__);
++}
++
++
++/**************************************************************************
++* qla2x00_done
++* Process completed commands.
++*
++* Input:
++* old_ha = adapter block pointer.
++*
++* Returns:
++* int
++**************************************************************************/
++int
++qla2x00_done(scsi_qla_host_t *old_ha)
++{
++ os_lun_t *lq;
++ Scsi_Cmnd *cmd;
++ unsigned long flags = 0;
++ scsi_qla_host_t *ha;
++ scsi_qla_host_t *vis_ha;
++ int cnt;
++ int send_marker_once = 0;
++ struct list_head *spl, *sptemp;
++ srb_t *sp;
++ struct list_head local_sp_list;
++
++ ENTER(__func__);
++
++ if (test_bit(DONE_RUNNING, &old_ha->dpc_flags))
++ return (0);
++
++ set_bit(DONE_RUNNING, &old_ha->dpc_flags);
++ cnt = 0;
++
++ INIT_LIST_HEAD(&local_sp_list);
++
++ /*
++ * Get into local queue such that we do not wind up calling done queue
++ * takslet for the same IOs from DPC or any other place.
++ */
++ spin_lock_irqsave(&old_ha->list_lock,flags);
++ list_for_each_safe(spl, sptemp, &old_ha->done_queue) {
++ sp = list_entry(spl, srb_t, list);
++
++ /* remove command from done list */
++ list_del_init(&sp->list);
++
++ old_ha->done_q_cnt--;
++ sp->state = SRB_NO_QUEUE_STATE;
++
++ /* add to local queue */
++ list_add_tail(&sp->list, &local_sp_list);
++ }
++ spin_unlock_irqrestore(&old_ha->list_lock, flags);
++
++ /*
++ * All done commands are in the local queue, now do the call back.
++ */
++ list_for_each_safe(spl, sptemp, &local_sp_list) {
++ sp = list_entry(spl, srb_t, list);
++
++ /* remove command from local list */
++ list_del_init(&sp->list);
++
++ cnt++;
++
++ cmd = sp->cmd;
++ if (cmd == NULL)
++ continue;
++
++ vis_ha = (scsi_qla_host_t *)cmd->device->host->hostdata;
++ lq = sp->lun_queue;
++ ha = lq->fclun->fcport->ha;
++
++ if (sp->flags & SRB_DMA_VALID) {
++ sp->flags &= ~SRB_DMA_VALID;
++
++ /* 4.10 64 and 32 bit */
++ /* Release memory used for this I/O */
++ if (cmd->use_sg) {
++ pci_unmap_sg(ha->pdev,
++ cmd->request_buffer,
++ cmd->use_sg,
++ scsi_to_pci_dma_dir(
++ cmd->sc_data_direction));
++ } else if (cmd->request_bufflen) {
++ pci_unmap_page(ha->pdev,
++ sp->saved_dma_handle,
++ cmd->request_bufflen,
++ scsi_to_pci_dma_dir(
++ cmd->sc_data_direction));
++ }
++ }
++
++ if (!(sp->flags & SRB_IOCTL) && ha->flags.failover_enabled) {
++ /*
++ * This routine checks for DID_NO_CONNECT to decide
++ * whether to failover to another path or not. We only
++ * failover on that status.
++ */
++ if (qla2x00_fo_check(ha,sp)) {
++ if ((sp->state != SRB_FAILOVER_STATE)) {
++ /*
++ * Retry the command on this path
++ * several times before selecting a new
++ * path.
++ */
++ add_to_pending_queue_head(vis_ha, sp);
++ qla2x00_next(vis_ha);
++ }
++ else {
++ /* we failover this path */
++ qla2x00_extend_timeout(sp->cmd,
++ EXTEND_CMD_TIMEOUT);
++ }
++ continue;
++ }
++
++ }
++
++ switch ((CMD_RESULT(cmd)>>16)) {
++ case DID_OK:
++ case DID_ERROR:
++ break;
++
++ case DID_RESET:
++ /*
++ * Set marker needed, so we don't have to
++ * send multiple markers
++ */
++ if (!send_marker_once) {
++ ha->marker_needed = 1;
++ send_marker_once++;
++ }
++
++ /*
++ * WORKAROUND
++ *
++ * A backdoor device-reset requires different
++ * error handling. This code differentiates
++ * between normal error handling and the
++ * backdoor method.
++ *
++ */
++ if (ha->host->eh_active != EH_ACTIVE)
++ CMD_RESULT(sp->cmd) =
++ DID_BUS_BUSY << 16;
++ break;
++
++
++ case DID_ABORT:
++ sp->flags &= ~SRB_ABORT_PENDING;
++ sp->flags |= SRB_ABORTED;
++
++ if (sp->flags & SRB_TIMEOUT)
++ CMD_RESULT(cmd)= DID_TIME_OUT << 16;
++
++ break;
++
++ default:
++ DEBUG2(printk("scsi(%ld:%d:%d) %s: did_error "
++ "= %d, comp-scsi= 0x%x-0x%x.\n",
++ vis_ha->host_no,
++ SCSI_TCN_32(cmd),
++ SCSI_LUN_32(cmd),
++ __func__,
++ (CMD_RESULT(cmd)>>16),
++ CMD_COMPL_STATUS(cmd),
++ CMD_SCSI_STATUS(cmd)));
++ break;
++ }
++
++ /*
++ * Call the mid-level driver interrupt handler -- via sp_put()
++ */
++ sp_put(ha, sp);
++
++ qla2x00_next(vis_ha);
++
++ } /* end of while */
++ clear_bit(DONE_RUNNING, &old_ha->dpc_flags);
++
++ LEAVE(__func__);
++
++ return (cnt);
++}
++
++/*
++ * qla2x00_next
++ * Retrieve and process next job in the LUN queue.
++ *
++ * Input:
++ * tq = SCSI target queue pointer.
++ * lq = SCSI LUN queue pointer.
++ * TGT_LOCK must be already obtained.
++ *
++ * Output:
++ * Releases TGT_LOCK upon exit.
++ *
++ * Context:
++ * Kernel/Interrupt context.
++ *
++ * Note: This routine will always try to start I/O from visible HBA.
++ */
++void
++qla2x00_next(scsi_qla_host_t *vis_ha)
++{
++ scsi_qla_host_t *dest_ha;
++ fc_port_t *fcport;
++ srb_t *sp;
++ int rval;
++ unsigned long flags;
++
++ ENTER(__func__);
++
++ spin_lock_irqsave(&vis_ha->list_lock, flags);
++ while (!list_empty(&vis_ha->pending_queue)) {
++ sp = list_entry(vis_ha->pending_queue.next, srb_t, list);
++
++ fcport = sp->fclun->fcport;
++ dest_ha = fcport->ha;
++
++ /* Check if command can be started, exit if not. */
++ if (LOOP_TRANSITION(dest_ha)) {
++ break;
++ }
++
++ __del_from_pending_queue(vis_ha, sp);
++
++ /* If device is dead then send request back to OS */
++ if ((dest_ha->flags.link_down_error_enable &&
++ atomic_read(&fcport->state) == FC_DEVICE_DEAD)) {
++
++ CMD_RESULT(sp->cmd) = DID_NO_CONNECT << 16;
++
++ if (!atomic_read(&dest_ha->loop_down_timer) &&
++ dest_ha->loop_state == LOOP_DOWN) {
++ sp->err_id = 2;
++ } else {
++ sp->err_id = 1;
++ }
++ DEBUG3(printk("scsi(%ld): loop/port is down - "
++ "pid=%ld, sp=%p loopid=0x%x queued to dest HBA "
++ "scsi%ld.\n",
++ dest_ha->host_no,
++ sp->cmd->serial_number, sp,
++ fcport->loop_id, dest_ha->host_no));
++ /*
++ * Initiate a failover - done routine will initiate.
++ */
++ __add_to_done_queue(vis_ha, sp);
++
++ continue;
++ }
++
++ /*
++ * SCSI Kluge: Whenever, we need to wait for an event such as
++ * loop down (i.e. loop_down_timer ) or port down (i.e. LUN
++ * request qeueue is suspended) then we will recycle new
++ * commands back to the SCSI layer. We do this because this is
++ * normally a temporary condition and we don't want the
++ * mid-level scsi.c driver to get upset and start aborting
++ * commands. The timeout value is extracted from the command
++ * minus 1-second and put on a retry queue (watchdog). Once the
++ * command timeout it is returned to the mid-level with a BUSY
++ * status, so the mid-level will retry it. This process
++ * continues until the LOOP DOWN time expires or the condition
++ * goes away.
++ */
++ if (!(sp->flags & SRB_IOCTL) &&
++ (atomic_read(&fcport->state) != FC_ONLINE ||
++ test_bit(ABORT_ISP_ACTIVE, &dest_ha->dpc_flags) ||
++ (dest_ha->loop_state != LOOP_READY) ||
++ (sp->flags & SRB_FAILOVER))) {
++
++ DEBUG3(printk("scsi(%ld): port=(0x%x) retry_q(%d) "
++ "loop state = %d, loop counter = 0x%x dpc flags "
++ "= 0x%lx\n",
++ dest_ha->host_no,
++ fcport->loop_id,
++ atomic_read(&fcport->state),
++ dest_ha->loop_state,
++ atomic_read(&dest_ha->loop_down_timer),
++ dest_ha->dpc_flags));
++
++ qla2x00_extend_timeout(sp->cmd, EXTEND_CMD_TIMEOUT);
++ __add_to_retry_queue(vis_ha, sp);
++
++ continue;
++ }
++
++ /*
++ * If this request's lun is suspended then put the request on
++ * the scsi_retry queue.
++ */
++ if (!(sp->flags & SRB_IOCTL) &&
++ sp->lun_queue->q_state == LUN_STATE_WAIT) {
++ DEBUG3(printk("scsi(%ld): lun wait state - pid=%ld, "
++ "opcode=%d, allowed=%d, retries=%d\n",
++ dest_ha->host_no,
++ sp->cmd->serial_number,
++ sp->cmd->cmnd[0],
++ sp->cmd->allowed,
++ sp->cmd->retries));
++
++ __add_to_scsi_retry_queue(vis_ha, sp);
++
++ continue;
++ }
++
++ sp->lun_queue->io_cnt++;
++
++ /* Release target queue lock */
++ spin_unlock_irqrestore(&vis_ha->list_lock, flags);
++
++ rval = qla2x00_start_scsi(sp);
++
++ spin_lock_irqsave(&vis_ha->list_lock, flags);
++
++ if (rval != QLA2X00_SUCCESS) {
++ /* Place request back on top of device queue */
++ /* add to the top of queue */
++ __add_to_pending_queue_head(vis_ha, sp);
++
++ sp->lun_queue->io_cnt--;
++ break;
++ }
++ }
++ spin_unlock_irqrestore(&vis_ha->list_lock, flags);
++
++ LEAVE(__func__);
++}
++
++/*
++ * qla2x00_flush_failover_queue
++ * Return cmds of a "specific" LUN from the failover queue with
++ * DID_BUS_BUSY status.
++ *
++ * Input:
++ * ha = adapter block pointer.
++ * q = lun queue.
++ *
++ * Context:
++ * Interrupt context.
++ */
++void
++qla2x00_flush_failover_q(scsi_qla_host_t *ha, os_lun_t *q)
++{
++ srb_t *sp;
++ struct list_head *list, *temp;
++ unsigned long flags;
++
++ spin_lock_irqsave(&ha->list_lock, flags);
++ list_for_each_safe(list, temp, &ha->failover_queue) {
++ sp = list_entry(list, srb_t, list);
++ /*
++ * If request originated from the same lun_q then delete it
++ * from the failover queue
++ */
++ if (q == sp->lun_queue) {
++ /* Remove srb from failover queue. */
++ __del_from_failover_queue(ha,sp);
++ CMD_RESULT(sp->cmd) = DID_BUS_BUSY << 16;
++ CMD_HANDLE(sp->cmd) = (unsigned char *) NULL;
++ __add_to_done_queue(ha, sp);
++ }
++ }
++ spin_unlock_irqrestore(&ha->list_lock, flags);
++}
++
++
++/*
++ * qla2x00_reset_lun_fo_counts
++ * Reset failover retry counts
++ *
++ * Input:
++ * ha = adapter block pointer.
++ *
++ * Context:
++ * Interrupt context.
++ */
++void
++qla2x00_reset_lun_fo_counts(scsi_qla_host_t *ha, os_lun_t *lq)
++{
++ srb_t *tsp;
++ os_lun_t *orig_lq;
++ struct list_head *list;
++ unsigned long flags ;
++
++ spin_lock_irqsave(&ha->list_lock, flags);
++ /*
++ * the pending queue.
++ */
++ list_for_each(list,&ha->pending_queue) {
++ tsp = list_entry(list, srb_t, list);
++ orig_lq = tsp->lun_queue;
++ if (orig_lq == lq)
++ tsp->fo_retry_cnt = 0;
++ }
++ /*
++ * the retry queue.
++ */
++ list_for_each(list,&ha->retry_queue) {
++ tsp = list_entry(list, srb_t, list);
++ orig_lq = tsp->lun_queue;
++ if (orig_lq == lq)
++ tsp->fo_retry_cnt = 0;
++ }
++
++ /*
++ * the done queue.
++ */
++ list_for_each(list, &ha->done_queue) {
++ tsp = list_entry(list, srb_t, list);
++ orig_lq = tsp->lun_queue;
++ if (orig_lq == lq)
++ tsp->fo_retry_cnt = 0;
++ }
++ spin_unlock_irqrestore(&ha->list_lock, flags);
++}
++
++/*
++ * qla2x00_failover_cleanup
++ * Cleanup queues after a failover.
++ *
++ * Input:
++ * sp = command pointer
++ *
++ * Context:
++ * Interrupt context.
++ */
++static void
++qla2x00_failover_cleanup(srb_t *sp)
++{
++ CMD_RESULT(sp->cmd) = DID_BUS_BUSY << 16;
++ CMD_HANDLE(sp->cmd) = (unsigned char *) NULL;
++
++ /* turn-off all failover flags */
++ sp->flags = sp->flags & ~(SRB_RETRY|SRB_FAILOVER|SRB_FO_CANCEL);
++}
++
++
++/*
++ * qla2x00_process_failover
++ * Process any command on the failover queue.
++ *
++ * Input:
++ * ha = adapter block pointer.
++ *
++ * Context:
++ * Interrupt context.
++ */
++static void
++qla2x00_process_failover(scsi_qla_host_t *ha)
++{
++
++ os_tgt_t *tq;
++ os_lun_t *lq;
++ srb_t *sp;
++ fc_port_t *fcport;
++ struct list_head *list, *temp;
++ unsigned long flags;
++ uint32_t t, l;
++ scsi_qla_host_t *vis_ha = NULL;
++
++ DEBUG(printk("scsi(%ld): Processing failover for hba.\n", ha->host_no));
++
++ /*
++ * Process all the commands in the failover queue. Attempt to failover
++ * then either complete the command as is or requeue for retry.
++ */
++
++ /* Prevent or allow acceptance of new I/O requests. */
++ spin_lock_irqsave(&ha->list_lock, flags);
++
++ /*
++ * Get first entry to find our visible adapter. We could never get
++ * here if the list is empty
++ */
++ list = ha->failover_queue.next;
++ sp = list_entry(list, srb_t, list);
++ vis_ha = (scsi_qla_host_t *) sp->cmd->device->host->hostdata;
++ list_for_each_safe(list, temp, &ha->failover_queue) {
++ sp = list_entry(list, srb_t, list);
++
++ tq = sp->tgt_queue;
++ lq = sp->lun_queue;
++ fcport = lq->fclun->fcport;
++
++ /* Remove srb from failover queue. */
++ __del_from_failover_queue(ha, sp);
++
++ DEBUG2(printk("%s(): pid %ld retrycnt=%d\n",
++ __func__, sp->cmd->serial_number, sp->cmd->retries));
++
++ /*** Select an alternate path ***/
++ /*
++ * If the path has already been change by a previous request
++ * sp->fclun != lq->fclun
++ */
++ if (sp->fclun != lq->fclun ||
++ atomic_read(&fcport->state) != FC_DEVICE_DEAD) {
++
++ qla2x00_failover_cleanup(sp);
++
++ } else if (qla2x00_cfg_failover(ha,
++ lq->fclun, tq, sp) == NULL) {
++
++ /*
++ * We ran out of paths, so just post the status which
++ * is already set in the cmd.
++ */
++ printk(KERN_INFO
++ "scsi(%ld): Ran out of paths - pid %ld\n",
++ ha->host_no, sp->cmd->serial_number);
++ } else {
++ qla2x00_failover_cleanup(sp);
++
++ }
++ __add_to_done_queue(ha, sp);
++ } /* list_for_each_safe */
++ spin_unlock_irqrestore(&ha->list_lock,flags);
++
++ for (t = 0; t < vis_ha->max_targets; t++) {
++ if ((tq = vis_ha->otgt[t]) == NULL)
++ continue;
++ for (l = 0; l < vis_ha->max_luns; l++) {
++ if ((lq = (os_lun_t *) tq->olun[l]) == NULL)
++ continue;
++
++ if( test_and_clear_bit(LUN_MPIO_BUSY, &lq->q_flag) ) {
++ /* EMPTY */
++ DEBUG(printk("scsi(%ld): remove suspend for "
++ "lun %d\n", ha->host_no, lq->fclun->lun));
++ }
++ }
++ }
++
++ //qla2x00_restart_queues(ha,TRUE);
++ qla2x00_restart_queues(ha, FALSE);
++
++ DEBUG(printk("%s() - done", __func__));
++}
++
++/**************************************************************************
++* qla2x00_check_tgt_status
++*
++* Description:
++* Checks to see if the target or loop is down.
++*
++* Input:
++* cmd - pointer to Scsi cmd structure
++*
++* Returns:
++* 1 - if target is present
++* 0 - if target is not present
++*
++**************************************************************************/
++uint8_t
++qla2x00_check_tgt_status(scsi_qla_host_t *ha, Scsi_Cmnd *cmd)
++{
++ os_lun_t *lq;
++ uint32_t b, t, l;
++ fc_port_t *fcport;
++
++ /* Generate LU queue on bus, target, LUN */
++ b = SCSI_BUS_32(cmd);
++ t = SCSI_TCN_32(cmd);
++ l = SCSI_LUN_32(cmd);
++
++ if ((lq = GET_LU_Q(ha,t,l)) == NULL) {
++ return(QL_STATUS_ERROR);
++ }
++
++ fcport = lq->fclun->fcport;
++
++ if (TGT_Q(ha, t) == NULL ||
++ l >= ha->max_luns ||
++ (atomic_read(&fcport->state) == FC_DEVICE_DEAD) ||
++ (!atomic_read(&ha->loop_down_timer) &&
++ ha->loop_state == LOOP_DOWN) ||
++ (test_bit(ABORT_ISP_ACTIVE, &ha->dpc_flags)) ||
++ ABORTS_ACTIVE ||
++ ha->loop_state != LOOP_READY) {
++
++ DEBUG(printk(KERN_INFO
++ "scsi(%ld:%2d:%2d:%2d): %s connection is down\n",
++ ha->host_no,
++ b, t, l,
++ __func__));
++
++ CMD_RESULT(cmd) = DID_NO_CONNECT << 16;
++ return(QL_STATUS_ERROR);
++ }
++ return (QL_STATUS_SUCCESS);
++}
++
++/**************************************************************************
++* qla2x00_check_port_status
++*
++* Description:
++* Checks to see if the port or loop is down.
++*
++* Input:
++* fcport - pointer to fc_port_t structure.
++*
++* Returns:
++* 1 - if port is present
++* 0 - if port is not present
++*
++**************************************************************************/
++uint8_t
++qla2x00_check_port_status(scsi_qla_host_t *ha, fc_port_t *fcport)
++{
++ uint32_t port_state;
++
++ if (fcport == NULL) {
++ return(QL_STATUS_ERROR);
++ }
++
++ port_state = (uint32_t)atomic_read(&fcport->state);
++ if ((port_state != FC_ONLINE) ||
++ (port_state == FC_DEVICE_DEAD) ||
++ (!atomic_read(&ha->loop_down_timer) &&
++ ha->loop_state == LOOP_DOWN) ||
++ (test_bit(ABORT_ISP_ACTIVE, &ha->dpc_flags)) ||
++ test_bit(CFG_ACTIVE, &ha->cfg_flags) ||
++ ABORTS_ACTIVE || ha->loop_state != LOOP_READY) {
++
++ DEBUG(printk(KERN_INFO
++ "scsi(%ld): Connection is down. fcport=%p.\n",
++ ha->host_no, fcport));
++
++ return (QL_STATUS_ERROR);
++ }
++
++ return (QL_STATUS_SUCCESS);
++}
++
++/****************************************************************************/
++/* Create character driver "HbaApiDev" w dynamically allocated major number */
++/* and create "/proc/scsi/qla2x00/HbaApiNode" as the device node associated */
++/* with the major number. */
++/****************************************************************************/
++
++#define APIDEV_NODE "HbaApiNode"
++#define APIDEV_NAME "HbaApiDev"
++
++static int apidev_major = 0;
++static struct Scsi_Host *apidev_host = 0;
++
++static struct file_operations apidev_fops = {
++ .ioctl = apidev_ioctl,
++ .open = apidev_open,
++ .release = apidev_close,
++};
++
++static int
++apidev_init(struct Scsi_Host *host)
++{
++ if (apidev_host)
++ return (0);
++
++ apidev_major = register_chrdev(0, APIDEV_NAME, &apidev_fops);
++ if (0 > apidev_major) {
++ DEBUG(printk("%s(): register_chrdev rc=%d\n",
++ __func__, apidev_major));
++
++ return (apidev_major);
++ }
++
++ apidev_host = host;
++
++ DEBUG(printk("%s(): Creating (%s) %s/%s major=%d\n",
++ __func__,
++ host->hostt->proc_name, host->hostt->proc_dir->name,
++ APIDEV_NODE, apidev_major));
++
++ proc_mknod(APIDEV_NODE, 0777+S_IFCHR, host->hostt->proc_dir,
++ (kdev_t)mk_kdev(apidev_major, 0));
++
++ return 0;
++}
++
++static int apidev_cleanup()
++{
++ if (!apidev_host)
++ return (0);
++
++ unregister_chrdev(apidev_major,APIDEV_NAME);
++ remove_proc_entry(APIDEV_NODE,apidev_host->hostt->proc_dir);
++ apidev_host = 0;
++
++ return (0);
++}
++
++static int
++apidev_open(struct inode *inode, struct file *file)
++{
++ DEBUG9(printk(KERN_INFO
++ "%s(): open MAJOR number = %d, MINOR number = %d\n",
++ __func__, major(inode->i_rdev), minor(inode->i_rdev)));
++
++ return 0;
++}
++
++static int
++apidev_close(struct inode *inode, struct file *file)
++{
++ DEBUG9(printk(KERN_INFO
++ "%s(): closed\n", __func__));
++
++ return 0;
++}
++
++static int
++apidev_ioctl(struct inode *inode,
++ struct file *fp, unsigned int cmd, unsigned long arg)
++{
++ /*
++ * Since this var is not really used, use static type to conserve
++ * stack space.
++ */
++ static Scsi_Device dummy_scsi_device;
++
++ dummy_scsi_device.host = apidev_host;
++
++ return (qla2x00_ioctl(&dummy_scsi_device, (int)cmd, (void*)arg));
++}
++
++#define driver_template qla2x00_driver_template
++#include "scsi_module.c"
+--- /dev/null Thu Apr 11 07:25:15 2002
++++ linux-2.5.73-n9560/drivers/scsi/qla2xxx/qla_os.h Thu Jul 3 15:34:42 2003
+@@ -0,0 +1,156 @@
++/******************************************************************************
++ * QLOGIC LINUX SOFTWARE
++ *
++ * QLogic ISP2x00 device driver for Linux 2.5.x
++ * Copyright (C) 2003 Qlogic Corporation
++ * (www.qlogic.com)
++ *
++ * Portions (C) Arjan van de Ven <arjanv@redhat.com> for Red Hat, Inc.
++ *
++ * This program is free software; you can redistribute it and/or modify it
++ * under the terms of the GNU General Public License as published by the
++ * Free Software Foundation; either version 2, or (at your option) any
++ * later version.
++ *
++ * This program is distributed in the hope that it will be useful, but
++ * WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ * General Public License for more details.
++ *
++ ******************************************************************************/
++
++#ifndef __QLA_OS_H
++#define __QLA_OS_H
++
++/*
++ * Driver debug definitions.
++ */
++/* #define QL_DEBUG_LEVEL_1 */ /* Output register accesses to COM1 */
++/* #define QL_DEBUG_LEVEL_2 */ /* Output error msgs to COM1 */
++/* #define QL_DEBUG_LEVEL_3 */ /* Output function trace msgs to COM1 */
++/* #define QL_DEBUG_LEVEL_4 */ /* Output NVRAM trace msgs to COM1 */
++/* #define QL_DEBUG_LEVEL_5 */ /* Output ring trace msgs to COM1 */
++/* #define QL_DEBUG_LEVEL_6 */ /* Output WATCHDOG timer trace to COM1 */
++/* #define QL_DEBUG_LEVEL_7 */ /* Output RISC load trace msgs to COM1 */
++/* #define QL_DEBUG_LEVEL_8 */ /* Output ring saturation msgs to COM1 */
++/* #define QL_DEBUG_LEVEL_9 */ /* Output IOCTL trace msgs */
++/* #define QL_DEBUG_LEVEL_10 */ /* Output IOCTL error msgs */
++/* #define QL_DEBUG_LEVEL_11 */ /* Output Mbx Cmd trace msgs */
++/* #define QL_DEBUG_LEVEL_12 */ /* Output IP trace msgs */
++/*
++ * Local Macro Definitions.
++ */
++#if defined(QL_DEBUG_LEVEL_1) || defined(QL_DEBUG_LEVEL_2) || \
++ defined(QL_DEBUG_LEVEL_3) || defined(QL_DEBUG_LEVEL_4) || \
++ defined(QL_DEBUG_LEVEL_5) || defined(QL_DEBUG_LEVEL_6) || \
++ defined(QL_DEBUG_LEVEL_7) || defined(QL_DEBUG_LEVEL_8) || \
++ defined(QL_DEBUG_LEVEL_9) || defined(QL_DEBUG_LEVEL_10) || \
++ defined(QL_DEBUG_LEVEL_11) || defined(QL_DEBUG_LEVEL_12)
++ #define QL_DEBUG_ROUTINES
++#endif
++
++#include <linux/config.h>
++#ifndef QLA_MODVERSION
++#define __NO_VERSION__
++#endif
++#include <linux/module.h>
++#include <linux/version.h>
++#include <linux/init.h>
++#include <linux/string.h>
++#include <linux/errno.h>
++#include <linux/kernel.h>
++#include <linux/ioport.h>
++#include <linux/delay.h>
++#include <linux/timer.h>
++#include <linux/sched.h>
++#include <linux/pci.h>
++#include <linux/proc_fs.h>
++#include <linux/blk.h>
++#include <linux/interrupt.h>
++#include <linux/stat.h>
++#include <linux/slab.h>
++#define __KERNEL_SYSCALLS__
++#include <linux/unistd.h>
++#include <linux/smp_lock.h>
++#include <linux/bio.h>
++#include <linux/moduleparam.h>
++
++#include <asm/system.h>
++
++#include <asm/io.h>
++#include <asm/irq.h>
++#include <asm/segment.h>
++#include <asm/byteorder.h>
++#include <asm/pgtable.h>
++
++#include "scsi.h"
++#include "hosts.h"
++
++#if defined(FC_IP_SUPPORT)
++#include <linux/ip.h>
++#include <linux/if_arp.h>
++#include <linux/skbuff.h>
++#endif
++
++#include <linux/ioctl.h>
++#include <scsi/scsi_ioctl.h>
++#include <asm/uaccess.h>
++
++//TODO Fix this!!!
++/*
++* String arrays
++*/
++#define LINESIZE 256
++#define MAXARGS 26
++
++/* PCI interface definitions */
++struct qla_fw_info {
++ unsigned short addressing; /* addressing method used to load fw */
++#define FW_INFO_ADDR_NORMAL 0
++#define FW_INFO_ADDR_EXTENDED 1
++#define FW_INFO_ADDR_NOMORE 0xffff
++ unsigned short *fwcode; /* pointer to FW array */
++ unsigned short *fwlen; /* number of words in array */
++ unsigned short *fwstart; /* start address for F/W */
++ unsigned long *lfwstart; /* start address (long) for F/W */
++};
++struct qla_board_info {
++ char name[9]; /* Board ID String */
++ struct qla_fw_info *fwinfo;
++};
++
++/***********************************************************************
++* We use the Scsi_Pointer structure that's included with each command
++* SCSI_Cmnd as a scratchpad.
++*
++* SCp is defined as follows:
++* - SCp.ptr -- > pointer to the SRB
++* - SCp.this_residual -- > HBA completion status for ioctl code.
++*
++* Cmnd->host_scribble --> Used to hold the hba actived handle (1..255).
++***********************************************************************/
++#define CMD_SP(Cmnd) ((Cmnd)->SCp.ptr)
++#define CMD_COMPL_STATUS(Cmnd) ((Cmnd)->SCp.this_residual)
++#define CMD_HANDLE(Cmnd) ((Cmnd)->host_scribble)
++/* Additional fields used by ioctl passthru */
++#define CMD_RESID_LEN(Cmnd) ((Cmnd)->SCp.buffers_residual)
++#define CMD_SCSI_STATUS(Cmnd) ((Cmnd)->SCp.Status)
++#define CMD_ACTUAL_SNSLEN(Cmnd) ((Cmnd)->SCp.Message)
++#define CMD_ENTRY_STATUS(Cmnd) ((Cmnd)->SCp.have_data_in)
++
++/*
++ * Other SCS__Cmnd members we only reference
++ */
++#define CMD_XFRLEN(Cmnd) (Cmnd)->request_bufflen
++#define CMD_CDBLEN(Cmnd) (Cmnd)->cmd_len
++#define CMD_CDBP(Cmnd) (Cmnd)->cmnd
++#define CMD_SNSP(Cmnd) (Cmnd)->sense_buffer
++#define CMD_SNSLEN(Cmnd) (sizeof (Cmnd)->sense_buffer)
++#define CMD_RESULT(Cmnd) ((Cmnd)->result)
++#define CMD_TIMEOUT(Cmnd) ((Cmnd)->timeout_per_command)
++
++#define SCSI_BUS_32(scp) ((scp)->device->channel)
++#define SCSI_TCN_32(scp) ((scp)->device->id)
++#define SCSI_LUN_32(scp) ((scp)->device->lun)
++
++#endif
+--- /dev/null Thu Apr 11 07:25:15 2002
++++ linux-2.5.73-n9560/drivers/scsi/qla2xxx/qla_settings.h Thu Jul 3 15:34:42 2003
+@@ -0,0 +1,80 @@
++/******************************************************************************
++ * QLOGIC LINUX SOFTWARE
++ *
++ * QLogic ISP2x00 device driver for Linux 2.5.x
++ * Copyright (C) 2003 Qlogic Corporation
++ * (www.qlogic.com)
++ *
++ * This program is free software; you can redistribute it and/or modify it
++ * under the terms of the GNU General Public License as published by the
++ * Free Software Foundation; either version 2, or (at your option) any
++ * later version.
++ *
++ * This program is distributed in the hope that it will be useful, but
++ * WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ * General Public License for more details.
++ *
++ ******************************************************************************/
++/*
++ * Compile time Options:
++ * 0 - Disable and 1 - Enable
++ */
++#define MEMORY_MAPPED_IO 0
++#define STOP_ON_ERROR 0 /* Stop on aborts and resets */
++#define STOP_ON_RESET 0
++#define STOP_ON_ABORT 0
++#define QLA_SCSI_VENDOR_DIR 0 /* Decode vendor specific opcodes for direction */
++#define QLA2100_LIPTEST 0
++#define REQ_TRACE 1
++#define USE_ABORT_TGT 1 /* Use Abort Target mbx cmd */
++
++#define DEBUG_QLA2100 0 /* For Debug of qla2x00 */
++
++#define MPIO_SUPPORT 0
++#define VSA 0 /* Volume Set Addressing */
++
++/*
++ * When a lun is suspended for the "Not Ready" condition
++ * then it will suspend the lun for increments of 6 sec delays.
++ * SUSPEND_COUNT is that count.
++ */
++#define SUSPEND_COUNT 10 /* 6 secs * 10 retries = 60 secs */
++
++/* Failover options */
++#define MAX_RECOVERYTIME 10 /* Max suspend time for a lun recovery time */
++#define MAX_FAILBACKTIME 5 /* (60) Max suspend time before failing back */
++
++#define QLA_CMD_TIMER_DELTA 3
++
++#define MAX_RETRIES_OF_ISP_ABORT 5 /* */
++
++/*
++ * Defines the time in seconds that
++ * the driver extends the command timeout
++ * to get around the problem where the
++ * mid-layer only allows 5 retries for commands
++ * that return BUS_BUSY
++ */
++#define EXTEND_CMD_TIMEOUT 60
++
++/*
++ * We need to hardcode this value since the firmware
++ * does not allow us to retrieve the maximum number of
++ * IOCBs available during initializtion.
++ *
++ * Factors that affect this value include the amount of
++ * memory on-board (HBA) and firmware IP support.
++ *
++ */
++#undef IOCB_THROTTLE_USAGE
++#undef IOCB_HIT_RATE
++#define MAX_IOCBS_AVAILBALE 3000
++
++/*
++ * Some vendor subsystems do not recover properly after a device reset. Define
++ * the following to force a logout after a successful device reset.
++ */
++#undef LOGOUT_AFTER_DEVICE_RESET
++
++#include "qla_version.h"
+--- /dev/null Thu Apr 11 07:25:15 2002
++++ linux-2.5.73-n9560/drivers/scsi/qla2xxx/qla_sup.c Thu Jul 3 15:34:42 2003
+@@ -0,0 +1,560 @@
++/******************************************************************************
++ * QLOGIC LINUX SOFTWARE
++ *
++ * QLogic ISP2x00 device driver for Linux 2.5.x
++ * Copyright (C) 2003 Qlogic Corporation
++ * (www.qlogic.com)
++ *
++ * This program is free software; you can redistribute it and/or modify it
++ * under the terms of the GNU General Public License as published by the
++ * Free Software Foundation; either version 2, or (at your option) any
++ * later version.
++ *
++ * This program is distributed in the hope that it will be useful, but
++ * WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ * General Public License for more details.
++ *
++ ******************************************************************************/
++
++#include "qla_os.h"
++#include "qla_def.h"
++
++static uint16_t qla2x00_nvram_request(scsi_qla_host_t *, uint32_t);
++
++static void qla2x00_flash_enable(scsi_qla_host_t *);
++static void qla2x00_flash_disable(scsi_qla_host_t *);
++
++uint8_t qla2x00_read_flash_byte(scsi_qla_host_t *, uint32_t);
++static void qla2x00_write_flash_byte(scsi_qla_host_t *, uint32_t, uint8_t);
++static uint8_t qla2x00_poll_flash(scsi_qla_host_t *ha,
++ uint32_t addr, uint8_t poll_data, uint8_t mid);
++static uint8_t qla2x00_program_flash_address(scsi_qla_host_t *ha,
++ uint32_t addr, uint8_t data, uint8_t mid);
++static uint8_t qla2x00_erase_flash_sector(scsi_qla_host_t *ha,
++ uint32_t addr, uint32_t sec_mask, uint8_t mid);
++
++uint8_t qla2x00_get_flash_manufacturer(scsi_qla_host_t *ha);
++uint16_t qla2x00_get_flash_version(scsi_qla_host_t *);
++uint16_t qla2x00_get_flash_image(scsi_qla_host_t *ha, uint8_t *image);
++uint16_t qla2x00_set_flash_image(scsi_qla_host_t *ha, uint8_t *image);
++
++
++/*
++ * NVRAM support routines
++ */
++
++/**
++ * qla2x00_get_nvram_word() - Calculates word position in NVRAM and calls the
++ * request routine to get the word from NVRAM.
++ * @ha: HA context
++ * @addr: Address in NVRAM to read
++ *
++ * Returns the word read from nvram @addr.
++ */
++uint16_t
++qla2x00_get_nvram_word(scsi_qla_host_t *ha, uint32_t addr)
++{
++ uint16_t data;
++ uint32_t nv_cmd;
++
++ ENTER(__func__);
++
++ nv_cmd = addr << 16;
++ nv_cmd |= NV_READ_OP;
++ data = qla2x00_nvram_request(ha, nv_cmd);
++
++ DEBUG4(printk("%s(%ld): NVRAM[%lx]=%lx.\n",
++ __func__, ha->host_no, (u_long)addr, (u_long)data));
++
++ LEAVE(__func__);
++
++ return (data);
++}
++
++/**
++ * qla2x00_nvram_request() - Sends read command to NVRAM and gets data from
++ * NVRAM.
++ * @ha: HA context
++ * @nv_cmd: NVRAM command
++ *
++ * Bit definitions for NVRAM command:
++ *
++ * Bit 26 = start bit
++ * Bit 25, 24 = opcode
++ * Bit 23-16 = address
++ * Bit 15-0 = write data
++ *
++ * Returns the word read from nvram @addr.
++ */
++static uint16_t
++qla2x00_nvram_request(scsi_qla_host_t *ha, uint32_t nv_cmd)
++{
++ uint8_t cnt;
++ device_reg_t *reg = ha->iobase;
++ uint16_t data = 0;
++ uint16_t reg_data;
++
++ /* Send command to NVRAM. */
++ nv_cmd <<= 5;
++ for (cnt = 0; cnt < 11; cnt++) {
++ if (nv_cmd & BIT_31)
++ qla2x00_nv_write(ha, NVR_DATA_OUT);
++ else
++ qla2x00_nv_write(ha, 0);
++ nv_cmd <<= 1;
++ }
++
++ /* Read data from NVRAM. */
++ for (cnt = 0; cnt < 16; cnt++) {
++ WRT_REG_WORD(®->nvram, NVR_SELECT | NVR_CLOCK);
++ NVRAM_DELAY();
++ data <<= 1;
++ reg_data = RD_REG_WORD(®->nvram);
++ if (reg_data & NVR_DATA_IN)
++ data |= BIT_0;
++ WRT_REG_WORD(®->nvram, NVR_SELECT);
++ NVRAM_DELAY();
++ }
++
++ /* Deselect chip. */
++ WRT_REG_WORD(®->nvram, NVR_DESELECT);
++ NVRAM_DELAY();
++
++ return (data);
++}
++
++/**
++ * qla2x00_nv_write() - Clean NVRAM operations.
++ * @ha: HA context
++ */
++void
++qla2x00_nv_deselect(scsi_qla_host_t *ha)
++{
++ device_reg_t *reg = ha->iobase;
++
++ WRT_REG_WORD(®->nvram, NVR_DESELECT);
++ NVRAM_DELAY();
++}
++
++/**
++ * qla2x00_nv_write() - Prepare for NVRAM read/write operation.
++ * @ha: HA context
++ * @data: Serial interface selector
++ */
++void
++qla2x00_nv_write(scsi_qla_host_t *ha, uint16_t data)
++{
++ device_reg_t *reg = ha->iobase;
++
++ WRT_REG_WORD(®->nvram, data | NVR_SELECT);
++ NVRAM_DELAY();
++ WRT_REG_WORD(®->nvram, data | NVR_SELECT | NVR_CLOCK);
++ NVRAM_DELAY();
++ WRT_REG_WORD(®->nvram, data | NVR_SELECT);
++ NVRAM_DELAY();
++}
++
++/*
++ * Flash support routines
++ */
++
++/**
++ * qla2x00_flash_enable() - Setup flash for reading and writing.
++ * @ha: HA context
++ */
++static void
++qla2x00_flash_enable(scsi_qla_host_t *ha)
++{
++ uint16_t data;
++ device_reg_t *reg = ha->iobase;
++
++ data = RD_REG_WORD(®->ctrl_status);
++ data |= CSR_FLASH_ENABLE;
++ WRT_REG_WORD(®->ctrl_status, data);
++}
++
++/**
++ * qla2x00_flash_disable() - Disable flash and allow RISC to run.
++ * @ha: HA context
++ */
++static void
++qla2x00_flash_disable(scsi_qla_host_t *ha)
++{
++ uint16_t data;
++ device_reg_t *reg = ha->iobase;
++
++ data = RD_REG_WORD(®->ctrl_status);
++ data &= ~(CSR_FLASH_ENABLE);
++ WRT_REG_WORD(®->ctrl_status, data);
++}
++
++/**
++ * qla2x00_read_flash_byte() - Reads a byte from flash
++ * @ha: HA context
++ * @addr: Address in flash to read
++ *
++ * A word is read from the chip, but, only the lower byte is valid.
++ *
++ * Returns the byte read from flash @addr.
++ */
++uint8_t
++qla2x00_read_flash_byte(scsi_qla_host_t *ha, uint32_t addr)
++{
++ uint16_t data;
++ uint16_t bank_select;
++ device_reg_t *reg = ha->iobase;
++
++ /* Setup bit 16 of flash address. */
++ bank_select = RD_REG_WORD(®->ctrl_status);
++ if ((addr & BIT_16) && ((bank_select & CSR_FLASH_64K_BANK) == 0)) {
++ bank_select |= CSR_FLASH_64K_BANK;
++ WRT_REG_WORD(®->ctrl_status, bank_select);
++ } else if (((addr & BIT_16) == 0) &&
++ (bank_select & CSR_FLASH_64K_BANK)) {
++ bank_select &= ~(CSR_FLASH_64K_BANK);
++ WRT_REG_WORD(®->ctrl_status, bank_select);
++ }
++ WRT_REG_WORD(®->flash_address, (uint16_t)addr);
++ data = qla2x00_debounce_register(®->flash_data);
++
++ return ((uint8_t)data);
++}
++
++/**
++ * qla2x00_write_flash_byte() - Write a byte to flash
++ * @ha: HA context
++ * @addr: Address in flash to write
++ * @data: Data to write
++ */
++static void
++qla2x00_write_flash_byte(scsi_qla_host_t *ha, uint32_t addr, uint8_t data)
++{
++ uint16_t bank_select;
++ device_reg_t *reg = ha->iobase;
++
++ /* Setup bit 16 of flash address. */
++ bank_select = RD_REG_WORD(®->ctrl_status);
++ if ((addr & BIT_16) && ((bank_select & CSR_FLASH_64K_BANK) == 0)) {
++ bank_select |= CSR_FLASH_64K_BANK;
++ WRT_REG_WORD(®->ctrl_status, bank_select);
++ } else if (((addr & BIT_16) == 0) &&
++ (bank_select & CSR_FLASH_64K_BANK)) {
++ bank_select &= ~(CSR_FLASH_64K_BANK);
++ WRT_REG_WORD(®->ctrl_status, bank_select);
++ }
++ WRT_REG_WORD(®->flash_address, (uint16_t)addr);
++ WRT_REG_WORD(®->flash_data, (uint16_t)data);
++}
++
++/**
++ * qla2x00_poll_flash() - Polls flash for completion.
++ * @ha: HA context
++ * @addr: Address in flash to poll
++ * @poll_data: Data to be polled
++ * @mid: Flash manufacturer ID
++ *
++ * This function polls the device until bit 7 of what is read matches data
++ * bit 7 or until data bit 5 becomes a 1. If that hapens, the flash ROM timed
++ * out (a fatal error). The flash book recommeds reading bit 7 again after
++ * reading bit 5 as a 1.
++ *
++ * Returns 0 on success, else non-zero.
++ */
++static uint8_t
++qla2x00_poll_flash(scsi_qla_host_t *ha,
++ uint32_t addr, uint8_t poll_data, uint8_t mid)
++{
++ uint8_t status;
++ uint8_t flash_data;
++ uint32_t cnt;
++ int failed_pass;
++
++ status = 1;
++ failed_pass = 1;
++
++ /* Wait for 30 seconds for command to finish. */
++ poll_data &= BIT_7;
++ for (cnt = 3000000; cnt; cnt--) {
++ flash_data = qla2x00_read_flash_byte(ha, addr);
++ if ((flash_data & BIT_7) == poll_data) {
++ status = 0;
++ break;
++ }
++
++ if (mid != 0x40 && mid != 0xda) {
++ if (flash_data & BIT_5)
++ failed_pass--;
++ if (failed_pass < 0)
++ break;
++ }
++ udelay(10);
++ barrier();
++ }
++ return (status);
++}
++
++/**
++ * qla2x00_program_flash_address() - Programs a flash address
++ * @ha: HA context
++ * @addr: Address in flash to program
++ * @data: Data to be written in flash
++ * @mid: Flash manufacturer ID
++ *
++ * Returns 0 on success, else non-zero.
++ */
++static uint8_t
++qla2x00_program_flash_address(scsi_qla_host_t *ha,
++ uint32_t addr, uint8_t data, uint8_t mid)
++{
++ /* Write Program Command Sequence */
++ qla2x00_write_flash_byte(ha, 0x5555, 0xaa);
++ qla2x00_write_flash_byte(ha, 0x2aaa, 0x55);
++ qla2x00_write_flash_byte(ha, 0x5555, 0xa0);
++ qla2x00_write_flash_byte(ha, addr, data);
++
++ /* Wait for write to complete. */
++ return (qla2x00_poll_flash(ha, addr, data, mid));
++}
++
++/**
++ * qla2x00_erase_flash_sector() - Erase a flash sector.
++ * @ha: HA context
++ * @addr: Flash sector to erase
++ * @sec_mask: Sector address mask
++ * @mid: Flash manufacturer ID
++ *
++ * Returns 0 on success, else non-zero.
++ */
++static uint8_t
++qla2x00_erase_flash_sector(scsi_qla_host_t *ha,
++ uint32_t addr, uint32_t sec_mask, uint8_t mid)
++{
++ /* Individual Sector Erase Command Sequence */
++ qla2x00_write_flash_byte(ha, 0x5555, 0xaa);
++ qla2x00_write_flash_byte(ha, 0x2aaa, 0x55);
++ qla2x00_write_flash_byte(ha, 0x5555, 0x80);
++ qla2x00_write_flash_byte(ha, 0x5555, 0xaa);
++ qla2x00_write_flash_byte(ha, 0x2aaa, 0x55);
++
++ if (mid == 0xda)
++ qla2x00_write_flash_byte(ha, addr & sec_mask, 0x10);
++ else
++ qla2x00_write_flash_byte(ha, addr & sec_mask, 0x30);
++
++ udelay(150);
++
++ /* Wait for erase to complete. */
++ return (qla2x00_poll_flash(ha, addr, 0x80, mid));
++}
++
++/**
++ * qla2x00_get_flash_manufacturer() - Read manufacturer ID from flash chip.
++ * @ha: HA context
++ *
++ * Returns the manufacturer's ID read from the flash chip.
++ */
++uint8_t
++qla2x00_get_flash_manufacturer(scsi_qla_host_t *ha)
++{
++ uint8_t manuf_id;
++
++ qla2x00_write_flash_byte(ha, 0x5555, 0xaa);
++ qla2x00_write_flash_byte(ha, 0x2aaa, 0x55);
++ qla2x00_write_flash_byte(ha, 0x5555, 0x90);
++ manuf_id = qla2x00_read_flash_byte(ha, 0x0001);
++
++ return (manuf_id);
++}
++
++/**
++ * qla2x00_get_flash_version() - Read version information from flash.
++ * @ha: HA context
++ *
++ * Returns QL_STATUS_SUCCESS on successful retrieval of flash version.
++ */
++uint16_t
++qla2x00_get_flash_version(scsi_qla_host_t *ha)
++{
++ uint16_t ret = QL_STATUS_SUCCESS;
++ uint32_t loop_cnt = 1; /* this is for error exit only */
++ uint32_t pcir_adr;
++
++ ENTER(__func__);
++
++ qla2x00_flash_enable(ha);
++ do { /* Loop once to provide quick error exit */
++ /* Match signature */
++ if (!(qla2x00_read_flash_byte(ha, 0) == 0x55 &&
++ qla2x00_read_flash_byte(ha, 1) == 0xaa)) {
++ /* No signature */
++ DEBUG2(printk("scsi(%ld): No matching FLASH "
++ "signature.\n", ha->host_no));
++ ret = QL_STATUS_ERROR;
++ break;
++ }
++
++ pcir_adr = qla2x00_read_flash_byte(ha, 0x18) & 0xff;
++
++ /* validate signature of PCI data structure */
++ if ((qla2x00_read_flash_byte(ha, pcir_adr)) == 'P' &&
++ (qla2x00_read_flash_byte(ha, pcir_adr + 1)) == 'C' &&
++ (qla2x00_read_flash_byte(ha, pcir_adr + 2)) == 'I' &&
++ (qla2x00_read_flash_byte(ha, pcir_adr + 3)) == 'R') {
++
++ /* Read version */
++ ha->optrom_minor =
++ qla2x00_read_flash_byte(ha, pcir_adr + 0x12);
++ ha->optrom_major =
++ qla2x00_read_flash_byte(ha, pcir_adr + 0x13);
++ DEBUG3(printk("%s(): got %d.%d.\n",
++ __func__, ha->optrom_major, ha->optrom_minor));
++ } else {
++ /* error */
++ DEBUG2(printk("%s(): PCI data struct not found. "
++ "pcir_adr=%x.\n",
++ __func__, pcir_adr));
++ ret = QL_STATUS_ERROR;
++ break;
++ }
++
++ } while (--loop_cnt);
++ qla2x00_flash_disable(ha);
++
++ LEAVE(__func__);
++
++ return (ret);
++}
++
++/**
++ * qla2x00_get_flash_image() - Read image from flash chip.
++ * @ha: HA context
++ * @image: Buffer to receive flash image
++ *
++ * Returns 0 on success, else non-zero.
++ */
++uint16_t
++qla2x00_get_flash_image(scsi_qla_host_t *ha, uint8_t *image)
++{
++ uint32_t addr;
++ uint32_t midpoint;
++ uint8_t *data;
++ device_reg_t *reg = ha->iobase;
++
++ midpoint = FLASH_IMAGE_SIZE / 2;
++
++ qla2x00_flash_enable(ha);
++ WRT_REG_WORD(®->nvram, 0);
++ for (addr = 0, data = image; addr < FLASH_IMAGE_SIZE; addr++, data++) {
++ if (addr == midpoint)
++ WRT_REG_WORD(®->nvram, NVR_SELECT);
++
++ *data = qla2x00_read_flash_byte(ha, addr);
++ }
++ qla2x00_flash_disable(ha);
++
++ return (0);
++}
++
++/**
++ * qla2x00_set_flash_image() - Write image to flash chip.
++ * @ha: HA context
++ * @image: Source image to write to flash
++ *
++ * Returns 0 on success, else non-zero.
++ */
++uint16_t
++qla2x00_set_flash_image(scsi_qla_host_t *ha, uint8_t *image)
++{
++ uint16_t status;
++ uint32_t addr;
++ uint32_t midpoint;
++ uint32_t sec_mask;
++ uint32_t rest_addr;
++ uint8_t mid;
++ uint8_t sec_number;
++ uint8_t data;
++ device_reg_t *reg = ha->iobase;
++
++ status = 0;
++ sec_number = 0;
++
++ /* Reset ISP chip. */
++ WRT_REG_WORD(®->ctrl_status, CSR_ISP_SOFT_RESET);
++
++ qla2x00_flash_enable(ha);
++ do { /* Loop once to provide quick error exit */
++ /* Structure of flash memory based on manufacturer */
++ mid = qla2x00_get_flash_manufacturer(ha);
++ if (mid == 0x6d) {
++ // Am29LV001 part
++ rest_addr = 0x1fff;
++ sec_mask = 0x1e000;
++ }
++ else if (mid == 0x40) {
++ // Mostel v29c51001 part
++ rest_addr = 0x1ff;
++ sec_mask = 0x1fe00;
++ }
++ else if (mid == 0xbf) {
++ // SST39sf10 part
++ rest_addr = 0xfff;
++ sec_mask = 0x1f000;
++ }
++ else if (mid == 0xda) {
++ // Winbond W29EE011 part
++ rest_addr = 0x7f;
++ sec_mask = 0x1ff80;
++ addr = 0;
++ if (qla2x00_erase_flash_sector(ha,
++ addr, sec_mask, mid)) {
++ status = 1;
++ break;
++ }
++ }
++ else {
++ // Am29F010 part
++ rest_addr = 0x3fff;
++ sec_mask = 0x1c000;
++ }
++
++ midpoint = FLASH_IMAGE_SIZE / 2;
++ for (addr = 0; addr < FLASH_IMAGE_SIZE; addr++) {
++ data = *image++;
++ /* Are we at the beginning of a sector? */
++ if (!(addr & rest_addr)) {
++ if (addr == midpoint)
++ WRT_REG_WORD(®->nvram, NVR_SELECT);
++
++ /* Then erase it */
++ if (qla2x00_erase_flash_sector(ha,
++ addr, sec_mask, mid)) {
++ status = 1;
++ break;
++ }
++
++ sec_number++;
++ }
++ if (mid == 0x6d) {
++ if (sec_number == 1 &&
++ (addr == (rest_addr - 1))) {
++ rest_addr = 0x0fff;
++ sec_mask = 0x1f000;
++ }
++ else if (sec_number == 3 && (addr & 0x7ffe)) {
++ rest_addr = 0x3fff;
++ sec_mask = 0x1c000;
++ }
++ }
++
++ if (qla2x00_program_flash_address(ha,
++ addr, data, mid)) {
++ status = 1;
++ break;
++ }
++ }
++ } while (0);
++ qla2x00_flash_disable(ha);
++
++ return (status);
++}
+--- /dev/null Thu Apr 11 07:25:15 2002
++++ linux-2.5.73-n9560/drivers/scsi/qla2xxx/qla_vendor.c Thu Jul 3 15:34:42 2003
+@@ -0,0 +1,193 @@
++/******************************************************************************
++ * QLOGIC LINUX SOFTWARE
++ *
++ * QLogic ISP2x00 device driver for Linux 2.5.x
++ * Copyright (C) 2003 Qlogic Corporation
++ * (www.qlogic.com)
++ *
++ * This program is free software; you can redistribute it and/or modify it
++ * under the terms of the GNU General Public License as published by the
++ * Free Software Foundation; either version 2, or (at your option) any
++ * later version.
++ *
++ * This program is distributed in the hope that it will be useful, but
++ * WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ * General Public License for more details.
++ *
++ ******************************************************************************/
++
++#include "qla_os.h"
++#include "qla_def.h"
++
++/*
++ * vendor specific op codes.
++*/
++#define UCSCSI_DCMD 0x20 /* vendor specific command */
++#define DAC_CDB_LEN 12
++#define DAC_SENSE_LEN 64
++
++#define DACMD_WRITE_CONF_ONDISK 0x4B
++#define DACMD_WRITE_CONFIG 0x06
++#define DACMD_WRITE_CONF2 0x3C
++#define DACMD_WRITE_CONFLABEL 0x49 /* Write configuration label */
++#define DACMD_WRITE_CONFIG_V3x 0x4F
++#define DACMD_ADD_CONFIG_V2x 0x18
++#define DACMD_ADD_CONFIG_V3x 0x4C
++#define DACMD_STORE_IMAGE 0x21
++#define DACMD_ADD_CAPACITY 0x2A /* add physical drives to existing array */
++#define DACMD_WRITE_IOPORT 0x3A /* write port B */
++#define DACMD_S2S_WRITEFULLCONF 0x60 /* write full configuration */
++#define DACMD_S2S_ADDFULLCONF 0x62 /* add full configuration */
++#define DACMD_S2S_WRITELUNMAP_OLD 0x58 /* write LUN map information */
++#define DACMD_S2S_WRITELUNMAP 0xD2 /* Write LUN MAP Information */
++#define DACMD_S2S_WRITE_IOPORT 0x66 /* write expanded IO port */
++#define DACMD_WRITE_V3x 0x34 /* write data from plain memory */
++#define DACMD_S2S_WRITESIG 0x4D /* write signature information */
++
++#if !defined(s08bits)
++#define s08bits char
++#define s16bits short
++#define s32bits int
++#define u08bits unsigned s08bits
++#define u16bits unsigned s16bits
++#define u32bits unsigned s32bits
++#endif
++
++typedef struct dac_command
++{
++ u08bits mb_Command; /* Mail Box register 0 */
++ u08bits mb_CmdID; /* Mail Box register 1 */
++ u08bits mb_ChannelNo; /* Mail Box register 2 */
++ u08bits mb_TargetID; /* Mail Box register 3 */
++ u08bits mb_DevState; /* Mail Box register 4 */
++ u08bits mb_MailBox5; /* Mail Box register 5 */
++ u08bits mb_MailBox6; /* Mail Box register 6 */
++ u08bits mb_SysDevNo; /* Mail Box register 7 */
++ u32bits mb_Datap; /* Mail Box register 8-B */
++ u08bits mb_MailBoxC; /* Mail Box register C */
++ u08bits mb_StatusID; /* Mail box register D */
++ u16bits mb_Status; /* Mail Box Register E,F */
++}
++dac_command_t;
++
++typedef struct dac_scdb
++{
++ u08bits db_ChannelTarget; /* ChannelNo 7..4 & Target 3..0 */
++ u08bits db_DATRET; /* different bits, see below */
++ u16bits db_TransferSize; /* Request/done size in bytes */
++ u32bits db_PhysDatap; /* Physical addr in host memory */
++ u08bits db_CdbLen; /* 6, 10 or 12 */
++ u08bits db_SenseLen; /* If returned from DAC (<= 64) */
++ u08bits db_Cdb[DAC_CDB_LEN]; /* The CDB itself */
++ u08bits db_SenseData[DAC_SENSE_LEN];/* Result of request sense */
++ u08bits db_StatusIn; /* SCSI status returned */
++ u08bits db_Reserved1;
++}
++dac_scdb_t;
++
++typedef struct dga_scdb
++{
++ u08bits dsc_osreq[1024]; /* OS related buffer:sizeof(mdac_req_t) */
++
++ u08bits dsc_familyctlno; /* Controller number within family */
++ u08bits dsc_ctlno; /* Controller number */
++ u08bits dsc_chno; /* Channel number */
++ u08bits dsc_tgt; /* target ID */
++
++ u08bits dsc_lun; /* Lun ID */
++ u08bits dsc_rebuildflag; /* current rebuild flag */
++ u16bits dsc_status; /* completion status */
++
++ u08bits dsc_scsiversion; /* SCSI protocol version */
++ u08bits dsc_hostctlno; /* host system controller number */
++ u16bits dsc_reqsenseseqno; /* request sense sequence number */
++
++ u32bits dsc_events; /* # events at start */
++
++ u32bits dsc_pollwaitchan; /* sleep/wakeup channel */
++ u32bits dsc_poll; /* polling value, if =0 op complete */
++
++ struct dga_ctldev *dsc_ctp; /* pointer back to controller */
++ void *dsc_pdp; /* pointer back to physical device */
++ void *dsc_ldp; /* pointer back to logical device */
++ void (*dsc_intr)(void); /* completion call back function */
++
++ /* all save functions are used in S2S */
++ u08bits dsc_savedcdb[DAC_CDB_LEN];/* 12 bytes saved CDB from SCSI CDB */
++ u32bits (*dsc_statsintr)(struct dga_scdb *); /* statistics completion function */
++
++ void (*dsc_savedintr)(void); /* completion call back function */
++ void *dsc_savedctp; /* pointer back to controller */
++ u08bits dsc_savedfamilyctlno; /* Controller number within family */
++ u08bits dsc_savedctlno; /* Controller number */
++ u08bits dsc_savedchno; /* Channel number */
++ u08bits dsc_savedtgt; /* target ID */
++
++ u08bits dsc_savedlun; /* Lun ID */
++ u08bits dsc_savedcdblen; /* saved CDB len for SCDB */
++ u08bits dsc_scanmode;
++ u08bits dsc_pageno; /* pageno for data > 4K */
++ u32bits dsc_residue;
++ u32bits dsc_Reserved4;
++
++ dac_command_t dsc_dcmd; /* DCMD space, 16 bytes */
++ dac_scdb_t dsc_scdb; /* SCDB space */
++ u32bits dsc_EventSeqNo;
++ u32bits dsc_ReqSenseNo;
++
++ u32bits dsc_Reserved64[16]; /* leave this for OLD SCO driver bug */
++
++ u08bits dsc_data[256]; /* Rest is data */
++}
++dga_scdb_t;
++
++/*
++* qla2100_set_scsi_direction
++* This routine will set the proper direction for vendor specific
++* commands.
++*
++* Note: Vendors should modify this routine to set the proper
++* direction of the transfer if they used vendor specific commands.
++*
++* Input:
++* ha = adapter block pointer.
++* sp = SCSI Request Block structure pointer.
++*
++* Returns:
++* 0 = success, was able to issue command.
++*/
++void
++qla2x00_set_vend_direction(scsi_qla_host_t *ha,
++ Scsi_Cmnd *cmd, cmd_entry_t *pkt)
++{
++ dga_scdb_t *dsp = (dga_scdb_t *) cmd;
++
++ if (cmd->data_cmnd[0] == UCSCSI_DCMD) {
++ switch( dsp->dsc_dcmd.mb_Command ) {
++ case DACMD_WRITE_CONF_ONDISK:
++ case DACMD_WRITE_CONFIG:
++ case DACMD_WRITE_CONF2:
++ case DACMD_WRITE_CONFLABEL:
++ case DACMD_WRITE_CONFIG_V3x:
++ case DACMD_ADD_CONFIG_V2x:
++ case DACMD_ADD_CONFIG_V3x:
++ case DACMD_STORE_IMAGE:
++ case DACMD_ADD_CAPACITY:
++ case DACMD_WRITE_IOPORT:
++ case DACMD_S2S_WRITEFULLCONF:
++ case DACMD_S2S_ADDFULLCONF:
++ case DACMD_S2S_WRITELUNMAP_OLD:
++ case DACMD_S2S_WRITELUNMAP:
++ case DACMD_S2S_WRITE_IOPORT:
++ case DACMD_WRITE_V3x:
++ case DACMD_S2S_WRITESIG:
++ pkt->control_flags |= BIT_6;
++ break;
++ default:
++ pkt->control_flags |= BIT_5;
++ }
++ } else
++ pkt->control_flags |= BIT_5;
++}
++
+--- /dev/null Thu Apr 11 07:25:15 2002
++++ linux-2.5.73-n9560/drivers/scsi/qla2xxx/qla_version.h Thu Jul 3 15:34:42 2003
+@@ -0,0 +1,31 @@
++/******************************************************************************
++ * QLOGIC LINUX SOFTWARE
++ *
++ * QLogic ISP2x00 device driver for Linux 2.5.x
++ * Copyright (C) 2003 Qlogic Corporation
++ * (www.qlogic.com)
++ *
++ * This program is free software; you can redistribute it and/or modify it
++ * under the terms of the GNU General Public License as published by the
++ * Free Software Foundation; either version 2, or (at your option) any
++ * later version.
++ *
++ * This program is distributed in the hope that it will be useful, but
++ * WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ * General Public License for more details.
++ *
++ ******************************************************************************/
++/*
++ * Driver version
++ */
++#if DEBUG_QLA2100
++#define QLA2100_VERSION "8.00.00b1-debug"
++#else
++#define QLA2100_VERSION "8.00.00b1"
++#endif
++
++#define QLA_DRIVER_MAJOR_VER 8
++#define QLA_DRIVER_MINOR_VER 0
++#define QLA_DRIVER_PATCH_VER 0
++#define QLA_DRIVER_BETA_VER 1
+--- /dev/null Thu Apr 11 07:25:15 2002
++++ linux-2.5.73-n9560/drivers/scsi/qla2xxx/qla_xioct.c Thu Jul 3 15:34:42 2003
+@@ -0,0 +1,6589 @@
++/******************************************************************************
++ * QLOGIC LINUX SOFTWARE
++ *
++ * QLogic ISP2x00 device driver for Linux 2.5.x
++ * Copyright (C) 2003 Qlogic Corporation
++ * (www.qlogic.com)
++ *
++ * This program is free software; you can redistribute it and/or modify it
++ * under the terms of the GNU General Public License as published by the
++ * Free Software Foundation; either version 2, or (at your option) any
++ * later version.
++ *
++ * This program is distributed in the hope that it will be useful, but
++ * WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ * General Public License for more details.
++ *
++ ******************************************************************************/
++
++
++#include "qla_os.h"
++#include "qla_def.h"
++
++#include "inioct.h"
++
++
++#define QLA_PT_CMD_TOV (60) /* firmware timeout */
++#define QLA_PT_CMD_DRV_TOV (QLA_PT_CMD_TOV + 1) /* drvr timeout */
++#define QLA_IOCTL_ACCESS_WAIT_TIME (QLA_PT_CMD_DRV_TOV + 2) /* wait_q tov */
++#define QLA_INITIAL_IOCTLMEM_SIZE (2 * PAGE_SIZE)
++#define QLA_IOCTL_SCRAP_SIZE 2048 /* scrap memory for local use. */
++
++/* ELS related defines */
++#define FC_HEADER_LEN 24
++#define ELS_RJT_LENGTH 0x08 /* 8 */
++#define ELS_RPS_ACC_LENGTH 0x40 /* 64 */
++#define ELS_RLS_ACC_LENGTH 0x1C /* 28 */
++
++/* ELS cmd Reply Codes */
++#define ELS_STAT_LS_RJT 0x01
++#define ELS_STAT_LS_ACC 0x02
++
++#define IOCTL_INVALID_STATUS 0xffff
++
++
++int qla2x00_alloc_ioctl_mem(scsi_qla_host_t *);
++void qla2x00_free_ioctl_mem(scsi_qla_host_t *);
++
++int qla2x00_get_ioctl_scrap_mem(scsi_qla_host_t *, void **, uint32_t);
++void qla2x00_free_ioctl_scrap_mem(scsi_qla_host_t *);
++
++/*
++ * Local prototypes
++ */
++static int qla2x00_get_new_ioctl_dma_mem(scsi_qla_host_t *, uint32_t);
++
++#if defined(ISP2300)
++static uint8_t qla2x00_get_next_free_pub_id(scsi_qla_host_t *, uint16_t *);
++static uint8_t qla2x00_host_relogin(scsi_qla_host_t *, fcdev_t *);
++#endif
++
++static int qla2x00_find_curr_ha(uint16_t, scsi_qla_host_t **);
++
++static int qla2x00_get_driver_specifics(EXT_IOCTL *);
++
++static int qla2x00_aen_reg(scsi_qla_host_t *, EXT_IOCTL *, int);
++static int qla2x00_aen_get(scsi_qla_host_t *, EXT_IOCTL *, int);
++
++static int qla2x00_query(scsi_qla_host_t *, EXT_IOCTL *, int);
++static int qla2x00_query_hba_node(scsi_qla_host_t *, EXT_IOCTL *, int);
++static int qla2x00_query_hba_port(scsi_qla_host_t *, EXT_IOCTL *, int);
++static int qla2x00_query_disc_port(scsi_qla_host_t *, EXT_IOCTL *, int);
++static int qla2x00_query_disc_tgt(scsi_qla_host_t *, EXT_IOCTL *, int);
++static int qla2x00_query_chip(scsi_qla_host_t *, EXT_IOCTL *, int);
++
++static int qla2x00_get_data(scsi_qla_host_t *, EXT_IOCTL *, int);
++static int qla2x00_get_statistics(scsi_qla_host_t *, EXT_IOCTL *, int);
++static int qla2x00_get_fc_statistics(scsi_qla_host_t *, EXT_IOCTL *, int);
++static int qla2x00_get_port_summary(scsi_qla_host_t *, EXT_IOCTL *, int);
++static int qla2x00_query_driver(scsi_qla_host_t *, EXT_IOCTL *, int);
++static int qla2x00_query_fw(scsi_qla_host_t *, EXT_IOCTL *, int);
++
++#if defined(ISP2300)
++static int qla2x00_send_els_passthru(scsi_qla_host_t *, EXT_IOCTL *, int);
++#endif
++static int qla2x00_send_fcct(scsi_qla_host_t *, EXT_IOCTL *, int);
++static int qla2x00_start_ms_cmd(scsi_qla_host_t *, EXT_IOCTL *, srb_t *,
++ EXT_ELS_PT_REQ *);
++
++static int qla2x00_wwpn_to_scsiaddr(scsi_qla_host_t *, EXT_IOCTL *, int);
++static int qla2x00_scsi_passthru(scsi_qla_host_t *, EXT_IOCTL *, int);
++static int qla2x00_sc_scsi_passthru(scsi_qla_host_t *, EXT_IOCTL *, int);
++static int qla2x00_sc_fc_scsi_passthru(scsi_qla_host_t *, EXT_IOCTL *, int);
++static int qla2x00_sc_scsi3_passthru(scsi_qla_host_t *, EXT_IOCTL *, int);
++
++static int qla2x00_send_els_rnid(scsi_qla_host_t *, EXT_IOCTL *, int);
++static int qla2x00_get_rnid_params(scsi_qla_host_t *, EXT_IOCTL *, int);
++static int qla2x00_set_host_data(scsi_qla_host_t *, EXT_IOCTL *, int);
++static int qla2x00_set_rnid_params(scsi_qla_host_t *, EXT_IOCTL *, int);
++
++static void qla2x00_waitq_sem_timeout(unsigned long);
++static uint8_t qla2x00_get_ioctl_access(scsi_qla_host_t *, uint32_t);
++static uint8_t qla2x00_release_ioctl_access(scsi_qla_host_t *);
++
++static void qla2x00_wait_q_memb_alloc(scsi_qla_host_t *, wait_q_t **);
++static void qla2x00_wait_q_memb_free(scsi_qla_host_t *, wait_q_t *);
++static uint8_t qla2x00_wait_q_add(scsi_qla_host_t *, wait_q_t **);
++static void qla2x00_wait_q_get_next(scsi_qla_host_t *, wait_q_t **);
++static void qla2x00_wait_q_remove(scsi_qla_host_t *, wait_q_t *);
++
++
++/*
++ * qla2x00_ioctl_sleep_done
++ *
++ * Description:
++ * This is the callback function to wakeup ioctl completion semaphore
++ * for the ioctl request that is waiting.
++ *
++ * Input:
++ * sem - pointer to the ioctl completion semaphore.
++ *
++ * Returns:
++ */
++static void
++qla2x00_ioctl_sleep_done(struct semaphore * sem)
++{
++ DEBUG9(printk("%s: entered.\n", __func__);)
++
++ if (sem != NULL){
++ DEBUG9(printk("ioctl_sleep: wake up sem.\n");)
++ up(sem);
++ }
++
++ DEBUG9(printk("%s: exiting.\n", __func__);)
++}
++
++/*
++ * qla2x00_ioctl_sem_init
++ *
++ * Description:
++ * Initialize the ioctl timer and semaphore used to wait for passthru
++ * completion.
++ *
++ * Input:
++ * ha - pointer to scsi_qla_host_t structure used for initialization.
++ *
++ * Returns:
++ * None.
++ */
++static void
++qla2x00_ioctl_sem_init(scsi_qla_host_t *ha)
++{
++ init_MUTEX_LOCKED(&ha->ioctl->cmpl_sem);
++ init_timer(&(ha->ioctl->cmpl_timer));
++ ha->ioctl->cmpl_timer.data = (unsigned long)&ha->ioctl->cmpl_sem;
++ ha->ioctl->cmpl_timer.function =
++ (void (*)(unsigned long))qla2x00_ioctl_sleep_done;
++}
++
++/*
++ * qla2x00_scsi_pt_done
++ *
++ * Description:
++ * Resets ioctl progress flag and wakes up the ioctl completion semaphore.
++ *
++ * Input:
++ * pscsi_cmd - pointer to the passthru Scsi cmd structure which has completed.
++ *
++ * Returns:
++ */
++static void
++qla2x00_scsi_pt_done(Scsi_Cmnd *pscsi_cmd)
++{
++ struct Scsi_Host *host;
++ scsi_qla_host_t *ha;
++
++ host = pscsi_cmd->device->host;
++ ha = (scsi_qla_host_t *) host->hostdata;
++
++ DEBUG9(printk("%s post function called OK\n", __func__);)
++
++ /* save detail status for IOCTL reporting */
++ ha->ioctl->SCSIPT_InProgress = 0;
++ ha->ioctl->ioctl_tov = 0;
++
++ up(&ha->ioctl->cmpl_sem);
++
++ DEBUG9(printk("%s: exiting.\n", __func__);)
++
++ return;
++}
++
++/*
++ * qla2x00_msiocb_done
++ *
++ * Description:
++ * Resets MSIOCB ioctl progress flag and wakes up the ioctl completion
++ * semaphore.
++ *
++ * Input:
++ * cmd - pointer to the passthru Scsi cmd structure which has completed.
++ *
++ * Returns:
++ */
++static void
++qla2x00_msiocb_done(Scsi_Cmnd *pscsi_cmd)
++{
++ struct Scsi_Host *host;
++ scsi_qla_host_t *ha;
++
++ host = pscsi_cmd->device->host;
++ ha = (scsi_qla_host_t *) host->hostdata;
++
++ DEBUG9(printk("%s post function called OK\n", __func__);)
++
++ ha->ioctl->MSIOCB_InProgress = 0;
++ ha->ioctl->ioctl_tov = 0;
++
++ up(&ha->ioctl->cmpl_sem);
++
++ DEBUG9(printk("%s: exiting.\n", __func__);)
++
++ return;
++}
++
++/*************************************************************************
++ * qla2x00_ioctl
++ *
++ * Description:
++ * Performs additional ioctl requests not satisfied by the upper levels.
++ *
++ * Returns:
++ * ret = 0 Success
++ * ret != 0 Failed; detailed status copied to EXT_IOCTL structure
++ * if possible
++ *************************************************************************/
++int
++qla2x00_ioctl(Scsi_Device *dev, int cmd, void *arg)
++{
++ int mode = 0;
++ int tmp_rval = 0;
++ int ret = -EINVAL;
++
++ uint8_t *temp;
++ uint8_t tempbuf[8];
++ uint32_t i;
++ uint32_t status;
++
++ EXT_IOCTL *pext;
++
++ scsi_qla_host_t *ha;
++
++
++ DEBUG9(printk("%s: entry to command (%x), arg (%p)\n",
++ __func__, cmd, arg);)
++
++ /* Catch any non-exioct ioctls */
++ if (_IOC_TYPE(cmd) != QLMULTIPATH_MAGIC) {
++ return (ret);
++ }
++
++ ret = verify_area(VERIFY_READ, (void *)arg, sizeof(EXT_IOCTL));
++ if (ret) {
++ DEBUG9_10(printk("%s: ERROR VERIFY_READ EXT_IOCTL "
++ "sturct. cmd=%d arg=%p.\n", __func__, cmd, arg);)
++ return (ret);
++ }
++
++ /* Allocate ioctl structure buffer to support multiple concurrent
++ * entries.
++ */
++ pext = KMEM_ZALLOC(sizeof(EXT_IOCTL), 16);
++ if (pext == NULL) {
++ /* error */
++ printk(KERN_WARNING
++ "qla2x00: ERROR in main ioctl buffer allocation.\n");
++ return (-ENOMEM);
++ }
++
++ /* copy in application layer EXT_IOCTL */
++ ret = copy_from_user(pext, arg, sizeof(EXT_IOCTL));
++ if (ret) {
++ DEBUG9_10(printk("%s: ERROR COPY_FROM_USER "
++ "EXT_IOCTL sturct. cmd=%d arg=%p.\n",
++ __func__, cmd, arg);)
++
++ KMEM_FREE(pext, sizeof(EXT_IOCTL));
++ return (ret);
++ }
++
++ /* Verify before update status fields in EXT_IOCTL struct. */
++ ret = verify_area(VERIFY_WRITE, (void *)arg, sizeof(EXT_IOCTL));
++ if (ret) {
++ DEBUG9_10(printk("%s: ERROR VERIFY_WRITE EXT_IOCTL "
++ "sturct. cmd=%d arg=%p.\n", __func__, cmd, arg);)
++
++ KMEM_FREE(pext, sizeof(EXT_IOCTL));
++ return (ret);
++ }
++
++ /* check signature of this ioctl */
++ temp = (uint8_t *) &pext->Signature;
++
++ for (i = 0; i < 4; i++, temp++)
++ tempbuf[i] = *temp;
++
++ if ((tempbuf[0] == 'Q') && (tempbuf[1] == 'L') &&
++ (tempbuf[2] == 'O') && (tempbuf[3] == 'G'))
++ status = 0;
++ else
++ status = 1;
++
++ if (status != 0) {
++ DEBUG9_10(printk("%s: signature did not match. "
++ "cmd=%d arg=%p.\n", __func__, cmd, arg);)
++ pext->Status = EXT_STATUS_INVALID_PARAM;
++ copy_to_user((void *)arg, (void *)pext, sizeof(EXT_IOCTL));
++
++ KMEM_FREE(pext, sizeof(EXT_IOCTL));
++ return (-EINVAL);
++ }
++
++ /* check version of this ioctl */
++ if (pext->Version > EXT_VERSION) {
++ printk(KERN_WARNING
++ "qla2x00: ioctl interface version not supported = %d.\n",
++ pext->Version);
++ pext->Status = EXT_STATUS_UNSUPPORTED_VERSION;
++ copy_to_user((void *)arg, (void *)pext, sizeof(EXT_IOCTL));
++
++ KMEM_FREE(pext, sizeof(EXT_IOCTL));
++ return (-EINVAL);
++ }
++
++ /* check for special cmds used during application's setup time. */
++ switch (cmd) {
++ case EXT_CC_STARTIOCTL:
++ DEBUG9(printk("%s: got startioctl command.\n", __func__);)
++
++ pext->Instance = num_hosts;
++ pext->Status = EXT_STATUS_OK;
++ ret = copy_to_user((void *)arg, (void *)pext,
++ sizeof(EXT_IOCTL));
++
++ KMEM_FREE(pext, sizeof(EXT_IOCTL));
++ return (ret);
++
++ case EXT_CC_SETINSTANCE:
++ /* This call is used to return the HBA's host number to
++ * ioctl caller. All subsequent ioctl commands will put
++ * the host number in HbaSelect field to tell us which
++ * HBA is the destination.
++ */
++ if (pext->Instance < num_hosts) {
++ if (!((uint32_t)pext->VendorSpecificData &
++ EXT_DEF_USE_HBASELECT)) {
++ /* Backward compatible code. */
++ apiHBAInstance = pext->Instance;
++ }
++
++ /*
++ * Return host number via pext->HbaSelect for
++ * specified API instance number.
++ */
++ if (qla2x00_find_curr_ha(pext->Instance, &ha) != 0) {
++ pext->Status = EXT_STATUS_DEV_NOT_FOUND;
++ ret = copy_to_user(arg, pext, sizeof(EXT_IOCTL));
++ DEBUG9_10(printk("%s: SETINSTANCE invalid inst "
++ "%d. num_hosts=%d ha=%p ret=%d.\n",
++ __func__, pext->Instance, num_hosts, ha,
++ ret);)
++
++ KMEM_FREE(pext, sizeof(EXT_IOCTL));
++ return (ret); /* ioctl completed ok */
++ }
++
++ pext->HbaSelect = ha->host_no;
++ pext->Status = EXT_STATUS_OK;
++
++ DEBUG9(printk("%s: Matching instance %d to hba "
++ "%ld.\n", __func__, pext->Instance, ha->host_no);)
++ } else {
++ DEBUG9_10(printk("%s: ERROR EXT_SETINSTANCE."
++ " Instance=%d num_hosts=%d ha=%p.\n",
++ __func__, pext->Instance, num_hosts, ha);)
++
++ pext->Status = EXT_STATUS_DEV_NOT_FOUND;
++ }
++ ret = copy_to_user(arg, pext, sizeof(EXT_IOCTL));
++ KMEM_FREE(pext, sizeof(EXT_IOCTL));
++
++ DEBUG9(printk("%s: SETINSTANCE exiting. ret=%d.\n",
++ __func__, ret);)
++
++ return (ret);
++
++ case EXT_CC_DRIVER_SPECIFIC:
++ ret = qla2x00_get_driver_specifics(pext);
++ tmp_rval = copy_to_user(arg, (void *)pext, sizeof(EXT_IOCTL));
++
++ if (ret == 0)
++ ret = tmp_rval;
++
++ KMEM_FREE(pext, sizeof(EXT_IOCTL));
++ return (ret);
++
++ default:
++ break;
++ }
++
++ if (!((uint32_t)pext->VendorSpecificData & EXT_DEF_USE_HBASELECT)) {
++ /* Backward compatible code. */
++ /* Will phase out soon. */
++
++ /* Check for valid apiHBAInstance (set previously by
++ * EXT_SETINSTANCE or default 0) and set ha context
++ * for this IOCTL.
++ */
++ if (qla2x00_find_curr_ha(apiHBAInstance, &ha) != 0) {
++
++ DEBUG9_10(printk("%s: ERROR matching apiHBAInstance "
++ "%d to an HBA Instance.\n",
++ __func__, pext->HbaSelect);)
++
++ pext->Status = EXT_STATUS_DEV_NOT_FOUND;
++ copy_to_user(arg, pext, sizeof(EXT_IOCTL));
++
++ KMEM_FREE(pext, sizeof(EXT_IOCTL));
++ return (-EINVAL);
++ }
++
++ DEBUG9(printk("%s: active apiHBAInstance=%d host_no=%ld "
++ "CC=%x SC=%x.\n",
++ __func__, apiHBAInstance, ha->host_no, cmd, pext->SubCode);)
++
++ } else {
++ /* Use HbaSelect value to get a matching ha instance
++ * for this ioctl command.
++ */
++ if (qla2x00_find_curr_ha(pext->HbaSelect, &ha) != 0) {
++
++ DEBUG9_10(printk("%s: ERROR matching pext->HbaSelect "
++ "%d to an HBA Instance.\n",
++ __func__, pext->HbaSelect);)
++
++ pext->Status = EXT_STATUS_DEV_NOT_FOUND;
++ copy_to_user(arg, pext, sizeof(EXT_IOCTL));
++
++ KMEM_FREE(pext, sizeof(EXT_IOCTL));
++ return (-EINVAL);
++ }
++
++ DEBUG9(printk("%s: active host_inst=%ld CC=%x SC=%x.\n",
++ __func__, ha->instance, cmd, pext->SubCode);)
++ }
++
++ /*
++ * Get permission to process ioctl command. Only one will proceed
++ * at a time.
++ */
++ if (qla2x00_get_ioctl_access(ha, QLA_IOCTL_ACCESS_WAIT_TIME) != 0) {
++ /* error timed out */
++ DEBUG9_10(printk("%s: ERROR timeout getting ioctl "
++ "access. host no=%d.\n", __func__, pext->HbaSelect);)
++
++ pext->Status = EXT_STATUS_BUSY;
++ copy_to_user(arg, pext, sizeof(EXT_IOCTL));
++
++ KMEM_FREE(pext, sizeof(EXT_IOCTL));
++ return (-EBUSY);
++ }
++
++
++ while (test_bit(CFG_ACTIVE, &ha->cfg_flags) || ha->dpc_active) {
++ if( signal_pending(current) )
++ break; /* get out */
++
++ set_current_state(TASK_INTERRUPTIBLE);
++ schedule_timeout(HZ);
++ }
++
++ switch (cmd) { /* switch on EXT IOCTL COMMAND CODE */
++
++ case EXT_CC_QUERY:
++ DEBUG9(printk("%s: got query command.\n", __func__);)
++
++ ret = qla2x00_query(ha, pext, 0);
++
++ break;
++
++ case EXT_CC_GET_DATA:
++ DEBUG9(printk("%s: got get_data command.\n", __func__);)
++
++ ret = qla2x00_get_data(ha, pext, 0);
++
++ break;
++
++ case EXT_CC_SEND_FCCT_PASSTHRU:
++ DEBUG9(printk("%s: got CT passthru cmd.\n", __func__));
++
++ ret = qla2x00_send_fcct(ha, pext, 0);
++
++ break;
++
++ case EXT_CC_SEND_SCSI_PASSTHRU:
++ DEBUG9(printk("%s: got SCSI passthru cmd.\n", __func__));
++
++ ret = qla2x00_scsi_passthru(ha, pext, mode);
++
++ break;
++
++ case EXT_CC_REG_AEN:
++ ret = qla2x00_aen_reg(ha, pext, mode);
++
++ break;
++
++ case EXT_CC_GET_AEN:
++ ret = qla2x00_aen_get(ha, pext, mode);
++
++ break;
++
++ case EXT_CC_WWPN_TO_SCSIADDR:
++ ret = qla2x00_wwpn_to_scsiaddr(ha, pext, 0);
++ break;
++
++ case EXT_CC_SEND_ELS_RNID:
++ ret = qla2x00_send_els_rnid(ha, pext, mode);
++ break;
++
++ case EXT_CC_SET_DATA:
++ ret = qla2x00_set_host_data(ha, pext, mode);
++ break;
++
++ case INT_CC_READ_NVRAM:
++ ret = qla2x00_read_nvram(ha, pext, mode);
++
++ break;
++
++ case INT_CC_UPDATE_NVRAM:
++ ret = qla2x00_update_nvram(ha, pext, mode);
++
++ break;
++
++ case INT_CC_LOOPBACK:
++ ret = qla2x00_send_loopback(ha, pext, mode);
++
++ break;
++
++ case INT_CC_READ_OPTION_ROM:
++ ret = qla2x00_read_option_rom(ha, pext, mode);
++
++ break;
++
++ case INT_CC_UPDATE_OPTION_ROM:
++ ret = qla2x00_update_option_rom(ha, pext, mode);
++
++ break;
++
++#if defined(ISP2300)
++ case EXT_CC_SEND_ELS_PASSTHRU:
++ DEBUG9(printk("%s: got ELS passthru cmd.\n", __func__));
++
++ ret = qla2x00_send_els_passthru(ha, pext, 0);
++
++ break;
++#endif
++
++ /* all others go here */
++ /*
++ case EXT_CC_PLATFORM_REG:
++ break;
++ */
++
++ /* Failover IOCTLs */
++ case FO_CC_GET_PARAMS:
++ case FO_CC_SET_PARAMS:
++ case FO_CC_GET_PATHS:
++ case FO_CC_SET_CURRENT_PATH:
++ case FO_CC_RESET_HBA_STAT:
++ case FO_CC_GET_HBA_STAT:
++ case FO_CC_GET_LUN_DATA:
++ case FO_CC_SET_LUN_DATA:
++ case FO_CC_GET_TARGET_DATA:
++ case FO_CC_SET_TARGET_DATA:
++ DEBUG9(printk("%s: failover arg (%p):\n", __func__, arg);)
++
++ qla2x00_fo_ioctl(ha, cmd, pext, mode);
++
++ break;
++
++ default:
++ pext->Status = EXT_STATUS_INVALID_REQUEST;
++ break;
++
++ } /* end of CC decode switch */
++
++ /* Always try to copy values back regardless what happened before. */
++ tmp_rval = copy_to_user(arg, (void *)pext, sizeof(EXT_IOCTL));
++
++ if (ret == 0)
++ ret = tmp_rval;
++
++ DEBUG9(printk("%s: exiting. tmp_rval(%d) ret(%d)\n",
++ __func__, tmp_rval, ret);)
++
++ qla2x00_release_ioctl_access(ha);
++
++ KMEM_FREE(pext, sizeof(EXT_IOCTL));
++ return (ret);
++}
++
++/*
++ * qla2x00_alloc_ioctl_mem
++ * Allocates memory needed by IOCTL code.
++ *
++ * Input:
++ * ha = adapter state pointer.
++ *
++ * Returns:
++ * qla2x00 local function return status code.
++ *
++ * Context:
++ * Kernel context.
++ */
++int
++qla2x00_alloc_ioctl_mem(scsi_qla_host_t *ha)
++{
++ DEBUG9(printk("%s(%ld): inst=%ld entered.\n",
++ __func__, ha->host_no, ha->instance);)
++
++ if (qla2x00_get_new_ioctl_dma_mem(ha, QLA_INITIAL_IOCTLMEM_SIZE) !=
++ QL_STATUS_SUCCESS) {
++ printk(KERN_WARNING
++ "qla2x00: ERROR in ioctl physical memory allocation\n");
++
++ return QL_STATUS_RESOURCE_ERROR;
++ }
++
++ /* Allocate context memory buffer */
++ ha->ioctl = KMEM_ZALLOC(sizeof(hba_ioctl_context), 11);
++ if (ha->ioctl == NULL) {
++ /* error */
++ printk(KERN_WARNING
++ "qla2x00: ERROR in ioctl context allocation.\n");
++ return QL_STATUS_RESOURCE_ERROR;
++ }
++
++ /* Allocate AEN tracking buffer */
++ ha->ioctl->aen_tracking_queue =
++ KMEM_ZALLOC(EXT_DEF_MAX_AEN_QUEUE * sizeof(EXT_ASYNC_EVENT), 12);
++ if (ha->ioctl->aen_tracking_queue == NULL) {
++ printk(KERN_WARNING
++ "qla2x00: ERROR in ioctl aen_queue allocation.\n");
++ return QL_STATUS_RESOURCE_ERROR;
++ }
++
++ ha->ioctl->ioctl_tq = KMEM_ZALLOC(sizeof(os_tgt_t), 13);
++ if (ha->ioctl->ioctl_tq == NULL) {
++ printk(KERN_WARNING
++ "qla2x00: ERROR in ioctl tgt queue allocation.\n");
++ return QL_STATUS_RESOURCE_ERROR;
++ }
++
++ ha->ioctl->ioctl_lq = KMEM_ZALLOC(sizeof(os_lun_t), 14);
++ if (ha->ioctl->ioctl_lq == NULL) {
++ printk(KERN_WARNING
++ "qla2x00: ERROR in ioctl lun queue allocation.\n");
++ return QL_STATUS_RESOURCE_ERROR;
++ }
++ /*INIT_LIST_HEAD(&(ha->ioctl->ioctl_lq->cmd));*/
++
++ /* Pick the largest size we'll need per ha of all ioctl cmds.
++ * Use this size when freeing.
++ */
++ ha->ioctl->scrap_mem = KMEM_ZALLOC(QLA_IOCTL_SCRAP_SIZE, 15);
++ if (ha->ioctl->scrap_mem == NULL) {
++ printk(KERN_WARNING
++ "qla2x00: ERROR in ioctl scrap_mem allocation.\n");
++ return QL_STATUS_RESOURCE_ERROR;
++ }
++ ha->ioctl->scrap_mem_size = QLA_IOCTL_SCRAP_SIZE;
++ ha->ioctl->scrap_mem_used = 0;
++ DEBUG9(printk("%s(%ld): scrap_mem_size=%d.\n",
++ __func__, ha->host_no, ha->ioctl->scrap_mem_size);)
++
++ ha->ioctl->ioctl_lq->q_state = LUN_STATE_READY;
++ ha->ioctl->ioctl_lq->q_lock = SPIN_LOCK_UNLOCKED;
++
++ /* Init wait_q fields */
++ ha->ioctl->wait_q_lock = SPIN_LOCK_UNLOCKED;
++
++ DEBUG9(printk("%s(%ld): inst=%ld exiting.\n",
++ __func__, ha->host_no, ha->instance);)
++
++ return QL_STATUS_SUCCESS;
++}
++
++/*
++ * qla2x00_get_new_ioctl_dma_mem
++ * Allocates dma memory of the specified size.
++ * This is done to replace any previously allocated ioctl dma buffer.
++ *
++ * Input:
++ * ha = adapter state pointer.
++ *
++ * Returns:
++ * qla2x00 local function return status code.
++ *
++ * Context:
++ * Kernel context.
++ */
++static int
++qla2x00_get_new_ioctl_dma_mem(scsi_qla_host_t *ha, uint32_t size)
++{
++ DEBUG9(printk("%s entered.\n", __func__);)
++
++ if (ha->ioctl_mem) {
++ DEBUG9(printk("%s: ioctl_mem was previously allocated. "
++ "Dealloc old buffer.\n", __func__);)
++
++ /* free the memory first */
++ pci_free_consistent(ha->pdev, ha->ioctl_mem_size, ha->ioctl_mem,
++ ha->ioctl_mem_phys);
++ }
++
++ /* Get consistent memory allocated for ioctl I/O operations. */
++ ha->ioctl_mem = pci_alloc_consistent(ha->pdev,
++ size, &ha->ioctl_mem_phys);
++
++ if (ha->ioctl_mem == NULL) {
++ printk(KERN_WARNING
++ "%s: ERROR in ioctl physical memory allocation. "
++ "Requested length=%x.\n", __func__, size);
++
++ ha->ioctl_mem_size = 0;
++ return QL_STATUS_RESOURCE_ERROR;
++ }
++ ha->ioctl_mem_size = size;
++
++ DEBUG9(printk("%s exiting.\n", __func__);)
++
++ return QL_STATUS_SUCCESS;
++}
++
++/*
++ * qla2x00_free_ioctl_mem
++ * Frees memory used by IOCTL code for the specified ha.
++ *
++ * Input:
++ * ha = adapter state pointer.
++ *
++ * Context:
++ * Kernel context.
++ */
++void
++qla2x00_free_ioctl_mem(scsi_qla_host_t *ha)
++{
++ DEBUG9(printk("%s(%ld): inst=%ld entered.\n",
++ __func__, ha->host_no, ha->instance);)
++
++ if (ha->ioctl != NULL) {
++
++ if (ha->ioctl->scrap_mem != NULL) {
++ /* The size here must match up to what we
++ * allocated before.
++ */
++ KMEM_FREE(ha->ioctl->scrap_mem,
++ ha->ioctl->scrap_mem_size);
++ ha->ioctl->scrap_mem = NULL;
++ ha->ioctl->scrap_mem_size = 0;
++ }
++
++ if (ha->ioctl->ioctl_tq != NULL) {
++ KMEM_FREE(ha->ioctl->ioctl_tq, sizeof(os_tgt_t));
++ ha->ioctl->ioctl_tq = NULL;
++ }
++
++ if (ha->ioctl->ioctl_lq != NULL) {
++ KMEM_FREE(ha->ioctl->ioctl_lq, sizeof(os_lun_t));
++ ha->ioctl->ioctl_lq = NULL;
++ }
++
++ if (ha->ioctl->aen_tracking_queue != NULL) {
++ KMEM_FREE(ha->ioctl->aen_tracking_queue,
++ EXT_DEF_MAX_AEN_QUEUE * sizeof(EXT_ASYNC_EVENT));
++ ha->ioctl->aen_tracking_queue = NULL;
++ }
++
++ KMEM_FREE(ha->ioctl, sizeof(hba_ioctl_context));
++ ha->ioctl = NULL;
++ }
++
++ /* free memory allocated for ioctl operations */
++ pci_free_consistent(ha->pdev, ha->ioctl_mem_size, ha->ioctl_mem,
++ ha->ioctl_mem_phys);
++ ha->ioctl_mem = NULL;
++
++ DEBUG9(printk("%s(%ld): inst=%ld exiting.\n",
++ __func__, ha->host_no, ha->instance);)
++
++}
++
++/*
++ * qla2x00_get_ioctl_scrap_mem
++ * Returns pointer to memory of the specified size from the scrap buffer.
++ * This can be called multiple times before the free call as long
++ * as the memory is to be used by the same ioctl command and
++ * there's still memory left in the scrap buffer.
++ *
++ * Input:
++ * ha = adapter state pointer.
++ * ppmem = pointer to return a buffer pointer.
++ * size = size of buffer to return.
++ *
++ * Returns:
++ * qla2x00 local function return status code.
++ *
++ * Context:
++ * Kernel context.
++ */
++int
++qla2x00_get_ioctl_scrap_mem(scsi_qla_host_t *ha, void **ppmem, uint32_t size)
++{
++ int ret = QL_STATUS_SUCCESS;
++ uint32_t free_mem;
++
++ DEBUG9(printk("%s(%ld): inst=%ld entered. size=%d.\n",
++ __func__, ha->host_no, ha->instance, size);)
++
++ free_mem = ha->ioctl->scrap_mem_size - ha->ioctl->scrap_mem_used;
++ if (free_mem >= size) {
++ *ppmem = ha->ioctl->scrap_mem + ha->ioctl->scrap_mem_used;
++ ha->ioctl->scrap_mem_used += size;
++ } else {
++ DEBUG10(printk("%s(%ld): no more scrap memory.\n",
++ __func__, ha->host_no);)
++
++ ret = QL_STATUS_ERROR;
++ }
++
++ DEBUG9(printk("%s(%ld): exiting. ret=%d.\n",
++ __func__, ha->host_no, ret);)
++
++ return (ret);
++}
++
++/*
++ * qla2x00_free_ioctl_scrap_mem
++ * Makes the entire scrap buffer free for use.
++ *
++ * Input:
++ * ha = adapter state pointer.
++ *
++ * Returns:
++ * qla2x00 local function return status code.
++ *
++ */
++void
++qla2x00_free_ioctl_scrap_mem(scsi_qla_host_t *ha)
++{
++ DEBUG9(printk("%s(%ld): inst=%ld entered.\n",
++ __func__, ha->host_no, ha->instance);)
++
++ memset(ha->ioctl->scrap_mem, 0, ha->ioctl->scrap_mem_size);
++ ha->ioctl->scrap_mem_used = 0;
++
++ DEBUG9(printk("%s(%ld): exiting.\n",
++ __func__, ha->host_no);)
++}
++
++#if defined(ISP2300)
++/*
++ * qla2x00_get_next_free_pub_id
++ * Find the next free public loop ID to use, starting from the old
++ * loop ID passed in. If the old loop ID is invalid, this function
++ * will start the search from beginning.
++ *
++ * Input:
++ * ha = adapter block pointer.
++ * ploop_id = pointer to a 16bit var containing the old loop
++ * ID which is also to be used to get the new loop ID.
++ *
++ * Returns:
++ * QL_STATUS_SUCCESS - Found an usable loop ID
++ * QL_STATUS_RESOURCE_ERROR - No more free loop ID
++ */
++static uint8_t
++qla2x00_get_next_free_pub_id(scsi_qla_host_t *ha, uint16_t *ploop_id)
++{
++ uint8_t retval = QL_STATUS_SUCCESS;
++ uint16_t index;
++ uint16_t old_id;
++
++ DEBUG9(printk("%s(%ld): inst=%ld entered.\n",
++ __func__, ha->host_no, ha->instance);)
++
++ old_id = *ploop_id;
++ if (old_id >= LAST_SNS_LOOP_ID) {
++ /* set a starting point */
++ old_id = ha->min_external_loopid;
++ }
++
++ for (index = old_id; index < LAST_SNS_LOOP_ID; index++) {
++ if (!ha->fabricid[index].in_use) {
++ ha->fabricid[index].in_use = TRUE;
++ *ploop_id = index;
++ DEBUG9(printk("%s(%ld): found Lid %02x.\n",
++ __func__, ha->host_no, index);)
++ break;
++ }
++ }
++ if (index >= LAST_SNS_LOOP_ID) {
++ /* no more free ID */
++ DEBUG9_10(printk("%s(%ld): inst=%ld ERROR no more free LID "
++ "available.\n", __func__, ha->host_no, ha->instance);)
++
++ retval = QL_STATUS_RESOURCE_ERROR;
++ }
++
++ DEBUG9(printk("%s(%ld): inst=%ld exiting. retval=%d.\n",
++ __func__, ha->host_no, ha->instance, retval);)
++
++ return retval;
++}
++
++/*
++ * qla2x00_host_relogin
++ * Issue fabric login command to a host in the host_db which
++ * had somehow been lost before. All updates are passed back
++ * via pdevice. No update will be done to any of ha's database.
++ *
++ * Input:
++ * ha = adapter block pointer.
++ * pdevice = pointer to FC device type structure.
++ *
++ * Returns:
++ * QL_STATUS_SUCCESS - Login successfully
++ * QL_STATUS_ERROR - Login failed
++ * QL_STATUS_FATAL_ERROR - Fatal error
++ */
++static uint8_t
++qla2x00_host_relogin(scsi_qla_host_t *ha, fcdev_t *pdevice)
++{
++ uint8_t retval = QL_STATUS_SUCCESS;
++ uint16_t status[3];
++ uint16_t tmp_loop_id;
++
++ DEBUG9(printk("%s(%ld): inst=%ld entered.\n",
++ __func__, ha->host_no, ha->instance);)
++
++ /* pdevice->loop_id is assumed to be straight from the current
++ * database content.
++ */
++ tmp_loop_id = pdevice->loop_id & 0xff;
++ if (tmp_loop_id >= LAST_SNS_LOOP_ID) {
++ /* Invalid value. We need to find a valid ID to use. */
++ if (qla2x00_get_next_free_pub_id(ha, &tmp_loop_id) != 0) {
++ /* no more free IDs to use */
++ DEBUG9_10(printk("%s(%ld): inst=%ld no free loop_id "
++ " available for login.\n",
++ __func__, ha->host_no, ha->instance);)
++
++ return QL_STATUS_ERROR;
++ }
++ }
++
++ for (;;) {
++ DEBUG9(printk("%s(%ld): Login w/loop id 0x%02x for port "
++ "%02x%02x%02x\n",
++ __func__, ha->host_no, pdevice->loop_id,
++ pdevice->d_id.b.domain,
++ pdevice->d_id.b.area,
++ pdevice->d_id.b.al_pa));
++
++ /* Login device on switch. */
++ qla2x00_login_fabric(ha,
++ tmp_loop_id, pdevice->d_id.b.domain,
++ pdevice->d_id.b.area, pdevice->d_id.b.al_pa,
++ &status[0], 0);
++
++ if (status[0] != MBS_CMD_CMP &&
++ status[0] != MBS_PORT_ID_IN_USE &&
++ status[0] != MBS_LOOP_ID_IN_USE) {
++
++ DEBUG9_10(printk("%s(%ld): inst=%ld "
++ "ERROR login status[0]=%x status[1]=%x.\n",
++ __func__, ha->host_no, ha->instance, status[0],
++ status[1]);)
++
++ retval = QL_STATUS_FATAL_ERROR;
++ break;
++ }
++
++ if (status[0] == MBS_CMD_CMP) {
++ DEBUG9(printk("%s(%ld): inst=%ld "
++ " host login success; loop_id=%x.\n",
++ __func__, ha->host_no, ha->instance, tmp_loop_id);)
++
++ pdevice->loop_id = tmp_loop_id;
++ retval = QL_STATUS_SUCCESS;
++ break;
++
++ } else if (status[0] == MBS_PORT_ID_IN_USE) {
++ ha->fabricid[tmp_loop_id].in_use = FALSE;
++ tmp_loop_id = status[1];
++
++ DEBUG9(printk("%s(%ld): inst=%ld "
++ "port %02x%02x%02x already using loop id=0x%02x in "
++ "f/w database. Retrying.\n",
++ __func__, ha->host_no, ha->instance,
++ pdevice->d_id.b.domain,
++ pdevice->d_id.b.area,
++ pdevice->d_id.b.al_pa,
++ tmp_loop_id);)
++
++ if (tmp_loop_id <= LAST_SNS_LOOP_ID) {
++ ha->fabricid[tmp_loop_id].in_use = TRUE;
++ } else {
++ /* Error */
++ DEBUG9_10(printk("%s(%ld): inst=%ld "
++ "PORT_ID_IN_USE - invalid loop id %02x "
++ "returned.\n",
++ __func__, ha->host_no, ha->instance,
++ pdevice->loop_id);)
++ retval = QL_STATUS_ERROR;
++ break;
++ }
++
++ } else if (status[0] == MBS_LOOP_ID_IN_USE) {
++ /* loop id already used by others; try another one */
++ DEBUG9_10(printk("%s(%ld): inst=%ld "
++ "loop id %02x already used.\n",
++ __func__, ha->host_no, ha->instance,
++ pdevice->loop_id);)
++
++ /* Search for another usable loop_id */
++ if (qla2x00_get_next_free_pub_id(ha,
++ &tmp_loop_id) == 0) {
++
++ DEBUG9(printk("%s(%ld): previous loop "
++ "id in use. Retry with 0x%02x.\n",
++ __func__, ha->host_no, tmp_loop_id);)
++
++ ha->fabricid[tmp_loop_id].in_use = TRUE;
++ } else {
++ /* Error */
++ DEBUG9_10(printk("%s(%ld): inst=%ld loop id "
++ "in use; no more free loop id.\n",
++ __func__, ha->host_no, ha->instance);)
++
++ retval = QL_STATUS_ERROR;
++ break;
++ }
++ }
++ }
++
++ DEBUG9(printk("%s(%ld): inst=%ld exiting. retval=%d.\n",
++ __func__, ha->host_no, ha->instance, retval);)
++
++ return (retval);
++}
++#endif
++
++/*
++ * qla2x00_find_curr_ha
++ * Searches and returns the pointer to the adapter host_no specified.
++ *
++ * Input:
++ * host_inst = driver internal adapter instance number to search.
++ * ha = adapter state pointer of the instance requested.
++ *
++ * Returns:
++ * qla2x00 local function return status code.
++ *
++ * Context:
++ * Kernel context.
++ */
++static int
++qla2x00_find_curr_ha(uint16_t host_inst, scsi_qla_host_t **ret_ha)
++{
++ int rval = QL_STATUS_SUCCESS;
++ int found;
++ struct list_head *hal;
++ scsi_qla_host_t *search_ha = NULL;
++
++ /*
++ * Set ha context for this IOCTL by matching host_no.
++ */
++ found = 0;
++ read_lock(&qla_hostlist_lock);
++ list_for_each(hal, &qla_hostlist) {
++ search_ha = list_entry(hal, scsi_qla_host_t, list);
++
++ if (search_ha->instance == host_inst) {
++ found++;
++ break;
++ }
++ }
++ read_unlock(&qla_hostlist_lock);
++
++ if (!found) {
++ DEBUG10(printk("%s: ERROR matching host_inst "
++ "%d to an HBA Instance.\n", __func__, host_inst);)
++ rval = QL_STATUS_ERROR;
++ } else {
++ DEBUG9(printk("%s: found matching host_inst "
++ "%d to an HBA Instance.\n", __func__, host_inst);)
++ *ret_ha = search_ha;
++ }
++
++ return rval;
++}
++
++/*
++ * qla2x00_get_driver_specifics
++ * Returns driver specific data in the response buffer.
++ *
++ * Input:
++ * pext = pointer to EXT_IOCTL structure containing values from user.
++ *
++ * Returns:
++ * 0 = success
++ * others = errno value
++ *
++ * Context:
++ * Kernel context.
++ */
++static int
++qla2x00_get_driver_specifics(EXT_IOCTL *pext)
++{
++ int ret = 0;
++ EXT_LN_DRIVER_DATA data;
++
++ DEBUG9(printk("%s: entered.\n",
++ __func__);)
++
++ if (pext->ResponseLen < sizeof(EXT_LN_DRIVER_DATA)) {
++ pext->Status = EXT_STATUS_BUFFER_TOO_SMALL;
++ DEBUG9_10(printk("%s: ERROR ResponseLen too small.\n",
++ __func__);)
++
++ return (ret);
++ }
++
++ data.DrvVer.Major = QLA_DRIVER_MAJOR_VER;
++ data.DrvVer.Minor = QLA_DRIVER_MINOR_VER;
++ data.DrvVer.Patch = QLA_DRIVER_PATCH_VER;
++ data.DrvVer.Beta = QLA_DRIVER_BETA_VER;
++
++ ret = verify_area(VERIFY_WRITE, (void *)pext->ResponseAdr,
++ sizeof(EXT_LN_DRIVER_DATA));
++ if (ret) {
++ pext->Status = EXT_STATUS_COPY_ERR;
++ DEBUG9_10(printk("%s: ERROR verify write resp buf\n",
++ __func__);)
++
++ return (ret);
++ }
++
++ ret = copy_to_user(pext->ResponseAdr, &data, sizeof(EXT_LN_DRIVER_DATA));
++ if (ret) {
++ pext->Status = EXT_STATUS_COPY_ERR;
++ DEBUG9_10(printk("%s: ERROR copy resp buf\n",
++ __func__);)
++ }
++
++ DEBUG9(printk("%s: exiting. ret=%d.\n",
++ __func__, ret);)
++
++ return (ret);
++}
++
++/*
++ * qla2x00_aen_reg
++ * IOCTL management server Asynchronous Event Tracking Enable/Disable.
++ *
++ * Input:
++ * ha = pointer to the adapter struct of the adapter to register.
++ * cmd = pointer to EXT_IOCTL structure containing values from user.
++ * mode = flags. not used.
++ *
++ * Returns:
++ * 0 = success
++ * others = errno value
++ *
++ * Context:
++ * Kernel context.
++ */
++static int
++qla2x00_aen_reg(scsi_qla_host_t *ha, EXT_IOCTL *cmd, int mode)
++{
++ int rval = 0;
++ EXT_REG_AEN reg_struct;
++
++ DEBUG9(printk("%s(%ld): inst %ld entered.\n",
++ __func__, ha->host_no, ha->instance);)
++
++ rval = verify_area(VERIFY_READ, (void *)cmd->RequestAdr,
++ sizeof(EXT_REG_AEN));
++ if (rval) {
++ cmd->Status = EXT_STATUS_COPY_ERR;
++ DEBUG9_10(printk("%s(%ld): inst %ld ERROR verify read req buf\n",
++ __func__, ha->host_no, ha->instance);)
++
++ return (rval);
++ }
++
++ rval = copy_from_user(®_struct, cmd->RequestAdr, sizeof(EXT_REG_AEN));
++ if (rval == 0) {
++ cmd->Status = EXT_STATUS_OK;
++ if (reg_struct.Enable) {
++ ha->ioctl->flags |= IOCTL_AEN_TRACKING_ENABLE;
++ } else {
++ ha->ioctl->flags &= ~IOCTL_AEN_TRACKING_ENABLE;
++ }
++ } else {
++ cmd->Status = EXT_STATUS_COPY_ERR;
++ }
++
++ DEBUG9(printk("%s(%ld): inst %ld reg_struct.Enable(%d) "
++ "ha->ioctl_flag(%x) cmd->Status(%d).",
++ __func__, ha->host_no, ha->instance, reg_struct.Enable,
++ ha->ioctl->flags, cmd->Status);)
++
++ DEBUG9(printk("%s(%ld): inst=%ld exiting.\n",
++ __func__, ha->host_no, ha->instance);)
++
++ return (rval);
++}
++
++/*
++ * qla2x00_aen_get
++ * Asynchronous Event Record Transfer to user.
++ * The entire queue will be emptied and transferred back.
++ *
++ * Input:
++ * ha = pointer to the adapter struct of the specified adapter.
++ * pext = pointer to EXT_IOCTL structure containing values from user.
++ * mode = flags.
++ *
++ * Returns:
++ * 0 = success
++ * others = errno value
++ *
++ * Context:
++ * Kernel context.
++ *
++ * NOTE: Need to use hardware lock to protect the queues from updates
++ * via isr/enqueue_aen after we get rid of io_request_lock.
++ */
++static int
++qla2x00_aen_get(scsi_qla_host_t *ha, EXT_IOCTL *cmd, int mode)
++{
++ int rval = 0;
++ EXT_ASYNC_EVENT *tmp_q;
++ EXT_ASYNC_EVENT *paen;
++ uint8_t i;
++ uint8_t queue_cnt;
++ uint8_t request_cnt;
++ uint32_t stat = EXT_STATUS_OK;
++ uint32_t ret_len = 0;
++ unsigned long cpu_flags = 0;
++
++ DEBUG9(printk("%s(%ld): inst=%ld entered.\n",
++ __func__, ha->host_no, ha->instance);)
++
++ request_cnt = (uint8_t)(cmd->ResponseLen / sizeof(EXT_ASYNC_EVENT));
++
++ if (request_cnt < EXT_DEF_MAX_AEN_QUEUE) {
++ /* We require caller to alloc for the maximum request count */
++ cmd->Status = EXT_STATUS_BUFFER_TOO_SMALL;
++ DEBUG9_10(printk("%s(%ld): inst=%ld Buffer too small. "
++ "Exiting normally.",
++ __func__, ha->host_no, ha->instance);)
++
++ return (rval);
++ }
++
++ if (qla2x00_get_ioctl_scrap_mem(ha, (void **)&paen,
++ sizeof(EXT_ASYNC_EVENT) * EXT_DEF_MAX_AEN_QUEUE)) {
++ /* not enough memory */
++ cmd->Status = EXT_STATUS_NO_MEMORY;
++ DEBUG9_10(printk("%s(%ld): inst=%ld scrap not big enough. "
++ "size requested=%d.\n",
++ __func__, ha->host_no, ha->instance,
++ sizeof(EXT_ASYNC_EVENT)*EXT_DEF_MAX_AEN_QUEUE);)
++ return (rval);
++ }
++
++ /* 1st: Make a local copy of the entire queue content. */
++ tmp_q = (EXT_ASYNC_EVENT *)ha->ioctl->aen_tracking_queue;
++ queue_cnt = 0;
++
++ spin_lock_irqsave(&ha->hardware_lock, cpu_flags);
++ i = ha->ioctl->aen_q_head;
++
++ for (; queue_cnt < EXT_DEF_MAX_AEN_QUEUE;) {
++ if (tmp_q[i].AsyncEventCode != 0) {
++ memcpy(&paen[queue_cnt], &tmp_q[i],
++ sizeof(EXT_ASYNC_EVENT));
++ queue_cnt++;
++ tmp_q[i].AsyncEventCode = 0; /* empty out the slot */
++ }
++
++ if (i == ha->ioctl->aen_q_tail) {
++ /* done. */
++ break;
++ }
++
++ i++;
++
++ if (i == EXT_DEF_MAX_AEN_QUEUE) {
++ i = 0;
++ }
++ }
++
++ /* Empty the queue. */
++ ha->ioctl->aen_q_head = 0;
++ ha->ioctl->aen_q_tail = 0;
++
++ spin_unlock_irqrestore(&ha->hardware_lock, cpu_flags);
++
++ /* 2nd: Now transfer the queue content to user buffer */
++ /* Copy the entire queue to user's buffer. */
++ ret_len = (uint32_t)(queue_cnt * sizeof(EXT_ASYNC_EVENT));
++ if (queue_cnt != 0) {
++ rval = verify_area(VERIFY_WRITE, (void *)cmd->ResponseAdr,
++ ret_len);
++ if (rval != 0) {
++ cmd->Status = EXT_STATUS_COPY_ERR;
++ DEBUG9_10(printk(
++ "%s(%ld): inst=%ld ERROR verify write resp buf.\n",
++ __func__, ha->host_no, ha->instance);)
++
++ qla2x00_free_ioctl_scrap_mem(ha);
++ return (rval);
++ }
++
++ rval = copy_to_user(cmd->ResponseAdr, paen, ret_len);
++ }
++ cmd->ResponseLen = ret_len;
++
++ if (rval != 0) {
++ stat = EXT_STATUS_COPY_ERR;
++ DEBUG9_10(printk("%s(%ld): inst=%ld FAILED. error = %d\n",
++ __func__, ha->host_no, ha->instance, stat);)
++ } else {
++ stat = EXT_STATUS_OK;
++ }
++
++ cmd->Status = stat;
++ qla2x00_free_ioctl_scrap_mem(ha);
++
++ DEBUG9(printk("%s(%ld): inst=%ld exiting. rval=%d.\n",
++ __func__, ha->host_no, ha->instance, rval);)
++
++ return (rval);
++}
++
++/*
++ * qla2x00_enqueue_aen
++ *
++ * Input:
++ * ha = adapter state pointer.
++ * event_code = async event code of the event to add to queue.
++ * payload = event payload for the queue.
++ *
++ * Context:
++ * Interrupt context.
++ * NOTE: Need to hold the hardware lock to protect the queues from
++ * aen_get after we get rid of the io_request_lock.
++ */
++void
++qla2x00_enqueue_aen(scsi_qla_host_t *ha, uint16_t event_code, void *payload)
++{
++ uint8_t new_entry; /* index to current entry */
++ uint16_t *mbx;
++ EXT_ASYNC_EVENT *aen_queue;
++
++ DEBUG9(printk("%s(%ld): inst=%ld entered.\n",
++ __func__, ha->host_no, ha->instance);)
++
++ aen_queue = (EXT_ASYNC_EVENT *)ha->ioctl->aen_tracking_queue;
++ if (aen_queue[ha->ioctl->aen_q_tail].AsyncEventCode != 0) {
++ /* Need to change queue pointers to make room. */
++
++ /* Increment tail for adding new entry. */
++ ha->ioctl->aen_q_tail++;
++ if (ha->ioctl->aen_q_tail == EXT_DEF_MAX_AEN_QUEUE) {
++ ha->ioctl->aen_q_tail = 0;
++ }
++
++ if (ha->ioctl->aen_q_head == ha->ioctl->aen_q_tail) {
++ /*
++ * We're overwriting the oldest entry, so need to
++ * update the head pointer.
++ */
++ ha->ioctl->aen_q_head++;
++ if (ha->ioctl->aen_q_head == EXT_DEF_MAX_AEN_QUEUE) {
++ ha->ioctl->aen_q_head = 0;
++ }
++ }
++ }
++
++ DEBUG(printk("%s(%ld): inst=%ld Adding code 0x%x to aen_q %p @ %d\n",
++ __func__, ha->host_no, ha->instance, event_code, aen_queue,
++ ha->ioctl->aen_q_tail);)
++
++ new_entry = ha->ioctl->aen_q_tail;
++ aen_queue[new_entry].AsyncEventCode = event_code;
++
++ /* Update payload */
++ switch (event_code) {
++ case MBA_LIP_OCCURRED:
++ case MBA_LOOP_UP:
++ case MBA_LOOP_DOWN:
++ case MBA_LIP_RESET:
++ case MBA_PORT_UPDATE:
++ /* empty */
++ break;
++
++ case MBA_SCR_UPDATE:
++ mbx = (uint16_t *)payload;
++ /* al_pa */
++ aen_queue[new_entry].Payload.RSCN.RSCNInfo[0] = LSB(mbx[2]);
++ /* area */
++ aen_queue[new_entry].Payload.RSCN.RSCNInfo[1] = MSB(mbx[2]);
++ /* domain */
++ aen_queue[new_entry].Payload.RSCN.RSCNInfo[2] = LSB(mbx[1]);
++ /* save in big endian */
++ BIG_ENDIAN_24(aen_queue[new_entry].Payload.RSCN.RSCNInfo[0]);
++
++ aen_queue[new_entry].Payload.RSCN.AddrFormat = MSB(mbx[1]);
++
++ break;
++
++ default:
++ /* Not supported */
++ aen_queue[new_entry].AsyncEventCode = 0;
++ break;
++ }
++
++ DEBUG9(printk("%s(%ld): inst=%ld exiting.\n",
++ __func__, ha->host_no, ha->instance);)
++}
++
++/*
++ * qla2x00_query
++ * Handles all subcommands of the EXT_CC_QUERY command.
++ *
++ * Input:
++ * ha = adapter state pointer.
++ * pext = EXT_IOCTL structure pointer.
++ * mode = not used.
++ *
++ * Returns:
++ * 0 = success
++ * others = errno value
++ *
++ * Context:
++ * Kernel context.
++ */
++static int
++qla2x00_query(scsi_qla_host_t *ha, EXT_IOCTL *pext, int mode)
++{
++ int rval = 0;
++
++ DEBUG9(printk("%s(%ld): inst=%ld entered.\n",
++ __func__, ha->host_no, ha->instance);)
++
++ /* All Query type ioctls are done here */
++ switch(pext->SubCode) {
++
++ case EXT_SC_QUERY_HBA_NODE:
++ /* fill in HBA NODE Information */
++ rval = qla2x00_query_hba_node(ha, pext, mode);
++ break;
++
++ case EXT_SC_QUERY_HBA_PORT:
++ /* return HBA PORT related info */
++ rval = qla2x00_query_hba_port(ha, pext, mode);
++ break;
++
++ case EXT_SC_QUERY_DISC_PORT:
++ /* return discovered port information */
++ rval = qla2x00_query_disc_port(ha, pext, mode);
++ break;
++
++ case EXT_SC_QUERY_DISC_TGT:
++ /* return discovered target information */
++ rval = qla2x00_query_disc_tgt(ha, pext, mode);
++ break;
++
++ case EXT_SC_QUERY_CHIP:
++ rval = qla2x00_query_chip(ha, pext, mode);
++ break;
++
++ case EXT_SC_QUERY_DISC_LUN:
++ pext->Status = EXT_STATUS_UNSUPPORTED_SUBCODE;
++ break;
++
++ default:
++ DEBUG9_10(printk("%s(%ld): inst=%ld unknown SubCode %d.\n",
++ __func__, ha->host_no, ha->instance, pext->SubCode);)
++ pext->Status = EXT_STATUS_UNSUPPORTED_SUBCODE;
++ break;
++ }
++
++ DEBUG9(printk("%s(%ld): inst=%ld exiting.\n",
++ __func__, ha->host_no, ha->instance);)
++ return rval;
++}
++
++/*
++ * qla2x00_query_hba_node
++ * Handles EXT_SC_QUERY_HBA_NODE subcommand.
++ *
++ * Input:
++ * ha = adapter state pointer.
++ * pext = EXT_IOCTL structure pointer.
++ * mode = not used.
++ *
++ * Returns:
++ * 0 = success
++ * others = errno value
++ *
++ * Context:
++ * Kernel context.
++ */
++static int
++qla2x00_query_hba_node(scsi_qla_host_t *ha, EXT_IOCTL *pext, int mode)
++{
++ int ret = 0;
++ uint32_t i, transfer_size;
++ EXT_HBA_NODE *ptmp_hba_node;
++
++ DEBUG9(printk("%s(%ld): inst=%ld entered.\n",
++ __func__, ha->host_no, ha->instance);)
++
++ if (qla2x00_get_ioctl_scrap_mem(ha, (void **)&ptmp_hba_node,
++ sizeof(EXT_HBA_NODE))) {
++ /* not enough memory */
++ pext->Status = EXT_STATUS_NO_MEMORY;
++ DEBUG9_10(printk("%s(%ld): inst=%ld scrap not big enough. "
++ "size requested=%d.\n",
++ __func__, ha->host_no, ha->instance,
++ sizeof(EXT_HBA_NODE));)
++ return (ret);
++ }
++
++ /* fill all available HBA NODE Information */
++ for (i = 0; i < 8 ; i++)
++ ptmp_hba_node->WWNN[i] = ha->node_name[i];
++
++ sprintf((char *)(ptmp_hba_node->Manufacturer),"Qlogic Corp.");
++ sprintf((char *)(ptmp_hba_node->Model), ha->brd_info->name);
++
++ ptmp_hba_node->SerialNum[0] = ha->serial0;
++ ptmp_hba_node->SerialNum[1] = ha->serial1;
++ ptmp_hba_node->SerialNum[2] = ha->serial2;
++ sprintf((char *)(ptmp_hba_node->DriverVersion), qla2x00_version_str);
++ sprintf((char *)(ptmp_hba_node->FWVersion),"%2d.%02d.%02d",
++ ha->fw_major_version,
++ ha->fw_minor_version,
++ ha->fw_subminor_version);
++
++ sprintf((char *)(ptmp_hba_node->OptRomVersion),"%d.%d",
++ ha->optrom_major, ha->optrom_minor);
++
++ ptmp_hba_node->InterfaceType = EXT_DEF_FC_INTF_TYPE;
++ ptmp_hba_node->PortCount = 1;
++
++
++ ptmp_hba_node->DriverAttr = (ha->flags.failover_enabled) ?
++ DRVR_FO_ENABLED : 0;
++
++ ret = verify_area(VERIFY_WRITE, (void *)pext->ResponseAdr,
++ sizeof(EXT_HBA_NODE));
++ if (ret) {
++ pext->Status = EXT_STATUS_COPY_ERR;
++ DEBUG9_10(printk("%s(%ld): inst=%ld ERROR verify wrt rsp buf\n",
++ __func__, ha->host_no, ha->instance);)
++ qla2x00_free_ioctl_scrap_mem(ha);
++ return (ret);
++ }
++
++ /* now copy up the HBA_NODE to user */
++ if (pext->ResponseLen < sizeof(EXT_HBA_NODE))
++ transfer_size = pext->ResponseLen;
++ else
++ transfer_size = sizeof(EXT_HBA_NODE);
++
++ ret = copy_to_user((uint8_t *)pext->ResponseAdr,
++ (uint8_t *)ptmp_hba_node, transfer_size);
++ if (ret) {
++ pext->Status = EXT_STATUS_COPY_ERR;
++ DEBUG9_10(printk("%s(%ld): inst=%ld ERROR copy rsp buffer.\n",
++ __func__, ha->host_no, ha->instance);)
++ qla2x00_free_ioctl_scrap_mem(ha);
++ return (ret);
++ }
++
++ pext->Status = EXT_STATUS_OK;
++ pext->DetailStatus = EXT_STATUS_OK;
++
++ DEBUG9(printk("%s(%ld): inst=%ld exiting.\n",
++ __func__, ha->host_no, ha->instance);)
++
++ qla2x00_free_ioctl_scrap_mem(ha);
++ return (ret);
++}
++
++/*
++ * qla2x00_query_hba_port
++ * Handles EXT_SC_QUERY_HBA_PORT subcommand.
++ *
++ * Input:
++ * ha = adapter state pointer.
++ * pext = EXT_IOCTL structure pointer.
++ * mode = not used.
++ *
++ * Returns:
++ * 0 = success
++ * others = errno value
++ *
++ * Context:
++ * Kernel context.
++ */
++static int
++qla2x00_query_hba_port(scsi_qla_host_t *ha, EXT_IOCTL *pext, int mode)
++{
++ int ret = 0;
++ uint32_t tgt_cnt, tgt, transfer_size;
++ uint32_t port_cnt;
++ struct list_head *fcpl;
++ fc_port_t *fcport;
++ EXT_HBA_PORT *ptmp_hba_port;
++
++ DEBUG9(printk("%s(%ld): inst=%ld entered.\n",
++ __func__, ha->host_no, ha->instance);)
++
++ if (qla2x00_get_ioctl_scrap_mem(ha, (void **)&ptmp_hba_port,
++ sizeof(EXT_HBA_PORT))) {
++ /* not enough memory */
++ pext->Status = EXT_STATUS_NO_MEMORY;
++ DEBUG9_10(printk("%s(%ld): inst=%ld scrap not big enough. "
++ "size requested=%d.\n",
++ __func__, ha->host_no, ha->instance,
++ sizeof(EXT_HBA_PORT));)
++ return (ret);
++ }
++
++ /* reflect all HBA PORT related info */
++ ptmp_hba_port->WWPN[7] = ha->init_cb->port_name[7];
++ ptmp_hba_port->WWPN[6] = ha->init_cb->port_name[6];
++ ptmp_hba_port->WWPN[5] = ha->init_cb->port_name[5];
++ ptmp_hba_port->WWPN[4] = ha->init_cb->port_name[4];
++ ptmp_hba_port->WWPN[3] = ha->init_cb->port_name[3];
++ ptmp_hba_port->WWPN[2] = ha->init_cb->port_name[2];
++ ptmp_hba_port->WWPN[1] = ha->init_cb->port_name[1];
++ ptmp_hba_port->WWPN[0] = ha->init_cb->port_name[0];
++ ptmp_hba_port->Id[0] = 0;
++ ptmp_hba_port->Id[1] = ha->d_id.r.d_id[2];
++ ptmp_hba_port->Id[2] = ha->d_id.r.d_id[1];
++ ptmp_hba_port->Id[3] = ha->d_id.r.d_id[0];
++ ptmp_hba_port->Type = EXT_DEF_INITIATOR_DEV;
++
++ switch (ha->current_topology) {
++ case ISP_CFG_NL:
++ case ISP_CFG_FL:
++ ptmp_hba_port->Mode = EXT_DEF_LOOP_MODE;
++ break;
++
++ case ISP_CFG_N:
++ case ISP_CFG_F:
++ ptmp_hba_port->Mode = EXT_DEF_P2P_MODE;
++ break;
++
++ default:
++ ptmp_hba_port->Mode = EXT_DEF_UNKNOWN_MODE;
++ break;
++ }
++
++ port_cnt = 0;
++ list_for_each(fcpl, &ha->fcports) {
++ fcport = list_entry(fcpl, fc_port_t, list);
++
++ /* if removed or missing */
++ if (atomic_read(&fcport->state) != FC_ONLINE) {
++ DEBUG9_10(printk(
++ "%s(%ld): inst=%ld port %02x%02x%02x not online\n",
++ __func__, ha->host_no, ha->instance,
++ fcport->d_id.b.domain,
++ fcport->d_id.b.area,
++ fcport->d_id.b.al_pa));
++ continue;
++ }
++ port_cnt++;
++ }
++
++ tgt_cnt = 0;
++ for (tgt = 0; tgt < MAX_TARGETS; tgt++) {
++ if (ha->otgt[tgt] == NULL) {
++ continue;
++ }
++ tgt_cnt++;
++ }
++
++ DEBUG9_10(printk("%s(%ld): inst=%ld disc_port cnt=%d, tgt cnt=%d.\n",
++ __func__, ha->host_no, ha->instance,
++ port_cnt, tgt_cnt);)
++ ptmp_hba_port->DiscPortCount = port_cnt;
++ ptmp_hba_port->DiscTargetCount = tgt_cnt;
++
++ if (ha->loop_state == LOOP_DOWN) {
++
++ ptmp_hba_port->State = EXT_DEF_HBA_LOOP_DOWN;
++
++ } else if (ha->loop_state != LOOP_READY ||
++ test_bit(ABORT_ISP_ACTIVE, &ha->dpc_flags) ||
++ test_bit(CFG_ACTIVE, &ha->cfg_flags) || ABORTS_ACTIVE) {
++
++ ptmp_hba_port->State = EXT_DEF_HBA_SUSPENDED;
++
++ } else {
++
++ ptmp_hba_port->State = EXT_DEF_HBA_OK;
++
++ }
++
++ ptmp_hba_port->DiscPortNameType = EXT_DEF_USE_PORT_NAME;
++
++ /* Return supported FC4 type depending on driver support. */
++ ptmp_hba_port->PortSupportedFC4Types = EXT_DEF_FC4_TYPE_SCSI;
++#if defined(FC_IP_SUPPORT)
++
++ ptmp_hba_port->PortSupportedFC4Types |= EXT_DEF_FC4_TYPE_IP;
++#endif
++#if defined(FC_SCTP_SUPPORT)
++
++ ptmp_hba_port->PortSupportedFC4Types |= EXT_DEF_FC4_TYPE_SCTP;
++#endif
++
++ ptmp_hba_port->PortActiveFC4Types = ha->active_fc4_types;
++
++ /* Return supported speed depending on adapter type */
++#if defined(ISP2100)
++
++ ptmp_hba_port->PortSupportedSpeed = EXT_DEF_PORTSPEED_1GBIT;
++#elif defined(ISP2200)
++
++ ptmp_hba_port->PortSupportedSpeed = EXT_DEF_PORTSPEED_1GBIT;
++#elif defined(ISP2300)
++
++ ptmp_hba_port->PortSupportedSpeed = EXT_DEF_PORTSPEED_2GBIT;
++#else
++ /* invalid */
++ ptmp_hba_port->PortSupportedSpeed = 0;
++#endif
++
++ ptmp_hba_port->PortSpeed = ha->current_speed;
++
++ ret = verify_area(VERIFY_WRITE, (void *)pext->ResponseAdr ,
++ sizeof(EXT_HBA_PORT));
++ if (ret) {
++ pext->Status = EXT_STATUS_COPY_ERR;
++ DEBUG9_10(printk("%s(%ld): inst=%ld ERROR verify wrt rsp buf\n",
++ __func__, ha->host_no, ha->instance);)
++ qla2x00_free_ioctl_scrap_mem(ha);
++ return (ret);
++ }
++
++ /* now copy up the HBA_PORT to user */
++ if (pext->ResponseLen < sizeof(EXT_HBA_PORT))
++ transfer_size = pext->ResponseLen;
++ else
++ transfer_size = sizeof(EXT_HBA_PORT);
++
++ ret = copy_to_user((uint8_t *)pext->ResponseAdr,
++ (uint8_t *)ptmp_hba_port, transfer_size);
++ if (ret) {
++ pext->Status = EXT_STATUS_COPY_ERR;
++ DEBUG9_10(printk("%s(%ld): inst=%ld ERROR copy rsp buffer.\n",
++ __func__, ha->host_no, ha->instance);)
++ qla2x00_free_ioctl_scrap_mem(ha);
++ return (ret);
++ }
++
++ pext->Status = EXT_STATUS_OK;
++ pext->DetailStatus = EXT_STATUS_OK;
++ qla2x00_free_ioctl_scrap_mem(ha);
++
++ DEBUG9(printk("%s(%ld): inst=%ld exiting.\n",
++ __func__, ha->host_no, ha->instance);)
++
++ return ret;
++}
++
++/*
++ * qla2x00_query_disc_port
++ * Handles EXT_SC_QUERY_DISC_PORT subcommand.
++ *
++ * Input:
++ * ha = adapter state pointer.
++ * pext = EXT_IOCTL structure pointer.
++ * mode = not used.
++ *
++ * Returns:
++ * 0 = success
++ * others = errno value
++ *
++ * Context:
++ * Kernel context.
++ */
++static int
++qla2x00_query_disc_port(scsi_qla_host_t *ha, EXT_IOCTL *pext, int mode)
++{
++ int ret = 0;
++ int found;
++ uint32_t tgt, transfer_size, inst;
++ struct list_head *fcpl;
++ fc_port_t *fcport;
++ os_tgt_t *tq;
++ EXT_DISC_PORT *ptmp_disc_port;
++
++ DEBUG9(printk("%s(%ld): inst=%ld entered. Port inst=%02d.\n",
++ __func__, ha->host_no, ha->instance, pext->Instance);)
++
++ inst = 0;
++ found = 0;
++ fcport = NULL;
++ list_for_each(fcpl, &ha->fcports) {
++ fcport = list_entry(fcpl, fc_port_t, list);
++
++ if (atomic_read(&fcport->state) != FC_ONLINE) {
++ /* port does not exist anymore */
++ DEBUG9(printk("%s(%ld): fcport marked lost. "
++ "d_id=%02x%02x%02x loop_id=%02x not online.\n",
++ __func__, ha->host_no,
++ fcport->d_id.b.domain,
++ fcport->d_id.b.area,
++ fcport->d_id.b.al_pa,
++ fcport->loop_id);)
++
++ continue;
++ }
++
++ if (inst != pext->Instance) {
++ DEBUG9(printk("%s(%ld): found fcport %02d "
++ "d_id=%02x%02x%02x. Skipping.\n",
++ __func__, ha->host_no, inst,
++ fcport->d_id.b.domain,
++ fcport->d_id.b.area,
++ fcport->d_id.b.al_pa));
++
++ inst++;
++ continue;
++ }
++
++ DEBUG9(printk("%s(%ld): inst=%ld found matching fcport %02d "
++ "online. d_id=%02x%02x%02x loop_id=%02x online.\n",
++ __func__, ha->host_no, ha->instance, inst,
++ fcport->d_id.b.domain,
++ fcport->d_id.b.area,
++ fcport->d_id.b.al_pa,
++ fcport->loop_id);)
++
++ /* Found the matching port still connected. */
++ found++;
++ break;
++ }
++
++ if (!found) {
++ DEBUG9_10(printk("%s(%ld): inst=%ld dev not found.\n",
++ __func__, ha->host_no, ha->instance);)
++
++ pext->Status = EXT_STATUS_DEV_NOT_FOUND;
++ return (ret);
++ }
++
++ if (qla2x00_get_ioctl_scrap_mem(ha, (void **)&ptmp_disc_port,
++ sizeof(EXT_DISC_PORT))) {
++ /* not enough memory */
++ pext->Status = EXT_STATUS_NO_MEMORY;
++ DEBUG9_10(printk("%s(%ld): inst=%ld scrap not big enough. "
++ "size requested=%d.\n",
++ __func__, ha->host_no, ha->instance,
++ sizeof(EXT_DISC_PORT));)
++ return (ret);
++ }
++
++ memcpy(ptmp_disc_port->WWNN, fcport->node_name, WWN_SIZE);
++ memcpy(ptmp_disc_port->WWPN, fcport->port_name, WWN_SIZE);
++
++ ptmp_disc_port->Id[0] = 0;
++ ptmp_disc_port->Id[1] = fcport->d_id.r.d_id[2];
++ ptmp_disc_port->Id[2] = fcport->d_id.r.d_id[1];
++ ptmp_disc_port->Id[3] = fcport->d_id.r.d_id[0];
++
++ /* Currently all devices on fcport list are target capable devices */
++ /* This default value may need to be changed after we add non target
++ * devices also to this list.
++ */
++ ptmp_disc_port->Type = EXT_DEF_TARGET_DEV;
++
++ if (fcport->flags & FC_FABRIC_DEVICE) {
++ ptmp_disc_port->Type |= EXT_DEF_FABRIC_DEV;
++ }
++ if (fcport->flags & FC_TAPE_DEVICE) {
++ ptmp_disc_port->Type |= EXT_DEF_TAPE_DEV;
++ }
++ if (fcport->flags & FC_INITIATOR_DEVICE) {
++ ptmp_disc_port->Type |= EXT_DEF_INITIATOR_DEV;
++ }
++
++ ptmp_disc_port->LoopID = fcport->loop_id;
++ ptmp_disc_port->Status = 0;
++ ptmp_disc_port->Bus = 0;
++
++ for (tgt = 0; tgt < MAX_TARGETS; tgt++) {
++ if ((tq = ha->otgt[tgt]) == NULL) {
++ continue;
++ }
++
++ if (tq->vis_port == NULL) /* dg 08/14/01 */
++ continue;
++
++ if (memcmp(fcport->port_name, tq->vis_port->port_name,
++ EXT_DEF_WWN_NAME_SIZE) == 0) {
++ ptmp_disc_port->TargetId = tgt;
++ break;
++ }
++ }
++
++ ret = verify_area(VERIFY_WRITE, (void *)pext->ResponseAdr ,
++ sizeof(EXT_DISC_PORT));
++ if (ret) {
++ pext->Status = EXT_STATUS_COPY_ERR;
++ DEBUG9_10(printk("%s(%ld): inst=%ld ERROR verify wrt rsp buf\n",
++ __func__, ha->host_no, ha->instance);)
++ qla2x00_free_ioctl_scrap_mem(ha);
++ return (ret);
++ }
++
++ /* now copy up the DISC_PORT to user */
++ if (pext->ResponseLen < sizeof(EXT_DISC_PORT))
++ transfer_size = pext->ResponseLen;
++ else
++ transfer_size = sizeof(EXT_DISC_PORT);
++
++ ret = copy_to_user((uint8_t *)pext->ResponseAdr,
++ (uint8_t *)ptmp_disc_port, transfer_size);
++ if (ret) {
++ pext->Status = EXT_STATUS_COPY_ERR;
++ DEBUG9_10(printk("%s(%ld): inst=%ld ERROR copy rsp buffer.\n",
++ __func__, ha->host_no, ha->instance);)
++ qla2x00_free_ioctl_scrap_mem(ha);
++ return (ret);
++ }
++
++ pext->Status = EXT_STATUS_OK;
++ pext->DetailStatus = EXT_STATUS_OK;
++ qla2x00_free_ioctl_scrap_mem(ha);
++
++ DEBUG9(printk("%s(%ld): inst=%ld exiting.\n",
++ __func__, ha->host_no, ha->instance);)
++
++ return (ret);
++}
++
++/*
++ * qla2x00_query_disc_tgt
++ * Handles EXT_SC_QUERY_DISC_TGT subcommand.
++ *
++ * Input:
++ * ha = adapter state pointer.
++ * pext = EXT_IOCTL structure pointer.
++ * mode = not used.
++ *
++ * Returns:
++ * 0 = success
++ * others = errno value
++ *
++ * Context:
++ * Kernel context.
++ */
++static int
++qla2x00_query_disc_tgt(scsi_qla_host_t *ha, EXT_IOCTL *pext, int mode)
++{
++ int ret = 0;
++ uint32_t tgt, transfer_size, inst;
++ uint32_t cnt, i;
++ fc_port_t *tgt_fcport;
++ os_tgt_t *tq;
++ EXT_DISC_TARGET *ptmp_disc_target;
++
++ DEBUG9(printk("%s(%ld): inst=%ld entered.\n",
++ __func__, ha->host_no, ha->instance);)
++
++ tq = NULL;
++ for (tgt = 0, inst = 0; tgt < MAX_TARGETS; tgt++) {
++ if (ha->otgt[tgt] == NULL) {
++ continue;
++ }
++ /* if wrong target id then skip to next entry */
++ if (inst != pext->Instance) {
++ inst++;
++ continue;
++ }
++ tq = ha->otgt[tgt];
++ break;
++ }
++
++ if (tq == NULL || tgt == MAX_TARGETS) {
++ pext->Status = EXT_STATUS_DEV_NOT_FOUND;
++ DEBUG9_10(printk("%s(%ld): inst=%ld target dev not found. "
++ "tq=%p, tgt=%d.\n",
++ __func__, ha->host_no, ha->instance, tq, tgt);)
++ return (ret);
++ }
++
++ if (tq->vis_port == NULL) { /* dg 08/14/01 */
++ pext->Status = EXT_STATUS_BUSY;
++ DEBUG9_10(printk("%s(%ld): inst=%ld target dev not found. "
++ "tq=%p.\n",
++ __func__, ha->host_no, ha->instance, tq);)
++ return (ret);
++ }
++
++ if (qla2x00_get_ioctl_scrap_mem(ha, (void **)&ptmp_disc_target,
++ sizeof(EXT_DISC_TARGET))) {
++ /* not enough memory */
++ pext->Status = EXT_STATUS_NO_MEMORY;
++ DEBUG9_10(printk("%s(%ld): inst=%ld scrap not big enough. "
++ "size requested=%d.\n",
++ __func__, ha->host_no, ha->instance,
++ sizeof(EXT_DISC_TARGET));)
++ return (ret);
++ }
++
++ tgt_fcport = tq->vis_port;
++ memcpy(ptmp_disc_target->WWNN, tgt_fcport->node_name, WWN_SIZE);
++ memcpy(ptmp_disc_target->WWPN, tgt_fcport->port_name, WWN_SIZE);
++
++ ptmp_disc_target->Id[0] = 0;
++ ptmp_disc_target->Id[1] = tgt_fcport->d_id.r.d_id[2];
++ ptmp_disc_target->Id[2] = tgt_fcport->d_id.r.d_id[1];
++ ptmp_disc_target->Id[3] = tgt_fcport->d_id.r.d_id[0];
++
++ /* All devices on ha->otgt list are target capable devices. */
++ ptmp_disc_target->Type = EXT_DEF_TARGET_DEV;
++
++ if (tgt_fcport->flags & FC_FABRIC_DEVICE) {
++ ptmp_disc_target->Type |= EXT_DEF_FABRIC_DEV;
++ }
++ if (tgt_fcport->flags & FC_TAPE_DEVICE) {
++ ptmp_disc_target->Type |= EXT_DEF_TAPE_DEV;
++ }
++ if (tgt_fcport->flags & FC_INITIATOR_DEVICE) {
++ ptmp_disc_target->Type |= EXT_DEF_INITIATOR_DEV;
++ }
++
++ ptmp_disc_target->LoopID = tgt_fcport->loop_id;
++ ptmp_disc_target->Status = 0;
++ ptmp_disc_target->Bus = 0;
++ ptmp_disc_target->TargetId = tgt;
++
++ cnt = 0;
++ /* enumerate available LUNs under this TGT (if any) */
++ if (ha->otgt[tgt] != NULL) {
++ for (i = 0; i < MAX_LUNS ; i++) {
++ if ((ha->otgt[tgt])->olun[i] !=0)
++ cnt++;
++ }
++ }
++
++ ptmp_disc_target->LunCount = cnt;
++
++ ret = verify_area(VERIFY_WRITE, (void *)pext->ResponseAdr,
++ sizeof(EXT_DISC_TARGET));
++ if (ret) {
++ pext->Status = EXT_STATUS_COPY_ERR;
++ DEBUG9_10(printk("%s(%ld): inst=%ld ERROR verify wrt rsp buf\n",
++ __func__, ha->host_no, ha->instance);)
++ qla2x00_free_ioctl_scrap_mem(ha);
++ return (ret);
++ }
++
++ /* now copy up the DISC_PORT to user */
++ if (pext->ResponseLen < sizeof(EXT_DISC_PORT))
++ transfer_size = pext->ResponseLen;
++ else
++ transfer_size = sizeof(EXT_DISC_TARGET);
++
++ ret = copy_to_user((uint8_t *)pext->ResponseAdr,
++ (uint8_t *)ptmp_disc_target, transfer_size);
++ if (ret) {
++ pext->Status = EXT_STATUS_COPY_ERR;
++ DEBUG9_10(printk("%s(%ld): inst=%ld ERROR copy rsp buffer.\n",
++ __func__, ha->host_no, ha->instance);)
++ qla2x00_free_ioctl_scrap_mem(ha);
++ return (ret);
++ }
++
++ pext->Status = EXT_STATUS_OK;
++ pext->DetailStatus = EXT_STATUS_OK;
++ qla2x00_free_ioctl_scrap_mem(ha);
++
++ DEBUG9(printk("%s(%ld): inst=%ld exiting.\n",
++ __func__, ha->host_no, ha->instance);)
++
++ return (ret);
++}
++
++/*
++ * qla2x00_query_chip
++ * Handles EXT_SC_QUERY_CHIP subcommand.
++ *
++ * Input:
++ * ha = adapter state pointer.
++ * pext = EXT_IOCTL structure pointer.
++ * mode = not used.
++ *
++ * Returns:
++ * 0 = success
++ * others = errno value
++ *
++ * Context:
++ * Kernel context.
++ */
++static int
++qla2x00_query_chip(scsi_qla_host_t *ha, EXT_IOCTL *pext, int mode)
++{
++ int ret = 0;
++ uint32_t transfer_size, i;
++ EXT_CHIP *ptmp_isp;
++ struct Scsi_Host *host;
++
++ DEBUG9(printk("%s(%ld): inst=%ld entered.\n",
++ __func__, ha->host_no, ha->instance);)
++
++ if (qla2x00_get_ioctl_scrap_mem(ha, (void **)&ptmp_isp,
++ sizeof(EXT_CHIP))) {
++ /* not enough memory */
++ pext->Status = EXT_STATUS_NO_MEMORY;
++ DEBUG9_10(printk("%s(%ld): inst=%ld scrap not big enough. "
++ "size requested=%d.\n",
++ __func__, ha->host_no, ha->instance,
++ sizeof(EXT_CHIP));)
++ return (ret);
++ }
++
++ host = ha->host;
++ ptmp_isp->VendorId = ha->pdev->vendor;
++ ptmp_isp->DeviceId = ha->pdev->device;
++ ptmp_isp->SubVendorId = ha->pdev->subsystem_vendor;
++ ptmp_isp->SubSystemId = ha->pdev->subsystem_device;
++ ptmp_isp->PciBusNumber = ha->pdev->bus->number;
++ ptmp_isp->PciDevFunc = ha->pdev->devfn;
++ ptmp_isp->PciSlotNumber = PCI_SLOT(ha->pdev->devfn);
++ ptmp_isp->IoAddr = host->io_port;
++ ptmp_isp->IoAddrLen = 512;
++ ptmp_isp->MemAddr = 0; /* ? */
++ ptmp_isp->MemAddrLen = 0; /* ? */
++ ptmp_isp->ChipType = 0; /* ? */
++ ptmp_isp->InterruptLevel = host->irq;
++
++ for (i = 0; i < 8; i++)
++ ptmp_isp->OutMbx[i] = 0;
++
++ ret = verify_area(VERIFY_WRITE, (void *)pext->ResponseAdr,
++ sizeof(EXT_CHIP));
++ if (ret) {
++ pext->Status = EXT_STATUS_COPY_ERR;
++ DEBUG9_10(printk("%s(%ld): inst=%ld ERROR verify wrt rsp buf\n",
++ __func__, ha->host_no, ha->instance);)
++ qla2x00_free_ioctl_scrap_mem(ha);
++ return (ret);
++ }
++
++ /* now copy up the ISP to user */
++ if (pext->ResponseLen < sizeof(EXT_CHIP))
++ transfer_size = pext->ResponseLen;
++ else
++ transfer_size = sizeof(EXT_CHIP);
++
++ ret = copy_to_user((uint8_t *)pext->ResponseAdr, (uint8_t *)ptmp_isp,
++ transfer_size);
++ if (ret) {
++ pext->Status = EXT_STATUS_COPY_ERR;
++ DEBUG9_10(printk("%s(%ld): inst=%ld ERROR copy rsp buffer.\n",
++ __func__, ha->host_no, ha->instance);)
++ qla2x00_free_ioctl_scrap_mem(ha);
++ return (ret);
++ }
++
++ pext->Status = EXT_STATUS_OK;
++ pext->DetailStatus = EXT_STATUS_OK;
++ qla2x00_free_ioctl_scrap_mem(ha);
++
++ DEBUG9(printk("%s(%ld): inst=%ld exiting.\n",
++ __func__, ha->host_no, ha->instance);)
++
++ return (ret);
++}
++
++/*
++ * qla2x00_get_data
++ * Handles all subcommands of the EXT_CC_GET_DATA command.
++ *
++ * Input:
++ * ha = adapter state pointer.
++ * pext = EXT_IOCTL structure pointer.
++ * mode = not used.
++ *
++ * Returns:
++ * 0 = success
++ * others = errno value
++ *
++ * Context:
++ * Kernel context.
++ */
++static int
++qla2x00_get_data(scsi_qla_host_t *ha, EXT_IOCTL *pext, int mode)
++{
++ int tmp_rval = 0;
++
++ switch(pext->SubCode) {
++ case EXT_SC_GET_STATISTICS:
++ tmp_rval = qla2x00_get_statistics(ha, pext, mode);
++ break;
++
++ case EXT_SC_GET_FC_STATISTICS:
++ tmp_rval = qla2x00_get_fc_statistics(ha, pext, mode);
++ break;
++
++ case EXT_SC_GET_PORT_SUMMARY:
++ tmp_rval = qla2x00_get_port_summary(ha, pext, mode);
++ break;
++
++ case EXT_SC_QUERY_DRIVER:
++ tmp_rval = qla2x00_query_driver(ha, pext, mode);
++ break;
++
++ case EXT_SC_QUERY_FW:
++ tmp_rval = qla2x00_query_fw(ha, pext, mode);
++ break;
++
++ case EXT_SC_GET_RNID:
++ tmp_rval = qla2x00_get_rnid_params(ha, pext, mode);
++ break;
++
++ default:
++ DEBUG10(printk("%s(%ld): inst=%ld unknown SubCode %d.\n",
++ __func__, ha->host_no, ha->instance, pext->SubCode);)
++ pext->Status = EXT_STATUS_UNSUPPORTED_SUBCODE;
++ break;
++ }
++
++ return (tmp_rval);
++}
++
++/*
++ * qla2x00_get_statistics
++ * Issues get_link_status mbx cmd and returns statistics
++ * relavent to the specified adapter.
++ *
++ * Input:
++ * ha = pointer to adapter struct of the specified adapter.
++ * pext = pointer to EXT_IOCTL structure containing values from user.
++ * mode = not used.
++ *
++ * Returns:
++ * 0 = success
++ * others = errno value
++ *
++ * Context:
++ * Kernel context.
++ */
++static int
++qla2x00_get_statistics(scsi_qla_host_t *ha, EXT_IOCTL *pext, int mode)
++{
++ EXT_HBA_PORT_STAT *ptmp_stat;
++ int ret = 0;
++ link_stat_t stat_buf;
++ uint8_t rval;
++ uint8_t *usr_temp, *kernel_tmp;
++ uint16_t mb_stat[1];
++ uint32_t transfer_size;
++
++
++ DEBUG9(printk("%s(%ld): inst=%ld entered.\n",
++ __func__, ha->host_no, ha->instance);)
++
++ ret = verify_area(VERIFY_WRITE, (void *)pext->ResponseAdr,
++ sizeof(EXT_HBA_PORT_STAT));
++ if (ret) {
++ pext->Status = EXT_STATUS_COPY_ERR;
++ DEBUG9_10(printk("%s(%ld): inst=%ld ERROR VERIFY_WRITE "
++ "EXT_HBA_PORT_STAT.\n",
++ __func__, ha->host_no, ha->instance);)
++ return (ret);
++ }
++
++ /* check on loop down */
++ if (ha->loop_state != LOOP_READY ||
++ test_bit(CFG_ACTIVE, &ha->cfg_flags) ||
++ (test_bit(ABORT_ISP_ACTIVE, &ha->dpc_flags)) ||
++ ABORTS_ACTIVE || ha->dpc_active) {
++
++ pext->Status = EXT_STATUS_BUSY;
++ DEBUG9_10(printk("%s(%ld): inst=%ld loop not ready.\n",
++ __func__, ha->host_no, ha->instance);)
++
++ return (ret);
++ }
++
++ /* Send mailbox cmd to get more. */
++ if ((rval = qla2x00_get_link_status(ha, ha->loop_id, &stat_buf,
++ mb_stat)) != QL_STATUS_SUCCESS) {
++
++ if (rval == BIT_0) {
++ pext->Status = EXT_STATUS_NO_MEMORY;
++ } else if (rval == BIT_1) {
++ pext->Status = EXT_STATUS_MAILBOX;
++ pext->DetailStatus = EXT_DSTATUS_NOADNL_INFO;
++ } else {
++ pext->Status = EXT_STATUS_ERR;
++ }
++
++ DEBUG9_10(printk("%s(%ld): inst=%ld ERROR mailbox failed. "
++ "mb[0]=%x.\n",
++ __func__, ha->host_no, ha->instance, mb_stat[0]);)
++ printk(KERN_WARNING
++ "%s(%ld): inst=%ld ERROR mailbox failed. mb[0]=%x.\n",
++ __func__, ha->host_no, ha->instance, mb_stat[0]);
++
++ return (ret);
++ }
++
++ if (qla2x00_get_ioctl_scrap_mem(ha, (void **)&ptmp_stat,
++ sizeof(EXT_HBA_PORT_STAT))) {
++ /* not enough memory */
++ pext->Status = EXT_STATUS_NO_MEMORY;
++ DEBUG9_10(printk("%s(%ld): inst=%ld scrap not big enough. "
++ "size requested=%d.\n",
++ __func__, ha->host_no, ha->instance,
++ sizeof(EXT_HBA_PORT_STAT));)
++ return (ret);
++ }
++
++ ptmp_stat->ControllerErrorCount = ha->total_isp_aborts;
++ ptmp_stat->DeviceErrorCount = ha->total_dev_errs;
++ ptmp_stat->TotalIoCount = ha->total_ios;
++ ptmp_stat->TotalMBytes = ha->total_bytes >> 20;
++ ptmp_stat->TotalLipResets = ha->total_lip_cnt;
++ /*
++ ptmp_stat->TotalInterrupts = ha->total_isr_cnt;
++ */
++
++ ptmp_stat->TotalLinkFailures = stat_buf.link_fail_cnt;
++ ptmp_stat->TotalLossOfSync = stat_buf.loss_sync_cnt;
++ ptmp_stat->TotalLossOfSignals = stat_buf.loss_sig_cnt;
++ ptmp_stat->PrimitiveSeqProtocolErrorCount = stat_buf.prim_seq_err_cnt;
++ ptmp_stat->InvalidTransmissionWordCount = stat_buf.inval_xmit_word_cnt;
++ ptmp_stat->InvalidCRCCount = stat_buf.inval_crc_cnt;
++
++ /* now copy up the STATISTICS to user */
++ if (pext->ResponseLen < sizeof(EXT_HBA_PORT_STAT))
++ transfer_size = pext->ResponseLen;
++ else
++ transfer_size = sizeof(EXT_HBA_PORT_STAT);
++
++ usr_temp = (uint8_t *)pext->ResponseAdr;
++ kernel_tmp = (uint8_t *)ptmp_stat;
++ ret = copy_to_user(usr_temp, kernel_tmp, transfer_size);
++ if (ret) {
++ pext->Status = EXT_STATUS_COPY_ERR;
++ DEBUG9_10(printk("%s(%ld): inst=%ld ERROR copy rsp buffer.\n",
++ __func__, ha->host_no, ha->instance);)
++ qla2x00_free_ioctl_scrap_mem(ha);
++ return (ret);
++ }
++
++ pext->Status = EXT_STATUS_OK;
++ pext->DetailStatus = EXT_STATUS_OK;
++ qla2x00_free_ioctl_scrap_mem(ha);
++
++ DEBUG9(printk("%s(%ld): inst=%ld exiting.\n",
++ __func__, ha->host_no, ha->instance);)
++
++ return (ret);
++}
++
++/*
++ * qla2x00_get_fc_statistics
++ * Issues get_link_status mbx cmd to the target device with
++ * the specified WWN and returns statistics relavent to the
++ * device.
++ *
++ * Input:
++ * ha = pointer to adapter struct of the specified device.
++ * pext = pointer to EXT_IOCTL structure containing values from user.
++ * mode = not used.
++ *
++ * Returns:
++ * 0 = success
++ * others = errno value
++ *
++ * Context:
++ * Kernel context.
++ */
++static int
++qla2x00_get_fc_statistics(scsi_qla_host_t *ha, EXT_IOCTL *pext, int mode)
++{
++ EXT_HBA_PORT_STAT *ptmp_stat;
++ EXT_DEST_ADDR addr_struct;
++ int ret = 0;
++ link_stat_t stat_buf;
++ uint8_t rval, tgt;
++ uint8_t *usr_temp, *kernel_tmp;
++ uint8_t *req_name;
++ uint16_t mb_stat[1];
++ uint32_t transfer_size;
++
++
++ DEBUG9(printk("%s(%ld): inst=%ld entered.\n",
++ __func__, ha->host_no, ha->instance);)
++
++ ret = verify_area(VERIFY_WRITE, (void *)pext->ResponseAdr,
++ sizeof(EXT_HBA_PORT_STAT));
++ if (ret) {
++ pext->Status = EXT_STATUS_COPY_ERR;
++ DEBUG9_10(printk("%s(%ld): inst=%ld ERROR VERIFY_WRITE.\n",
++ __func__, ha->host_no, ha->instance);)
++ return (ret);
++ }
++
++ ret = copy_from_user(&addr_struct, pext->RequestAdr, pext->RequestLen);
++ if (ret) {
++ pext->Status = EXT_STATUS_COPY_ERR;
++ DEBUG9_10(printk("%s(%ld): inst=%ld ERROR copy req buf.\n",
++ __func__, ha->host_no, ha->instance);)
++ return (ret);
++ }
++
++ /* find the device's loop_id */
++ switch (addr_struct.DestType) {
++ case EXT_DEF_DESTTYPE_WWPN:
++ req_name = addr_struct.DestAddr.WWPN;
++ for (tgt = 0; tgt < MAX_FIBRE_DEVICES; tgt++) {
++ if (memcmp(ha->fc_db[tgt].wwn, req_name,
++ EXT_DEF_WWN_NAME_SIZE) == 0) {
++ break;
++ }
++ }
++ break;
++
++ case EXT_DEF_DESTTYPE_WWNN:
++ case EXT_DEF_DESTTYPE_PORTID:
++ case EXT_DEF_DESTTYPE_FABRIC:
++ case EXT_DEF_DESTTYPE_SCSI:
++ default:
++ pext->Status = EXT_STATUS_INVALID_PARAM;
++ pext->DetailStatus = EXT_DSTATUS_NOADNL_INFO;
++ DEBUG9_10(printk("%s(%ld): inst=%ld ERROR Unsupported subcode "
++ "address type.\n", __func__, ha->host_no, ha->instance);)
++ return (ret);
++
++ break;
++ }
++
++ if (tgt == MAX_FIBRE_DEVICES) {
++ /* not found */
++ pext->Status = EXT_STATUS_DEV_NOT_FOUND;
++ pext->DetailStatus = EXT_DSTATUS_TARGET;
++ return (ret);
++ }
++
++ /* check for suspended/lost device */
++ /*
++ if (ha->fcport is suspended/lost) {
++ pext->Status = EXT_STATUS_SUSPENDED;
++ pext->DetailStatus = EXT_DSTATUS_TARGET;
++ return pext->Status;
++ }
++ */
++
++ /* check on loop down */
++ if (ha->loop_state != LOOP_READY ||
++ test_bit(CFG_ACTIVE, &ha->cfg_flags) ||
++ (test_bit(ABORT_ISP_ACTIVE, &ha->dpc_flags)) ||
++ ABORTS_ACTIVE || ha->dpc_active) {
++
++ pext->Status = EXT_STATUS_BUSY;
++ DEBUG9_10(printk("%s(%ld): inst=%ld loop not ready.\n",
++ __func__, ha->host_no, ha->instance);)
++ return (ret);
++ }
++
++ /* Send mailbox cmd to get more. */
++ if ((rval = qla2x00_get_link_status(ha, ha->fc_db[tgt].loop_id,
++ &stat_buf, mb_stat)) != QL_STATUS_SUCCESS) {
++ if (rval == BIT_0) {
++ pext->Status = EXT_STATUS_NO_MEMORY;
++ } else if (rval == BIT_1) {
++ pext->Status = EXT_STATUS_MAILBOX;
++ pext->DetailStatus = EXT_DSTATUS_NOADNL_INFO;
++ } else {
++ pext->Status = EXT_STATUS_ERR;
++ }
++
++ DEBUG9_10(printk("%s(%ld): inst=%ld ERROR mailbox failed. "
++ "mb[0]=%x.\n",
++ __func__, ha->host_no, ha->instance, mb_stat[0]);)
++ return (ret);
++ }
++
++ if (qla2x00_get_ioctl_scrap_mem(ha, (void **)&ptmp_stat,
++ sizeof(EXT_HBA_PORT_STAT))) {
++ /* not enough memory */
++ pext->Status = EXT_STATUS_NO_MEMORY;
++ DEBUG9_10(printk("%s(%ld): inst=%ld scrap not big enough. "
++ "size requested=%d.\n",
++ __func__, ha->host_no, ha->instance,
++ sizeof(EXT_HBA_PORT_STAT));)
++ return (ret);
++ }
++
++ ptmp_stat->ControllerErrorCount = ha->total_isp_aborts;
++ ptmp_stat->DeviceErrorCount = ha->total_dev_errs;
++ ptmp_stat->TotalIoCount = ha->total_ios;
++ ptmp_stat->TotalMBytes = ha->total_bytes >> 20;
++ ptmp_stat->TotalLipResets = ha->total_lip_cnt;
++ /*
++ ptmp_stat->TotalInterrupts = ha->total_isr_cnt;
++ */
++
++ ptmp_stat->TotalLinkFailures = stat_buf.link_fail_cnt;
++ ptmp_stat->TotalLossOfSync = stat_buf.loss_sync_cnt;
++ ptmp_stat->TotalLossOfSignals = stat_buf.loss_sig_cnt;
++ ptmp_stat->PrimitiveSeqProtocolErrorCount = stat_buf.prim_seq_err_cnt;
++ ptmp_stat->InvalidTransmissionWordCount = stat_buf.inval_xmit_word_cnt;
++ ptmp_stat->InvalidCRCCount = stat_buf.inval_crc_cnt;
++
++ /* now copy up the STATISTICS to user */
++ if (pext->ResponseLen < sizeof(EXT_HBA_PORT_STAT))
++ transfer_size = pext->ResponseLen;
++ else
++ transfer_size = sizeof(EXT_HBA_PORT_STAT);
++
++ usr_temp = (uint8_t *)pext->ResponseAdr;
++ kernel_tmp = (uint8_t *)ptmp_stat;
++ ret = copy_to_user(usr_temp, kernel_tmp, transfer_size);
++ if (ret) {
++ pext->Status = EXT_STATUS_COPY_ERR;
++ DEBUG9_10(printk("%s(%ld): inst=%ld ERROR copy rsp buffer.\n",
++ __func__, ha->host_no, ha->instance);)
++ qla2x00_free_ioctl_scrap_mem(ha);
++ return (ret);
++ }
++
++ pext->Status = EXT_STATUS_OK;
++ pext->DetailStatus = EXT_STATUS_OK;
++ qla2x00_free_ioctl_scrap_mem(ha);
++
++ DEBUG9(printk("%s(%ld): inst=%ld exiting.\n",
++ __func__, ha->host_no, ha->instance);)
++
++ return (ret);
++}
++
++/*
++ * qla2x00_get_port_summary
++ * Handles EXT_SC_GET_PORT_SUMMARY subcommand.
++ * Returns values of devicedata and dd_entry list.
++ *
++ * Input:
++ * ha = adapter state pointer.
++ * pext = EXT_IOCTL structure pointer.
++ * mode = not used.
++ *
++ * Returns:
++ * 0 = success
++ * others = errno value
++ *
++ * Context:
++ * Kernel context.
++ */
++static int
++qla2x00_get_port_summary(scsi_qla_host_t *ha, EXT_IOCTL *pext, int mode)
++{
++ int ret = 0;
++ uint8_t *usr_temp, *kernel_tmp;
++ uint32_t b;
++ uint32_t i, port_cnt, entry;
++ uint32_t number_of_entries = 0;
++ uint32_t tgt_cnt, transfer_size;
++ struct list_head *fcpl;
++ fc_port_t *fcport;
++ uint32_t current_offset;
++ void *start_of_entry_list;
++
++ EXT_DEVICEDATA *pdevicedata;
++ EXT_DEVICEDATAENTRY *pdd_entry;
++
++ DEBUG9(printk("%s(%ld): inst=%ld entered.\n",
++ __func__, ha->host_no, ha->instance);)
++
++ port_cnt = 0;
++ tgt_cnt = 0;
++
++ if (qla2x00_get_ioctl_scrap_mem(ha, (void **)&pdevicedata,
++ sizeof(EXT_DEVICEDATA))) {
++ /* not enough memory */
++ pext->Status = EXT_STATUS_NO_MEMORY;
++ DEBUG9_10(printk("%s(%ld): inst=%ld scrap not big enough. "
++ "pdevicedata requested=%d.\n",
++ __func__, ha->host_no, ha->instance,
++ sizeof(EXT_DEVICEDATA));)
++ return (ret);
++ }
++
++ if (qla2x00_get_ioctl_scrap_mem(ha, (void **)&pdd_entry,
++ sizeof(EXT_DEVICEDATAENTRY))) {
++ /* not enough memory */
++ pext->Status = EXT_STATUS_NO_MEMORY;
++ DEBUG9_10(printk("%s(%ld): inst=%ld scrap not big enough. "
++ "pdd_entry requested=%d.\n",
++ __func__, ha->host_no, ha->instance,
++ sizeof(EXT_DEVICEDATAENTRY));)
++ qla2x00_free_ioctl_scrap_mem(ha);
++ return (ret);
++ }
++
++ list_for_each(fcpl, &ha->fcports) {
++ fcport = list_entry(fcpl, fc_port_t, list);
++
++ port_cnt++;
++ }
++ pdevicedata->TotalDevices = port_cnt;
++
++ number_of_entries = pext->ResponseLen / sizeof(EXT_DEVICEDATAENTRY);
++
++ /* we want the lesser of port_cnt and number_of_entries */
++ if (number_of_entries > port_cnt)
++ number_of_entries = port_cnt;
++ pdevicedata->ReturnListEntryCount = number_of_entries;
++
++ DEBUG9(printk("%s(%ld): inst=%ld EXT_SC_GET_PORT_SUMMARY port_cnt=%x, "
++ "return entry cnt=%x.\n",
++ __func__, ha->host_no, ha->instance, port_cnt,
++ number_of_entries);)
++
++ transfer_size = sizeof(pdevicedata->ReturnListEntryCount) +
++ sizeof(pdevicedata->TotalDevices);
++
++ /* copy top of devicedata here */
++ ret = verify_area(VERIFY_WRITE, (void *)(pext->ResponseAdr),
++ transfer_size);
++ if (ret) {
++ pext->Status = EXT_STATUS_COPY_ERR;
++ DEBUG9_10(printk("%s(%ld): inst=%ld ERROR verify wrt rsp buf\n",
++ __func__, ha->host_no, ha->instance);)
++ qla2x00_free_ioctl_scrap_mem(ha);
++ return (ret);
++ }
++
++ usr_temp = (uint8_t *)pext->ResponseAdr;
++ kernel_tmp = (uint8_t *)pdevicedata;
++ ret = copy_to_user(usr_temp, kernel_tmp, transfer_size);
++ if (ret) {
++ pext->Status = EXT_STATUS_COPY_ERR;
++ DEBUG9_10(printk("%s(%ld): inst=%ld ERROR copy rsp "
++ "devicedata buffer.\n",
++ __func__, ha->host_no, ha->instance);)
++ qla2x00_free_ioctl_scrap_mem(ha);
++ return (ret);
++ }
++
++ start_of_entry_list = (void *)(pext->ResponseAdr) + transfer_size;
++
++ entry = 0;
++ list_for_each(fcpl, &ha->fcports) {
++ fcport = list_entry(fcpl, fc_port_t, list);
++
++ if (entry >= number_of_entries)
++ break;
++
++ /* copy from fc_db of this target (port) to dd_entry */
++
++ memcpy(pdd_entry->NodeWWN, fcport->node_name, WWN_SIZE);
++ memcpy(pdd_entry->PortWWN, fcport->port_name, WWN_SIZE);
++
++ for (b = 0; b < 3 ; b++)
++ pdd_entry->PortID[b] = fcport->d_id.r.d_id[2-b];
++
++ if (fcport->flags & FC_FABRIC_DEVICE) {
++ pdd_entry->ControlFlags = EXT_DEF_GET_FABRIC_DEVICE;
++ } else {
++ pdd_entry->ControlFlags = 0;
++ }
++
++ pdd_entry->TargetAddress.Bus = 0;
++ /* Retrieve 'Target' number for port via fc_db */
++ for (i = 0; i < MAX_TARGETS; i++) {
++ if (ha->fc_db[i].loop_id == PORT_UNUSED)
++ continue;
++
++ if (memcmp(fcport->port_name, ha->fc_db[i].wwn,
++ EXT_DEF_WWN_NAME_SIZE) == 0) {
++ pdd_entry->TargetAddress.Target = i;
++ break;
++ }
++ }
++ pdd_entry->TargetAddress.Lun = 0;
++ pdd_entry->DeviceFlags = 0;
++ pdd_entry->LoopID = fcport->loop_id;
++ pdd_entry->BaseLunNumber = 0;
++
++ current_offset = entry * sizeof(EXT_DEVICEDATAENTRY);
++
++ transfer_size = sizeof(EXT_DEVICEDATAENTRY);
++ ret = verify_area(VERIFY_WRITE,
++ (void *)(start_of_entry_list + current_offset),
++ transfer_size);
++
++ if (ret) {
++ pext->Status = EXT_STATUS_COPY_ERR;
++ DEBUG10(printk("%s(%ld): inst=%ld ERROR verify WRITE "
++ "rsp bufaddr=%p\n",
++ __func__, ha->host_no, ha->instance,
++ (void *)(start_of_entry_list + current_offset));)
++ qla2x00_free_ioctl_scrap_mem(ha);
++ return pext->Status;
++ }
++
++ /* now copy up this dd_entry to user */
++ usr_temp = (uint8_t *)((u_long) start_of_entry_list +
++ current_offset);
++ kernel_tmp = (uint8_t *)pdd_entry;
++ ret = copy_to_user(usr_temp, kernel_tmp, transfer_size);
++ if (ret) {
++ pext->Status = EXT_STATUS_COPY_ERR;
++ DEBUG9_10(printk("%s(%ld): inst=%ld ERROR copy rsp "
++ "entry list buffer.\n",
++ __func__, ha->host_no, ha->instance);)
++ qla2x00_free_ioctl_scrap_mem(ha);
++ return (ret);
++ }
++
++ entry++;
++ } /* for number_of_entries */
++
++ pext->Status = EXT_STATUS_OK;
++ pext->DetailStatus = EXT_STATUS_OK;
++ qla2x00_free_ioctl_scrap_mem(ha);
++
++ DEBUG9(printk("%s(%ld): inst=%ld exiting.\n",
++ __func__, ha->host_no, ha->instance);)
++
++ return (ret);
++}
++
++/*
++ * qla2x00_query_driver
++ * Handles EXT_SC_QUERY_DRIVER subcommand.
++ *
++ * Input:
++ * ha = adapter state pointer.
++ * pext = EXT_IOCTL structure pointer.
++ * mode = not used.
++ *
++ * Returns:
++ * 0 = success
++ * others = errno value
++ *
++ * Context:
++ * Kernel context.
++ */
++static int
++qla2x00_query_driver(scsi_qla_host_t *ha, EXT_IOCTL *pext, int mode)
++{
++ int ret = 0;
++ uint8_t *usr_temp, *kernel_tmp;
++ uint32_t transfer_size;
++ EXT_DRIVER *pdriver_prop;
++
++ DEBUG9(printk("%s(%ld): inst=%ld entered.\n",
++ __func__, ha->host_no, ha->instance);)
++
++ if (qla2x00_get_ioctl_scrap_mem(ha, (void **)&pdriver_prop,
++ sizeof(EXT_DRIVER))) {
++ /* not enough memory */
++ pext->Status = EXT_STATUS_NO_MEMORY;
++ DEBUG9_10(printk("%s(%ld): inst=%ld scrap not big enough. "
++ "size requested=%d.\n",
++ __func__, ha->host_no, ha->instance,
++ sizeof(EXT_DRIVER));)
++ return (ret);
++ }
++
++ sprintf(pdriver_prop->Version, qla2x00_version_str);
++ pdriver_prop->NumOfBus = MAX_BUSES;
++ pdriver_prop->TargetsPerBus = MAX_FIBRE_DEVICES;
++ pdriver_prop->LunsPerTarget = MAX_LUNS;
++ pdriver_prop->MaxTransferLen = 0xffffffff;
++ pdriver_prop->MaxDataSegments = 0xffffffff;
++
++ if (ha->flags.enable_64bit_addressing == 1)
++ pdriver_prop->DmaBitAddresses = 64;
++ else
++ pdriver_prop->DmaBitAddresses = 32;
++
++ if (pext->ResponseLen < sizeof(EXT_DRIVER))
++ transfer_size = pext->ResponseLen;
++ else
++ transfer_size = sizeof(EXT_DRIVER);
++
++ ret = verify_area(VERIFY_WRITE, (void *)pext->ResponseAdr ,
++ transfer_size);
++ if (ret) {
++ pext->Status = EXT_STATUS_COPY_ERR;
++ DEBUG10(printk("%s(%ld): inst=%ld ERROR verify wrt rsp buf.\n",
++ __func__, ha->host_no, ha->instance);)
++ qla2x00_free_ioctl_scrap_mem(ha);
++ return (ret);
++ }
++
++ /* now copy up the ISP to user */
++ usr_temp = (uint8_t *)pext->ResponseAdr;
++ kernel_tmp = (uint8_t *)pdriver_prop;
++ ret = copy_to_user(usr_temp, kernel_tmp, transfer_size);
++ if (ret) {
++ pext->Status = EXT_STATUS_COPY_ERR;
++ DEBUG9_10(printk("%s(%ld): inst=%ld ERROR copy rsp buffer.\n",
++ __func__, ha->host_no, ha->instance);)
++ qla2x00_free_ioctl_scrap_mem(ha);
++ return (ret);
++ }
++
++ pext->Status = EXT_STATUS_OK;
++ pext->DetailStatus = EXT_STATUS_OK;
++ qla2x00_free_ioctl_scrap_mem(ha);
++
++ DEBUG9(printk("%s(%ld): inst=%ld exiting.\n",
++ __func__, ha->host_no, ha->instance);)
++
++ return (ret);
++}
++
++/*
++ * qla2x00_query_fw
++ * Handles EXT_SC_QUERY_FW subcommand.
++ *
++ * Input:
++ * ha = adapter state pointer.
++ * pext = EXT_IOCTL structure pointer.
++ * mode = not used.
++ *
++ * Returns:
++ * 0 = success
++ * others = errno value
++ *
++ * Context:
++ * Kernel context.
++ */
++static int
++qla2x00_query_fw(scsi_qla_host_t *ha, EXT_IOCTL *pext, int mode)
++{
++ int ret = 0;
++ uint8_t *usr_temp, *kernel_tmp;
++ uint32_t transfer_size;
++ EXT_FW *pfw_prop;
++
++ DEBUG9(printk("%s(%ld): inst=%ld entered.\n",
++ __func__, ha->host_no, ha->instance);)
++
++ if (qla2x00_get_ioctl_scrap_mem(ha, (void **)&pfw_prop,
++ sizeof(EXT_FW))) {
++ /* not enough memory */
++ pext->Status = EXT_STATUS_NO_MEMORY;
++ DEBUG9_10(printk("%s(%ld): inst=%ld scrap not big enough. "
++ "size requested=%d.\n",
++ __func__, ha->host_no, ha->instance,
++ sizeof(EXT_FW));)
++ return (ret);
++ }
++
++ pfw_prop->Version[0] = ha->fw_major_version;
++ pfw_prop->Version[1] = ha->fw_minor_version;
++ pfw_prop->Version[2] = ha->fw_subminor_version;
++
++ transfer_size = sizeof(EXT_FW);
++
++ ret = verify_area(VERIFY_WRITE, (void *)pext->ResponseAdr ,
++ transfer_size);
++ if (ret) {
++ pext->Status = EXT_STATUS_COPY_ERR;
++ DEBUG10(printk("%s(%ld): inst=%ld ERROR verify wrt rsp buf.\n",
++ __func__, ha->host_no, ha->instance);)
++ qla2x00_free_ioctl_scrap_mem(ha);
++ return (ret);
++ }
++
++ usr_temp = (uint8_t *)pext->ResponseAdr;
++ kernel_tmp = (uint8_t *)pfw_prop;
++ ret = copy_to_user(usr_temp, kernel_tmp, transfer_size);
++ if (ret) {
++ pext->Status = EXT_STATUS_COPY_ERR;
++ DEBUG9_10(printk("%s(%ld): inst=%ld ERROR copy rsp buffer.\n",
++ __func__, ha->host_no, ha->instance);)
++ qla2x00_free_ioctl_scrap_mem(ha);
++ return (ret);
++ }
++
++ pext->Status = EXT_STATUS_OK;
++ pext->DetailStatus = EXT_STATUS_OK;
++ qla2x00_free_ioctl_scrap_mem(ha);
++
++ DEBUG9(printk("%s(%ld): inst=%ld exiting.\n",
++ __func__, ha->host_no, ha->instance);)
++
++ return (ret);
++}
++
++#if defined(ISP2300)
++/*
++ * qla2x00_send_els_passthru
++ * Passes the ELS command down to firmware as MSIOCB and
++ * copies the response back when it completes.
++ *
++ * Input:
++ * ha = adapter state pointer.
++ * pext = EXT_IOCTL structure pointer.
++ * mode = not used.
++ *
++ * Returns:
++ * 0 = success
++ * others = errno value
++ *
++ * Context:
++ * Kernel context.
++ */
++static int
++qla2x00_send_els_passthru(scsi_qla_host_t *ha, EXT_IOCTL *pext, int mode)
++{
++ int ret = 0;
++ int tmp_rval = 0;
++
++ uint8_t index;
++ uint8_t invalid_wwn = FALSE;
++ uint8_t port_found;
++ uint8_t *ptmp_stat;
++ uint8_t *pusr_req_buf;
++ uint8_t *presp_payload;
++ uint32_t payload_len;
++ uint32_t usr_req_len;
++
++ fcdev_t tmpdev;
++
++ fc_lun_t *ptemp_fclun; /* buf from scrap mem */
++ fc_port_t *ptemp_fcport; /* buf from scrap mem */
++
++ struct list_head *fcpl;
++ fc_port_t *fcport;
++
++ os_lun_t *plq;
++ os_tgt_t *ptq;
++
++ Scsi_Cmnd *pscsi_cmd;
++
++ srb_t *sp = NULL;
++ EXT_ELS_PT_REQ *pels_pt_req;
++
++ struct list_head *fcil;
++ fc_initiator_t *fcinitiator;
++
++
++ DEBUG9(printk("%s(%ld): inst=%ld entered.\n",
++ __func__, ha->host_no, ha->instance);)
++
++ /* check on current topology */
++ if ((ha->current_topology != ISP_CFG_F) &&
++ (ha->current_topology != ISP_CFG_FL)) {
++ pext->Status = EXT_STATUS_DEV_NOT_FOUND;
++ DEBUG9_10(printk("%s(%ld): inst=%ld ERROR not in F or FL mode\n",
++ __func__, ha->host_no, ha->instance);)
++ return (ret);
++ }
++
++ if (ha->ioctl_mem_size <= 0) {
++ if (qla2x00_get_new_ioctl_dma_mem(ha,
++ QLA_INITIAL_IOCTLMEM_SIZE) != QL_STATUS_SUCCESS) {
++
++ DEBUG9_10(printk("%s: ERROR cannot alloc DMA "
++ "buffer size=%lx.\n",
++ __func__, QLA_INITIAL_IOCTLMEM_SIZE);)
++
++ pext->Status = EXT_STATUS_NO_MEMORY;
++ return (ret);
++ }
++ }
++
++ if (pext->ResponseLen > ha->ioctl_mem_size) {
++ if (qla2x00_get_new_ioctl_dma_mem(ha, pext->ResponseLen) !=
++ QL_STATUS_SUCCESS) {
++
++ DEBUG9_10(printk("%s: ERROR cannot alloc requested"
++ "DMA buffer size %x.\n",
++ __func__, pext->ResponseLen);)
++
++ pext->Status = EXT_STATUS_NO_MEMORY;
++ return (ret);
++ }
++
++ DEBUG9(printk("%s(%ld): inst=%ld rsp buf length larger than "
++ "existing size. Additional mem alloc successful.\n",
++ __func__, ha->host_no, ha->instance);)
++ }
++
++ usr_req_len = pext->RequestLen - sizeof(EXT_ELS_PT_REQ);
++ if (usr_req_len > ha->ioctl_mem_size) {
++ pext->Status = EXT_STATUS_INVALID_PARAM;
++
++ DEBUG9_10(printk("%s(%ld): inst=%ld ERROR ReqLen too big=%x.\n",
++ __func__, ha->host_no, ha->instance, pext->RequestLen);)
++
++ return (ret);
++ }
++
++ /* Verify entire EXT IOCTL request buffer */
++
++ ret = verify_area(VERIFY_READ, (void *)pext->RequestAdr,
++ pext->RequestLen);
++ if (ret) {
++ pext->Status = EXT_STATUS_COPY_ERR;
++ DEBUG9_10(printk(
++ "%s(%ld): inst=%ld ERROR verify read req buf\n",
++ __func__, ha->host_no, ha->instance);)
++
++ return (ret);
++ }
++
++ DEBUG9(printk("%s(%ld): inst=%ld req buf verified.\n",
++ __func__, ha->host_no, ha->instance);)
++
++ if (qla2x00_get_ioctl_scrap_mem(ha, (void **)&pscsi_cmd,
++ sizeof(Scsi_Cmnd))) {
++ /* not enough memory */
++ pext->Status = EXT_STATUS_NO_MEMORY;
++ DEBUG9_10(printk("%s(%ld): inst=%ld scrap not big enough. "
++ "size requested=%d.\n",
++ __func__, ha->host_no, ha->instance,
++ sizeof(Scsi_Cmnd));)
++ return (ret);
++ }
++ if (qla2x00_get_ioctl_scrap_mem(ha, (void **)&pels_pt_req,
++ sizeof(EXT_ELS_PT_REQ))) {
++ /* not enough memory */
++ pext->Status = EXT_STATUS_NO_MEMORY;
++ DEBUG9_10(printk("%s(%ld): inst=%ld scrap not big enough. "
++ "els_pt_req size requested=%d.\n",
++ __func__, ha->host_no, ha->instance,
++ sizeof(EXT_ELS_PT_REQ));)
++ goto els_passthru_done;
++ }
++ if (qla2x00_get_ioctl_scrap_mem(ha, (void **)&ptemp_fclun,
++ sizeof(fc_lun_t))) {
++ /* not enough memory */
++ pext->Status = EXT_STATUS_NO_MEMORY;
++ DEBUG9_10(printk("%s(%ld): inst=%ld scrap not big enough. "
++ "fclun size requested=%d.\n",
++ __func__, ha->host_no, ha->instance,
++ sizeof(fc_lun_t));)
++ goto els_passthru_done;
++ }
++ if (qla2x00_get_ioctl_scrap_mem(ha, (void **)&ptemp_fcport,
++ sizeof(fc_port_t))) {
++ /* not enough memory */
++ pext->Status = EXT_STATUS_NO_MEMORY;
++ DEBUG9_10(printk("%s(%ld): inst=%ld scrap not big enough. "
++ "fcport size requested=%d.\n",
++ __func__, ha->host_no, ha->instance,
++ sizeof(fc_port_t));)
++ goto els_passthru_done;
++ }
++
++ /* initialize */
++
++ memset(ha->ioctl_mem, 0, ha->ioctl_mem_size);
++
++ /* copy request buffer */
++
++ ret = copy_from_user(pels_pt_req, pext->RequestAdr,
++ sizeof(EXT_ELS_PT_REQ));
++ if (ret) {
++ pext->Status = EXT_STATUS_COPY_ERR;
++
++ DEBUG9_10(printk("%s(%ld): inst=%ld ERROR"
++ "copy_from_user() of struct failed (%d).\n",
++ __func__, ha->host_no, ha->instance, ret);)
++
++ goto els_passthru_done;
++ }
++
++ pusr_req_buf = (uint8_t *)pext->RequestAdr + sizeof(EXT_ELS_PT_REQ);
++
++ ret = copy_from_user(ha->ioctl_mem, pusr_req_buf, usr_req_len);
++ if (ret) {
++ pext->Status = EXT_STATUS_COPY_ERR;
++
++ DEBUG9_10(printk("%s(%ld): inst=%ld ERROR"
++ "copy_from_user() of request buf failed (%d).\n",
++ __func__, ha->host_no, ha->instance, ret);)
++
++ goto els_passthru_done;
++ }
++
++ DEBUG9(printk("%s(%ld): inst=%ld after copy request.\n",
++ __func__, ha->host_no, ha->instance);)
++
++ /* check on loop down (1) */
++ if (ha->loop_state != LOOP_READY ||
++ test_bit(CFG_ACTIVE, &ha->cfg_flags) ||
++ (test_bit(ABORT_ISP_ACTIVE, &ha->dpc_flags)) || ABORTS_ACTIVE) {
++
++ DEBUG9_10(printk(
++ "%s(%ld): inst=%ld before dest port validation- loop not "
++ "ready; cannot proceed.\n",
++ __func__, ha->host_no, ha->instance);)
++
++ pext->Status = EXT_STATUS_BUSY;
++
++ goto els_passthru_done;
++ }
++
++ /*********************************/
++ /* Validate the destination port */
++ /*********************************/
++
++ /* first: WWN cannot be zero if no PID is specified */
++ invalid_wwn = qla2x00_is_wwn_zero(pels_pt_req->WWPN);
++ if (invalid_wwn && !(pels_pt_req->ValidMask & EXT_DEF_PID_VALID)) {
++ /* error: both are not set. */
++ pext->Status = EXT_STATUS_INVALID_PARAM;
++
++ DEBUG9_10(printk("%s(%ld): inst=%ld ERROR no valid WWPN/PID\n",
++ __func__, ha->host_no, ha->instance);)
++
++ goto els_passthru_done;
++ }
++
++ /* second: it cannot be the local/current HBA itself */
++ if (!invalid_wwn) {
++ if (memcmp(ha->init_cb->port_name, pels_pt_req->WWPN,
++ EXT_DEF_WWN_NAME_SIZE) == 0) {
++
++ /* local HBA specified. */
++
++ pext->Status = EXT_STATUS_INVALID_PARAM;
++ DEBUG9_10(printk("%s(%ld): inst=%ld ERROR local HBA's "
++ "WWPN found.\n",
++ __func__, ha->host_no, ha->instance);)
++
++ goto els_passthru_done;
++ }
++ } else { /* using PID */
++ if (pels_pt_req->Id[1] == ha->d_id.r.d_id[2]
++ && pels_pt_req->Id[2] == ha->d_id.r.d_id[1]
++ && pels_pt_req->Id[3] == ha->d_id.r.d_id[0]) {
++
++ /* local HBA specified. */
++
++ pext->Status = EXT_STATUS_INVALID_PARAM;
++ DEBUG9_10(printk("%s(%ld): inst=%ld ERROR local HBA's "
++ "PID found.\n",
++ __func__, ha->host_no, ha->instance);)
++
++ goto els_passthru_done;
++ }
++ }
++
++ /************************/
++ /* Now find the loop ID */
++ /************************/
++
++ /* 1st: scan thru our HBA database */
++ index = 0;
++ port_found = FALSE;
++ fcinitiator = NULL;
++ if (!invalid_wwn) {
++ /* search with WWPN */
++ list_for_each(fcil, &ha->fcinitiators) {
++ fcinitiator = list_entry(fcil, fc_initiator_t, list);
++
++ if (memcmp(pels_pt_req->WWPN, fcinitiator->port_name,
++ EXT_DEF_WWN_NAME_SIZE) == 0) {
++
++ port_found = TRUE;
++ pels_pt_req->Lid = fcinitiator->loop_id;
++
++ DEBUG9(printk("%s(%ld): inst=%ld found host "
++ "w/ WWN. loop_id = %02x.\n",
++ __func__, ha->host_no, ha->instance,
++ pels_pt_req->Lid);)
++
++ break;
++ }
++ }
++ } else {
++ /* search with PID */
++ list_for_each(fcil, &ha->fcinitiators) {
++ fcinitiator = list_entry(fcil, fc_initiator_t, list);
++
++ if (pels_pt_req->Id[1] == fcinitiator->d_id.r.d_id[2]
++ && pels_pt_req->Id[2] == fcinitiator->d_id.r.d_id[1]
++ && pels_pt_req->Id[3] ==
++ fcinitiator->d_id.r.d_id[0]) {
++
++ port_found = TRUE;
++ pels_pt_req->Lid = fcinitiator->loop_id;
++
++ DEBUG9(printk("%s(%ld): inst=%ld found host "
++ "w/ WWN. loop_id = %02x.\n",
++ __func__, ha->host_no, ha->instance,
++ pels_pt_req->Lid);)
++
++ break;
++ }
++ }
++ }
++
++ /* If this is for a host device, check if we need to perform login */
++ if (port_found && (fcinitiator->loop_id >= LAST_SNS_LOOP_ID)) {
++
++ DEBUG9_10(printk("%s(%ld): inst=%ld need to relogin to "
++ "dest host.\n",
++ __func__, ha->host_no, ha->instance);)
++
++ if (fcinitiator->d_id.b24 == 0) {
++ /* Either RSCN hasn't been processed yet or
++ * this host is no longer connected to us.
++ */
++ pext->Status = EXT_STATUS_DEV_NOT_FOUND;
++ DEBUG9_10(printk("%s(%ld): inst=%ld ERROR dest host "
++ "port lost.\n",
++ __func__, ha->host_no, ha->instance);)
++
++ goto els_passthru_done;
++ }
++
++ /* login and update database */
++ tmpdev.d_id.b24 = fcinitiator->d_id.b24;
++ tmpdev.loop_id = fcinitiator->loop_id;
++
++ if (qla2x00_host_relogin(ha, &tmpdev) != 0) {
++ /* login failed. */
++ pext->Status = EXT_STATUS_DEV_NOT_FOUND;
++
++ DEBUG9_10(printk("%s(%ld): inst=%ld ERROR login to "
++ "host port failed. loop_id=%02x pid=%02x%02x%02x "
++ "ret=%d.\n",
++ __func__, ha->host_no, ha->instance, tmpdev.loop_id,
++ tmpdev.d_id.b.domain,
++ tmpdev.d_id.b.area,
++ tmpdev.d_id.b.al_pa,
++ ret);)
++
++ goto els_passthru_done;
++ } else {
++ fcinitiator->loop_id = tmpdev.loop_id;
++ pels_pt_req->Lid = tmpdev.loop_id;
++
++ DEBUG9(printk("%s(%ld): inst=%ld success login to "
++ "remote host; Lid=%02x.\n",
++ __func__, ha->host_no, ha->instance,
++ fcinitiator->loop_id);)
++ }
++ }
++
++ /* 2nd: scan thru our fcport database */
++ if (!invalid_wwn && !port_found) {
++ /* search with WWPN */
++ list_for_each(fcpl, &ha->fcports) {
++ fcport = list_entry(fcpl, fc_port_t, list);
++
++ if (memcmp(fcport->port_name, pels_pt_req->WWPN,
++ EXT_DEF_WWN_NAME_SIZE) == 0) {
++
++ port_found = TRUE;
++ pels_pt_req->Lid = fcport->loop_id;
++
++ DEBUG9(printk("%s(%ld): inst=%ld found fcport "
++ "w/ WWN. loop_id = %02x.\n",
++ __func__, ha->host_no, ha->instance,
++ pels_pt_req->Lid);)
++ break;
++ }
++ }
++ } else if (!port_found) {
++ /* search with PID */
++ list_for_each(fcpl, &ha->fcports) {
++ fcport = list_entry(fcpl, fc_port_t, list);
++
++ if (pels_pt_req->Id[1] == fcport->d_id.r.d_id[2]
++ && pels_pt_req->Id[2] == fcport->d_id.r.d_id[1]
++ && pels_pt_req->Id[3] == fcport->d_id.r.d_id[0]) {
++
++ port_found = TRUE;
++ pels_pt_req->Lid = fcport->loop_id;
++
++ DEBUG9(printk("%s(%ld): inst=%ld found fcport "
++ "w/ PID. loop_id = %02x.\n",
++ __func__, ha->host_no, ha->instance,
++ pels_pt_req->Lid);)
++
++ break;
++ }
++ }
++ }
++
++ if (!port_found) {
++ /* invalid WWN or PID specified */
++ pext->Status = EXT_STATUS_INVALID_PARAM;
++ DEBUG9_10(printk("%s(%ld): inst=%ld ERROR WWPN/PID invalid.\n",
++ __func__, ha->host_no, ha->instance);)
++
++ goto els_passthru_done;
++ }
++
++ /* alloc sp */
++ if ((sp = qla2x00_get_new_sp(ha)) == NULL) {
++
++ pext->Status = EXT_STATUS_NO_MEMORY;
++ DEBUG9_10(printk("%s: ERROR cannot alloc sp %p.\n",
++ __func__, sp);)
++
++ goto els_passthru_done;
++ }
++
++ DEBUG9(printk("%s(%ld): inst=%ld after alloc sp.\n",
++ __func__, ha->host_no, ha->instance);)
++
++ /* setup sp for this command */
++ ptq = ha->ioctl->ioctl_tq;
++ plq = ha->ioctl->ioctl_lq;
++ sp->cmd = pscsi_cmd;
++ sp->flags = SRB_IOCTL;
++ sp->lun_queue = plq;
++ sp->tgt_queue = ptq;
++ ptemp_fclun->fcport = ptemp_fcport;
++ ptemp_fclun->lun = 0;
++ ptemp_fclun->flags = 0;
++ plq->fclun = ptemp_fclun;
++ plq->fclun->fcport->ha = ha;
++
++ /* init scsi_cmd */
++ pscsi_cmd->device->host = ha->host;
++ pscsi_cmd->scsi_done = qla2x00_msiocb_done;
++
++ /* check on loop down (2)- check again just before sending cmd out. */
++ if (ha->loop_state != LOOP_READY ||
++ test_bit(CFG_ACTIVE, &ha->cfg_flags) ||
++ (test_bit(ABORT_ISP_ACTIVE, &ha->dpc_flags)) ||
++ ABORTS_ACTIVE) {
++
++ DEBUG9_10(printk("%s(%ld): inst=%ld before issue cmd- loop "
++ "not ready.\n",
++ __func__, ha->host_no, ha->instance);)
++
++ pext->Status = EXT_STATUS_BUSY;
++
++ atomic_set(&sp->ref_count, 0);
++ add_to_free_queue (ha, sp);
++
++ goto els_passthru_done;
++ }
++
++ DEBUG9(printk("%s(%ld): inst=%ld going to issue command.\n",
++ __func__, ha->host_no, ha->instance);)
++
++ tmp_rval = qla2x00_start_ms_cmd(ha, pext, sp, pels_pt_req);
++
++ DEBUG9(printk("%s(%ld): inst=%ld after issue command.\n",
++ __func__, ha->host_no, ha->instance);)
++
++ if (tmp_rval != 0) {
++ /* We waited and post function did not get called */
++ DEBUG9_10(printk("%s(%ld): inst=%ld command timed out.\n",
++ __func__, ha->host_no, ha->instance);)
++
++ pext->Status = EXT_STATUS_MS_NO_RESPONSE;
++
++ atomic_set(&sp->ref_count, 0);
++ add_to_free_queue (ha, sp);
++
++ goto els_passthru_done;
++ }
++
++ /* check on data returned */
++ ptmp_stat = (uint8_t *)ha->ioctl_mem + FC_HEADER_LEN;
++
++ if (*ptmp_stat == ELS_STAT_LS_RJT) {
++ payload_len = FC_HEADER_LEN + ELS_RJT_LENGTH;
++
++ } else if (*ptmp_stat == ELS_STAT_LS_ACC) {
++ payload_len = pext->ResponseLen - sizeof(EXT_ELS_PT_REQ);
++
++ } else {
++ /* invalid. just copy the status word. */
++ DEBUG9_10(printk("%s(%ld): inst=%ld invalid stat "
++ "returned =0x%x.\n",
++ __func__, ha->host_no, ha->instance, *ptmp_stat);)
++
++ payload_len = FC_HEADER_LEN + 4;
++ }
++
++ DEBUG9(printk("%s(%ld): inst=%ld data dump-\n",
++ __func__, ha->host_no, ha->instance);)
++ DEBUG9(qla2x00_dump_buffer((uint8_t *)ptmp_stat,
++ pext->ResponseLen - sizeof(EXT_ELS_PT_REQ) - FC_HEADER_LEN);)
++
++ /* Verify response buffer to be written */
++ /* The data returned include FC frame header */
++ presp_payload = (uint8_t *)pext->ResponseAdr + sizeof(EXT_ELS_PT_REQ);
++
++ ret = verify_area(VERIFY_WRITE, (void *)presp_payload, payload_len);
++ if (ret) {
++ pext->Status = EXT_STATUS_COPY_ERR;
++
++ DEBUG9_10(printk("%s(%ld): inst=%ld ERROR verify wrt rsp "
++ "buffer. ha=%p.\n",
++ __func__, ha->host_no, ha->instance, ha);)
++
++ goto els_passthru_done;
++ }
++
++ /* copy back data returned to response buffer */
++ ret = copy_to_user(presp_payload, (uint8_t *)ha->ioctl_mem,
++ payload_len);
++ if (ret) {
++ pext->Status = EXT_STATUS_COPY_ERR;
++ DEBUG9_10(printk("%s(%ld): inst=%ld ERROR copy rsp buffer.\n",
++ __func__, ha->host_no, ha->instance);)
++ goto els_passthru_done;
++ }
++
++ DEBUG9(printk("%s(%ld): inst=%ld exiting normally.\n",
++ __func__, ha->host_no, ha->instance);)
++
++els_passthru_done:
++
++ qla2x00_free_ioctl_scrap_mem(ha);
++ return (ret);
++}
++#endif
++
++/*
++ * qla2x00_send_fcct
++ * Passes the FC CT command down to firmware as MSIOCB and
++ * copies the response back when it completes.
++ *
++ * Input:
++ * ha = adapter state pointer.
++ * pext = EXT_IOCTL structure pointer.
++ * mode = not used.
++ *
++ * Returns:
++ * 0 = success
++ * others = errno value
++ *
++ * Context:
++ * Kernel context.
++ */
++static int
++qla2x00_send_fcct(scsi_qla_host_t *ha, EXT_IOCTL *pext, int mode)
++{
++ int ret = 0;
++ int tmp_rval = 0;
++ uint16_t mb[MAILBOX_REGISTER_COUNT];
++
++ fc_lun_t *ptemp_fclun;
++ fc_port_t *ptemp_fcport;
++
++ os_lun_t *lq;
++ os_tgt_t *tq;
++
++ Scsi_Cmnd *pscsi_cmd;
++ srb_t *sp = NULL;
++
++ DEBUG9(printk("%s(%ld): inst=%ld entered.\n",
++ __func__, ha->host_no, ha->instance);)
++
++ /* check on current topology */
++ if ((ha->current_topology != ISP_CFG_F) &&
++ (ha->current_topology != ISP_CFG_FL)) {
++ pext->Status = EXT_STATUS_DEV_NOT_FOUND;
++ DEBUG9_10(printk("%s(%ld): inst=%ld ERROR not in F or FL mode\n",
++ __func__, ha->host_no, ha->instance);)
++ return (ret);
++ }
++
++ if (ha->ioctl_mem_size <= 0) {
++ if (qla2x00_get_new_ioctl_dma_mem(ha,
++ QLA_INITIAL_IOCTLMEM_SIZE) != QL_STATUS_SUCCESS) {
++
++ DEBUG9_10(printk("%s(%ld): inst=%ld ERROR cannot alloc "
++ "DMA buffer size=%lx.\n",
++ __func__, ha->host_no, ha->instance,
++ QLA_INITIAL_IOCTLMEM_SIZE);)
++
++ pext->Status = EXT_STATUS_NO_MEMORY;
++ return (ret);
++ }
++ }
++
++ if (pext->ResponseLen > ha->ioctl_mem_size) {
++ if (qla2x00_get_new_ioctl_dma_mem(ha, pext->ResponseLen) !=
++ QL_STATUS_SUCCESS) {
++ DEBUG9_10(printk("%s(%ld): inst=%ld ERROR cannot alloc "
++ "requested DMA buffer size %x.\n",
++ __func__, ha->host_no, ha->instance,
++ pext->ResponseLen);)
++ pext->Status = EXT_STATUS_NO_MEMORY;
++ return (ret);
++ }
++
++ DEBUG9(printk("%s(%ld): inst=%ld rsp buf len larger than "
++ "existing size. Additional mem alloc successful.\n",
++ __func__, ha->host_no, ha->instance);)
++ }
++
++ if (pext->RequestLen > ha->ioctl_mem_size) {
++ pext->Status = EXT_STATUS_INVALID_PARAM;
++ DEBUG9_10(printk("%s(%ld): inst=%ld ERROR ReqLen too big=%x.\n",
++ __func__, ha->host_no, ha->instance, pext->RequestLen);)
++
++ return (ret);
++ }
++
++ ret = verify_area(VERIFY_READ, (void *)pext->RequestAdr,
++ pext->RequestLen);
++ if (ret) {
++ pext->Status = EXT_STATUS_COPY_ERR;
++ DEBUG9_10(printk(
++ "%s(%ld): inst=%ld ERROR verify read req buf\n",
++ __func__, ha->host_no, ha->instance);)
++
++ return (ret);
++ }
++
++ DEBUG9(printk("%s(%ld): inst=%ld req buf verified.\n",
++ __func__, ha->host_no, ha->instance);)
++
++ if (qla2x00_get_ioctl_scrap_mem(ha, (void **)&pscsi_cmd,
++ sizeof(Scsi_Cmnd))) {
++ /* not enough memory */
++ pext->Status = EXT_STATUS_NO_MEMORY;
++ DEBUG9_10(printk("%s(%ld): inst=%ld scrap not big enough. "
++ "size requested=%d.\n",
++ __func__, ha->host_no, ha->instance,
++ sizeof(Scsi_Cmnd));)
++ return (ret);
++ }
++ if (qla2x00_get_ioctl_scrap_mem(ha, (void **)&ptemp_fclun,
++ sizeof(fc_lun_t))) {
++ /* not enough memory */
++ pext->Status = EXT_STATUS_NO_MEMORY;
++ DEBUG9_10(printk("%s(%ld): inst=%ld scrap not big enough. "
++ "fclun size requested=%d.\n",
++ __func__, ha->host_no, ha->instance,
++ sizeof(fc_lun_t));)
++ goto fcct_passthru_done;
++ }
++ if (qla2x00_get_ioctl_scrap_mem(ha, (void **)&ptemp_fcport,
++ sizeof(fc_port_t))) {
++ /* not enough memory */
++ pext->Status = EXT_STATUS_NO_MEMORY;
++ DEBUG9_10(printk("%s(%ld): inst=%ld scrap not big enough. "
++ "fcport size requested=%d.\n",
++ __func__, ha->host_no, ha->instance,
++ sizeof(fc_port_t));)
++ goto fcct_passthru_done;
++ }
++
++ /* initialize */
++ memset(ha->ioctl_mem, 0, ha->ioctl_mem_size);
++
++ /* copy request buffer */
++ ret = copy_from_user(ha->ioctl_mem, pext->RequestAdr, pext->RequestLen);
++ if (ret) {
++ pext->Status = EXT_STATUS_COPY_ERR;
++ DEBUG9_10(printk(
++ "%s(%ld): inst=%ld ERROR copy req buf. ret=%d\n",
++ __func__, ha->host_no, ha->instance, ret);)
++
++
++ goto fcct_passthru_done;
++ }
++
++ DEBUG9(printk("%s(%ld): inst=%ld after copy request.\n",
++ __func__, ha->host_no, ha->instance);)
++
++ /* alloc sp */
++ if ((sp = qla2x00_get_new_sp(ha)) == NULL) {
++
++ DEBUG9_10(printk("%s(%ld): inst=%ld ERROR cannot alloc "
++ "sp %p.\n",
++ __func__, ha->host_no, ha->instance, sp);)
++
++ pext->Status = EXT_STATUS_NO_MEMORY;
++ goto fcct_passthru_done;
++ }
++
++ DEBUG9(printk("%s(%ld): inst=%ld after alloc sp.\n",
++ __func__, ha->host_no, ha->instance);)
++
++ /* setup sp for this command */
++ tq = ha->ioctl->ioctl_tq;
++ lq = ha->ioctl->ioctl_lq;
++ sp->cmd = pscsi_cmd;
++ sp->flags = SRB_IOCTL;
++ sp->lun_queue = lq;
++ sp->tgt_queue = tq;
++ ptemp_fclun->fcport = ptemp_fcport;
++ ptemp_fclun->lun = 0;
++ ptemp_fclun->flags = 0;
++ lq->fclun = ptemp_fclun;
++ lq->fclun->fcport->ha = ha;
++
++ /* init scsi_cmd */
++ pscsi_cmd->device->host = ha->host;
++ pscsi_cmd->scsi_done = qla2x00_msiocb_done;
++
++ /* check on management server login status */
++ if (ha->flags.management_server_logged_in == 0) {
++ /* login to management server device */
++
++ tmp_rval = qla2x00_login_fabric(ha, MANAGEMENT_SERVER,
++ 0xff, 0xff, 0xfa, &mb[0], BIT_1);
++
++ if (tmp_rval != 0 || mb[0] != 0x4000) {
++ pext->Status = EXT_STATUS_DEV_NOT_FOUND;
++
++ DEBUG10(printk("%s(%ld): inst=%ld ERROR login to MS.\n",
++ __func__, ha->host_no, ha->instance);)
++
++ atomic_set(&sp->ref_count, 0);
++ add_to_free_queue (ha, sp);
++
++ goto fcct_passthru_done;
++ }
++
++ ha->flags.management_server_logged_in = 1;
++ }
++
++ DEBUG9(printk("%s(%ld): success login to MS.\n",
++ __func__, ha->host_no);)
++
++ /* check on loop down */
++ if (ha->loop_state != LOOP_READY ||
++ test_bit(CFG_ACTIVE, &ha->cfg_flags) ||
++ (test_bit(ABORT_ISP_ACTIVE, &ha->dpc_flags)) ||
++ ABORTS_ACTIVE) {
++
++ DEBUG10(printk("%s(%ld): inst=%ld loop not ready.\n",
++ __func__, ha->host_no, ha->instance);)
++
++ pext->Status = EXT_STATUS_BUSY;
++
++ atomic_set(&sp->ref_count, 0);
++ add_to_free_queue (ha, sp);
++
++ goto fcct_passthru_done;
++ }
++
++ DEBUG9(printk("%s(%ld): inst=%ld going to issue command.\n",
++ __func__, ha->host_no, ha->instance);)
++
++ tmp_rval = qla2x00_start_ms_cmd(ha, pext, sp, NULL);
++
++ DEBUG9(printk("%s(%ld): inst=%ld after issue command.\n",
++ __func__, ha->host_no, ha->instance);)
++
++ if (tmp_rval != 0) {
++ /* We waited and post function did not get called */
++ DEBUG9_10(printk("%s(%ld): inst=%ld command timed out.\n",
++ __func__, ha->host_no, ha->instance);)
++ pext->Status = EXT_STATUS_MS_NO_RESPONSE;
++ atomic_set(&sp->ref_count, 0);
++ add_to_free_queue (ha, sp);
++
++ goto fcct_passthru_done;
++ }
++
++ if (CMD_COMPL_STATUS(pscsi_cmd) != 0 ||
++ CMD_ENTRY_STATUS(pscsi_cmd) != 0) {
++ DEBUG9_10(printk("%s(%ld): inst=%ld cmd returned error=%x.\n",
++ __func__, ha->host_no, ha->instance,
++ CMD_COMPL_STATUS(pscsi_cmd));)
++ pext->Status = EXT_STATUS_ERR;
++ goto fcct_passthru_done;
++ }
++
++ /* getting device data and putting in pext->ResponseAdr */
++ ret = verify_area(VERIFY_WRITE, (void *)pext->ResponseAdr ,
++ pext->ResponseLen);
++ if (ret) {
++ pext->Status = EXT_STATUS_COPY_ERR;
++ DEBUG9_10(printk("%s(%ld): inst=%ld ERROR verify wrt rsp "
++ "buffer. ha=%p.\n",
++ __func__, ha->host_no, ha->instance, ha);)
++ goto fcct_passthru_done;
++ }
++
++ /* sending back data returned from Management Server */
++ ret = copy_to_user((uint8_t *)pext->ResponseAdr,
++ (uint8_t *)ha->ioctl_mem, pext->ResponseLen);
++ if (ret) {
++ pext->Status = EXT_STATUS_COPY_ERR;
++ DEBUG9_10(printk("%s(%ld): inst=%ld ERROR copy rsp buffer.\n",
++ __func__, ha->host_no, ha->instance);)
++ goto fcct_passthru_done;
++ }
++
++ DEBUG9(printk("%s(%ld): inst=%ld exiting.\n",
++ __func__, ha->host_no, ha->instance);)
++
++fcct_passthru_done:
++
++ qla2x00_free_ioctl_scrap_mem(ha);
++ return (ret);
++}
++
++/*
++ * qla2x00_start_ms_cmd
++ * Allocates an MSIOCB request pkt and sends out the passthru cmd.
++ *
++ * Input:
++ * ha = adapter state pointer.
++ *
++ * Returns:
++ * qla2x00 local function return status code.
++ *
++ * Context:
++ * Kernel context.
++ */
++static int
++qla2x00_start_ms_cmd(scsi_qla_host_t *ha, EXT_IOCTL *pext, srb_t *sp,
++ EXT_ELS_PT_REQ *pels_pt_req)
++{
++#define ELS_REQUEST_RCTL 0x22
++#define ELS_REPLY_RCTL 0x23
++
++ uint32_t usr_req_len;
++ uint32_t usr_resp_len;
++ uint64_t usr_reqbuf_addr;
++
++ ms_iocb_entry_t *pkt;
++ unsigned long cpu_flags = 0;
++
++
++ /* get spin lock for this operation */
++ spin_lock_irqsave(&ha->hardware_lock, cpu_flags);
++
++ /* Get MS request packet. */
++ pkt = (ms_iocb_entry_t *)qla2x00_ms_req_pkt(ha, sp);
++ if (pkt == NULL) {
++ /* release spin lock and return error. */
++ spin_unlock_irqrestore(&ha->hardware_lock, cpu_flags);
++
++ pext->Status = EXT_STATUS_NO_MEMORY;
++ DEBUG10(printk("%s(%ld): inst=%ld MSIOCB PT - could not get "
++ "Request Packet.\n", __func__, ha->host_no, ha->instance);)
++ return (QL_STATUS_RESOURCE_ERROR);
++ }
++
++ pkt->entry_type = MS_IOCB_TYPE;
++ pkt->entry_count = 1;
++
++ if (pels_pt_req != NULL) {
++ /* process ELS passthru command */
++ usr_reqbuf_addr = (uint64_t)ha->ioctl_mem_phys +
++ sizeof(EXT_ELS_PT_REQ);
++ usr_req_len = pext->RequestLen - sizeof(EXT_ELS_PT_REQ);
++ usr_resp_len = pext->ResponseLen - sizeof(EXT_ELS_PT_REQ);
++
++ pkt->control_flags = BIT_15; /* ELS passthru enabled */
++ pkt->loop_id = pels_pt_req->Lid;
++ pkt->type = 1; /* ELS frame */
++
++ if (pext->ResponseLen != 0) {
++ pkt->r_ctl = ELS_REQUEST_RCTL;
++ pkt->rx_id = 0;
++ } else {
++ pkt->r_ctl = ELS_REPLY_RCTL;
++ pkt->rx_id = pels_pt_req->Rxid;
++ }
++ } else {
++ usr_reqbuf_addr = (uint64_t)ha->ioctl_mem_phys;
++ usr_req_len = pext->RequestLen;
++ usr_resp_len = pext->ResponseLen;
++ pkt->loop_id = MANAGEMENT_SERVER;
++ }
++
++ DEBUG9_10(printk("%s(%ld): inst=%ld using loop_id=%02x req_len=%d, "
++ "resp_len=%d.\n", __func__, ha->host_no, ha->instance,
++ pkt->loop_id, usr_req_len, usr_resp_len);)
++
++ pkt->timeout = QLA_PT_CMD_TOV;
++ pkt->cmd_dsd_count = 1;
++ pkt->total_dsd_count = 2; /* no continuation */
++ pkt->rsp_bytecount = usr_resp_len;
++ pkt->req_bytecount = usr_req_len;
++
++ /* loading command payload address */
++ pkt->dseg_req_address[0] = LSD(usr_reqbuf_addr);
++ pkt->dseg_req_address[1] = MSD(usr_reqbuf_addr);
++ pkt->dseg_req_length = usr_req_len;
++
++ /* loading response payload address */
++ pkt->dseg_rsp_address[0] = LSD(ha->ioctl_mem_phys);
++ pkt->dseg_rsp_address[1] = MSD(ha->ioctl_mem_phys);
++ pkt->dseg_rsp_length = usr_resp_len;
++
++ /* set flag to indicate IOCTL MSIOCB cmd in progress */
++ ha->ioctl->MSIOCB_InProgress = 1;
++ ha->ioctl->ioctl_tov = pkt->timeout + 1; /* 1 second more */
++
++ /* prepare for receiving completion. */
++ qla2x00_ioctl_sem_init(ha);
++
++ /* Issue command to ISP */
++ qla2x00_isp_cmd(ha);
++
++ ha->ioctl->cmpl_timer.expires = jiffies + ha->ioctl->ioctl_tov * HZ;
++ add_timer(&ha->ioctl->cmpl_timer);
++
++ DEBUG9(printk("%s(%ld): inst=%ld releasing hardware_lock.\n",
++ __func__, ha->host_no, ha->instance);)
++ spin_unlock_irqrestore(&ha->hardware_lock, cpu_flags);
++
++ DEBUG9(printk("%s(%ld): inst=%ld sleep for completion.\n",
++ __func__, ha->host_no, ha->instance);)
++
++ down(&ha->ioctl->cmpl_sem);
++
++ del_timer(&ha->ioctl->cmpl_timer);
++
++ if (ha->ioctl->MSIOCB_InProgress == 1) {
++ DEBUG9_10(printk("%s(%ld): inst=%ld timed out. exiting.\n",
++ __func__, ha->host_no, ha->instance);)
++ return QL_STATUS_ERROR;
++ }
++
++ DEBUG9(printk("%s(%ld): inst=%ld exiting.\n",
++ __func__, ha->host_no, ha->instance);)
++
++ return QL_STATUS_SUCCESS;
++}
++
++/*
++ * qla2x00_wwpn_to_scsiaddr
++ * Handles the EXT_CC_WWPN_TO_SCSIADDR command.
++ *
++ * Input:
++ * ha = adapter state pointer.
++ * pext = EXT_IOCTL structure pointer.
++ * mode = not used.
++ *
++ * Returns:
++ * 0 = success
++ * others = errno value
++ *
++ * Context:
++ * Kernel context.
++ */
++static int
++qla2x00_wwpn_to_scsiaddr(scsi_qla_host_t *ha, EXT_IOCTL *pext, int mode)
++{
++ int ret = 0;
++ fc_port_t *tgt_fcport;
++ os_tgt_t *tq;
++ uint8_t tmp_wwpn[EXT_DEF_WWN_NAME_SIZE];
++ uint32_t b, tgt, l;
++ EXT_SCSI_ADDR tmp_addr;
++
++
++ DEBUG9(printk("%s(%ld): inst=%ld entered.\n",
++ __func__, ha->host_no, ha->instance);)
++
++ if (pext->RequestLen != EXT_DEF_WWN_NAME_SIZE ||
++ pext->ResponseLen < sizeof(EXT_SCSI_ADDR)) {
++ /* error */
++ DEBUG9_10(printk("%s(%ld): inst=%ld invalid WWN buffer size %d "
++ "received.\n",
++ __func__, ha->host_no, ha->instance, pext->ResponseLen);)
++ pext->Status = EXT_STATUS_INVALID_PARAM;
++
++ return (ret);
++ }
++
++ ret = verify_area(VERIFY_READ, (void *)pext->RequestAdr,
++ pext->RequestLen);
++ if (ret) {
++ DEBUG9_10(printk(
++ "%s(%ld): inst=%ld ERROR VERIFY_READ req buf\n",
++ __func__, ha->host_no, ha->instance);)
++ pext->Status = EXT_STATUS_COPY_ERR;
++ return (ret);
++ }
++
++ ret = copy_from_user(tmp_wwpn, pext->RequestAdr, pext->RequestLen);
++ if (ret) {
++ DEBUG9_10(printk("%s(%ld): inst=%ld ERROR copy_from_user "
++ "failed(%d) on request buf.\n",
++ __func__, ha->host_no, ha->instance, ret);)
++ pext->Status = EXT_STATUS_COPY_ERR;
++ return (ret);
++ }
++
++ tq = NULL;
++ for (tgt = 0; tgt < MAX_TARGETS; tgt++) {
++ if (ha->otgt[tgt] == NULL) {
++ continue;
++ }
++
++ tq = ha->otgt[tgt];
++ if (tq->vis_port == NULL) {
++ break;
++ }
++
++ tgt_fcport = tq->vis_port;
++ if (memcmp(tmp_wwpn, tgt_fcport->port_name,
++ EXT_DEF_WWN_NAME_SIZE) == 0) {
++ break;
++ }
++ }
++
++ if (tq == NULL || tgt >= MAX_TARGETS) {
++ pext->Status = EXT_STATUS_DEV_NOT_FOUND;
++ DEBUG9_10(printk("%s(%ld): inst=%ld target dev not found. "
++ "tq=%p, tgt=%x.\n", __func__, ha->host_no, ha->instance,
++ tq, tgt);)
++ return (ret);
++ }
++
++ if (tq->vis_port == NULL) { /* dg 08/14/01 */
++ pext->Status = EXT_STATUS_BUSY;
++ DEBUG9_10(printk("%s(%ld): inst=%ld target port not found. "
++ "tq=%p, tgt=%x.\n",
++ __func__, ha->host_no, ha->instance, tq, tgt);)
++ return (ret);
++ }
++
++ /* Currently we only have bus 0 and no translation on LUN */
++ b = 0;
++ l = 0;
++
++ /*
++ * Return SCSI address. Currently no translation is done for
++ * LUN.
++ */
++ tmp_addr.Bus = b;
++ tmp_addr.Target = tgt;
++ tmp_addr.Lun = l;
++ if (pext->ResponseLen > sizeof(EXT_SCSI_ADDR))
++ pext->ResponseLen = sizeof(EXT_SCSI_ADDR);
++
++ ret = verify_area(VERIFY_WRITE, (void *)pext->ResponseAdr,
++ pext->ResponseLen);
++ if (ret) {
++ pext->Status = EXT_STATUS_COPY_ERR;
++ DEBUG9_10(printk("%s(%ld): inst=%ld ERROR VERIFY wrt rsp buf\n",
++ __func__, ha->host_no, ha->instance);)
++ return (ret);
++ }
++
++ ret = copy_to_user((uint8_t *)pext->ResponseAdr, &tmp_addr,
++ pext->ResponseLen);
++ if (ret) {
++ pext->Status = EXT_STATUS_COPY_ERR;
++ DEBUG9_10(printk("%s(%ld): inst=%ld ERROR copy rsp buffer.\n",
++ __func__, ha->host_no, ha->instance);)
++ return (ret);
++ }
++
++ DEBUG9(printk(KERN_INFO
++ "%s(%ld): Found t%d l%d for %02x%02x%02x%02x%02x%02x%02x%02x.\n",
++ __func__, ha->host_no,
++ tmp_addr.Target, tmp_addr.Lun,
++ tmp_wwpn[0], tmp_wwpn[1], tmp_wwpn[2], tmp_wwpn[3],
++ tmp_wwpn[4], tmp_wwpn[5], tmp_wwpn[6], tmp_wwpn[7]);)
++
++ pext->Status = EXT_STATUS_OK;
++
++ DEBUG9(printk("%s(%ld): inst=%ld exiting.\n",
++ __func__, ha->host_no, ha->instance);)
++
++ return (ret);
++}
++
++/*
++ * qla2x00_scsi_passthru
++ * Handles all subcommands of the EXT_CC_SEND_SCSI_PASSTHRU command.
++ *
++ * Input:
++ * ha = adapter state pointer.
++ * pext = EXT_IOCTL structure pointer.
++ * mode = not used.
++ *
++ * Returns:
++ * 0 = success
++ * others = errno value
++ *
++ * Context:
++ * Kernel context.
++ */
++static int
++qla2x00_scsi_passthru(scsi_qla_host_t *ha, EXT_IOCTL *pext, int mode)
++{
++ int tmp_rval = 0;
++
++ switch(pext->SubCode) {
++ case EXT_SC_SEND_SCSI_PASSTHRU:
++ tmp_rval = qla2x00_sc_scsi_passthru(ha, pext, mode);
++ break;
++ case EXT_SC_SEND_FC_SCSI_PASSTHRU:
++ tmp_rval = qla2x00_sc_fc_scsi_passthru(ha, pext, mode);
++ break;
++ case EXT_SC_SCSI3_PASSTHRU:
++ tmp_rval = qla2x00_sc_scsi3_passthru(ha, pext, mode);
++ break;
++ default:
++ break;
++ }
++
++ return tmp_rval;
++}
++
++/*
++ * qla2x00_sc_scsi_passthru
++ * Handles EXT_SC_SEND_SCSI_PASSTHRU subcommand.
++ *
++ * Input:
++ * ha = adapter state pointer.
++ * pext = EXT_IOCTL structure pointer.
++ * mode = not used.
++ *
++ * Returns:
++ * 0 = success
++ * others = errno value
++ *
++ * Context:
++ * Kernel context.
++ */
++static int
++qla2x00_sc_scsi_passthru(scsi_qla_host_t *ha, EXT_IOCTL *pext, int mode)
++{
++ int ret = 0;
++ uint8_t *usr_temp, *kernel_tmp;
++ uint8_t scsi_direction;
++ uint32_t i;
++
++#if defined(QL_DEBUG_LEVEL_9)
++ uint32_t b, t, l;
++#endif
++ uint32_t transfer_len;
++
++ EXT_SCSI_PASSTHRU *pscsi_pass;
++
++ Scsi_Cmnd *pscsi_cmd;
++ Scsi_Device *pscsi_device;
++
++ DEBUG9(printk("%s(%ld): inst=%ld entered.\n",
++ __func__, ha->host_no, ha->instance);)
++
++ ret = verify_area(VERIFY_READ, (void *)pext->RequestAdr,
++ sizeof(EXT_SCSI_PASSTHRU));
++ if (ret) {
++ pext->Status = EXT_STATUS_COPY_ERR;
++ DEBUG9_10(printk("%s(%ld): inst=%ld ERROR verify READ "
++ "req buf.\n",
++ __func__, ha->host_no, ha->instance);)
++ return (ret);
++ }
++
++ if (pext->ResponseLen > ha->ioctl_mem_size) {
++ if (qla2x00_get_new_ioctl_dma_mem(ha, pext->ResponseLen) !=
++ QL_STATUS_SUCCESS) {
++ DEBUG9_10(printk("%s(%ld): inst=%ld ERROR cannot alloc "
++ "requested DMA buffer size %x.\n",
++ __func__, ha->host_no, ha->instance,
++ pext->ResponseLen);)
++ pext->Status = EXT_STATUS_NO_MEMORY;
++ return (ret);
++ }
++ }
++
++ if (qla2x00_get_ioctl_scrap_mem(ha, (void **)&pscsi_pass,
++ sizeof(EXT_SCSI_PASSTHRU))) {
++ /* not enough memory */
++ pext->Status = EXT_STATUS_NO_MEMORY;
++ DEBUG9_10(printk("%s(%ld): inst=%ld scrap not big enough. "
++ "size requested=%d.\n",
++ __func__, ha->host_no, ha->instance,
++ sizeof(EXT_SCSI_PASSTHRU));)
++ return (ret);
++ }
++
++ if (qla2x00_get_ioctl_scrap_mem(ha, (void **)&pscsi_cmd,
++ sizeof(Scsi_Cmnd))) {
++ /* not enough memory */
++ pext->Status = EXT_STATUS_NO_MEMORY;
++ DEBUG9_10(printk("%s(%ld): inst=%ld scrap not big enough. "
++ "pscsi_cmd requested=%d.\n",
++ __func__, ha->host_no, ha->instance,
++ sizeof(Scsi_Cmnd));)
++ goto scsi_passthru_done;
++ }
++
++ if (qla2x00_get_ioctl_scrap_mem(ha, (void **)&pscsi_device,
++ sizeof(Scsi_Device))) {
++ /* not enough memory */
++ pext->Status = EXT_STATUS_NO_MEMORY;
++ DEBUG9_10(printk("%s(%ld): inst=%ld scrap not big enough. "
++ "pscsi_device requested=%d.\n",
++ __func__, ha->host_no, ha->instance,
++ sizeof(Scsi_Device));)
++ goto scsi_passthru_done;
++ }
++
++ /* clear ioctl_mem to be used */
++ memset(ha->ioctl_mem, 0, ha->ioctl_mem_size);
++
++ /* Copy request buffer */
++ usr_temp = (uint8_t *)pext->RequestAdr;
++ kernel_tmp = (uint8_t *)pscsi_pass;
++ ret = copy_from_user(kernel_tmp, usr_temp, sizeof(EXT_SCSI_PASSTHRU));
++ if (ret) {
++ pext->Status = EXT_STATUS_COPY_ERR;
++ DEBUG9_10(printk(
++ "%s(%ld): inst=%ld ERROR copy req buf ret=%d\n",
++ __func__, ha->host_no, ha->instance, ret);)
++ goto scsi_passthru_done;
++ }
++
++ /* set target coordinates */
++ pscsi_cmd->device->id = pscsi_pass->TargetAddr.Target;
++ pscsi_cmd->device->lun = pscsi_pass->TargetAddr.Lun;
++
++ /* Verify target exists */
++ if (TGT_Q(ha, pscsi_cmd->device->id) == NULL) {
++ pext->Status = EXT_STATUS_DEV_NOT_FOUND;
++ DEBUG9_10(printk("%s(%ld): inst=%ld ERROR tgt %d not found.\n",
++ __func__,
++ ha->host_no, ha->instance, pscsi_cmd->device->id));
++ goto scsi_passthru_done;
++ }
++
++ /* Copy over cdb */
++
++ if (pscsi_pass->CdbLength == 6) {
++ pscsi_cmd->cmd_len = 6;
++
++ } else if (pscsi_pass->CdbLength == 10) {
++ pscsi_cmd->cmd_len = 0x0A;
++
++ } else if (pscsi_pass->CdbLength == 12) {
++ pscsi_cmd->cmd_len = 0x0C;
++
++ } else {
++ printk(KERN_WARNING
++ "%s: Unsupported Cdb Length=%x.\n",
++ __func__, pscsi_pass->CdbLength);
++
++ pext->Status = EXT_STATUS_INVALID_PARAM;
++ goto scsi_passthru_done;
++ }
++
++ memcpy(pscsi_cmd->data_cmnd, pscsi_pass->Cdb, pscsi_cmd->cmd_len);
++ memcpy(pscsi_cmd->cmnd, pscsi_pass->Cdb, pscsi_cmd->cmd_len);
++
++ DEBUG9(printk("%s Dump of cdb buffer:\n", __func__);)
++ DEBUG9(qla2x00_dump_buffer((uint8_t *)&pscsi_cmd->data_cmnd[0],
++ pscsi_cmd->cmd_len);)
++
++ pscsi_cmd->device->host = ha->host;
++
++ /* mark this as a special delivery and collection command */
++ pscsi_cmd->flags = 0;
++ pscsi_cmd->scsi_done = qla2x00_scsi_pt_done;
++
++ pscsi_cmd->device = pscsi_device;
++ pscsi_cmd->device->tagged_queue = 0;
++ pscsi_cmd->use_sg = 0; /* no ScatterGather */
++ pscsi_cmd->request_bufflen = pext->ResponseLen;
++ pscsi_cmd->request_buffer = ha->ioctl_mem;
++ pscsi_cmd->timeout_per_command = QLA_PT_CMD_TOV * HZ;
++ CMD_RESID_LEN(pscsi_cmd) = SRB_IOCTL; /* Used to set sp->flags later */
++
++ if (pscsi_pass->Direction == EXT_DEF_SCSI_PASSTHRU_DATA_OUT) {
++ /* sending user data from pext->ResponseAdr to device */
++ ret = verify_area(VERIFY_READ, (void *)pext->ResponseAdr,
++ pext->ResponseLen);
++ if (ret) {
++ pext->Status = EXT_STATUS_COPY_ERR;
++ DEBUG9_10(printk("%s(%ld): inst=%ld ERROR verify READ "
++ "rsp buf.\n", __func__, ha->host_no, ha->instance);)
++ goto scsi_passthru_done;
++ }
++
++ pscsi_cmd->sc_data_direction = SCSI_DATA_WRITE;
++ usr_temp = (uint8_t *)pext->ResponseAdr;
++ kernel_tmp = (uint8_t *)ha->ioctl_mem;
++ ret = copy_from_user(kernel_tmp, usr_temp, pext->ResponseLen);
++ if (ret) {
++ pext->Status = EXT_STATUS_COPY_ERR;
++ DEBUG9_10(printk("%s(%ld): inst=%ld ERROR copy rsp buf "
++ "failed(%d).\n",
++ __func__, ha->host_no, ha->instance, ret);)
++ goto scsi_passthru_done;
++ }
++ } else {
++ pscsi_cmd->sc_data_direction = SCSI_DATA_READ;
++ }
++
++ DEBUG9({
++ b = SCSI_BUS_32(pscsi_cmd);
++ t = SCSI_TCN_32(pscsi_cmd);
++ l = SCSI_LUN_32(pscsi_cmd);
++ })
++ DEBUG9(printk("%s(%ld): CDB=%02x %02x %02x %02x; b=%x t=%x l=%x.\n",
++ __func__, ha->host_no, pscsi_cmd->cmnd[0], pscsi_cmd->cmnd[1],
++ pscsi_cmd->cmnd[2], pscsi_cmd->cmnd[3], b, t, l);)
++
++ /*
++ * Check the status of the port
++ */
++ if (qla2x00_check_tgt_status(ha, pscsi_cmd) != QL_STATUS_SUCCESS) {
++ pext->Status = EXT_STATUS_DEV_NOT_FOUND;
++ DEBUG9_10(printk("%s(%ld): inst=%ld check_tgt_status "
++ "failed.\n",
++ __func__, ha->host_no, ha->instance);)
++ goto scsi_passthru_done;
++ }
++
++ /* set flag to indicate IOCTL SCSI PassThru in progress */
++ ha->ioctl->SCSIPT_InProgress = 1;
++ ha->ioctl->ioctl_tov = (int)QLA_PT_CMD_DRV_TOV;
++
++ /* prepare for receiving completion. */
++ qla2x00_ioctl_sem_init(ha);
++ CMD_COMPL_STATUS(pscsi_cmd) = (int) IOCTL_INVALID_STATUS;
++
++ /* send command to adapter */
++ DEBUG9(printk("%s(%ld): inst=%ld sending command.\n",
++ __func__, ha->host_no, ha->instance);)
++
++ /* get spin lock for this operation */
++ spin_lock_irqsave(ha->host->host_lock, ha->cpu_flags);
++
++ qla2x00_queuecommand(pscsi_cmd, (void *) qla2x00_scsi_pt_done);
++
++ ha->ioctl->cmpl_timer.expires = jiffies + ha->ioctl->ioctl_tov * HZ;
++ add_timer(&ha->ioctl->cmpl_timer);
++
++ spin_unlock_irqrestore(ha->host->host_lock, ha->cpu_flags);
++
++ DEBUG9(printk("%s(%ld): inst=%ld waiting for completion.\n",
++ __func__, ha->host_no, ha->instance);)
++
++ down(&ha->ioctl->cmpl_sem);
++
++ del_timer(&ha->ioctl->cmpl_timer);
++
++ DEBUG9(printk("%s(%ld): inst=%ld completed.\n",
++ __func__, ha->host_no, ha->instance);)
++
++ if (ha->ioctl->SCSIPT_InProgress == 1) {
++
++ printk(KERN_WARNING
++ "qla2x00: scsi%ld ERROR passthru command timeout.\n",
++ ha->host_no);
++
++ pext->Status = EXT_STATUS_DEV_NOT_FOUND;
++ goto scsi_passthru_done;
++ }
++
++ if (CMD_COMPL_STATUS(pscsi_cmd) == (int)IOCTL_INVALID_STATUS) {
++
++ DEBUG9(printk("%s(%ld): inst=%ld ERROR - cmd not completed.\n",
++ __func__, ha->host_no, ha->instance);)
++
++ pext->Status = EXT_STATUS_ERR;
++ goto scsi_passthru_done;
++ }
++
++ switch (CMD_COMPL_STATUS(pscsi_cmd)) {
++ case CS_INCOMPLETE:
++ case CS_ABORTED:
++ case CS_PORT_UNAVAILABLE:
++ case CS_PORT_LOGGED_OUT:
++ case CS_PORT_CONFIG_CHG:
++ case CS_PORT_BUSY:
++ DEBUG9_10(printk("%s(%ld): inst=%ld cs err = %x.\n",
++ __func__, ha->host_no, ha->instance,
++ CMD_COMPL_STATUS(pscsi_cmd));)
++ pext->Status = EXT_STATUS_BUSY;
++
++ goto scsi_passthru_done;
++ }
++
++ if ((CMD_COMPL_STATUS(pscsi_cmd) == CS_DATA_UNDERRUN) ||
++ (CMD_SCSI_STATUS(pscsi_cmd) != 0)) {
++
++ /* have done the post function */
++ pext->Status = EXT_STATUS_SCSI_STATUS;
++ pext->DetailStatus = CMD_SCSI_STATUS(pscsi_cmd) & 0xff;
++ DEBUG9_10(printk("%s(%ld): inst=%ld data underrun or scsi err. "
++ "host status =0x%x, scsi status = 0x%x.\n",
++ __func__, ha->host_no, ha->instance,
++ CMD_COMPL_STATUS(pscsi_cmd), CMD_SCSI_STATUS(pscsi_cmd));)
++
++ } else if (CMD_COMPL_STATUS(pscsi_cmd) != 0) {
++ DEBUG9_10(printk("%s(%ld): inst=%ld cs err=%x.\n",
++ __func__, ha->host_no, ha->instance,
++ CMD_COMPL_STATUS(pscsi_cmd));)
++ pext->Status = EXT_STATUS_ERR;
++ goto scsi_passthru_done;
++ }
++
++ /* copy up structure to make sense data available to user */
++ pscsi_pass->SenseLength = CMD_ACTUAL_SNSLEN(pscsi_cmd);
++ if (CMD_ACTUAL_SNSLEN(pscsi_cmd)) {
++ for (i = 0; i < CMD_ACTUAL_SNSLEN(pscsi_cmd); i++)
++ pscsi_pass->SenseData[i] = pscsi_cmd->sense_buffer[i];
++
++ DEBUG10(printk("%s Dump of sense buffer:\n", __func__);)
++ DEBUG10(qla2x00_dump_buffer(
++ (uint8_t *)&pscsi_pass->SenseData[0],
++ CMD_ACTUAL_SNSLEN(pscsi_cmd));)
++
++ ret = verify_area(VERIFY_WRITE, (void *)pext->RequestAdr,
++ sizeof(EXT_SCSI_PASSTHRU));
++ if (ret) {
++ pext->Status = EXT_STATUS_COPY_ERR;
++ DEBUG9_10(printk("%s(%ld): inst=%ld ERROR verify WRITE "
++ "req buf.\n", __func__, ha->host_no, ha->instance);)
++ goto scsi_passthru_done;
++ }
++
++ usr_temp = (uint8_t *)pext->RequestAdr;
++ kernel_tmp = (uint8_t *)pscsi_pass;
++ ret = copy_to_user(usr_temp, kernel_tmp,
++ sizeof(EXT_SCSI_PASSTHRU));
++ if (ret) {
++ pext->Status = EXT_STATUS_COPY_ERR;
++ DEBUG9_10(printk("%s(%ld): inst=%ld ERROR copy sense "
++ "buffer.\n",
++ __func__, ha->host_no, ha->instance);)
++ goto scsi_passthru_done;
++ }
++ }
++
++ scsi_direction = pscsi_pass->Direction;
++
++ if (scsi_direction == EXT_DEF_SCSI_PASSTHRU_DATA_IN) {
++ DEBUG9(printk("%s(%ld): inst=%ld copying data.\n",
++ __func__, ha->host_no, ha->instance);)
++
++ /* getting device data and putting in pext->ResponseAdr */
++ ret = verify_area(VERIFY_WRITE, (void *)pext->ResponseAdr ,
++ pext->ResponseLen);
++ if (ret) {
++ pext->Status = EXT_STATUS_COPY_ERR;
++ DEBUG9_10(printk("%s(%ld): inst=%ld ERROR verify write "
++ "ResponseAdr.\n",
++ __func__, ha->host_no, ha->instance);)
++ goto scsi_passthru_done;
++ }
++
++ /* now copy up the READ data to user */
++ if ((CMD_COMPL_STATUS(pscsi_cmd) == CS_DATA_UNDERRUN) &&
++ (CMD_RESID_LEN(pscsi_cmd))) {
++
++ transfer_len = pext->ResponseLen -
++ CMD_RESID_LEN(pscsi_cmd);
++
++ pext->ResponseLen = transfer_len;
++ } else {
++ transfer_len = pext->ResponseLen;
++ }
++
++ usr_temp = (uint8_t *)pext->ResponseAdr;
++ kernel_tmp = (uint8_t *)ha->ioctl_mem;
++ ret = copy_to_user(usr_temp, kernel_tmp, transfer_len);
++ if (ret) {
++ pext->Status = EXT_STATUS_COPY_ERR;
++ DEBUG9_10(printk(
++ "%s(%ld): inst=%ld ERROR copy rsp buf\n",
++ __func__, ha->host_no, ha->instance);)
++ goto scsi_passthru_done;
++ }
++ }
++
++ DEBUG9(printk("%s(%ld): inst=%ld exiting.\n",
++ __func__, ha->host_no, ha->instance);)
++
++scsi_passthru_done:
++
++ qla2x00_free_ioctl_scrap_mem(ha);
++ return (ret);
++}
++
++/*
++ * qla2x00_sc_fc_scsi_passthru
++ * Handles EXT_SC_SEND_FC_SCSI_PASSTHRU subcommand.
++ *
++ * Input:
++ * ha = adapter state pointer.
++ * pext = EXT_IOCTL structure pointer.
++ * mode = not used.
++ *
++ * Returns:
++ * 0 = success
++ * others = errno value
++ *
++ * Context:
++ * Kernel context.
++ */
++static int
++qla2x00_sc_fc_scsi_passthru(scsi_qla_host_t *ha, EXT_IOCTL *pext, int mode)
++{
++ int ret = 0;
++ int port_found, lun_found;
++ fc_lun_t temp_fclun;
++ struct list_head *fcpl;
++ fc_port_t *fcport;
++ struct list_head *fcll;
++ fc_lun_t *fclun = NULL;
++ os_lun_t *lq;
++ os_tgt_t *tq;
++ srb_t *sp = NULL;
++ uint8_t *usr_temp, *kernel_tmp;
++ uint32_t i;
++
++#if defined(QL_DEBUG_LEVEL_9)
++ uint32_t b, t, l;
++#endif
++ uint32_t transfer_len;
++ uint8_t scsi_direction;
++
++ EXT_FC_SCSI_PASSTHRU *pfc_scsi_pass;
++
++ Scsi_Cmnd *pfc_scsi_cmd;
++ Scsi_Device *pfc_scsi_device;
++
++ DEBUG9(printk("%s(%ld): inst=%ld entered.\n",
++ __func__, ha->host_no, ha->instance);)
++
++ if ((sp = qla2x00_get_new_sp(ha)) == NULL) {
++
++ DEBUG9_10(printk("%s(%ld): inst=%ld ERROR cannot alloc sp.\n",
++ __func__, ha->host_no, ha->instance);)
++
++ pext->Status = EXT_STATUS_NO_MEMORY;
++ return (ret);
++ }
++
++ if (qla2x00_get_ioctl_scrap_mem(ha, (void **)&pfc_scsi_pass,
++ sizeof(EXT_FC_SCSI_PASSTHRU))) {
++ /* not enough memory */
++ pext->Status = EXT_STATUS_NO_MEMORY;
++ DEBUG9_10(printk("%s(%ld): inst=%ld scrap not big enough. "
++ "size requested=%d.\n",
++ __func__, ha->host_no, ha->instance,
++ sizeof(EXT_FC_SCSI_PASSTHRU));)
++ return (ret);
++ }
++
++ if (qla2x00_get_ioctl_scrap_mem(ha, (void **)&pfc_scsi_cmd,
++ sizeof(Scsi_Cmnd))) {
++ /* not enough memory */
++ pext->Status = EXT_STATUS_NO_MEMORY;
++ DEBUG9_10(printk("%s(%ld): inst=%ld scrap not big enough. "
++ "size requested=%d.\n",
++ __func__, ha->host_no, ha->instance,
++ sizeof(Scsi_Cmnd));)
++ goto fc_scsi_passthru_done;
++ }
++
++ if (qla2x00_get_ioctl_scrap_mem(ha, (void **)&pfc_scsi_device,
++ sizeof(Scsi_Device))) {
++ /* not enough memory */
++ pext->Status = EXT_STATUS_NO_MEMORY;
++ DEBUG9_10(printk("%s(%ld): inst=%ld scrap not big enough. "
++ "size requested=%d.\n",
++ __func__, ha->host_no, ha->instance,
++ sizeof(Scsi_Device));)
++ goto fc_scsi_passthru_done;
++ }
++
++ /* clear ioctl_mem to be used */
++ memset(ha->ioctl_mem, 0, ha->ioctl_mem_size);
++
++ ret = verify_area(VERIFY_READ, (void *)pext->RequestAdr,
++ sizeof(EXT_FC_SCSI_PASSTHRU));
++ if (ret) {
++ pext->Status = EXT_STATUS_COPY_ERR;
++ DEBUG9_10(printk(
++ "%s(%ld): inst=%ld ERROR verify READ req buf.\n",
++ __func__, ha->host_no, ha->instance);)
++ atomic_set(&sp->ref_count, 0);
++ add_to_free_queue (ha, sp);
++
++ goto fc_scsi_passthru_done;
++ }
++
++ if (pext->ResponseLen > ha->ioctl_mem_size) {
++ if (qla2x00_get_new_ioctl_dma_mem(ha, pext->ResponseLen) !=
++ QL_STATUS_SUCCESS) {
++
++ DEBUG9_10(printk("%s(%ld): inst=%ld ERROR cannot alloc "
++ "requested DMA buffer size %x.\n",
++ __func__, ha->host_no, ha->instance,
++ pext->ResponseLen);)
++
++ pext->Status = EXT_STATUS_NO_MEMORY;
++ atomic_set(&sp->ref_count, 0);
++ add_to_free_queue (ha, sp);
++ goto fc_scsi_passthru_done;
++ }
++ }
++
++ /* Copy request buffer */
++ usr_temp = (uint8_t *)pext->RequestAdr;
++ kernel_tmp = (uint8_t *)pfc_scsi_pass;
++ ret = copy_from_user(kernel_tmp, usr_temp,
++ sizeof(EXT_FC_SCSI_PASSTHRU));
++ if (ret) {
++ pext->Status = EXT_STATUS_COPY_ERR;
++ DEBUG9_10(printk(
++ "%s(%ld): inst=%ld ERROR copy req buf ret=%d\n",
++ __func__, ha->host_no, ha->instance, ret);)
++ atomic_set(&sp->ref_count, 0);
++ add_to_free_queue (ha, sp);
++
++ goto fc_scsi_passthru_done;
++ }
++
++ if (pfc_scsi_pass->FCScsiAddr.DestType != EXT_DEF_DESTTYPE_WWPN) {
++ pext->Status = EXT_STATUS_DEV_NOT_FOUND;
++ DEBUG9_10(printk("%s(%ld): inst=%ld ERROR -wrong Dest type. \n",
++ __func__, ha->host_no, ha->instance);)
++ ret = EXT_STATUS_ERR;
++ atomic_set(&sp->ref_count, 0);
++ add_to_free_queue (ha, sp);
++ goto fc_scsi_passthru_done;
++ }
++
++ fcport = NULL;
++ fclun = NULL;
++ port_found = lun_found = 0;
++ list_for_each(fcpl, &ha->fcports) {
++ fcport = list_entry(fcpl, fc_port_t, list);
++
++ if (memcmp(fcport->port_name,
++ pfc_scsi_pass->FCScsiAddr.DestAddr.WWPN, 8) != 0) {
++ continue;
++
++ }
++ port_found++;
++
++ list_for_each(fcll, &fcport->fcluns) {
++ fclun = list_entry(fcll, fc_lun_t, list);
++
++ if (fclun->lun == pfc_scsi_pass->FCScsiAddr.Lun) {
++ /* Found the right LUN */
++ lun_found++;
++ break;
++ }
++ }
++ break;
++ }
++
++ if (!port_found) {
++ pext->Status = EXT_STATUS_DEV_NOT_FOUND;
++ DEBUG9_10(printk("%s(%ld): inst=%ld FC AddrFormat - DID NOT "
++ "FIND Port matching WWPN.\n",
++ __func__, ha->host_no, ha->instance);)
++ atomic_set(&sp->ref_count, 0);
++ add_to_free_queue (ha, sp);
++ goto fc_scsi_passthru_done;
++ }
++
++ /* v5.21b9 - use a temporary fclun */
++ if (!lun_found) {
++ fclun = &temp_fclun;
++ fclun->fcport = fcport;
++ fclun->lun = pfc_scsi_pass->FCScsiAddr.Lun;
++ fclun->flags = 0;
++ }
++
++ /* set target coordinates */
++ pfc_scsi_cmd->device->id = 0xff; /* not used. just put something there. */
++ pfc_scsi_cmd->device->lun = pfc_scsi_pass->FCScsiAddr.Lun;
++
++ DEBUG9(printk("%s(%ld): inst=%ld cmd for loopid=%04x L=%04x "
++ "WWPN=%02x%02x%02x%02x%02x%02x%02x%02x.\n",
++ __func__, ha->host_no, ha->instance, fclun->fcport->loop_id,
++ pfc_scsi_cmd->device->lun,
++ pfc_scsi_pass->FCScsiAddr.DestAddr.WWPN[0],
++ pfc_scsi_pass->FCScsiAddr.DestAddr.WWPN[1],
++ pfc_scsi_pass->FCScsiAddr.DestAddr.WWPN[2],
++ pfc_scsi_pass->FCScsiAddr.DestAddr.WWPN[3],
++ pfc_scsi_pass->FCScsiAddr.DestAddr.WWPN[4],
++ pfc_scsi_pass->FCScsiAddr.DestAddr.WWPN[5],
++ pfc_scsi_pass->FCScsiAddr.DestAddr.WWPN[6],
++ pfc_scsi_pass->FCScsiAddr.DestAddr.WWPN[7]);)
++
++ if (pfc_scsi_pass->CdbLength == 6) {
++ sp->cmd_length = 6;
++ pfc_scsi_cmd->cmd_len = 6;
++
++ } else if (pfc_scsi_pass->CdbLength == 0x0A) {
++ sp->cmd_length = 0x0A;
++ pfc_scsi_cmd->cmd_len = 0x0A;
++
++ } else if (pfc_scsi_pass->CdbLength == 0x0C) {
++ sp->cmd_length = 0x0C;
++ pfc_scsi_cmd->cmd_len = 0x0C;
++
++ } else if (pfc_scsi_pass->CdbLength == 0x10) {
++ sp->cmd_length = 0x10;
++ pfc_scsi_cmd->cmd_len = 0x10;
++ } else {
++ printk(KERN_WARNING
++ "qla2x00_ioctl: FC_SCSI_PASSTHRU Unknown Cdb Length=%x.\n",
++ pfc_scsi_pass->CdbLength);
++ pext->Status = EXT_STATUS_INVALID_PARAM;
++ atomic_set(&sp->ref_count, 0);
++ add_to_free_queue (ha, sp);
++
++ goto fc_scsi_passthru_done;
++ }
++
++ memcpy(pfc_scsi_cmd->data_cmnd, pfc_scsi_pass->Cdb,
++ pfc_scsi_cmd->cmd_len);
++ memcpy(pfc_scsi_cmd->cmnd, pfc_scsi_pass->Cdb,
++ pfc_scsi_cmd->cmd_len);
++
++ DEBUG9(printk("%s Dump of cdb buffer:\n", __func__);)
++ DEBUG9(qla2x00_dump_buffer((uint8_t *)&pfc_scsi_cmd->data_cmnd[0], 16);)
++
++ pfc_scsi_cmd->device->host = ha->host;
++ sp->ha = ha;
++ sp->cmd = pfc_scsi_cmd;
++ sp->flags = SRB_IOCTL;
++
++ /* set local fc_scsi_cmd's sp pointer to sp */
++ CMD_SP(pfc_scsi_cmd) = (void *) sp;
++
++ /* mark this as a special delivery and collection command */
++ pfc_scsi_cmd->flags = 0;
++ pfc_scsi_cmd->scsi_done = qla2x00_scsi_pt_done;
++
++ pfc_scsi_cmd->device = pfc_scsi_device;
++ pfc_scsi_cmd->device->tagged_queue = 0;
++ pfc_scsi_cmd->use_sg = 0; /* no ScatterGather */
++ pfc_scsi_cmd->request_bufflen = pext->ResponseLen;
++ pfc_scsi_cmd->request_buffer = ha->ioctl_mem;
++ pfc_scsi_cmd->timeout_per_command = QLA_PT_CMD_TOV * HZ;
++
++ if (pfc_scsi_pass->Direction == EXT_DEF_SCSI_PASSTHRU_DATA_OUT) {
++ /* sending user data from pext->ResponseAdr to device */
++ ret = verify_area(VERIFY_READ, (void *)pext->ResponseAdr,
++ pext->ResponseLen);
++ if (ret) {
++ pext->Status = EXT_STATUS_COPY_ERR;
++ DEBUG9_10(printk("%s(%ld): inst=%ld ERROR verify read "
++ "ResponseAdr.\n",
++ __func__, ha->host_no, ha->instance);)
++ atomic_set(&sp->ref_count, 0);
++ add_to_free_queue (ha, sp);
++
++ goto fc_scsi_passthru_done;
++ }
++
++ pfc_scsi_cmd->sc_data_direction = SCSI_DATA_WRITE;
++ usr_temp = (uint8_t *)pext->ResponseAdr;
++ kernel_tmp = (uint8_t *)ha->ioctl_mem;
++ ret = copy_from_user(kernel_tmp, usr_temp, pext->ResponseLen);
++ if (ret) {
++ pext->Status = EXT_STATUS_COPY_ERR;
++ DEBUG9_10(printk("%s(%ld): inst=%ld ERROR copy "
++ "failed(%d) on rsp buf.\n",
++ __func__, ha->host_no, ha->instance, ret);)
++ atomic_set(&sp->ref_count, 0);
++ add_to_free_queue (ha, sp);
++
++ goto fc_scsi_passthru_done;
++ }
++ } else {
++ pfc_scsi_cmd->sc_data_direction = SCSI_DATA_READ;
++ }
++
++ tq = ha->ioctl->ioctl_tq;
++ lq = ha->ioctl->ioctl_lq;
++
++ if (fclun && tq && lq ) {
++ tq->olun[fclun->lun] = lq;
++ tq->ha = ha;
++
++ lq->fclun = fclun;
++ fcport = fclun->fcport;
++
++ sp->lun_queue = lq;
++ sp->tgt_queue = tq;
++ sp->fclun = fclun;
++ }
++
++ DEBUG9({
++ b = SCSI_BUS_32(pfc_scsi_cmd);
++ t = SCSI_TCN_32(pfc_scsi_cmd);
++ l = SCSI_LUN_32(pfc_scsi_cmd);
++ })
++ DEBUG9(printk("%s(%ld): ha instance=%ld tq=%p lq=%p "
++ "fclun=%p.\n",
++ __func__, ha->host_no, ha->instance, tq, lq, fclun);)
++ DEBUG9(printk("\tCDB=%02x %02x %02x %02x; b=%x t=%x l=%x.\n",
++ pfc_scsi_cmd->cmnd[0], pfc_scsi_cmd->cmnd[1], pfc_scsi_cmd->cmnd[2],
++ pfc_scsi_cmd->cmnd[3], b, t, l);)
++
++ /*
++ * Check the status of the port
++ */
++ if (qla2x00_check_port_status(ha, fcport) != QL_STATUS_SUCCESS) {
++ pext->Status = EXT_STATUS_DEV_NOT_FOUND;
++ atomic_set(&sp->ref_count, 0);
++ add_to_free_queue (ha, sp);
++ goto fc_scsi_passthru_done;
++ }
++
++ /* set flag to indicate IOCTL SCSI PassThru in progress */
++ ha->ioctl->SCSIPT_InProgress = 1;
++ ha->ioctl->ioctl_tov = (int)QLA_PT_CMD_DRV_TOV;
++
++ /* prepare for receiving completion. */
++ qla2x00_ioctl_sem_init(ha);
++ CMD_COMPL_STATUS(pfc_scsi_cmd) = (int) IOCTL_INVALID_STATUS;
++
++ /* send command to adapter */
++ DEBUG9(printk("%s(%ld): inst=%ld sending command.\n",
++ __func__, ha->host_no, ha->instance);)
++
++ add_to_pending_queue(ha, sp);
++
++ qla2x00_next(ha);
++
++ ha->ioctl->cmpl_timer.expires = jiffies + ha->ioctl->ioctl_tov * HZ;
++ add_timer(&ha->ioctl->cmpl_timer);
++
++ down(&ha->ioctl->cmpl_sem);
++
++ del_timer(&ha->ioctl->cmpl_timer);
++
++ if (ha->ioctl->SCSIPT_InProgress == 1) {
++
++ printk(KERN_WARNING
++ "qla2x00: scsi%ld ERROR passthru command timeout.\n",
++ ha->host_no);
++
++ pext->Status = EXT_STATUS_DEV_NOT_FOUND;
++ atomic_set(&sp->ref_count, 0);
++ add_to_free_queue (ha, sp);
++ goto fc_scsi_passthru_done;
++ }
++
++ if (CMD_COMPL_STATUS(pfc_scsi_cmd) == (int)IOCTL_INVALID_STATUS) {
++
++ DEBUG9(printk("%s(%ld): inst=%ld ERROR. cmd not completed.\n",
++ __func__, ha->host_no, ha->instance);)
++
++ pext->Status = EXT_STATUS_ERR;
++ atomic_set(&sp->ref_count, 0);
++ add_to_free_queue (ha, sp);
++ goto fc_scsi_passthru_done;
++ }
++
++ switch (CMD_COMPL_STATUS(pfc_scsi_cmd)) {
++ case CS_INCOMPLETE:
++ case CS_ABORTED:
++ case CS_PORT_UNAVAILABLE:
++ case CS_PORT_LOGGED_OUT:
++ case CS_PORT_CONFIG_CHG:
++ case CS_PORT_BUSY:
++ DEBUG10(printk("%s(%ld): inst=%ld cs err = %x.\n",
++ __func__, ha->host_no, ha->instance,
++ CMD_COMPL_STATUS(pfc_scsi_cmd));)
++ pext->Status = EXT_STATUS_BUSY;
++ break;
++ }
++
++ if ((CMD_COMPL_STATUS(pfc_scsi_cmd) == CS_DATA_UNDERRUN) ||
++ (CMD_SCSI_STATUS(pfc_scsi_cmd) != 0)) {
++
++ /* have done the post function */
++ pext->Status = EXT_STATUS_SCSI_STATUS;
++ /* The SDMAPI is only concerned with the low-order byte */
++ pext->DetailStatus = CMD_SCSI_STATUS(pfc_scsi_cmd) & 0xff;
++
++ DEBUG9_10(printk("%s(%ld): inst=%ld data underrun or scsi err. "
++ "host status =0x%x, scsi status = 0x%x.\n",
++ __func__, ha->host_no, ha->instance,
++ CMD_COMPL_STATUS(pfc_scsi_cmd),
++ CMD_SCSI_STATUS(pfc_scsi_cmd));)
++
++ } else if (CMD_COMPL_STATUS(pfc_scsi_cmd) != 0) {
++ DEBUG9_10(printk("%s(%ld): inst=%ld cs err=%x.\n",
++ __func__, ha->host_no, ha->instance,
++ CMD_COMPL_STATUS(pfc_scsi_cmd));)
++ pext->Status = EXT_STATUS_ERR;
++
++ goto fc_scsi_passthru_done;
++ }
++
++ /* Process completed command */
++ DEBUG9(printk("%s(%ld): inst=%ld done. host status=0x%x, "
++ "scsi status=0x%x.\n",
++ __func__, ha->host_no, ha->instance, CMD_COMPL_STATUS(pfc_scsi_cmd),
++ CMD_SCSI_STATUS(pfc_scsi_cmd));)
++
++ /* copy up structure to make sense data available to user */
++ pfc_scsi_pass->SenseLength = CMD_ACTUAL_SNSLEN(pfc_scsi_cmd);
++ if (CMD_ACTUAL_SNSLEN(pfc_scsi_cmd)) {
++ DEBUG9_10(printk("%s(%ld): inst=%ld sense[0]=%x sense[2]=%x.\n",
++ __func__, ha->host_no, ha->instance,
++ pfc_scsi_cmd->sense_buffer[0],
++ pfc_scsi_cmd->sense_buffer[2]);)
++
++ for (i = 0; i < CMD_ACTUAL_SNSLEN(pfc_scsi_cmd); i++) {
++ pfc_scsi_pass->SenseData[i] =
++ pfc_scsi_cmd->sense_buffer[i];
++ }
++
++ ret = verify_area(VERIFY_WRITE, (void *)pext->RequestAdr,
++ sizeof(EXT_FC_SCSI_PASSTHRU));
++ if (ret) {
++ pext->Status = EXT_STATUS_COPY_ERR;
++ DEBUG9_10(printk("%s(%ld): inst=%ld ERROR verify WRITE "
++ "RequestAdr.\n",
++ __func__, ha->host_no, ha->instance);)
++ goto fc_scsi_passthru_done;
++ }
++
++ usr_temp = (uint8_t *)pext->RequestAdr;
++ kernel_tmp = (uint8_t *)pfc_scsi_pass;
++ ret = copy_to_user(usr_temp, kernel_tmp,
++ sizeof(EXT_FC_SCSI_PASSTHRU));
++ if (ret) {
++ pext->Status = EXT_STATUS_COPY_ERR;
++ DEBUG9_10(printk("%s(%ld): inst=%ld ERROR copy sense "
++ "buffer.\n",
++ __func__, ha->host_no, ha->instance);)
++ goto fc_scsi_passthru_done;
++ }
++ }
++
++ scsi_direction = pfc_scsi_pass->Direction;
++
++ if (scsi_direction == EXT_DEF_SCSI_PASSTHRU_DATA_IN) {
++
++ DEBUG9(printk("%s(%ld): inst=%ld copying data.\n",
++ __func__, ha->host_no, ha->instance);)
++
++ /* getting device data and putting in pext->ResponseAdr */
++ ret = verify_area(VERIFY_WRITE, (void *)pext->ResponseAdr,
++ pext->ResponseLen);
++ if (ret) {
++ pext->Status = EXT_STATUS_COPY_ERR;
++
++ DEBUG9_10(printk("%s(%ld): inst=%ld ERROR verify write "
++ "ResponseAdr.\n",
++ __func__, ha->host_no, ha->instance);)
++
++ goto fc_scsi_passthru_done;
++ }
++
++ /* now copy up the READ data to user */
++ if ((CMD_COMPL_STATUS(pfc_scsi_cmd) == CS_DATA_UNDERRUN) &&
++ (CMD_RESID_LEN(pfc_scsi_cmd))) {
++
++ transfer_len = pext->ResponseLen -
++ CMD_RESID_LEN(pfc_scsi_cmd);
++
++ pext->ResponseLen = transfer_len;
++ } else {
++ transfer_len = pext->ResponseLen;
++ }
++
++ usr_temp = (uint8_t *)pext->ResponseAdr;
++ kernel_tmp = (uint8_t *)ha->ioctl_mem;
++ ret = copy_to_user(usr_temp, kernel_tmp, transfer_len);
++ if (ret) {
++ pext->Status = EXT_STATUS_COPY_ERR;
++ DEBUG9_10(printk(
++ "%s(%ld): inst=%ld ERROR copy rsp buf\n",
++ __func__, ha->host_no, ha->instance);)
++ goto fc_scsi_passthru_done;
++ }
++ }
++
++ DEBUG9(printk("%s(%ld): inst=%ld exiting.\n",
++ __func__, ha->host_no, ha->instance);)
++
++fc_scsi_passthru_done:
++
++ qla2x00_free_ioctl_scrap_mem(ha);
++ return (ret);
++}
++
++/*
++ * qla2x00_sc_scsi3_passthru
++ * Handles EXT_SC_SCSI3_PASSTHRU subcommand.
++ *
++ * Input:
++ * ha = adapter state pointer.
++ * pext = EXT_IOCTL structure pointer.
++ * mode = not used.
++ *
++ * Returns:
++ * 0 = success
++ * others = errno value
++ *
++ * Context:
++ * Kernel context.
++ */
++static int
++qla2x00_sc_scsi3_passthru(scsi_qla_host_t *ha, EXT_IOCTL *pext, int mode)
++{
++#define MAX_SCSI3_CDB_LEN 16
++
++ int ret = 0;
++ int found;
++ fc_lun_t temp_fclun;
++ fc_lun_t *fclun = NULL;
++ struct list_head *fcpl;
++ fc_port_t *fcport;
++ os_lun_t *lq;
++ os_tgt_t *tq;
++ srb_t *sp = NULL;
++ uint8_t *usr_temp, *kernel_tmp;
++ uint32_t transfer_len;
++ uint32_t i, b, t;
++ uint32_t scsi_direction;
++
++ EXT_FC_SCSI_PASSTHRU *pfc_scsi3_pass;
++
++ Scsi_Cmnd *pscsi3_cmd;
++ Scsi_Device *pscsi3_device;
++
++
++ DEBUG9(printk("%s(%ld): inst=%ld entered.\n",
++ __func__, ha->host_no, ha->instance);)
++
++ if ((sp = qla2x00_get_new_sp(ha)) == NULL) {
++
++ DEBUG9_10(printk("%s(%ld): inst=%ld ERROR cannot alloc sp.\n",
++ __func__, ha->host_no, ha->instance);)
++
++ pext->Status = EXT_STATUS_NO_MEMORY;
++ return (ret);
++ }
++
++ if (qla2x00_get_ioctl_scrap_mem(ha, (void **)&pfc_scsi3_pass,
++ sizeof(EXT_FC_SCSI_PASSTHRU))) {
++ /* not enough memory */
++ pext->Status = EXT_STATUS_NO_MEMORY;
++ DEBUG9_10(printk("%s(%ld): inst=%ld scrap not big enough. "
++ "size requested=%d.\n",
++ __func__, ha->host_no, ha->instance,
++ sizeof(EXT_FC_SCSI_PASSTHRU));)
++ return (ret);
++ }
++
++ if (qla2x00_get_ioctl_scrap_mem(ha, (void **)&pscsi3_cmd,
++ sizeof(Scsi_Cmnd))) {
++ /* not enough memory */
++ pext->Status = EXT_STATUS_NO_MEMORY;
++ DEBUG9_10(printk("%s(%ld): inst=%ld scrap not big enough. "
++ "size requested=%d.\n",
++ __func__, ha->host_no, ha->instance,
++ sizeof(Scsi_Cmnd));)
++ goto scsi3_passthru_done;
++ }
++
++ if (qla2x00_get_ioctl_scrap_mem(ha, (void **)&pscsi3_device,
++ sizeof(Scsi_Device))) {
++ /* not enough memory */
++ pext->Status = EXT_STATUS_NO_MEMORY;
++ DEBUG9_10(printk("%s(%ld): inst=%ld scrap not big enough. "
++ "size requested=%d.\n",
++ __func__, ha->host_no, ha->instance,
++ sizeof(Scsi_Device));)
++ goto scsi3_passthru_done;
++ }
++
++ /* clear ioctl_mem to be used */
++ memset(ha->ioctl_mem, 0, ha->ioctl_mem_size);
++
++ ret = verify_area(VERIFY_READ, (void *)pext->RequestAdr,
++ sizeof(EXT_FC_SCSI_PASSTHRU));
++ if (ret) {
++ pext->Status = EXT_STATUS_COPY_ERR;
++ DEBUG9_10(printk("%s(%ld): inst=%ld ERROR verify READ "
++ "req buf.\n", __func__, ha->host_no, ha->instance);)
++ atomic_set(&sp->ref_count, 0);
++ add_to_free_queue (ha, sp);
++ goto scsi3_passthru_done;
++ }
++
++ if (pext->ResponseLen > ha->ioctl_mem_size) {
++ if (qla2x00_get_new_ioctl_dma_mem(ha, pext->ResponseLen) !=
++ QL_STATUS_SUCCESS) {
++
++ DEBUG9_10(printk("%s(%ld): inst=%ld ERROR cannot "
++ "alloc requested DMA buffer size=%x.\n",
++ __func__, ha->host_no, ha->instance,
++ pext->ResponseLen);)
++
++ pext->Status = EXT_STATUS_NO_MEMORY;
++ atomic_set(&sp->ref_count, 0);
++ add_to_free_queue (ha, sp);
++ goto scsi3_passthru_done;
++ }
++ }
++
++ /* Copy request buffer */
++ usr_temp = (uint8_t *)pext->RequestAdr;
++ kernel_tmp = (uint8_t *)pfc_scsi3_pass;
++ ret = copy_from_user(kernel_tmp, usr_temp,
++ sizeof(EXT_FC_SCSI_PASSTHRU));
++ if (ret) {
++ pext->Status = EXT_STATUS_COPY_ERR;
++ DEBUG9_10(printk(
++ "%s(%ld): inst=%ld ERROR copy req buf ret=%d\n",
++ __func__, ha->host_no, ha->instance, ret);)
++ atomic_set(&sp->ref_count, 0);
++ add_to_free_queue (ha, sp);
++ goto scsi3_passthru_done;
++ }
++
++ if (pfc_scsi3_pass->FCScsiAddr.DestType != EXT_DEF_DESTTYPE_WWPN) {
++ pext->Status = EXT_STATUS_DEV_NOT_FOUND;
++ DEBUG9_10(printk("%s(%ld): inst=%ld ERROR - wrong Dest type.\n",
++ __func__, ha->host_no, ha->instance);)
++ ret = EXT_STATUS_ERR;
++ atomic_set(&sp->ref_count, 0);
++ add_to_free_queue (ha, sp);
++
++ goto scsi3_passthru_done;
++ }
++
++ /*
++ * For this ioctl command we always assume all 16 bytes are
++ * initialized.
++ */
++ if (pfc_scsi3_pass->CdbLength != MAX_SCSI3_CDB_LEN) {
++ pext->Status = EXT_STATUS_INVALID_PARAM;
++ DEBUG9_10(printk("%s(%ld): inst=%ld ERROR -wrong Cdb Len %d.\n",
++ __func__, ha->host_no, ha->instance,
++ pfc_scsi3_pass->CdbLength);)
++ atomic_set(&sp->ref_count, 0);
++ add_to_free_queue (ha, sp);
++ goto scsi3_passthru_done;
++ }
++
++ fcport = NULL;
++ found = 0;
++ list_for_each(fcpl, &ha->fcports) {
++ fcport = list_entry(fcpl, fc_port_t, list);
++
++ if (memcmp(fcport->port_name,
++ pfc_scsi3_pass->FCScsiAddr.DestAddr.WWPN, 8) == 0) {
++ found++;
++ break;
++ }
++ }
++ if (!found) {
++ pext->Status = EXT_STATUS_DEV_NOT_FOUND;
++
++ DEBUG9_10(printk("%s(%ld): inst=%ld DID NOT FIND Port for WWPN "
++ "%02x%02x%02x%02x%02x%02x%02x%02x.\n",
++ __func__, ha->host_no, ha->instance,
++ pfc_scsi3_pass->FCScsiAddr.DestAddr.WWPN[0],
++ pfc_scsi3_pass->FCScsiAddr.DestAddr.WWPN[1],
++ pfc_scsi3_pass->FCScsiAddr.DestAddr.WWPN[2],
++ pfc_scsi3_pass->FCScsiAddr.DestAddr.WWPN[3],
++ pfc_scsi3_pass->FCScsiAddr.DestAddr.WWPN[4],
++ pfc_scsi3_pass->FCScsiAddr.DestAddr.WWPN[5],
++ pfc_scsi3_pass->FCScsiAddr.DestAddr.WWPN[6],
++ pfc_scsi3_pass->FCScsiAddr.DestAddr.WWPN[7]);)
++
++ atomic_set(&sp->ref_count, 0);
++ add_to_free_queue (ha, sp);
++
++ goto scsi3_passthru_done;
++ }
++
++ /* Use a temporary fclun to send out the command. */
++ fclun = &temp_fclun;
++ fclun->fcport = fcport;
++ fclun->lun = pfc_scsi3_pass->FCScsiAddr.Lun;
++ fclun->flags = 0;
++
++ /* set target coordinates */
++ pscsi3_cmd->device->id = 0xff; /* not used. just put something there. */
++ pscsi3_cmd->device->lun = pfc_scsi3_pass->FCScsiAddr.Lun;
++
++ DEBUG9(printk("%s(%ld): inst=%ld cmd for loopid=%04x L=%04x "
++ "WWPN=%02x%02x%02x%02x%02x%02x%02x%02x.\n",
++ __func__, ha->host_no, ha->instance,
++ fclun->fcport->loop_id, pscsi3_cmd->device->lun,
++ pfc_scsi3_pass->FCScsiAddr.DestAddr.WWPN[0],
++ pfc_scsi3_pass->FCScsiAddr.DestAddr.WWPN[1],
++ pfc_scsi3_pass->FCScsiAddr.DestAddr.WWPN[2],
++ pfc_scsi3_pass->FCScsiAddr.DestAddr.WWPN[3],
++ pfc_scsi3_pass->FCScsiAddr.DestAddr.WWPN[4],
++ pfc_scsi3_pass->FCScsiAddr.DestAddr.WWPN[5],
++ pfc_scsi3_pass->FCScsiAddr.DestAddr.WWPN[6],
++ pfc_scsi3_pass->FCScsiAddr.DestAddr.WWPN[7]);)
++
++ sp->cmd_length = MAX_SCSI3_CDB_LEN;
++ pscsi3_cmd->cmd_len = MAX_SCSI3_CDB_LEN;
++
++ memcpy(pscsi3_cmd->data_cmnd, pfc_scsi3_pass->Cdb, pscsi3_cmd->cmd_len);
++ memcpy(pscsi3_cmd->cmnd, pfc_scsi3_pass->Cdb, pscsi3_cmd->cmd_len);
++
++ DEBUG9(printk("%s(%ld): inst=%ld cdb buffer dump:\n",
++ __func__, ha->host_no, ha->instance);)
++ DEBUG9(qla2x00_dump_buffer((uint8_t *)&pscsi3_cmd->data_cmnd[0], 16);)
++
++ pscsi3_cmd->device->host = ha->host;
++ sp->ha = ha;
++ sp->cmd = pscsi3_cmd;
++ sp->flags = SRB_IOCTL;
++
++ /* set local scsi3_cmd's sp pointer to sp */
++ CMD_SP(pscsi3_cmd) = (void *) sp;
++
++ /* mark this as a special delivery and collection command */
++ pscsi3_cmd->flags = 0;
++ pscsi3_cmd->scsi_done = qla2x00_scsi_pt_done;
++
++ pscsi3_cmd->device = pscsi3_device;
++ pscsi3_cmd->device->tagged_queue = 0;
++ pscsi3_cmd->use_sg = 0; /* no ScatterGather */
++ pscsi3_cmd->request_bufflen = pext->ResponseLen;
++ pscsi3_cmd->request_buffer = ha->ioctl_mem;
++ pscsi3_cmd->timeout_per_command = QLA_PT_CMD_TOV * HZ;
++
++ if (pfc_scsi3_pass->Direction == EXT_DEF_SCSI_PASSTHRU_DATA_OUT) {
++ /* sending user data from pext->ResponseAdr to device */
++ ret = verify_area(VERIFY_READ, (void *)pext->ResponseAdr,
++ pext->ResponseLen);
++ if (ret) {
++ pext->Status = EXT_STATUS_COPY_ERR;
++ DEBUG9_10(printk("%s(%ld): inst=%ld ERROR verify read "
++ "ResponseAdr.\n",
++ __func__, ha->host_no, ha->instance);)
++ atomic_set(&sp->ref_count, 0);
++ add_to_free_queue (ha, sp);
++ goto scsi3_passthru_done;
++ }
++
++ pscsi3_cmd->sc_data_direction = SCSI_DATA_WRITE;
++ usr_temp = (uint8_t *)pext->ResponseAdr;
++ kernel_tmp = (uint8_t *)ha->ioctl_mem;
++ ret = copy_from_user(kernel_tmp, usr_temp, pext->ResponseLen);
++ if (ret) {
++ pext->Status = EXT_STATUS_COPY_ERR;
++ DEBUG9_10(printk("%s(%ld): inst=%ld ERROR copy rsp buf "
++ "ret=%d.\n",
++ __func__, ha->host_no, ha->instance, ret);)
++ atomic_set(&sp->ref_count, 0);
++ add_to_free_queue (ha, sp);
++ goto scsi3_passthru_done;
++ }
++
++ } else {
++ pscsi3_cmd->sc_data_direction = SCSI_DATA_READ;
++ }
++
++ /* Use temporary LU and TGT queue */
++ tq = ha->ioctl->ioctl_tq;
++ lq = ha->ioctl->ioctl_lq;
++
++ b = SCSI_BUS_32(pscsi3_cmd);
++ t = SCSI_TCN_32(pscsi3_cmd);
++
++ DEBUG9(printk("%s(%ld): ha instance=%ld tq=%p lq=%p fclun=%p.\n",
++ __func__, ha->host_no, ha->instance,tq,lq,fclun); )
++ DEBUG9(printk("%s(%ld): CDB=%02x %02x %02x %02x; b=%x t=%x fclun=%x\n",
++ __func__, ha->host_no, pscsi3_cmd->cmnd[0], pscsi3_cmd->cmnd[1],
++ pscsi3_cmd->cmnd[2], pscsi3_cmd->cmnd[3], b, t,
++ SCSI_LUN_32(pscsi3_cmd));)
++
++ if (tq && lq) {
++ /*
++ * For now just save lq using the lower LUN byte value,
++ * even though this may not be the actual LUN number.
++ * Since we're only sending out passthru cmd one at a time,
++ * and only passthru is using FCP LUN format now, no need
++ * to change rest of driver just to decode the LUN.
++ */
++ tq->olun[fclun->lun & 0xff] = lq;
++
++ tq->ha = ha;
++ lq->fclun = fclun;
++ fcport = fclun->fcport;
++
++ sp->lun_queue = lq;
++ sp->tgt_queue = tq;
++ sp->fclun = fclun;
++ } else {
++ lq = NULL;
++ fcport = NULL;
++ }
++
++ /*
++ * Check the status of the port
++ */
++ if (qla2x00_check_port_status(ha, fcport) != QL_STATUS_SUCCESS) {
++
++ DEBUG9_10(printk("%s(%ld): inst=%ld port missing or loop down. "
++ "fcport=%p timer=%d state=%d dpc=%lx.\n",
++ __func__, ha->host_no, ha->instance, fcport,
++ atomic_read(&ha->loop_down_timer), ha->loop_state,
++ ha->dpc_flags);)
++
++ pext->Status = EXT_STATUS_DEV_NOT_FOUND;
++ atomic_set(&sp->ref_count, 0);
++ add_to_free_queue (ha, sp);
++ goto scsi3_passthru_done;
++ }
++
++ /* set flag to indicate IOCTL SCSI PassThru in progress */
++ ha->ioctl->SCSIPT_InProgress = 1;
++ ha->ioctl->ioctl_tov = (int)QLA_PT_CMD_DRV_TOV;
++
++ /* prepare for receiving completion. */
++ qla2x00_ioctl_sem_init(ha);
++ CMD_COMPL_STATUS(pscsi3_cmd) = (int) IOCTL_INVALID_STATUS;
++
++ /* send command to adapter */
++
++ /*add_to_cmd_queue(ha, lq, sp);*/
++ add_to_pending_queue(ha, sp);
++
++ /*qla2x00_next(ha, tq, lq);*/
++ qla2x00_next(ha);
++
++ ha->ioctl->cmpl_timer.expires = jiffies + ha->ioctl->ioctl_tov * HZ;
++ add_timer(&ha->ioctl->cmpl_timer);
++
++ down(&ha->ioctl->cmpl_sem);
++
++ del_timer(&ha->ioctl->cmpl_timer);
++
++ if (ha->ioctl->SCSIPT_InProgress == 1) {
++
++ printk(KERN_WARNING
++ "qla2x00: inst=%ld scsi%ld ERROR PT command timeout.\n",
++ ha->host_no, ha->instance);
++
++ pext->Status = EXT_STATUS_DEV_NOT_FOUND;
++ atomic_set(&sp->ref_count, 0);
++ add_to_free_queue (ha, sp);
++ goto scsi3_passthru_done;
++
++ }
++ if (CMD_COMPL_STATUS(pscsi3_cmd) == (int)IOCTL_INVALID_STATUS) {
++
++ DEBUG9(printk("%s(%ld): inst=%ld ERROR - cmd not completed.\n",
++ __func__, ha->host_no, ha->instance);)
++
++ pext->Status = EXT_STATUS_ERR;
++ atomic_set(&sp->ref_count, 0);
++ add_to_free_queue (ha, sp);
++ goto scsi3_passthru_done;
++ }
++
++ switch (CMD_COMPL_STATUS(pscsi3_cmd)) {
++ case CS_INCOMPLETE:
++ case CS_ABORTED:
++ case CS_PORT_UNAVAILABLE:
++ case CS_PORT_LOGGED_OUT:
++ case CS_PORT_CONFIG_CHG:
++ case CS_PORT_BUSY:
++ DEBUG10(printk("%s(%ld): inst=%ld cs err = %x.\n",
++ __func__, ha->host_no, ha->instance,
++ CMD_COMPL_STATUS(pscsi3_cmd));)
++ pext->Status = EXT_STATUS_BUSY;
++ break;
++ }
++
++ if ((CMD_COMPL_STATUS(pscsi3_cmd) == CS_DATA_UNDERRUN) ||
++ (CMD_SCSI_STATUS(pscsi3_cmd) != 0)) {
++
++ /* have done the post function */
++ pext->Status = EXT_STATUS_SCSI_STATUS;
++ pext->DetailStatus = CMD_SCSI_STATUS(pscsi3_cmd) & 0xff;
++
++ DEBUG9_10(printk("%s(%ld): inst=%ld data underrun or scsi err. "
++ "host status =0x%x, scsi status = 0x%x.\n",
++ __func__, ha->host_no, ha->instance,
++ CMD_COMPL_STATUS(pscsi3_cmd), CMD_SCSI_STATUS(pscsi3_cmd));)
++
++ } else if (CMD_COMPL_STATUS(pscsi3_cmd) != 0) {
++ DEBUG9_10(printk("%s(%ld): inst=%ld cs err = %x.\n",
++ __func__, ha->host_no, ha->instance,
++ CMD_COMPL_STATUS(pscsi3_cmd));)
++ pext->Status = EXT_STATUS_ERR;
++ goto scsi3_passthru_done;
++ }
++
++ /* Process completed command */
++ DEBUG9(printk("%s(%ld): inst=%ld done. host status=0x%x, "
++ "scsi status=0x%x.\n",
++ __func__, ha->host_no, ha->instance, CMD_COMPL_STATUS(pscsi3_cmd),
++ CMD_SCSI_STATUS(pscsi3_cmd));)
++
++ /* copy up structure to make sense data available to user */
++ pfc_scsi3_pass->SenseLength = CMD_ACTUAL_SNSLEN(pscsi3_cmd);
++ if (CMD_ACTUAL_SNSLEN(pscsi3_cmd)) {
++ DEBUG9_10(printk("%s(%ld): inst=%ld sense[0]=%x sense[2]=%x.\n",
++ __func__, ha->host_no, ha->instance,
++ pscsi3_cmd->sense_buffer[0],
++ pscsi3_cmd->sense_buffer[2]);)
++
++ for (i = 0; i < CMD_ACTUAL_SNSLEN(pscsi3_cmd); i++) {
++ pfc_scsi3_pass->SenseData[i] =
++ pscsi3_cmd->sense_buffer[i];
++ }
++
++ ret = verify_area(VERIFY_WRITE, (void *)pext->RequestAdr,
++ sizeof(EXT_FC_SCSI_PASSTHRU));
++ if (ret) {
++ pext->Status = EXT_STATUS_COPY_ERR;
++ DEBUG9_10(printk("%s(%ld): inst=%ld ERROR verify WRITE "
++ "RequestAdr.\n",
++ __func__, ha->host_no, ha->instance);)
++ goto scsi3_passthru_done;
++ }
++
++ usr_temp = (uint8_t *)pext->RequestAdr;
++ kernel_tmp = (uint8_t *)pfc_scsi3_pass;
++ ret = copy_to_user(usr_temp, kernel_tmp,
++ sizeof(EXT_FC_SCSI_PASSTHRU));
++ if (ret) {
++ pext->Status = EXT_STATUS_COPY_ERR;
++ DEBUG9_10(printk("%s(%ld): inst=%ld ERROR copy sense "
++ "buffer.\n",
++ __func__, ha->host_no, ha->instance);)
++ goto scsi3_passthru_done;
++ }
++ }
++
++ scsi_direction = pfc_scsi3_pass->Direction;
++
++ if (scsi_direction == EXT_DEF_SCSI_PASSTHRU_DATA_IN) {
++
++ DEBUG9(printk("%s(%ld): inst=%ld copying data.\n",
++ __func__, ha->host_no, ha->instance);)
++
++ /* getting device data and putting in pext->ResponseAdr */
++ ret = verify_area(VERIFY_WRITE, (void *)pext->ResponseAdr,
++ pext->ResponseLen);
++ if (ret) {
++ pext->Status = EXT_STATUS_COPY_ERR;
++
++ DEBUG9_10(printk("%s(%ld): inst=%ld ERROR verify write "
++ "ResponseAdr.\n",
++ __func__, ha->host_no, ha->instance);)
++
++ goto scsi3_passthru_done;
++ }
++
++ /* now copy up the READ data to user */
++ if ((CMD_COMPL_STATUS(pscsi3_cmd) == CS_DATA_UNDERRUN) &&
++ (CMD_RESID_LEN(pscsi3_cmd))) {
++
++ transfer_len = pext->ResponseLen -
++ CMD_RESID_LEN(pscsi3_cmd);
++
++ pext->ResponseLen = transfer_len;
++ } else {
++ transfer_len = pext->ResponseLen;
++ }
++
++ usr_temp = (uint8_t *)pext->ResponseAdr;
++ kernel_tmp = (uint8_t *)ha->ioctl_mem;
++ ret = copy_to_user(usr_temp, kernel_tmp, transfer_len);
++ if (ret) {
++ pext->Status = EXT_STATUS_COPY_ERR;
++ DEBUG9_10(printk(
++ "%s(%ld): inst=%ld ERROR copy rsp buf\n",
++ __func__, ha->host_no, ha->instance);)
++ goto scsi3_passthru_done;
++ }
++ }
++
++ DEBUG9(printk("%s(%ld): inst=%ld exiting.\n",
++ __func__, ha->host_no, ha->instance);)
++
++scsi3_passthru_done:
++
++ qla2x00_free_ioctl_scrap_mem(ha);
++ return (ret);
++}
++
++/*
++ * qla2x00_send_els_rnid
++ * IOCTL to send extended link service RNID command to a target.
++ *
++ * Input:
++ * ha = adapter state pointer.
++ * pext = User space CT arguments pointer.
++ * mode = flags.
++ *
++ * Returns:
++ * 0 = success
++ * others = errno value
++ *
++ * Context:
++ * Kernel context.
++ */
++static int
++qla2x00_send_els_rnid(scsi_qla_host_t *ha, EXT_IOCTL *pext, int mode)
++{
++#define TGT_DEV 1
++#define HOST_DEV 2
++
++ EXT_RNID_REQ *tmp_rnid;
++ int ret = 0;
++ uint8_t dev_found = 0;
++ uint16_t dev_loop_id = 0;
++ uint16_t mb[MAILBOX_REGISTER_COUNT];
++ uint32_t copy_len;
++ struct list_head *fcpl;
++ fc_port_t *fcport;
++ int found;
++ struct list_head *fcil;
++ fc_initiator_t *fcinitiator;
++
++ DEBUG9(printk("%s(%ld): inst=%ld entered.\n",
++ __func__, ha->host_no, ha->instance);)
++
++ if (ha->ioctl_mem_size < SEND_RNID_RSP_SIZE) {
++ if (qla2x00_get_new_ioctl_dma_mem(ha,
++ SEND_RNID_RSP_SIZE) != QL_STATUS_SUCCESS) {
++
++ DEBUG9_10(printk("%s(%ld): inst=%ld ERROR cannot alloc "
++ "DMA buffer. size=%x.\n",
++ __func__, ha->host_no, ha->instance,
++ SEND_RNID_RSP_SIZE);)
++
++ pext->Status = EXT_STATUS_NO_MEMORY;
++ return (ret);
++ }
++ }
++
++ if (pext->RequestLen != sizeof(EXT_RNID_REQ)) {
++ /* parameter error */
++ DEBUG9_10(printk("%s(%ld): inst=%ld invalid req length %d.\n",
++ __func__, ha->host_no, ha->instance, pext->RequestLen);)
++ pext->Status = EXT_STATUS_INVALID_PARAM;
++ return (ret);
++ }
++
++ ret = verify_area(VERIFY_READ, (void *)pext->RequestAdr,
++ pext->RequestLen);
++
++ if (ret != 0) {
++ pext->Status = EXT_STATUS_COPY_ERR;
++ DEBUG9_10(printk(
++ "%s(%ld): inst=%ld req buf verify READ FAILED\n",
++ __func__, ha->host_no, ha->instance);)
++ return (ret);
++ }
++
++ DEBUG9(printk("%s(%ld): inst=%ld req buf verified. Copying req data.\n",
++ __func__, ha->host_no, ha->instance);)
++
++ if (qla2x00_get_ioctl_scrap_mem(ha, (void **)&tmp_rnid,
++ sizeof(EXT_RNID_REQ))) {
++ /* not enough memory */
++ pext->Status = EXT_STATUS_NO_MEMORY;
++ DEBUG9_10(printk("%s(%ld): inst=%ld scrap not big enough. "
++ "size requested=%d.\n",
++ __func__, ha->host_no, ha->instance,
++ sizeof(EXT_RNID_REQ));)
++ return (ret);
++ }
++
++ ret = copy_from_user(tmp_rnid, pext->RequestAdr, pext->RequestLen);
++ if (ret) {
++ pext->Status = EXT_STATUS_COPY_ERR;
++ DEBUG9_10(printk(
++ "%s(%ld): inst=%ld ERROR copy req buf ret=%d\n",
++ __func__, ha->host_no, ha->instance, ret);)
++ qla2x00_free_ioctl_scrap_mem(ha);
++ return (ret);
++ }
++
++ /* Find loop ID of the device */
++ fcinitiator = NULL;
++ switch (tmp_rnid->Addr.Type) {
++ case EXT_DEF_TYPE_WWNN:
++
++ DEBUG9(printk("%s(%ld): inst=%ld got node name.\n",
++ __func__, ha->host_no, ha->instance);)
++
++ fcport = NULL;
++ list_for_each(fcpl, &ha->fcports) {
++ fcport = list_entry(fcpl, fc_port_t, list);
++
++ /* if removed or missing */
++ if (atomic_read(&fcport->state) == FC_ONLINE &&
++ memcmp((void *)tmp_rnid->Addr.FcAddr.WWNN,
++ (void *)fcport->node_name,
++ EXT_DEF_WWN_NAME_SIZE) == 0) {
++ break;
++ }
++ }
++ if (fcport != NULL) {
++ DEBUG9(printk("%s(%ld): inst=%ld found tgt dev; "
++ "loop_id=%x.\n",
++ __func__, ha->host_no, ha->instance,
++ fcport->loop_id);)
++
++ dev_found = TGT_DEV;
++ dev_loop_id = fcport->loop_id;
++ break;
++ }
++
++ found = 0;
++ fcinitiator = NULL;
++ list_for_each(fcil, &ha->fcinitiators) {
++ fcinitiator = list_entry(fcil, fc_initiator_t, list);
++
++ if (memcmp(tmp_rnid->Addr.FcAddr.WWNN,
++ fcinitiator->node_name,
++ EXT_DEF_WWN_NAME_SIZE) == 0 &&
++ fcinitiator->d_id.b24 != 0) {
++
++ found++;
++ break;
++ }
++ }
++ if (found) {
++ DEBUG9(printk("%s(%ld): inst=%ld found host device; "
++ "loop_id=%x.\n",
++ __func__, ha->host_no, ha->instance,
++ fcinitiator->loop_id);)
++
++ dev_found = HOST_DEV;
++ dev_loop_id = fcinitiator->loop_id;
++ break;
++ }
++
++ break;
++
++ case EXT_DEF_TYPE_WWPN:
++ DEBUG9(printk("%s(%ld): inst=%ld got port name.\n",
++ __func__, ha->host_no, ha->instance);)
++
++ fcport = NULL;
++ list_for_each(fcpl, &ha->fcports) {
++ fcport = list_entry(fcpl, fc_port_t, list);
++
++ /* if removed or missing */
++ if (atomic_read(&fcport->state) == FC_ONLINE &&
++ memcmp((void *)tmp_rnid->Addr.FcAddr.WWPN,
++ (void *)fcport->port_name,
++ EXT_DEF_WWN_NAME_SIZE) == 0) {
++ break;
++ }
++ }
++ if (fcport != NULL) {
++ DEBUG9(printk("%s(%ld): inst=%ld found tgt dev; "
++ "loop_id=%x.\n",
++ __func__, ha->host_no, ha->instance,
++ fcport->loop_id);)
++
++ dev_found = TGT_DEV; /* target device */
++ dev_loop_id = fcport->loop_id;
++ break;
++ }
++
++ found = 0;
++ fcinitiator = NULL;
++ list_for_each(fcil, &ha->fcinitiators) {
++ fcinitiator = list_entry(fcil, fc_initiator_t, list);
++
++ if (memcmp(tmp_rnid->Addr.FcAddr.WWPN,
++ fcinitiator->port_name,
++ EXT_DEF_WWN_NAME_SIZE) == 0 &&
++ fcinitiator->d_id.b24 != 0) {
++
++ found++;
++ break;
++ }
++ }
++ if (found) {
++ DEBUG9(printk("%s(%ld): inst=%ld found host device; "
++ "loop_id=%x.\n",
++ __func__, ha->host_no, ha->instance,
++ fcinitiator->loop_id);)
++
++ dev_found = HOST_DEV;
++ dev_loop_id = fcinitiator->loop_id;
++ break;
++ }
++
++ break;
++
++ case EXT_DEF_TYPE_PORTID:
++ DEBUG9(printk("%s(%ld): inst=%ld got port ID.\n",
++ __func__, ha->host_no, ha->instance);)
++
++ /* PORTID bytes entered must already be big endian */
++ fcport = NULL;
++ list_for_each(fcpl, &ha->fcports) {
++ fcport = list_entry(fcpl, fc_port_t, list);
++
++ /* if removed or missing */
++ if (atomic_read(&fcport->state) == FC_ONLINE &&
++ memcmp((void *)&tmp_rnid->Addr.FcAddr.Id[1],
++ (void *)(fcport->d_id.r.d_id),
++ EXT_DEF_PORTID_SIZE_ACTUAL) == 0) {
++ break;
++ }
++ }
++ if (fcport != NULL) {
++ DEBUG9(printk("%s(%ld): inst=%ld found tgt dev; "
++ "loop_id=%x.\n",
++ __func__, ha->host_no, ha->instance,
++ fcport->loop_id);)
++
++ dev_found = TGT_DEV; /* target device */
++ dev_loop_id = fcport->loop_id;
++ break;
++ }
++
++ found = 0;
++ fcinitiator = NULL;
++ list_for_each(fcil, &ha->fcinitiators) {
++ fcinitiator = list_entry(fcil, fc_initiator_t, list);
++
++ if (memcmp(&tmp_rnid->Addr.FcAddr.Id[1],
++ &fcinitiator->d_id,
++ EXT_DEF_PORTID_SIZE_ACTUAL) == 0) {
++
++ found++;
++ break;
++ }
++ }
++ if (found) {
++ DEBUG9(printk("%s(%ld): inst=%ld found host device; "
++ "loop_id=%x.\n",
++ __func__, ha->host_no, ha->instance,
++ fcinitiator->loop_id);)
++
++ dev_found = HOST_DEV;
++ dev_loop_id = fcinitiator->loop_id;
++ break;
++ }
++
++ break;
++ default:
++ /* parameter error */
++ pext->Status = EXT_STATUS_INVALID_PARAM;
++ DEBUG9_10(printk("%s(%ld): inst=%ld invalid addressing type.\n",
++ __func__, ha->host_no, ha->instance);)
++ qla2x00_free_ioctl_scrap_mem(ha);
++ return (ret);
++ }
++
++ if (!dev_found ||
++ (dev_found == TGT_DEV && dev_loop_id > LAST_SNS_LOOP_ID)) {
++ /* No matching device or the target device is not
++ * configured; just return error.
++ */
++ pext->Status = EXT_STATUS_DEV_NOT_FOUND;
++ DEBUG9_10(printk(
++ "%s(%ld): inst=%ld device not found. dev_found=%d "
++ "dev_loop_id=%x.\n",
++ __func__, ha->host_no, ha->instance, dev_found,
++ dev_loop_id);)
++ qla2x00_free_ioctl_scrap_mem(ha);
++ return (ret);
++ }
++
++ /* check on loop down */
++ if (ha->loop_state != LOOP_READY ||
++ test_bit(CFG_ACTIVE, &ha->cfg_flags) ||
++ (test_bit(ABORT_ISP_ACTIVE, &ha->dpc_flags)) ||
++ ABORTS_ACTIVE || ha->dpc_active) {
++
++ pext->Status = EXT_STATUS_BUSY;
++ DEBUG9_10(printk("%s(%ld): inst=%ld loop not ready.\n",
++ __func__, ha->host_no, ha->instance);)
++
++ qla2x00_free_ioctl_scrap_mem(ha);
++ return (ret);
++ }
++
++ /* Check whether we need to login first. */
++ if (dev_found == HOST_DEV && dev_loop_id > LAST_SNS_LOOP_ID) {
++ /*
++ * Search for a usable loop ID before try to login to it.
++ */
++ if ((dev_loop_id &= ~PORT_LOST_ID) > LAST_SNS_LOOP_ID) {
++ /* Just start searching from first possible ID. */
++ dev_loop_id = ha->min_external_loopid;
++ }
++ for (;;) {
++ if (ha->fabricid[dev_loop_id].in_use == TRUE) {
++ dev_loop_id++;
++ } else {
++ ha->fabricid[dev_loop_id].in_use = TRUE;
++ break;
++ }
++ }
++
++ DEBUG9(printk("%s(%ld): inst=%ld try relogin to host dev; "
++ "dev_loop_id=%x.\n",
++ __func__, ha->host_no, ha->instance, dev_loop_id);)
++
++ for (;;) {
++ if (dev_loop_id > LAST_SNS_LOOP_ID) {
++ /* error */
++ DEBUG10(printk("%s(%ld): inst=%ld "
++ "no valid loop_id for login.\n",
++ __func__, ha->host_no, ha->instance);)
++
++ break;
++ }
++
++ qla2x00_login_fabric(ha,
++ dev_loop_id,
++ fcinitiator->d_id.b.domain,
++ fcinitiator->d_id.b.area,
++ fcinitiator->d_id.b.al_pa,
++ &mb[0], 0);
++
++ if (mb[0] != MBS_CMD_CMP &&
++ mb[0] != MBS_PORT_ID_IN_USE &&
++ mb[0] != MBS_LOOP_ID_IN_USE) {
++
++ DEBUG10(printk("%s(%ld): inst=%ld "
++ "ERROR login mb[0]=%x mb[1]=%x.\n",
++ __func__, ha->host_no, ha->instance,
++ mb[0], mb[1]);)
++ break;
++ }
++
++ if (mb[0] == MBS_CMD_CMP) {
++ DEBUG9(printk("%s(%ld): inst=%ld host login "
++ "success; loop_id=%x.\n",
++ __func__, ha->host_no, ha->instance,
++ dev_loop_id);)
++
++ fcinitiator->loop_id = dev_loop_id;
++ break;
++ } else if (mb[0] == MBS_PORT_ID_IN_USE) {
++ ha->fabricid[dev_loop_id].in_use = FALSE;
++ dev_loop_id = mb[1];
++
++ DEBUG9(printk("%s(%ld): inst=%ld "
++ "port %02x%02x%02x using loop id=0x%04x.\n",
++ __func__, ha->host_no, ha->instance,
++ fcinitiator->d_id.b.domain,
++ fcinitiator->d_id.b.area,
++ fcinitiator->d_id.b.al_pa,
++ dev_loop_id);)
++
++ if (dev_loop_id <= LAST_SNS_LOOP_ID)
++ ha->fabricid[dev_loop_id].in_use = TRUE;
++ else
++ /* Error */
++ break;
++
++ } else if (mb[0] == MBS_LOOP_ID_IN_USE) {
++ /* Search for another usable loop_id */
++ dev_loop_id++;
++ while (ha->fabricid[dev_loop_id].in_use) {
++ if (dev_loop_id++ > LAST_SNS_LOOP_ID) {
++ /* Error */
++ break;
++ }
++ }
++
++ if (dev_loop_id <= LAST_SNS_LOOP_ID) {
++ DEBUG9(printk(
++ "%s(%ld): inst=%ld previous loop "
++ "id in use. Retry with 0x%04x.\n",
++ __func__, ha->host_no, ha->instance,
++ dev_loop_id);)
++
++ ha->fabricid[dev_loop_id].in_use = TRUE;
++ } else {
++ /* Error */
++ break;
++ }
++ }
++ }
++
++ if (mb[0] != MBS_CMD_CMP) {
++ pext->Status = EXT_STATUS_ERR;
++ DEBUG9_10(printk( "%s(%ld): inst=%ld login failed.\n",
++ __func__, ha->host_no, ha->instance);)
++
++ qla2x00_free_ioctl_scrap_mem(ha);
++ return (ret);
++ }
++ }
++
++ /* Send command */
++ DEBUG9(printk("%s(%ld): inst=%ld sending rnid cmd.\n",
++ __func__, ha->host_no, ha->instance);)
++
++ ret = qla2x00_send_rnid_mbx(ha, dev_loop_id,
++ (uint8_t)tmp_rnid->DataFormat, ha->ioctl_mem_phys,
++ SEND_RNID_RSP_SIZE, &mb[0]);
++
++ if (ret != QLA2X00_SUCCESS) {
++ /* error */
++ pext->Status = EXT_STATUS_ERR;
++
++ DEBUG9_10(printk("%s(%ld): inst=%ld FAILED. rval = %x.\n",
++ __func__, ha->host_no, ha->instance, mb[0]);)
++ qla2x00_free_ioctl_scrap_mem(ha);
++ return (ret);
++ }
++
++ DEBUG9(printk("%s(%ld): inst=%ld rnid cmd sent ok.\n",
++ __func__, ha->host_no, ha->instance);)
++
++ /* Copy the response */
++ copy_len = (pext->ResponseLen > SEND_RNID_RSP_SIZE) ?
++ SEND_RNID_RSP_SIZE : pext->ResponseLen;
++
++ ret = verify_area(VERIFY_WRITE, (void *)pext->ResponseAdr,
++ copy_len);
++
++ if (ret != 0) {
++ pext->Status = EXT_STATUS_COPY_ERR;
++ DEBUG9_10(printk(
++ "%s(%ld): inst=%ld rsp buf verify WRITE error\n",
++ __func__, ha->host_no, ha->instance);)
++ } else {
++ ret = copy_to_user((uint8_t *)pext->ResponseAdr,
++ (uint8_t *)ha->ioctl_mem, copy_len);
++ if (ret) {
++ pext->Status = EXT_STATUS_COPY_ERR;
++ DEBUG9_10(printk(
++ "%s(%ld): inst=%ld ERROR copy rsp buf\n",
++ __func__, ha->host_no, ha->instance);)
++ qla2x00_free_ioctl_scrap_mem(ha);
++ return (ret);
++ }
++
++ if (SEND_RNID_RSP_SIZE > pext->ResponseLen) {
++ pext->Status = EXT_STATUS_DATA_OVERRUN;
++ DEBUG9(printk("%s(%ld): inst=%ld data overrun. "
++ "exiting normally.\n",
++ __func__, ha->host_no, ha->instance);)
++ } else {
++ pext->Status = EXT_STATUS_OK;
++ DEBUG9(printk("%s(%ld): inst=%ld exiting normally.\n",
++ __func__, ha->host_no, ha->instance);)
++ }
++ pext->ResponseLen = copy_len;
++ }
++
++ qla2x00_free_ioctl_scrap_mem(ha);
++ return (ret);
++}
++
++/*
++ * qla2x00_get_rnid_params
++ * IOCTL to get RNID parameters of the adapter.
++ *
++ * Input:
++ * ha = adapter state pointer.
++ * pext = User space CT arguments pointer.
++ * mode = flags.
++ *
++ * Returns:
++ * 0 = success
++ * others = errno value
++ *
++ * Context:
++ * Kernel context.
++ */
++static int
++qla2x00_get_rnid_params(scsi_qla_host_t *ha, EXT_IOCTL *pext, int mode)
++{
++ int ret = 0;
++ int tmp_rval = 0;
++ uint32_t copy_len;
++ uint16_t mb[MAILBOX_REGISTER_COUNT];
++
++ DEBUG9(printk("%s(%ld): inst=%ld entered.\n",
++ __func__, ha->host_no, ha->instance);)
++
++ /* check on loop down */
++ if (ha->loop_state != LOOP_READY ||
++ test_bit(CFG_ACTIVE, &ha->cfg_flags) ||
++ (test_bit(ABORT_ISP_ACTIVE, &ha->dpc_flags)) ||
++ ABORTS_ACTIVE || ha->dpc_active) {
++
++ pext->Status = EXT_STATUS_BUSY;
++ DEBUG9_10(printk("%s(%ld): inst=%ld loop not ready.\n",
++ __func__, ha->host_no, ha->instance);)
++
++ return (ret);
++ }
++
++ /* Send command */
++ tmp_rval = qla2x00_get_rnid_params_mbx(ha, ha->ioctl_mem_phys,
++ sizeof(EXT_RNID_DATA), &mb[0]);
++
++ if (tmp_rval != QLA2X00_SUCCESS) {
++ /* error */
++ pext->Status = EXT_STATUS_ERR;
++
++ DEBUG9_10(printk("%s(%ld): inst=%ld cmd FAILED=%x.\n",
++ __func__, ha->host_no, ha->instance, mb[0]);)
++ return (ret);
++ }
++
++ /* Copy the response */
++ copy_len = (pext->ResponseLen > sizeof(EXT_RNID_DATA)) ?
++ (uint32_t)sizeof(EXT_RNID_DATA) : pext->ResponseLen;
++ ret = verify_area(VERIFY_WRITE, (void *)pext->ResponseAdr,
++ copy_len);
++
++ if (ret != 0) {
++ pext->Status = EXT_STATUS_COPY_ERR;
++ DEBUG9_10(printk("%s(%ld): inst=%ld verify WRITE rsp buf error\n",
++ __func__, ha->host_no, ha->instance);)
++ } else {
++ ret = copy_to_user((void *)pext->ResponseAdr,
++ (void *)ha->ioctl_mem, copy_len);
++ if (ret) {
++ pext->Status = EXT_STATUS_COPY_ERR;
++ DEBUG9_10(printk("%s(%ld): inst=%ld ERROR copy rsp buf\n",
++ __func__, ha->host_no, ha->instance);)
++ return (ret);
++ }
++
++ pext->ResponseLen = copy_len;
++ if (copy_len < sizeof(EXT_RNID_DATA)) {
++ pext->Status = EXT_STATUS_DATA_OVERRUN;
++ DEBUG9_10(printk("%s(%ld): inst=%ld data overrun. "
++ "exiting normally.\n",
++ __func__, ha->host_no, ha->instance);)
++ } else if (pext->ResponseLen > sizeof(EXT_RNID_DATA)) {
++ pext->Status = EXT_STATUS_DATA_UNDERRUN;
++ DEBUG9_10(printk("%s(%ld): inst=%ld data underrun. "
++ "exiting normally.\n",
++ __func__, ha->host_no, ha->instance);)
++ } else {
++ pext->Status = EXT_STATUS_OK;
++ DEBUG9(printk("%s(%ld): inst=%ld exiting normally.\n",
++ __func__, ha->host_no, ha->instance);)
++ }
++ }
++
++ return (ret);
++}
++
++/*
++ * qla2x00_set_host_data
++ * IOCTL command to set host/adapter related data.
++ *
++ * Input:
++ * ha = adapter state pointer.
++ * pext = User space CT arguments pointer.
++ * mode = flags.
++ *
++ * Returns:
++ * 0 = success
++ * others = errno value
++ *
++ * Context:
++ * Kernel context.
++ */
++static int
++qla2x00_set_host_data(scsi_qla_host_t *ha, EXT_IOCTL *pext, int mode)
++{
++ int ret = 0;
++
++ DEBUG9(printk("%s(%ld): inst=%ld entered.\n",
++ __func__, ha->host_no, ha->instance);)
++
++ /* check on loop down */
++ if (ha->loop_state != LOOP_READY ||
++ test_bit(CFG_ACTIVE, &ha->cfg_flags) ||
++ (test_bit(ABORT_ISP_ACTIVE, &ha->dpc_flags)) ||
++ ABORTS_ACTIVE || ha->dpc_active) {
++
++ pext->Status = EXT_STATUS_BUSY;
++ DEBUG9_10(printk("%s(%ld): inst=%ld loop not ready.\n",
++ __func__, ha->host_no, ha->instance);)
++
++ return (ret);
++ }
++
++ /* switch on command subcode */
++ switch (pext->SubCode) {
++ case EXT_SC_SET_RNID:
++ ret = qla2x00_set_rnid_params(ha, pext, mode);
++ break;
++ default:
++ /* function not supported. */
++ pext->Status = EXT_STATUS_UNSUPPORTED_SUBCODE;
++ break;
++ }
++
++ DEBUG9(printk("%s(%ld): inst=%ld exiting.\n",
++ __func__, ha->host_no, ha->instance);)
++
++ return (ret);
++}
++
++/*
++ * qla2x00_set_rnid_params
++ * IOCTL to set RNID parameters of the adapter.
++ *
++ * Input:
++ * ha = adapter state pointer.
++ * pext = User space CT arguments pointer.
++ * mode = flags.
++ *
++ * Returns:
++ * 0 = success
++ * others = errno value
++ *
++ * Context:
++ * Kernel context.
++ */
++static int
++qla2x00_set_rnid_params(scsi_qla_host_t *ha, EXT_IOCTL *pext, int mode)
++{
++ EXT_SET_RNID_REQ *tmp_set;
++ EXT_RNID_DATA *tmp_buf;
++ int ret = 0;
++ int tmp_rval = 0;
++ uint16_t mb[MAILBOX_REGISTER_COUNT];
++
++ DEBUG9(printk("%s(%ld): inst=%ld entered.\n",
++ __func__, ha->host_no, ha->instance);)
++
++ if (pext->RequestLen != sizeof(EXT_SET_RNID_REQ)) {
++ /* parameter error */
++ pext->Status = EXT_STATUS_INVALID_PARAM;
++ DEBUG9_10(printk("%s(%ld): inst=%ld invalid request length.\n",
++ __func__, ha->host_no, ha->instance);)
++ return(ret);
++ }
++
++ ret = verify_area(VERIFY_READ, (void *)pext->RequestAdr,
++ pext->RequestLen);
++
++ if (ret != 0) {
++ pext->Status = EXT_STATUS_COPY_ERR;
++ DEBUG9_10(printk("%s(%ld): inst=%ld verify READ request buf.\n",
++ __func__, ha->host_no, ha->instance);)
++ return(ret);
++ }
++
++ if (qla2x00_get_ioctl_scrap_mem(ha, (void **)&tmp_set,
++ sizeof(EXT_SET_RNID_REQ))) {
++ /* not enough memory */
++ pext->Status = EXT_STATUS_NO_MEMORY;
++ DEBUG9_10(printk("%s(%ld): inst=%ld scrap not big enough. "
++ "size requested=%d.\n",
++ __func__, ha->host_no, ha->instance,
++ sizeof(EXT_SET_RNID_REQ));)
++ return (ret);
++ }
++
++ ret = copy_from_user(tmp_set, pext->RequestAdr, pext->RequestLen);
++ if (ret) {
++ pext->Status = EXT_STATUS_COPY_ERR;
++ DEBUG9_10(printk(
++ "%s(%ld): inst=%ld ERROR copy req buf ret=%d\n",
++ __func__, ha->host_no, ha->instance, ret);)
++ qla2x00_free_ioctl_scrap_mem(ha);
++ return(ret);
++ }
++
++ tmp_rval = qla2x00_get_rnid_params_mbx(ha, ha->ioctl_mem_phys,
++ sizeof(EXT_RNID_DATA), &mb[0]);
++ if (tmp_rval != QLA2X00_SUCCESS) {
++ /* error */
++ pext->Status = EXT_STATUS_ERR;
++
++ DEBUG9_10(printk("%s(%ld): inst=%ld read cmd FAILED=%x.\n",
++ __func__, ha->host_no, ha->instance, mb[0]);)
++ qla2x00_free_ioctl_scrap_mem(ha);
++ return (ret);
++ }
++
++ tmp_buf = (EXT_RNID_DATA *)ha->ioctl_mem;
++ /* Now set the params. */
++ memcpy(tmp_buf->IPVersion, tmp_set->IPVersion, 2);
++ memcpy(tmp_buf->UDPPortNumber, tmp_set->UDPPortNumber, 2);
++ memcpy(tmp_buf->IPAddress, tmp_set->IPAddress, 16);
++ tmp_rval = qla2x00_set_rnid_params_mbx(ha, ha->ioctl_mem_phys,
++ sizeof(EXT_RNID_DATA), &mb[0]);
++
++ if (tmp_rval != QLA2X00_SUCCESS) {
++ /* error */
++ pext->Status = EXT_STATUS_ERR;
++
++ DEBUG9_10(printk("%s(%ld): inst=%ld set cmd FAILED=%x.\n",
++ __func__, ha->host_no, ha->instance, mb[0]);)
++ } else {
++ pext->Status = EXT_STATUS_OK;
++ DEBUG9(printk("%s(%ld): inst=%ld exiting normally.\n",
++ __func__, ha->host_no, ha->instance);)
++ }
++
++ qla2x00_free_ioctl_scrap_mem(ha);
++ return (ret);
++}
++
++/*
++ * qla2x00_waitq_sem_timeout
++ * Timeout function to be called when a thread on the wait_q
++ * queue timed out.
++ *
++ * Input:
++ * data = data pointer for timeout function.
++ *
++ * Returns:
++ * qla2x00 local function return status code.
++ *
++ * Context:
++ * Kernel context.
++ */
++static void
++qla2x00_waitq_sem_timeout(unsigned long data)
++{
++ wait_q_t *tmp_ptr = (wait_q_t *)data;
++
++ DEBUG9(printk("%s: entered.\n", __func__);)
++
++ if (tmp_ptr != NULL) {
++ DEBUG9(printk("%s: wait_q thread=%p.\n", __func__, tmp_ptr);)
++ up(&tmp_ptr->wait_q_sem);
++ }
++
++ DEBUG9(printk("%s: exiting.\n", __func__);)
++
++}
++
++/*
++ * qla2x00_get_ioctl_access
++ * Serialization routine for the ioctl commands.
++ * When succeeded the exiting thread gains "access" and
++ * proceeds, otherwise it gives up and returns error.
++ * Each thread would wait tov seconds before giving up.
++ *
++ * Input:
++ * ha = adapter state pointer.
++ * tov = timeout value in seconds
++ *
++ * Returns:
++ * qla2x00 local function return status code.
++ *
++ * Context:
++ * Kernel context.
++ */
++static uint8_t
++qla2x00_get_ioctl_access(scsi_qla_host_t *ha, uint32_t tov)
++{
++ int prev_val = 1;
++ uint8_t rval = QL_STATUS_SUCCESS;
++ unsigned long cpu_flags;
++ struct timer_list tmp_access_timer;
++ wait_q_t *ptmp_wq = NULL;
++
++
++ DEBUG9(printk("%s(%ld): inst=%ld entered.\n",
++ __func__, ha->host_no, ha->instance);)
++
++ while (1) {
++ if (test_bit(IOCTL_WANT, (void *)&(ha->ioctl->access_bits)) ==
++ 0) {
++
++ DEBUG9(printk("%s(%ld): going to test access_bits.\n",
++ __func__, ha->host_no);)
++
++ /* No one else is waiting. Go ahead and try to
++ * get access.
++ */
++ if ((prev_val = test_and_set_bit(IOCTL_ACTIVE,
++ (void *)&ha->ioctl->access_bits)) == 0) {
++ break;
++ }
++ }
++
++ /* wait for previous command to finish */
++ DEBUG9(printk("%s(%ld): inst=%ld access_bits=%x. busy. "
++ "Waiting for access. curr time=0x%lx.\n",
++ __func__, ha->host_no, ha->instance,
++ ha->ioctl->access_bits, jiffies);)
++
++ /*
++ * Init timer and get semaphore from wait_q. if we got valid
++ * semaphore pointer the IOCTL_WANT flag would also had
++ * been set.
++ */
++ qla2x00_wait_q_add(ha, &ptmp_wq);
++
++ if (ptmp_wq == NULL) {
++ /* queue full? problem? can't proceed. */
++ DEBUG9_10(printk("%s(%ld): ERROR no more wait_q "
++ "allowed. exiting.\n", __func__, ha->host_no);)
++
++ break;
++ }
++
++ init_timer(&tmp_access_timer);
++
++ tmp_access_timer.data = (unsigned long)ptmp_wq;
++ tmp_access_timer.function =
++ (void (*)(unsigned long))qla2x00_waitq_sem_timeout;
++ tmp_access_timer.expires = jiffies + tov * HZ;
++
++ DEBUG9(printk("%s(%ld): adding timer. "
++ "curr time=0x%lx timeoutval=0x%lx.\n",
++ __func__, ha->host_no, jiffies, tmp_access_timer.expires);)
++
++ /* wait. */
++ add_timer(&tmp_access_timer);
++
++ DEBUG9(printk("%s(%ld): inst=%ld wait_q %p going to sleep. "
++ "current time=0x%lx.\n",
++ __func__, ha->host_no, ha->instance, ptmp_wq, jiffies);)
++
++ down_interruptible(&ptmp_wq->wait_q_sem);
++
++ DEBUG9(printk("%s(%ld): inst=%ld wait_q %p woke up. current "
++ "time=0x%lx.\n",
++ __func__, ha->host_no, ha->instance, ptmp_wq, jiffies);)
++
++ del_timer(&tmp_access_timer);
++
++ /* try to get lock again. we'll test later to see
++ * if we actually got the lock.
++ */
++ prev_val = test_and_set_bit(IOCTL_ACTIVE,
++ (void *)&(ha->ioctl->access_bits));
++
++ /*
++ * After we tried to get access then we check to see
++ * if we need to clear the IOCTL_WANT flag. Don't clear
++ * this flag before trying to get access or another
++ * new thread might grab it before we did.
++ */
++ spin_lock_irqsave(&ha->ioctl->wait_q_lock, cpu_flags);
++ if (prev_val != 0) {
++ /* We'll return with error.
++ * Make sure we remove ourselves from wait_q.
++ */
++ qla2x00_wait_q_remove(ha, ptmp_wq);
++ }
++ if (ha->ioctl->wait_q_head == NULL) {
++ /* We're the last thread in wait_q queue. */
++ clear_bit(IOCTL_WANT, (void *)&ha->ioctl->access_bits);
++ }
++ qla2x00_wait_q_memb_free(ha, ptmp_wq);
++ spin_unlock_irqrestore(&ha->ioctl->wait_q_lock, cpu_flags);
++
++ break;
++ }
++
++ if (prev_val == 0) {
++ /* We got the lock */
++
++ DEBUG9(printk("%s(%ld): inst=%ld got access.\n",
++ __func__, ha->host_no, ha->instance);)
++
++ } else {
++ /* Timeout or resource error. */
++ DEBUG9_10(printk("%s(%ld): inst=%ld timed out "
++ "or wait_q error.\n", __func__, ha->host_no, ha->instance);)
++
++ rval = QL_STATUS_TIMEOUT;
++ }
++
++ return (rval);
++}
++
++/*
++ * qla2x00_release_ioctl_access
++ * Serialization routine for the ioctl commands.
++ * This releases "access" and checks on wai_q queue. If there's
++ * another thread waiting then wakes it up.
++ *
++ * Input:
++ * ha = adapter state pointer.
++ * tov = timeout value in seconds
++ *
++ * Returns:
++ * qla2x00 local function return status code.
++ *
++ * Context:
++ * Kernel context.
++ */
++static uint8_t
++qla2x00_release_ioctl_access(scsi_qla_host_t *ha)
++{
++ wait_q_t *next_thread = NULL;
++
++ DEBUG9(printk("%s(%ld): inst=%ld entered.\n",
++ __func__, ha->host_no, ha->instance);)
++
++ clear_bit(IOCTL_ACTIVE, (void *)&(ha->ioctl->access_bits));
++
++ /* Wake up one pending ioctl thread in wait_q */
++ qla2x00_wait_q_get_next(ha, &next_thread);
++ if (next_thread) {
++ DEBUG9(printk(
++ "%s(%ld): inst=%ld found wait_q. Wake up waitq %p\n",
++ __func__, ha->host_no, ha->instance, &next_thread);)
++ up(&next_thread->wait_q_sem);
++ }
++
++ DEBUG9(printk("%s(%ld): inst=%ld exiting.\n",
++ __func__, ha->host_no, ha->instance);)
++
++ return QL_STATUS_SUCCESS;
++}
++
++/*
++ * qla2x00_wait_q_memb_alloc
++ * Finds a free wait_q member from the array. Must already got the
++ * wait_q_lock spinlock.
++ *
++ * Input:
++ * ha = adapter state pointer.
++ *
++ * Returns:
++ * qla2x00 local function return status code.
++ *
++ * Context:
++ * Kernel context.
++ */
++static void
++qla2x00_wait_q_memb_alloc(scsi_qla_host_t *ha, wait_q_t **ret_wait_q_memb)
++{
++ uint8_t i;
++ wait_q_t *ptmp = NULL;
++
++ DEBUG9(printk("%s(%ld): inst=%ld entered.\n",
++ __func__, ha->host_no, ha->instance);)
++
++ for (i = 0; i < MAX_IOCTL_WAIT_THREADS; i++) {
++ if (!(ha->ioctl->wait_q_arr[i].flags & WQ_IN_USE)) {
++ ha->ioctl->wait_q_arr[i].flags |= WQ_IN_USE;
++ ptmp = &ha->ioctl->wait_q_arr[i];
++ break;
++ }
++ }
++
++ *ret_wait_q_memb = ptmp;
++
++ DEBUG9(printk("%s(%ld): inst=%ld return waitq_memb=%p.\n",
++ __func__, ha->host_no, ha->instance, *ret_wait_q_memb);)
++}
++
++/*
++ * qla2x00_wait_q_memb_free
++ * Frees the specified wait_q member. Must already got the wait_q_lock
++ * spinlock.
++ *
++ * Input:
++ * ha = adapter state pointer.
++ *
++ * Returns:
++ * qla2x00 local function return status code.
++ *
++ * Context:
++ * Kernel context.
++ */
++static void
++qla2x00_wait_q_memb_free(scsi_qla_host_t *ha, wait_q_t *pfree_wait_q_memb)
++{
++ DEBUG9(printk("%s(%ld): inst=%ld entered.\n",
++ __func__, ha->host_no, ha->instance);)
++
++ if (pfree_wait_q_memb != NULL) {
++ DEBUG9(printk("%s(%ld): freeing %p.\n",
++ __func__, ha->host_no, pfree_wait_q_memb);)
++ pfree_wait_q_memb->flags &= ~WQ_IN_USE;
++ }
++
++ DEBUG9(printk("%s(%ld): inst=%ld exiting.\n",
++ __func__, ha->host_no, ha->instance);)
++}
++
++/*
++ * qla2x00_wait_q_add
++ * Allocates a wait_q_t struct and add to the wait_q list.
++ *
++ * Input:
++ * ha = adapter state pointer.
++ *
++ * Returns:
++ * qla2x00 local function return status code.
++ *
++ * Context:
++ * Kernel context.
++ */
++static uint8_t
++qla2x00_wait_q_add(scsi_qla_host_t *ha, wait_q_t **ret_wq)
++{
++ uint8_t rval = QL_STATUS_SUCCESS;
++ unsigned long cpu_flags;
++ wait_q_t *ptmp = NULL;
++
++ spin_lock_irqsave(&ha->ioctl->wait_q_lock, cpu_flags);
++
++ DEBUG9(printk("%s(%ld): inst=%ld got wait_q spinlock.\n",
++ __func__, ha->host_no, ha->instance);)
++
++ qla2x00_wait_q_memb_alloc(ha, &ptmp);
++ if (ptmp == NULL) {
++ /* can't add any more threads */
++ DEBUG9_10(printk("%s(%ld): inst=%ld ERROR no more ioctl "
++ "threads allowed.\n",
++ __func__, ha->host_no, ha->instance);)
++
++ rval = QL_STATUS_RESOURCE_ERROR;
++ } else {
++ if (ha->ioctl->wait_q_tail == NULL) {
++ /* First thread to queue. */
++ set_bit(IOCTL_WANT, (void *)&ha->ioctl->access_bits);
++
++ ha->ioctl->wait_q_head = ptmp;
++ } else {
++ ha->ioctl->wait_q_tail->pnext = ptmp;
++ }
++ ha->ioctl->wait_q_tail = ptmp;
++
++ *ret_wq = ptmp;
++
++ /* Now init the semaphore */
++
++ init_MUTEX_LOCKED(&ptmp->wait_q_sem);
++
++ rval = QL_STATUS_SUCCESS;
++ }
++
++ DEBUG9(printk("%s(%ld): inst=%ld going to release spinlock. "
++ "ret_wq=%p, rval=%d.\n",
++ __func__, ha->host_no, ha->instance, *ret_wq, rval);)
++
++ spin_unlock_irqrestore(&ha->ioctl->wait_q_lock, cpu_flags);
++
++ return rval;
++}
++
++/*
++ * qla2x00_wait_q_get_next
++ * This just removes one member from head of wait_q.
++ *
++ * Input:
++ * ha = adapter state pointer.
++ *
++ * Returns:
++ * qla2x00 local function return status code.
++ *
++ * Context:
++ * Kernel context.
++ */
++static void
++qla2x00_wait_q_get_next(scsi_qla_host_t *ha, wait_q_t **ret_wq)
++{
++ unsigned long cpu_flags;
++
++ if (test_bit(IOCTL_ACTIVE, (void *)&(ha->ioctl->access_bits)) != 0) {
++ /* Another thread just became active. Exit. */
++ *ret_wq = NULL;
++ return;
++ }
++
++ /* Find the next thread to wake up */
++ spin_lock_irqsave(&ha->ioctl->wait_q_lock, cpu_flags);
++
++ DEBUG9(printk("%s(%ld): inst=%ld got wait_q spinlock.\n",
++ __func__, ha->host_no, ha->instance);)
++
++ /* Remove from head */
++ *ret_wq = ha->ioctl->wait_q_head;
++ if (ha->ioctl->wait_q_head != NULL) {
++
++ ha->ioctl->wait_q_head = ha->ioctl->wait_q_head->pnext;
++
++ if (ha->ioctl->wait_q_head == NULL) {
++ /* That's the last one in queue. */
++ ha->ioctl->wait_q_tail = NULL;
++ }
++
++ (*ret_wq)->pnext = NULL;
++ }
++
++ DEBUG9(printk("%s(%ld): inst=%ld return ret_wq=%p. Going to release "
++ "spinlock.\n",
++ __func__, ha->host_no, ha->instance, *ret_wq);)
++ spin_unlock_irqrestore(&ha->ioctl->wait_q_lock, cpu_flags);
++}
++
++/*
++ * qla2x00_wait_q_remove
++ * Removes the specified member from wait_q.
++ * Must already got the wait_q_lock spin lock.
++ *
++ * Input:
++ * ha = adapter state pointer.
++ *
++ * Returns:
++ * qla2x00 local function return status code.
++ *
++ * Context:
++ * Kernel context.
++ */
++static void
++qla2x00_wait_q_remove(scsi_qla_host_t *ha, wait_q_t *rem_wq)
++{
++ wait_q_t *ptmp_wq;
++ wait_q_t *ptmp_prev;
++
++ DEBUG9(printk("%s(%ld): inst=%ld rem_wq=%p.\n",
++ __func__, ha->host_no, ha->instance, rem_wq);)
++
++ /* Search then remove */
++ ptmp_prev = NULL;
++ for (ptmp_wq = ha->ioctl->wait_q_head; ptmp_wq != NULL;
++ ptmp_wq = ptmp_wq->pnext) {
++
++ if (ptmp_wq == rem_wq) {
++ /* Found it in wait_q. Remove. */
++
++ DEBUG9(printk("%s(%ld): inst=%ld removing.\n",
++ __func__, ha->host_no, ha->instance);)
++
++ if (ha->ioctl->wait_q_head == ptmp_wq) {
++ ha->ioctl->wait_q_head = ptmp_wq->pnext;
++ } else {
++ ptmp_prev->pnext = ptmp_wq->pnext;
++ }
++
++ if (ha->ioctl->wait_q_tail == ptmp_wq) {
++ ha->ioctl->wait_q_tail = ptmp_prev;
++ }
++
++ ptmp_wq->pnext = NULL;
++
++ break;
++ }
++ ptmp_prev = ptmp_wq;
++ }
++
++ DEBUG9(printk("%s(%ld): inst=%ld exiting.\n",
++ __func__, ha->host_no, ha->instance);)
++}
++
++
+--- /dev/null Thu Apr 11 07:25:15 2002
++++ linux-2.5.73-n9560/drivers/scsi/qla2xxx/qlfo.h Thu Jul 3 15:34:42 2003
+@@ -0,0 +1,413 @@
++/******************************************************************************
++ * QLOGIC LINUX SOFTWARE
++ *
++ * QLogic ISP2x00 device driver for Linux 2.5.x
++ * Copyright (C) 2003 Qlogic Corporation
++ * (www.qlogic.com)
++ *
++ * This program is free software; you can redistribute it and/or modify it
++ * under the terms of the GNU General Public License as published by the
++ * Free Software Foundation; either version 2, or (at your option) any
++ * later version.
++ *
++ * This program is distributed in the hope that it will be useful, but
++ * WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ * General Public License for more details.
++ *
++ ******************************************************************************/
++
++/*
++ * San/Device Management Failover Ioctl Header
++ * File is created to adhere to Solaris requirement using 8-space tabs.
++ *
++ * !!!!! PLEASE DO NOT REMOVE THE TABS !!!!!
++ * !!!!! PLEASE NO SINGLE LINE COMMENTS: // !!!!!
++ * !!!!! PLEASE NO MORE THAN 80 CHARS PER LINE !!!!!
++ *
++ * Revision History:
++ *
++ * Rev. 0.00 August 8, 2000
++ * WTR - Created.
++ *
++ * Rev. 0.01 August 8, 2000
++ * WTR - Made size of HbaInstance fields consistant as UINT8.
++ * Made command codes as 300 upward to be consistant with definitions
++ * in ExIoct.h.
++ * Rev. 0.01 October 3, 2000
++ * TLE - Exclusion of ExIoct.h
++ *
++ * Rev. 0.01 October 6, 2000
++ * TLE - Made size of HbaInstance fields UINT8
++ *
++ * Rev. 0.01 October 10, 2000
++ * TLE - Add _FO_DRIVER_VERSION data structure
++ */
++
++
++
++#ifndef _FO_H
++#define _FO_H
++
++/*
++ * ***********************************************************************
++ * X OS type definitions
++ * ***********************************************************************
++ */
++#ifdef _MSC_VER /* NT */
++
++#pragma pack(1)
++#include "qlfont.h"
++
++#elif defined(linux) /* Linux */
++
++#include "qlfoln.h"
++
++#elif defined(sun) || defined(__sun) /* Solaris */
++
++#include "qlfoso.h"
++
++#endif
++
++#define SDM_DEF_MAX_DEVICES 16
++#define SDM_DEF_MAX_PATHS_PER_TARGET 4
++#define SDM_DEF_MAX_TARGETS_PER_DEVICE 4
++#define SDM_DEF_MAX_PATHS_PER_DEVICE (SDM_DEF_MAX_PATHS_PER_TARGET * SDM_DEF_MAX_TARGETS_PER_DEVICE)
++
++#define FO_MAX_LUNS_PER_DEVICE MAX_LUNS_OS
++#define FO_MAX_PATHS (SDM_DEF_MAX_PATHS_PER_DEVICE * SDM_DEF_MAX_DEVICES)
++#define FO_MAX_ADAPTERS 32
++#define FO_ADAPTER_ALL 0xFF
++#define FO_DEF_WWN_SIZE 8
++#define FO_MAX_GEN_INFO_STRING_LEN 32
++
++
++#define FO_NOTIFY_TYPE_NONE 0
++#define FO_NOTIFY_TYPE_LUN_RESET 1
++#define FO_NOTIFY_TYPE_CDB 2
++#define FO_NOTIFY_TYPE_LOGOUT_OR_LUN_RESET 3
++#define FO_NOTIFY_TYPE_LOGOUT_OR_CDB 4
++
++#define FO_NOTIFY_TYPE_MIN FO_NOTIFY_TYPE_NONE
++#define FO_NOTIFY_TYPE_MAX FO_NOTIFY_TYPE_LOGOUT_OR_CDB
++#define FO_NOTIFY_TYPE_DEF FO_NOTIFY_TYPE_NONE
++
++#define FO_NOTIFY_CDB_LENGTH_MIN 6
++#define FO_NOTIFY_CDB_LENGTH_MAX 16
++
++/*
++ * IOCTL Commands
++ */
++
++#define FO_CC_GET_PARAMS FO_CC_GET_PARAMS_OS
++#define FO_CC_SET_PARAMS FO_CC_SET_PARAMS_OS
++#define FO_CC_GET_PATHS FO_CC_GET_PATHS_OS
++#define FO_CC_SET_CURRENT_PATH FO_CC_SET_CURRENT_PATH_OS
++#define FO_CC_GET_HBA_STAT FO_CC_GET_HBA_STAT_OS
++#define FO_CC_RESET_HBA_STAT FO_CC_RESET_HBA_STAT_OS
++#define FO_CC_GET_LUN_DATA FO_CC_GET_LUN_DATA_OS
++#define FO_CC_SET_LUN_DATA FO_CC_SET_LUN_DATA_OS
++#define FO_CC_GET_TARGET_DATA FO_CC_GET_TARGET_DATA_OS
++#define FO_CC_SET_TARGET_DATA FO_CC_SET_TARGET_DATA_OS
++#define FO_CC_GET_FO_DRIVER_VERSION FO_CC_GET_FO_DRIVER_VERSION_OS
++
++
++/* Systemwide failover parameters. */
++
++typedef struct _FO_PARAMS
++{
++ UINT32 InspectionInterval; /* Timer interval to check for failover.*/
++ UINT8 MaxPathsPerDevice; /* Max paths to any single device. */
++ UINT8 MaxRetriesPerPath; /* Max retries on a path before */
++
++ /* Failover. */
++ UINT8 MaxRetriesPerIo; /* Max retries per i/o request. */
++ UINT8 Reserved1;
++ UINT32 Flags; /* Control flags. */
++ UINT8 DeviceErrorThreshold; /* Max device errors. */
++ UINT8 DeviceTimeoutThreshold; /* Max device timeouts.*/
++ UINT8 FrameErrorThreshold; /* Max frame errors.*/
++ UINT8 LinkErrorThreshold; /* Max link errors.*/
++ UINT32 Reserved2[4]; /* Spares.*/
++
++ /* Load balancing parameters.*/
++
++ UINT8 RollingAverageIntervals;/* Intervals to sum for rolling average.*/
++ UINT8 MaxDevicesToMigrate; /* Max devices to migrate in any interval.*/
++ UINT8 BalanceMethod; /* Method to use for load balancing.*/
++ UINT8 Reserved3; /* Memory alignment.*/
++
++ UINT16 LoadShareMinPercentage; /* Load balancing parameter.*/
++ UINT16 LoadShareMaxPercentage; /* Load balancing parameter.*/
++
++ /* Failover notify parameters. */
++
++ UINT8 FailoverNotifyType; /* Type of notification. */
++ UINT8 FailoverNotifyCdbLength;/* Length of notification CDB. */
++ UINT16 Reserved4;
++ UINT8 FailoverNotifyCdb[16]; /* CDB if notification by CDB. */
++ UINT32 Reserved5;
++
++}
++FO_PARAMS, *PFO_PARAMS, SysFoParams_t, *SysFoParams_p;
++
++extern SysFoParams_t qla_fo_params;
++
++typedef struct _FO_GET_PATHS
++{
++ UINT8 HbaInstance;
++ EXT_DEST_ADDR HbaAddr; /* Lun field is ignored */
++ UINT32 Reserved[5];
++
++}
++FO_GET_PATHS, *PFO_GET_PATHS;
++
++
++typedef struct _FO_PATH_ENTRY
++{
++ UINT8 Reserved1;
++ UINT8 Visible; /* Path is visible path. */
++ UINT8 Priority;
++ UINT8 Reserved2;
++ UINT8 HbaInstance;
++ UINT8 PortName[EXT_DEF_WWN_NAME_SIZE];
++ UINT16 Reserved3;
++ UINT32 Reserved[3];
++
++}
++FO_PATH_ENTRY, *PFO_PATH_ENTRY;
++
++
++typedef struct _FO_PATHS_INFO
++{
++ /* These first fields in the output buffer are specifically the
++ * same as the fields in the input buffer. This is because the
++ * same system buffer holds both, and this allows us to reference
++ * the input buffer parameters while filling the output buffer. */
++
++ UINT8 HbaInstance;
++ EXT_DEST_ADDR HbaAddr;
++ UINT32 Reserved[5];
++ UINT8 PathCount; /* Number of Paths in PathEntry array */
++ UINT8 Reserved3;
++ UINT8 VisiblePathIndex; /* Which index has BOOLEAN "visible" flag set */
++ UINT8 Reserved4;
++
++ UINT8 CurrentPathIndex[FO_MAX_LUNS_PER_DEVICE]; /* Current Path Index for each Lun */
++
++ FO_PATH_ENTRY PathEntry[FO_MAX_PATHS];
++
++ UINT32 Reserved5[4];
++
++}
++FO_PATHS_INFO, *PFO_PATHS_INFO;
++
++typedef struct _FO_SET_CURRENT_PATH
++{
++ UINT8 HbaInstance;
++ EXT_DEST_ADDR HbaAddr;
++ UINT8 NewCurrentPathIndex; /* Path index to make current path. */
++ UINT8 FailoverType; /* Reason for failover. */
++ UINT32 Reserved[3];
++
++}
++FO_SET_CURRENT_PATH, *PFO_SET_CURRENT_PATH;
++
++typedef union _FO_PATHS {
++ FO_GET_PATHS input;
++ FO_SET_CURRENT_PATH set
++ ;
++ FO_PATHS_INFO info;
++} FO_PATHS;
++
++
++typedef struct _FO_HBA_STAT_INPUT
++{
++ /* The first field in the input buffer is specifically the
++ * same as the field in the output buffer. This is because the
++ * same system buffer holds both, and this allows us to reference
++ * the input buffer parameters while filling the output buffer. */
++
++ UINT8 HbaInstance; /* Port number or ADAPTER_ALL. */
++ UINT8 Reserved1[3];
++ UINT32 Reserved2[7];
++
++}
++FO_HBA_STAT_INPUT, *PFO_HBA_STAT_INPUT;
++
++
++typedef struct _FO_HBA_STAT_ENTRY
++{
++ UINT8 HbaInstance;
++ UINT8 Reserved1[3];
++ UINT32 Reserved2;
++ UINT64 IosRequested; /* IOs requested on this adapter. */
++ UINT64 BytesRequested; /* Bytes requested on this adapter. */
++ UINT64 IosExecuted; /* IOs executed on this adapter. */
++ UINT64 BytesExecuted; /* Bytes executed on this adapter. */
++ UINT32 Reserved3[22];
++
++}
++FO_HBA_STAT_ENTRY, *PFO_HBA_STAT_ENTRY;
++
++
++typedef struct _FO_HBA_STAT_INFO
++{
++ /* The first fields in the output buffer is specifically the
++ * same as the field in the input buffer. This is because the
++ * same system buffer holds both, and this allows us to reference
++ * the input buffer parameters while filling the output buffer. */
++
++ UINT8 HbaInstance; /* Port number or ADAPTER_ALL. */
++ UINT8 HbaCount; /* Count of adapters returned. */
++ UINT8 Reserved1[2];
++ UINT32 Reserved2[7];
++
++ FO_HBA_STAT_ENTRY StatEntry[FO_MAX_ADAPTERS];
++
++}
++FO_HBA_STAT_INFO, *PFO_HBA_STAT_INFO;
++
++
++
++/* The "external" LUN data refers to the LUNs as represented in our
++ configuration utility, where one physical target can support up to
++ 2048 LUNs, which are mapped around internally. This is in comparison
++ to an "internal" LUN data, which is 256 LUNs, after being mapped
++ inside the driver to multiple target slots. */
++
++#define EXTERNAL_LUN_COUNT 2048
++
++/* Structure as used in the IOCTL.*/
++
++typedef struct _FO_EXTERNAL_LUN_DATA_ENTRY
++{
++ UINT8 NodeName[EXT_DEF_WWN_NAME_SIZE];
++ UINT8 PortName[EXT_DEF_WWP_NAME_SIZE]; //sri
++
++ UINT16 LunCount; /* Entries in Lun Data array. */
++ UINT8 TargetId;
++ UINT8 Dev_No;
++ UINT32 Reserved3;
++ UINT32 Reserved4;
++ UINT32 Reserved5; /* Pad to 32-byte header.*/
++
++ UINT8 Data[EXTERNAL_LUN_COUNT];
++}
++FO_EXTERNAL_LUN_DATA_ENTRY, *PFO_EXTERNAL_LUN_DATA_ENTRY;
++
++// Structure as it is stored in the NT registry.
++
++typedef struct _FO_LUN_DATA_LIST
++{
++ UINT16 Version; /* Should be LUN_DATA_REGISTRY_VERSION.*/
++ UINT16 EntryCount; /* Count of variable entries following.*/
++ UINT32 Reserved1;
++ UINT32 Reserved2;
++ UINT32 Reserved3;
++ UINT32 Reserved4;
++ UINT32 Reserved5;
++ UINT32 Reserved6;
++ UINT32 Reserved7; /* Pad to 32-byte header.*/
++
++ FO_EXTERNAL_LUN_DATA_ENTRY DataEntry[1]; /* Variable-length data.*/
++
++}
++FO_LUN_DATA_LIST, *PFO_LUN_DATA_LIST;
++
++typedef struct _FO_LUN_DATA_INPUT
++{
++ /* The first field in the input buffer is specifically the
++ * same as the field in the output buffer. This is because the
++ * same system buffer holds both, and this allows us to reference
++ * the input buffer parameters while filling the output buffer. */
++
++ UINT8 HbaInstance; /* Port number */
++ UINT8 Reserved1[3];
++ UINT32 Reserved2[7];
++
++}
++FO_LUN_DATA_INPUT, *PFO_LUN_DATA_INPUT;
++
++typedef struct _FO_REQUEST_ADDR
++{
++ UINT8 HbaInstance;
++ EXT_DEST_ADDR TargetAddr;
++ UINT32 Reserved[5];
++
++}
++FO_REQUEST_ADDR, *PFO_REQUEST_ADDR;
++
++typedef struct _FO_TARGET_DATA_INPUT
++{
++ UINT8 HbaInstance; /* Port number */
++ UINT8 Reserved1[3];
++ UINT32 Reserved2[7];
++
++}
++FO_TARGET_DATA_INPUT, *PFO_TARGET_DATA_INPUT;
++
++#define FO_INTERNAL_LUN_COUNT 256
++#define FO_INTERNAL_LUN_BITMASK_BYTES (FO_INTERNAL_LUN_COUNT / 8)
++
++typedef struct _FO_INTERNAL_LUN_BITMASK
++{
++ UINT8 Bitmask[FO_INTERNAL_LUN_BITMASK_BYTES];
++}
++FO_INTERNAL_LUN_BITMASK, *PFO_INTERNAL_LUN_BITMASK;
++
++typedef struct _FO_DEVICE_DATA
++{
++ UINT32 DeviceFlags; /* Device flags */
++ UINT16 LoopId; /* Current loop ID */
++ UINT16 BaseLunNumber; /* Base LUN number */
++ UINT8 WorldWideName[8]; /* World Wide Name for device */
++ UINT8 PortId[3]; /* Port ID */
++ UINT8 MultipathControl; /* Multipath control byte. */
++ UINT16 DeviceState; /* Device state */
++ UINT16 LoginRetryCount; /* Number of login retries */
++ UINT8 PortName[8]; /* Port name for device */
++ UINT16 TimeoutCount; /* Command timeout count */
++ UINT8 TargetId;
++ UINT8 Dev_No;
++ FO_INTERNAL_LUN_BITMASK LunBitmask; /* LUN bitmask */
++}
++FO_DEVICE_DATA, *PFO_DEVICE_DATA;
++
++typedef struct _FO_DEVICE_DATABASE
++{
++ FO_DEVICE_DATA DeviceData[256];
++}
++FO_DEVICE_DATABASE, *PFO_DEVICE_DATABASE;
++
++typedef struct _FO_DRIVER_VERSION
++{
++ // Numeric version.
++ UINT8 Version; // Major version number.
++ UINT8 Revision; // Minor version number.
++ UINT8 Subrevision; // Subminor version number.
++ UINT8 Reserved1; // Memory alignment.
++
++ // String version.
++ UINT8 VersionStr[FO_MAX_GEN_INFO_STRING_LEN];
++
++ // Reserved fields.
++ UINT32 Reserved2[16];
++
++}
++FO_DRIVER_VERSION, *PFO_DRIVER_VERSION;
++
++
++#define FO_LUN_DATA_LIST_MIN_ENTRIES 1
++#define FO_LUN_DATA_LIST_MAX_ENTRIES 256
++#ifdef _WIN64
++#define FO_LUN_DATA_LIST_HEADER_SIZE 32
++#else
++#define FO_LUN_DATA_LIST_HEADER_SIZE offsetof(FO_LUN_DATA_LIST, DataEntry)
++#endif
++
++#define FO_LUN_DATA_LIST_MIN_SIZE (FO_LUN_DATA_LIST_HEADER_SIZE + (sizeof(FO_EXTERNAL_LUN_DATA_ENTRY) * FO_LUN_DATA_LIST_MIN_ENTRIES))
++#define FO_LUN_DATA_LIST_MAX_SIZE (FO_LUN_DATA_LIST_HEADER_SIZE + (sizeof(FO_EXTERNAL_LUN_DATA_ENTRY) * FO_LUN_DATA_LIST_MAX_ENTRIES))
++
++
++#endif /* ifndef _FO_H */
+--- /dev/null Thu Apr 11 07:25:15 2002
++++ linux-2.5.73-n9560/drivers/scsi/qla2xxx/qlfolimits.h Thu Jul 3 15:34:42 2003
+@@ -0,0 +1,92 @@
++/******************************************************************************
++ * QLOGIC LINUX SOFTWARE
++ *
++ * QLogic ISP2x00 device driver for Linux 2.5.x
++ * Copyright (C) 2003 Qlogic Corporation
++ * (www.qlogic.com)
++ *
++ * This program is free software; you can redistribute it and/or modify it
++ * under the terms of the GNU General Public License as published by the
++ * Free Software Foundation; either version 2, or (at your option) any
++ * later version.
++ *
++ * This program is distributed in the hope that it will be useful, but
++ * WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ * General Public License for more details.
++ *
++ ******************************************************************************/
++
++/*
++ * Minimums, maximums, defaults, and other definitions for MC_PARAMS.
++ */
++
++#define FO_INSPECTION_INTERVAL_MIN 0
++#define FO_INSPECTION_INTERVAL_MAX 1000000
++#define FO_INSPECTION_INTERVAL_DEF 600
++
++#define FO_MAX_PATHS_PER_DEVICE_MIN 1
++#define FO_MAX_PATHS_PER_DEVICE_MAX 8
++#define FO_MAX_PATHS_PER_DEVICE_DEF 8
++
++#define FO_MAX_RETRIES_PER_PATH_MIN 1
++#define FO_MAX_RETRIES_PER_PATH_MAX 8
++#define FO_MAX_RETRIES_PER_PATH_DEF 3
++
++#define FO_MAX_RETRIES_PER_IO_MIN ((FO_MAX_PATHS_PER_DEVICE_MIN * FO_MAX_RETRIES_PER_PATH_MIN) + 1)
++#define FO_MAX_RETRIES_PER_IO_MAX ((FO_MAX_PATHS_PER_DEVICE_MAX * FO_MAX_RETRIES_PER_PATH_MAX) + 1)
++#define FO_MAX_RETRIES_PER_IO_DEF ((FO_MAX_PATHS_PER_DEVICE_DEF * FO_MAX_RETRIES_PER_PATH_DEF) + 1)
++
++#define FO_DEVICE_ERROR_THRESHOLD_MIN 1
++#define FO_DEVICE_ERROR_THRESHOLD_MAX 255
++#define FO_DEVICE_ERROR_THRESHOLD_DEF 4
++
++#define FO_DEVICE_TIMEOUT_THRESHOLD_MIN 1
++#define FO_DEVICE_TIMEOUT_THRESHOLD_MAX 255
++#define FO_DEVICE_TIMEOUT_THRESHOLD_DEF 4
++
++#define FO_FRAME_ERROR_THRESHOLD_MIN 1
++#define FO_FRAME_ERROR_THRESHOLD_MAX 255
++#define FO_FRAME_ERROR_THRESHOLD_DEF 4
++
++#define FO_LINK_ERROR_THRESHOLD_MIN 1
++#define FO_LINK_ERROR_THRESHOLD_MAX 255
++#define FO_LINK_ERROR_THRESHOLD_DEF 4
++
++#define FO_ROLLING_AVERAGE_INTERVALS_MIN 1
++#define FO_ROLLING_AVERAGE_INTERVALS_MAX 10
++#define FO_ROLLING_AVERAGE_INTERVALS_DEF 1
++
++#define FO_MAX_DEVICES_TO_MIGRATE_MIN 0
++#define FO_MAX_DEVICES_TO_MIGRATE_MAX 255
++#define FO_MAX_DEVICES_TO_MIGRATE_DEF 4
++
++#define FO_BALANCE_METHOD_NONE 0
++#define FO_BALANCE_METHOD_IOS 1
++#define FO_BALANCE_METHOD_MBS 2
++
++#define FO_BALANCE_METHOD_MIN FO_BALANCE_METHOD_NONE
++#define FO_BALANCE_METHOD_MAX FO_BALANCE_METHOD_MBS
++#define FO_BALANCE_METHOD_DEF FO_BALANCE_METHOD_IOS
++
++#define FO_LOAD_SHARE_MIN_PERCENTAGE_MIN 25
++#define FO_LOAD_SHARE_MIN_PERCENTAGE_MAX 99
++#define FO_LOAD_SHARE_MIN_PERCENTAGE_DEF 75
++
++#define FO_LOAD_SHARE_MAX_PERCENTAGE_MIN 101
++#define FO_LOAD_SHARE_MAX_PERCENTAGE_MAX 500
++#define FO_LOAD_SHARE_MAX_PERCENTAGE_DEF 150
++
++#define FO_NOTIFY_TYPE_NONE 0
++#define FO_NOTIFY_TYPE_LUN_RESET 1
++#define FO_NOTIFY_TYPE_CDB 2
++#define FO_NOTIFY_TYPE_LOGOUT_OR_LUN_RESET 3
++#define FO_NOTIFY_TYPE_LOGOUT_OR_CDB 4
++
++#define FO_NOTIFY_TYPE_MIN FO_NOTIFY_TYPE_NONE
++#define FO_NOTIFY_TYPE_MAX FO_NOTIFY_TYPE_LOGOUT_OR_CDB
++#define FO_NOTIFY_TYPE_DEF FO_NOTIFY_TYPE_NONE
++
++#define FO_NOTIFY_CDB_LENGTH_MIN 6
++#define FO_NOTIFY_CDB_LENGTH_MAX 16
++
+--- /dev/null Thu Apr 11 07:25:15 2002
++++ linux-2.5.73-n9560/drivers/scsi/qla2xxx/qlfoln.h Thu Jul 3 15:34:42 2003
+@@ -0,0 +1,76 @@
++/******************************************************************************
++ * QLOGIC LINUX SOFTWARE
++ *
++ * QLogic ISP2x00 device driver for Linux 2.5.x
++ * Copyright (C) 2003 Qlogic Corporation
++ * (www.qlogic.com)
++ *
++ * This program is free software; you can redistribute it and/or modify it
++ * under the terms of the GNU General Public License as published by the
++ * Free Software Foundation; either version 2, or (at your option) any
++ * later version.
++ *
++ * This program is distributed in the hope that it will be useful, but
++ * WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ * General Public License for more details.
++ *
++ ******************************************************************************/
++
++
++#define QLMULTIPATH_MAGIC 'y'
++/********************************************************/
++/* Failover ioctl command codes range from 0xc0 to 0xdf */
++/********************************************************/
++
++
++#define FO_CC_GET_PARAMS_OS \
++ _IOWR(QLMULTIPATH_MAGIC, 200, sizeof(EXT_IOCTL)) /* 0xc8 */
++#define FO_CC_SET_PARAMS_OS \
++ _IOWR(QLMULTIPATH_MAGIC, 201, sizeof(EXT_IOCTL)) /* 0xc9 */
++#define FO_CC_GET_PATHS_OS \
++ _IOWR(QLMULTIPATH_MAGIC, 202, sizeof(EXT_IOCTL)) /* 0xca */
++#define FO_CC_SET_CURRENT_PATH_OS \
++ _IOWR(QLMULTIPATH_MAGIC, 203, sizeof(EXT_IOCTL)) /* 0xcb */
++#define FO_CC_GET_HBA_STAT_OS \
++ _IOWR(QLMULTIPATH_MAGIC, 204, sizeof(EXT_IOCTL)) /* 0xcc */
++#define FO_CC_RESET_HBA_STAT_OS \
++ _IOWR(QLMULTIPATH_MAGIC, 205, sizeof(EXT_IOCTL)) /* 0xcd */
++#define FO_CC_GET_LUN_DATA_OS \
++ _IOWR(QLMULTIPATH_MAGIC, 206, sizeof(EXT_IOCTL)) /* 0xce */
++#define FO_CC_SET_LUN_DATA_OS \
++ _IOWR(QLMULTIPATH_MAGIC, 207, sizeof(EXT_IOCTL)) /* 0xcf */
++#define FO_CC_GET_TARGET_DATA_OS \
++ _IOWR(QLMULTIPATH_MAGIC, 208, sizeof(EXT_IOCTL)) /* 0xd0 */
++#define FO_CC_SET_TARGET_DATA_OS \
++ _IOWR(QLMULTIPATH_MAGIC, 209, sizeof(EXT_IOCTL)) /* 0xd1 */
++#define FO_CC_GET_FO_DRIVER_VERSION_OS \
++ _IOWR(QLMULTIPATH_MAGIC, 210, sizeof(EXT_IOCTL)) /* 0xd2 */
++
++
++#define BOOLEAN uint8_t
++#define MAX_LUNS_OS 256
++
++/* Driver attributes bits */
++#define DRVR_FO_ENABLED 0x1 /* bit 0 */
++
++
++/*
++ * Overrides for Emacs so that we almost follow Linus's tabbing style.
++ * Emacs will notice this stuff at the end of the file and automatically
++ * adjust the settings for this buffer only. This must remain at the end
++ * of the file.
++ * ---------------------------------------------------------------------------
++ * Local variables:
++ * c-indent-level: 2
++ * c-brace-imaginary-offset: 0
++ * c-brace-offset: -2
++ * c-argdecl-indent: 2
++ * c-label-offset: -2
++ * c-continued-statement-offset: 2
++ * c-continued-brace-offset: 0
++ * indent-tabs-mode: nil
++ * tab-width: 8
++ * End:
++ */
++
+--- /dev/null Thu Apr 11 07:25:15 2002
++++ linux-2.5.73-n9560/drivers/scsi/qla2xxx/release.txt Thu Jul 3 15:34:42 2003
+@@ -0,0 +1,28 @@
++
++ QLogic QLA2200 and QLA2300 Linux Driver
++
++ Release Notes
++ =============
++
++Version 8.00.00b1 March 05, 2003
++
+++**********************************************+
++* Features supported by this version of driver *
+++**********************************************+
++o FCAL - direct attach
++o Point-to-point
++o Fabric support
++o Initiator mode only
++o Fault recovery on down loops
++o Persistent binding - HBA node name valid
++o Linux 2.5.x Kernel Support *ONLY*
++o IPFC support
++
+++********************************+
++* Changes From Previous Releases *
+++********************************+
++o Please view revision.notes file
++
+++**************+
++* Known Issues *
+++**************+
+--- /dev/null Thu Apr 11 07:25:15 2002
++++ linux-2.5.73-n9560/drivers/scsi/qla2xxx/revision.notes Thu Jul 3 15:34:42 2003
+@@ -0,0 +1,167 @@
++/*
++ * QLogic ISP2200 and ISP2300 Linux Driver Revision List File.
++ *
++ ********************************************************************
++ *
++ * Revision History
++ *
++ * Rev 8.00.00 May 05, 2003 AV
++ * - Resync with Linux Kernel 2.5.69.
++ * - Firmware versions: 2100 TP (1.19.24), 2200 TP (2.02.05),
++ * 2300 TPX (3.02.10).
++ *
++ * Rev 8.00.00b1-pre45 April ??, 2003 AV
++ * - Resync with Linux Kernel 2.5.68-bk11:
++ * - Fix improper return-code assignment during fabric
++ * discovery.
++ * - Remove additional extraneous #defines from
++ * qla_settings.h.
++ * - USE_PORTNAME -- FO will always use portname.
++ * - Default queue depth size set to 64.
++ *
++ * Rev 8.00.00b1-pre42 April ??, 2003 AV
++ * - Convert bottom-half tasklet to a work_queue.
++ * - Initial basic coding of dynamic queue depth handling
++ * during QUEUE FULL statuses.
++ * - Fix mailbox interface problem with
++ * qla2x00_get_retry_cnt().
++ *
++ * Rev 8.00.00b1-pre41 April ??, 2003 AV
++ * - Convert build defines qla2[1|2|3]00 macros to
++ * qla2[1|2|3]xx due to module name stringification clashes.
++ * - Add additional ISP2322 checks during board configuration.
++ *
++ * Rev 8.00.00b1-pre40 April ??, 2003 AV
++ * - Resync with Linux Kernel 2.5.68-bk8:
++ * - Updated IRQ handler interface.
++ * - Add ISP dump code (stub) in case of SYSTEM_ERROR on
++ * ISP2100.
++ * - Add new 2200 IP firmware (2.02.05).
++ *
++ * Rev 8.00.00b1-pre39 April ??, 2003 AV
++ * - Resync with Linux Kernel 2.5.68.
++ * - Add simple build.sh script to aid in external compilation.
++ * - Clean-break with Kernel 2.4 compatibility.
++ * - Rework DPC routine -- completion routines for signaling.
++ * - Re-add HBAAPI character device node for IOCTL support.
++ * - Remove residual QLA2X_PERFORMANCE defines.
++ * - Allocate SP pool via __get_free_pages() rather than
++ * individual kmalloc()'s.
++ * - Inform SCSI mid-layer of 16-byte CDB support
++ * (host->max_cmd_len):
++ * - Remove unecessary 'more_cdb' handling code from
++ * qla_iocb.c and qla_xioct.c.
++ * - Reduce duplicate code in fabric scanning logic (MS IOCB
++ * preparation).
++ * - Add ISP dump code in case of SYSTEM_ERROR.
++ * - Remove 2300 VIX firmware from distribution:
++ * - Add initial code for IPX support.
++ * - Add new 2300 TPX firmware (3.02.10).
++ *
++ * Rev 8.00.00b1-pre34 April ??, 2003 AV
++ * - Resync with Linux Kernel 2.5.67.
++ * - Use domain/area/al_pa fields when displaying PortID
++ * values -- addresses endianess issues.
++ * - Rework large case statement to check 'common' CDB commands
++ * early in qla2x00_get_cmd_direction().
++ *
++ * Rev 8.00.00b1-pre31 April ??, 2003 AV
++ * - Update makefile to support PPC64 build.
++ * - Retool NVRAM configuration routine and structures:
++ * - Consoldate ISP21xx/ISP22xx/ISP23xx configuration
++ * (struct nvram_t).
++ * - Remove big/little endian support structures in favor of
++ * simplified bit-operations within byte fields.
++ * - Fix long-standing 'static' buffer sharing problem in
++ * qla2x00_configure_fabric().
++ *
++ * Rev 8.00.00b1-pre30 April ??, 2003 AV
++ * - Complete implementation of GID_PT scan.
++ * - Use consistent MS IOCB invocation method to query SNS:
++ * - Add RNN_ID and RSNN_NN registrations in a fabric.
++ * - Remove unused Mailbox Command 6Eh (Send SNS) support
++ * structures.
++ * - Use 64bit safe IOCBs while issuing INQUIRY and RLC during
++ * topology scan.
++ * - Until reimplementation of fcdev_t/fcport list
++ * consolidation, valid loop_id ranges are still limited from
++ * 0x00 through 0xFF -- enforce this within the code.
++ *
++ * Rev 8.00.00b1-pre27 March ??, 2003 AV
++ * - Resync with 6.05.00b9.
++ * - Retool HBA PCI configuration -- qla2x00_pci_config().
++ * - Remove inconsistent use of delay routines (UDELAY/SYS*).
++ * - Continue to teardown/clean/add comments and debug
++ * routines.
++ * - Properly swap bytes of the device's nodename in
++ * qla2x00_configure_local_loop().
++ *
++ * Rev 8.00.00b1-pre25 March ??, 2003 AV
++ * - Resync with 6.05.00b8.
++ *
++ * Rev 8.00.00b1-pre23 March ??, 2003 AV
++ * - Remove (#define) IOCB usage throttling.
++ * - Abstract interrupt polling with qla2x00_poll().
++ * - Modify lun scanning logic:
++ * - If the device does not support the SCSI Report Luns
++ * command, the driver will now only scan from 0 to the
++ * max#-luns as defined in the NVRAM (BIOS), rather than
++ * blindly scanning from 0 to 255 -- which could result in
++ * an increase in startup time when running against slow
++ * (JBOD) devices.
++ * - Rework reset logic in qla2x00_reset_chip() (spec).
++ *
++ * Rev 8.00.00b1-pre22 March ??, 2003 AV
++ * - Resync with 6.05.00b7.
++ * - Cleanup (rewrite) ISR handler.
++ * - Rename kmem_zalloc --> qla2x00_kmem_zalloc():
++ * - This function will eventually be removed.
++ * - Add new 2300 VIX firmware (3.02.09):
++ * - Support for Tape, Fabric, 2K logins, IP, and VI.
++ *
++ * Rev 8.00.00b1-pre18 March ??, 2003 AV
++ * - Support 232x type ISPs.
++ * - Support single firmware for each ISP type:
++ * - Restructure brd_info/fw_info methods.
++ * - Streamline firmware load process.
++ * - Properly query firmware for version information.
++ * - Remove extraneous scsi_qla_host members:
++ * - device_id ==> pdev->device
++ * - Fix fc4 features (RFF_ID) registration.
++ * - Convert kmem_zalloc --> qla2x00_kmem_zalloc().
++ * - Remove unused/extraneous #defines (USE_PORTNAME).
++ *
++ * Rev 8.00.00b1-pre14 March ??, 2003 AV
++ * - Resync with 6.05.00b6.
++ * - Initial source-code restructuring effort.
++ * - Build procedure.
++ * - Source file layout -- intuitive component layout.
++ * - Remove unused #defines (*PERFORMANCE, WORD_FW_LOAD, etc).
++ * - Add support for 2K logins (TPX -- firmware).
++ * - Add module parameter ql2xsuspendcount.
++ * - Add new 2200 IP/TP firmware (2.02.04).
++ *
++ * Rev 8.00.00b1-pre9 March ??, 2003 RL/DG/RA/AV
++ * - Use kernel struct list_head for fcport and fclun lists.
++ * - Remove extraneous (L|M)S_64BITS() and QL21_64*() defines.
++ *
++ * Rev 8.00.00b1-pre8 February 28, 2003 RL/DG/RA/AV
++ * - Resync with 6.05.00b3.
++ *
++ * Rev 8.00.00b1-pre7 February 23, 2003 RL/DG/RA/AV
++ * - Add alternate fabric scanning logic (GID_PT/GNN_ID/GPN_ID).
++ * - Remove use of deprecated function check_region().
++ * - Add new 2300 IP/TP firmware (3.02.08).
++ *
++ * Rev 8.00.00b1-pre5 January 28, 2003 RL/DG/RA/AV
++ * - Resync with 6.05.00b3.
++ * - Consolidate device_reg structure definitions for ISP types.
++ * - Add support for new queue-depth selection.
++ * - Add new 2300 IP/TP firmware (3.02.07).
++ *
++ * Rev 8.00.00b1-pre1 January 17, 2003 AV
++ * - Initial branch from 6.04.00b8 driver.
++ * - Remove VMWARE specific code.
++ * - Add support for pci_driver interface.
++ *
++ ********************************************************************/
_