-/* $Id: advansys.c,v 1.69 1999/11/29 18:37:53 bobf Exp bobf $ */
-#define ASC_VERSION "3.2M" /* AdvanSys Driver Version */
+#define ASC_VERSION "3.3D" /* AdvanSys Driver Version */
/*
* advansys.c - Linux Host Driver for AdvanSys SCSI Adapters
*
- * Copyright (c) 1995-1999 Advanced System Products, Inc.
+ * Copyright (c) 1995-2000 Advanced System Products, Inc.
+ * Copyright (c) 2000 ConnectCom Solutions, Inc.
* All Rights Reserved.
*
* Redistribution and use in source and binary forms, with or without
* code retain the above copyright notice and this comment without
* modification.
*
+ * As of March 8, 2000 Advanced System Products, Inc. (AdvanSys)
+ * changed its name to name to ConnectCom Solutions, Inc.
+ *
* There is an AdvanSys Linux WWW page at:
+ * http://www.connectcom.net/downloads/software/os/linux.html
* http://www.advansys.com/linux.html
*
- * The latest version of the AdvanSys driver is available at:
+ * The latest released version of the AdvanSys driver is available at:
* ftp://ftp.advansys.com/pub/linux/linux.tgz
+ * ftp://ftp.connectcom.net/pub/linux/linux.tgz
*
* Please send questions, comments, bug reports to:
- * linux@advansys.com
+ * linux@connectcom.net or bfrey@turbolinux.com.cn
*/
/*
I. Release History
J. Known Problems/Fix List
K. Credits
- L. AdvanSys Contact Information
+ L. ConnectCom (AdvanSys) Contact Information
A. Linux Kernel Testing
- This driver has been tested in the following Linux kernels: v1.2.13,
- v1.3.57, v2.0.38, v2.2.13, and v2.3.28. These kernel versions are major
- releases of Linux or the latest Linux kernel versions available when
- this version of the driver was released. The driver should also work
- in earlier versions of the Linux kernel. Beginning with v1.3.58 the
- AdvanSys driver is included with all Linux kernels. Please refer to
- sections C, D, and E for instructions on adding or upgrading the
- AdvanSys driver. The driver is supported for x86 and alpha systems.
+ This driver has been tested in the following Linux kernels: v2.2.17
+ v2.4.0-test9. The driver should also work in earlier versions of the
+ Linux kernel. Beginning with v1.3.58 the AdvanSys driver was included
+ with all Linux kernels. Please refer to sections C, D, and E for
+ instructions on adding or upgrading the AdvanSys driver. The driver is
+ supported for x86 and alpha systems.
B. Adapters Supported by this Driver
adapter detected. The number of CDBs used by the driver can be
lowered in the BIOS by changing the 'Host Queue Size' adapter setting.
+ Laptop Products:
+ ABP-480 - Bus-Master CardBus (16 CDB) (2.4 kernel and greater)
+
Connectivity Products:
ABP510/5150 - Bus-Master ISA (240 CDB)
ABP5140 - Bus-Master ISA PnP (16 CDB)
ABP980U - Four Channel Bus-Master PCI Ultra (240 CDB Per Channel)
ABP980UA/3980UA - Four Channel Bus-Master PCI Ultra (16 CDB Per Chan.)
ABP3950U2W - Bus-Master PCI LVD/Ultra2-Wide and Ultra-Wide (253 CDB)
+ ABP3950U3W - Bus-Master PCI Dual LVD2/Ultra3-Wide (253 CDB)
C. Linux v1.2.X - Directions for Adding the AdvanSys Driver
1. Really fix bug in adv_get_sglist().
2. Incorporate v2.3.29 changes into driver.
+ 3.2N (4/1/00):
+ 1. Add CONFIG_ISA ifdef code.
+ 2. Include advansys_interrupts_enabled name change patch.
+ 3. For >= v2.3.28 use new SCSI error handling with new function
+ advansys_eh_bus_reset(). Don't include an abort function
+ because of base library limitations.
+ 4. For >= v2.3.28 use per board asc_lock instead of io_request_lock.
+ 5. For >= v2.3.28 eliminate advansys_command() and
+ advansys_command_done().
+ 6. Add some changes for PowerPC (Big Endian) support, but it isn't
+ working yet.
+ 7. Fix "nonexistent resource free" problem that occurred on a module
+ unload for boards with an I/O space >= 255. The 'n_io_port' field
+ is only one byte and can not be used to hold an ioport length more
+ than 255.
+
+ 3.3A (4/4/00):
+ 1. Update to Adv Library 5.8.
+ 2. For wide cards add support for CDBs up to 16 bytes.
+ 3. Eliminate warnings when CONFIG_PROC_FS is not defined.
+
+ 3.3B (5/1/00):
+ 1. Support for PowerPC (Big Endian) wide cards. Narrow cards
+ still need work.
+ 2. Change bitfields to shift and mask access for endian
+ portability.
+
+ 3.3C (10/13/00):
+ 1. Update for latest 2.4 kernel.
+ 2. Test ABP-480 CardBus support in 2.4 kernel - works!
+ 3. Update to Asc Library S123.
+ 4. Update to Adv Library 5.12.
+
+ 3.3D (11/22/00):
+ 1. Update for latest 2.4 kernel.
+ 2. Create patches for 2.2 and 2.4 kernels.
+
J. Known Problems/Fix List (XXX)
1. Need to add memory mapping workaround. Test the memory mapping.
has not occurred then print a message and run in polled mode.
3. Allow bus type scanning order to be changed.
4. Need to add support for target mode commands, cf. CAM XPT.
- 5 Need to add support for new Linux SCSI error handling method.
- 6. Need to fix sti/cli code in Asc Library.
- 7. Need to fix abort code in Adv Library.
- 8. Reduce io_request_lock hold time.
+ 5. Add PowerPC (Big Endian) support for narrow cards.
K. Credits
+ Bob Frey <bfrey@turbolinux.com.cn> wrote the AdvanSys SCSI driver.
+ I no longer work for AdvanSys, but continue to maintain and support
+ the driver.
+
Nathan Hartwell <mage@cdc3.cdc.net> provided the directions and
basis for the Linux v1.3.X changes which were included in the
1.2 release.
support in the 3.1A driver.
Doug Gilbert <dgilbert@interlog.com> has made changes and
- suggestions to improve the driver and done testing.
+ suggestions to improve the driver and done a lot of testing.
Ken Mort <ken@mort.net> reported a DEBUG compile bug fixed
in 3.2K.
- L. AdvanSys Contact Information
+ Tom Rini <trini@kernel.crashing.org> provided the CONFIG_ISA
+ patch and helped with PowerPC support.
+
+ Philip Blundell <philip.blundell@pobox.com> provided an
+ advansys_interrupts_enabled patch.
+
+ Dave Jones <dave@denial.force9.co.uk> reported the compiler
+ warnings generated when CONFIG_PROC_FS was not defined in
+ the 3.2M driver.
+
+ Jerry Quinn <jlquinn@us.ibm.com> fixed PowerPC support (endian
+ problems) for wide cards.
+
+ L. ConnectCom (AdvanSys) Contact Information
- Mail: Advanced System Products, Inc.
+ Mail: ConnectCom Solutions, Inc.
1150 Ringwood Court
San Jose, CA 95131
Operator/Sales: 1-408-383-9400
FAX: 1-408-383-9612
Tech Support: 1-408-467-2930
- Tech Support E-Mail: support@advansys.com
- FTP Site: ftp.advansys.com (login: anonymous)
- Web Site: http://www.advansys.com
+ Tech Support E-Mail: support@connectcom.net
+ FTP Site: ftp.connectcom.net (login: anonymous)
+ Web Site: http://www.connectcom.net
*/
#include <linux/module.h>
#endif /* MODULE */
#endif /* version >= v1.3.0 */
+
+#if LINUX_VERSION_CODE >= ASC_LINUX_VERSION(2,2,0)
+#if defined(CONFIG_X86) && !defined(CONFIG_ISA)
+#define CONFIG_ISA
+#endif /* CONFIG_X86 && !CONFIG_ISA */
+#else /* version < 2.2.0 */
+#define CONFIG_ISA
+#endif /* version < 2.2.0 */
+
#include <linux/string.h>
#include <linux/sched.h>
#include <linux/kernel.h>
#define ASC_LIB_VERSION_MAJOR 1
#define ASC_LIB_VERSION_MINOR 24
-#define ASC_LIB_SERIAL_NUMBER 121
+#define ASC_LIB_SERIAL_NUMBER 123
/*
* Portable Data Types
ASC_SCSI_BIT_ID_TYPE cmd_qng_enabled;
ASC_SCSI_BIT_ID_TYPE disc_enable;
ASC_SCSI_BIT_ID_TYPE sdtr_enable;
- uchar chip_scsi_id:4;
- uchar isa_dma_speed:4;
+ uchar chip_scsi_id;
+ uchar isa_dma_speed;
uchar isa_dma_channel;
uchar chip_version;
ushort pci_device_id;
#define ASC_MAX_INIT_BUSY_RETRY 8
#define ASC_EEP_ISA_PNP_WSIZE 16
+/*
+ * This struct is filled in by reading ushorts from the board in
+ * order. Therefore, order of fields matters.
+ * ASCEEP_Config_Field_IsChar indicates when a ushort actually
+ * contains two chars. On big_endian machines, the byte-swap needs to
+ * be undone to put the chars in order. When an entry in
+ * ASCEEP_Config_Field_IsChar is 1, it indicates that the swap is
+ * needed.
+ */
+
+/*
+ * These macros allow us to keep the chip scsi id and isa dma speed
+ * bitfields in board order. C bitfields aren't portable across
+ * endianness.
+ */
+
+#define ASC_EEP_GET_CHIP_ID(cfg) ((cfg)->id_speed & 0x0f)
+#define ASC_EEP_GET_DMA_SPD(cfg) (((cfg)->id_speed & 0xf0) >> 4)
+#define ASC_EEP_SET_CHIP_ID(cfg, sid) \
+ ((cfg)->id_speed = ((cfg)->id_speed & 0xf0) | ((sid) & ASC_MAX_TID))
+#define ASC_EEP_SET_DMA_SPD(cfg, spd) \
+ ((cfg)->id_speed = ((cfg)->id_speed & 0x0f) | ((spd) & 0x0f) << 4)
+
typedef struct asceep_config {
ushort cfg_lsw;
ushort cfg_msw;
uchar bios_scan;
uchar power_up_wait;
uchar no_scam;
- uchar chip_scsi_id:4;
- uchar isa_dma_speed:4;
+ uchar id_speed; /* low order 4 bits is chip scsi id */
+ /* high order 4 bits is isa dma speed */
uchar dos_int13_table[ASC_MAX_TID + 1];
uchar adapter_info[6];
ushort cntl;
ushort chksum;
} ASCEEP_CONFIG;
+STATIC ASCEEP_CONFIG ASCEEP_Config_Field_IsChar = {
+ 0, /* cfg_lsw */
+ 0, /* cfg_msw */
+ 1, /* init_sdtr */
+ 1, /* disc_enable */
+ 1, /* use_cmd_qng */
+ 1, /* start_motor */
+ 1, /* max_total_qng */
+ 1, /* max_tag_qng */
+ 1, /* bios_scan */
+ 1, /* power_up_wait */
+ 1, /* no_scam */
+ 1, /* id_speed */
+ { 1,1,1,1,1,1,1,1 }, /* dos_int13_table[ASC_MAX_TID + 1] */
+ { 1,1,1,1,1,1 }, /* adapter_info[6] */
+ 0, /* cntl */
+ 0, /* chksum */
+};
+
#define ASC_PCI_CFG_LSW_SCSI_PARITY 0x0800
#define ASC_PCI_CFG_LSW_BURST_MODE 0x0080
#define ASC_PCI_CFG_LSW_INTR_ABLE 0x0020
STATIC void AscEnableInterrupt(PortAddr);
STATIC void AscSetBank(PortAddr, uchar);
STATIC int AscResetChipAndScsiBus(ASC_DVC_VAR *);
+#ifdef CONFIG_ISA
STATIC ushort AscGetIsaDmaChannel(PortAddr);
STATIC ushort AscSetIsaDmaChannel(PortAddr, ushort);
STATIC uchar AscSetIsaDmaSpeed(PortAddr, uchar);
STATIC uchar AscGetIsaDmaSpeed(PortAddr);
+#endif /* CONFIG_ISA */
STATIC uchar AscReadLramByte(PortAddr, ushort);
STATIC ushort AscReadLramWord(PortAddr, ushort);
STATIC ASC_DCNT AscReadLramDWord(PortAddr, ushort);
STATIC uchar AscGetSynPeriodIndex(ASC_DVC_VAR *, uchar);
STATIC uchar AscAllocFreeQueue(PortAddr, uchar);
STATIC uchar AscAllocMultipleFreeQueue(PortAddr, uchar, uchar);
+#if LINUX_VERSION_CODE < ASC_LINUX_VERSION(2,3,28)
STATIC int AscRiscHaltedAbortSRB(ASC_DVC_VAR *, ASC_DCNT);
#if LINUX_VERSION_CODE >= ASC_LINUX_VERSION(1,3,89)
STATIC int AscRiscHaltedAbortTIX(ASC_DVC_VAR *, uchar);
#endif /* version >= v1.3.89 */
+#endif /* version < v2.3.28 */
STATIC int AscHostReqRiscHalt(PortAddr);
STATIC int AscStopQueueExe(PortAddr);
STATIC int AscStartQueueExe(PortAddr);
+#if LINUX_VERSION_CODE < ASC_LINUX_VERSION(2,3,28)
#if LINUX_VERSION_CODE >= ASC_LINUX_VERSION(1,3,89)
STATIC int AscCleanUpDiscQueue(PortAddr);
#endif /* version >= v1.3.89 */
STATIC int AscCleanUpBusyQueue(PortAddr);
+#endif /* version < v2.3.28 */
STATIC int AscWaitTixISRDone(ASC_DVC_VAR *, uchar);
STATIC int AscWaitISRDone(ASC_DVC_VAR *);
STATIC ASC_PADDR AscGetOnePhyAddr(ASC_DVC_VAR *, uchar *,
STATIC int AscReInitLram(ASC_DVC_VAR *);
STATIC ushort AscInitQLinkVar(ASC_DVC_VAR *);
STATIC int AscSetLibErrorCode(ASC_DVC_VAR *, ushort);
-#if LINUX_VERSION_CODE >= ASC_LINUX_VERSION(1,3,89)
+#if LINUX_VERSION_CODE >= ASC_LINUX_VERSION(1,3,89) && \
+ LINUX_VERSION_CODE < ASC_LINUX_VERSION(2,3,28)
STATIC int _AscWaitQDone(PortAddr, ASC_SCSI_Q *);
-#endif /* version >= v1.3.89 */
+#endif /* version >= v1.3.89 && version < v2.3.28 */
STATIC int AscIsrChipHalted(ASC_DVC_VAR *);
STATIC uchar _AscCopyLramScsiDoneQ(PortAddr, ushort,
ASC_QDONE_INFO *, ASC_DCNT);
STATIC int AscIsrQDone(ASC_DVC_VAR *);
STATIC int AscCompareString(uchar *, uchar *, int);
+#ifdef CONFIG_ISA
STATIC ushort AscGetEisaChipCfg(PortAddr);
STATIC ASC_DCNT AscGetEisaProductID(PortAddr);
STATIC PortAddr AscSearchIOPortAddrEISA(PortAddr);
+STATIC PortAddr AscSearchIOPortAddr11(PortAddr);
+STATIC PortAddr AscSearchIOPortAddr(PortAddr, ushort);
+STATIC void AscSetISAPNPWaitForKey(void);
+#endif /* CONFIG_ISA */
STATIC uchar AscGetChipScsiCtrl(PortAddr);
STATIC uchar AscSetChipScsiID(PortAddr, uchar);
STATIC uchar AscGetChipVersion(PortAddr, ushort);
STATIC ushort AscGetChipBusType(PortAddr);
STATIC ASC_DCNT AscLoadMicroCode(PortAddr, ushort, ushort *, ushort);
STATIC int AscFindSignature(PortAddr);
-STATIC PortAddr AscSearchIOPortAddr11(PortAddr);
STATIC void AscToggleIRQAct(PortAddr);
-STATIC void AscSetISAPNPWaitForKey(void);
STATIC uchar AscGetChipIRQ(PortAddr, ushort);
STATIC uchar AscSetChipIRQ(PortAddr, uchar, ushort);
STATIC ushort AscGetChipBiosAddress(PortAddr, ushort);
ASC_DCNT, ASC_SG_HEAD *);
STATIC void DvcPutScsiQ(PortAddr, ushort, ushort *, int);
STATIC void DvcGetQinfo(PortAddr, ushort, ushort *, int);
-STATIC PortAddr AscSearchIOPortAddr(PortAddr, ushort);
STATIC ushort AscInitGetConfig(ASC_DVC_VAR *);
STATIC ushort AscInitSetConfig(ASC_DVC_VAR *);
STATIC ushort AscInitAsc1000Driver(ASC_DVC_VAR *);
STATIC uint AscGetNumOfFreeQueue(ASC_DVC_VAR *, uchar,
uchar);
STATIC int AscSgListToQueue(int);
+#if LINUX_VERSION_CODE < ASC_LINUX_VERSION(2,3,28)
STATIC int AscAbortSRB(ASC_DVC_VAR *, ASC_VADDR);
#if LINUX_VERSION_CODE >= ASC_LINUX_VERSION(1,3,89)
STATIC int AscResetDevice(ASC_DVC_VAR *, uchar);
#endif /* version >= v1.3.89 */
+#endif /* version < v2.3.28 */
STATIC int AscResetSB(ASC_DVC_VAR *);
+#ifdef CONFIG_ISA
STATIC void AscEnableIsaDma(uchar);
+#endif /* CONFIG_ISA */
STATIC ASC_DCNT AscGetMaxDmaCount(ushort);
*/
#define ADV_LIB_VERSION_MAJOR 5
-#define ADV_LIB_VERSION_MINOR 5
+#define ADV_LIB_VERSION_MINOR 12
/* d_os_dep.h */
#define ADV_OS_LINUX
#define ADV_MEM_READW(addr) readw(addr)
#define ADV_MEM_WRITEB(addr, byte) writeb(byte, addr)
#define ADV_MEM_WRITEW(addr, word) writew(word, addr)
+#define ADV_MEM_WRITEDW(addr, dword) writel(dword, addr)
/*
* The I/O memory mapping function names changed in 2.1.X.
#define ADV_CARRIER_COUNT (ASC_DEF_MAX_HOST_QNG + 15)
+/*
+ * For wide boards a CDB length maximum of 16 bytes
+ * is supported.
+ */
+#define ADV_MAX_CDB_LEN 16
+
/*
* Define total number of simultaneous maximum element scatter-gather
* request blocks per wide adapter. ASC_DEF_MAX_HOST_QNG (253) is the
*/
#define ADV_EEPROM_TERM_POL 0x2000 /* EEPROM Bit 13 */
#define ADV_EEPROM_CIS_LD 0x2000 /* EEPROM Bit 13 */
+/*
+ * ASC38C1600 Bit 11
+ *
+ * If EEPROM Bit 11 is 0 for Function 0, then Function 0 will specify
+ * INT A in the PCI Configuration Space Int Pin field. If it is 1, then
+ * Function 0 will specify INT B.
+ *
+ * If EEPROM Bit 11 is 0 for Function 1, then Function 1 will specify
+ * INT B in the PCI Configuration Space Int Pin field. If it is 1, then
+ * Function 1 will specify INT A.
+ */
+#define ADV_EEPROM_INTAB 0x0800 /* EEPROM Bit 11 */
typedef struct adveep_3550_config
{
uchar reserved1; /* reserved byte (not used) */
ushort bios_ctrl; /* 12 BIOS control bits */
- /* bit 0 set: BIOS don't act as initiator. */
- /* bit 1 set: BIOS > 1 GB support */
- /* bit 2 set: BIOS > 2 Disk Support */
- /* bit 3 set: BIOS don't support removables */
- /* bit 4 set: BIOS support bootable CD */
- /* bit 5 set: */
- /* bit 6 set: BIOS support multiple LUNs */
- /* bit 7 set: BIOS display of message */
- /* bit 8 set: */
- /* bit 9 set: Reset SCSI bus during init. */
- /* bit 10 set: */
- /* bit 11 set: No verbose initialization. */
- /* bit 12 set: SCSI parity enabled */
- /* bit 13 set: */
- /* bit 14 set: */
- /* bit 15 set: */
+ /* bit 0 BIOS don't act as initiator. */
+ /* bit 1 BIOS > 1 GB support */
+ /* bit 2 BIOS > 2 Disk Support */
+ /* bit 3 BIOS don't support removables */
+ /* bit 4 BIOS support bootable CD */
+ /* bit 5 BIOS scan enabled */
+ /* bit 6 BIOS support multiple LUNs */
+ /* bit 7 BIOS display of message */
+ /* bit 8 SCAM disabled */
+ /* bit 9 Reset SCSI bus during init. */
+ /* bit 10 */
+ /* bit 11 No verbose initialization. */
+ /* bit 12 SCSI parity enabled */
+ /* bit 13 */
+ /* bit 14 */
+ /* bit 15 */
ushort ultra_able; /* 13 ULTRA speed able */
ushort reserved2; /* 14 reserved */
uchar max_host_qng; /* 15 maximum host queuing */
/* There is no low on / high off */
ushort bios_ctrl; /* 12 BIOS control bits */
- /* bit 0 set: BIOS don't act as initiator. */
- /* bit 1 set: BIOS > 1 GB support */
- /* bit 2 set: BIOS > 2 Disk Support */
- /* bit 3 set: BIOS don't support removables */
- /* bit 4 set: BIOS support bootable CD */
- /* bit 5 set: BIOS scan enabled */
- /* bit 6 set: BIOS support multiple LUNs */
- /* bit 7 set: BIOS display of message */
- /* bit 8 set: */
- /* bit 9 set: Reset SCSI bus during init. */
- /* bit 10 set: */
- /* bit 11 set: No verbose initialization. */
- /* bit 12 set: SCSI parity enabled */
- /* bit 13 set: */
- /* bit 14 set: */
- /* bit 15 set: */
+ /* bit 0 BIOS don't act as initiator. */
+ /* bit 1 BIOS > 1 GB support */
+ /* bit 2 BIOS > 2 Disk Support */
+ /* bit 3 BIOS don't support removables */
+ /* bit 4 BIOS support bootable CD */
+ /* bit 5 BIOS scan enabled */
+ /* bit 6 BIOS support multiple LUNs */
+ /* bit 7 BIOS display of message */
+ /* bit 8 SCAM disabled */
+ /* bit 9 Reset SCSI bus during init. */
+ /* bit 10 */
+ /* bit 11 No verbose initialization. */
+ /* bit 12 SCSI parity enabled */
+ /* bit 13 */
+ /* bit 14 */
+ /* bit 15 */
ushort sdtr_speed2; /* 13 SDTR speed TID 4-7 */
ushort sdtr_speed3; /* 14 SDTR speed TID 8-11 */
uchar max_host_qng; /* 15 maximum host queueing */
ushort reserved63; /* 63 reserved */
} ADVEEP_38C0800_CONFIG;
+typedef struct adveep_38C1600_config
+{
+ /* Word Offset, Description */
+
+ ushort cfg_lsw; /* 00 power up initialization */
+ /* bit 11 set - Func. 0 INTB, Func. 1 INTA */
+ /* clear - Func. 0 INTA, Func. 1 INTB */
+ /* bit 13 set - Load CIS */
+ /* bit 14 set - BIOS Enable */
+ /* bit 15 set - Big Endian Mode */
+ ushort cfg_msw; /* 01 unused */
+ ushort disc_enable; /* 02 disconnect enable */
+ ushort wdtr_able; /* 03 Wide DTR able */
+ ushort sdtr_speed1; /* 04 SDTR Speed TID 0-3 */
+ ushort start_motor; /* 05 send start up motor */
+ ushort tagqng_able; /* 06 tag queuing able */
+ ushort bios_scan; /* 07 BIOS device control */
+ ushort scam_tolerant; /* 08 no scam */
+
+ uchar adapter_scsi_id; /* 09 Host Adapter ID */
+ uchar bios_boot_delay; /* power up wait */
+
+ uchar scsi_reset_delay; /* 10 reset delay */
+ uchar bios_id_lun; /* first boot device scsi id & lun */
+ /* high nibble is lun */
+ /* low nibble is scsi id */
+
+ uchar termination_se; /* 11 0 - automatic */
+ /* 1 - low off / high off */
+ /* 2 - low off / high on */
+ /* 3 - low on / high on */
+ /* There is no low on / high off */
+
+ uchar termination_lvd; /* 11 0 - automatic */
+ /* 1 - low off / high off */
+ /* 2 - low off / high on */
+ /* 3 - low on / high on */
+ /* There is no low on / high off */
+
+ ushort bios_ctrl; /* 12 BIOS control bits */
+ /* bit 0 BIOS don't act as initiator. */
+ /* bit 1 BIOS > 1 GB support */
+ /* bit 2 BIOS > 2 Disk Support */
+ /* bit 3 BIOS don't support removables */
+ /* bit 4 BIOS support bootable CD */
+ /* bit 5 BIOS scan enabled */
+ /* bit 6 BIOS support multiple LUNs */
+ /* bit 7 BIOS display of message */
+ /* bit 8 SCAM disabled */
+ /* bit 9 Reset SCSI bus during init. */
+ /* bit 10 Basic Integrity Checking disabled */
+ /* bit 11 No verbose initialization. */
+ /* bit 12 SCSI parity enabled */
+ /* bit 13 AIPP (Asyn. Info. Ph. Prot.) dis. */
+ /* bit 14 */
+ /* bit 15 */
+ ushort sdtr_speed2; /* 13 SDTR speed TID 4-7 */
+ ushort sdtr_speed3; /* 14 SDTR speed TID 8-11 */
+ uchar max_host_qng; /* 15 maximum host queueing */
+ uchar max_dvc_qng; /* maximum per device queuing */
+ ushort dvc_cntl; /* 16 control bit for driver */
+ ushort sdtr_speed4; /* 17 SDTR speed 4 TID 12-15 */
+ ushort serial_number_word1; /* 18 Board serial number word 1 */
+ ushort serial_number_word2; /* 19 Board serial number word 2 */
+ ushort serial_number_word3; /* 20 Board serial number word 3 */
+ ushort check_sum; /* 21 EEP check sum */
+ uchar oem_name[16]; /* 22 OEM name */
+ ushort dvc_err_code; /* 30 last device driver error code */
+ ushort adv_err_code; /* 31 last uc and Adv Lib error code */
+ ushort adv_err_addr; /* 32 last uc error address */
+ ushort saved_dvc_err_code; /* 33 saved last dev. driver error code */
+ ushort saved_adv_err_code; /* 34 saved last uc and Adv Lib error code */
+ ushort saved_adv_err_addr; /* 35 saved last uc error address */
+ ushort reserved36; /* 36 reserved */
+ ushort reserved37; /* 37 reserved */
+ ushort reserved38; /* 38 reserved */
+ ushort reserved39; /* 39 reserved */
+ ushort reserved40; /* 40 reserved */
+ ushort reserved41; /* 41 reserved */
+ ushort reserved42; /* 42 reserved */
+ ushort reserved43; /* 43 reserved */
+ ushort reserved44; /* 44 reserved */
+ ushort reserved45; /* 45 reserved */
+ ushort reserved46; /* 46 reserved */
+ ushort reserved47; /* 47 reserved */
+ ushort reserved48; /* 48 reserved */
+ ushort reserved49; /* 49 reserved */
+ ushort reserved50; /* 50 reserved */
+ ushort reserved51; /* 51 reserved */
+ ushort reserved52; /* 52 reserved */
+ ushort reserved53; /* 53 reserved */
+ ushort reserved54; /* 54 reserved */
+ ushort reserved55; /* 55 reserved */
+ ushort cisptr_lsw; /* 56 CIS PTR LSW */
+ ushort cisprt_msw; /* 57 CIS PTR MSW */
+ ushort subsysvid; /* 58 SubSystem Vendor ID */
+ ushort subsysid; /* 59 SubSystem ID */
+ ushort reserved60; /* 60 reserved */
+ ushort reserved61; /* 61 reserved */
+ ushort reserved62; /* 62 reserved */
+ ushort reserved63; /* 63 reserved */
+} ADVEEP_38C1600_CONFIG;
+
/*
* EEPROM Commands
*/
#define BIOS_CTRL_RESET_SCSI_BUS 0x0200
#define BIOS_CTRL_INIT_VERBOSE 0x0800
#define BIOS_CTRL_SCSI_PARITY 0x1000
+#define BIOS_CTRL_AIPP_DIS 0x2000
#define ADV_3550_MEMSIZE 0x2000 /* 8 KB Internal Memory */
#define ADV_3550_IOLEN 0x40 /* I/O Port Range in bytes */
#define ADV_38C0800_MEMSIZE 0x4000 /* 16 KB Internal Memory */
#define ADV_38C0800_IOLEN 0x100 /* I/O Port Range in bytes */
-#define ADV_38C1600_MEMSIZE 0x4000 /* 16 KB Internal Memory */
+/*
+ *
+ * XXX - Since ASC38C1600 Rev.3 has a Local RAM failure issue, we come out
+ * a special 16K Adv Library and Microcode version. After the issue resolved,
+ * we should turn back to the 32K support. Both a_init.c and mcode.sas files
+ * also need to be updated.
+ *
+ * #define ADV_38C1600_MEMSIZE 0x8000L * 32 KB Internal Memory *
+ */
+#define ADV_38C1600_MEMSIZE 0x4000 /* 16 KB Internal Memory */
#define ADV_38C1600_IOLEN 0x100 /* I/O Port Range 256 bytes */
#define ADV_38C1600_MEMLEN 0x1000 /* Memory Range 4KB bytes */
/*
* Addendum for ASC-38C0800 Chip
+ *
+ * The ASC-38C1600 Chip uses the same definitions except that the
+ * bus mode override bits [12:10] have been moved to byte register
+ * offset 0xE (IOPB_SOFT_OVER_WR) bits [12:10]. The [12:10] bits in
+ * SCSI_CFG1 are read-only and always available. Bit 14 (DIS_TERM_DRV)
+ * is not needed. The [12:10] bits in IOPB_SOFT_OVER_WR are write-only.
+ * Also each ASC-38C1600 function or channel uses only cable bits [5:4]
+ * and [1:0]. Bits [14], [7:6], [3:2] are unused.
*/
#define DIS_TERM_DRV 0x4000 /* 1: Read c_det[3:0], 0: cannot read */
#define HVD_LVD_SE 0x1C00 /* Device Detect Bits */
#define PRE_TEST_VALUE 0x05
#define NORMAL_VALUE 0x00
+/*
+ * ASC38C1600 Definitions
+ *
+ * IOPB_PCI_INT_CFG Bit Field Definitions
+ */
+
+#define INTAB_LD 0x80 /* Value loaded from EEPROM Bit 11. */
+
+/*
+ * Bit 1 can be set to change the interrupt for the Function to operate in
+ * Totem Pole mode. By default Bit 1 is 0 and the interrupt operates in
+ * Open Drain mode. Both functions of the ASC38C1600 must be set to the same
+ * mode, otherwise the operating mode is undefined.
+ */
+#define TOTEMPOLE 0x02
+
+/*
+ * Bit 0 can be used to change the Int Pin for the Function. The value is
+ * 0 by default for both Functions with Function 0 using INT A and Function
+ * B using INT B. For Function 0 if set, INT B is used. For Function 1 if set,
+ * INT A is used.
+ *
+ * EEPROM Word 0 Bit 11 for each Function may change the initial Int Pin
+ * value specified in the PCI Configuration Space.
+ */
+#define INTAB 0x01
+
/* a_advlib.h */
/*
#define ASC_MC_CAM_MODE_MASK 0x015E /* CAM mode TID bitmask. */
#define ASC_MC_ICQ 0x0160
#define ASC_MC_IRQ 0x0164
+#define ASC_MC_PPR_ABLE 0x017A
/*
* BIOS LRAM variable absolute offsets.
* and handled by the microcode.
*/
#define CONTROL_FLAG_IGNORE_PERR 0x0001 /* Ignore DMA Parity Errors */
+#define CONTROL_FLAG_ENABLE_AIPP 0x0002 /* Enabled AIPP checking. */
/*
* ASC_MC_DEVICE_HSHK_CFG_TABLE microcode table or HSHK_CFG register format
#define ASC_QSC_HEAD_TAG 0x40 /* Use Head Tag Message (0x21). */
#define ASC_QSC_ORDERED_TAG 0x80 /* Use Ordered Tag Message (0x22). */
+/*
+ * All fields here are accessed by the board microcode and need to be
+ * little-endian.
+ */
typedef struct adv_carr_t
{
ADV_VADDR carr_va; /* Carrier Virtual Address */
#define ASC_NEXT_VPA_MASK 0xFFFFFFF0
#define ASC_RQ_DONE 0x00000001
+#define ASC_RQ_GOOD 0x00000002
#define ASC_CQ_STOPPER 0x00000000
#define ASC_GET_CARRP(carrp) ((carrp) & ASC_NEXT_VPA_MASK)
ushort sdtr_speed3; /* EEPROM SDTR Speed for TID 8-11 */
ushort sdtr_speed4; /* EEPROM SDTR Speed for TID 12-15 */
ushort tagqng_able; /* try tagged queuing with a device */
+ ushort ppr_able; /* PPR message capable per TID bitmask. */
uchar max_dvc_qng; /* maximum number of tagged commands per device */
ushort start_motor; /* start motor command allowed */
uchar scsi_reset_wait; /* delay in seconds after scsi bus reset */
* The microcode makes assumptions about the size and ordering of fields
* in this structure. Do not change the structure definition here without
* coordinating the change with the microcode.
+ *
+ * All fields accessed by microcode must be maintained in little_endian
+ * order.
*/
typedef struct adv_scsi_req_q {
uchar cntl; /* Ucode flags and state (ASC_MC_QC_*). */
ADV_PADDR carr_pa;
uchar mflag;
uchar sense_len;
- uchar cdb_len; /* SCSI CDB length. */
+ uchar cdb_len; /* SCSI CDB length. Must <= 16 bytes. */
uchar scsi_cntl;
uchar done_status; /* Completion status. */
uchar scsi_status; /* SCSI status byte. */
uchar host_status; /* Ucode host status. */
uchar sg_working_ix;
- uchar cdb[12]; /* SCSI command block. */
+ uchar cdb[12]; /* SCSI CDB bytes 0-11. */
ADV_PADDR sg_real_addr; /* SG list physical address. */
ADV_PADDR scsiq_rptr;
- ADV_DCNT sg_working_data_cnt;
+ uchar cdb16[4]; /* SCSI CDB bytes 12-15. */
ADV_VADDR scsiq_ptr;
ADV_VADDR carr_va;
/*
ADV_SG_BLOCK *sg_list_ptr; /* SG list virtual address. */
char *vdata_addr; /* Data buffer virtual address. */
uchar a_flag;
+ uchar pad[2]; /* Pad out to a word boundary. */
} ADV_SCSI_REQ_Q;
/*
#define ADV_ASYNC_RDMA_FAILURE 0x01 /* Fatal RDMA failure. */
#define ADV_ASYNC_SCSI_BUS_RESET_DET 0x02 /* Detected SCSI Bus Reset. */
#define ADV_ASYNC_CARRIER_READY_FAILURE 0x03 /* Carrier Ready failure. */
+#define ADV_RDMA_IN_CARR_AND_Q_INVALID 0x04 /* RDMAed-in data invalid. */
+
#define ADV_HOST_SCSI_BUS_RESET 0x80 /* Host Initiated SCSI Bus Reset. */
STATIC int AdvInitGetConfig(ADV_DVC_VAR *);
STATIC int AdvInitAsc3550Driver(ADV_DVC_VAR *);
STATIC int AdvInitAsc38C0800Driver(ADV_DVC_VAR *);
+STATIC int AdvInitAsc38C1600Driver(ADV_DVC_VAR *);
STATIC int AdvResetChipAndSB(ADV_DVC_VAR *);
STATIC int AdvResetSB(ADV_DVC_VAR *asc_dvc);
STATIC void AdvInquiryHandling(ADV_DVC_VAR *, ADV_SCSI_REQ_Q *);
STATIC int AdvInitFrom3550EEP(ADV_DVC_VAR *);
STATIC int AdvInitFrom38C0800EEP(ADV_DVC_VAR *);
+STATIC int AdvInitFrom38C1600EEP(ADV_DVC_VAR *);
STATIC ushort AdvGet3550EEPConfig(AdvPortAddr, ADVEEP_3550_CONFIG *);
STATIC void AdvSet3550EEPConfig(AdvPortAddr, ADVEEP_3550_CONFIG *);
STATIC ushort AdvGet38C0800EEPConfig(AdvPortAddr, ADVEEP_38C0800_CONFIG *);
STATIC void AdvSet38C0800EEPConfig(AdvPortAddr, ADVEEP_38C0800_CONFIG *);
+STATIC ushort AdvGet38C1600EEPConfig(AdvPortAddr, ADVEEP_38C1600_CONFIG *);
+STATIC void AdvSet38C1600EEPConfig(AdvPortAddr, ADVEEP_38C1600_CONFIG *);
STATIC void AdvWaitEEPCmd(AdvPortAddr);
STATIC ushort AdvReadEEPWord(AdvPortAddr, int);
/* Read word (2 bytes) from a register. */
#define AdvReadWordRegister(iop_base, reg_off) \
- le16_to_cpu(ADV_MEM_READW((iop_base) + (reg_off)))
+ (ADV_MEM_READW((iop_base) + (reg_off)))
/* Write word (2 bytes) to a register. */
#define AdvWriteWordRegister(iop_base, reg_off, word) \
- (ADV_MEM_WRITEW((iop_base) + (reg_off), cpu_to_le16(word)))
+ (ADV_MEM_WRITEW((iop_base) + (reg_off), (word)))
+
+/* Write dword (4 bytes) to a register. */
+#define AdvWriteDWordRegister(iop_base, reg_off, dword) \
+ (ADV_MEM_WRITEDW((iop_base) + (reg_off), (dword)))
/* Read byte from LRAM. */
#define AdvReadByteLram(iop_base, addr, byte) \
#define AdvReadWordLram(iop_base, addr, word) \
do { \
ADV_MEM_WRITEW((iop_base) + IOPW_RAM_ADDR, (addr)); \
- (word) = le16_to_cpu(ADV_MEM_READW((iop_base) + IOPW_RAM_DATA)); \
+ (word) = (ADV_MEM_READW((iop_base) + IOPW_RAM_DATA)); \
} while (0)
/* Write word (2 bytes) to LRAM. */
#define AdvWriteWordLram(iop_base, addr, word) \
(ADV_MEM_WRITEW((iop_base) + IOPW_RAM_ADDR, (addr)), \
- ADV_MEM_WRITEW((iop_base) + IOPW_RAM_DATA, cpu_to_le16(word)))
+ ADV_MEM_WRITEW((iop_base) + IOPW_RAM_DATA, (word)))
/* Write double word (4 bytes) to LRAM */
/* Because of unspecified C language ordering don't use auto-increment. */
#define AdvWriteDWordLram(iop_base, addr, dword) \
((ADV_MEM_WRITEW((iop_base) + IOPW_RAM_ADDR, (addr)), \
ADV_MEM_WRITEW((iop_base) + IOPW_RAM_DATA, \
- cpu_to_le16((ushort) ((dword) & 0xFFFF)))), \
+ ((ushort) ((dword) & 0xFFFF)))), \
(ADV_MEM_WRITEW((iop_base) + IOPW_RAM_ADDR, (addr) + 2), \
ADV_MEM_WRITEW((iop_base) + IOPW_RAM_DATA, \
- cpu_to_le16((ushort) ((dword >> 16) & 0xFFFF)))))
+ ((ushort) ((dword >> 16) & 0xFFFF)))))
/* Read word (2 bytes) from LRAM assuming that the address is already set. */
#define AdvReadWordAutoIncLram(iop_base) \
- le16_to_cpu(ADV_MEM_READW((iop_base) + IOPW_RAM_DATA))
+ (ADV_MEM_READW((iop_base) + IOPW_RAM_DATA))
/* Write word (2 bytes) to LRAM assuming that the address is already set. */
#define AdvWriteWordAutoIncLram(iop_base, word) \
- (ADV_MEM_WRITEW((iop_base) + IOPW_RAM_DATA, cpu_to_le16(word)))
+ (ADV_MEM_WRITEW((iop_base) + IOPW_RAM_DATA, (word)))
#endif /* version >= v1,3,0 */
*/
extern ADVEEP_3550_CONFIG Default_3550_EEPROM_Config;
extern ADVEEP_38C0800_CONFIG Default_38C0800_EEPROM_Config;
+extern ADVEEP_38C1600_CONFIG Default_38C1600_EEPROM_Config;
/*
* DvcGetPhyAddr() flag arguments
#define ADV_IS_CARRIER_FLAG 0x20 /* 'addr' is ADV_CARR_T pointer */
/* Return the address that is aligned at the next doubleword >= to 'addr'. */
-#define ADV_DWALIGN(addr) (((ulong) (addr) + 0x3) & ~0x3)
+#define ADV_8BALIGN(addr) (((ulong) (addr) + 0x7) & ~0x7)
#define ADV_16BALIGN(addr) (((ulong) (addr) + 0xF) & ~0xF)
/*
(sizeof(ADV_SG_BLOCK) * \
((ADV_MAX_SG_LIST + (NO_OF_SG_PER_BLOCK - 1))/NO_OF_SG_PER_BLOCK))
+/*
+ * Inquiry data structure and bitfield accessor macros
+ *
+ * Using bitfields to access the subchar data isn't portable across
+ * endianness, so instead mask and shift. Only quantities of more
+ * than 1 bit are shifted, since the others are just tested for true
+ * or false.
+ */
+
+#define INQ_DVC_TYPE(inq) ((inq).periph & 0x1f)
+#define INQ_QUALIFIER(inq) (((inq).periph & 0xe0) >> 5)
+#define INQ_DVC_TYPE_MOD(inq) ((inq).devtype & 0x7f)
+#define INQ_REMOVABLE(inq) ((inq).devtype & 0x80)
+#define INQ_ANSI_VER(inq) ((inq).ver & 0x07)
+#define INQ_ECMA_VER(inq) (((inq).ver & 0x38) >> 3)
+#define INQ_ISO_VER(inq) (((inq).ver & 0xc0) >> 6)
+#define INQ_RESPONSE_FMT(inq) ((inq).byte3 & 0x0f)
+#define INQ_TERM_IO(inq) ((inq).byte3 & 0x40)
+#define INQ_ASYNC_NOTIF(inq) ((inq).byte3 & 0x80)
+#define INQ_SOFT_RESET(inq) ((inq).flags & 0x01)
+#define INQ_CMD_QUEUE(inq) ((inq).flags & 0x02)
+#define INQ_LINK_CMD(inq) ((inq).flags & 0x08)
+#define INQ_SYNC(inq) ((inq).flags & 0x10)
+#define INQ_WIDE16(inq) ((inq).flags & 0x20)
+#define INQ_WIDE32(inq) ((inq).flags & 0x40)
+#define INQ_REL_ADDR(inq) ((inq).flags & 0x80)
+#define INQ_INFO_UNIT(inq) ((inq).info & 0x01)
+#define INQ_QUICK_ARB(inq) ((inq).info & 0x02)
+#define INQ_CLOCKING(inq) (((inq).info & 0x0c) >> 2)
+
typedef struct {
- uchar peri_dvc_type : 5; /* peripheral device type */
- uchar peri_qualifier : 3; /* peripheral qualifier */
- uchar dvc_type_modifier : 7; /* device type modifier (for SCSI I) */
- uchar rmb : 1; /* RMB - removable medium bit */
- uchar ansi_apr_ver : 3; /* ANSI approved version */
- uchar ecma_ver : 3; /* ECMA version */
- uchar iso_ver : 2; /* ISO version */
- uchar rsp_data_fmt : 4; /* response data format */
+ uchar periph; /* peripheral device type [0:4] */
+ /* peripheral qualifier [5:7] */
+ uchar devtype; /* device type modifier (for SCSI I) [0:6] */
+ /* RMB - removable medium bit [7] */
+ uchar ver; /* ANSI approved version [0:2] */
+ /* ECMA version [3:5] */
+ /* ISO version [6:7] */
+ uchar byte3; /* response data format [0:3] */
/* 0 SCSI 1 */
/* 1 CCS */
/* 2 SCSI-2 */
/* 3-F reserved */
- uchar res1 : 2; /* reserved */
- uchar TemIOP : 1; /* terminate I/O process bit (see 5.6.22) */
- uchar aenc : 1; /* asynch. event notification (processor) */
+ /* reserved [4:5] */
+ /* terminate I/O process bit (see 5.6.22) [6] */
+ /* asynch. event notification (processor) [7] */
uchar add_len; /* additional length */
uchar res2; /* reserved */
uchar res3; /* reserved */
- uchar StfRe : 1; /* soft reset implemented */
- uchar CmdQue : 1; /* command queuing */
- uchar res4 : 1; /* reserved */
- uchar Linked : 1; /* linked command for this logical unit */
- uchar Sync : 1; /* synchronous data transfer */
- uchar WBus16 : 1; /* wide bus 16 bit data transfer */
- uchar WBus32 : 1; /* wide bus 32 bit data transfer */
- uchar RelAdr : 1; /* relative addressing mode */
+ uchar flags; /* soft reset implemented [0] */
+ /* command queuing [1] */
+ /* reserved [2] */
+ /* linked command for this logical unit [3] */
+ /* synchronous data transfer [4] */
+ /* wide bus 16 bit data transfer [5] */
+ /* wide bus 32 bit data transfer [6] */
+ /* relative addressing mode [7] */
uchar vendor_id[8]; /* vendor identification */
uchar product_id[16]; /* product identification */
uchar product_rev_level[4]; /* product revision level */
uchar vendor_specific[20]; /* vendor specific */
- uchar IUS : 1; /* information unit supported */
- uchar QAS : 1; /* quick arbitrate supported */
- uchar Clocking : 2; /* clocking field */
- uchar res5 : 4; /* reserved */
+ uchar info; /* information unit supported [0] */
+ /* quick arbitrate supported [1] */
+ /* clocking field [2:3] */
+ /* reserved [4:7] */
uchar res6; /* reserved */
} ADV_SCSI_INQUIRY; /* 58 bytes */
#define PCI_MAX_BUS 0xFF
#define PCI_IOADDRESS_MASK 0xFFFE
#define ASC_PCI_VENDORID 0x10CD
-#define ASC_PCI_DEVICE_ID_CNT 5 /* PCI Device ID count. */
+#define ASC_PCI_DEVICE_ID_CNT 6 /* PCI Device ID count. */
#define ASC_PCI_DEVICE_ID_1100 0x1100
#define ASC_PCI_DEVICE_ID_1200 0x1200
#define ASC_PCI_DEVICE_ID_1300 0x1300
#define ASC_PCI_DEVICE_ID_2300 0x2300 /* ASC-3550 */
#define ASC_PCI_DEVICE_ID_2500 0x2500 /* ASC-38C0800 */
+#define ASC_PCI_DEVICE_ID_2700 0x2700 /* ASC-38C1600 */
/* PCI IO Port Addresses to generate special cycle */
/* Per board statistics structure */
struct asc_stats {
/* Driver Entrypoint Statistics */
+#if LINUX_VERSION_CODE < ASC_LINUX_VERSION(2,3,28)
ADV_DCNT command; /* # calls to advansys_command() */
+#endif /* version < v2.3.28 */
ADV_DCNT queuecommand; /* # calls to advansys_queuecommand() */
+#if LINUX_VERSION_CODE < ASC_LINUX_VERSION(2,3,28)
ADV_DCNT abort; /* # calls to advansys_abort() */
ADV_DCNT reset; /* # calls to advansys_reset() */
+#else /* version >= v2.3.28 */
+ ADV_DCNT eh_bus_reset; /* # calls to advansys_eh_bus_reset() */
+#endif /* version >= v2.3.28 */
ADV_DCNT biosparam; /* # calls to advansys_biosparam() */
ADV_DCNT interrupt; /* # advansys_interrupt() calls */
ADV_DCNT callback; /* # calls to asc/adv_isr_callback() */
* ADV_SG_BLOCK structure holds 15 scatter-gather elements. Under Linux
* up to 255 scatter-gather elements may be used per request or
* ADV_SCSI_REQ_Q.
+ *
+ * Both structures must be 8 byte aligned.
*/
typedef struct adv_sgblk {
- ADV_SG_BLOCK sg_block; /* Sgblock structure. */
- uchar align2[4]; /* Sgblock structure padding. */
- struct adv_sgblk *next_sgblkp; /* Next scatter-gather structure. */
+ ADV_SG_BLOCK sg_block; /* Sgblock structure. */
+ uchar align[8]; /* Sgblock structure padding. */
+ struct adv_sgblk *next_sgblkp; /* Next scatter-gather structure. */
} adv_sgblk_t;
typedef struct adv_req {
ADV_SCSI_REQ_Q scsi_req_q; /* Adv Library request structure. */
- uchar align1[4]; /* Request structure padding. */
+ uchar align[8]; /* Request structure padding. */
Scsi_Cmnd *cmndp; /* Mid-Level SCSI command pointer. */
adv_sgblk_t *sgblkp; /* Adv Library scatter-gather pointer. */
struct adv_req *next_reqp; /* Next Request Structure. */
ASC_DVC_CFG asc_dvc_cfg; /* Narrow board */
ADV_DVC_CFG adv_dvc_cfg; /* Wide board */
} dvc_cfg;
+ ushort asc_n_io_port; /* Number I/O ports. */
asc_queue_t active; /* Active command queue */
asc_queue_t waiting; /* Waiting command queue */
asc_queue_t done; /* Done command queue */
ASCEEP_CONFIG asc_eep; /* Narrow EEPROM config. */
ADVEEP_3550_CONFIG adv_3550_eep; /* 3550 EEPROM config. */
ADVEEP_38C0800_CONFIG adv_38C0800_eep; /* 38C0800 EEPROM config. */
+ ADVEEP_38C1600_CONFIG adv_38C1600_eep; /* 38C1600 EEPROM config. */
} eep_config;
ulong last_reset; /* Saved last reset time */
+#if LINUX_VERSION_CODE >= ASC_LINUX_VERSION(2,3,28)
+ spinlock_t lock; /* Board spinlock */
+#endif /* version >= v2.3.28 */
#if LINUX_VERSION_CODE >= ASC_LINUX_VERSION(1,3,0)
/* /proc/scsi/advansys/[0...] */
char *prtbuf; /* Statistics Print Buffer */
"ASC_IS_PCI",
};
-STATIC int asc_dbglvl = 2;
+STATIC int asc_dbglvl = 3;
#endif /* ADVANSYS_DEBUG */
/* Declaration for Asc Library internal data referenced by driver. */
*/
#if LINUX_VERSION_CODE >= ASC_LINUX_VERSION(1,3,0)
+#ifdef CONFIG_PROC_FS
STATIC int asc_proc_copy(off_t, off_t, char *, int , char *, int);
+#endif /* CONFIG_PROC_FS */
#endif /* version >= v1.3.0 */
#if LINUX_VERSION_CODE < ASC_LINUX_VERSION(1,3,70)
STATIC void advansys_interrupt(int, struct pt_regs *);
STATIC void advansys_select_queue_depths(struct Scsi_Host *,
Scsi_Device *);
#endif /* version >= v1.3.89 */
+#if LINUX_VERSION_CODE < ASC_LINUX_VERSION(2,3,28)
STATIC void advansys_command_done(Scsi_Cmnd *);
+#endif /* version < v2.3.28 */
STATIC void asc_scsi_done_list(Scsi_Cmnd *);
STATIC int asc_execute_scsi_cmnd(Scsi_Cmnd *);
STATIC int asc_build_req(asc_board_t *, Scsi_Cmnd *);
STATIC REQP asc_dequeue(asc_queue_t *, int);
STATIC REQP asc_dequeue_list(asc_queue_t *, REQP *, int);
STATIC int asc_rmqueue(asc_queue_t *, REQP);
+#if LINUX_VERSION_CODE < ASC_LINUX_VERSION(2,3,28)
STATIC int asc_isqueued(asc_queue_t *, REQP);
+#endif /* version < v2.3.28 */
STATIC void asc_execute_queue(asc_queue_t *);
#if LINUX_VERSION_CODE >= ASC_LINUX_VERSION(1,3,0)
+#ifdef CONFIG_PROC_FS
STATIC int asc_prt_board_devices(struct Scsi_Host *, char *, int);
STATIC int asc_prt_adv_bios(struct Scsi_Host *, char *, int);
STATIC int asc_get_eeprom_string(ushort *serialnum, uchar *cp);
STATIC int asc_prt_asc_board_info(struct Scsi_Host *, char *, int);
STATIC int asc_prt_adv_board_info(struct Scsi_Host *, char *, int);
STATIC int asc_prt_line(char *, int, char *fmt, ...);
+#endif /* CONFIG_PROC_FS */
#endif /* version >= v1.3.0 */
/* Declaration for Asc Library internal functions referenced by driver. */
STATIC ushort AscGetEEPConfig(PortAddr, ASCEEP_CONFIG *, ushort);
#ifdef ADVANSYS_STATS
+#ifdef CONFIG_PROC_FS
STATIC int asc_prt_board_stats(struct Scsi_Host *, char *, int);
+STATIC int asc_prt_target_stats(struct Scsi_Host *, int, char *, int);
+#endif /* CONFIG_PROC_FS */
#endif /* ADVANSYS_STATS */
#ifdef ADVANSYS_DEBUG
#endif /* ADVANSYS_DEBUG */
#ifdef ADVANSYS_ASSERT
-STATIC int interrupts_enabled(void);
+STATIC int advansys_interrupts_enabled(void);
#endif /* ADVANSYS_ASSERT */
char *curbuf;
off_t advoffset;
Scsi_Device *scd;
+ int tgt_id;
ASC_DBG(1, "advansys_proc_info: begin\n");
*/
cp = boardp->prtbuf;
cplen = asc_prt_board_stats(shp, cp, ASC_PRTBUF_SIZE);
- ASC_ASSERT(cplen < ASC_PRTBUF_SIZE);
+ ASC_ASSERT(cplen <= ASC_PRTBUF_SIZE);
cnt = asc_proc_copy(advoffset, offset, curbuf, leftlen, cp, cplen);
totcnt += cnt;
leftlen -= cnt;
}
advoffset += cplen;
curbuf += cnt;
+
+ /*
+ * Display driver statistics for each target.
+ */
+ for (tgt_id = 0; tgt_id <= ADV_MAX_TID; tgt_id++) {
+ cp = boardp->prtbuf;
+ cplen = asc_prt_target_stats(shp, tgt_id, cp, ASC_PRTBUF_SIZE);
+ ASC_ASSERT(cplen <= ASC_PRTBUF_SIZE);
+ cnt = asc_proc_copy(advoffset, offset, curbuf, leftlen, cp, cplen);
+ totcnt += cnt;
+ leftlen -= cnt;
+ if (leftlen == 0) {
+ ASC_DBG1(1, "advansys_proc_info: totcnt %d\n", totcnt);
+ return totcnt;
+ }
+ advoffset += cplen;
+ curbuf += cnt;
+ }
#endif /* ADVANSYS_STATS */
/*
ASC_PCI_DEVICE_ID_1200,
ASC_PCI_DEVICE_ID_1300,
ASC_PCI_DEVICE_ID_2300,
- ASC_PCI_DEVICE_ID_2500
+ ASC_PCI_DEVICE_ID_2500,
+ ASC_PCI_DEVICE_ID_2700
};
ADV_PADDR pci_memory_address;
#endif /* CONFIG_PCI */
switch (asc_bus[bus]) {
case ASC_IS_ISA:
case ASC_IS_VL:
+#ifdef CONFIG_ISA
if (asc_iopflag == ASC_FALSE) {
iop = AscSearchIOPortAddr(iop, asc_bus[bus]);
} else {
asc_ioport[ioport++] = 0;
}
}
+#endif /* CONFIG_ISA */
break;
case ASC_IS_EISA:
+#ifdef CONFIG_ISA
iop = AscSearchIOPortAddr(iop, asc_bus[bus]);
+#endif /* CONFIG_ISA */
break;
case ASC_IS_PCI:
NULL) {
pci_device_id_cnt++;
} else {
+#if LINUX_VERSION_CODE < ASC_LINUX_VERSION(2,4,0)
pci_devicep[pci_card_cnt_max++] = pci_devp;
+#else /* version >= v2.4.0 */
+ if (pci_enable_device(pci_devp) == 0) {
+ pci_devicep[pci_card_cnt_max++] = pci_devp;
+ }
+#endif /* version >= v2.4.0 */
}
}
pci_devp->devfn, pci_devp->bus->number);
#if LINUX_VERSION_CODE < ASC_LINUX_VERSION(2,3,13)
iop = pci_devp->base_address[0] & PCI_IOADDRESS_MASK;
-#else /* version >= v2.3.13 */
+#elif LINUX_VERSION_CODE < ASC_LINUX_VERSION(2,4,0)
iop = pci_devp->resource[0].start & PCI_IOADDRESS_MASK;
-#endif /* version >= v2.3.13 */
+#else /* version >= v2.4.0 */
+ iop = pci_resource_start(pci_devp, 0);
+#endif /* version >= v2.4.0 */
ASC_DBG2(1,
"advansys_detect: vendorID %X, deviceID %X\n",
pci_devp->vendor, pci_devp->device);
*/
ASC_DBG(2, "advansys_detect: scsi_register()\n");
shp = scsi_register(tpnt, sizeof(asc_board_t));
+
+ if(shp == NULL) {
+ continue;
+ }
/* Save a pointer to the Scsi_host of each board found. */
asc_host[asc_board_count++] = shp;
memset(boardp, 0, sizeof(asc_board_t));
boardp->id = asc_board_count - 1;
+#if LINUX_VERSION_CODE >= ASC_LINUX_VERSION(2,3,28)
+ /* Initialize spinlock. */
+ boardp->lock = SPIN_LOCK_UNLOCKED;
+#endif /* version >= v2.3.28 */
+
/*
* Handle both narrow and wide boards.
*
#ifdef ASC_CONFIG_PCI
if (asc_bus[bus] == ASC_IS_PCI &&
(pciConfig.deviceID == ASC_PCI_DEVICE_ID_2300 ||
- pciConfig.deviceID == ASC_PCI_DEVICE_ID_2500))
+ pciConfig.deviceID == ASC_PCI_DEVICE_ID_2500 ||
+ pciConfig.deviceID == ASC_PCI_DEVICE_ID_2700))
{
boardp->flags |= ASC_IS_WIDE_BOARD;
}
#ifdef CONFIG_PCI
if (asc_bus[bus] == ASC_IS_PCI &&
(pci_devp->device == ASC_PCI_DEVICE_ID_2300 ||
- pci_devp->device == ASC_PCI_DEVICE_ID_2500))
+ pci_devp->device == ASC_PCI_DEVICE_ID_2500 ||
+ pci_devp->device == ASC_PCI_DEVICE_ID_2700))
{
boardp->flags |= ASC_IS_WIDE_BOARD;
}
{
ASC_DBG(1, "advansys_detect: ASC-3550\n");
adv_dvc_varp->chip_type = ADV_CHIP_ASC3550;
- } else
+ } else if (pciConfig.deviceID == ASC_PCI_DEVICE_ID_2500)
{
ASC_DBG(1, "advansys_detect: ASC-38C0800\n");
adv_dvc_varp->chip_type = ADV_CHIP_ASC38C0800;
+ } else
+ {
+ ASC_DBG(1, "advansys_detect: ASC-38C1600\n");
+ adv_dvc_varp->chip_type = ADV_CHIP_ASC38C1600;
}
#endif /* ASC_CONFIG_PCI */
#else /* version >= v2.1.93 */
{
ASC_DBG(1, "advansys_detect: ASC-3550\n");
adv_dvc_varp->chip_type = ADV_CHIP_ASC3550;
- } else
+ } else if (pci_devp->device == ASC_PCI_DEVICE_ID_2500)
{
ASC_DBG(1, "advansys_detect: ASC-38C0800\n");
adv_dvc_varp->chip_type = ADV_CHIP_ASC38C0800;
+ } else
+ {
+ ASC_DBG(1, "advansys_detect: ASC-38C1600\n");
+ adv_dvc_varp->chip_type = ADV_CHIP_ASC38C1600;
}
#endif /* CONFIG_PCI */
#endif /* version >= v2.1.93 */
if (adv_dvc_varp->chip_type == ADV_CHIP_ASC3550)
{
iolen = ADV_3550_IOLEN;
- } else {
+ } else if (adv_dvc_varp->chip_type == ADV_CHIP_ASC38C0800)
+ {
iolen = ADV_38C0800_IOLEN;
+ } else
+ {
+ iolen = ADV_38C1600_IOLEN;
}
#if LINUX_VERSION_CODE < ASC_LINUX_VERSION(2,1,93)
#ifdef ASC_CONFIG_PCI
#ifdef CONFIG_PCI
#if LINUX_VERSION_CODE < ASC_LINUX_VERSION(2,3,13)
pci_memory_address = pci_devp->base_address[1];
-#else /* version >= v2.3.13 */
+#elif LINUX_VERSION_CODE < ASC_LINUX_VERSION(2,4,0)
pci_memory_address = pci_devp->resource[1].start;
-#endif /* version >= v2.3.13 */
+#else /* version >= v2.4.0 */
+ pci_memory_address = pci_resource_start(pci_devp, 1);
+#endif /* version >= v2.4.0 */
ASC_DBG1(1, "advansys_detect: pci_memory_address: %x\n",
pci_memory_address);
if ((boardp->ioremap_addr =
* calling AscInitGetConfig().
*/
switch (asc_dvc_varp->bus_type) {
+#ifdef CONFIG_ISA
case ASC_IS_ISA:
shp->unchecked_isa_dma = TRUE;
share_irq = FALSE;
shp->unchecked_isa_dma = FALSE;
share_irq = TRUE;
break;
+#endif /* CONFIG_ISA */
#if LINUX_VERSION_CODE < ASC_LINUX_VERSION(2,1,93)
#ifdef ASC_CONFIG_PCI
case ASC_IS_PCI:
ep->init_sdtr = asc_dvc_varp->cfg->sdtr_enable;
ep->disc_enable = asc_dvc_varp->cfg->disc_enable;
ep->use_cmd_qng = asc_dvc_varp->cfg->cmd_qng_enabled;
- ep->isa_dma_speed = asc_dvc_varp->cfg->isa_dma_speed;
+ ASC_EEP_SET_DMA_SPD(ep, asc_dvc_varp->cfg->isa_dma_speed);
ep->start_motor = asc_dvc_varp->start_motor;
ep->cntl = asc_dvc_varp->dvc_cntl;
ep->no_scam = asc_dvc_varp->no_scam;
ep->max_total_qng = asc_dvc_varp->max_total_qng;
- ep->chip_scsi_id = asc_dvc_varp->cfg->chip_scsi_id;
+ ASC_EEP_SET_CHIP_ID(ep, asc_dvc_varp->cfg->chip_scsi_id);
/* 'max_tag_qng' is set to the same value for every device. */
ep->max_tag_qng = asc_dvc_varp->cfg->max_tag_qng[0];
ep->adapter_info[0] = asc_dvc_varp->cfg->adapter_info[0];
} else {
ADVEEP_3550_CONFIG *ep_3550;
ADVEEP_38C0800_CONFIG *ep_38C0800;
+ ADVEEP_38C1600_CONFIG *ep_38C1600;
/*
* Save Wide EEP Configuration Information.
adv_dvc_varp->cfg->serial2;
ep_3550->serial_number_word3 =
adv_dvc_varp->cfg->serial3;
- } else
+ } else if (adv_dvc_varp->chip_type == ADV_CHIP_ASC38C0800)
{
ep_38C0800 = &boardp->eep_config.adv_38C0800_eep;
adv_dvc_varp->cfg->serial2;
ep_38C0800->serial_number_word3 =
adv_dvc_varp->cfg->serial3;
+ } else
+ {
+ ep_38C1600 = &boardp->eep_config.adv_38C1600_eep;
+
+ ep_38C1600->adapter_scsi_id = adv_dvc_varp->chip_scsi_id;
+ ep_38C1600->max_host_qng = adv_dvc_varp->max_host_qng;
+ ep_38C1600->max_dvc_qng = adv_dvc_varp->max_dvc_qng;
+ ep_38C1600->termination_lvd =
+ adv_dvc_varp->cfg->termination;
+ ep_38C1600->disc_enable = adv_dvc_varp->cfg->disc_enable;
+ ep_38C1600->bios_ctrl = adv_dvc_varp->bios_ctrl;
+ ep_38C1600->wdtr_able = adv_dvc_varp->wdtr_able;
+ ep_38C1600->tagqng_able = adv_dvc_varp->tagqng_able;
+ ep_38C1600->sdtr_speed1 = adv_dvc_varp->sdtr_speed1;
+ ep_38C1600->sdtr_speed2 = adv_dvc_varp->sdtr_speed2;
+ ep_38C1600->sdtr_speed3 = adv_dvc_varp->sdtr_speed3;
+ ep_38C1600->sdtr_speed4 = adv_dvc_varp->sdtr_speed4;
+ ep_38C1600->tagqng_able = adv_dvc_varp->tagqng_able;
+ ep_38C1600->start_motor = adv_dvc_varp->start_motor;
+ ep_38C1600->scsi_reset_delay =
+ adv_dvc_varp->scsi_reset_wait;
+ ep_38C1600->serial_number_word1 =
+ adv_dvc_varp->cfg->serial1;
+ ep_38C1600->serial_number_word2 =
+ adv_dvc_varp->cfg->serial2;
+ ep_38C1600->serial_number_word3 =
+ adv_dvc_varp->cfg->serial3;
}
/*
#if LINUX_VERSION_CODE >= ASC_LINUX_VERSION(1,3,89)
/*
- * Channels are numbered beginning with 0. For AdvanSys One host
+ * Channels are numbered beginning with 0. For AdvanSys one host
* structure supports one channel. Multi-channel boards have a
* separate host structure for each channel.
*/
shp->max_lun = ASC_MAX_LUN + 1;
shp->io_port = asc_dvc_varp->iop_base;
- shp->n_io_port = ASC_IOADR_GAP;
+ boardp->asc_n_io_port = ASC_IOADR_GAP;
shp->this_id = asc_dvc_varp->cfg->chip_scsi_id;
/* Set maximum number of queues the adapter can handle. */
* Memory Mapped I/O.
*/
shp->io_port = iop;
- shp->n_io_port = iolen;
+ boardp->asc_n_io_port = iolen;
shp->this_id = adv_dvc_varp->chip_scsi_id;
shp->can_queue = adv_dvc_varp->max_host_qng;
}
+ /* 'n_io_port' currently is one byte. */
+ shp->n_io_port = boardp->asc_n_io_port <= 255 ?
+ boardp->asc_n_io_port : 255;
+
#if LINUX_VERSION_CODE < ASC_LINUX_VERSION(1,3,89)
/*
* In old kernels without tag queuing support and with memory
/* Register I/O port range. */
ASC_DBG(2, "advansys_detect: request_region()\n");
- request_region(shp->io_port, shp->n_io_port, "advansys");
+ request_region(shp->io_port, boardp->asc_n_io_port, "advansys");
/* Register DMA Channel for Narrow boards. */
shp->dma_channel = NO_ISA_DMA; /* Default to no ISA DMA. */
+#ifdef CONFIG_ISA
if (ASC_NARROW_BOARD(boardp)) {
/* Register DMA channel for ISA bus. */
if (asc_dvc_varp->bus_type & ASC_IS_ISA) {
ASC_PRINT3(
"advansys_detect: board %d: request_dma() %d failed %d\n",
boardp->id, shp->dma_channel, ret);
- release_region(shp->io_port, shp->n_io_port);
+ release_region(shp->io_port, boardp->asc_n_io_port);
#if LINUX_VERSION_CODE >= ASC_LINUX_VERSION(1,3,0)
kfree(boardp->prtbuf);
#endif /* version >= v1.3.0 */
AscEnableIsaDma(shp->dma_channel);
}
}
+#endif /* CONFIG_ISA */
/* Register IRQ Number. */
ASC_DBG1(2, "advansys_detect: request_irq() %d\n", shp->irq);
"advansys_detect: board %d: request_irq(): IRQ %d failed with %d\n",
boardp->id, shp->irq, ret);
}
- release_region(shp->io_port, shp->n_io_port);
+ release_region(shp->io_port, boardp->asc_n_io_port);
#if LINUX_VERSION_CODE >= ASC_LINUX_VERSION(1,3,0)
iounmap(boardp->ioremap_addr);
#endif /* version >= v1,3,0 */
ASC_DBG(2,
"advansys_detect: AdvInitAsc3550Driver()\n");
warn_code = AdvInitAsc3550Driver(adv_dvc_varp);
- } else {
+ } else if (adv_dvc_varp->chip_type == ADV_CHIP_ASC38C0800) {
ASC_DBG(2,
"advansys_detect: AdvInitAsc38C0800Driver()\n");
warn_code = AdvInitAsc38C0800Driver(adv_dvc_varp);
+ } else {
+ ASC_DBG(2,
+ "advansys_detect: AdvInitAsc38C1600Driver()\n");
+ warn_code = AdvInitAsc38C1600Driver(adv_dvc_varp);
}
err_code = adv_dvc_varp->err_code;
if (warn_code || err_code) {
ASC_PRINT3(
-"AdvInitAsc3550/38C0800Driver: board %d: error: warn %x, error %x\n",
+"AdvInitAsc3550/38C0800/38C1600Driver: board %d: error: warn %x, error %x\n",
boardp->id, warn_code, err_code);
}
#if LINUX_VERSION_CODE >= ASC_LINUX_VERSION(1,3,0)
}
if (err_code != 0) {
- release_region(shp->io_port, shp->n_io_port);
+ release_region(shp->io_port, boardp->asc_n_io_port);
#if LINUX_VERSION_CODE >= ASC_LINUX_VERSION(1,3,0)
if (ASC_WIDE_BOARD(boardp)) {
iounmap(boardp->ioremap_addr);
ASC_DBG(1, "advansys_release: free_dma()\n");
free_dma(shp->dma_channel);
}
- release_region(shp->io_port, shp->n_io_port);
+ release_region(shp->io_port, boardp->asc_n_io_port);
#if LINUX_VERSION_CODE >= ASC_LINUX_VERSION(1,3,0)
if (ASC_WIDE_BOARD(boardp)) {
adv_sgblk_t *sgp = NULL;
#endif /* version >= v2.1.92 */
ASC_VERSION, busname, asc_dvc_varp->max_total_qng,
(ulong) shp->base,
- (ulong) shp->io_port, shp->n_io_port - 1,
+ (ulong) shp->io_port, boardp->asc_n_io_port - 1,
shp->irq, shp->dma_channel);
} else if (asc_dvc_varp->bus_type & ASC_IS_PCI) {
if ((asc_dvc_varp->bus_type & ASC_IS_PCI_ULTRA)
"AdvanSys SCSI %s: %s %u CDB: IO %lX/%X, IRQ %u",
#endif /* version >= v2.1.92 */
ASC_VERSION, busname, asc_dvc_varp->max_total_qng,
- shp->io_port, shp->n_io_port - 1, shp->irq);
+ shp->io_port, boardp->asc_n_io_port - 1, shp->irq);
} else {
if (asc_dvc_varp->bus_type & ASC_IS_VL) {
busname = "VL";
#endif /* version >= v2.1.92 */
ASC_VERSION, busname, asc_dvc_varp->max_total_qng,
(ulong) shp->base, shp->io_port - 1,
- shp->n_io_port, shp->irq);
+ boardp->asc_n_io_port, shp->irq);
}
} else {
/*
{
iolen = ADV_3550_IOLEN;
widename = "Ultra-Wide";
- } else {
+ } else if (adv_dvc_varp->chip_type == ADV_CHIP_ASC38C0800)
+ {
iolen = ADV_38C0800_IOLEN;
widename = "Ultra2-Wide";
+ } else
+ {
+ iolen = ADV_38C1600_IOLEN;
+ widename = "Ultra3-Wide";
}
if (boardp->bios_signature == 0x55AA) {
sprintf(info,
return info;
}
+#if LINUX_VERSION_CODE < ASC_LINUX_VERSION(2,3,28)
/*
* advansys_command() - polled I/O entrypoint.
*
ASC_DBG1(1, "advansys_command: result %x\n", scp->result);
return scp->result;
}
+#endif /* version < v2.3.28 */
/*
* advansys_queuecommand() - interrupt-driven I/O entrypoint.
boardp = ASC_BOARDP(shp);
ASC_STATS(shp, queuecommand);
+#if LINUX_VERSION_CODE < ASC_LINUX_VERSION(2,3,28)
/*
* Disable interrupts to preserve request ordering and provide
* mutually exclusive access to global structures used to initiate
*/
save_flags(flags);
cli();
+#else /* version >= v2.3.28 */
+ spin_lock_irqsave(&boardp->lock, flags);
+#endif /* version >= v2.3.28 */
/*
* Block new commands while handling a reset or abort request.
* handling.
*/
asc_enqueue(&boardp->done, scp, ASC_BACK);
+#if LINUX_VERSION_CODE < ASC_LINUX_VERSION(2,3,28)
restore_flags(flags);
+#else /* version >= v2.3.28 */
+ spin_unlock_irqrestore(&boardp->lock, flags);
+#endif /* version >= v2.3.28 */
return 0;
}
break;
}
+#if LINUX_VERSION_CODE < ASC_LINUX_VERSION(2,3,28)
restore_flags(flags);
+#else /* version >= v2.3.28 */
+ spin_unlock_irqrestore(&boardp->lock, flags);
+#endif /* version >= v2.3.28 */
return 0;
}
+#if LINUX_VERSION_CODE < ASC_LINUX_VERSION(2,3,28)
/*
* advansys_abort()
*
ASC_ASSERT(ret != ASC_ERROR);
return ret;
}
-
+#else /* version >= v2.3.28 */
/*
- * advansys_biosparam()
+ * advansys_eh_bus_reset()
*
- * Translate disk drive geometry if the "BIOS greater than 1 GB"
- * support is enabled for a drive.
+ * Reset the bus associated with the command 'scp'.
*
- * ip (information pointer) is an int array with the following definition:
- * ip[0]: heads
- * ip[1]: sectors
- * ip[2]: cylinders
+ * This function runs its own thread. Interrupts must be blocked but
+ * sleeping is allowed and no locking other than for host structures is
+ * required. Returns SUCCESS or FAILED.
*/
int
-#if LINUX_VERSION_CODE < ASC_LINUX_VERSION(1,3,0)
-advansys_biosparam(Disk *dp, int dep, int ip[])
-#else /* version >= v1.3.0 */
-advansys_biosparam(Disk *dp, kdev_t dep, int ip[])
-#endif /* version >= v1.3.0 */
+advansys_eh_bus_reset(Scsi_Cmnd *scp)
{
- asc_board_t *boardp;
+ struct Scsi_Host *shp;
+ asc_board_t *boardp;
+ ASC_DVC_VAR *asc_dvc_varp;
+ ADV_DVC_VAR *adv_dvc_varp;
+ int flags;
+ Scsi_Cmnd *done_scp = NULL, *last_scp = NULL;
+ Scsi_Cmnd *tscp, *new_last_scp;
+ int status;
+ int ret;
+
+ ASC_DBG1(1, "advansys_eh_bus_reset: %lx\n", (ulong) scp);
+
+#ifdef ADVANSYS_STATS
+ if (scp->host != NULL) {
+ ASC_STATS(scp->host, eh_bus_reset);
+ }
+#endif /* ADVANSYS_STATS */
+
+ if ((shp = scp->host) == NULL) {
+ scp->result = HOST_BYTE(DID_ERROR);
+ return FAILED;
+ }
+
+ boardp = ASC_BOARDP(shp);
+
+ /*
+ * Check for re-entrancy.
+ */
+ spin_lock_irqsave(&boardp->lock, flags);
+ if (boardp->flags & ASC_HOST_IN_RESET) {
+ spin_unlock_irqrestore(&boardp->lock, flags);
+ return FAILED;
+ }
+ boardp->flags |= ASC_HOST_IN_RESET;
+ spin_unlock_irqrestore(&boardp->lock, flags);
- ASC_DBG(1, "advansys_biosparam: begin\n");
- ASC_STATS(dp->device->host, biosparam);
- boardp = ASC_BOARDP(dp->device->host);
if (ASC_NARROW_BOARD(boardp)) {
- if ((boardp->dvc_var.asc_dvc_var.dvc_cntl &
- ASC_CNTL_BIOS_GT_1GB) && dp->capacity > 0x200000) {
- ip[0] = 255;
- ip[1] = 63;
- } else {
- ip[0] = 64;
- ip[1] = 32;
+ /*
+ * Narrow Board
+ *
+ * If the suggest reset bus flags are set, then reset the bus.
+ * Otherwise only reset the device.
+ */
+ asc_dvc_varp = &boardp->dvc_var.asc_dvc_var;
+
+ /*
+ * Reset the target's SCSI bus.
+ */
+ ASC_DBG(1, "advansys_eh_bus_reset: before AscResetSB()\n");
+ status = AscResetSB(asc_dvc_varp);
+ switch (status) {
+ case ASC_TRUE:
+ ASC_DBG(1, "advansys_eh_bus_reset: AscResetSB() success\n");
+ ret = SUCCESS;
+ break;
+ case ASC_ERROR:
+ default:
+ ASC_DBG(1, "advansys_eh_bus_reset: AscResetSB() failed\n");
+ ret = FAILED;
+ break;
}
+
+ /*
+ * Acquire the board lock.
+ */
+ spin_lock_irqsave(&boardp->lock, flags);
+
} else {
- if ((boardp->dvc_var.adv_dvc_var.bios_ctrl &
- BIOS_CTRL_EXTENDED_XLAT) && dp->capacity > 0x200000) {
- ip[0] = 255;
+ /*
+ * Wide Board
+ *
+ * If the suggest reset bus flags are set, then reset the bus.
+ * Otherwise only reset the device.
+ */
+ adv_dvc_varp = &boardp->dvc_var.adv_dvc_var;
+
+ /*
+ * Reset the target's SCSI bus.
+ */
+ ASC_DBG(1, "advansys_eh_bus_reset: before AdvResetChipAndSB()\n");
+ switch (AdvResetChipAndSB(adv_dvc_varp)) {
+ case ASC_TRUE:
+ ASC_DBG(1,
+ "advansys_eh_bus_reset: AdvResetChipAndSB() success\n");
+ ret = SUCCESS;
+ break;
+ case ASC_FALSE:
+ default:
+ ASC_DBG(1, "advansys_eh_bus_reset: AdvResetChipAndSB() failed\n");
+ ret = FAILED;
+ break;
+ }
+ /*
+ * Acquire the board lock and ensure all requests completed by the
+ * microcode have been processed by calling AdvISR().
+ */
+ spin_lock_irqsave(&boardp->lock, flags);
+ (void) AdvISR(adv_dvc_varp);
+ }
+
+ /* Board lock is held. */
+
+ /*
+ * Dequeue all board 'done' requests. A pointer to the last request
+ * is returned in 'last_scp'.
+ */
+ done_scp = asc_dequeue_list(&boardp->done, &last_scp, ASC_TID_ALL);
+
+ /*
+ * Dequeue all board 'active' requests for all devices and set
+ * the request status to DID_RESET. A pointer to the last request
+ * is returned in 'last_scp'.
+ */
+ if (done_scp == NULL) {
+ done_scp = asc_dequeue_list(&boardp->active, &last_scp, ASC_TID_ALL);
+ for (tscp = done_scp; tscp; tscp = REQPNEXT(tscp)) {
+ tscp->result = HOST_BYTE(DID_RESET);
+ }
+ } else {
+ /* Append to 'done_scp' at the end with 'last_scp'. */
+ ASC_ASSERT(last_scp != NULL);
+ REQPNEXT(last_scp) = asc_dequeue_list(&boardp->active,
+ &new_last_scp, ASC_TID_ALL);
+ if (new_last_scp != NULL) {
+ ASC_ASSERT(REQPNEXT(last_scp) != NULL);
+ for (tscp = REQPNEXT(last_scp); tscp; tscp = REQPNEXT(tscp)) {
+ tscp->result = HOST_BYTE(DID_RESET);
+ }
+ last_scp = new_last_scp;
+ }
+ }
+
+ /*
+ * Dequeue all 'waiting' requests and set the request status
+ * to DID_RESET.
+ */
+ if (done_scp == NULL) {
+ done_scp = asc_dequeue_list(&boardp->waiting, &last_scp, ASC_TID_ALL);
+ for (tscp = done_scp; tscp; tscp = REQPNEXT(tscp)) {
+ tscp->result = HOST_BYTE(DID_RESET);
+ }
+ } else {
+ /* Append to 'done_scp' at the end with 'last_scp'. */
+ ASC_ASSERT(last_scp != NULL);
+ REQPNEXT(last_scp) = asc_dequeue_list(&boardp->waiting,
+ &new_last_scp, ASC_TID_ALL);
+ if (new_last_scp != NULL) {
+ ASC_ASSERT(REQPNEXT(last_scp) != NULL);
+ for (tscp = REQPNEXT(last_scp); tscp; tscp = REQPNEXT(tscp)) {
+ tscp->result = HOST_BYTE(DID_RESET);
+ }
+ last_scp = new_last_scp;
+ }
+ }
+
+ /* Save the time of the most recently completed reset. */
+ boardp->last_reset = jiffies;
+
+ /* Clear reset flag. */
+ boardp->flags &= ~ASC_HOST_IN_RESET;
+
+ /* Release the board. */
+ spin_unlock_irqrestore(&boardp->lock, flags);
+
+ /*
+ * Complete all the 'done_scp' requests.
+ */
+ if (done_scp != NULL) {
+ asc_scsi_done_list(done_scp);
+ }
+
+ ASC_DBG1(1, "advansys_eh_bus_reset: ret %d\n", ret);
+
+ return ret;
+}
+#endif /* version >= v2.3.28 */
+
+/*
+ * advansys_biosparam()
+ *
+ * Translate disk drive geometry if the "BIOS greater than 1 GB"
+ * support is enabled for a drive.
+ *
+ * ip (information pointer) is an int array with the following definition:
+ * ip[0]: heads
+ * ip[1]: sectors
+ * ip[2]: cylinders
+ */
+int
+#if LINUX_VERSION_CODE < ASC_LINUX_VERSION(1,3,0)
+advansys_biosparam(Disk *dp, int dep, int ip[])
+#else /* version >= v1.3.0 */
+advansys_biosparam(Disk *dp, kdev_t dep, int ip[])
+#endif /* version >= v1.3.0 */
+{
+ asc_board_t *boardp;
+
+ ASC_DBG(1, "advansys_biosparam: begin\n");
+ ASC_STATS(dp->device->host, biosparam);
+ boardp = ASC_BOARDP(dp->device->host);
+ if (ASC_NARROW_BOARD(boardp)) {
+ if ((boardp->dvc_var.asc_dvc_var.dvc_cntl &
+ ASC_CNTL_BIOS_GT_1GB) && dp->capacity > 0x200000) {
+ ip[0] = 255;
+ ip[1] = 63;
+ } else {
+ ip[0] = 64;
+ ip[1] = 32;
+ }
+ } else {
+ if ((boardp->dvc_var.adv_dvc_var.bios_ctrl &
+ BIOS_CTRL_EXTENDED_XLAT) && dp->capacity > 0x200000) {
+ ip[0] = 255;
ip[1] = 63;
} else {
ip[0] = 64;
* --- Loadable Driver Support
*/
+#if LINUX_VERSION_CODE < ASC_LINUX_VERSION(2,4,0)
#ifdef MODULE
Scsi_Host_Template driver_template = ADVANSYS;
# include "scsi_module.c"
#endif /* MODULE */
+#else /* version >= v2.4.0 */
+static Scsi_Host_Template driver_template = ADVANSYS;
+# include "scsi_module.c"
+#endif /* version >= v2.4.0 */
/*
/* Disable interrupts, if they aren't already disabled. */
save_flags(flags);
cli();
-#else /* version >= v2.1.95 */
+#elif LINUX_VERSION_CODE < ASC_LINUX_VERSION(2,3,28)
/*
* Disable interrupts, if they aren't already disabled and acquire
* the I/O spinlock.
*/
spin_lock_irqsave(&io_request_lock, flags);
-#endif /* version >= v2.1.95 */
+#endif /* version < v2.3.28 */
ASC_DBG(1, "advansys_interrupt: begin\n");
boardp = ASC_BOARDP(asc_host[i]);
ASC_DBG2(2, "advansys_interrupt: i %d, boardp %lx\n",
i, (ulong) boardp)
+#if LINUX_VERSION_CODE >= ASC_LINUX_VERSION(2,3,28)
+ spin_lock_irqsave(&boardp->lock, flags);
+#endif /* version >= v2.3.28 */
if (ASC_NARROW_BOARD(boardp)) {
/*
* Narrow Board
}
}
}
+#if LINUX_VERSION_CODE >= ASC_LINUX_VERSION(2,3,28)
+ spin_unlock_irqrestore(&boardp->lock, flags);
+#endif /* version >= v2.3.28 */
}
/* Interrupts could be enabled here. */
* if and only if they were enabled on entry.
*/
restore_flags(flags);
-#else /* version >= v2.1.95 */
+#elif LINUX_VERSION_CODE < ASC_LINUX_VERSION(2,3,28)
/*
* Release the I/O spinlock and restore the original flags
* which will enable interrupts if and only if they were
* enabled on entry.
*/
spin_unlock_irqrestore(&io_request_lock, flags);
-#endif /* version >= v2.1.95 */
+#endif /* version < v2.3.28 */
ASC_DBG(1, "advansys_interrupt: end\n");
return;
}
#endif /* version >= v1.3.89 */
+#if LINUX_VERSION_CODE < ASC_LINUX_VERSION(2,3,28)
/*
* Function used only with polled I/O requests that are initiated by
* advansys_command().
ASC_DBG1(1, "advansys_command_done: scp %lx\n", (ulong) scp);
scp->SCp.Status = 1;
}
+#endif /* version < v2.3.28 */
/*
* Complete all requests on the singly linked list pointed
Scsi_Device *device;
int ret;
- ASC_ASSERT(interrupts_enabled() == ASC_FALSE);
+ ASC_ASSERT(advansys_interrupts_enabled() == ASC_FALSE);
ASC_DBG2(1, "asc_execute_scsi_cmnd: scp %lx, done %lx\n",
(ulong) scp, (ulong) scp->scsi_done);
}
ASC_DBG(1, "asc_execute_scsi_cmnd: end\n");
- ASC_ASSERT(interrupts_enabled() == ASC_FALSE);
+ ASC_ASSERT(advansys_interrupts_enabled() == ASC_FALSE);
return ret;
}
/*
* Build the ASC_SCSI_Q request.
+ *
+ * For narrow boards a CDB length maximum of 12 bytes
+ * is supported.
*/
ASC_ASSERT(scp->cmd_len <= ASC_MAX_CDB_LEN);
if (scp->cmd_len > ASC_MAX_CDB_LEN) {
/*
* Get 4-byte aligned ADV_SCSI_REQ_Q and ADV_SG_BLOCK pointers.
*/
- scsiqp = (ADV_SCSI_REQ_Q *) ADV_DWALIGN(&reqp->scsi_req_q);
+ scsiqp = (ADV_SCSI_REQ_Q *) ADV_8BALIGN(&reqp->scsi_req_q);
/*
* Initialize the structure.
/*
* Set CDB length and copy it to the request structure.
+ * For wide boards a CDB length maximum of 16 bytes
+ * is supported.
*/
- ASC_ASSERT(scp->cmd_len <= ASC_MAX_CDB_LEN);
- if (scp->cmd_len > ASC_MAX_CDB_LEN) {
- scp->cmd_len = ASC_MAX_CDB_LEN;
+ ASC_ASSERT(scp->cmd_len <= ADV_MAX_CDB_LEN);
+ if (scp->cmd_len > ADV_MAX_CDB_LEN) {
+ scp->cmd_len = ADV_MAX_CDB_LEN;
}
scsiqp->cdb_len = scp->cmd_len;
- for (i = 0; i < scp->cmd_len; i++) {
+ /* Copy first 12 CDB bytes to cdb[]. */
+ for (i = 0; i < scp->cmd_len && i < 12; i++) {
scsiqp->cdb[i] = scp->cmnd[i];
}
+ /* Copy last 4 CDB bytes, if present, to cdb16[]. */
+ for (; i < scp->cmd_len; i++) {
+ scsiqp->cdb16[i - 12] = scp->cmnd[i];
+ }
scsiqp->target_id = scp->target;
scsiqp->target_lun = scp->lun;
ADV_PADDR sg_block_paddr;
int i;
- scsiqp = (ADV_SCSI_REQ_Q *) ADV_DWALIGN(&reqp->scsi_req_q);
+ scsiqp = (ADV_SCSI_REQ_Q *) ADV_8BALIGN(&reqp->scsi_req_q);
slp = (struct scatterlist *) scp->request_buffer;
sg_elem_cnt = scp->use_sg;
prev_sg_block = NULL;
sgblkp->next_sgblkp = NULL;
/*
- * Get 4 byte aligned virtual and physical addresses for
+ * Get 8 byte aligned virtual and physical addresses for
* the allocated ADV_SG_BLOCK structure.
*/
- sg_block = (ADV_SG_BLOCK *) ADV_DWALIGN(&sgblkp->sg_block);
+ sg_block = (ADV_SG_BLOCK *) ADV_8BALIGN(&sgblkp->sg_block);
sg_block_paddr =
#if LINUX_VERSION_CODE < ASC_LINUX_VERSION(2,0,0)
(ADV_PADDR) sg_block;
struct Scsi_Host *shp;
int i;
- ASC_ASSERT(interrupts_enabled() == ASC_FALSE);
+ ASC_ASSERT(advansys_interrupts_enabled() == ASC_FALSE);
ASC_DBG2(1, "asc_isr_callback: asc_dvc_varp %lx, qdonep %lx\n",
(ulong) asc_dvc_varp, (ulong) qdonep);
ASC_DBG_PRT_ASC_QDONE_INFO(2, qdonep);
struct Scsi_Host *shp;
int i;
- ASC_ASSERT(interrupts_enabled() == ASC_FALSE);
+ ASC_ASSERT(advansys_interrupts_enabled() == ASC_FALSE);
ASC_DBG2(1, "adv_isr_callback: adv_dvc_varp %lx, scsiqp %lx\n",
(ulong) adv_dvc_varp, (ulong) scsiqp);
ASC_DBG_PRT_ADV_SCSI_REQ_Q(2, scsiqp);
* then return the number of underrun bytes.
*/
if (scp->request_bufflen != 0 && scsiqp->data_cnt != 0 &&
- scsiqp->data_cnt <= scp->request_bufflen) {
+ le32_to_cpu(scsiqp->data_cnt) <= scp->request_bufflen) {
ASC_DBG1(1, "adv_isr_callback: underrun condition %lu bytes\n",
- (ulong) scsiqp->data_cnt);
- scp->resid = scsiqp->data_cnt;
+ (ulong) le32_to_cpu(scsiqp->data_cnt));
+ scp->resid = le32_to_cpu(scsiqp->data_cnt);
}
#endif /* version >= v2.3.19 */
break;
ASC_DBG3(3, "asc_enqueue: ascq %lx, reqp %lx, flag %d\n",
(ulong) ascq, (ulong) reqp, flag);
- ASC_ASSERT(interrupts_enabled() == ASC_FALSE);
+ ASC_ASSERT(advansys_interrupts_enabled() == ASC_FALSE);
ASC_ASSERT(reqp != NULL);
ASC_ASSERT(flag == ASC_FRONT || flag == ASC_BACK);
tid = REQPTID(reqp);
REQP reqp;
ASC_DBG2(3, "asc_dequeue: ascq %lx, tid %d\n", (ulong) ascq, tid);
- ASC_ASSERT(interrupts_enabled() == ASC_FALSE);
+ ASC_ASSERT(advansys_interrupts_enabled() == ASC_FALSE);
ASC_ASSERT(tid >= 0 && tid <= ADV_MAX_TID);
if ((reqp = ascq->q_first[tid]) != NULL) {
ASC_ASSERT(ascq->q_tidmask & ADV_TID_TO_TIDMASK(tid));
int i;
ASC_DBG2(3, "asc_dequeue_list: ascq %lx, tid %d\n", (ulong) ascq, tid);
- ASC_ASSERT(interrupts_enabled() == ASC_FALSE);
+ ASC_ASSERT(advansys_interrupts_enabled() == ASC_FALSE);
ASC_ASSERT((tid == ASC_TID_ALL) || (tid >= 0 && tid <= ADV_MAX_TID));
/*
ASC_DBG2(3, "asc_rmqueue: ascq %lx, reqp %lx\n",
(ulong) ascq, (ulong) reqp);
- ASC_ASSERT(interrupts_enabled() == ASC_FALSE);
+ ASC_ASSERT(advansys_interrupts_enabled() == ASC_FALSE);
ASC_ASSERT(reqp != NULL);
tid = REQPTID(reqp);
return ret;
}
+#if LINUX_VERSION_CODE < ASC_LINUX_VERSION(2,3,28)
/*
* If the specified 'REQP' is queued on the specified queue for
* the specified target device, return ASC_TRUE.
ASC_DBG2(3, "asc_isqueued: ascq %lx, reqp %lx\n",
(ulong) ascq, (ulong) reqp);
- ASC_ASSERT(interrupts_enabled() == ASC_FALSE);
+ ASC_ASSERT(advansys_interrupts_enabled() == ASC_FALSE);
ASC_ASSERT(reqp != NULL);
tid = REQPTID(reqp);
ASC_DBG1(3, "asc_isqueued: ret %x\n", ret);
return ret;
}
+#endif /* version < v2.3.28 */
/*
* Execute as many queued requests as possible for the specified queue.
int i;
ASC_DBG1(1, "asc_execute_queue: ascq %lx\n", (ulong) ascq);
- ASC_ASSERT(interrupts_enabled() == ASC_FALSE);
+ ASC_ASSERT(advansys_interrupts_enabled() == ASC_FALSE);
/*
* Execute queued commands for devices attached to
* the current board in round-robin fashion.
}
#if LINUX_VERSION_CODE >= ASC_LINUX_VERSION(1,3,0)
+#ifdef CONFIG_PROC_FS
/*
* asc_prt_board_devices()
*
int len;
ASCEEP_CONFIG *ep;
int i;
+#ifdef CONFIG_ISA
int isa_dma_speed[] = { 10, 8, 7, 6, 5, 4, 3, 2 };
+#endif /* CONFIG_ISA */
uchar serialstr[13];
boardp = ASC_BOARDP(shp);
len = asc_prt_line(cp, leftlen,
" Host SCSI ID: %u, Host Queue Size: %u, Device Queue Size: %u\n",
- ep->chip_scsi_id, ep->max_total_qng, ep->max_tag_qng);
+ ASC_EEP_GET_CHIP_ID(ep), ep->max_total_qng, ep->max_tag_qng);
ASC_PRT_NEXT();
len = asc_prt_line(cp, leftlen,
len = asc_prt_line(cp, leftlen, "\n");
ASC_PRT_NEXT();
+#ifdef CONFIG_ISA
if (asc_dvc_varp->bus_type & ASC_IS_ISA) {
len = asc_prt_line(cp, leftlen,
" Host ISA DMA speed: %d MB/S\n",
- isa_dma_speed[ep->isa_dma_speed]);
+ isa_dma_speed[ASC_EEP_GET_DMA_SPD(ep)]);
ASC_PRT_NEXT();
}
+#endif /* CONFIG_ISA */
return totlen;
}
uchar serialstr[13];
ADVEEP_3550_CONFIG *ep_3550 = NULL;
ADVEEP_38C0800_CONFIG *ep_38C0800 = NULL;
+ ADVEEP_38C1600_CONFIG *ep_38C1600 = NULL;
ushort word;
ushort *wordp;
ushort sdtr_speed = 0;
if (adv_dvc_varp->chip_type == ADV_CHIP_ASC3550)
{
ep_3550 = &boardp->eep_config.adv_3550_eep;
- } else
+ } else if (adv_dvc_varp->chip_type == ADV_CHIP_ASC38C0800)
{
ep_38C0800 = &boardp->eep_config.adv_38C0800_eep;
+ } else
+ {
+ ep_38C1600 = &boardp->eep_config.adv_38C1600_eep;
}
leftlen = cplen;
if (adv_dvc_varp->chip_type == ADV_CHIP_ASC3550)
{
wordp = &ep_3550->serial_number_word1;
- } else
+ } else if (adv_dvc_varp->chip_type == ADV_CHIP_ASC38C0800)
{
wordp = &ep_38C0800->serial_number_word1;
+ } else
+ {
+ wordp = &ep_38C1600->serial_number_word1;
}
if (asc_get_eeprom_string(wordp, serialstr) == ASC_TRUE) {
ep_3550->adapter_scsi_id, ep_3550->max_host_qng,
ep_3550->max_dvc_qng);
ASC_PRT_NEXT();
- } else
+ } else if (adv_dvc_varp->chip_type == ADV_CHIP_ASC38C0800)
{
len = asc_prt_line(cp, leftlen,
" Host SCSI ID: %u, Host Queue Size: %u, Device Queue Size: %u\n",
ep_38C0800->adapter_scsi_id, ep_38C0800->max_host_qng,
ep_38C0800->max_dvc_qng);
ASC_PRT_NEXT();
+ } else
+ {
+ len = asc_prt_line(cp, leftlen,
+" Host SCSI ID: %u, Host Queue Size: %u, Device Queue Size: %u\n",
+ ep_38C1600->adapter_scsi_id, ep_38C1600->max_host_qng,
+ ep_38C1600->max_dvc_qng);
+ ASC_PRT_NEXT();
}
if (adv_dvc_varp->chip_type == ADV_CHIP_ASC3550)
{
word = ep_3550->termination;
- } else
+ } else if (adv_dvc_varp->chip_type == ADV_CHIP_ASC38C0800)
{
word = ep_38C0800->termination_lvd;
+ } else
+ {
+ word = ep_38C1600->termination_lvd;
}
switch (word) {
case 1:
" termination: %u (%s), bios_ctrl: %x\n",
ep_3550->termination, termstr, ep_3550->bios_ctrl);
ASC_PRT_NEXT();
- } else
+ } else if (adv_dvc_varp->chip_type == ADV_CHIP_ASC38C0800)
{
len = asc_prt_line(cp, leftlen,
" termination: %u (%s), bios_ctrl: %x\n",
ep_38C0800->termination_lvd, termstr, ep_38C0800->bios_ctrl);
ASC_PRT_NEXT();
+ } else
+ {
+ len = asc_prt_line(cp, leftlen,
+" termination: %u (%s), bios_ctrl: %x\n",
+ ep_38C1600->termination_lvd, termstr, ep_38C1600->bios_ctrl);
+ ASC_PRT_NEXT();
}
len = asc_prt_line(cp, leftlen,
if (adv_dvc_varp->chip_type == ADV_CHIP_ASC3550)
{
word = ep_3550->disc_enable;
- } else
+ } else if (adv_dvc_varp->chip_type == ADV_CHIP_ASC38C0800)
{
word = ep_38C0800->disc_enable;
+ } else
+ {
+ word = ep_38C1600->disc_enable;
}
len = asc_prt_line(cp, leftlen,
" Disconnects: ");
if (adv_dvc_varp->chip_type == ADV_CHIP_ASC3550)
{
word = ep_3550->tagqng_able;
- } else
+ } else if (adv_dvc_varp->chip_type == ADV_CHIP_ASC38C0800)
{
word = ep_38C0800->tagqng_able;
+ } else
+ {
+ word = ep_38C1600->tagqng_able;
}
len = asc_prt_line(cp, leftlen,
" Command Queuing: ");
if (adv_dvc_varp->chip_type == ADV_CHIP_ASC3550)
{
word = ep_3550->start_motor;
- } else
+ } else if (adv_dvc_varp->chip_type == ADV_CHIP_ASC38C0800)
{
word = ep_38C0800->start_motor;
+ } else
+ {
+ word = ep_38C1600->start_motor;
}
len = asc_prt_line(cp, leftlen,
" Start Motor: ");
if (adv_dvc_varp->chip_type == ADV_CHIP_ASC3550)
{
word = ep_3550->wdtr_able;
- } else
+ } else if (adv_dvc_varp->chip_type == ADV_CHIP_ASC38C0800)
{
word = ep_38C0800->wdtr_able;
+ } else
+ {
+ word = ep_38C1600->wdtr_able;
}
len = asc_prt_line(cp, leftlen,
" Wide Transfer: ");
len = asc_prt_line(cp, leftlen, "\n");
ASC_PRT_NEXT();
- if (adv_dvc_varp->chip_type == ADV_CHIP_ASC38C0800)
+ if (adv_dvc_varp->chip_type == ADV_CHIP_ASC38C0800 ||
+ adv_dvc_varp->chip_type == ADV_CHIP_ASC38C1600)
{
len = asc_prt_line(cp, leftlen,
" Synchronous Transfer Speed (Mhz):\n ");
va_end(args);
return ret;
}
+#endif /* CONFIG_PROC_FS */
#endif /* version >= v1.3.0 */
return(0);
}
+#ifdef CONFIG_ISA
if((bus_type & ASC_IS_EISA) != 0)
{
cfg_lsw = AscGetEisaChipCfg(iop_base);
(cfg_lsw * ASC_BIOS_BANK_SIZE));
return(bios_addr);
}/* if */
+#endif /* CONFIG_ISA */
cfg_lsw = AscGetChipCfgLsw(iop_base);
*/
#ifdef ADVANSYS_STATS
+#ifdef CONFIG_PROC_FS
/*
* asc_prt_board_stats()
*
int totlen;
int len;
struct asc_stats *s;
- int i;
- ushort chip_scsi_id;
asc_board_t *boardp;
- asc_queue_t *active;
- asc_queue_t *waiting;
leftlen = cplen;
totlen = len = 0;
"\nLinux Driver Statistics for AdvanSys SCSI Host %d:\n", shp->host_no);
ASC_PRT_NEXT();
+#if LINUX_VERSION_CODE < ASC_LINUX_VERSION(2,3,28)
len = asc_prt_line(cp, leftlen,
" command %lu, queuecommand %lu, abort %lu, reset %lu, biosparam %lu\n",
s->command, s->queuecommand, s->abort, s->reset, s->biosparam);
+#else /* version >= v2.3.28 */
+ len = asc_prt_line(cp, leftlen,
+" queuecommand %lu, eh_bus_reset %lu, biosparam %lu\n",
+ s->queuecommand, s->eh_bus_reset, s->biosparam);
+#endif /* version >= v2.3.28 */
ASC_PRT_NEXT();
len = asc_prt_line(cp, leftlen,
" Active and Waiting Request Queues (Time Unit: %d HZ):\n", HZ);
ASC_PRT_NEXT();
+
+ return totlen;
+}
+
+
+/*
+ * asc_prt_target_stats()
+ *
+ * Note: no single line should be greater than ASC_PRTLINE_SIZE,
+ * cf. asc_prt_line().
+ *
+ * This is separated from asc_prt_board_stats because a full set
+ * of targets will overflow ASC_PRTBUF_SIZE.
+ *
+ * Return the number of characters copied into 'cp'. No more than
+ * 'cplen' characters will be copied to 'cp'.
+ */
+STATIC int
+asc_prt_target_stats(struct Scsi_Host *shp, int tgt_id, char *cp, int cplen)
+{
+ int leftlen;
+ int totlen;
+ int len;
+ struct asc_stats *s;
+ ushort chip_scsi_id;
+ asc_board_t *boardp;
+ asc_queue_t *active;
+ asc_queue_t *waiting;
+
+ leftlen = cplen;
+ totlen = len = 0;
+
+ boardp = ASC_BOARDP(shp);
+ s = &boardp->asc_stats;
+
active = &ASC_BOARDP(shp)->active;
waiting = &ASC_BOARDP(shp)->waiting;
chip_scsi_id = boardp->dvc_var.adv_dvc_var.chip_scsi_id;
}
- for (i = 0; i <= ADV_MAX_TID; i++) {
-
- if ((chip_scsi_id == i) ||
- ((boardp->init_tidmask & ADV_TID_TO_TIDMASK(i)) == 0)) {
- continue;
- }
+ if ((chip_scsi_id == tgt_id) ||
+ ((boardp->init_tidmask & ADV_TID_TO_TIDMASK(tgt_id)) == 0)) {
+ return 0;
+ }
- if (active->q_tot_cnt[i] > 0 || waiting->q_tot_cnt[i] > 0) {
- len = asc_prt_line(cp, leftlen, " target %d\n", i);
- ASC_PRT_NEXT();
+ do {
+ if (active->q_tot_cnt[tgt_id] > 0 || waiting->q_tot_cnt[tgt_id] > 0) {
+ len = asc_prt_line(cp, leftlen, " target %d\n", tgt_id);
+ ASC_PRT_NEXT();
- len = asc_prt_line(cp, leftlen,
+ len = asc_prt_line(cp, leftlen,
" active: cnt [cur %d, max %d, tot %u], time [min %d, max %d, avg %lu.%01lu]\n",
- active->q_cur_cnt[i], active->q_max_cnt[i],
- active->q_tot_cnt[i],
- active->q_min_tim[i], active->q_max_tim[i],
- (active->q_tot_cnt[i] == 0) ? 0 :
- (active->q_tot_tim[i]/active->q_tot_cnt[i]),
- (active->q_tot_cnt[i] == 0) ? 0 :
- ASC_TENTHS(active->q_tot_tim[i], active->q_tot_cnt[i]));
- ASC_PRT_NEXT();
-
- len = asc_prt_line(cp, leftlen,
+ active->q_cur_cnt[tgt_id], active->q_max_cnt[tgt_id],
+ active->q_tot_cnt[tgt_id],
+ active->q_min_tim[tgt_id], active->q_max_tim[tgt_id],
+ (active->q_tot_cnt[tgt_id] == 0) ? 0 :
+ (active->q_tot_tim[tgt_id]/active->q_tot_cnt[tgt_id]),
+ (active->q_tot_cnt[tgt_id] == 0) ? 0 :
+ ASC_TENTHS(active->q_tot_tim[tgt_id], active->q_tot_cnt[tgt_id]));
+ ASC_PRT_NEXT();
+
+ len = asc_prt_line(cp, leftlen,
" waiting: cnt [cur %d, max %d, tot %u], time [min %u, max %u, avg %lu.%01lu]\n",
- waiting->q_cur_cnt[i], waiting->q_max_cnt[i],
- waiting->q_tot_cnt[i],
- waiting->q_min_tim[i], waiting->q_max_tim[i],
- (waiting->q_tot_cnt[i] == 0) ? 0 :
- (waiting->q_tot_tim[i]/waiting->q_tot_cnt[i]),
- (waiting->q_tot_cnt[i] == 0) ? 0 :
- ASC_TENTHS(waiting->q_tot_tim[i], waiting->q_tot_cnt[i]));
- ASC_PRT_NEXT();
+ waiting->q_cur_cnt[tgt_id], waiting->q_max_cnt[tgt_id],
+ waiting->q_tot_cnt[tgt_id],
+ waiting->q_min_tim[tgt_id], waiting->q_max_tim[tgt_id],
+ (waiting->q_tot_cnt[tgt_id] == 0) ? 0 :
+ (waiting->q_tot_tim[tgt_id]/waiting->q_tot_cnt[tgt_id]),
+ (waiting->q_tot_cnt[tgt_id] == 0) ? 0 :
+ ASC_TENTHS(waiting->q_tot_tim[tgt_id], waiting->q_tot_cnt[tgt_id]));
+ ASC_PRT_NEXT();
}
- }
+ } while (0);
return totlen;
}
+#endif /* CONFIG_PROC_FS */
#endif /* ADVANSYS_STATS */
#ifdef ADVANSYS_DEBUG
(ulong) s->host_queue, (ulong) s->hostt, (ulong) s->block);
printk(
-" wish_block %d, base %lu, io_port %lu, n_io_port %u, irq %d,\n",
- s->wish_block, (ulong) s->base, (ulong) s->io_port, s->n_io_port,
- s->irq);
+" base %lu, io_port %lu, n_io_port %u, irq %d,\n",
+ (ulong) s->base, (ulong) s->io_port, s->n_io_port, s->irq);
printk(
" dma_channel %d, this_id %d, can_queue %d,\n",
printk(
" isr_callback 0x%lx, sdtr_able 0x%x, wdtr_able 0x%x\n",
- (ulong) h->isr_callback, (unsigned) h->wdtr_able,
- (unsigned) h->sdtr_able);
+ (ulong) h->isr_callback, (unsigned) h->sdtr_able,
+ (unsigned) h->wdtr_able);
printk(
" start_motor 0x%x, scsi_reset_wait 0x%x, irq_no 0x%x,\n",
q->target_id, q->target_lun, (ulong) q->srb_ptr, q->a_flag);
printk(" cntl 0x%x, data_addr 0x%lx, vdata_addr 0x%lx\n",
- q->cntl, (ulong) q->data_addr, (ulong) q->vdata_addr);
+ q->cntl, (ulong)le32_to_cpu(q->data_addr), (ulong) q->vdata_addr);
printk(
" data_cnt %lu, sense_addr 0x%lx, sense_len %u,\n",
- (ulong) q->data_cnt, (ulong) q->sense_addr, q->sense_len);
+ (ulong) le32_to_cpu(q->data_cnt), (ulong) le32_to_cpu(q->sense_addr),
+ q->sense_len);
printk(
" cdb_len %u, done_status 0x%x, host_status 0x%x, scsi_status 0x%x\n",
q->cdb_len, q->done_status, q->host_status, q->scsi_status);
printk(
-" sg_working_ix %x, sg_working_data_cnt %lx, target_cmd %u\n",
- q->sg_working_ix, (ulong) q->sg_working_data_cnt, q->target_cmd);
+" sg_working_ix %x, target_cmd %u\n",
+ q->sg_working_ix, q->target_cmd);
printk(
" scsiq_rptr %lx, sg_real_addr %lx, sg_list_ptr %lx\n",
- (ulong) q->scsiq_rptr, (ulong) q->sg_real_addr,
+ (ulong) le32_to_cpu(q->scsiq_rptr), (ulong) le32_to_cpu(q->sg_real_addr),
(ulong) q->sg_list_ptr);
/* Display the request's ADV_SG_BLOCK structures. */
printk(" ASC_SG_BLOCK at addr %lx (sgblockno %d)\n",
(ulong) b, sgblockno);
printk(" sg_cnt %u, sg_ptr %lx\n",
- b->sg_cnt, (ulong) b->sg_ptr);
+ b->sg_cnt, (ulong) le32_to_cpu(b->sg_ptr));
ASC_ASSERT(b->sg_cnt <= NO_OF_SG_PER_BLOCK);
if (b->sg_ptr != 0)
{
#ifdef ADVANSYS_ASSERT
/*
- * interrupts_enabled()
+ * advansys_interrupts_enabled()
*
* Return 1 if interrupts are enabled, otherwise return 0.
*/
STATIC int
-interrupts_enabled(void)
+advansys_interrupts_enabled(void)
{
int flags;
return (0);
}
-STATIC uchar _isa_pnp_inited ASC_INITDATA = 0;
STATIC PortAddr _asc_def_iop_base[ASC_IOADR_TABLE_MAX_IX] ASC_INITDATA =
{
0x100, ASC_IOADR_1, 0x120, ASC_IOADR_2, 0x140, ASC_IOADR_3, ASC_IOADR_4,
ASC_IOADR_5, ASC_IOADR_6, ASC_IOADR_7, ASC_IOADR_8
};
+#ifdef CONFIG_ISA
+STATIC uchar _isa_pnp_inited ASC_INITDATA = 0;
+
ASC_INITFUNC(
STATIC PortAddr,
AscSearchIOPortAddr(
ASC_INITFUNC(
STATIC void,
-AscToggleIRQAct(
- PortAddr iop_base
-)
+AscSetISAPNPWaitForKey(
+ void)
)
{
- AscSetChipStatus(iop_base, CIW_IRQ_ACT);
- AscSetChipStatus(iop_base, 0);
+ outp(ASC_ISA_PNP_PORT_ADDR, 0x02);
+ outp(ASC_ISA_PNP_PORT_WRITE, 0x02);
return;
}
+#endif /* CONFIG_ISA */
ASC_INITFUNC(
STATIC void,
-AscSetISAPNPWaitForKey(
- void)
+AscToggleIRQAct(
+ PortAddr iop_base
+)
)
{
- outp(ASC_ISA_PNP_PORT_ADDR, 0x02);
- outp(ASC_ISA_PNP_PORT_WRITE, 0x02);
+ AscSetChipStatus(iop_base, CIW_IRQ_ACT);
+ AscSetChipStatus(iop_base, 0);
return;
}
return (0);
}
+#ifdef CONFIG_ISA
ASC_INITFUNC(
STATIC void,
AscEnableIsaDma(
}
return;
}
+#endif /* CONFIG_ISA */
STATIC int
AscIsrChipHalted(
#if !CC_VERY_LONG_SG_LIST
if (sg_entry_cnt > ASC_MAX_SG_LIST)
{
+ asc_dvc->in_critical_cnt--;
return(ERR);
}
#endif /* !CC_VERY_LONG_SG_LIST */
scsiq->q2.tag_code |= (ASC_TAG_FLAG_DISABLE_ASYN_USE_SYN_FIX |
ASC_TAG_FLAG_DISABLE_DISCONNECT);
} else {
- scsiq->q2.tag_code &= 0x23;
+ scsiq->q2.tag_code &= 0x27;
}
if ((scsiq->q1.cntl & QC_SG_HEAD) != 0) {
if (asc_dvc->bug_fix_cntl) {
return (sta);
}
+#if LINUX_VERSION_CODE < ASC_LINUX_VERSION(2,3,28)
STATIC int
AscAbortSRB(
ASC_DVC_VAR *asc_dvc,
asc_dvc->unit_not_ready = saved_unit_not_ready;
return (sta);
}
+#endif /* version < v2.3.28 */
-#if LINUX_VERSION_CODE >= ASC_LINUX_VERSION(1,3,89)
+#if LINUX_VERSION_CODE >= ASC_LINUX_VERSION(1,3,89) && \
+ LINUX_VERSION_CODE < ASC_LINUX_VERSION(2,3,28)
STATIC int
AscResetDevice(
ASC_DVC_VAR *asc_dvc,
asc_dvc->unit_not_ready = saved_unit_not_ready;
return (sta);
}
-#endif /* version >= v1.3.89 */
+#endif /* version >= v1.3.89 && version <= v2.3.28 */
STATIC int
AscResetSB(
}
-#if LINUX_VERSION_CODE >= ASC_LINUX_VERSION(1,3,89)
+#if LINUX_VERSION_CODE >= ASC_LINUX_VERSION(1,3,89) && \
+ LINUX_VERSION_CODE < ASC_LINUX_VERSION(2,3,28)
STATIC int
_AscWaitQDone(
PortAddr iop_base,
} while ((q_status & QS_READY) != 0);
return (1);
}
-#endif /* version >= v1.3.89 */
+#endif /* version >= v1.3.89 && version < v2.3.28 */
STATIC uchar
AscMsgOutSDTR(
return (free_q_head);
}
+#if LINUX_VERSION_CODE < ASC_LINUX_VERSION(2,3,28)
STATIC int
AscRiscHaltedAbortSRB(
ASC_DVC_VAR *asc_dvc,
DvcLeaveCritical(last_int_level);
return (0);
}
+#endif /* version < v2.3.28 */
-#if LINUX_VERSION_CODE >= ASC_LINUX_VERSION(1,3,89)
+#if LINUX_VERSION_CODE >= ASC_LINUX_VERSION(1,3,89) && \
+ LINUX_VERSION_CODE < ASC_LINUX_VERSION(2,3,28)
STATIC int
AscRiscHaltedAbortTIX(
ASC_DVC_VAR *asc_dvc,
DvcLeaveCritical(last_int_level);
return (1);
}
-#endif /* version >= v1.3.89 */
+#endif /* version >= v1.3.89 && version < v2.3.28 */
STATIC int
AscHostReqRiscHalt(
return (1);
}
+#if LINUX_VERSION_CODE < ASC_LINUX_VERSION(2,3,28)
STATIC int
AscCleanUpBusyQueue(
PortAddr iop_base
return (1);
}
#endif /* version >= v1.3.89 */
+#endif /* version < v2.3.28 */
STATIC int
AscWaitTixISRDone(
udelay((nano_sec + 999)/1000);
}
+#ifdef CONFIG_ISA
ASC_INITFUNC(
STATIC ASC_DCNT,
AscGetEisaProductID(
}
return (0);
}
+#endif /* CONFIG_ISA */
STATIC int
AscStartChip(
return (ASC_MAX_PCI_DMA_COUNT);
}
+#ifdef CONFIG_ISA
ASC_INITFUNC(
STATIC ushort,
AscGetIsaDmaChannel(
AscSetBank(iop_base, 0);
return (speed_value);
}
+#endif /* CONFIG_ISA */
ASC_INITFUNC(
STATIC ushort,
asc_dvc->cfg->chip_scsi_id) {
asc_dvc->err_code |= ASC_IERR_SET_SCSI_ID;
}
+#ifdef CONFIG_ISA
if (asc_dvc->bus_type & ASC_IS_ISA) {
AscSetIsaDmaChannel(iop_base, asc_dvc->cfg->isa_dma_channel);
AscSetIsaDmaSpeed(iop_base, asc_dvc->cfg->isa_dma_speed);
}
+#endif /* CONFIG_ISA */
return (warn_code);
}
asc_dvc->bug_fix_cntl = 0;
asc_dvc->pci_fix_asyn_xfer = 0;
asc_dvc->pci_fix_asyn_xfer_always = 0;
- asc_dvc->init_state = 0;
+ /* asc_dvc->init_state initalized in AscInitGetConfig(). */
asc_dvc->sdtr_done = 0;
asc_dvc->cur_total_qng = 0;
asc_dvc->is_in_int = 0;
AscSetChipIFC(iop_base, IFC_INIT_DEFAULT);
asc_dvc->bus_type = ASC_IS_ISAPNP;
}
+#ifdef CONFIG_ISA
if ((asc_dvc->bus_type & ASC_IS_ISA) != 0) {
asc_dvc->cfg->isa_dma_channel = (uchar) AscGetIsaDmaChannel(iop_base);
}
+#endif /* CONFIG_ISA */
for (i = 0; i <= ASC_MAX_TID; i++) {
asc_dvc->cur_dvc_qng[i] = 0;
asc_dvc->max_dvc_qng[i] = ASC_MAX_SCSI1_QNG;
eep_config->max_total_qng = 0xF0;
eep_config->max_tag_qng = 0x20;
eep_config->cntl = 0xBFFF;
- eep_config->chip_scsi_id = 7;
+ ASC_EEP_SET_CHIP_ID(eep_config, 7);
eep_config->no_scam = 0;
eep_config->adapter_info[0] = 0;
eep_config->adapter_info[1] = 0;
asc_dvc->cfg->sdtr_enable = eep_config->init_sdtr;
asc_dvc->cfg->disc_enable = eep_config->disc_enable;
asc_dvc->cfg->cmd_qng_enabled = eep_config->use_cmd_qng;
- asc_dvc->cfg->isa_dma_speed = eep_config->isa_dma_speed;
+ asc_dvc->cfg->isa_dma_speed = ASC_EEP_GET_DMA_SPD(eep_config);
asc_dvc->start_motor = eep_config->start_motor;
asc_dvc->dvc_cntl = eep_config->cntl;
asc_dvc->no_scam = eep_config->no_scam;
if (asc_dvc->bus_type & (ASC_IS_ISA | ASC_IS_VL | ASC_IS_EISA)) {
asc_dvc->irq_no = AscGetChipIRQ(iop_base, asc_dvc->bus_type);
}
- eep_config->chip_scsi_id &= ASC_MAX_TID;
- asc_dvc->cfg->chip_scsi_id = eep_config->chip_scsi_id;
+ ASC_EEP_SET_CHIP_ID(eep_config, ASC_EEP_GET_CHIP_ID(eep_config) & ASC_MAX_TID);
+ asc_dvc->cfg->chip_scsi_id = ASC_EEP_GET_CHIP_ID(eep_config);
if (((asc_dvc->bus_type & ASC_IS_PCI_ULTRA) == ASC_IS_PCI_ULTRA) &&
!(asc_dvc->dvc_cntl & ASC_CNTL_SDTR_ENABLE_ULTRA)) {
asc_dvc->host_init_sdtr_index = ASC_SDTR_ULTRA_PCI_10MB_INDEX;
asc_dvc->err_code |= ASC_IERR_GET_PHY_ADDR;
} else {
/* Align on an 8 byte boundary. */
- phy_addr = cpu_to_le32((phy_addr + 7) & ~0x7);
+ phy_addr = /*cpu_to_le32*/((phy_addr + 7) & ~0x7);
AscWriteLramDWord(iop_base, ASCV_OVERRUN_PADDR_D, phy_addr);
AscWriteLramDWord(iop_base, ASCV_OVERRUN_BSIZE_D,
ASC_OVERRUN_BSIZE - 8);
ushort wval;
ushort sum;
ushort *wbuf;
+ ushort *charfields;
int cfg_beg;
int cfg_end;
int s_addr;
int isa_pnp_wsize;
wbuf = (ushort *) cfg_buf;
+ charfields = (ushort *) &ASCEEP_Config_Field_IsChar;
sum = 0;
isa_pnp_wsize = 0;
for (s_addr = 0; s_addr < (2 + isa_pnp_wsize); s_addr++, wbuf++) {
wval = AscReadEEPWord(iop_base, (uchar) s_addr);
sum += wval;
- *wbuf = wval;
+ /* Swap to native as needed */
+ if (*charfields++)
+ *wbuf = cpu_to_le16(wval);
+ else
+ *wbuf = wval;
}
if (bus_type & ASC_IS_VL) {
cfg_beg = ASC_EEP_DVC_CFG_BEG_VL;
wval = AscReadEEPWord(iop_base, (uchar) s_addr);
sum += wval;
*wbuf = wval;
+ /* Swap to native as needed */
+ if (*charfields++)
+ *wbuf = cpu_to_le16(wval);
+ else
+ *wbuf = wval;
}
*wbuf = AscReadEEPWord(iop_base, (uchar) s_addr);
+ if (charfields)
+ *wbuf = cpu_to_le16(*wbuf);
return (sum);
}
*/
/* a_mcode.h */
+
STATIC unsigned char _adv_asc3550_buf[] = {
- 0x00, 0x00, 0x00, 0xf2, 0x00, 0xf0, 0x00, 0x16, 0x00, 0xfc, 0x48, 0xe4, 0x01, 0x00, 0x18, 0xe4,
- 0x00, 0xf6, 0x01, 0xf6, 0x18, 0x80, 0x48, 0x19, 0x02, 0x00, 0xff, 0xff, 0x03, 0xf6, 0x00, 0xfa,
- 0xff, 0x00, 0x82, 0xe7, 0x01, 0xfa, 0x9e, 0xe7, 0x09, 0xe7, 0x3a, 0x0e, 0x00, 0xea, 0x01, 0xe6,
- 0x55, 0xf0, 0x03, 0x00, 0x08, 0x00, 0x18, 0xf4, 0x3e, 0x01, 0x3e, 0x57, 0x04, 0x00, 0x85, 0xf0,
- 0x00, 0xe6, 0x00, 0xec, 0x1e, 0xf0, 0x32, 0xf0, 0x34, 0x19, 0x86, 0xf0, 0xd0, 0x01, 0xd5, 0xf0,
- 0xde, 0x0c, 0x98, 0x57, 0xbc, 0x00, 0x0c, 0x1c, 0x0e, 0x13, 0x38, 0x54, 0xb1, 0xf0, 0xb4, 0x00,
- 0x01, 0xfc, 0x03, 0xfc, 0xd8, 0x0c, 0x00, 0x57, 0x01, 0xf0, 0x02, 0x13, 0x03, 0xe6, 0x10, 0x00,
- 0x18, 0x40, 0x3e, 0x1c, 0x6c, 0x01, 0x6e, 0x01, 0xbd, 0x00, 0xe0, 0x00, 0x02, 0x48, 0x02, 0x80,
- 0x08, 0x12, 0x30, 0xe4, 0x3c, 0x00, 0x4e, 0x01, 0x64, 0x12, 0x80, 0x00, 0x9c, 0x15, 0xbb, 0x00,
- 0x00, 0x4e, 0x01, 0x01, 0x01, 0xea, 0x04, 0x12, 0x9e, 0x0f, 0xb6, 0x00, 0xb9, 0x54, 0xe2, 0x0f,
- 0x00, 0x80, 0x06, 0xf7, 0x10, 0x44, 0x24, 0x01, 0x28, 0x01, 0x32, 0x00, 0x3c, 0x01, 0x3c, 0x56,
- 0x3e, 0x00, 0x4b, 0xe4, 0x4c, 0x1c, 0x68, 0x01, 0x6a, 0x01, 0x70, 0x01, 0x72, 0x01, 0x74, 0x01,
- 0x76, 0x01, 0x78, 0x01, 0xe2, 0x0c, 0x00, 0x01, 0x02, 0xee, 0x02, 0xfc, 0x03, 0x58, 0x03, 0xf7,
- 0x04, 0x80, 0x05, 0xfc, 0x08, 0x44, 0x09, 0xf0, 0x0f, 0x00, 0x1b, 0x80, 0x20, 0x01, 0x38, 0x1c,
- 0x40, 0x00, 0x40, 0x15, 0x4b, 0xf4, 0x4e, 0x1c, 0x5b, 0xf0, 0x5d, 0xf0, 0xaa, 0x00, 0xbb, 0x55,
- 0xbe, 0x00, 0xc0, 0x00, 0xe0, 0x08, 0xe0, 0x14, 0xec, 0x0f, 0x00, 0x4c, 0x00, 0xdc, 0x02, 0x4a,
- 0x05, 0x00, 0x05, 0xf0, 0x05, 0xf8, 0x06, 0x13, 0x08, 0x13, 0x0c, 0x00, 0x0e, 0x47, 0x0e, 0xf7,
- 0x19, 0x00, 0x20, 0x00, 0x2a, 0x01, 0x30, 0x0e, 0x32, 0x1c, 0x36, 0x00, 0x45, 0x5a, 0x59, 0xf0,
- 0x62, 0x0a, 0x69, 0x08, 0x72, 0x0b, 0x83, 0x59, 0xb8, 0xf0, 0xbd, 0x56, 0xcc, 0x12, 0xec, 0x17,
- 0xee, 0x0f, 0xf0, 0x00, 0xf8, 0x17, 0x01, 0x48, 0x02, 0xfa, 0x03, 0xfa, 0x04, 0x10, 0x04, 0xea,
- 0x04, 0xf6, 0x04, 0xfc, 0x05, 0x80, 0x05, 0xe6, 0x06, 0x00, 0x06, 0x12, 0x0a, 0x10, 0x0b, 0xf0,
- 0x0c, 0x10, 0x0c, 0xf0, 0x12, 0x10, 0x26, 0x0e, 0x30, 0x1c, 0x33, 0x00, 0x34, 0x00, 0x38, 0x44,
- 0x40, 0x5c, 0x4a, 0xe4, 0x62, 0x1a, 0x68, 0x08, 0x68, 0x54, 0x83, 0x55, 0x83, 0x5a, 0x8c, 0x14,
- 0x8e, 0x0a, 0x90, 0x14, 0x91, 0x44, 0xa4, 0x00, 0xb0, 0x57, 0xb5, 0x00, 0xba, 0x00, 0xce, 0x45,
- 0xd0, 0x00, 0xd8, 0x16, 0xe1, 0x00, 0xe7, 0x00, 0x00, 0x54, 0x01, 0x58, 0x02, 0x10, 0x02, 0xe6,
- 0x03, 0xa1, 0x04, 0x13, 0x06, 0x83, 0x06, 0xf0, 0x07, 0x00, 0x0a, 0x00, 0x0a, 0x12, 0x0a, 0xf0,
- 0x0c, 0x04, 0x0c, 0x12, 0x0c, 0x90, 0x10, 0x10, 0x10, 0x13, 0x12, 0x1c, 0x17, 0x00, 0x19, 0xe4,
- 0x1a, 0x10, 0x1c, 0x00, 0x1c, 0x12, 0x1d, 0xf7, 0x1e, 0x13, 0x20, 0x1c, 0x20, 0xe7, 0x22, 0x01,
- 0x26, 0x01, 0x2a, 0x12, 0x30, 0xe7, 0x34, 0x1c, 0x36, 0x1c, 0x38, 0x12, 0x41, 0x58, 0x43, 0x48,
- 0x44, 0x55, 0x46, 0x1c, 0x4c, 0x0e, 0x4e, 0xe4, 0x52, 0x14, 0x5c, 0xf0, 0x72, 0x02, 0x74, 0x03,
- 0x77, 0x57, 0x89, 0x48, 0x8e, 0x90, 0x99, 0x00, 0x9b, 0x00, 0x9c, 0x32, 0x9e, 0x00, 0xa8, 0x00,
- 0xb9, 0x00, 0xba, 0x06, 0xbc, 0x12, 0xbf, 0x57, 0xc0, 0x01, 0xfe, 0x9c, 0xf0, 0x26, 0x02, 0xfe,
- 0x00, 0x0d, 0xff, 0x10, 0x00, 0x00, 0xfe, 0xc2, 0x01, 0xfe, 0x56, 0x19, 0x00, 0xfc, 0xfe, 0x80,
- 0x01, 0xff, 0x03, 0x00, 0x00, 0xfe, 0x6a, 0x13, 0xfe, 0x05, 0x05, 0xff, 0x40, 0x00, 0x00, 0x0d,
- 0xff, 0x09, 0x00, 0x00, 0xff, 0x08, 0x01, 0x01, 0xff, 0x10, 0xff, 0xff, 0xff, 0x1f, 0x00, 0x00,
- 0xff, 0x10, 0xff, 0xff, 0xff, 0x0f, 0x00, 0x00, 0xfe, 0x78, 0x56, 0xfe, 0x34, 0x12, 0xff, 0x21,
- 0x00, 0x00, 0xfe, 0x04, 0xf7, 0xfc, 0x2b, 0x51, 0x0c, 0x01, 0xfe, 0xea, 0x0e, 0xfe, 0x04, 0xf7,
- 0xfc, 0x51, 0x0c, 0x1d, 0x2b, 0xfe, 0x3d, 0xf0, 0xfe, 0xf8, 0x01, 0xfe, 0x20, 0xf0, 0xd0, 0x04,
- 0x56, 0x4b, 0x02, 0xfe, 0x1c, 0x0d, 0x01, 0xfe, 0x7c, 0x0d, 0xfe, 0xe9, 0x12, 0x02, 0xfe, 0x04,
- 0x03, 0xfe, 0x28, 0x1c, 0x04, 0xfe, 0xa6, 0x00, 0xfe, 0xdd, 0x12, 0x4e, 0x12, 0xfe, 0xa6, 0x00,
- 0xc5, 0xfe, 0x48, 0xf0, 0xfe, 0x7c, 0x02, 0xfe, 0x49, 0xf0, 0xfe, 0x96, 0x02, 0xfe, 0x4a, 0xf0,
- 0xfe, 0xb4, 0x02, 0xfe, 0x46, 0xf0, 0xfe, 0x46, 0x02, 0xfe, 0x47, 0xf0, 0xfe, 0x4c, 0x02, 0xfe,
- 0x43, 0xf0, 0xfe, 0x3a, 0x02, 0xfe, 0x44, 0xf0, 0xfe, 0x3e, 0x02, 0xfe, 0x45, 0xf0, 0xfe, 0x42,
- 0x02, 0x09, 0x0c, 0x9e, 0x09, 0x06, 0x12, 0xbb, 0x02, 0x26, 0xfe, 0x00, 0x1c, 0xfe, 0xf1, 0x10,
- 0xfe, 0x02, 0x1c, 0xfe, 0xed, 0x10, 0xfe, 0x1e, 0x1c, 0xfe, 0xe9, 0x10, 0x01, 0xfe, 0x4c, 0x17,
- 0xfe, 0xe7, 0x10, 0xfe, 0x06, 0xfc, 0xf7, 0x0e, 0x78, 0x01, 0xab, 0x02, 0x26, 0x17, 0x55, 0x4a,
- 0xbd, 0x01, 0xfe, 0x60, 0x0f, 0x0e, 0x78, 0x01, 0x8b, 0xfe, 0xbd, 0x10, 0x0e, 0x78, 0x01, 0x8b,
- 0xfe, 0xad, 0x10, 0xfe, 0x16, 0x1c, 0xfe, 0x58, 0x1c, 0x09, 0x06, 0x12, 0xbb, 0x2b, 0x22, 0x26,
- 0xfe, 0x3d, 0xf0, 0xfe, 0xf8, 0x01, 0x27, 0xfe, 0x8a, 0x02, 0xfe, 0x5a, 0x1c, 0xd5, 0xfe, 0x14,
- 0x1c, 0x17, 0xfe, 0x30, 0x00, 0x4a, 0xbd, 0x01, 0xfe, 0x50, 0x0f, 0x09, 0x06, 0x12, 0xbb, 0x02,
- 0xfe, 0xc2, 0x01, 0x21, 0x2a, 0x05, 0x10, 0x35, 0xfe, 0x69, 0x10, 0x09, 0x06, 0x12, 0xbb, 0xfe,
- 0x04, 0xec, 0x2a, 0x08, 0x2a, 0x09, 0x3c, 0x1d, 0x01, 0x46, 0x7f, 0xfe, 0x05, 0xf6, 0xf7, 0x01,
- 0xfe, 0x76, 0x16, 0x0a, 0x41, 0x89, 0x38, 0x11, 0x47, 0x1d, 0xca, 0x08, 0x1c, 0x09, 0x43, 0x01,
- 0x71, 0x02, 0x26, 0x0e, 0x3d, 0x01, 0x15, 0x05, 0x10, 0x2c, 0x08, 0x1c, 0x09, 0x43, 0x01, 0x7b,
- 0xfe, 0x28, 0x10, 0x0e, 0xc0, 0x01, 0x15, 0xe6, 0x0e, 0x79, 0x01, 0x15, 0xfe, 0x49, 0x54, 0x74,
- 0xfe, 0x12, 0x03, 0x08, 0x1c, 0x09, 0x43, 0x01, 0x71, 0x02, 0x26, 0x2b, 0x7f, 0xfe, 0x02, 0xe8,
- 0x2f, 0xfb, 0xfe, 0x9e, 0x43, 0xf0, 0xfe, 0x07, 0x4b, 0xfe, 0x20, 0xf0, 0xd0, 0xfe, 0x40, 0x1c,
- 0x22, 0xef, 0xfe, 0x26, 0xf0, 0xfe, 0x70, 0x03, 0xfe, 0xa0, 0xf0, 0xfe, 0x5e, 0x03, 0xfe, 0x11,
- 0xf0, 0xd0, 0xfe, 0x0e, 0x10, 0xfe, 0x9f, 0xf0, 0xfe, 0x7e, 0x03, 0xe9, 0x13, 0xfe, 0x11, 0x00,
- 0x02, 0x62, 0x2b, 0xfe, 0x48, 0x1c, 0xe9, 0x22, 0xef, 0x34, 0xef, 0xfe, 0x82, 0xf0, 0xfe, 0x84,
- 0x03, 0x2d, 0x21, 0xbe, 0x6a, 0x16, 0xbe, 0x0e, 0x79, 0x01, 0x15, 0x6a, 0x7d, 0x08, 0x1c, 0x09,
- 0x43, 0x01, 0x46, 0x11, 0x3d, 0x08, 0x3d, 0x09, 0x99, 0x01, 0x71, 0xf5, 0x11, 0xfe, 0xe4, 0x00,
- 0x2e, 0xfe, 0xca, 0x03, 0x22, 0x32, 0x1f, 0xfe, 0xda, 0x03, 0x01, 0x4c, 0xcb, 0xfe, 0xea, 0x03,
- 0x6b, 0x92, 0xcf, 0xfe, 0xaa, 0x06, 0x02, 0x28, 0x04, 0x78, 0x29, 0x18, 0xfe, 0x1c, 0x05, 0x17,
- 0x85, 0x01, 0x44, 0x01, 0x97, 0x01, 0x9a, 0x34, 0xfe, 0x5c, 0x02, 0x02, 0xee, 0xe9, 0x2b, 0x51,
- 0x19, 0xfe, 0x67, 0x1b, 0xfb, 0xf0, 0xfe, 0x48, 0x1c, 0x8c, 0x01, 0xfa, 0xac, 0xfe, 0x96, 0xf0,
- 0xfe, 0x24, 0x04, 0x2e, 0xfe, 0x28, 0x04, 0x34, 0x26, 0x0e, 0x3d, 0x01, 0x15, 0x05, 0x10, 0x18,
- 0xfe, 0x08, 0x05, 0x3e, 0x90, 0x9f, 0x2f, 0x82, 0x6e, 0x22, 0x32, 0x1f, 0x28, 0x04, 0x78, 0x29,
- 0xfe, 0x10, 0x12, 0x17, 0x85, 0x01, 0x44, 0x34, 0xfe, 0x5c, 0x02, 0x02, 0xee, 0x31, 0xfe, 0xa0,
- 0x00, 0xfe, 0x9b, 0x57, 0xfe, 0x5e, 0x12, 0x0a, 0x07, 0x06, 0xfe, 0x56, 0x12, 0x23, 0x24, 0x91,
- 0x01, 0x0b, 0x82, 0x6e, 0x1f, 0xfe, 0xd8, 0x04, 0x23, 0x24, 0x91, 0x01, 0x0b, 0x1f, 0x28, 0x23,
- 0x24, 0xb3, 0xfe, 0x4c, 0x44, 0xfe, 0x32, 0x12, 0x57, 0xfe, 0x44, 0x48, 0x08, 0xd6, 0xfe, 0x4c,
- 0x54, 0x74, 0xfe, 0x08, 0x05, 0x7f, 0x9f, 0x2f, 0xfe, 0x06, 0x80, 0xfe, 0x48, 0x47, 0xfe, 0x48,
- 0x13, 0x3f, 0x05, 0xfe, 0xcc, 0x00, 0xfe, 0x40, 0x13, 0x0a, 0x07, 0x06, 0xe5, 0xfe, 0x06, 0x10,
- 0x23, 0x24, 0xb3, 0x0a, 0x07, 0x37, 0xda, 0x17, 0xa4, 0x0a, 0x07, 0x06, 0x4b, 0x17, 0xfe, 0x0d,
- 0x00, 0x01, 0x44, 0x34, 0xfe, 0xc0, 0x0c, 0x02, 0x28, 0x39, 0x11, 0xfe, 0xe6, 0x00, 0xfe, 0x1c,
- 0x90, 0xb0, 0x03, 0x17, 0xa4, 0x01, 0x44, 0x34, 0x26, 0x22, 0x26, 0x02, 0xfe, 0x10, 0x05, 0xfe,
- 0x42, 0x5b, 0x51, 0x19, 0xfe, 0x46, 0x59, 0xfb, 0xf0, 0x17, 0x45, 0xfe, 0x07, 0x80, 0xfe, 0x31,
- 0x44, 0x0a, 0x07, 0x0c, 0xfe, 0x78, 0x13, 0xfe, 0x20, 0x80, 0x05, 0x19, 0xfe, 0x70, 0x12, 0x6d,
- 0x07, 0x06, 0xfe, 0x60, 0x13, 0x04, 0xfe, 0xa2, 0x00, 0x29, 0x18, 0xfe, 0xa8, 0x05, 0xfe, 0x31,
- 0xe4, 0x70, 0x6d, 0x07, 0x0c, 0xfe, 0x4a, 0x13, 0x04, 0xfe, 0xa0, 0x00, 0x29, 0xfe, 0x42, 0x12,
- 0x5a, 0x2e, 0xfe, 0x68, 0x05, 0x22, 0x32, 0xf1, 0x01, 0x0b, 0x25, 0xfe, 0xc0, 0x05, 0x11, 0xfe,
- 0xe3, 0x00, 0x2d, 0x6d, 0xfe, 0x4a, 0xf0, 0xfe, 0x92, 0x05, 0xfe, 0x49, 0xf0, 0xfe, 0x8c, 0x05,
- 0xa8, 0x20, 0xfe, 0x21, 0x00, 0xa6, 0x20, 0xfe, 0x22, 0x00, 0x9e, 0x20, 0x89, 0xfe, 0x09, 0x48,
- 0x01, 0x0b, 0x25, 0xfe, 0xc0, 0x05, 0xfe, 0xe2, 0x08, 0x6d, 0x07, 0xd9, 0x4b, 0x01, 0x96, 0x20,
- 0x06, 0x16, 0xe0, 0x4a, 0xfe, 0x27, 0x01, 0x0a, 0x07, 0x37, 0xe1, 0x4e, 0x01, 0xb9, 0x17, 0xa4,
- 0x0a, 0x07, 0x06, 0x4b, 0x17, 0xfe, 0x0d, 0x00, 0x01, 0x44, 0x01, 0x97, 0x01, 0x9a, 0x34, 0xfe,
- 0xc0, 0x0c, 0x02, 0x28, 0x04, 0xfe, 0x9c, 0x00, 0x29, 0xfe, 0x3e, 0x12, 0x04, 0x53, 0x29, 0xfe,
- 0x36, 0x13, 0x4e, 0x01, 0xb9, 0x25, 0xfe, 0x38, 0x06, 0x0e, 0x06, 0x6d, 0x07, 0x1a, 0xfe, 0x02,
- 0x12, 0x77, 0x01, 0xfe, 0x26, 0x14, 0x1f, 0xfe, 0x2e, 0x06, 0x11, 0xc2, 0x01, 0x4c, 0x11, 0xfe,
- 0xe5, 0x00, 0x04, 0x53, 0xbc, 0x0f, 0x53, 0x04, 0xf6, 0x29, 0xfe, 0x62, 0x12, 0x04, 0x4d, 0x29,
- 0xfe, 0x5a, 0x13, 0x01, 0xfe, 0x9e, 0x18, 0x01, 0xfe, 0xf0, 0x18, 0xe7, 0xa3, 0x1a, 0x08, 0x63,
- 0xff, 0x02, 0x00, 0x57, 0x66, 0x7e, 0x1b, 0x50, 0xc9, 0xa3, 0x6c, 0x4e, 0x01, 0xb9, 0x25, 0xfe,
- 0xa2, 0x06, 0x6d, 0x07, 0x1e, 0xa5, 0x95, 0x0e, 0x55, 0x01, 0xfe, 0x54, 0x14, 0x1f, 0xfe, 0x98,
- 0x06, 0x11, 0xc2, 0x01, 0x4c, 0x11, 0xfe, 0xe5, 0x00, 0x04, 0x4d, 0xbc, 0x0f, 0x4d, 0x09, 0x06,
- 0x01, 0xb9, 0xf5, 0x73, 0x8c, 0x01, 0xfa, 0xac, 0x11, 0xfe, 0xe2, 0x00, 0x2e, 0xf9, 0x22, 0x32,
- 0xcf, 0xfe, 0xd6, 0x06, 0x81, 0xfe, 0x74, 0x07, 0xcb, 0xfe, 0x7c, 0x07, 0x6b, 0x92, 0x02, 0x28,
- 0x0a, 0x07, 0x0c, 0xfe, 0x2e, 0x12, 0x14, 0x19, 0x01, 0x0b, 0x14, 0x00, 0x01, 0x0b, 0x14, 0x00,
- 0x01, 0x0b, 0x14, 0x00, 0x01, 0x0b, 0xfe, 0x99, 0xa4, 0x01, 0x0b, 0x14, 0x00, 0x02, 0xfe, 0x4c,
- 0x08, 0x68, 0x07, 0x1e, 0xe5, 0x0a, 0x07, 0x1e, 0xfe, 0x30, 0x13, 0x14, 0xfe, 0x1b, 0x00, 0x01,
- 0x0b, 0x14, 0x00, 0x01, 0x0b, 0x14, 0x00, 0x01, 0x0b, 0x14, 0x00, 0x01, 0x0b, 0x14, 0x06, 0x01,
- 0x0b, 0x14, 0x00, 0x02, 0xfe, 0x2a, 0x0b, 0x77, 0xfe, 0x9a, 0x81, 0x67, 0x89, 0xfe, 0x09, 0x6f,
- 0xfe, 0x93, 0x45, 0x18, 0xfe, 0x84, 0x07, 0x2e, 0xfe, 0x5c, 0x07, 0x22, 0x32, 0xcf, 0xfe, 0x54,
- 0x07, 0x6b, 0x92, 0x81, 0xfe, 0x74, 0x07, 0x02, 0x28, 0x01, 0x4c, 0x02, 0xf9, 0x14, 0x1a, 0x02,
- 0xf9, 0xfe, 0x9c, 0xf7, 0xfe, 0xec, 0x07, 0xfe, 0x2c, 0x90, 0xfe, 0xae, 0x90, 0x75, 0xfe, 0xd2,
- 0x07, 0x0f, 0x5d, 0x12, 0x5e, 0x0a, 0x41, 0x70, 0x38, 0x01, 0xfe, 0x34, 0x18, 0x05, 0x10, 0x83,
- 0xfe, 0x83, 0xe7, 0x88, 0xa6, 0xfe, 0x03, 0x40, 0x0a, 0x41, 0x45, 0x38, 0x01, 0xc1, 0xaf, 0xfe,
- 0x1f, 0x40, 0x16, 0x61, 0x01, 0xfe, 0xde, 0x12, 0xfe, 0x08, 0x50, 0xfe, 0x8a, 0x50, 0xfe, 0x34,
- 0x51, 0xfe, 0xb6, 0x51, 0xfe, 0x08, 0x90, 0xfe, 0x8a, 0x90, 0x0f, 0x5b, 0x12, 0x5c, 0xd2, 0xf2,
- 0x0f, 0x3a, 0x12, 0x3b, 0xfe, 0x60, 0x10, 0x0a, 0x07, 0x70, 0xe1, 0xfe, 0x2c, 0x90, 0xfe, 0xae,
- 0x90, 0x0f, 0x5d, 0x12, 0x5e, 0x0a, 0x07, 0x45, 0xc9, 0x01, 0xc1, 0xfe, 0x1f, 0x80, 0x16, 0x61,
- 0xfe, 0x34, 0x90, 0xfe, 0xb6, 0x90, 0x0f, 0x5f, 0x12, 0x60, 0xfe, 0x08, 0x90, 0xfe, 0x8a, 0x90,
- 0x0f, 0x5b, 0x12, 0x5c, 0xa2, 0x07, 0x45, 0x2c, 0xd2, 0xf2, 0x0f, 0x3a, 0x12, 0x3b, 0xa8, 0xfe,
- 0x28, 0x90, 0xfe, 0xaa, 0x90, 0x0f, 0x3a, 0x12, 0x3b, 0x0f, 0x42, 0x12, 0x58, 0x0a, 0x41, 0x1a,
- 0x38, 0x2b, 0x08, 0x80, 0x2e, 0xfe, 0x62, 0x08, 0xfe, 0x9e, 0xf0, 0xfe, 0x76, 0x08, 0x9b, 0x18,
- 0x32, 0x2b, 0x52, 0xfe, 0xed, 0x10, 0xa7, 0xfe, 0x9a, 0x08, 0xa9, 0xfe, 0xb6, 0x08, 0x81, 0xfe,
- 0x8e, 0x08, 0xcb, 0xfe, 0x94, 0x08, 0x6b, 0x92, 0x02, 0x28, 0x01, 0x4c, 0xfe, 0xc9, 0x10, 0x14,
- 0x1a, 0xfe, 0xc9, 0x10, 0x68, 0x07, 0x06, 0xfe, 0x10, 0x12, 0x68, 0x07, 0x0c, 0x40, 0x0a, 0x07,
- 0x0c, 0xfe, 0x7e, 0x12, 0xfe, 0x2e, 0x1c, 0xaa, 0x68, 0x07, 0x06, 0x40, 0x68, 0x07, 0x0c, 0xfe,
- 0x6a, 0x12, 0xfe, 0x2c, 0x1c, 0xa2, 0x07, 0x45, 0xd4, 0xa2, 0x41, 0x45, 0xfe, 0x05, 0x40, 0xd2,
- 0xf2, 0xfe, 0x28, 0x50, 0xfe, 0xaa, 0x50, 0xfe, 0xaa, 0xf0, 0xfe, 0x4e, 0x09, 0xfe, 0xac, 0xf0,
- 0xfe, 0xee, 0x08, 0xfe, 0x92, 0x10, 0xe3, 0xfe, 0xf3, 0x10, 0xfe, 0xad, 0xf0, 0xfe, 0xfa, 0x08,
- 0x02, 0xfe, 0x5c, 0x0a, 0xe4, 0xfe, 0xe7, 0x10, 0xfe, 0x2b, 0xf0, 0xb8, 0xfe, 0x6b, 0x18, 0x1b,
- 0xfe, 0x00, 0xfe, 0xda, 0xc5, 0xfe, 0xd2, 0xf0, 0xb8, 0xfe, 0x76, 0x18, 0x1b, 0x19, 0x18, 0xb8,
- 0x04, 0xdf, 0x1b, 0x06, 0x18, 0xb8, 0xa7, 0x7a, 0xa9, 0x7a, 0xe3, 0xe4, 0xfe, 0xb1, 0x10, 0x8c,
- 0x5a, 0x39, 0x17, 0xa4, 0x01, 0x44, 0x13, 0xfe, 0x35, 0x00, 0x34, 0x62, 0x13, 0x8d, 0x02, 0x62,
- 0xfe, 0x74, 0x18, 0x1b, 0xfe, 0x00, 0xf8, 0x18, 0x7a, 0x51, 0x1e, 0x01, 0xfe, 0x7c, 0x0d, 0xd1,
- 0x08, 0x1c, 0x09, 0x43, 0x01, 0x71, 0x21, 0x2f, 0x3e, 0x51, 0x19, 0x02, 0x7a, 0xfe, 0x98, 0x80,
- 0xd7, 0x0c, 0x27, 0xfe, 0x3e, 0x0a, 0x0a, 0x07, 0x70, 0xfe, 0x82, 0x12, 0x0a, 0x07, 0x1a, 0xfe,
- 0x66, 0x13, 0x21, 0x61, 0x6a, 0xc8, 0xfe, 0x83, 0x80, 0xfe, 0xc8, 0x44, 0xfe, 0x2e, 0x13, 0xfe,
- 0x04, 0x91, 0xfe, 0x86, 0x91, 0x64, 0x2f, 0xfe, 0x40, 0x59, 0xfe, 0xc1, 0x59, 0x75, 0xfe, 0xea,
- 0x08, 0x04, 0x5d, 0x30, 0x5e, 0x0f, 0xae, 0x12, 0x8d, 0x9c, 0x5d, 0x9d, 0x5e, 0x01, 0xc1, 0xaf,
- 0x64, 0x2f, 0x16, 0x61, 0xa1, 0x42, 0x69, 0x58, 0x65, 0x5f, 0x31, 0x60, 0xe8, 0xfe, 0xe5, 0x55,
- 0xfe, 0x04, 0xfa, 0x42, 0xfe, 0x05, 0xfa, 0x58, 0x01, 0xfe, 0xde, 0x12, 0xfe, 0x36, 0x10, 0x2d,
- 0x0f, 0xae, 0x0f, 0x8d, 0x65, 0x5f, 0x31, 0x60, 0xaa, 0x0a, 0x07, 0x1a, 0x18, 0xfe, 0xea, 0x08,
- 0x65, 0x3a, 0x31, 0x3b, 0x0a, 0x07, 0xfe, 0xf7, 0x00, 0x38, 0x04, 0x5b, 0x30, 0x5c, 0xfe, 0x10,
- 0x58, 0xfe, 0x91, 0x58, 0xfe, 0x14, 0x59, 0xfe, 0x95, 0x59, 0x02, 0x7a, 0x0a, 0x07, 0x1a, 0x18,
- 0xfe, 0xea, 0x08, 0x0a, 0x07, 0xfe, 0xf7, 0x00, 0x38, 0xfe, 0x3a, 0x55, 0xfe, 0x19, 0x81, 0x77,
- 0xfe, 0x10, 0x90, 0xfe, 0x92, 0x90, 0xfe, 0xd7, 0x10, 0x3f, 0x05, 0xc3, 0x18, 0xfe, 0xf6, 0x08,
- 0x11, 0xc3, 0xfe, 0x98, 0x80, 0xd7, 0x0c, 0xfe, 0x14, 0x13, 0x04, 0x3a, 0x30, 0x3b, 0x75, 0xfe,
- 0xf6, 0x08, 0xfe, 0x0c, 0x58, 0xfe, 0x8d, 0x58, 0x02, 0x7a, 0x2d, 0x4e, 0xfe, 0x19, 0x80, 0xfe,
- 0xf1, 0x10, 0x0a, 0x07, 0x0c, 0xa5, 0xfe, 0x6c, 0x19, 0xfe, 0x19, 0x41, 0xfe, 0x8e, 0x10, 0xfe,
- 0x6c, 0x19, 0x9c, 0x3a, 0xfe, 0xed, 0x19, 0x9d, 0x3b, 0xfe, 0x0c, 0x51, 0xfe, 0x8e, 0x51, 0xfe,
- 0x6b, 0x18, 0x1b, 0xfe, 0x00, 0xff, 0x35, 0xfe, 0x74, 0x10, 0xc5, 0xfe, 0xd2, 0xf0, 0xfe, 0xd6,
- 0x0a, 0xfe, 0x76, 0x18, 0x1b, 0x19, 0xce, 0x04, 0xdf, 0x1b, 0x06, 0x84, 0x13, 0xfe, 0x16, 0x00,
- 0x02, 0x62, 0xfe, 0xd1, 0xf0, 0xfe, 0xe8, 0x0a, 0x17, 0x80, 0x01, 0x44, 0x13, 0xd6, 0xfe, 0x42,
- 0x10, 0xfe, 0xce, 0xf0, 0xfe, 0xee, 0x0a, 0xfe, 0x3c, 0x10, 0xfe, 0xcd, 0xf0, 0xfe, 0xfa, 0x0a,
- 0x13, 0xfe, 0x22, 0x00, 0x02, 0x62, 0xfe, 0xcb, 0xf0, 0xfe, 0x06, 0x0b, 0x13, 0xfe, 0x24, 0x00,
- 0x02, 0x62, 0xfe, 0xd0, 0xf0, 0xfe, 0x10, 0x0b, 0x13, 0x88, 0xd8, 0xfe, 0xcf, 0xf0, 0xfe, 0x1a,
- 0x0b, 0x13, 0x89, 0xd3, 0xfe, 0xcc, 0xf0, 0xfe, 0x2a, 0x0b, 0xfe, 0x84, 0x80, 0xd7, 0x1a, 0x4b,
- 0x13, 0xfe, 0x12, 0x00, 0x2b, 0x08, 0x80, 0x2e, 0xfe, 0x30, 0x0b, 0xfe, 0x9e, 0xf0, 0xfe, 0x44,
- 0x0b, 0x9b, 0x18, 0x32, 0x2b, 0x52, 0xfe, 0xed, 0x10, 0xa7, 0x28, 0xa9, 0x28, 0x2b, 0xf5, 0x2e,
- 0xfe, 0x50, 0x0b, 0x22, 0x32, 0x81, 0xfe, 0x6c, 0x0b, 0x6b, 0x92, 0xa7, 0xfe, 0xec, 0x07, 0xa9,
- 0xfe, 0xec, 0x07, 0x02, 0x28, 0x01, 0x4c, 0xfe, 0xdb, 0x10, 0x11, 0xfe, 0xe8, 0x00, 0xe3, 0xe4,
- 0x8c, 0x82, 0x6e, 0xfe, 0x89, 0xf0, 0x28, 0x23, 0x24, 0xfe, 0xe9, 0x09, 0x01, 0x0b, 0x82, 0x6e,
- 0x1f, 0x28, 0x23, 0x24, 0x91, 0x34, 0xfe, 0xa8, 0x0b, 0x22, 0x32, 0x02, 0xfe, 0x9c, 0x0b, 0x9b,
- 0x40, 0x13, 0xfe, 0x42, 0x00, 0x02, 0x62, 0xa0, 0x06, 0xfe, 0x81, 0x49, 0x96, 0x0a, 0x07, 0x0c,
- 0xfe, 0x5a, 0x13, 0x13, 0x00, 0x59, 0x0c, 0xfe, 0x6a, 0x12, 0x59, 0xfe, 0x28, 0x00, 0x27, 0xfe,
- 0xee, 0x0c, 0x0e, 0x79, 0x01, 0x15, 0x05, 0x00, 0x84, 0x36, 0xfe, 0x28, 0x00, 0x02, 0xfe, 0xee,
- 0x0c, 0x01, 0x97, 0x01, 0x9a, 0x0e, 0xc0, 0x01, 0xfe, 0x44, 0x0e, 0xb2, 0x08, 0x3d, 0x09, 0x99,
- 0x01, 0x46, 0x11, 0x47, 0x08, 0x1c, 0x09, 0x43, 0x01, 0x7b, 0x02, 0x26, 0x13, 0xfe, 0x44, 0x00,
- 0x59, 0x0c, 0xa5, 0x36, 0x0c, 0xfe, 0xc0, 0x10, 0x01, 0x96, 0x36, 0x0c, 0xfe, 0xb6, 0x10, 0x01,
- 0x96, 0xfe, 0x19, 0x82, 0xfe, 0x34, 0x46, 0xfe, 0x0a, 0x13, 0x36, 0x0c, 0x13, 0xfe, 0x43, 0x00,
- 0xfe, 0xa2, 0x10, 0x0a, 0x41, 0x0c, 0x38, 0x01, 0x97, 0x01, 0x9a, 0xb2, 0x08, 0x3d, 0x09, 0x99,
- 0x01, 0x46, 0x11, 0x47, 0x08, 0x1c, 0x09, 0x43, 0x01, 0x7b, 0x51, 0x0c, 0xb2, 0x1d, 0xca, 0x02,
- 0xfe, 0x48, 0x03, 0x0a, 0x07, 0x0c, 0xce, 0x36, 0x0c, 0x13, 0x00, 0xfe, 0x54, 0x10, 0x68, 0x07,
- 0x1e, 0xfe, 0x50, 0x12, 0x0a, 0x07, 0x1e, 0xfe, 0x48, 0x13, 0xfe, 0x1c, 0x1c, 0xfe, 0x9d, 0xf0,
- 0xfe, 0xac, 0x0c, 0xfe, 0x1c, 0x1c, 0xfe, 0x9d, 0xf0, 0xfe, 0xb2, 0x0c, 0x0a, 0x41, 0x1e, 0x38,
- 0xfe, 0x95, 0x10, 0x13, 0xfe, 0x15, 0x00, 0xfe, 0x04, 0xe6, 0x0c, 0x77, 0xfe, 0x26, 0x10, 0x13,
- 0xfe, 0x13, 0x00, 0xd3, 0x13, 0xfe, 0x47, 0x00, 0xa6, 0x13, 0xfe, 0x41, 0x00, 0x9e, 0x13, 0xfe,
- 0x24, 0x00, 0x04, 0x78, 0x29, 0x27, 0xee, 0x77, 0xfe, 0x04, 0xe6, 0x1e, 0xfe, 0x9d, 0x41, 0xfe,
- 0x1c, 0x42, 0xb2, 0x01, 0xea, 0x02, 0x26, 0xd5, 0x17, 0x0c, 0x4a, 0xf4, 0xdd, 0x17, 0xfe, 0x31,
- 0x00, 0x4a, 0xbd, 0x01, 0xfe, 0x50, 0x0f, 0x02, 0xfe, 0xc2, 0x01, 0x1d, 0xfe, 0x06, 0xec, 0xf8,
- 0x86, 0x36, 0x37, 0xbf, 0x35, 0x1d, 0xfe, 0x06, 0xea, 0xf8, 0xfe, 0x47, 0x4b, 0x95, 0xfe, 0x75,
- 0x57, 0x04, 0x56, 0xfe, 0x98, 0x56, 0xfe, 0x28, 0x12, 0x0e, 0x79, 0xfe, 0xf4, 0x14, 0x4e, 0xe6,
- 0x0e, 0xc0, 0xfe, 0xea, 0x14, 0xfe, 0x49, 0x54, 0x8f, 0xfe, 0x62, 0x0d, 0x0e, 0x1c, 0xfe, 0xde,
- 0x14, 0xfe, 0x44, 0x48, 0x02, 0xfe, 0x48, 0x03, 0x0e, 0x56, 0xfe, 0xc8, 0x14, 0x86, 0x36, 0x37,
- 0xbf, 0x35, 0x1d, 0xfe, 0xce, 0x47, 0xfe, 0xbd, 0x13, 0x02, 0x26, 0x21, 0x2a, 0x05, 0x10, 0xfe,
- 0x78, 0x12, 0x2d, 0x16, 0x55, 0x16, 0xad, 0x21, 0x47, 0x4e, 0x4a, 0x47, 0x9b, 0xfe, 0x0c, 0x13,
- 0xfe, 0xbc, 0xf0, 0xfe, 0xfe, 0x0d, 0x08, 0x06, 0x16, 0x55, 0x01, 0xfe, 0x06, 0x16, 0x04, 0xfe,
- 0x38, 0x01, 0x30, 0xfe, 0x3a, 0x01, 0x75, 0xfe, 0x02, 0x0e, 0x04, 0xfe, 0x38, 0x01, 0x1b, 0xfe,
- 0xf0, 0xff, 0x0f, 0xfe, 0x60, 0x01, 0x04, 0xfe, 0x3a, 0x01, 0x0f, 0xfe, 0x62, 0x01, 0x20, 0x06,
- 0x16, 0x47, 0xfe, 0x04, 0xec, 0x2a, 0x08, 0x2a, 0x09, 0x3c, 0x1d, 0x01, 0x46, 0x7f, 0xfe, 0x05,
- 0xf6, 0xfe, 0x34, 0x01, 0x01, 0xfe, 0x76, 0x16, 0x11, 0x47, 0xca, 0x08, 0x06, 0x03, 0x2d, 0x03,
- 0x21, 0x55, 0xfe, 0xf7, 0x12, 0x21, 0xad, 0x6a, 0x16, 0xad, 0x05, 0x80, 0xfe, 0x93, 0x13, 0xfe,
- 0x24, 0x1c, 0x17, 0x19, 0x4a, 0xf4, 0xdd, 0xfe, 0xd9, 0x10, 0x93, 0xfe, 0x03, 0xdc, 0xfe, 0x73,
- 0x57, 0xfe, 0x80, 0x5d, 0x03, 0x93, 0xfe, 0x03, 0xdc, 0xfe, 0x5b, 0x57, 0xfe, 0x80, 0x5d, 0x03,
- 0xfe, 0x03, 0x57, 0x93, 0x2d, 0xfe, 0x00, 0xcc, 0x03, 0xfe, 0x03, 0x57, 0x93, 0x7d, 0x03, 0x01,
- 0xfe, 0xae, 0x16, 0x3f, 0x05, 0x47, 0xfe, 0x0a, 0x13, 0x08, 0x1c, 0x09, 0x43, 0xd3, 0x01, 0x97,
- 0x01, 0x9a, 0x08, 0x3d, 0x09, 0x99, 0x01, 0x46, 0x11, 0xfe, 0xe9, 0x00, 0x0a, 0x07, 0x89, 0xfe,
- 0x52, 0x13, 0x01, 0xfe, 0x38, 0x16, 0xfe, 0x1e, 0x1c, 0xfe, 0x14, 0x90, 0x0f, 0xfe, 0x64, 0x01,
- 0xfe, 0x16, 0x90, 0x0f, 0xfe, 0x66, 0x01, 0x0a, 0x07, 0x45, 0xe5, 0xfe, 0x03, 0x80, 0x52, 0x3e,
- 0x11, 0x76, 0x08, 0x2a, 0x09, 0x3c, 0x1d, 0x90, 0x01, 0x71, 0xfe, 0x62, 0x08, 0x6a, 0x3e, 0x11,
- 0x76, 0x08, 0x2a, 0x09, 0x3c, 0x1d, 0x90, 0x01, 0x71, 0x64, 0x2f, 0x11, 0x76, 0x08, 0x2a, 0x09,
- 0x3c, 0x1d, 0x90, 0x01, 0x7b, 0x03, 0xfe, 0x08, 0x1c, 0x04, 0xfe, 0xac, 0x00, 0xfe, 0x06, 0x58,
- 0x04, 0xfe, 0xae, 0x00, 0xfe, 0x07, 0x58, 0x04, 0xfe, 0xb0, 0x00, 0xfe, 0x08, 0x58, 0x04, 0xfe,
- 0xb2, 0x00, 0xfe, 0x09, 0x58, 0xfe, 0x0a, 0x1c, 0x20, 0x6c, 0x16, 0xf8, 0x2d, 0x0f, 0x53, 0x0f,
- 0x4d, 0x20, 0x10, 0x16, 0x2a, 0x16, 0x3c, 0x57, 0xa0, 0xd6, 0x08, 0x2a, 0x09, 0x3c, 0x1d, 0x01,
- 0x7b, 0x7f, 0x11, 0x76, 0xfe, 0x14, 0x56, 0xfe, 0xd6, 0xf0, 0xfe, 0x2a, 0x0f, 0xd5, 0x8c, 0xfe,
- 0x14, 0x1c, 0xfe, 0x10, 0x1c, 0xfe, 0x18, 0x1c, 0x03, 0x1d, 0xfe, 0x0c, 0x14, 0x86, 0xfe, 0x07,
- 0xe6, 0x37, 0xfe, 0xce, 0x47, 0xfe, 0xf5, 0x13, 0x03, 0x01, 0x96, 0x0e, 0x3d, 0x01, 0x15, 0x05,
- 0x10, 0x2c, 0x0e, 0x1c, 0x01, 0x15, 0x05, 0x10, 0xda, 0xfe, 0x44, 0x58, 0x3e, 0xfe, 0x01, 0xec,
- 0xbd, 0xfe, 0x9e, 0x40, 0xfe, 0x9d, 0xe7, 0x00, 0xfe, 0x9c, 0xe7, 0x1e, 0x9f, 0x2f, 0x01, 0xea,
- 0xfe, 0xc9, 0x10, 0x03, 0x2b, 0x82, 0x6e, 0x23, 0x24, 0xb3, 0x05, 0x1e, 0xfe, 0x48, 0x12, 0x05,
- 0x0c, 0xfe, 0x4c, 0x12, 0x05, 0x19, 0xfe, 0x30, 0x12, 0x05, 0xcc, 0x18, 0xfe, 0xf4, 0x10, 0x05,
- 0xfe, 0x23, 0x00, 0x18, 0xfe, 0x00, 0x11, 0x05, 0x06, 0x18, 0xfe, 0x5e, 0x11, 0x05, 0x1a, 0xfe,
- 0x12, 0x12, 0x05, 0x00, 0x18, 0x28, 0x17, 0xcc, 0x01, 0x44, 0xc6, 0x39, 0x01, 0x0b, 0x81, 0x4c,
- 0x03, 0x39, 0x11, 0xfe, 0xcc, 0x00, 0x02, 0x26, 0x39, 0x3f, 0x05, 0xc3, 0xfe, 0xe3, 0x13, 0x65,
- 0x3a, 0x31, 0x3b, 0x75, 0xfe, 0xb2, 0x10, 0x0a, 0x07, 0x70, 0xfe, 0x72, 0x12, 0xa1, 0x42, 0x69,
- 0x58, 0xe8, 0xfe, 0xe5, 0x55, 0x8f, 0xfe, 0x7c, 0x10, 0x21, 0x61, 0xfe, 0x26, 0x13, 0x04, 0xae,
- 0x30, 0x8d, 0x75, 0xfe, 0xd2, 0x0c, 0x0f, 0x5d, 0x12, 0x5e, 0x2d, 0x0f, 0xae, 0x0f, 0x8d, 0x01,
- 0xc1, 0x20, 0x6c, 0x52, 0x16, 0x61, 0x01, 0xfe, 0xde, 0x12, 0xa1, 0x42, 0x69, 0x58, 0xfe, 0x04,
- 0x55, 0xfe, 0xa5, 0x55, 0xfe, 0x04, 0xfa, 0x42, 0xfe, 0x05, 0xfa, 0x58, 0xfe, 0x91, 0x10, 0x04,
- 0x5f, 0x30, 0x60, 0xfe, 0x40, 0x56, 0xfe, 0xe1, 0x56, 0x0f, 0x5f, 0x12, 0x60, 0xa8, 0xa1, 0x42,
- 0x69, 0x58, 0xe8, 0xfe, 0xe5, 0x55, 0x04, 0x5b, 0x30, 0x5c, 0xfe, 0x00, 0x56, 0xfe, 0xa1, 0x56,
- 0x0f, 0x5b, 0x12, 0x5c, 0x0a, 0x07, 0x70, 0xfe, 0x1e, 0x12, 0x21, 0x61, 0xfe, 0x1f, 0x40, 0x04,
- 0x5d, 0x30, 0x5e, 0xfe, 0x2c, 0x50, 0xfe, 0xae, 0x50, 0x04, 0x5f, 0x30, 0x60, 0xfe, 0x34, 0x50,
- 0xfe, 0xb6, 0x50, 0x04, 0x5b, 0x30, 0x5c, 0xfe, 0x08, 0x50, 0xfe, 0x8a, 0x50, 0x04, 0x3a, 0x30,
- 0x3b, 0xfe, 0x28, 0x50, 0xfe, 0xaa, 0x50, 0x02, 0x98, 0x20, 0x06, 0x16, 0xf3, 0x02, 0x7c, 0x39,
- 0x01, 0x0b, 0x1f, 0x4f, 0x23, 0x24, 0xb3, 0x05, 0x06, 0x27, 0x4f, 0x3f, 0x05, 0xc3, 0x27, 0x7c,
- 0x01, 0xfa, 0x1b, 0x50, 0x18, 0x4f, 0x0a, 0x07, 0x0c, 0xdc, 0x65, 0x3a, 0x31, 0x3b, 0xfe, 0x0a,
- 0x55, 0x35, 0xfe, 0x8b, 0x55, 0x9c, 0x3a, 0x9d, 0x3b, 0xfe, 0x0c, 0x51, 0xfe, 0x8e, 0x51, 0x02,
- 0x7c, 0xfe, 0x19, 0x81, 0xfe, 0x0a, 0x45, 0xfe, 0x19, 0x41, 0x02, 0x7c, 0x39, 0x01, 0x0b, 0x1f,
- 0xfe, 0xf6, 0x0f, 0x23, 0x24, 0xfe, 0xe9, 0x09, 0x59, 0x19, 0xfe, 0x94, 0x12, 0x59, 0x0c, 0x4b,
- 0x02, 0x4f, 0x2e, 0xfe, 0x7e, 0x11, 0x22, 0x32, 0x1f, 0xfe, 0xf6, 0x0f, 0x23, 0x24, 0x91, 0x05,
- 0x19, 0x27, 0x4f, 0x01, 0x0b, 0x1f, 0xfe, 0xf6, 0x0f, 0x23, 0x24, 0xfe, 0xe8, 0x09, 0x57, 0x04,
- 0xfe, 0x9c, 0x00, 0x29, 0x35, 0xfe, 0xbb, 0x45, 0x59, 0x00, 0x40, 0x36, 0x06, 0xa0, 0x50, 0xfe,
- 0xc0, 0x14, 0xfe, 0xf8, 0x14, 0xac, 0x3f, 0x05, 0xc2, 0xfe, 0x16, 0x13, 0x04, 0xf6, 0x29, 0xce,
- 0x04, 0x4d, 0x29, 0x35, 0x5a, 0x02, 0x7c, 0xfe, 0xc0, 0x5d, 0xfe, 0xe4, 0x14, 0xfe, 0x03, 0x17,
- 0x04, 0x53, 0xbc, 0x0f, 0x53, 0x5a, 0x39, 0x01, 0x0b, 0x25, 0x98, 0x01, 0xfe, 0x26, 0x14, 0x02,
- 0x98, 0x2e, 0x40, 0x22, 0x32, 0x1f, 0x4f, 0x23, 0x24, 0x91, 0x05, 0x06, 0x27, 0x4f, 0xfe, 0xf6,
- 0x14, 0xfe, 0x42, 0x58, 0xfe, 0x70, 0x14, 0xfe, 0x92, 0x14, 0xac, 0xfe, 0x4a, 0xf4, 0x0c, 0x18,
- 0x4f, 0xfe, 0x4a, 0xf4, 0x06, 0xd1, 0x3f, 0x05, 0xc2, 0xc9, 0x02, 0x7c, 0x04, 0x4d, 0xbc, 0x0f,
- 0x4d, 0x5a, 0x39, 0x01, 0x0b, 0x25, 0x98, 0x01, 0xfe, 0x54, 0x14, 0x02, 0x98, 0x25, 0xfe, 0x70,
- 0x12, 0x73, 0xf1, 0x73, 0x03, 0x34, 0xfe, 0x6c, 0x12, 0x6b, 0xfe, 0x6c, 0x12, 0x5a, 0x39, 0x01,
- 0x0b, 0xfe, 0xe3, 0x10, 0x08, 0x63, 0xff, 0x02, 0x00, 0x57, 0x66, 0x7e, 0x1b, 0xfe, 0xff, 0x7f,
- 0xfe, 0x30, 0x56, 0xfe, 0x00, 0x5c, 0x03, 0x08, 0x63, 0xff, 0x02, 0x00, 0x57, 0x66, 0x7e, 0x1b,
- 0x50, 0xfe, 0x30, 0x56, 0xfe, 0x00, 0x5c, 0x03, 0x08, 0x63, 0xff, 0x02, 0x00, 0x57, 0x66, 0x7e,
- 0x03, 0x08, 0x63, 0xff, 0x02, 0x00, 0x57, 0x66, 0x7e, 0xfe, 0x0b, 0x58, 0x03, 0x0e, 0x53, 0x01,
- 0x8b, 0x0e, 0x4d, 0x01, 0x8b, 0x03, 0xc8, 0x1b, 0x10, 0xff, 0x03, 0x00, 0x54, 0xfe, 0x00, 0xf4,
- 0x1a, 0x66, 0xfe, 0x00, 0x7d, 0xfe, 0x01, 0x7d, 0xfe, 0x02, 0x7d, 0xfe, 0x03, 0x7c, 0x64, 0x2f,
- 0x0f, 0x5b, 0x12, 0x5c, 0x9c, 0x5f, 0x9d, 0x60, 0x03, 0xfe, 0x62, 0x18, 0xfe, 0x82, 0x5a, 0xfe,
- 0xe1, 0x1a, 0xb6, 0xfe, 0x02, 0x58, 0x03, 0x01, 0xfe, 0x9e, 0x18, 0xfe, 0x42, 0x48, 0x77, 0x57,
- 0x95, 0x01, 0x0b, 0x1f, 0xfe, 0x1e, 0x14, 0x23, 0x24, 0xfe, 0xe9, 0x09, 0xfe, 0xc1, 0x59, 0x01,
- 0x0b, 0x1f, 0xfe, 0x1e, 0x14, 0x23, 0x24, 0xfe, 0xe8, 0x0a, 0x04, 0xf6, 0x29, 0xfe, 0xc4, 0x12,
- 0x2d, 0xb1, 0x1e, 0xdc, 0x59, 0xcd, 0x74, 0xfe, 0x6c, 0x13, 0x4b, 0x08, 0x06, 0x09, 0xcd, 0xa0,
- 0xfe, 0x00, 0x10, 0xfe, 0x78, 0x10, 0xff, 0x02, 0x83, 0x55, 0xa6, 0xff, 0x02, 0x83, 0x55, 0xb1,
- 0x19, 0xfe, 0x12, 0x13, 0x72, 0xfe, 0x30, 0x00, 0x8f, 0xfe, 0xc6, 0x13, 0x09, 0x85, 0x08, 0x06,
- 0xfe, 0x56, 0x10, 0xb1, 0x0c, 0xfe, 0x16, 0x13, 0x72, 0xfe, 0x64, 0x00, 0x8f, 0xfe, 0xc6, 0x13,
- 0x0e, 0xfe, 0x64, 0x00, 0x09, 0x88, 0x08, 0x06, 0xfe, 0x28, 0x10, 0xb1, 0x06, 0xfe, 0x60, 0x13,
- 0x72, 0xfe, 0xc8, 0x00, 0x8f, 0xfe, 0xc6, 0x13, 0x0e, 0xfe, 0xc8, 0x00, 0x09, 0x55, 0x08, 0x06,
- 0xa8, 0x72, 0xfe, 0x90, 0x01, 0xed, 0xfe, 0xd2, 0x13, 0x95, 0xaa, 0xfe, 0x43, 0xf4, 0xad, 0xfe,
- 0x56, 0xf0, 0xfe, 0xe4, 0x13, 0xfe, 0x04, 0xf4, 0x63, 0xfe, 0x43, 0xf4, 0x88, 0xfe, 0xf3, 0x10,
- 0xb0, 0x01, 0xfe, 0xae, 0x12, 0x1b, 0x50, 0xd4, 0xfe, 0x00, 0x17, 0xfe, 0x4d, 0xe4, 0x6c, 0xed,
- 0xfe, 0x18, 0x14, 0xa3, 0x6c, 0xfe, 0x14, 0x10, 0xfe, 0x00, 0x17, 0xfe, 0x4d, 0xe4, 0x1a, 0xed,
- 0xfe, 0x18, 0x14, 0xa3, 0x1a, 0x9e, 0x57, 0x95, 0x08, 0x06, 0xfe, 0xb4, 0x56, 0xfe, 0xc3, 0x58,
- 0x03, 0x57, 0x08, 0x0c, 0x03, 0x14, 0x06, 0x01, 0x0b, 0x25, 0xec, 0x14, 0x0c, 0x01, 0x0b, 0x25,
- 0xec, 0x14, 0x19, 0x01, 0x0b, 0x25, 0xec, 0x73, 0xfe, 0x89, 0x49, 0x01, 0x0b, 0x03, 0x14, 0x06,
- 0x01, 0x0b, 0x25, 0xb7, 0x14, 0x19, 0x01, 0x0b, 0x25, 0xb7, 0x14, 0x06, 0x01, 0x0b, 0x25, 0xb7,
- 0xfe, 0x89, 0x49, 0x01, 0x0b, 0x25, 0xb7, 0x73, 0xfe, 0x89, 0x4a, 0x01, 0x0b, 0x03, 0x57, 0x03,
- 0x21, 0xe0, 0x05, 0x06, 0xfe, 0x44, 0x13, 0xaf, 0x16, 0xe0, 0xfe, 0x49, 0xf4, 0x00, 0x4b, 0x73,
- 0xc6, 0x5a, 0xfe, 0x01, 0xec, 0xfe, 0x27, 0x01, 0xf1, 0x01, 0x0b, 0x3f, 0x05, 0xfe, 0xe3, 0x00,
- 0xfe, 0x20, 0x13, 0x1f, 0xfe, 0xd6, 0x14, 0x2d, 0x16, 0xf3, 0x01, 0x4c, 0x21, 0xf3, 0x05, 0x06,
- 0x40, 0x0a, 0x41, 0x06, 0x38, 0x03, 0x0f, 0x54, 0x12, 0x8a, 0xfe, 0x43, 0x58, 0x01, 0x15, 0x05,
- 0x10, 0xfe, 0x1e, 0x12, 0x48, 0xe7, 0x8e, 0x01, 0x2c, 0xfe, 0x90, 0x4d, 0xde, 0x10, 0xfe, 0xc5,
- 0x59, 0x01, 0x2c, 0xfe, 0x8d, 0x56, 0xb6, 0x48, 0x03, 0x48, 0x31, 0x8a, 0x01, 0x15, 0x48, 0x8e,
- 0x01, 0x2c, 0xe2, 0x10, 0xde, 0x10, 0x31, 0x54, 0x72, 0x1c, 0x84, 0x0e, 0x56, 0x01, 0xab, 0x03,
- 0x0f, 0x54, 0x12, 0x8a, 0xfe, 0xc3, 0x58, 0x01, 0x15, 0x05, 0x10, 0xfe, 0x1a, 0x12, 0x48, 0xe7,
- 0x8e, 0x01, 0x2c, 0xe2, 0x10, 0xfe, 0x80, 0x4d, 0xfe, 0xc5, 0x59, 0x01, 0x2c, 0x48, 0x03, 0x48,
- 0x31, 0x54, 0x01, 0x15, 0x48, 0x8e, 0x01, 0x2c, 0xe2, 0x10, 0xde, 0x10, 0x31, 0x54, 0x72, 0x1c,
- 0x84, 0x0e, 0x56, 0x01, 0xab, 0x03, 0x0f, 0x54, 0x12, 0x8a, 0xfe, 0x43, 0x58, 0x01, 0x15, 0xfe,
- 0x42, 0x48, 0x8e, 0x01, 0x2c, 0xfe, 0xc0, 0x5a, 0xb0, 0xfe, 0x00, 0xcd, 0xfe, 0x01, 0xcc, 0xfe,
- 0x4a, 0x46, 0xdc, 0x93, 0x7d, 0x05, 0x10, 0xfe, 0x2e, 0x13, 0x69, 0x54, 0xfe, 0x4d, 0xf4, 0x1c,
- 0xfe, 0x1c, 0x13, 0x0e, 0x56, 0x01, 0x8b, 0xaa, 0xfe, 0x40, 0x4c, 0xfe, 0xc5, 0x58, 0x01, 0x2c,
- 0xfe, 0x00, 0x07, 0x7d, 0x05, 0x10, 0x84, 0x69, 0x8a, 0xfe, 0x05, 0x57, 0xfe, 0x08, 0x10, 0xfe,
- 0x45, 0x58, 0x01, 0x2c, 0xfe, 0x8d, 0x56, 0xb6, 0xfe, 0x80, 0x4c, 0xfe, 0x05, 0x17, 0x03, 0x09,
- 0x10, 0x6f, 0x67, 0xfe, 0x60, 0x01, 0xfe, 0x18, 0xdf, 0xfe, 0x19, 0xde, 0xfe, 0x24, 0x1c, 0xdb,
- 0x37, 0x94, 0xfe, 0x1a, 0x16, 0x01, 0xfe, 0x28, 0x17, 0xfe, 0x0c, 0x13, 0x87, 0x37, 0x67, 0xfe,
- 0x2c, 0x01, 0xfe, 0x2f, 0x19, 0x03, 0xba, 0x27, 0xfe, 0x0a, 0x16, 0xfe, 0xe2, 0x10, 0x09, 0x10,
- 0x6f, 0x04, 0xfe, 0x64, 0x01, 0xfe, 0x00, 0xf4, 0x1a, 0xfe, 0x18, 0x58, 0x04, 0xfe, 0x66, 0x01,
- 0xfe, 0x19, 0x58, 0x87, 0x1a, 0xfe, 0x3c, 0x90, 0xfe, 0x30, 0xf4, 0x06, 0xfe, 0x3c, 0x50, 0x67,
- 0xfe, 0x38, 0x00, 0xfe, 0x0f, 0x79, 0xfe, 0x1c, 0xf7, 0x1a, 0x94, 0xfe, 0x64, 0x16, 0xfe, 0xbe,
- 0x14, 0x35, 0x03, 0xba, 0x27, 0xfe, 0x3c, 0x16, 0xfe, 0xa4, 0x10, 0x09, 0x10, 0x6f, 0xb6, 0xfe,
- 0x18, 0xdf, 0xfe, 0x19, 0xdf, 0xdb, 0x42, 0x94, 0xfe, 0x86, 0x16, 0xfe, 0x9c, 0x14, 0xfe, 0x18,
- 0x13, 0x87, 0x42, 0x67, 0x1e, 0xfe, 0xaf, 0x19, 0xfe, 0x98, 0xe7, 0x00, 0xa2, 0x07, 0xfe, 0x7f,
- 0x00, 0xfe, 0x05, 0x40, 0x03, 0xba, 0x27, 0xfe, 0x7a, 0x16, 0xfe, 0x6c, 0x10, 0x09, 0x10, 0x6f,
- 0xfe, 0x30, 0xbc, 0xfe, 0xb2, 0xbc, 0x87, 0xd9, 0x67, 0x1e, 0xfe, 0x0f, 0x79, 0xfe, 0x1c, 0xf7,
- 0xd9, 0x94, 0xfe, 0xc6, 0x16, 0xfe, 0x5c, 0x14, 0x35, 0x03, 0xba, 0x27, 0xfe, 0xb2, 0x16, 0xfe,
- 0x42, 0x10, 0xfe, 0x02, 0xf6, 0x10, 0x6f, 0xfe, 0x18, 0xfe, 0x5d, 0xfe, 0x19, 0xfe, 0x5e, 0xc8,
- 0xdb, 0x45, 0x94, 0xfe, 0xec, 0x16, 0xfe, 0x36, 0x14, 0xfe, 0x1c, 0x13, 0x87, 0x45, 0x4e, 0xfe,
- 0x83, 0x58, 0xfe, 0xaf, 0x19, 0xfe, 0x80, 0xe7, 0x10, 0xfe, 0x81, 0xe7, 0x10, 0x11, 0xfe, 0xdd,
- 0x00, 0x64, 0x2f, 0x03, 0x64, 0x2f, 0xfe, 0x12, 0x45, 0x27, 0xfe, 0xdc, 0x16, 0x17, 0x06, 0x4a,
- 0xf4, 0xdd, 0x02, 0x26, 0xfe, 0x39, 0xf0, 0xfe, 0x30, 0x17, 0x2d, 0x03, 0xfe, 0x7e, 0x18, 0x1b,
- 0x19, 0x83, 0x08, 0x0d, 0x03, 0x6f, 0x04, 0xdf, 0x1b, 0x06, 0xfe, 0xef, 0x12, 0xfe, 0xe1, 0x10,
- 0x1d, 0x0e, 0x1c, 0x01, 0x15, 0x05, 0x10, 0x40, 0x3e, 0xfe, 0x78, 0x14, 0xfe, 0x34, 0x12, 0x50,
- 0x86, 0x36, 0x37, 0xbf, 0xfe, 0xe9, 0x13, 0x1d, 0x0e, 0x3d, 0x01, 0x15, 0x05, 0x10, 0x40, 0x3e,
- 0xfe, 0x56, 0x14, 0xe1, 0x50, 0x86, 0x36, 0x37, 0xbf, 0xfe, 0xe9, 0x13, 0x09, 0x0c, 0x03, 0xfe,
- 0x9c, 0xe7, 0x0c, 0x13, 0xfe, 0x15, 0x00, 0x90, 0x9f, 0x2f, 0x01, 0xea, 0x09, 0x06, 0x03, 0x0a,
- 0x41, 0x37, 0x38, 0x08, 0x3d, 0x09, 0x99, 0x01, 0x46, 0x11, 0x47, 0x08, 0x1c, 0x09, 0x43, 0x01,
- 0x7b, 0x09, 0x06, 0x03, 0xfe, 0x38, 0x90, 0xfe, 0xba, 0x90, 0x65, 0xf7, 0x31, 0x76, 0xfe, 0x48,
- 0x55, 0x35, 0xfe, 0xc9, 0x55, 0x03, 0x21, 0xbe, 0x52, 0x16, 0xbe, 0x03, 0x0e, 0xc0, 0x01, 0x15,
- 0xe6, 0x0e, 0x79, 0x01, 0x15, 0xfe, 0x49, 0x44, 0x27, 0xfe, 0x26, 0x18, 0x0e, 0x1c, 0x01, 0x15,
- 0x05, 0x10, 0x40, 0x0e, 0x56, 0x01, 0xab, 0x0e, 0x79, 0x01, 0x15, 0x52, 0x7d, 0x03, 0xfe, 0x40,
- 0x5e, 0xfe, 0xe2, 0x08, 0xfe, 0xc0, 0x4c, 0x21, 0x3c, 0x05, 0x10, 0xfe, 0x52, 0x12, 0x3e, 0x05,
- 0x00, 0xfe, 0x18, 0x12, 0xfe, 0xe1, 0x18, 0xfe, 0x19, 0xf4, 0xfe, 0x7f, 0x00, 0xd4, 0xfe, 0xe2,
- 0x08, 0x52, 0x3e, 0x3f, 0x05, 0x76, 0xa5, 0xfe, 0x82, 0x48, 0xfe, 0x01, 0x80, 0xfe, 0xd7, 0x10,
- 0xfe, 0xc4, 0x48, 0x08, 0x2a, 0x09, 0x3c, 0xfe, 0x40, 0x5f, 0x1d, 0x01, 0x46, 0x11, 0xfe, 0xdd,
- 0x00, 0xfe, 0x14, 0x46, 0x08, 0x2a, 0x09, 0x3c, 0x01, 0x46, 0x11, 0xfe, 0xdd, 0x00, 0xfe, 0x40,
- 0x4a, 0x6a, 0xfe, 0x06, 0x17, 0xfe, 0x01, 0x07, 0xfe, 0x82, 0x48, 0xfe, 0x04, 0x17, 0x03, 0xeb,
- 0x19, 0x74, 0xfe, 0xae, 0x18, 0x04, 0xfe, 0x90, 0x00, 0xfe, 0x3a, 0x45, 0xfe, 0x2c, 0x10, 0xeb,
- 0xcc, 0x74, 0xfe, 0xc0, 0x18, 0x04, 0xfe, 0x92, 0x00, 0xc7, 0x1e, 0xd8, 0xeb, 0xfe, 0x0b, 0x00,
- 0x74, 0xfe, 0xd2, 0x18, 0x04, 0xfe, 0x94, 0x00, 0xc7, 0x1a, 0xfe, 0x08, 0x10, 0x04, 0xfe, 0x96,
- 0x00, 0xc7, 0x85, 0xfe, 0x4e, 0x45, 0xd1, 0xfe, 0x0a, 0x45, 0xff, 0x04, 0x68, 0x54, 0xfe, 0xf1,
- 0x10, 0x1b, 0x6c, 0x03, 0x05, 0x80, 0xfe, 0x5a, 0xf0, 0xfe, 0xfe, 0x18, 0x20, 0xfe, 0x09, 0x00,
- 0xfe, 0x34, 0x10, 0x05, 0x1e, 0xfe, 0x5a, 0xf0, 0xfe, 0x0c, 0x19, 0x20, 0xcd, 0xfe, 0x26, 0x10,
- 0x05, 0x19, 0x83, 0x20, 0x85, 0xd8, 0x05, 0x0c, 0x83, 0x20, 0x88, 0xfe, 0x0e, 0x10, 0x05, 0x06,
- 0x83, 0x20, 0x55, 0xc6, 0xaf, 0x03, 0x17, 0xfe, 0x09, 0x00, 0x01, 0x44, 0x2e, 0xfe, 0x3c, 0x19,
- 0x04, 0x6e, 0xb0, 0x03, 0x22, 0xfe, 0x54, 0x19, 0xfe, 0x14, 0xf0, 0x0b, 0x2e, 0xfe, 0x50, 0x19,
- 0x03, 0xff, 0x15, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0xf2, 0x00, 0xf0, 0x00, 0x16, 0x00, 0xfc, 0x01, 0x00, 0x48, 0xe4, 0x98, 0x18,
+ 0x03, 0xf6, 0x18, 0xe4, 0x02, 0x00, 0x18, 0x80, 0x00, 0xfa, 0xff, 0xff, 0x0c, 0x0e, 0x9e, 0xe7,
+ 0xff, 0x00, 0x82, 0xe7, 0x00, 0xea, 0x00, 0xf6, 0x01, 0xe6, 0x09, 0xe7, 0x01, 0xf6, 0x08, 0x00,
+ 0x55, 0xf0, 0x01, 0xfa, 0x03, 0x00, 0x04, 0x00, 0x18, 0xf4, 0x00, 0xec, 0x85, 0xf0, 0xbc, 0x00,
+ 0xd5, 0xf0, 0x7c, 0x0c, 0x38, 0x54, 0x00, 0xe6, 0x1e, 0xf0, 0x86, 0xf0, 0xb4, 0x00, 0x98, 0x57,
+ 0xd0, 0x01, 0x0c, 0x1c, 0x3e, 0x1c, 0x0c, 0x00, 0x10, 0x00, 0xbb, 0x00, 0x00, 0x10, 0x84, 0x18,
+ 0x02, 0x80, 0x32, 0xf0, 0x01, 0xfc, 0x76, 0x0c, 0x0a, 0x10, 0x0c, 0x10, 0xa4, 0x12, 0x02, 0x13,
+ 0x18, 0x40, 0x00, 0x57, 0x01, 0xea, 0x3c, 0x00, 0xc0, 0x00, 0x6c, 0x01, 0x6e, 0x01, 0x04, 0x12,
+ 0x00, 0x80, 0x03, 0xe6, 0xb6, 0x00, 0x01, 0x01, 0x3e, 0x01, 0xb8, 0x0f, 0x06, 0x13, 0xb9, 0x54,
+ 0x3e, 0x57, 0x03, 0x58, 0x1b, 0x80, 0x30, 0xe4, 0x4b, 0xe4, 0x20, 0x00, 0x32, 0x00, 0x3e, 0x00,
+ 0x80, 0x00, 0x24, 0x01, 0x3c, 0x01, 0x68, 0x01, 0x6a, 0x01, 0x70, 0x01, 0x72, 0x01, 0x74, 0x01,
+ 0x76, 0x01, 0x78, 0x01, 0x62, 0x0a, 0x80, 0x0c, 0x08, 0x12, 0x1e, 0x13, 0x4c, 0x1c, 0x02, 0x4a,
+ 0xbb, 0x55, 0x3c, 0x56, 0x4a, 0xe4, 0x02, 0xee, 0x5b, 0xf0, 0xb1, 0xf0, 0x03, 0xf7, 0x06, 0xf7,
+ 0x03, 0xfc, 0x0f, 0x00, 0x40, 0x00, 0xbe, 0x00, 0x00, 0x01, 0xa0, 0x08, 0x42, 0x15, 0x32, 0x1c,
+ 0x38, 0x1c, 0x4e, 0x1c, 0x10, 0x44, 0x02, 0x48, 0x00, 0x4c, 0x04, 0x80, 0x04, 0xea, 0x5d, 0xf0,
+ 0x04, 0xf6, 0x02, 0xfc, 0x05, 0x00, 0x34, 0x00, 0x36, 0x00, 0x98, 0x00, 0xcc, 0x00, 0x20, 0x01,
+ 0x4e, 0x01, 0x3e, 0x0b, 0x02, 0x0e, 0x0a, 0x12, 0x04, 0x13, 0x0e, 0x13, 0x30, 0x13, 0x60, 0x13,
+ 0xee, 0x14, 0x30, 0x1c, 0x00, 0x4e, 0xbd, 0x56, 0x00, 0xdc, 0x05, 0xf0, 0x09, 0xf0, 0x59, 0xf0,
+ 0xa7, 0xf0, 0xb8, 0xf0, 0x0e, 0xf7, 0x06, 0x00, 0x19, 0x00, 0x33, 0x00, 0x9b, 0x00, 0xa4, 0x00,
+ 0xb5, 0x00, 0xba, 0x00, 0xd0, 0x00, 0xe1, 0x00, 0xe7, 0x00, 0xde, 0x03, 0x46, 0x0a, 0xf8, 0x0d,
+ 0x02, 0x10, 0x04, 0x10, 0x0a, 0x13, 0x12, 0x13, 0xf2, 0x14, 0x8a, 0x16, 0x20, 0x1c, 0x34, 0x1c,
+ 0x36, 0x1c, 0x08, 0x44, 0x38, 0x44, 0x91, 0x44, 0x0a, 0x45, 0x48, 0x46, 0x01, 0x48, 0x68, 0x54,
+ 0x83, 0x55, 0xb0, 0x57, 0x01, 0x58, 0x83, 0x59, 0x06, 0x83, 0x05, 0xe6, 0x0b, 0xf0, 0x0c, 0xf0,
+ 0x5c, 0xf0, 0x4b, 0xf4, 0x04, 0xf8, 0x05, 0xf8, 0x02, 0xfa, 0x03, 0xfa, 0x04, 0xfc, 0x05, 0xfc,
+ 0x07, 0x00, 0x0a, 0x00, 0x0d, 0x00, 0x1c, 0x00, 0x9e, 0x00, 0xa8, 0x00, 0xaa, 0x00, 0xb9, 0x00,
+ 0xe0, 0x00, 0x22, 0x01, 0x26, 0x01, 0x79, 0x01, 0x7a, 0x01, 0xc0, 0x01, 0xc2, 0x01, 0x7c, 0x02,
+ 0x62, 0x03, 0xda, 0x04, 0xd8, 0x07, 0x68, 0x08, 0x69, 0x08, 0xaa, 0x08, 0xe9, 0x09, 0xf6, 0x0a,
+ 0x1e, 0x0e, 0x0e, 0x10, 0x14, 0x10, 0x1a, 0x10, 0xed, 0x10, 0xf1, 0x10, 0x06, 0x12, 0x16, 0x13,
+ 0x20, 0x14, 0xb4, 0x14, 0xb6, 0x14, 0x68, 0x15, 0xa0, 0x17, 0xac, 0x17, 0x6b, 0x18, 0x12, 0x1c,
+ 0x46, 0x1c, 0x9c, 0x32, 0x00, 0x40, 0x0e, 0x47, 0x48, 0x47, 0x41, 0x48, 0x89, 0x48, 0x80, 0x4c,
+ 0x00, 0x54, 0x44, 0x55, 0xe5, 0x55, 0x14, 0x56, 0x77, 0x57, 0xbf, 0x57, 0x40, 0x5c, 0x06, 0x80,
+ 0x08, 0x90, 0x03, 0xa1, 0x00, 0xcc, 0x19, 0xe4, 0x4e, 0xe4, 0xfe, 0x9c, 0xf0, 0x28, 0x02, 0xfe,
+ 0xa6, 0x0c, 0xff, 0x10, 0x00, 0x00, 0xce, 0xfe, 0xa6, 0x18, 0x00, 0xcd, 0xfe, 0x80, 0x01, 0xff,
+ 0x03, 0x00, 0x00, 0xfe, 0x02, 0x15, 0xfe, 0x0c, 0x05, 0xff, 0x38, 0x00, 0x00, 0xfe, 0x57, 0x24,
+ 0x00, 0xfe, 0x48, 0x00, 0x50, 0xff, 0x04, 0x00, 0x00, 0x10, 0xff, 0x09, 0x00, 0x00, 0xff, 0x08,
+ 0x01, 0x01, 0xff, 0x08, 0xff, 0xff, 0xff, 0x27, 0x00, 0x00, 0xff, 0x10, 0xff, 0xff, 0xff, 0x0f,
+ 0x00, 0x00, 0xfe, 0x78, 0x56, 0xfe, 0x34, 0x12, 0xff, 0x21, 0x00, 0x00, 0xfe, 0x04, 0xf7, 0xcd,
+ 0x29, 0x67, 0x0a, 0x01, 0xfe, 0xac, 0x0e, 0xfe, 0x04, 0xf7, 0xcd, 0x67, 0x0a, 0x48, 0x29, 0xfe,
+ 0x3d, 0xf0, 0xfe, 0x02, 0x02, 0xfe, 0x20, 0xf0, 0x9d, 0xfe, 0x91, 0xf0, 0xfe, 0xf0, 0x01, 0xfe,
+ 0x90, 0xf0, 0xfe, 0xf0, 0x01, 0xfe, 0x8f, 0xf0, 0x9d, 0x04, 0x52, 0x3f, 0x02, 0xfe, 0xc2, 0x0c,
+ 0x01, 0xfe, 0x28, 0x0d, 0xfe, 0xdd, 0x12, 0xfe, 0xfc, 0x10, 0xfe, 0x28, 0x1c, 0x04, 0xfe, 0xa6,
+ 0x00, 0xfe, 0xd3, 0x12, 0x47, 0x19, 0xfe, 0xa6, 0x00, 0xb2, 0xfe, 0x48, 0xf0, 0xfe, 0x86, 0x02,
+ 0xfe, 0x49, 0xf0, 0xfe, 0xa0, 0x02, 0xfe, 0x4a, 0xf0, 0xfe, 0xbe, 0x02, 0xfe, 0x46, 0xf0, 0xfe,
+ 0x50, 0x02, 0xfe, 0x47, 0xf0, 0xfe, 0x56, 0x02, 0xfe, 0x43, 0xf0, 0xfe, 0x44, 0x02, 0xfe, 0x44,
+ 0xf0, 0xfe, 0x48, 0x02, 0xfe, 0x45, 0xf0, 0xfe, 0x4c, 0x02, 0x16, 0x0a, 0xa1, 0x16, 0x05, 0x19,
+ 0x97, 0x02, 0x28, 0xfe, 0x00, 0x1c, 0xdd, 0xfe, 0x02, 0x1c, 0xdc, 0xfe, 0x1e, 0x1c, 0xfe, 0xe9,
+ 0x10, 0x01, 0xfe, 0xfe, 0x16, 0xfe, 0xe7, 0x10, 0xfe, 0x06, 0xfc, 0xc5, 0x08, 0x6b, 0x01, 0x9f,
+ 0x02, 0x28, 0x14, 0x4e, 0x3a, 0x98, 0x01, 0xfe, 0x42, 0x0f, 0x08, 0x6b, 0x01, 0x82, 0xfe, 0xbd,
+ 0x10, 0x08, 0x6b, 0x01, 0x82, 0xfe, 0xad, 0x10, 0xfe, 0x16, 0x1c, 0xfe, 0x58, 0x1c, 0x16, 0x05,
+ 0x19, 0x97, 0x29, 0x24, 0x28, 0xfe, 0x3d, 0xf0, 0xfe, 0x02, 0x02, 0x20, 0xfe, 0x94, 0x02, 0xfe,
+ 0x5a, 0x1c, 0xe7, 0xfe, 0x14, 0x1c, 0x14, 0xfe, 0x30, 0x00, 0x3a, 0x98, 0x01, 0xfe, 0x32, 0x0f,
+ 0x16, 0x05, 0x19, 0x97, 0x02, 0xce, 0x1d, 0x1f, 0x06, 0x10, 0x37, 0xfe, 0x69, 0x10, 0x16, 0x05,
+ 0x19, 0x97, 0xfe, 0x04, 0xec, 0x1f, 0x5f, 0x40, 0x12, 0x1f, 0xfe, 0x05, 0xf6, 0xc5, 0x01, 0xfe,
+ 0x30, 0x16, 0x0b, 0x4b, 0x4d, 0x38, 0x11, 0x2d, 0x48, 0xb4, 0x01, 0xe3, 0x02, 0x28, 0x08, 0x3c,
+ 0x01, 0x0e, 0x06, 0x00, 0x46, 0x01, 0x6e, 0xfe, 0x20, 0x10, 0x08, 0x9a, 0x01, 0x0e, 0xfe, 0x41,
+ 0x58, 0x08, 0x3c, 0x01, 0x0e, 0xfe, 0x49, 0x54, 0x64, 0xfe, 0x0c, 0x03, 0x01, 0xe3, 0x02, 0x28,
+ 0x29, 0x5f, 0xfe, 0x02, 0xe8, 0x26, 0xf5, 0xfe, 0x9e, 0x43, 0xf4, 0xfe, 0x27, 0xf0, 0xfe, 0xdc,
+ 0x01, 0xfe, 0x07, 0x4b, 0xfe, 0x20, 0xf0, 0x9d, 0xfe, 0x40, 0x1c, 0x24, 0xd0, 0xfe, 0x26, 0xf0,
+ 0xfe, 0x5e, 0x03, 0xfe, 0xa0, 0xf0, 0xfe, 0x4c, 0x03, 0xfe, 0x11, 0xf0, 0x9d, 0xd9, 0xfe, 0x9f,
+ 0xf0, 0xfe, 0x6c, 0x03, 0xe8, 0x0f, 0xfe, 0x11, 0x00, 0x02, 0x5b, 0x29, 0xfe, 0x48, 0x1c, 0xe8,
+ 0x22, 0x1d, 0x99, 0xa9, 0x12, 0x99, 0x08, 0x3c, 0x01, 0x0e, 0xa9, 0x74, 0x01, 0xfe, 0x9a, 0x15,
+ 0x11, 0xc8, 0x24, 0xd0, 0xfe, 0x01, 0xf0, 0xd0, 0xfe, 0x82, 0xf0, 0xfe, 0x92, 0x03, 0xe9, 0x11,
+ 0xfe, 0xe4, 0x00, 0x65, 0xfe, 0xa4, 0x03, 0x24, 0x33, 0x1e, 0xfe, 0xb4, 0x03, 0x01, 0x45, 0xfe,
+ 0x06, 0xf0, 0xfe, 0xc4, 0x03, 0x8e, 0x81, 0xfe, 0x0a, 0xf0, 0xfe, 0x6a, 0x06, 0x02, 0x21, 0x04,
+ 0x6b, 0x27, 0x18, 0xfe, 0xe6, 0x04, 0x14, 0x2b, 0x01, 0x36, 0x90, 0xfe, 0x66, 0x02, 0x02, 0xcf,
+ 0xe8, 0x29, 0x67, 0x1a, 0xfe, 0x67, 0x1b, 0xf5, 0xf4, 0xfe, 0x48, 0x1c, 0x6f, 0x01, 0x85, 0x89,
+ 0x08, 0x3c, 0x01, 0x0e, 0x06, 0x00, 0x18, 0xd1, 0x08, 0xc8, 0x01, 0x0e, 0x73, 0x61, 0x5a, 0x76,
+ 0x26, 0x04, 0x6b, 0x27, 0xfe, 0x10, 0x12, 0x14, 0x2b, 0x01, 0x36, 0x90, 0xfe, 0x66, 0x02, 0x02,
+ 0xcf, 0xba, 0x7d, 0xbb, 0x7f, 0x24, 0x21, 0x65, 0xfe, 0x3c, 0x04, 0x1e, 0xfe, 0x38, 0x04, 0x68,
+ 0xfe, 0xa0, 0x00, 0xfe, 0x9b, 0x57, 0xfe, 0x46, 0x12, 0x2a, 0xff, 0x02, 0x00, 0x10, 0x01, 0x07,
+ 0x1e, 0xfe, 0xd0, 0x04, 0x2a, 0x01, 0x07, 0x1e, 0x21, 0x31, 0x2f, 0xd3, 0xfe, 0x4c, 0x44, 0xfe,
+ 0x3c, 0x12, 0x61, 0xfe, 0x44, 0x48, 0x13, 0x2b, 0xfe, 0x4c, 0x54, 0x64, 0xd1, 0x5f, 0x76, 0x26,
+ 0xf7, 0xec, 0xfe, 0x52, 0x13, 0x30, 0x06, 0x7e, 0xfe, 0x4a, 0x13, 0xfe, 0x18, 0x10, 0x13, 0x2b,
+ 0xfe, 0x4c, 0x54, 0x64, 0xd1, 0xf7, 0xec, 0xfe, 0x38, 0x13, 0x30, 0x06, 0x7e, 0x86, 0x0b, 0x09,
+ 0x2c, 0xfe, 0x1c, 0x12, 0x14, 0x93, 0x0b, 0x09, 0x05, 0x3f, 0x14, 0xc2, 0x01, 0x36, 0x90, 0xfe,
+ 0x5e, 0x0c, 0x02, 0x21, 0x2a, 0x11, 0xfe, 0xe6, 0x00, 0xfe, 0x1c, 0x90, 0xf6, 0x03, 0x14, 0x93,
+ 0x01, 0x36, 0x02, 0x28, 0xfe, 0x42, 0x5b, 0x67, 0x1a, 0xfe, 0x46, 0x59, 0xf5, 0xf4, 0xfe, 0x87,
+ 0x80, 0xfe, 0x31, 0xe4, 0x50, 0x0b, 0x09, 0x0a, 0xfe, 0x78, 0x13, 0xfe, 0x20, 0x80, 0x06, 0x1a,
+ 0xfe, 0x70, 0x12, 0x4a, 0x09, 0x05, 0x87, 0x04, 0xfe, 0xa2, 0x00, 0x27, 0x18, 0xfe, 0x70, 0x05,
+ 0xfe, 0x31, 0xe4, 0x6a, 0x4a, 0x09, 0x0a, 0xfe, 0x4a, 0x13, 0x04, 0xfe, 0xa0, 0x00, 0x27, 0xfe,
+ 0x42, 0x12, 0x5e, 0x01, 0x07, 0x24, 0x33, 0xee, 0x01, 0x07, 0x25, 0xfe, 0x88, 0x05, 0x11, 0xfe,
+ 0xe3, 0x00, 0x22, 0x4a, 0xfe, 0x4a, 0xf0, 0xfe, 0x5a, 0x05, 0xfe, 0x49, 0xf0, 0xfe, 0x54, 0x05,
+ 0x35, 0x23, 0xfe, 0x21, 0x00, 0x34, 0x23, 0xfe, 0x22, 0x00, 0xa1, 0x23, 0x4d, 0xfe, 0x09, 0x48,
+ 0x01, 0x07, 0x25, 0xfe, 0x88, 0x05, 0xfe, 0xe2, 0x08, 0x4a, 0x09, 0xc3, 0x3f, 0x01, 0x5d, 0x23,
+ 0x05, 0x12, 0xca, 0x3a, 0xfe, 0x27, 0x01, 0x0b, 0x09, 0x2c, 0xfe, 0x22, 0x12, 0x47, 0x01, 0xa4,
+ 0x14, 0x93, 0x0b, 0x09, 0x05, 0x3f, 0x14, 0xc2, 0x01, 0x36, 0x90, 0xfe, 0x5e, 0x0c, 0x02, 0x21,
+ 0x04, 0xfe, 0x9c, 0x00, 0x27, 0xfe, 0x3e, 0x12, 0x04, 0x51, 0x27, 0xfe, 0x36, 0x13, 0x47, 0x01,
+ 0xa4, 0x25, 0xfe, 0xf8, 0x05, 0x08, 0x05, 0x4a, 0x09, 0x17, 0xfe, 0x02, 0x12, 0x60, 0x01, 0xfe,
+ 0x88, 0x14, 0x1e, 0xfe, 0xee, 0x05, 0x11, 0x9b, 0x01, 0x45, 0x11, 0xfe, 0xe5, 0x00, 0x04, 0x51,
+ 0xb1, 0x0c, 0x51, 0x04, 0xc4, 0x27, 0xfe, 0x62, 0x12, 0x04, 0x42, 0x27, 0xfe, 0x5a, 0x13, 0x01,
+ 0xfe, 0xee, 0x17, 0x01, 0xfe, 0x40, 0x18, 0xfe, 0x43, 0x48, 0xb5, 0x17, 0x13, 0x6c, 0xff, 0x02,
+ 0x00, 0x57, 0x49, 0x8c, 0x1c, 0x40, 0x84, 0xb5, 0x69, 0x47, 0x01, 0xa4, 0x25, 0xfe, 0x62, 0x06,
+ 0x4a, 0x09, 0x1b, 0xde, 0x8b, 0x08, 0x4e, 0x01, 0xe2, 0x1e, 0xfe, 0x58, 0x06, 0x11, 0x9b, 0x01,
+ 0x45, 0x11, 0xfe, 0xe5, 0x00, 0x04, 0x42, 0xb1, 0x0c, 0x42, 0x16, 0x05, 0x01, 0xa4, 0xe9, 0x71,
+ 0x6f, 0x01, 0x85, 0x89, 0x11, 0xfe, 0xe2, 0x00, 0x01, 0x07, 0x24, 0x33, 0xfe, 0x0a, 0xf0, 0xfe,
+ 0x96, 0x06, 0x8d, 0xfe, 0x4c, 0x07, 0xfe, 0x06, 0xf0, 0xfe, 0x54, 0x07, 0x8e, 0x81, 0x02, 0x21,
+ 0x0b, 0x09, 0x0a, 0xfe, 0x2e, 0x12, 0x15, 0x1a, 0x01, 0x07, 0x15, 0x00, 0x01, 0x07, 0x15, 0x00,
+ 0x01, 0x07, 0x15, 0x00, 0x01, 0x07, 0xfe, 0x99, 0xa4, 0x01, 0x07, 0x15, 0x00, 0x02, 0xfe, 0x22,
+ 0x08, 0x75, 0x09, 0x1b, 0xfe, 0x38, 0x12, 0x0b, 0x09, 0x1b, 0x86, 0x15, 0xfe, 0x1b, 0x00, 0x01,
+ 0x07, 0x15, 0x00, 0x01, 0x07, 0x15, 0x00, 0x01, 0x07, 0x15, 0x00, 0x01, 0x07, 0x15, 0x05, 0x01,
+ 0x07, 0x15, 0x00, 0x02, 0xd7, 0x66, 0x4d, 0xfe, 0x3a, 0x55, 0x60, 0xfe, 0x9a, 0x81, 0x4c, 0x2c,
+ 0xb8, 0xfe, 0x22, 0x07, 0x08, 0x2c, 0xfe, 0x09, 0x6f, 0xac, 0xfe, 0xca, 0x45, 0xfe, 0x32, 0x12,
+ 0x62, 0x2b, 0x84, 0x66, 0x7b, 0x01, 0x07, 0x24, 0x33, 0xfe, 0x0a, 0xf0, 0xfe, 0x22, 0x07, 0x8e,
+ 0x81, 0x8d, 0xfe, 0x4c, 0x07, 0x02, 0x21, 0x01, 0x45, 0x02, 0xfe, 0x7a, 0x06, 0x15, 0x17, 0x02,
+ 0xfe, 0x7a, 0x06, 0xfe, 0x9c, 0xf7, 0xd2, 0xfe, 0x2c, 0x90, 0xfe, 0xae, 0x90, 0x77, 0xfe, 0xba,
+ 0x07, 0x0c, 0x55, 0x19, 0x56, 0x0b, 0x4b, 0x6a, 0x38, 0x1d, 0x1f, 0x06, 0x10, 0xfe, 0x0e, 0x12,
+ 0x73, 0xfe, 0x80, 0x80, 0x3a, 0x1f, 0x63, 0x26, 0xfe, 0x06, 0x10, 0xfe, 0x83, 0xe7, 0xc2, 0x34,
+ 0xfe, 0x03, 0x40, 0x0b, 0x4b, 0x50, 0x38, 0x01, 0xa5, 0xaa, 0xfe, 0x1f, 0x40, 0x12, 0x59, 0x01,
+ 0x86, 0xfe, 0x08, 0x50, 0xfe, 0x8a, 0x50, 0xfe, 0x44, 0x51, 0xfe, 0xc6, 0x51, 0x35, 0xf8, 0xfe,
+ 0x8a, 0x90, 0x0c, 0x53, 0x19, 0x54, 0xfe, 0x0c, 0x90, 0xfe, 0x8e, 0x90, 0xfe, 0x40, 0x50, 0xfe,
+ 0xc2, 0x50, 0x0c, 0x3d, 0x19, 0x3e, 0xfe, 0x4a, 0x10, 0x0b, 0x09, 0x6a, 0xfe, 0x2a, 0x12, 0xfe,
+ 0x2c, 0x90, 0xfe, 0xae, 0x90, 0x0c, 0x55, 0x19, 0x56, 0x0b, 0x09, 0x50, 0x84, 0x01, 0xa5, 0xfe,
+ 0x1f, 0x80, 0x12, 0x59, 0xfe, 0x44, 0x90, 0xfe, 0xc6, 0x90, 0x0c, 0x57, 0x19, 0x58, 0xf8, 0xfe,
+ 0x8a, 0x90, 0x0c, 0x53, 0x19, 0x54, 0xfe, 0x40, 0x90, 0xfe, 0xc2, 0x90, 0x0c, 0x3d, 0x19, 0x3e,
+ 0x0c, 0x3b, 0x19, 0x4f, 0x0b, 0x4b, 0x17, 0x38, 0x29, 0x13, 0xfe, 0x4e, 0x11, 0x65, 0xfe, 0x38,
+ 0x08, 0xfe, 0x9e, 0xf0, 0xfe, 0x4c, 0x08, 0xae, 0x18, 0x33, 0x29, 0x72, 0xdc, 0xb6, 0xfe, 0x70,
+ 0x08, 0xb7, 0xfe, 0x8e, 0x08, 0x8d, 0xfe, 0x64, 0x08, 0xfe, 0x06, 0xf0, 0xfe, 0x6a, 0x08, 0x8e,
+ 0x81, 0x02, 0x21, 0x01, 0x45, 0xfe, 0xc9, 0x10, 0x15, 0x17, 0xfe, 0xc9, 0x10, 0x75, 0x09, 0x05,
+ 0xfe, 0x10, 0x12, 0x75, 0x09, 0x0a, 0x5c, 0x0b, 0x09, 0x0a, 0xfe, 0x68, 0x12, 0xfe, 0x2e, 0x1c,
+ 0x02, 0xfe, 0x14, 0x0a, 0x75, 0x09, 0x05, 0x5c, 0x75, 0x09, 0x0a, 0xfe, 0x52, 0x12, 0xfe, 0x2c,
+ 0x1c, 0xfe, 0xaa, 0xf0, 0xfe, 0x0e, 0x09, 0xfe, 0xac, 0xf0, 0xfe, 0xae, 0x08, 0xfe, 0x8a, 0x10,
+ 0xa7, 0xfe, 0xf3, 0x10, 0xfe, 0xad, 0xf0, 0xfe, 0xba, 0x08, 0x02, 0xfe, 0x14, 0x0a, 0xa8, 0xfe,
+ 0xe7, 0x10, 0xfe, 0x2b, 0xf0, 0x9e, 0xe6, 0x1c, 0xfe, 0x00, 0xfe, 0xfe, 0x1c, 0x12, 0xb2, 0xfe,
+ 0xd2, 0xf0, 0x9e, 0xfe, 0x76, 0x18, 0x1c, 0x1a, 0x18, 0x9e, 0x04, 0xc9, 0x1c, 0x05, 0x18, 0x9e,
+ 0xb6, 0x6d, 0xb7, 0x6d, 0xa7, 0xa8, 0xfe, 0xb1, 0x10, 0x6f, 0x5e, 0x2a, 0x14, 0x93, 0x01, 0x36,
+ 0x0f, 0xfe, 0x35, 0x00, 0xfe, 0x01, 0xf0, 0x5b, 0x0f, 0x7c, 0x02, 0x5b, 0xfe, 0x74, 0x18, 0x1c,
+ 0xfe, 0x00, 0xf8, 0x18, 0x6d, 0x67, 0x1b, 0x01, 0xfe, 0x28, 0x0d, 0x3f, 0x01, 0xe3, 0x1d, 0x26,
+ 0x73, 0x67, 0x1a, 0x02, 0x6d, 0xfe, 0x98, 0x80, 0xfb, 0x0a, 0x20, 0xfe, 0xf6, 0x09, 0x0b, 0x09,
+ 0x6a, 0xfe, 0x82, 0x12, 0x0b, 0x09, 0x17, 0xfe, 0x66, 0x13, 0x1d, 0x59, 0xa9, 0xf9, 0xfe, 0x83,
+ 0x80, 0xfe, 0xc8, 0x44, 0xfe, 0x2e, 0x13, 0xfe, 0x04, 0x91, 0xfe, 0x86, 0x91, 0x63, 0x26, 0xfe,
+ 0x40, 0x59, 0xfe, 0xc1, 0x59, 0x77, 0xd5, 0x04, 0x55, 0x32, 0x56, 0x0c, 0x7b, 0x19, 0x7c, 0xbc,
+ 0x55, 0xbd, 0x56, 0x01, 0xa5, 0xaa, 0x63, 0x26, 0x12, 0x59, 0xbe, 0x3b, 0xbf, 0x4f, 0x79, 0x57,
+ 0x68, 0x58, 0xf1, 0xf2, 0xfe, 0x04, 0xfa, 0x3b, 0xfe, 0x05, 0xfa, 0x4f, 0x01, 0x86, 0xfe, 0x36,
+ 0x10, 0x22, 0x0c, 0x7b, 0x0c, 0x7c, 0x79, 0x57, 0x68, 0x58, 0xfe, 0x12, 0x10, 0x0b, 0x09, 0x17,
+ 0x18, 0xd5, 0x79, 0x3d, 0x68, 0x3e, 0x0b, 0x09, 0xfe, 0xf7, 0x00, 0x38, 0x04, 0x53, 0x32, 0x54,
+ 0xfe, 0x10, 0x58, 0xfe, 0x91, 0x58, 0xfe, 0x14, 0x59, 0xfe, 0x95, 0x59, 0x02, 0x6d, 0x0b, 0x09,
+ 0x17, 0x18, 0xd5, 0x0b, 0x09, 0xfe, 0xf7, 0x00, 0x38, 0xfe, 0x3a, 0x55, 0xfe, 0x19, 0x81, 0x60,
+ 0xfe, 0x10, 0x90, 0xfe, 0x92, 0x90, 0xfe, 0xd7, 0x10, 0x30, 0x06, 0x9c, 0x18, 0xfe, 0xb6, 0x08,
+ 0x11, 0x9c, 0xfe, 0x98, 0x80, 0xfb, 0x0a, 0xfe, 0x14, 0x13, 0x04, 0x3d, 0x32, 0x3e, 0x77, 0xfe,
+ 0xb6, 0x08, 0xfe, 0x0c, 0x58, 0xfe, 0x8d, 0x58, 0x02, 0x6d, 0x22, 0x47, 0xfe, 0x19, 0x80, 0xdd,
+ 0x0b, 0x09, 0x0a, 0xfe, 0x1a, 0x12, 0xfe, 0x6c, 0x19, 0xfe, 0x19, 0x41, 0xe6, 0xb2, 0xfe, 0xd1,
+ 0xf0, 0xd7, 0x14, 0x7a, 0x01, 0x36, 0x0f, 0xfe, 0x44, 0x00, 0xfe, 0x8e, 0x10, 0xfe, 0x6c, 0x19,
+ 0xbc, 0x3d, 0xfe, 0xed, 0x19, 0xbd, 0x3e, 0xfe, 0x0c, 0x51, 0xfe, 0x8e, 0x51, 0xe6, 0x1c, 0xfe,
+ 0x00, 0xff, 0x37, 0xfe, 0x74, 0x10, 0xb2, 0xfe, 0xd2, 0xf0, 0xfe, 0xa2, 0x0a, 0xfe, 0x76, 0x18,
+ 0x1c, 0x1a, 0x83, 0x04, 0xc9, 0x1c, 0x05, 0xfe, 0x08, 0x13, 0x0f, 0xfe, 0x16, 0x00, 0x02, 0x5b,
+ 0xfe, 0xd1, 0xf0, 0xfe, 0xb4, 0x0a, 0x14, 0x7a, 0x01, 0x36, 0x0f, 0xfe, 0x17, 0x00, 0xfe, 0x42,
+ 0x10, 0xfe, 0xce, 0xf0, 0xfe, 0xba, 0x0a, 0xfe, 0x3c, 0x10, 0xfe, 0xcd, 0xf0, 0xfe, 0xc6, 0x0a,
+ 0x0f, 0xfe, 0x22, 0x00, 0x02, 0x5b, 0xfe, 0xcb, 0xf0, 0xfe, 0xd2, 0x0a, 0x0f, 0xfe, 0x24, 0x00,
+ 0x02, 0x5b, 0xfe, 0xd0, 0xf0, 0xfe, 0xdc, 0x0a, 0x0f, 0x94, 0xdb, 0xfe, 0xcf, 0xf0, 0xfe, 0xe6,
+ 0x0a, 0x0f, 0x4d, 0xfe, 0x10, 0x10, 0xfe, 0xcc, 0xf0, 0xd7, 0xfe, 0x84, 0x80, 0xfb, 0x17, 0x3f,
+ 0x0f, 0xfe, 0x12, 0x00, 0x29, 0x13, 0xfe, 0x4e, 0x11, 0x65, 0xfe, 0xfc, 0x0a, 0xfe, 0x9e, 0xf0,
+ 0xfe, 0x10, 0x0b, 0xae, 0x18, 0x33, 0x29, 0x72, 0xdc, 0xb6, 0x21, 0xb7, 0x21, 0x29, 0xe9, 0x65,
+ 0xfe, 0x1c, 0x0b, 0x24, 0x33, 0x8d, 0xfe, 0x38, 0x0b, 0x8e, 0x81, 0xb6, 0xd2, 0xb7, 0xd2, 0x02,
+ 0x21, 0x01, 0x45, 0xfe, 0xdb, 0x10, 0x11, 0xfe, 0xe8, 0x00, 0xa7, 0xa8, 0x6f, 0xba, 0x7d, 0xbb,
+ 0x7f, 0xfe, 0x89, 0xf0, 0x21, 0x31, 0x2f, 0xd6, 0xba, 0x7d, 0xbb, 0x7f, 0x01, 0x07, 0x1e, 0x21,
+ 0x31, 0x2f, 0xd4, 0xae, 0x5c, 0x0f, 0xfe, 0x42, 0x00, 0x02, 0x5b, 0x78, 0x05, 0xfe, 0x81, 0x49,
+ 0xfe, 0xa2, 0x12, 0x0b, 0x09, 0x0a, 0xfe, 0x44, 0x13, 0x0f, 0x00, 0x4c, 0x0a, 0xfe, 0x54, 0x12,
+ 0x4c, 0xfe, 0x28, 0x00, 0x20, 0xfe, 0x94, 0x0c, 0x08, 0x3c, 0x01, 0x0e, 0x06, 0x00, 0x46, 0x41,
+ 0xfe, 0x28, 0x00, 0xfe, 0xe2, 0x10, 0x01, 0xe4, 0x01, 0xe5, 0x08, 0x9a, 0x01, 0xfe, 0x16, 0x0e,
+ 0x5a, 0x11, 0x2d, 0x01, 0x6e, 0x02, 0x28, 0x0f, 0xfe, 0x44, 0x00, 0x4c, 0x0a, 0xde, 0x41, 0x0a,
+ 0xfe, 0xb4, 0x10, 0x01, 0x5d, 0x41, 0x0a, 0xfe, 0xaa, 0x10, 0x01, 0x5d, 0xfe, 0x19, 0x82, 0xfe,
+ 0x34, 0x46, 0xa2, 0x41, 0x0a, 0x0f, 0xfe, 0x43, 0x00, 0xfe, 0x96, 0x10, 0x0b, 0x4b, 0x0a, 0x38,
+ 0x01, 0xe4, 0x01, 0xe5, 0x5a, 0x11, 0x2d, 0x01, 0x6e, 0x67, 0x0a, 0x5a, 0x48, 0xb4, 0x02, 0xfe,
+ 0x32, 0x03, 0x0b, 0x09, 0x0a, 0x83, 0x41, 0x0a, 0x0f, 0x00, 0xfe, 0x5c, 0x10, 0x75, 0x09, 0x1b,
+ 0xfe, 0x58, 0x12, 0x0b, 0x09, 0x1b, 0xfe, 0x50, 0x13, 0xfe, 0x1c, 0x1c, 0xfe, 0x9d, 0xf0, 0xfe,
+ 0x4a, 0x0c, 0xfe, 0x1c, 0x1c, 0xfe, 0x9d, 0xf0, 0xfe, 0x50, 0x0c, 0x0b, 0x4b, 0x1b, 0x38, 0xfe,
+ 0xa9, 0x10, 0x0f, 0xfe, 0x15, 0x00, 0xfe, 0x04, 0xe6, 0x0a, 0x60, 0xfe, 0x2e, 0x10, 0x0f, 0xfe,
+ 0x13, 0x00, 0xfe, 0x10, 0x10, 0x0f, 0xfe, 0x47, 0x00, 0x34, 0x0f, 0xfe, 0x41, 0x00, 0xa1, 0x0f,
+ 0xfe, 0x24, 0x00, 0x89, 0xa7, 0xa8, 0x6f, 0x04, 0x6b, 0x27, 0x20, 0xcf, 0x60, 0xfe, 0x04, 0xe6,
+ 0x1b, 0xfe, 0x9d, 0x41, 0xfe, 0x1c, 0x42, 0x5a, 0x01, 0xd8, 0x02, 0x28, 0xe7, 0x14, 0x0a, 0x3a,
+ 0x96, 0xa6, 0x14, 0xfe, 0x31, 0x00, 0x3a, 0x98, 0x01, 0xfe, 0x32, 0x0f, 0x02, 0xce, 0x48, 0xfe,
+ 0x06, 0xec, 0xc7, 0xeb, 0x41, 0x2c, 0xfe, 0xce, 0x45, 0x37, 0x48, 0xfe, 0x06, 0xea, 0xc7, 0xfe,
+ 0x47, 0x4b, 0x8b, 0xfe, 0x75, 0x57, 0x04, 0x52, 0xfe, 0x98, 0x56, 0xfe, 0x2e, 0x12, 0x08, 0x3c,
+ 0x01, 0x0e, 0x47, 0xfe, 0x41, 0x58, 0x08, 0x9a, 0x01, 0x0e, 0xfe, 0x49, 0x54, 0x8f, 0xfe, 0x0e,
+ 0x0d, 0x08, 0x44, 0x01, 0x0e, 0xfe, 0x44, 0x48, 0x02, 0xfe, 0x32, 0x03, 0x08, 0x52, 0x88, 0xeb,
+ 0x41, 0x2c, 0xfe, 0xce, 0x45, 0x37, 0x48, 0xfe, 0xce, 0x47, 0xfe, 0xb7, 0x13, 0x02, 0x28, 0x1d,
+ 0x1f, 0x06, 0x10, 0xfe, 0x9e, 0x12, 0x22, 0x12, 0x4e, 0x12, 0x95, 0x12, 0xcc, 0x1d, 0x2d, 0x47,
+ 0x3a, 0x2d, 0xae, 0xfe, 0x0c, 0x13, 0xfe, 0xbc, 0xf0, 0xfe, 0xd0, 0x0d, 0x13, 0x05, 0x12, 0x4e,
+ 0x01, 0xfe, 0xc0, 0x15, 0x04, 0xfe, 0x38, 0x01, 0x32, 0xfe, 0x3a, 0x01, 0x77, 0xfe, 0xd4, 0x0d,
+ 0xfe, 0x02, 0xec, 0xcc, 0x62, 0x00, 0x46, 0xfe, 0x04, 0xec, 0x1f, 0x5f, 0xfe, 0x05, 0xf6, 0xfe,
+ 0x34, 0x01, 0x01, 0xfe, 0x30, 0x16, 0xf8, 0xfe, 0x48, 0xf4, 0x0d, 0xfe, 0x18, 0x13, 0xac, 0xfe,
+ 0x02, 0xea, 0xcc, 0x62, 0x7a, 0xfe, 0xc5, 0x13, 0x14, 0x1b, 0x3a, 0x96, 0xa6, 0xfe, 0x2e, 0x10,
+ 0x04, 0xfe, 0x38, 0x01, 0x1c, 0xfe, 0xf0, 0xff, 0x0c, 0xfe, 0x60, 0x01, 0x04, 0xfe, 0x3a, 0x01,
+ 0x0c, 0xfe, 0x62, 0x01, 0x40, 0x12, 0x1f, 0x23, 0x05, 0x12, 0x2d, 0x11, 0x2d, 0xb4, 0x13, 0x05,
+ 0x03, 0x22, 0x03, 0x1d, 0x4e, 0xfe, 0xf7, 0x12, 0x1d, 0x95, 0xa9, 0x12, 0x95, 0x06, 0x7a, 0xfe,
+ 0x71, 0x13, 0xfe, 0x24, 0x1c, 0x14, 0x1a, 0x3a, 0x96, 0xa6, 0xfe, 0xd9, 0x10, 0xb3, 0xfe, 0x03,
+ 0xdc, 0xfe, 0x73, 0x57, 0xfe, 0x80, 0x5d, 0x03, 0xb3, 0xfe, 0x03, 0xdc, 0xfe, 0x5b, 0x57, 0xfe,
+ 0x80, 0x5d, 0x03, 0xfe, 0x03, 0x57, 0xb3, 0x22, 0xfa, 0x03, 0xfe, 0x03, 0x57, 0xb3, 0x74, 0x03,
+ 0x0b, 0x09, 0x4d, 0xfe, 0x22, 0x13, 0xfe, 0x1c, 0x80, 0x06, 0x05, 0xfe, 0x1a, 0x13, 0xfe, 0x1e,
+ 0x80, 0xdf, 0xfe, 0x1d, 0x80, 0xa3, 0xfe, 0x0c, 0x90, 0x85, 0xfe, 0x0e, 0x90, 0xa2, 0xfe, 0x3c,
+ 0x90, 0xfe, 0x30, 0xf4, 0x0a, 0xfe, 0x3c, 0x50, 0xa1, 0x01, 0xfe, 0x60, 0x16, 0x30, 0x06, 0x2d,
+ 0x46, 0x01, 0xfe, 0x9a, 0x15, 0xfe, 0x08, 0x10, 0x01, 0xe4, 0x01, 0xe5, 0x11, 0xfe, 0xe9, 0x00,
+ 0x0b, 0x09, 0x4d, 0xfe, 0x2c, 0x13, 0x01, 0xfe, 0xf2, 0x15, 0xfe, 0x1e, 0x1c, 0xfe, 0x14, 0x90,
+ 0x0c, 0xfe, 0x64, 0x01, 0xfe, 0x16, 0x90, 0x0c, 0xfe, 0x66, 0x01, 0x0b, 0x09, 0x50, 0xfe, 0x12,
+ 0x12, 0xfe, 0x03, 0x80, 0x73, 0xfe, 0x01, 0xec, 0x1f, 0xfe, 0x80, 0x40, 0x12, 0x1f, 0x63, 0x26,
+ 0x11, 0xc6, 0x5a, 0x1d, 0x1f, 0xea, 0x76, 0x1f, 0x03, 0xfe, 0x08, 0x1c, 0x04, 0xfe, 0xac, 0x00,
+ 0xfe, 0x06, 0x58, 0x04, 0xfe, 0xae, 0x00, 0xfe, 0x07, 0x58, 0x04, 0xfe, 0xb0, 0x00, 0xfe, 0x08,
+ 0x58, 0x04, 0xfe, 0xb2, 0x00, 0xfe, 0x09, 0x58, 0xfe, 0x0a, 0x1c, 0x23, 0x69, 0x12, 0xc7, 0x22,
+ 0x0c, 0x51, 0x0c, 0x42, 0x13, 0x3c, 0x49, 0x60, 0x16, 0x2c, 0xfe, 0x90, 0x4d, 0xfe, 0x91, 0x54,
+ 0x20, 0xfe, 0xe6, 0x0e, 0x41, 0x10, 0x13, 0x44, 0x49, 0x16, 0x4d, 0xfe, 0x90, 0x4d, 0xfe, 0x91,
+ 0x54, 0x20, 0xfe, 0xfc, 0x0e, 0x23, 0x10, 0x12, 0x1f, 0x78, 0x2b, 0x5f, 0x1d, 0x1f, 0xea, 0x76,
+ 0x1f, 0x11, 0xc6, 0xf3, 0xfe, 0xd6, 0xf0, 0xfe, 0x10, 0x0f, 0xe7, 0x6f, 0xfe, 0x14, 0x1c, 0xfe,
+ 0x10, 0x1c, 0xfe, 0x18, 0x1c, 0x03, 0x48, 0xfe, 0x0c, 0x14, 0xeb, 0xfe, 0x07, 0xe6, 0x2c, 0xfe,
+ 0xce, 0x47, 0xfe, 0xf5, 0x13, 0x03, 0x01, 0x5d, 0x78, 0x2b, 0x5f, 0xf7, 0xec, 0xfe, 0x42, 0x13,
+ 0x30, 0x06, 0x2d, 0xfe, 0x34, 0x13, 0x08, 0x44, 0x01, 0x0e, 0xad, 0xfe, 0x36, 0x12, 0xed, 0xfe,
+ 0x45, 0x48, 0x01, 0x87, 0xfa, 0xad, 0xfe, 0xf3, 0x13, 0x40, 0x74, 0x06, 0x10, 0xa2, 0x08, 0x80,
+ 0x01, 0x0e, 0xfe, 0x80, 0x5c, 0x01, 0x6e, 0xd9, 0x06, 0x7e, 0x5c, 0xf3, 0xfe, 0xd6, 0xf0, 0xfe,
+ 0x4a, 0x0f, 0x03, 0xfe, 0x44, 0x58, 0x73, 0xfe, 0x01, 0xec, 0x98, 0xfe, 0x9e, 0x40, 0xfe, 0x9d,
+ 0xe7, 0x00, 0xfe, 0x9c, 0xe7, 0x1b, 0x76, 0x26, 0x01, 0xd8, 0xfe, 0xdd, 0x10, 0x29, 0xba, 0x7d,
+ 0xbb, 0x7f, 0x31, 0x2f, 0xd3, 0x06, 0x1b, 0xfe, 0x48, 0x12, 0x06, 0x0a, 0xfe, 0x56, 0x12, 0x06,
+ 0x1a, 0xfe, 0x30, 0x12, 0x06, 0xc0, 0x18, 0xfe, 0x1c, 0x11, 0x06, 0xfe, 0x23, 0x00, 0x18, 0xfe,
+ 0x28, 0x11, 0x06, 0x05, 0x18, 0xfe, 0x86, 0x11, 0x06, 0x17, 0xfe, 0x12, 0x12, 0x06, 0x00, 0x18,
+ 0x21, 0x14, 0xc0, 0x01, 0x36, 0xa0, 0x2a, 0x01, 0x07, 0x8d, 0x45, 0x03, 0x2a, 0xfe, 0x62, 0x08,
+ 0x08, 0xc8, 0x01, 0xfe, 0x16, 0x0e, 0x11, 0x7e, 0x02, 0x28, 0x2a, 0x30, 0x06, 0x9c, 0xfe, 0xd9,
+ 0x13, 0x79, 0x3d, 0x68, 0x3e, 0x77, 0xfe, 0xda, 0x10, 0x0b, 0x09, 0x6a, 0xfe, 0x72, 0x12, 0xbe,
+ 0x3b, 0xbf, 0x4f, 0xf1, 0xf2, 0x8f, 0xfe, 0xa4, 0x10, 0x1d, 0x59, 0xfe, 0x26, 0x13, 0x04, 0x7b,
+ 0x32, 0x7c, 0x77, 0xfe, 0x70, 0x0c, 0x0c, 0x55, 0x19, 0x56, 0x22, 0x0c, 0x7b, 0x0c, 0x7c, 0x01,
+ 0xa5, 0x23, 0x69, 0x72, 0x12, 0x59, 0x01, 0x86, 0xbe, 0x3b, 0xbf, 0x4f, 0xfe, 0x04, 0x55, 0xfe,
+ 0xa5, 0x55, 0xfe, 0x04, 0xfa, 0x3b, 0xfe, 0x05, 0xfa, 0x4f, 0xfe, 0x91, 0x10, 0x04, 0x57, 0x32,
+ 0x58, 0xfe, 0x40, 0x56, 0xfe, 0xe1, 0x56, 0x0c, 0x57, 0x19, 0x58, 0x35, 0xbe, 0x3b, 0xbf, 0x4f,
+ 0xf1, 0xf2, 0x04, 0x53, 0x32, 0x54, 0xfe, 0x00, 0x56, 0xfe, 0xa1, 0x56, 0x0c, 0x53, 0x19, 0x54,
+ 0x0b, 0x09, 0x6a, 0xfe, 0x1e, 0x12, 0x1d, 0x59, 0xfe, 0x1f, 0x40, 0x04, 0x55, 0x32, 0x56, 0xfe,
+ 0x2c, 0x50, 0xfe, 0xae, 0x50, 0x04, 0x57, 0x32, 0x58, 0xfe, 0x44, 0x50, 0xfe, 0xc6, 0x50, 0x04,
+ 0x53, 0x32, 0x54, 0xfe, 0x08, 0x50, 0xfe, 0x8a, 0x50, 0x04, 0x3d, 0x32, 0x3e, 0xfe, 0x40, 0x50,
+ 0xfe, 0xc2, 0x50, 0x02, 0x35, 0x23, 0x05, 0x12, 0xcb, 0x02, 0x34, 0x2a, 0x01, 0x07, 0x1e, 0x2e,
+ 0x31, 0x2f, 0xd3, 0x06, 0x05, 0x20, 0x2e, 0x30, 0x06, 0x9c, 0x20, 0x34, 0x01, 0x85, 0x1c, 0x40,
+ 0x18, 0x2e, 0x0b, 0x09, 0x0a, 0x5d, 0x79, 0x3d, 0x68, 0x3e, 0xfe, 0x0a, 0x55, 0x37, 0xfe, 0x8b,
+ 0x55, 0xbc, 0x3d, 0xbd, 0x3e, 0xfe, 0x0c, 0x51, 0xfe, 0x8e, 0x51, 0x02, 0x34, 0xfe, 0x19, 0x81,
+ 0xac, 0xfe, 0x19, 0x41, 0x02, 0x34, 0x2a, 0x01, 0x07, 0x24, 0x33, 0x1e, 0xda, 0x31, 0x2f, 0xd6,
+ 0x4c, 0x1a, 0xfe, 0xa6, 0x12, 0x4c, 0x0a, 0x3f, 0x02, 0x2e, 0x01, 0x07, 0x24, 0x33, 0x1e, 0xda,
+ 0x31, 0x2f, 0xd4, 0x06, 0x1a, 0x20, 0x2e, 0x01, 0x07, 0x1e, 0xda, 0x31, 0x2f, 0xfe, 0xe8, 0x09,
+ 0xfe, 0xc2, 0x49, 0x61, 0x04, 0xfe, 0x9c, 0x00, 0x27, 0x83, 0x4a, 0x09, 0x17, 0x37, 0xa0, 0xfe,
+ 0xbb, 0x45, 0x4c, 0x00, 0x5c, 0x41, 0x05, 0x78, 0x40, 0xfe, 0xda, 0x14, 0x01, 0x85, 0x89, 0xfe,
+ 0x4b, 0x45, 0x5d, 0x30, 0x06, 0x9b, 0xdf, 0x04, 0xc4, 0x27, 0x83, 0x04, 0x42, 0x27, 0x37, 0x5e,
+ 0x02, 0x34, 0xfe, 0xc0, 0x5d, 0xfe, 0xf8, 0x14, 0xfe, 0x03, 0x17, 0x04, 0x51, 0xb1, 0x0c, 0x51,
+ 0x5e, 0x2a, 0x01, 0x07, 0x25, 0x35, 0x01, 0xfe, 0x88, 0x14, 0x02, 0x35, 0x01, 0x07, 0x24, 0x33,
+ 0x1e, 0x2e, 0x31, 0x2f, 0xd4, 0x06, 0x05, 0x20, 0x2e, 0x01, 0xfe, 0x6c, 0x13, 0xfe, 0x42, 0x58,
+ 0xfe, 0x82, 0x14, 0xfe, 0xa4, 0x14, 0x89, 0xfe, 0x4a, 0xf4, 0x0a, 0x18, 0x2e, 0xfe, 0x4a, 0xf4,
+ 0x05, 0xfe, 0x0c, 0x12, 0x30, 0x06, 0x9b, 0x84, 0x02, 0x34, 0x04, 0x42, 0xb1, 0x0c, 0x42, 0x5e,
+ 0x2a, 0x01, 0x07, 0x25, 0x35, 0x01, 0xe2, 0x02, 0x35, 0x13, 0x05, 0x65, 0xfe, 0xa8, 0x12, 0x25,
+ 0xfe, 0xbe, 0x12, 0x71, 0xee, 0x01, 0x07, 0x22, 0x71, 0x03, 0x90, 0xfe, 0xba, 0x12, 0x24, 0xfe,
+ 0xba, 0x12, 0x1e, 0xfe, 0xa8, 0x12, 0x5e, 0x2a, 0x01, 0x07, 0xfe, 0xd5, 0x10, 0x13, 0x6c, 0xff,
+ 0x02, 0x00, 0x57, 0x49, 0x8c, 0x1c, 0xfe, 0xff, 0x7f, 0xfe, 0x30, 0x56, 0xfe, 0x00, 0x5c, 0x03,
+ 0x13, 0x6c, 0xff, 0x02, 0x00, 0x57, 0x49, 0x8c, 0x1c, 0x40, 0xfe, 0x30, 0x56, 0xfe, 0x00, 0x5c,
+ 0x03, 0x13, 0x6c, 0xff, 0x02, 0x00, 0x57, 0x49, 0x8c, 0x03, 0x13, 0x6c, 0xff, 0x02, 0x00, 0x57,
+ 0x49, 0x8c, 0xfe, 0x0b, 0x58, 0x03, 0x08, 0x51, 0x01, 0x82, 0x08, 0x42, 0x01, 0x82, 0x03, 0xf9,
+ 0x1c, 0x10, 0xff, 0x03, 0x00, 0x54, 0xfe, 0x00, 0xf4, 0x17, 0x49, 0xfe, 0x00, 0x7d, 0xfe, 0x01,
+ 0x7d, 0xfe, 0x02, 0x7d, 0xfe, 0x03, 0x7c, 0x63, 0x26, 0x0c, 0x53, 0x19, 0x54, 0xbc, 0x57, 0xbd,
+ 0x58, 0x03, 0xfe, 0x62, 0x08, 0xfe, 0x82, 0x4a, 0xfe, 0xe1, 0x1a, 0xfe, 0x83, 0x5a, 0x73, 0x03,
+ 0x01, 0xfe, 0xee, 0x17, 0xfe, 0x42, 0x48, 0x60, 0x61, 0x8b, 0x01, 0x07, 0x1e, 0xfe, 0x80, 0x14,
+ 0x31, 0x2f, 0xd6, 0x01, 0x07, 0x1e, 0xfe, 0x80, 0x14, 0x31, 0x2f, 0xfe, 0xe8, 0x0a, 0xfe, 0xc1,
+ 0x59, 0x04, 0xc4, 0x27, 0xfe, 0xcc, 0x12, 0x4a, 0x09, 0x1b, 0xfe, 0xc4, 0x13, 0x22, 0x62, 0x1b,
+ 0x5d, 0x4c, 0xc1, 0x64, 0xfe, 0xc6, 0x13, 0x3f, 0x13, 0x05, 0x16, 0xc1, 0x78, 0x2e, 0xfe, 0x78,
+ 0x10, 0xff, 0x02, 0x83, 0x55, 0x34, 0xff, 0x02, 0x83, 0x55, 0x62, 0x1a, 0xa3, 0xb9, 0xfe, 0x30,
+ 0x00, 0x8f, 0xe0, 0x16, 0x2b, 0x13, 0x05, 0xfe, 0x56, 0x10, 0x62, 0x0a, 0xdf, 0xb9, 0xfe, 0x64,
+ 0x00, 0x8f, 0xe0, 0x08, 0xfe, 0x64, 0x00, 0x16, 0x94, 0x13, 0x05, 0xfe, 0x28, 0x10, 0x62, 0x05,
+ 0x87, 0xb9, 0xfe, 0xc8, 0x00, 0x8f, 0xe0, 0x08, 0xfe, 0xc8, 0x00, 0x16, 0x4e, 0x13, 0x05, 0x35,
+ 0xb9, 0xfe, 0x90, 0x01, 0xb8, 0xfe, 0x2c, 0x14, 0x8b, 0xfe, 0x12, 0x10, 0xfe, 0x43, 0xf4, 0x95,
+ 0xfe, 0x56, 0xf0, 0xfe, 0x3e, 0x14, 0xfe, 0x04, 0xf4, 0x6c, 0xfe, 0x43, 0xf4, 0x94, 0xfe, 0xf3,
+ 0x10, 0xf6, 0x01, 0xfe, 0x00, 0x13, 0x1c, 0x40, 0xfe, 0x10, 0x13, 0xfe, 0x00, 0x17, 0xfe, 0x4d,
+ 0xe4, 0x69, 0xb8, 0xfe, 0x7a, 0x14, 0xb5, 0x69, 0xfe, 0x1c, 0x10, 0xfe, 0x00, 0x17, 0xfe, 0x4d,
+ 0xe4, 0x17, 0xb8, 0xfe, 0x7a, 0x14, 0xb5, 0x17, 0x35, 0x61, 0x22, 0xfe, 0x4d, 0xf4, 0x00, 0xde,
+ 0x8b, 0x13, 0x05, 0xfe, 0xb4, 0x56, 0xfe, 0xc3, 0x58, 0x03, 0x61, 0x13, 0x0a, 0x03, 0x15, 0x05,
+ 0x01, 0x07, 0x25, 0xe1, 0x15, 0x0a, 0x01, 0x07, 0x25, 0xe1, 0x15, 0x1a, 0x01, 0x07, 0x25, 0xe1,
+ 0x71, 0xfe, 0x89, 0x49, 0x01, 0x07, 0x03, 0x15, 0x05, 0x01, 0x07, 0x25, 0x88, 0x15, 0x1a, 0x01,
+ 0x07, 0x25, 0x88, 0x15, 0x05, 0x01, 0x07, 0x25, 0x88, 0xfe, 0x89, 0x49, 0x01, 0x07, 0x25, 0x88,
+ 0x71, 0xfe, 0x89, 0x4a, 0x01, 0x07, 0x03, 0x61, 0x03, 0x1d, 0xca, 0x06, 0x05, 0xfe, 0x44, 0x13,
+ 0xaa, 0x12, 0xca, 0xfe, 0x49, 0xf4, 0x00, 0x3f, 0x71, 0xa0, 0x5e, 0xfe, 0x01, 0xec, 0xfe, 0x27,
+ 0x01, 0xee, 0x01, 0x07, 0x30, 0x06, 0xfe, 0xe3, 0x00, 0xfe, 0x20, 0x13, 0x1e, 0xfe, 0x38, 0x15,
+ 0x22, 0x12, 0xcb, 0x01, 0x45, 0x1d, 0xcb, 0x06, 0x05, 0x5c, 0x0b, 0x4b, 0x05, 0x38, 0x03, 0x08,
+ 0x44, 0x01, 0x0e, 0xea, 0x8a, 0x06, 0x10, 0xa3, 0x08, 0x80, 0x01, 0x0e, 0x8a, 0x08, 0x52, 0x01,
+ 0x9f, 0x03, 0x08, 0x80, 0x01, 0x0e, 0x8a, 0xfe, 0x80, 0xe7, 0x10, 0x06, 0x10, 0x83, 0xfe, 0x45,
+ 0x58, 0x01, 0x87, 0x8a, 0x03, 0x08, 0x44, 0x01, 0x0e, 0x8a, 0x08, 0x52, 0x01, 0x9f, 0x03, 0x08,
+ 0x44, 0x01, 0x0e, 0xfe, 0x80, 0x80, 0xef, 0xfe, 0x49, 0xe4, 0x10, 0xa3, 0x08, 0x80, 0x01, 0x0e,
+ 0xef, 0x08, 0x52, 0x01, 0x82, 0x03, 0x16, 0x10, 0x70, 0x66, 0xfe, 0x60, 0x01, 0xfe, 0x18, 0xdf,
+ 0xfe, 0x19, 0xde, 0xfe, 0x24, 0x1c, 0xfe, 0x1d, 0xf7, 0x2c, 0x91, 0xfe, 0xd4, 0x15, 0x01, 0xfe,
+ 0xda, 0x16, 0xfe, 0x0c, 0x13, 0x92, 0x2c, 0x66, 0xfe, 0x2c, 0x01, 0xfe, 0x2f, 0x19, 0x03, 0xab,
+ 0x20, 0xfe, 0xc4, 0x15, 0xfe, 0xda, 0x10, 0x16, 0x10, 0x70, 0x04, 0xfe, 0x64, 0x01, 0xfe, 0x00,
+ 0xf4, 0x17, 0xfe, 0x18, 0x58, 0x04, 0xfe, 0x66, 0x01, 0xfe, 0x19, 0x58, 0x92, 0x17, 0xfe, 0x3c,
+ 0x90, 0xfe, 0x30, 0xf4, 0x05, 0xfe, 0x3c, 0x50, 0x66, 0xfe, 0x38, 0x00, 0xfe, 0x0f, 0x79, 0xfe,
+ 0x1c, 0xf7, 0x17, 0x91, 0xfe, 0x1e, 0x16, 0xe2, 0x37, 0x03, 0xab, 0x20, 0xfe, 0xf6, 0x15, 0xfe,
+ 0x9c, 0x10, 0x16, 0x10, 0x70, 0xfe, 0x83, 0x5a, 0xfe, 0x18, 0xdf, 0xfe, 0x19, 0xde, 0xfe, 0x1d,
+ 0xf7, 0x3b, 0x91, 0xfe, 0x40, 0x16, 0xfe, 0x94, 0x14, 0xfe, 0x10, 0x13, 0x92, 0x3b, 0x66, 0x1b,
+ 0xfe, 0xaf, 0x19, 0xfe, 0x98, 0xe7, 0x00, 0x03, 0xab, 0x20, 0xfe, 0x34, 0x16, 0xfe, 0x6c, 0x10,
+ 0x16, 0x10, 0x70, 0xfe, 0x30, 0xbc, 0xfe, 0xb2, 0xbc, 0x92, 0xc3, 0x66, 0x1b, 0xfe, 0x0f, 0x79,
+ 0xfe, 0x1c, 0xf7, 0xc3, 0x91, 0xfe, 0x78, 0x16, 0xfe, 0x5c, 0x14, 0x37, 0x03, 0xab, 0x20, 0xfe,
+ 0x64, 0x16, 0xfe, 0x42, 0x10, 0xfe, 0x02, 0xf6, 0x10, 0x70, 0xfe, 0x18, 0xfe, 0x55, 0xfe, 0x19,
+ 0xfe, 0x56, 0xf9, 0xfe, 0x1d, 0xf7, 0x50, 0x91, 0xfe, 0x9e, 0x16, 0xfe, 0x36, 0x14, 0xfe, 0x1c,
+ 0x13, 0x92, 0x50, 0x47, 0xfe, 0x83, 0x58, 0xfe, 0xaf, 0x19, 0xfe, 0x80, 0xe7, 0x10, 0xfe, 0x81,
+ 0xe7, 0x10, 0x11, 0xfe, 0xdd, 0x00, 0x63, 0x26, 0x03, 0x63, 0x26, 0xfe, 0x12, 0x45, 0x20, 0xfe,
+ 0x8e, 0x16, 0x14, 0x05, 0x3a, 0x96, 0xa6, 0x02, 0x28, 0xfe, 0x39, 0xf0, 0xfe, 0xe2, 0x16, 0x22,
+ 0x03, 0xfe, 0x7e, 0x18, 0x1c, 0x1a, 0x46, 0x13, 0x0d, 0x03, 0x70, 0x04, 0xc9, 0x1c, 0x05, 0xfe,
+ 0xef, 0x12, 0xfe, 0xe1, 0x10, 0x78, 0x2b, 0x5f, 0x30, 0x06, 0x2d, 0xfe, 0x3c, 0x13, 0xfe, 0x7e,
+ 0x14, 0xfe, 0x42, 0x13, 0x48, 0xb4, 0x08, 0x44, 0x01, 0x0e, 0xad, 0xfe, 0x3e, 0x12, 0xed, 0xfe,
+ 0x45, 0x48, 0x01, 0x87, 0xfa, 0xad, 0xfe, 0xf3, 0x13, 0x40, 0x74, 0x06, 0x10, 0xa2, 0x08, 0x80,
+ 0x01, 0x0e, 0xef, 0x01, 0x6e, 0xfe, 0x16, 0x10, 0x06, 0x7e, 0x84, 0xfe, 0x3c, 0x14, 0xfe, 0x24,
+ 0x12, 0xf3, 0xfe, 0xd6, 0xf0, 0xfe, 0x02, 0x17, 0x16, 0x0a, 0x03, 0xfe, 0x9c, 0xe7, 0x0a, 0x0f,
+ 0xfe, 0x15, 0x00, 0x5a, 0x76, 0x26, 0x01, 0xd8, 0x16, 0x05, 0x03, 0x0b, 0x4b, 0x2c, 0x38, 0x11,
+ 0x2d, 0x01, 0x6e, 0x16, 0x05, 0x03, 0xfe, 0x38, 0x90, 0xfe, 0xba, 0x90, 0x79, 0xc5, 0x68, 0xc6,
+ 0xfe, 0x48, 0x55, 0x37, 0xfe, 0xc9, 0x55, 0x03, 0x1d, 0x99, 0x72, 0x12, 0x99, 0x03, 0x08, 0x9a,
+ 0x01, 0x0e, 0xed, 0x08, 0x3c, 0x01, 0x0e, 0xfe, 0x49, 0x44, 0x18, 0xfe, 0xca, 0x17, 0x72, 0x74,
+ 0x03, 0x08, 0x44, 0x01, 0x0e, 0x06, 0x10, 0x5c, 0x08, 0x52, 0x01, 0x9f, 0x08, 0x3c, 0x01, 0x0e,
+ 0x72, 0x74, 0x03, 0xfc, 0x1a, 0x64, 0xfe, 0xfe, 0x17, 0x04, 0xfe, 0x90, 0x00, 0xfe, 0x3a, 0x45,
+ 0xfe, 0x2c, 0x10, 0xfc, 0xc0, 0x64, 0xfe, 0x10, 0x18, 0x04, 0xfe, 0x92, 0x00, 0xfe, 0x02, 0xe6,
+ 0x1b, 0xdb, 0xfc, 0xfe, 0x0b, 0x00, 0x64, 0xfe, 0x22, 0x18, 0x04, 0xfe, 0x94, 0x00, 0xfe, 0x02,
+ 0xe6, 0x17, 0xfe, 0x08, 0x10, 0x04, 0xfe, 0x96, 0x00, 0xfe, 0x02, 0xe6, 0x2b, 0xfe, 0x4e, 0x45,
+ 0xfe, 0x0c, 0x12, 0xac, 0xff, 0x04, 0x68, 0x54, 0xdd, 0x1c, 0x69, 0x03, 0x06, 0x7a, 0xfe, 0x5a,
+ 0xf0, 0xfe, 0x4e, 0x18, 0x23, 0xfe, 0x09, 0x00, 0xfe, 0x34, 0x10, 0x06, 0x1b, 0xfe, 0x5a, 0xf0,
+ 0xfe, 0x5c, 0x18, 0x23, 0xc1, 0xfe, 0x26, 0x10, 0x06, 0x1a, 0x46, 0x23, 0x2b, 0xdb, 0x06, 0x0a,
+ 0x46, 0x23, 0x94, 0xd9, 0x06, 0x05, 0x46, 0x23, 0x4e, 0xa0, 0xaa, 0x03, 0x14, 0xfe, 0x09, 0x00,
+ 0x01, 0x36, 0xfe, 0x04, 0xfe, 0x7d, 0x04, 0x7f, 0xf6, 0x03, 0x24, 0xfe, 0xa4, 0x18, 0xfe, 0x14,
+ 0xf0, 0x07, 0x65, 0xfe, 0xa0, 0x18, 0x03, 0xff, 0x2d, 0x00, 0x00,
};
STATIC unsigned short _adv_asc3550_size =
- sizeof(_adv_asc3550_buf); /* 0x13E5 */
+ sizeof(_adv_asc3550_buf); /* 0x137B */
STATIC ADV_DCNT _adv_asc3550_chksum =
- 0x04FFFF0E; /* Expanded checksum. */
+ 0x04CDA9B9UL; /* Expanded little-endian checksum. */
STATIC unsigned char _adv_asc38C0800_buf[] = {
- 0x00, 0x00, 0x00, 0xf2, 0x00, 0xf0, 0x00, 0x16, 0x00, 0xfc, 0x48, 0xe4, 0x01, 0x00, 0x18, 0xe4,
- 0x00, 0xf6, 0x01, 0xf6, 0x18, 0x80, 0x02, 0x00, 0x40, 0x1a, 0x00, 0xfa, 0xff, 0xff, 0x03, 0xf6,
- 0xff, 0x00, 0x82, 0xe7, 0x01, 0xfa, 0x9e, 0xe7, 0x09, 0xe7, 0x1a, 0x0f, 0x00, 0xea, 0x01, 0xe6,
- 0x03, 0x00, 0x55, 0xf0, 0x18, 0xf4, 0x1e, 0xf0, 0x3e, 0x57, 0x04, 0x00, 0x3e, 0x01, 0x85, 0xf0,
- 0x00, 0xe6, 0x03, 0xfc, 0x08, 0x00, 0x2c, 0x1a, 0x32, 0xf0, 0x86, 0xf0, 0xbe, 0x0d, 0xd4, 0x01,
- 0xd5, 0xf0, 0x00, 0xec, 0x01, 0xfc, 0x38, 0x54, 0x98, 0x57, 0xbc, 0x00, 0x0c, 0x1c, 0xb1, 0xf0,
- 0x3c, 0x00, 0xb4, 0x00, 0xb8, 0x0d, 0x00, 0x57, 0x01, 0xf0, 0x02, 0x13, 0x02, 0xfc, 0x03, 0xe6,
- 0x10, 0x00, 0x18, 0x40, 0x3e, 0x1c, 0x44, 0x13, 0x6c, 0x01, 0x6e, 0x01, 0xbd, 0x00, 0xe0, 0x00,
- 0x02, 0x80, 0x30, 0xe4, 0x3e, 0x00, 0x74, 0x01, 0x76, 0x01, 0x7c, 0x16, 0x80, 0x00, 0xb9, 0x54,
- 0xbb, 0x00, 0xee, 0x13, 0x00, 0x4e, 0x01, 0x01, 0x01, 0xea, 0x02, 0x48, 0x02, 0xfa, 0x04, 0x12,
- 0x08, 0x12, 0x3c, 0x56, 0x4e, 0x01, 0x5d, 0xf0, 0x7a, 0x01, 0x7e, 0x10, 0xb6, 0x00, 0xc2, 0x10,
- 0xee, 0x08, 0x00, 0x80, 0x05, 0xfc, 0x10, 0x44, 0x24, 0x01, 0x28, 0x01, 0x32, 0x00, 0x3c, 0x01,
- 0x40, 0x00, 0x4b, 0xe4, 0x4b, 0xf4, 0x4c, 0x1c, 0x68, 0x01, 0x6a, 0x01, 0x70, 0x01, 0x72, 0x01,
- 0x78, 0x01, 0x7c, 0x01, 0xbb, 0x55, 0xc2, 0x0d, 0x00, 0x01, 0x02, 0xee, 0x03, 0x58, 0x03, 0xf7,
- 0x03, 0xfa, 0x04, 0x80, 0x08, 0x44, 0x09, 0xf0, 0x0f, 0x00, 0x1b, 0x80, 0x20, 0x01, 0x38, 0x1c,
- 0x4e, 0x1c, 0x5b, 0xf0, 0x62, 0x0a, 0xaa, 0x00, 0xbe, 0x00, 0xc0, 0x00, 0xc0, 0x15, 0xcc, 0x10,
- 0x00, 0x4c, 0x00, 0xdc, 0x02, 0x4a, 0x04, 0xfc, 0x05, 0x00, 0x05, 0xf0, 0x05, 0xf8, 0x06, 0x13,
- 0x06, 0xf7, 0x08, 0x13, 0x0a, 0x10, 0x0c, 0x00, 0x0e, 0x47, 0x0e, 0xf7, 0x10, 0x0f, 0x20, 0x00,
- 0x20, 0x16, 0x2a, 0x01, 0x32, 0x1c, 0x36, 0x00, 0x42, 0x54, 0x44, 0x55, 0x45, 0x5a, 0x52, 0x0c,
- 0x59, 0xf0, 0x5c, 0xf0, 0x69, 0x08, 0x6e, 0x0b, 0x83, 0x59, 0xb8, 0xf0, 0xbd, 0x56, 0xcc, 0x18,
- 0xce, 0x10, 0xd8, 0x18, 0xf0, 0x00, 0x01, 0x48, 0x04, 0x10, 0x04, 0xea, 0x04, 0xf6, 0x05, 0x80,
- 0x05, 0xe6, 0x06, 0x00, 0x06, 0x0f, 0x06, 0x12, 0x0b, 0xf0, 0x0c, 0x10, 0x0c, 0xf0, 0x10, 0x13,
- 0x12, 0x10, 0x19, 0x00, 0x19, 0xe4, 0x30, 0x1c, 0x33, 0x00, 0x34, 0x00, 0x38, 0x44, 0x40, 0x5c,
- 0x4a, 0xe4, 0x62, 0x1a, 0x68, 0x08, 0x68, 0x54, 0x6c, 0x15, 0x70, 0x15, 0x83, 0x55, 0x83, 0x5a,
- 0x91, 0x44, 0xa4, 0x00, 0xac, 0x13, 0xb0, 0x57, 0xb5, 0x00, 0xb8, 0x17, 0xba, 0x00, 0xce, 0x45,
- 0xd0, 0x00, 0xe1, 0x00, 0xe5, 0x55, 0xe7, 0x00, 0x00, 0x54, 0x01, 0x58, 0x02, 0x10, 0x02, 0xe6,
- 0x03, 0xa1, 0x04, 0x13, 0x06, 0x83, 0x06, 0xf0, 0x07, 0x00, 0x0a, 0x00, 0x0a, 0x12, 0x0a, 0xf0,
- 0x0c, 0x12, 0x0c, 0x13, 0x0c, 0x90, 0x0e, 0x13, 0x10, 0x04, 0x10, 0x10, 0x12, 0x1c, 0x19, 0x81,
- 0x1a, 0x10, 0x1c, 0x00, 0x1c, 0x12, 0x1d, 0xf7, 0x1e, 0x13, 0x20, 0x1c, 0x20, 0xe7, 0x22, 0x01,
- 0x26, 0x01, 0x2a, 0x12, 0x2c, 0x0f, 0x30, 0xe7, 0x32, 0x15, 0x34, 0x1c, 0x36, 0x1c, 0x38, 0x12,
- 0x3a, 0x55, 0x3f, 0x00, 0x41, 0x58, 0x43, 0x48, 0x46, 0x1c, 0x4e, 0xe4, 0x76, 0x02, 0x77, 0x57,
- 0x78, 0x03, 0x89, 0x48, 0x8e, 0x90, 0x98, 0x80, 0x99, 0x00, 0xfe, 0x9c, 0xf0, 0x27, 0x02, 0xfe,
- 0xe0, 0x0d, 0xff, 0x10, 0x00, 0x00, 0xfe, 0xc6, 0x01, 0xfe, 0x56, 0x1a, 0x00, 0xfe, 0xc4, 0x01,
- 0xfe, 0x84, 0x01, 0xff, 0x03, 0x00, 0x00, 0xfe, 0x6a, 0x13, 0xfe, 0x05, 0x05, 0xff, 0x40, 0x00,
- 0x00, 0x0e, 0xff, 0x09, 0x00, 0x00, 0xff, 0x08, 0x01, 0x01, 0xff, 0x10, 0xff, 0xff, 0xff, 0x1f,
- 0x00, 0x00, 0xff, 0x10, 0xff, 0xff, 0xff, 0x11, 0x00, 0x00, 0xfe, 0x78, 0x56, 0xfe, 0x34, 0x12,
- 0xff, 0x21, 0x00, 0x00, 0xfe, 0x04, 0xf7, 0xfe, 0xc4, 0x01, 0x2e, 0x88, 0x0b, 0x01, 0xfe, 0xca,
- 0x0f, 0xfe, 0x04, 0xf7, 0xfe, 0xc4, 0x01, 0x88, 0x0b, 0x1c, 0x2e, 0xfe, 0x3d, 0xf0, 0xfe, 0xfc,
- 0x01, 0xfe, 0x20, 0xf0, 0xdc, 0x04, 0x5f, 0x4f, 0x02, 0xfe, 0xfc, 0x0d, 0x01, 0xfe, 0x5c, 0x0e,
- 0xfe, 0xe9, 0x12, 0x02, 0xfe, 0x08, 0x03, 0xfe, 0x28, 0x1c, 0x04, 0xfe, 0xa6, 0x00, 0xfe, 0xdd,
- 0x12, 0x47, 0x12, 0xfe, 0xa6, 0x00, 0xcd, 0xfe, 0x48, 0xf0, 0xfe, 0x80, 0x02, 0xfe, 0x49, 0xf0,
- 0xfe, 0x9a, 0x02, 0xfe, 0x4a, 0xf0, 0xfe, 0xb8, 0x02, 0xfe, 0x46, 0xf0, 0xfe, 0x4a, 0x02, 0xfe,
- 0x47, 0xf0, 0xfe, 0x50, 0x02, 0xfe, 0x43, 0xf0, 0xfe, 0x3e, 0x02, 0xfe, 0x44, 0xf0, 0xfe, 0x42,
- 0x02, 0xfe, 0x45, 0xf0, 0xfe, 0x46, 0x02, 0x09, 0x0b, 0xa4, 0x09, 0x06, 0x12, 0xc1, 0x02, 0x27,
- 0xfe, 0x00, 0x1c, 0xfe, 0xf1, 0x10, 0xfe, 0x02, 0x1c, 0xfe, 0xed, 0x10, 0xfe, 0x1e, 0x1c, 0xfe,
- 0xe9, 0x10, 0x01, 0xfe, 0x2c, 0x18, 0xfe, 0xe7, 0x10, 0xfe, 0x06, 0xfc, 0xfe, 0xa8, 0x00, 0x0f,
- 0x7c, 0x01, 0xaa, 0x02, 0x27, 0x17, 0x5e, 0x4c, 0xc4, 0x01, 0xfe, 0x40, 0x10, 0x0f, 0x7c, 0x01,
- 0x8e, 0xfe, 0xbd, 0x10, 0x0f, 0x7c, 0x01, 0x8e, 0xfe, 0xad, 0x10, 0xfe, 0x16, 0x1c, 0xfe, 0x58,
- 0x1c, 0x09, 0x06, 0x12, 0xc1, 0x2e, 0x1b, 0x27, 0xfe, 0x3d, 0xf0, 0xfe, 0xfc, 0x01, 0x28, 0xfe,
- 0x8e, 0x02, 0xfe, 0x5a, 0x1c, 0xde, 0xfe, 0x14, 0x1c, 0x17, 0xfe, 0x30, 0x00, 0x4c, 0xc4, 0x01,
- 0xfe, 0x30, 0x10, 0x09, 0x06, 0x12, 0xc1, 0x02, 0xfe, 0xc6, 0x01, 0x29, 0x2d, 0x05, 0x10, 0x35,
- 0xfe, 0x69, 0x10, 0x09, 0x06, 0x12, 0xc1, 0xfe, 0x04, 0xec, 0x2d, 0x08, 0x2d, 0x09, 0x3e, 0x1c,
- 0x01, 0x45, 0x82, 0xfe, 0x05, 0xf6, 0xfe, 0xa8, 0x00, 0x01, 0xfe, 0x56, 0x17, 0x0a, 0x41, 0x8f,
- 0x39, 0x11, 0x48, 0x1c, 0xd2, 0x08, 0x1e, 0x09, 0x52, 0x01, 0x90, 0x02, 0x27, 0x0f, 0x3f, 0x01,
- 0x15, 0x05, 0x10, 0xdb, 0x08, 0x1e, 0x09, 0x52, 0x01, 0x7e, 0xfe, 0x28, 0x10, 0x0f, 0xc8, 0x01,
- 0x15, 0xf2, 0x0f, 0x7d, 0x01, 0x15, 0xfe, 0x49, 0x54, 0x79, 0xfe, 0x16, 0x03, 0x08, 0x1e, 0x09,
- 0x52, 0x01, 0x90, 0x02, 0x27, 0x2e, 0x82, 0xfe, 0x02, 0xe8, 0x31, 0xfe, 0xbf, 0x57, 0xfe, 0x9e,
- 0x43, 0xf7, 0xfe, 0x07, 0x4b, 0xfe, 0x20, 0xf0, 0xdc, 0xfe, 0x40, 0x1c, 0x1b, 0xf8, 0xfe, 0x26,
- 0xf0, 0xfe, 0x74, 0x03, 0xfe, 0xa0, 0xf0, 0xfe, 0x62, 0x03, 0xfe, 0x11, 0xf0, 0xdc, 0xfe, 0x0e,
- 0x10, 0xfe, 0x9f, 0xf0, 0xfe, 0x82, 0x03, 0xf4, 0x13, 0xfe, 0x11, 0x00, 0x02, 0x6b, 0x2e, 0xfe,
- 0x48, 0x1c, 0xf4, 0x1b, 0xf8, 0x34, 0xf8, 0xfe, 0x82, 0xf0, 0xfe, 0x88, 0x03, 0x2b, 0x29, 0xc6,
- 0x72, 0x16, 0xc6, 0x0f, 0x7d, 0x01, 0x15, 0x72, 0x80, 0x08, 0x1e, 0x09, 0x52, 0x01, 0x45, 0x11,
- 0x3f, 0x08, 0x3f, 0x09, 0xa2, 0x01, 0x90, 0xfe, 0x9c, 0x32, 0x11, 0xfe, 0xe4, 0x00, 0x2f, 0xfe,
- 0xce, 0x03, 0x1b, 0x32, 0x1f, 0xfe, 0xde, 0x03, 0x01, 0x55, 0xd3, 0xfe, 0xee, 0x03, 0x73, 0x97,
- 0xd7, 0xfe, 0xae, 0x06, 0x02, 0x26, 0x04, 0x7c, 0x2c, 0x19, 0xfe, 0x20, 0x05, 0x17, 0x8b, 0x01,
- 0x3b, 0x01, 0x9f, 0x01, 0xa1, 0x34, 0xfe, 0x60, 0x02, 0x02, 0xf6, 0xf4, 0x2e, 0x88, 0x18, 0xfe,
- 0x67, 0x1b, 0xfe, 0xbf, 0x57, 0xf7, 0xfe, 0x48, 0x1c, 0x92, 0x01, 0xfe, 0x9c, 0x13, 0xb3, 0xfe,
- 0x96, 0xf0, 0xfe, 0x28, 0x04, 0x2f, 0xfe, 0x2c, 0x04, 0x34, 0x27, 0x0f, 0x3f, 0x01, 0x15, 0x05,
- 0x10, 0x19, 0xfe, 0x0c, 0x05, 0x4d, 0x7a, 0xa5, 0x31, 0x86, 0x76, 0x1b, 0x32, 0x1f, 0x26, 0x04,
- 0x7c, 0x2c, 0xfe, 0x10, 0x12, 0x17, 0x8b, 0x01, 0x3b, 0x34, 0xfe, 0x60, 0x02, 0x02, 0xf6, 0x21,
- 0xfe, 0xa0, 0x00, 0xfe, 0x9b, 0x57, 0xfe, 0x5e, 0x12, 0x0a, 0x07, 0x06, 0xfe, 0x56, 0x12, 0x24,
- 0x23, 0x9a, 0x01, 0x0c, 0x86, 0x76, 0x1f, 0xfe, 0xdc, 0x04, 0x24, 0x23, 0x9a, 0x01, 0x0c, 0x1f,
- 0x26, 0x24, 0x23, 0xba, 0xfe, 0x4c, 0x44, 0xfe, 0x32, 0x12, 0x51, 0xfe, 0x44, 0x48, 0x08, 0xfe,
- 0x93, 0x00, 0xfe, 0x4c, 0x54, 0x79, 0xfe, 0x0c, 0x05, 0x82, 0xa5, 0x31, 0xfe, 0x06, 0x80, 0xfe,
- 0x48, 0x47, 0xfe, 0x48, 0x13, 0x40, 0x05, 0xfe, 0xcc, 0x00, 0xfe, 0x40, 0x13, 0x0a, 0x07, 0x06,
- 0xef, 0xfe, 0x06, 0x10, 0x24, 0x23, 0xba, 0x0a, 0x07, 0x38, 0xe2, 0x17, 0xa9, 0x0a, 0x07, 0x06,
- 0x4f, 0x17, 0xfe, 0x0d, 0x00, 0x01, 0x3b, 0x34, 0xfe, 0xa0, 0x0d, 0x02, 0x26, 0x3a, 0x11, 0xfe,
- 0xe6, 0x00, 0xfe, 0x1c, 0x90, 0xb7, 0x03, 0x17, 0xa9, 0x01, 0x3b, 0x34, 0x27, 0x1b, 0x27, 0x02,
- 0xfe, 0x14, 0x05, 0xfe, 0x42, 0x5b, 0x88, 0x18, 0xfe, 0x46, 0x59, 0xfe, 0xbf, 0x57, 0xf7, 0x17,
- 0x46, 0xfe, 0x07, 0x80, 0xfe, 0x31, 0x44, 0x0a, 0x07, 0x0b, 0xfe, 0x78, 0x13, 0xfe, 0x20, 0x80,
- 0x05, 0x18, 0xfe, 0x70, 0x12, 0x75, 0x07, 0x06, 0xfe, 0x60, 0x13, 0x04, 0xfe, 0xa2, 0x00, 0x2c,
- 0x19, 0xfe, 0xac, 0x05, 0xfe, 0x31, 0xe4, 0x60, 0x75, 0x07, 0x0b, 0xfe, 0x4a, 0x13, 0x04, 0xfe,
- 0xa0, 0x00, 0x2c, 0xfe, 0x42, 0x12, 0x63, 0x2f, 0xfe, 0x6c, 0x05, 0x1b, 0x32, 0xf9, 0x01, 0x0c,
- 0x25, 0xfe, 0xc4, 0x05, 0x11, 0xfe, 0xe3, 0x00, 0x2b, 0x75, 0xfe, 0x4a, 0xf0, 0xfe, 0x96, 0x05,
- 0xfe, 0x49, 0xf0, 0xfe, 0x90, 0x05, 0xad, 0x20, 0xfe, 0x21, 0x00, 0x8a, 0x20, 0xfe, 0x22, 0x00,
- 0xa4, 0x20, 0x8f, 0xfe, 0x09, 0x48, 0x01, 0x0c, 0x25, 0xfe, 0xc4, 0x05, 0xfe, 0xe2, 0x08, 0x75,
- 0x07, 0xe1, 0x4f, 0x01, 0xc2, 0x20, 0x06, 0x16, 0xe8, 0x4c, 0xfe, 0x27, 0x01, 0x0a, 0x07, 0x38,
- 0xe9, 0x47, 0x01, 0xbd, 0x17, 0xa9, 0x0a, 0x07, 0x06, 0x4f, 0x17, 0xfe, 0x0d, 0x00, 0x01, 0x3b,
- 0x01, 0x9f, 0x01, 0xa1, 0x34, 0xfe, 0xa0, 0x0d, 0x02, 0x26, 0x04, 0xfe, 0x9c, 0x00, 0x2c, 0xfe,
- 0x3e, 0x12, 0x04, 0x5c, 0x2c, 0xfe, 0x36, 0x13, 0x47, 0x01, 0xbd, 0x25, 0xfe, 0x3c, 0x06, 0x0f,
- 0x06, 0x75, 0x07, 0x22, 0xfe, 0x02, 0x12, 0x6a, 0x01, 0xfe, 0x06, 0x15, 0x1f, 0xfe, 0x32, 0x06,
- 0x11, 0xc9, 0x01, 0x55, 0x11, 0xfe, 0xe5, 0x00, 0x04, 0x5c, 0xc3, 0x0d, 0x5c, 0x04, 0xfe, 0x9e,
- 0x00, 0x2c, 0xfe, 0x62, 0x12, 0x04, 0x56, 0x2c, 0xfe, 0x5a, 0x13, 0x01, 0xfe, 0x7e, 0x19, 0x01,
- 0xfe, 0xe8, 0x19, 0xf3, 0xa8, 0xf1, 0x08, 0x6c, 0xff, 0x02, 0x00, 0x57, 0x6e, 0x81, 0x1a, 0x59,
- 0xd1, 0xa8, 0x74, 0x47, 0x01, 0xbd, 0x25, 0xfe, 0xa6, 0x06, 0x75, 0x07, 0x1d, 0xab, 0x9e, 0x0f,
- 0x5e, 0x01, 0xfe, 0x34, 0x15, 0x1f, 0xfe, 0x9c, 0x06, 0x11, 0xc9, 0x01, 0x55, 0x11, 0xfe, 0xe5,
- 0x00, 0x04, 0x56, 0xc3, 0x0d, 0x56, 0x09, 0x06, 0x01, 0xbd, 0xfe, 0x9c, 0x32, 0x78, 0x92, 0x01,
- 0xfe, 0x9c, 0x13, 0xb3, 0x11, 0xfe, 0xe2, 0x00, 0x2f, 0xfe, 0xbe, 0x06, 0x1b, 0x32, 0xd7, 0xfe,
- 0xda, 0x06, 0x85, 0xfe, 0x78, 0x07, 0xd3, 0xfe, 0x80, 0x07, 0x73, 0x97, 0x02, 0x26, 0x0a, 0x07,
- 0x0b, 0xfe, 0x2e, 0x12, 0x14, 0x18, 0x01, 0x0c, 0x14, 0x00, 0x01, 0x0c, 0x14, 0x00, 0x01, 0x0c,
- 0x14, 0x00, 0x01, 0x0c, 0xfe, 0x99, 0xa4, 0x01, 0x0c, 0x14, 0x00, 0x02, 0xfe, 0x50, 0x08, 0x71,
- 0x07, 0x1d, 0xef, 0x0a, 0x07, 0x1d, 0xfe, 0x30, 0x13, 0x14, 0xfe, 0x1b, 0x00, 0x01, 0x0c, 0x14,
- 0x00, 0x01, 0x0c, 0x14, 0x00, 0x01, 0x0c, 0x14, 0x00, 0x01, 0x0c, 0x14, 0x06, 0x01, 0x0c, 0x14,
- 0x00, 0x02, 0xfe, 0x0a, 0x0c, 0x6a, 0xfe, 0x9a, 0x81, 0x6f, 0x8f, 0xfe, 0x09, 0x6f, 0xfe, 0x93,
- 0x45, 0x19, 0xfe, 0x88, 0x07, 0x2f, 0xfe, 0x60, 0x07, 0x1b, 0x32, 0xd7, 0xfe, 0x58, 0x07, 0x73,
- 0x97, 0x85, 0xfe, 0x78, 0x07, 0x02, 0x26, 0x01, 0x55, 0x02, 0xfe, 0xbe, 0x06, 0x14, 0x22, 0x02,
- 0xfe, 0xbe, 0x06, 0xfe, 0x9c, 0xf7, 0xfe, 0xf0, 0x07, 0xfe, 0x2c, 0x90, 0xfe, 0xae, 0x90, 0x53,
- 0xfe, 0xd6, 0x07, 0x0d, 0x66, 0x12, 0x67, 0x0a, 0x41, 0x60, 0x39, 0x01, 0xfe, 0x14, 0x19, 0x05,
- 0x10, 0x87, 0xfe, 0x83, 0xe7, 0xfe, 0x95, 0x00, 0x8a, 0xfe, 0x03, 0x40, 0x0a, 0x41, 0x46, 0x39,
- 0x01, 0xc5, 0xb6, 0xfe, 0x1f, 0x40, 0x16, 0x68, 0x01, 0xfe, 0xbe, 0x13, 0xfe, 0x08, 0x50, 0xfe,
- 0x8a, 0x50, 0xfe, 0x34, 0x51, 0xfe, 0xb6, 0x51, 0xfe, 0x08, 0x90, 0xfe, 0x8a, 0x90, 0x0d, 0x64,
- 0x12, 0x65, 0xda, 0xfa, 0x0d, 0x3c, 0x12, 0x3d, 0xfe, 0x60, 0x10, 0x0a, 0x07, 0x60, 0xe9, 0xfe,
- 0x2c, 0x90, 0xfe, 0xae, 0x90, 0x0d, 0x66, 0x12, 0x67, 0x0a, 0x07, 0x46, 0xd1, 0x01, 0xc5, 0xfe,
- 0x1f, 0x80, 0x16, 0x68, 0xfe, 0x34, 0x90, 0xfe, 0xb6, 0x90, 0x0d, 0x43, 0x12, 0x44, 0xfe, 0x08,
- 0x90, 0xfe, 0x8a, 0x90, 0x0d, 0x64, 0x12, 0x65, 0xa7, 0x07, 0x46, 0xdb, 0xda, 0xfa, 0x0d, 0x3c,
- 0x12, 0x3d, 0xad, 0xfe, 0x28, 0x90, 0xfe, 0xaa, 0x90, 0x0d, 0x3c, 0x12, 0x3d, 0x0d, 0x30, 0x12,
- 0x42, 0x2b, 0x0d, 0x54, 0x0d, 0x69, 0x0a, 0x41, 0x22, 0x39, 0x2e, 0x08, 0x84, 0x2f, 0xfe, 0x70,
- 0x08, 0xfe, 0x9e, 0xf0, 0xfe, 0x84, 0x08, 0xa3, 0x19, 0x32, 0x2e, 0x5b, 0xfe, 0xed, 0x10, 0xac,
- 0xfe, 0xa8, 0x08, 0xae, 0xfe, 0xc4, 0x08, 0x85, 0xfe, 0x9c, 0x08, 0xd3, 0xfe, 0xa2, 0x08, 0x73,
- 0x97, 0x02, 0x26, 0x01, 0x55, 0xfe, 0xc9, 0x10, 0x14, 0x22, 0xfe, 0xc9, 0x10, 0x71, 0x07, 0x06,
- 0xfe, 0x10, 0x12, 0x71, 0x07, 0x0b, 0x50, 0x0a, 0x07, 0x0b, 0xfe, 0xa6, 0x12, 0xfe, 0x2e, 0x1c,
- 0xb0, 0x71, 0x07, 0x06, 0x50, 0x71, 0x07, 0x0b, 0xfe, 0x92, 0x12, 0xfe, 0x2c, 0x1c, 0xa7, 0x07,
- 0x46, 0xaf, 0xa7, 0x41, 0x46, 0xfe, 0x05, 0x40, 0xda, 0xfa, 0xfe, 0x28, 0x50, 0xfe, 0xaa, 0x50,
- 0xfe, 0xaa, 0xf0, 0xfe, 0xf6, 0x09, 0xfe, 0xac, 0xf0, 0xfe, 0x24, 0x09, 0x02, 0xfe, 0x02, 0x0a,
- 0xfe, 0xb7, 0xf0, 0xfe, 0x20, 0x09, 0xfe, 0x02, 0xf6, 0x1d, 0x6a, 0xfe, 0x70, 0x18, 0xfe, 0xf1,
- 0x18, 0xfe, 0x40, 0x55, 0xfe, 0xe1, 0x55, 0xfe, 0x10, 0x58, 0xfe, 0x91, 0x58, 0xfe, 0x14, 0x59,
- 0xfe, 0x95, 0x59, 0x1b, 0x9b, 0xfe, 0x8c, 0xf0, 0xfe, 0x20, 0x09, 0xfe, 0xac, 0xf0, 0xfe, 0x14,
- 0x09, 0xed, 0xfe, 0xcb, 0x10, 0xfe, 0xad, 0xf0, 0xfe, 0x30, 0x09, 0x02, 0xfe, 0x3c, 0x0b, 0xee,
- 0xfe, 0xbf, 0x10, 0xfe, 0x2b, 0xf0, 0x9b, 0xfe, 0x6b, 0x18, 0x1a, 0xfe, 0x00, 0xfe, 0xe2, 0xcd,
- 0xfe, 0xd2, 0xf0, 0x9b, 0xfe, 0x76, 0x18, 0x1a, 0x18, 0x19, 0x9b, 0x04, 0xe7, 0x1a, 0x06, 0x19,
- 0x9b, 0xac, 0x58, 0xae, 0x58, 0xed, 0xee, 0xfe, 0x89, 0x10, 0x92, 0x63, 0x3a, 0x17, 0xa9, 0x01,
- 0x3b, 0x13, 0xfe, 0x35, 0x00, 0x34, 0x6b, 0x13, 0x93, 0x02, 0x6b, 0xfb, 0xb2, 0x0b, 0xfe, 0x1a,
- 0x12, 0x51, 0xfe, 0x19, 0x82, 0xfe, 0x6c, 0x18, 0xfe, 0x44, 0x54, 0xf0, 0xdf, 0xfe, 0x74, 0x18,
- 0x94, 0x95, 0x19, 0xfe, 0xf2, 0x08, 0x02, 0x58, 0x0a, 0x07, 0x60, 0xaf, 0x04, 0x30, 0x2a, 0x42,
- 0x0d, 0x43, 0x12, 0x44, 0x83, 0x30, 0x5a, 0x42, 0xfe, 0x6c, 0x18, 0xfe, 0xed, 0x18, 0xfe, 0x44,
- 0x54, 0xfe, 0xe5, 0x54, 0x36, 0x43, 0x21, 0x44, 0x04, 0x54, 0x2a, 0x69, 0x94, 0xfe, 0xe3, 0x54,
- 0xfe, 0x74, 0x18, 0xfe, 0xf5, 0x18, 0x94, 0xfe, 0xe3, 0x54, 0x95, 0xca, 0x53, 0xfe, 0xf2, 0x08,
- 0x02, 0x58, 0xfe, 0x37, 0xf0, 0xfe, 0xfe, 0x09, 0xfe, 0x8b, 0xf0, 0xfe, 0x84, 0x09, 0x02, 0x58,
- 0xfb, 0xb2, 0x0b, 0x28, 0xfe, 0x1e, 0x0b, 0x36, 0x54, 0x21, 0x69, 0x53, 0x7a, 0x08, 0xfe, 0xc0,
- 0x07, 0x47, 0x62, 0x00, 0xd9, 0xfe, 0x01, 0x59, 0xfe, 0x52, 0xf0, 0xfe, 0x30, 0x0a, 0x94, 0x99,
- 0xfe, 0x48, 0x0a, 0x36, 0x54, 0x94, 0xfe, 0xe3, 0x54, 0x4e, 0x54, 0x70, 0x69, 0xfe, 0x14, 0x58,
- 0xfe, 0x95, 0x58, 0x02, 0x58, 0x36, 0x54, 0x21, 0x69, 0xfe, 0x14, 0x59, 0xfe, 0x95, 0x59, 0xf0,
- 0x4e, 0x54, 0x4e, 0x69, 0x02, 0x58, 0x0a, 0x07, 0x60, 0xfe, 0x82, 0x12, 0x0a, 0x07, 0x22, 0xfe,
- 0x66, 0x13, 0x29, 0x68, 0x72, 0xd0, 0xfe, 0x83, 0x80, 0xfe, 0xc8, 0x44, 0xfe, 0x2e, 0x13, 0xfe,
- 0x04, 0x91, 0xfe, 0x86, 0x91, 0x6d, 0x31, 0xfe, 0x40, 0x59, 0xfe, 0xc1, 0x59, 0x53, 0xfe, 0xfa,
- 0x08, 0x04, 0x66, 0x2a, 0x67, 0x0d, 0xb5, 0x12, 0x93, 0x4e, 0x66, 0x70, 0x67, 0x01, 0xc5, 0xb6,
- 0x6d, 0x31, 0x16, 0x68, 0x83, 0x30, 0x5a, 0x42, 0x36, 0x43, 0x21, 0x44, 0x95, 0xca, 0xfe, 0x04,
- 0xfa, 0x30, 0xfe, 0x05, 0xfa, 0x42, 0x01, 0xfe, 0xbe, 0x13, 0xfe, 0x36, 0x10, 0x2b, 0x0d, 0xb5,
- 0x0d, 0x93, 0x36, 0x43, 0x21, 0x44, 0xb0, 0x0a, 0x07, 0x22, 0x19, 0xfe, 0xfa, 0x08, 0x36, 0x3c,
- 0x21, 0x3d, 0x0a, 0x07, 0xfe, 0xf7, 0x00, 0x39, 0x04, 0x64, 0x2a, 0x65, 0xfe, 0x10, 0x58, 0xfe,
- 0x91, 0x58, 0x4e, 0x54, 0x70, 0x69, 0x02, 0xfe, 0x18, 0x0a, 0x0a, 0x07, 0x22, 0x19, 0xfe, 0xfa,
- 0x08, 0x0a, 0x07, 0xfe, 0xf7, 0x00, 0x39, 0xf0, 0xdf, 0x6a, 0xfe, 0x10, 0x90, 0xfe, 0x92, 0x90,
- 0xfe, 0xd3, 0x10, 0x40, 0x05, 0xcb, 0x19, 0xfe, 0x2c, 0x09, 0x11, 0xcb, 0xfb, 0xb2, 0x0b, 0xfe,
- 0x14, 0x13, 0x04, 0x3c, 0x2a, 0x3d, 0x53, 0xfe, 0x2c, 0x09, 0xfe, 0x0c, 0x58, 0xfe, 0x8d, 0x58,
- 0x02, 0x58, 0x2b, 0x47, 0xfe, 0x19, 0x80, 0xfe, 0xf1, 0x10, 0x0a, 0x07, 0x0b, 0xab, 0xfe, 0x6c,
- 0x19, 0xfe, 0x19, 0x41, 0xfe, 0x8e, 0x10, 0xfe, 0x6c, 0x19, 0x4e, 0x3c, 0xfe, 0xed, 0x19, 0x70,
- 0x3d, 0xfe, 0x0c, 0x51, 0xfe, 0x8e, 0x51, 0xfe, 0x6b, 0x18, 0x1a, 0xfe, 0x00, 0xff, 0x35, 0xfe,
- 0x74, 0x10, 0xcd, 0xfe, 0xd2, 0xf0, 0xfe, 0xb6, 0x0b, 0xfe, 0x76, 0x18, 0x1a, 0x18, 0xd6, 0x04,
- 0xe7, 0x1a, 0x06, 0x89, 0x13, 0xfe, 0x16, 0x00, 0x02, 0x6b, 0xfe, 0xd1, 0xf0, 0xfe, 0xc8, 0x0b,
- 0x17, 0x84, 0x01, 0x3b, 0x13, 0xfe, 0x17, 0x00, 0xfe, 0x42, 0x10, 0xfe, 0xce, 0xf0, 0xfe, 0xce,
- 0x0b, 0xfe, 0x3c, 0x10, 0xfe, 0xcd, 0xf0, 0xfe, 0xda, 0x0b, 0x13, 0xfe, 0x22, 0x00, 0x02, 0x6b,
- 0xfe, 0xcb, 0xf0, 0xfe, 0xe6, 0x0b, 0x13, 0xfe, 0x24, 0x00, 0x02, 0x6b, 0xfe, 0xd0, 0xf0, 0xfe,
- 0xf0, 0x0b, 0x13, 0xb1, 0xe0, 0xfe, 0xcf, 0xf0, 0xfe, 0xfa, 0x0b, 0x13, 0x8f, 0xdd, 0xfe, 0xcc,
- 0xf0, 0xfe, 0x0a, 0x0c, 0xfe, 0x84, 0x80, 0xb2, 0x22, 0x4f, 0x13, 0xfe, 0x12, 0x00, 0x2e, 0x08,
- 0x84, 0x2f, 0xfe, 0x10, 0x0c, 0xfe, 0x9e, 0xf0, 0xfe, 0x24, 0x0c, 0xa3, 0x19, 0x32, 0x2e, 0x5b,
- 0xfe, 0xed, 0x10, 0xac, 0x26, 0xae, 0x26, 0x2e, 0xfe, 0x9c, 0x32, 0x2f, 0xfe, 0x30, 0x0c, 0x1b,
- 0x32, 0x85, 0xfe, 0x4c, 0x0c, 0x73, 0x97, 0xac, 0xfe, 0xf0, 0x07, 0xae, 0xfe, 0xf0, 0x07, 0x02,
- 0x26, 0x01, 0x55, 0xfe, 0xdb, 0x10, 0x11, 0xfe, 0xe8, 0x00, 0xed, 0xee, 0x92, 0x86, 0x76, 0xfe,
- 0x89, 0xf0, 0x26, 0x24, 0x23, 0xfe, 0xe9, 0x09, 0x01, 0x0c, 0x86, 0x76, 0x1f, 0x26, 0x24, 0x23,
- 0x9a, 0x34, 0xfe, 0x88, 0x0c, 0x1b, 0x32, 0x02, 0xfe, 0x7c, 0x0c, 0xa3, 0x50, 0x13, 0xfe, 0x42,
- 0x00, 0x02, 0x6b, 0xa6, 0x06, 0xfe, 0x81, 0x49, 0xfe, 0xcc, 0x12, 0x0a, 0x07, 0x0b, 0xfe, 0x5a,
- 0x13, 0x13, 0x00, 0x61, 0x0b, 0xfe, 0x6a, 0x12, 0x61, 0xfe, 0x28, 0x00, 0x28, 0xfe, 0xce, 0x0d,
- 0x0f, 0x7d, 0x01, 0x15, 0x05, 0x00, 0x89, 0x37, 0xfe, 0x28, 0x00, 0x02, 0xfe, 0xce, 0x0d, 0x01,
- 0x9f, 0x01, 0xa1, 0x0f, 0xc8, 0x01, 0xfe, 0x24, 0x0f, 0xb9, 0x08, 0x3f, 0x09, 0xa2, 0x01, 0x45,
- 0x11, 0x48, 0x08, 0x1e, 0x09, 0x52, 0x01, 0x7e, 0x02, 0x27, 0x13, 0xfe, 0x44, 0x00, 0x61, 0x0b,
- 0xab, 0x37, 0x0b, 0xfe, 0xc0, 0x10, 0x01, 0xc2, 0x37, 0x0b, 0xfe, 0xb6, 0x10, 0x01, 0xc2, 0xfe,
- 0x19, 0x82, 0xfe, 0x34, 0x46, 0xfe, 0x0a, 0x13, 0x37, 0x0b, 0x13, 0xfe, 0x43, 0x00, 0xfe, 0xa2,
- 0x10, 0x0a, 0x41, 0x0b, 0x39, 0x01, 0x9f, 0x01, 0xa1, 0xb9, 0x08, 0x3f, 0x09, 0xa2, 0x01, 0x45,
- 0x11, 0x48, 0x08, 0x1e, 0x09, 0x52, 0x01, 0x7e, 0x88, 0x0b, 0xb9, 0x1c, 0xd2, 0x02, 0xfe, 0x4c,
- 0x03, 0x0a, 0x07, 0x0b, 0xd6, 0x37, 0x0b, 0x13, 0x00, 0xfe, 0x54, 0x10, 0x71, 0x07, 0x1d, 0xfe,
- 0x50, 0x12, 0x0a, 0x07, 0x1d, 0xfe, 0x48, 0x13, 0xfe, 0x1c, 0x1c, 0xfe, 0x9d, 0xf0, 0xfe, 0x8c,
- 0x0d, 0xfe, 0x1c, 0x1c, 0xfe, 0x9d, 0xf0, 0xfe, 0x92, 0x0d, 0x0a, 0x41, 0x1d, 0x39, 0xfe, 0x95,
- 0x10, 0x13, 0xfe, 0x15, 0x00, 0xfe, 0x04, 0xe6, 0x0b, 0x6a, 0xfe, 0x26, 0x10, 0x13, 0xfe, 0x13,
- 0x00, 0xdd, 0x13, 0xfe, 0x47, 0x00, 0x8a, 0x13, 0xfe, 0x41, 0x00, 0xa4, 0x13, 0xfe, 0x24, 0x00,
- 0x04, 0x7c, 0x2c, 0x28, 0xf6, 0x6a, 0xfe, 0x04, 0xe6, 0x1d, 0xfe, 0x9d, 0x41, 0xfe, 0x1c, 0x42,
- 0xb9, 0x01, 0xea, 0x02, 0x27, 0xde, 0x17, 0x0b, 0x4c, 0xfe, 0x9b, 0x00, 0xe5, 0x17, 0xfe, 0x31,
- 0x00, 0x4c, 0xc4, 0x01, 0xfe, 0x30, 0x10, 0x02, 0xfe, 0xc6, 0x01, 0x1c, 0xfe, 0x06, 0xec, 0xfe,
- 0xb9, 0x00, 0x8c, 0x37, 0x38, 0xc7, 0x35, 0x1c, 0xfe, 0x06, 0xea, 0xfe, 0xb9, 0x00, 0xfe, 0x47,
- 0x4b, 0x9e, 0xfe, 0x75, 0x57, 0x04, 0x5f, 0xfe, 0x98, 0x56, 0xfe, 0x28, 0x12, 0x0f, 0x7d, 0xfe,
- 0xf4, 0x14, 0x47, 0xf2, 0x0f, 0xc8, 0xfe, 0xea, 0x14, 0xfe, 0x49, 0x54, 0x98, 0xfe, 0x42, 0x0e,
- 0x0f, 0x1e, 0xfe, 0xde, 0x14, 0xfe, 0x44, 0x48, 0x02, 0xfe, 0x4c, 0x03, 0x0f, 0x5f, 0xfe, 0xc8,
- 0x14, 0x8c, 0x37, 0x38, 0xc7, 0x35, 0x1c, 0xfe, 0xce, 0x47, 0xfe, 0xbd, 0x13, 0x02, 0x27, 0x29,
- 0x2d, 0x05, 0x10, 0xfe, 0x78, 0x12, 0x2b, 0x16, 0x5e, 0x16, 0xb4, 0x29, 0x48, 0x47, 0x4c, 0x48,
- 0xa3, 0xd9, 0xfe, 0xbc, 0xf0, 0xfe, 0xde, 0x0e, 0x08, 0x06, 0x16, 0x5e, 0x01, 0xfe, 0xe6, 0x16,
- 0x04, 0xfe, 0x38, 0x01, 0x2a, 0xfe, 0x3a, 0x01, 0x53, 0xfe, 0xe2, 0x0e, 0x04, 0xfe, 0x38, 0x01,
- 0x1a, 0xfe, 0xf0, 0xff, 0x0d, 0xfe, 0x60, 0x01, 0x04, 0xfe, 0x3a, 0x01, 0x0d, 0xfe, 0x62, 0x01,
- 0x20, 0x06, 0x16, 0x48, 0xfe, 0x04, 0xec, 0x2d, 0x08, 0x2d, 0x09, 0x3e, 0x1c, 0x01, 0x45, 0x82,
- 0xfe, 0x05, 0xf6, 0xfe, 0x34, 0x01, 0x01, 0xfe, 0x56, 0x17, 0x11, 0x48, 0xd2, 0x08, 0x06, 0x03,
- 0x2b, 0x03, 0x29, 0x5e, 0xfe, 0xf7, 0x12, 0x29, 0xb4, 0x72, 0x16, 0xb4, 0x05, 0x84, 0xfe, 0x93,
- 0x13, 0xfe, 0x24, 0x1c, 0x17, 0x18, 0x4c, 0xfe, 0x9b, 0x00, 0xe5, 0xfe, 0xd9, 0x10, 0x9c, 0xfe,
- 0x03, 0xdc, 0xfe, 0x73, 0x57, 0xfe, 0x80, 0x5d, 0x03, 0x9c, 0xfe, 0x03, 0xdc, 0xfe, 0x5b, 0x57,
- 0xfe, 0x80, 0x5d, 0x03, 0xfe, 0x03, 0x57, 0x9c, 0x2b, 0xfe, 0x00, 0xcc, 0x03, 0xfe, 0x03, 0x57,
- 0x9c, 0x80, 0x03, 0x01, 0xfe, 0x8e, 0x17, 0x40, 0x05, 0x48, 0xfe, 0x0a, 0x13, 0x08, 0x1e, 0x09,
- 0x52, 0xdd, 0x01, 0x9f, 0x01, 0xa1, 0x08, 0x3f, 0x09, 0xa2, 0x01, 0x45, 0x11, 0xfe, 0xe9, 0x00,
- 0x0a, 0x07, 0x8f, 0xfe, 0x52, 0x13, 0x01, 0xfe, 0x18, 0x17, 0xfe, 0x1e, 0x1c, 0xfe, 0x14, 0x90,
- 0x0d, 0xfe, 0x64, 0x01, 0xfe, 0x16, 0x90, 0x0d, 0xfe, 0x66, 0x01, 0x0a, 0x07, 0x46, 0xef, 0xfe,
- 0x03, 0x80, 0x5b, 0x4d, 0x11, 0x7b, 0x08, 0x2d, 0x09, 0x3e, 0x1c, 0x7a, 0x01, 0x90, 0xfe, 0x62,
- 0x08, 0x72, 0x4d, 0x11, 0x7b, 0x08, 0x2d, 0x09, 0x3e, 0x1c, 0x7a, 0x01, 0x90, 0x6d, 0x31, 0x11,
- 0x7b, 0x08, 0x2d, 0x09, 0x3e, 0x1c, 0x7a, 0x01, 0x7e, 0x03, 0xfe, 0x08, 0x1c, 0x04, 0xfe, 0xac,
- 0x00, 0xfe, 0x06, 0x58, 0x04, 0xfe, 0xae, 0x00, 0xfe, 0x07, 0x58, 0x04, 0xfe, 0xb0, 0x00, 0xfe,
- 0x08, 0x58, 0x04, 0xfe, 0xb2, 0x00, 0xfe, 0x09, 0x58, 0xfe, 0x0a, 0x1c, 0x20, 0x74, 0x16, 0xfe,
- 0xb9, 0x00, 0x2b, 0x0d, 0x5c, 0x0d, 0x56, 0x20, 0x10, 0x16, 0x2d, 0x16, 0x3e, 0x51, 0xa6, 0xfe,
- 0x93, 0x00, 0x08, 0x2d, 0x09, 0x3e, 0x1c, 0x01, 0x7e, 0x82, 0x11, 0x7b, 0xfe, 0x14, 0x56, 0xfe,
- 0xd6, 0xf0, 0x8a, 0xde, 0x92, 0xfe, 0x14, 0x1c, 0xfe, 0x10, 0x1c, 0xfe, 0x18, 0x1c, 0x03, 0x1c,
- 0xfe, 0x0c, 0x14, 0x8c, 0xfe, 0x07, 0xe6, 0x38, 0xfe, 0xce, 0x47, 0xfe, 0xf5, 0x13, 0x03, 0x01,
- 0xc2, 0x0f, 0x3f, 0x01, 0x15, 0x05, 0x10, 0xdb, 0x0f, 0x1e, 0x01, 0x15, 0x05, 0x10, 0xe2, 0xfe,
- 0x44, 0x58, 0x4d, 0xfe, 0x01, 0xec, 0xc4, 0xfe, 0x9e, 0x40, 0xfe, 0x9d, 0xe7, 0x00, 0xfe, 0x9c,
- 0xe7, 0x1d, 0xa5, 0x31, 0x01, 0xea, 0xfe, 0xc9, 0x10, 0x03, 0x2e, 0x86, 0x76, 0x24, 0x23, 0xba,
- 0x05, 0x1d, 0xfe, 0x48, 0x12, 0x05, 0x0b, 0xfe, 0x4c, 0x12, 0x05, 0x18, 0xfe, 0x30, 0x12, 0x05,
- 0xd4, 0x19, 0xfe, 0xd4, 0x11, 0x05, 0xfe, 0x23, 0x00, 0x19, 0xfe, 0xe0, 0x11, 0x05, 0x06, 0x19,
- 0xfe, 0x3e, 0x12, 0x05, 0x22, 0xfe, 0x12, 0x12, 0x05, 0x00, 0x19, 0x26, 0x17, 0xd4, 0x01, 0x3b,
- 0xce, 0x3a, 0x01, 0x0c, 0x85, 0x55, 0x03, 0x3a, 0x11, 0xfe, 0xcc, 0x00, 0x02, 0x27, 0x3a, 0x40,
- 0x05, 0xcb, 0xfe, 0xe3, 0x13, 0x36, 0x3c, 0x21, 0x3d, 0x53, 0xfe, 0x92, 0x11, 0x0a, 0x07, 0x60,
- 0xfe, 0x72, 0x12, 0x83, 0x30, 0x5a, 0x42, 0x95, 0xca, 0x98, 0xfe, 0x5c, 0x11, 0x29, 0x68, 0xfe,
- 0x26, 0x13, 0x04, 0xb5, 0x2a, 0x93, 0x53, 0xfe, 0xb2, 0x0d, 0x0d, 0x66, 0x12, 0x67, 0x2b, 0x0d,
- 0xb5, 0x0d, 0x93, 0x01, 0xc5, 0x20, 0x74, 0x5b, 0x16, 0x68, 0x01, 0xfe, 0xbe, 0x13, 0x83, 0x30,
- 0x5a, 0x42, 0xfe, 0x04, 0x55, 0xfe, 0xa5, 0x55, 0xfe, 0x04, 0xfa, 0x30, 0xfe, 0x05, 0xfa, 0x42,
- 0xfe, 0x91, 0x10, 0x04, 0x43, 0x2a, 0x44, 0xfe, 0x40, 0x56, 0xfe, 0xe1, 0x56, 0x0d, 0x43, 0x12,
- 0x44, 0xad, 0x83, 0x30, 0x5a, 0x42, 0x95, 0xca, 0x04, 0x64, 0x2a, 0x65, 0xfe, 0x00, 0x56, 0xfe,
- 0xa1, 0x56, 0x0d, 0x64, 0x12, 0x65, 0x0a, 0x07, 0x60, 0xfe, 0x1e, 0x12, 0x29, 0x68, 0xfe, 0x1f,
- 0x40, 0x04, 0x66, 0x2a, 0x67, 0xfe, 0x2c, 0x50, 0xfe, 0xae, 0x50, 0x04, 0x43, 0x2a, 0x44, 0xfe,
- 0x34, 0x50, 0xfe, 0xb6, 0x50, 0x04, 0x64, 0x2a, 0x65, 0xfe, 0x08, 0x50, 0xfe, 0x8a, 0x50, 0x04,
- 0x3c, 0x2a, 0x3d, 0xfe, 0x28, 0x50, 0xfe, 0xaa, 0x50, 0x02, 0xa0, 0x20, 0x06, 0x16, 0xfc, 0x02,
- 0x7f, 0x3a, 0x01, 0x0c, 0x1f, 0x57, 0x24, 0x23, 0xba, 0x05, 0x06, 0x28, 0x57, 0x40, 0x05, 0xcb,
- 0x28, 0x7f, 0x01, 0xfe, 0x9c, 0x13, 0x1a, 0x59, 0x19, 0x57, 0x0a, 0x07, 0x0b, 0xe4, 0x36, 0x3c,
- 0x21, 0x3d, 0xfe, 0x0a, 0x55, 0x35, 0xfe, 0x8b, 0x55, 0x4e, 0x3c, 0x70, 0x3d, 0xfe, 0x0c, 0x51,
- 0xfe, 0x8e, 0x51, 0x02, 0x7f, 0xdf, 0xfe, 0x0a, 0x45, 0xfe, 0x19, 0x41, 0x02, 0x7f, 0x3a, 0x01,
- 0x0c, 0x1f, 0xfe, 0xd6, 0x10, 0x24, 0x23, 0xfe, 0xe9, 0x09, 0x61, 0x18, 0xfe, 0x94, 0x12, 0x61,
- 0x0b, 0x4f, 0x02, 0x57, 0x2f, 0xfe, 0x5e, 0x12, 0x1b, 0x32, 0x1f, 0xfe, 0xd6, 0x10, 0x24, 0x23,
- 0x9a, 0x05, 0x18, 0x28, 0x57, 0x01, 0x0c, 0x1f, 0xfe, 0xd6, 0x10, 0x24, 0x23, 0xfe, 0xe8, 0x09,
- 0x51, 0x04, 0xfe, 0x9c, 0x00, 0x2c, 0x35, 0xfe, 0xbb, 0x45, 0x61, 0x00, 0x50, 0x37, 0x06, 0xa6,
- 0x59, 0xfe, 0xc0, 0x14, 0xfe, 0xf8, 0x14, 0xb3, 0x40, 0x05, 0xc9, 0xfe, 0x16, 0x13, 0x04, 0xfe,
- 0x9e, 0x00, 0x2c, 0xd6, 0x04, 0x56, 0x2c, 0x35, 0x63, 0x02, 0x7f, 0xfe, 0xc0, 0x5d, 0xfe, 0xe4,
- 0x14, 0xfe, 0x03, 0x17, 0x04, 0x5c, 0xc3, 0x0d, 0x5c, 0x63, 0x3a, 0x01, 0x0c, 0x25, 0xa0, 0x01,
- 0xfe, 0x06, 0x15, 0x02, 0xa0, 0x2f, 0xfe, 0xe8, 0x12, 0x1b, 0x32, 0x1f, 0x57, 0x24, 0x23, 0x9a,
- 0x05, 0x06, 0x28, 0x57, 0xfe, 0xf6, 0x14, 0xfe, 0x42, 0x58, 0xfe, 0x70, 0x14, 0xfe, 0x92, 0x14,
- 0xb3, 0xfe, 0x4a, 0xf4, 0x0b, 0x19, 0x57, 0xfe, 0x4a, 0xf4, 0x06, 0xd8, 0x40, 0x05, 0xc9, 0xd1,
- 0x02, 0x7f, 0x04, 0x56, 0xc3, 0x0d, 0x56, 0x63, 0x3a, 0x01, 0x0c, 0x25, 0xa0, 0x01, 0xfe, 0x34,
- 0x15, 0x02, 0xa0, 0x25, 0xfe, 0x50, 0x13, 0x78, 0xf9, 0x78, 0x03, 0x34, 0xfe, 0x4c, 0x13, 0x73,
- 0xfe, 0x4c, 0x13, 0x63, 0x3a, 0x01, 0x0c, 0xfe, 0xe3, 0x10, 0x08, 0x6c, 0xff, 0x02, 0x00, 0x57,
- 0x6e, 0x81, 0x1a, 0xfe, 0xff, 0x7f, 0xfe, 0x30, 0x56, 0xfe, 0x00, 0x5c, 0x03, 0x08, 0x6c, 0xff,
- 0x02, 0x00, 0x57, 0x6e, 0x81, 0x1a, 0x59, 0xfe, 0x30, 0x56, 0xfe, 0x00, 0x5c, 0x03, 0x08, 0x6c,
- 0xff, 0x02, 0x00, 0x57, 0x6e, 0x81, 0x03, 0x08, 0x6c, 0xff, 0x02, 0x00, 0x57, 0x6e, 0x81, 0xfe,
- 0x0b, 0x58, 0x03, 0x0f, 0x5c, 0x01, 0x8e, 0x0f, 0x56, 0x01, 0x8e, 0x03, 0xd0, 0x1a, 0x10, 0xff,
- 0x03, 0x00, 0x54, 0xfe, 0x00, 0xf4, 0x22, 0x6e, 0xfe, 0x00, 0x7d, 0xfe, 0x01, 0x7d, 0xfe, 0x02,
- 0x7d, 0xfe, 0x03, 0x7c, 0x6d, 0x31, 0x0d, 0x64, 0x12, 0x65, 0x4e, 0x43, 0x70, 0x44, 0x03, 0xfe,
- 0x62, 0x18, 0xfe, 0x82, 0x5a, 0xfe, 0xe1, 0x1a, 0xbf, 0xfe, 0x02, 0x58, 0x03, 0x01, 0xfe, 0x7e,
- 0x19, 0xfe, 0x42, 0x48, 0x6a, 0x51, 0x9e, 0x01, 0x0c, 0x1f, 0xfe, 0xfe, 0x14, 0x24, 0x23, 0xfe,
- 0xe9, 0x09, 0xfe, 0xc1, 0x59, 0x01, 0x0c, 0x1f, 0xfe, 0xfe, 0x14, 0x24, 0x23, 0xfe, 0xe8, 0x0a,
- 0x04, 0xfe, 0x9e, 0x00, 0x2c, 0xfe, 0xc4, 0x12, 0x2b, 0xb8, 0x1d, 0xe4, 0x61, 0xd5, 0x79, 0xfe,
- 0x4c, 0x14, 0x4f, 0x08, 0x06, 0x09, 0xd5, 0xa6, 0xfe, 0x00, 0x10, 0xfe, 0x78, 0x10, 0xff, 0x02,
- 0x83, 0x55, 0x8a, 0xff, 0x02, 0x83, 0x55, 0xb8, 0x18, 0xfe, 0x12, 0x13, 0x62, 0xfe, 0x30, 0x00,
- 0x98, 0xfe, 0xa6, 0x14, 0x09, 0x8b, 0x08, 0x06, 0xfe, 0x56, 0x10, 0xb8, 0x0b, 0xfe, 0x16, 0x13,
- 0x62, 0xfe, 0x64, 0x00, 0x98, 0xfe, 0xa6, 0x14, 0x0f, 0xfe, 0x64, 0x00, 0x09, 0xb1, 0x08, 0x06,
- 0xfe, 0x28, 0x10, 0xb8, 0x06, 0xfe, 0x60, 0x13, 0x62, 0xfe, 0xc8, 0x00, 0x98, 0xfe, 0xa6, 0x14,
- 0x0f, 0xfe, 0xc8, 0x00, 0x09, 0x5e, 0x08, 0x06, 0xad, 0x62, 0xfe, 0x90, 0x01, 0x99, 0xfe, 0xb2,
- 0x14, 0x9e, 0xb0, 0xfe, 0x43, 0xf4, 0xb4, 0xfe, 0x56, 0xf0, 0xfe, 0xc4, 0x14, 0xfe, 0x04, 0xf4,
- 0x6c, 0xfe, 0x43, 0xf4, 0xb1, 0xfe, 0xf3, 0x10, 0xb7, 0x01, 0xfe, 0x8e, 0x13, 0x1a, 0x59, 0xaf,
- 0xfe, 0x00, 0x17, 0xfe, 0x4d, 0xe4, 0x74, 0x99, 0xfe, 0xf8, 0x14, 0xa8, 0x74, 0xfe, 0x14, 0x10,
- 0xfe, 0x00, 0x17, 0xfe, 0x4d, 0xe4, 0xf1, 0x99, 0xfe, 0xf8, 0x14, 0xa8, 0xf1, 0xa4, 0x51, 0x9e,
- 0x08, 0x06, 0xfe, 0xb4, 0x56, 0xfe, 0xc3, 0x58, 0x03, 0x51, 0x08, 0x0b, 0x03, 0x14, 0x06, 0x01,
- 0x0c, 0x25, 0xec, 0x14, 0x0b, 0x01, 0x0c, 0x25, 0xec, 0x14, 0x18, 0x01, 0x0c, 0x25, 0xec, 0x78,
- 0xfe, 0x89, 0x49, 0x01, 0x0c, 0x03, 0x14, 0x06, 0x01, 0x0c, 0x25, 0xbc, 0x14, 0x18, 0x01, 0x0c,
- 0x25, 0xbc, 0x14, 0x06, 0x01, 0x0c, 0x25, 0xbc, 0xfe, 0x89, 0x49, 0x01, 0x0c, 0x25, 0xbc, 0x78,
- 0xfe, 0x89, 0x4a, 0x01, 0x0c, 0x03, 0x51, 0x03, 0x29, 0xe8, 0x05, 0x06, 0x3b, 0xb6, 0x16, 0xe8,
- 0xfe, 0x49, 0xf4, 0x00, 0x4f, 0x78, 0xce, 0x63, 0xfe, 0x01, 0xec, 0xfe, 0x27, 0x01, 0xf9, 0x01,
- 0x0c, 0x40, 0x05, 0xfe, 0xe3, 0x00, 0xfe, 0x20, 0x13, 0x1f, 0xfe, 0xb6, 0x15, 0x2b, 0x16, 0xfc,
- 0x01, 0x55, 0x29, 0xfc, 0x05, 0x06, 0x50, 0x0a, 0x41, 0x06, 0x39, 0x03, 0x0d, 0x5d, 0x12, 0x91,
- 0xfe, 0x43, 0x58, 0x01, 0x15, 0x05, 0x10, 0xfe, 0x1e, 0x12, 0x4a, 0xf3, 0x96, 0x01, 0x49, 0xfe,
- 0x90, 0x4d, 0xe6, 0x10, 0xfe, 0xc5, 0x59, 0x01, 0x49, 0xfe, 0x8d, 0x56, 0xbf, 0x4a, 0x03, 0x4a,
- 0x21, 0x91, 0x01, 0x15, 0x4a, 0x96, 0x01, 0x49, 0xeb, 0x10, 0xe6, 0x10, 0x21, 0x5d, 0x62, 0x1e,
- 0x89, 0x0f, 0x5f, 0x01, 0xaa, 0x03, 0x0d, 0x5d, 0x12, 0x91, 0xfe, 0xc3, 0x58, 0x01, 0x15, 0x05,
- 0x10, 0xfe, 0x1a, 0x12, 0x4a, 0xf3, 0x96, 0x01, 0x49, 0xeb, 0x10, 0xfe, 0x80, 0x4d, 0xfe, 0xc5,
- 0x59, 0x01, 0x49, 0x4a, 0x03, 0x4a, 0x21, 0x5d, 0x01, 0x15, 0x4a, 0x96, 0x01, 0x49, 0xeb, 0x10,
- 0xe6, 0x10, 0x21, 0x5d, 0x62, 0x1e, 0x89, 0x0f, 0x5f, 0x01, 0xaa, 0x03, 0x0d, 0x5d, 0x12, 0x91,
- 0xfe, 0x43, 0x58, 0x01, 0x15, 0xfe, 0x42, 0x48, 0x96, 0x01, 0x49, 0xfe, 0xc0, 0x5a, 0xb7, 0xfe,
- 0x00, 0xcd, 0xfe, 0x01, 0xcc, 0xfe, 0x4a, 0x46, 0xe4, 0x9c, 0x80, 0x05, 0x10, 0xfe, 0x2e, 0x13,
- 0x5a, 0x5d, 0xfe, 0x4d, 0xf4, 0x1e, 0xfe, 0x1c, 0x13, 0x0f, 0x5f, 0x01, 0x8e, 0xb0, 0xfe, 0x40,
- 0x4c, 0xfe, 0xc5, 0x58, 0x01, 0x49, 0xfe, 0x00, 0x07, 0x80, 0x05, 0x10, 0x89, 0x5a, 0x91, 0xfe,
- 0x05, 0x57, 0xfe, 0x08, 0x10, 0xfe, 0x45, 0x58, 0x01, 0x49, 0xfe, 0x8d, 0x56, 0xbf, 0xfe, 0x80,
- 0x4c, 0xfe, 0x05, 0x17, 0x03, 0x09, 0x10, 0x77, 0x6f, 0xfe, 0x60, 0x01, 0xfe, 0x18, 0xdf, 0xfe,
- 0x19, 0xde, 0xfe, 0x24, 0x1c, 0xe3, 0x38, 0x9d, 0xfe, 0xfa, 0x16, 0x01, 0xfe, 0x08, 0x18, 0xd9,
- 0x8d, 0x38, 0x6f, 0xfe, 0x2c, 0x01, 0xfe, 0x2f, 0x19, 0x03, 0xc0, 0x28, 0xfe, 0xea, 0x16, 0xfe,
- 0xe2, 0x10, 0x09, 0x10, 0x77, 0x04, 0xfe, 0x64, 0x01, 0xfe, 0x00, 0xf4, 0x22, 0xfe, 0x18, 0x58,
- 0x04, 0xfe, 0x66, 0x01, 0xfe, 0x19, 0x58, 0x8d, 0x22, 0xfe, 0x3c, 0x90, 0xfe, 0x30, 0xf4, 0x06,
- 0xfe, 0x3c, 0x50, 0x6f, 0xfe, 0x38, 0x00, 0xfe, 0x0f, 0x79, 0xfe, 0x1c, 0xf7, 0x22, 0x9d, 0xfe,
- 0x44, 0x17, 0xfe, 0xbe, 0x14, 0x35, 0x03, 0xc0, 0x28, 0xfe, 0x1c, 0x17, 0xfe, 0xa4, 0x10, 0x09,
- 0x10, 0x77, 0xbf, 0xfe, 0x18, 0xdf, 0xfe, 0x19, 0xdf, 0xe3, 0x30, 0x9d, 0xfe, 0x66, 0x17, 0xfe,
- 0x9c, 0x14, 0xfe, 0x18, 0x13, 0x8d, 0x30, 0x6f, 0x1d, 0xfe, 0xaf, 0x19, 0xfe, 0x98, 0xe7, 0x00,
- 0xa7, 0x07, 0xfe, 0x7f, 0x00, 0xfe, 0x05, 0x40, 0x03, 0xc0, 0x28, 0xfe, 0x5a, 0x17, 0xfe, 0x6c,
- 0x10, 0x09, 0x10, 0x77, 0xfe, 0x30, 0xbc, 0xfe, 0xb2, 0xbc, 0x8d, 0xe1, 0x6f, 0x1d, 0xfe, 0x0f,
- 0x79, 0xfe, 0x1c, 0xf7, 0xe1, 0x9d, 0xfe, 0xa6, 0x17, 0xfe, 0x5c, 0x14, 0x35, 0x03, 0xc0, 0x28,
- 0xfe, 0x92, 0x17, 0xfe, 0x42, 0x10, 0xfe, 0x02, 0xf6, 0x10, 0x77, 0xfe, 0x18, 0xfe, 0x66, 0xfe,
- 0x19, 0xfe, 0x67, 0xd0, 0xe3, 0x46, 0x9d, 0xfe, 0xcc, 0x17, 0xfe, 0x36, 0x14, 0xfe, 0x1c, 0x13,
- 0x8d, 0x46, 0x47, 0xfe, 0x83, 0x58, 0xfe, 0xaf, 0x19, 0xfe, 0x80, 0xe7, 0x10, 0xfe, 0x81, 0xe7,
- 0x10, 0x11, 0xfe, 0xdd, 0x00, 0x6d, 0x31, 0x03, 0x6d, 0x31, 0xfe, 0x12, 0x45, 0x28, 0xfe, 0xbc,
- 0x17, 0x17, 0x06, 0x4c, 0xfe, 0x9b, 0x00, 0xe5, 0x02, 0x27, 0xfe, 0x39, 0xf0, 0xfe, 0x10, 0x18,
- 0x2b, 0x03, 0xfe, 0x7e, 0x18, 0x1a, 0x18, 0x87, 0x08, 0x0e, 0x03, 0x77, 0x04, 0xe7, 0x1a, 0x06,
- 0xfe, 0xef, 0x12, 0xfe, 0xe1, 0x10, 0x1c, 0x0f, 0x1e, 0x01, 0x15, 0x05, 0x10, 0x50, 0x4d, 0xfe,
- 0x78, 0x14, 0xfe, 0x34, 0x12, 0x59, 0x8c, 0x37, 0x38, 0xc7, 0xfe, 0xe9, 0x13, 0x1c, 0x0f, 0x3f,
- 0x01, 0x15, 0x05, 0x10, 0x50, 0x4d, 0xfe, 0x56, 0x14, 0xe9, 0x59, 0x8c, 0x37, 0x38, 0xc7, 0xfe,
- 0xe9, 0x13, 0x09, 0x0b, 0x03, 0xfe, 0x9c, 0xe7, 0x0b, 0x13, 0xfe, 0x15, 0x00, 0x7a, 0xa5, 0x31,
- 0x01, 0xea, 0x09, 0x06, 0x03, 0x0a, 0x41, 0x38, 0x39, 0x08, 0x3f, 0x09, 0xa2, 0x01, 0x45, 0x11,
- 0x48, 0x08, 0x1e, 0x09, 0x52, 0x01, 0x7e, 0x09, 0x06, 0x03, 0xfe, 0x38, 0x90, 0xfe, 0xba, 0x90,
- 0x36, 0xfe, 0xa8, 0x00, 0x21, 0x7b, 0xfe, 0x48, 0x55, 0x35, 0xfe, 0xc9, 0x55, 0x03, 0x29, 0xc6,
- 0x5b, 0x16, 0xc6, 0x03, 0x0f, 0xc8, 0x01, 0x15, 0xf2, 0x0f, 0x7d, 0x01, 0x15, 0xfe, 0x49, 0x44,
- 0x28, 0xfe, 0x06, 0x19, 0x0f, 0x1e, 0x01, 0x15, 0x05, 0x10, 0x50, 0x0f, 0x5f, 0x01, 0xaa, 0x0f,
- 0x7d, 0x01, 0x15, 0x5b, 0x80, 0x03, 0xfe, 0x40, 0x5e, 0xfe, 0xe2, 0x08, 0xfe, 0xc0, 0x4c, 0x29,
- 0x3e, 0x05, 0x10, 0xfe, 0x52, 0x12, 0x4d, 0x05, 0x00, 0xfe, 0x18, 0x12, 0xfe, 0xe1, 0x18, 0xfe,
- 0x19, 0xf4, 0xfe, 0x7f, 0x00, 0xaf, 0xfe, 0xe2, 0x08, 0x5b, 0x4d, 0x40, 0x05, 0x7b, 0xab, 0xfe,
- 0x82, 0x48, 0xfe, 0x01, 0x80, 0xfe, 0xd7, 0x10, 0xfe, 0xc4, 0x48, 0x08, 0x2d, 0x09, 0x3e, 0xfe,
- 0x40, 0x5f, 0x1c, 0x01, 0x45, 0x11, 0xfe, 0xdd, 0x00, 0xfe, 0x14, 0x46, 0x08, 0x2d, 0x09, 0x3e,
- 0x01, 0x45, 0x11, 0xfe, 0xdd, 0x00, 0xfe, 0x40, 0x4a, 0x72, 0xfe, 0x06, 0x17, 0xfe, 0x01, 0x07,
- 0xfe, 0x82, 0x48, 0xfe, 0x04, 0x17, 0x03, 0xf5, 0x18, 0x79, 0xfe, 0x8e, 0x19, 0x04, 0xfe, 0x90,
- 0x00, 0xfe, 0x3a, 0x45, 0xfe, 0x2c, 0x10, 0xf5, 0xd4, 0x79, 0xfe, 0xa0, 0x19, 0x04, 0xfe, 0x92,
- 0x00, 0xcf, 0x1d, 0xe0, 0xf5, 0xfe, 0x0b, 0x00, 0x79, 0xfe, 0xb2, 0x19, 0x04, 0xfe, 0x94, 0x00,
- 0xcf, 0x22, 0xfe, 0x08, 0x10, 0x04, 0xfe, 0x96, 0x00, 0xcf, 0x8b, 0xfe, 0x4e, 0x45, 0xd8, 0xfe,
- 0x0a, 0x45, 0xff, 0x04, 0x68, 0x54, 0xfe, 0xf1, 0x10, 0x1a, 0x74, 0xfe, 0x08, 0x1c, 0xfe, 0x67,
- 0x19, 0xfe, 0x0a, 0x1c, 0xfe, 0x1a, 0xf4, 0xfe, 0x00, 0x04, 0xd8, 0xfe, 0x48, 0xf4, 0x18, 0x99,
- 0xfe, 0xe6, 0x19, 0x08, 0x18, 0x03, 0x05, 0x84, 0xfe, 0x5a, 0xf0, 0xfe, 0xf6, 0x19, 0x20, 0xfe,
- 0x09, 0x00, 0xfe, 0x34, 0x10, 0x05, 0x1d, 0xfe, 0x5a, 0xf0, 0xfe, 0x04, 0x1a, 0x20, 0xd5, 0xfe,
- 0x26, 0x10, 0x05, 0x18, 0x87, 0x20, 0x8b, 0xe0, 0x05, 0x0b, 0x87, 0x20, 0xb1, 0xfe, 0x0e, 0x10,
- 0x05, 0x06, 0x87, 0x20, 0x5e, 0xce, 0xb6, 0x03, 0x17, 0xfe, 0x09, 0x00, 0x01, 0x3b, 0x2f, 0xfe,
- 0x34, 0x1a, 0x04, 0x76, 0xb7, 0x03, 0x1b, 0xfe, 0x54, 0x1a, 0xfe, 0x14, 0xf0, 0x0c, 0x2f, 0xfe,
- 0x48, 0x1a, 0x1b, 0xfe, 0x54, 0x1a, 0xfe, 0x82, 0xf0, 0xfe, 0x4c, 0x1a, 0x03, 0xff, 0x15, 0x00,
- 0x00,
+ 0x00, 0x00, 0x00, 0xf2, 0x00, 0xf0, 0x00, 0xfc, 0x00, 0x16, 0x01, 0x00, 0x48, 0xe4, 0x03, 0xf6,
+ 0x18, 0xe4, 0x02, 0x00, 0x18, 0x80, 0xa8, 0x19, 0x00, 0xfa, 0xff, 0xff, 0x00, 0x0f, 0x00, 0xf6,
+ 0x9e, 0xe7, 0xff, 0x00, 0x82, 0xe7, 0x00, 0xea, 0x01, 0xe6, 0x09, 0xe7, 0x01, 0xf6, 0x01, 0xfa,
+ 0x03, 0x00, 0x55, 0xf0, 0x04, 0x00, 0x1e, 0xf0, 0x85, 0xf0, 0x18, 0xf4, 0x08, 0x00, 0xbc, 0x00,
+ 0x38, 0x54, 0x00, 0xec, 0xd5, 0xf0, 0x70, 0x0d, 0x00, 0xe6, 0x86, 0xf0, 0xb1, 0xf0, 0x98, 0x57,
+ 0x01, 0xfc, 0xb4, 0x00, 0xd4, 0x01, 0x0c, 0x1c, 0x3e, 0x1c, 0x10, 0x00, 0x3c, 0x00, 0xbb, 0x00,
+ 0x00, 0x10, 0x94, 0x19, 0x02, 0x80, 0x32, 0xf0, 0x6a, 0x0d, 0x02, 0x13, 0x98, 0x13, 0x18, 0x40,
+ 0x00, 0x57, 0x01, 0xea, 0x02, 0xfc, 0x03, 0xfc, 0x3e, 0x00, 0xc0, 0x00, 0x6c, 0x01, 0x6e, 0x01,
+ 0x74, 0x01, 0x76, 0x01, 0xb9, 0x54, 0x00, 0x80, 0x03, 0xe6, 0xb6, 0x00, 0x01, 0x01, 0x3e, 0x01,
+ 0x7a, 0x01, 0xba, 0x08, 0xac, 0x10, 0xf4, 0x10, 0x04, 0x12, 0x06, 0x13, 0xbb, 0x55, 0x3c, 0x56,
+ 0x3e, 0x57, 0x03, 0x58, 0x1b, 0x80, 0x30, 0xe4, 0x4b, 0xe4, 0x5d, 0xf0, 0x02, 0xfa, 0x20, 0x00,
+ 0x32, 0x00, 0x40, 0x00, 0x80, 0x00, 0x24, 0x01, 0x3c, 0x01, 0x68, 0x01, 0x6a, 0x01, 0x70, 0x01,
+ 0x72, 0x01, 0x78, 0x01, 0x7c, 0x01, 0x62, 0x0a, 0x74, 0x0d, 0x08, 0x12, 0x4c, 0x1c, 0x02, 0x4a,
+ 0x4a, 0xe4, 0x02, 0xee, 0x5b, 0xf0, 0x03, 0xf7, 0x0c, 0x00, 0x0f, 0x00, 0x47, 0x00, 0xbe, 0x00,
+ 0x00, 0x01, 0xfe, 0x10, 0x3a, 0x16, 0x32, 0x1c, 0x38, 0x1c, 0x4e, 0x1c, 0x10, 0x44, 0x00, 0x4c,
+ 0x04, 0x80, 0x04, 0xea, 0x5c, 0xf0, 0xa7, 0xf0, 0x04, 0xf6, 0x03, 0xfa, 0x05, 0x00, 0x34, 0x00,
+ 0x36, 0x00, 0x98, 0x00, 0xcc, 0x00, 0x20, 0x01, 0x4e, 0x01, 0x3a, 0x0b, 0x32, 0x0c, 0xf6, 0x0e,
+ 0x04, 0x10, 0x0c, 0x10, 0x00, 0x11, 0x0a, 0x12, 0x04, 0x13, 0x30, 0x1c, 0x02, 0x48, 0x00, 0x4e,
+ 0x42, 0x54, 0x44, 0x55, 0xbd, 0x56, 0x00, 0xdc, 0x05, 0xf0, 0x09, 0xf0, 0x59, 0xf0, 0xb8, 0xf0,
+ 0x4b, 0xf4, 0x06, 0xf7, 0x0e, 0xf7, 0x04, 0xfc, 0x05, 0xfc, 0x06, 0x00, 0x19, 0x00, 0x33, 0x00,
+ 0x9b, 0x00, 0xa4, 0x00, 0xb5, 0x00, 0xba, 0x00, 0xd0, 0x00, 0xe1, 0x00, 0xe7, 0x00, 0xe2, 0x03,
+ 0xec, 0x0e, 0x02, 0x10, 0x0a, 0x10, 0x0a, 0x13, 0x12, 0x13, 0x02, 0x14, 0x12, 0x14, 0xe2, 0x15,
+ 0xe6, 0x15, 0x82, 0x17, 0x20, 0x1c, 0x34, 0x1c, 0x36, 0x1c, 0x08, 0x44, 0x38, 0x44, 0x91, 0x44,
+ 0x0a, 0x45, 0x48, 0x46, 0x01, 0x48, 0x68, 0x54, 0x3a, 0x55, 0x83, 0x55, 0xe5, 0x55, 0xb0, 0x57,
+ 0x01, 0x58, 0x83, 0x59, 0x06, 0x83, 0x19, 0xe4, 0x05, 0xe6, 0x0b, 0xf0, 0x0c, 0xf0, 0x04, 0xf8,
+ 0x05, 0xf8, 0x07, 0x00, 0x0a, 0x00, 0x1c, 0x00, 0x1e, 0x00, 0x9e, 0x00, 0xa8, 0x00, 0xaa, 0x00,
+ 0xb9, 0x00, 0xe0, 0x00, 0x22, 0x01, 0x26, 0x01, 0x79, 0x01, 0x7e, 0x01, 0xc4, 0x01, 0xc6, 0x01,
+ 0x80, 0x02, 0x66, 0x03, 0xde, 0x04, 0x8a, 0x06, 0xe8, 0x07, 0x68, 0x08, 0x69, 0x08, 0xc6, 0x08,
+ 0xe9, 0x09, 0xea, 0x0b, 0x12, 0x0f, 0x0e, 0x10, 0x1a, 0x10, 0x26, 0x10, 0xed, 0x10, 0xf1, 0x10,
+ 0x08, 0x11, 0x06, 0x12, 0x0c, 0x12, 0x10, 0x12, 0x1c, 0x12, 0x0c, 0x13, 0x10, 0x13, 0x16, 0x13,
+ 0x1e, 0x13, 0x24, 0x14, 0x54, 0x14, 0x14, 0x15, 0xa8, 0x15, 0x6b, 0x18, 0x98, 0x18, 0xa4, 0x18,
+ 0x6c, 0x19, 0xc0, 0x19, 0x12, 0x1c, 0x46, 0x1c, 0x9c, 0x32, 0xfe, 0x9c, 0xf0, 0x2a, 0x02, 0xfe,
+ 0x9a, 0x0d, 0xff, 0x10, 0x00, 0x00, 0xd7, 0xfe, 0xc2, 0x19, 0x00, 0xd6, 0xfe, 0x84, 0x01, 0xff,
+ 0x03, 0x00, 0x00, 0xfe, 0x02, 0x15, 0xfe, 0x0c, 0x05, 0xff, 0x38, 0x00, 0x00, 0xfe, 0x57, 0x24,
+ 0x00, 0xfe, 0x4c, 0x00, 0x5a, 0xff, 0x04, 0x00, 0x00, 0x11, 0xff, 0x09, 0x00, 0x00, 0xff, 0x08,
+ 0x01, 0x01, 0xff, 0x08, 0xff, 0xff, 0xff, 0x27, 0x00, 0x00, 0xff, 0x10, 0xff, 0xff, 0xff, 0x11,
+ 0x00, 0x00, 0xfe, 0x78, 0x56, 0xfe, 0x34, 0x12, 0xff, 0x21, 0x00, 0x00, 0xfe, 0x04, 0xf7, 0xd6,
+ 0x2b, 0x99, 0x09, 0x01, 0xfe, 0xa0, 0x0f, 0xfe, 0x04, 0xf7, 0xd6, 0x99, 0x09, 0x50, 0x2b, 0xfe,
+ 0x3d, 0xf0, 0xfe, 0x06, 0x02, 0xfe, 0x20, 0xf0, 0xa7, 0xfe, 0x91, 0xf0, 0xfe, 0xf4, 0x01, 0xfe,
+ 0x90, 0xf0, 0xfe, 0xf4, 0x01, 0xfe, 0x8f, 0xf0, 0xa7, 0x03, 0x5c, 0x4c, 0x02, 0xfe, 0xb6, 0x0d,
+ 0x01, 0xfe, 0x1c, 0x0e, 0xfe, 0xdd, 0x12, 0xfe, 0xfc, 0x10, 0xfe, 0x28, 0x1c, 0x03, 0xfe, 0xa6,
+ 0x00, 0xfe, 0xd3, 0x12, 0x42, 0x17, 0xfe, 0xa6, 0x00, 0xc0, 0xfe, 0x48, 0xf0, 0xfe, 0x8a, 0x02,
+ 0xfe, 0x49, 0xf0, 0xfe, 0xa4, 0x02, 0xfe, 0x4a, 0xf0, 0xfe, 0xc2, 0x02, 0xfe, 0x46, 0xf0, 0xfe,
+ 0x54, 0x02, 0xfe, 0x47, 0xf0, 0xfe, 0x5a, 0x02, 0xfe, 0x43, 0xf0, 0xfe, 0x48, 0x02, 0xfe, 0x44,
+ 0xf0, 0xfe, 0x4c, 0x02, 0xfe, 0x45, 0xf0, 0xfe, 0x50, 0x02, 0x16, 0x09, 0x88, 0x16, 0x05, 0x17,
+ 0xa1, 0x02, 0x2a, 0xfe, 0x00, 0x1c, 0xe7, 0xfe, 0x02, 0x1c, 0xe6, 0xfe, 0x1e, 0x1c, 0xfe, 0xe9,
+ 0x10, 0x01, 0xfe, 0xf6, 0x17, 0xfe, 0xe7, 0x10, 0xfe, 0x06, 0xfc, 0xce, 0x07, 0x6f, 0x01, 0xa8,
+ 0x02, 0x2a, 0x14, 0x58, 0x39, 0xa2, 0x01, 0xfe, 0x36, 0x10, 0x07, 0x6f, 0x01, 0x87, 0xfe, 0xbd,
+ 0x10, 0x07, 0x6f, 0x01, 0x87, 0xfe, 0xad, 0x10, 0xfe, 0x16, 0x1c, 0xfe, 0x58, 0x1c, 0x16, 0x05,
+ 0x17, 0xa1, 0x2b, 0x1b, 0x2a, 0xfe, 0x3d, 0xf0, 0xfe, 0x06, 0x02, 0x22, 0xfe, 0x98, 0x02, 0xfe,
+ 0x5a, 0x1c, 0xfa, 0xfe, 0x14, 0x1c, 0x14, 0xfe, 0x30, 0x00, 0x39, 0xa2, 0x01, 0xe5, 0x16, 0x05,
+ 0x17, 0xa1, 0x02, 0xd7, 0x21, 0x1f, 0x06, 0x11, 0x35, 0xfe, 0x69, 0x10, 0x16, 0x05, 0x17, 0xa1,
+ 0xfe, 0x04, 0xec, 0x1f, 0x67, 0x43, 0x13, 0x1f, 0xfe, 0x05, 0xf6, 0xce, 0x01, 0xfe, 0x28, 0x17,
+ 0x0a, 0x53, 0x57, 0x37, 0x12, 0x2f, 0x50, 0xc2, 0x01, 0xfe, 0x60, 0x16, 0x02, 0x2a, 0x07, 0x3d,
+ 0x01, 0x0e, 0x06, 0x00, 0x4d, 0x01, 0x72, 0xfe, 0x20, 0x10, 0x07, 0xa4, 0x01, 0x0e, 0xfe, 0x41,
+ 0x58, 0x07, 0x3d, 0x01, 0x0e, 0xfe, 0x49, 0x54, 0x6a, 0xfe, 0x10, 0x03, 0x01, 0xfe, 0x60, 0x16,
+ 0x02, 0x2a, 0x2b, 0x67, 0xfe, 0x02, 0xe8, 0x29, 0xfe, 0xbf, 0x57, 0xfe, 0x9e, 0x43, 0xfe, 0x77,
+ 0x57, 0xfe, 0x27, 0xf0, 0xfe, 0xe0, 0x01, 0xfe, 0x07, 0x4b, 0xfe, 0x20, 0xf0, 0xa7, 0xfe, 0x40,
+ 0x1c, 0x1b, 0xd9, 0xfe, 0x26, 0xf0, 0xfe, 0x62, 0x03, 0xfe, 0xa0, 0xf0, 0xfe, 0x50, 0x03, 0xfe,
+ 0x11, 0xf0, 0xa7, 0xe3, 0xfe, 0x9f, 0xf0, 0xfe, 0x70, 0x03, 0xfb, 0x10, 0xfe, 0x11, 0x00, 0x02,
+ 0x64, 0x2b, 0xfe, 0x48, 0x1c, 0xfb, 0x20, 0x21, 0xa3, 0xb5, 0x13, 0xa3, 0x07, 0x3d, 0x01, 0x0e,
+ 0xb5, 0x77, 0x01, 0xfe, 0x92, 0x16, 0x12, 0xd1, 0x1b, 0xd9, 0xfe, 0x01, 0xf0, 0xd9, 0xfe, 0x82,
+ 0xf0, 0xfe, 0x96, 0x03, 0xfc, 0x12, 0xfe, 0xe4, 0x00, 0x26, 0xfe, 0xa8, 0x03, 0x1b, 0x34, 0x1c,
+ 0xfe, 0xb8, 0x03, 0x01, 0x4a, 0xfe, 0x06, 0xf0, 0xfe, 0xc8, 0x03, 0x95, 0x86, 0xfe, 0x0a, 0xf0,
+ 0xfe, 0x7a, 0x06, 0x02, 0x23, 0x03, 0x6f, 0x27, 0x19, 0xfe, 0xea, 0x04, 0x14, 0x6c, 0x01, 0x36,
+ 0x7b, 0xfe, 0x6a, 0x02, 0x02, 0xd8, 0xfb, 0x2b, 0x99, 0x18, 0xfe, 0x67, 0x1b, 0xfe, 0xbf, 0x57,
+ 0xfe, 0x77, 0x57, 0xfe, 0x48, 0x1c, 0x73, 0x01, 0xad, 0x8d, 0x07, 0x3d, 0x01, 0x0e, 0x06, 0x00,
+ 0x19, 0xda, 0x07, 0xd1, 0x01, 0x0e, 0x8e, 0x4f, 0x63, 0x79, 0x29, 0x03, 0x6f, 0x27, 0xeb, 0x14,
+ 0x6c, 0x01, 0x36, 0x7b, 0xfe, 0x6a, 0x02, 0x02, 0xd8, 0xc7, 0x81, 0xc8, 0x83, 0x1b, 0x23, 0x26,
+ 0xfe, 0x40, 0x04, 0x1c, 0xfe, 0x3c, 0x04, 0x3b, 0xfe, 0xa0, 0x00, 0xfe, 0x9b, 0x57, 0xfe, 0x46,
+ 0x12, 0x2c, 0xff, 0x02, 0x00, 0x10, 0x01, 0x0b, 0x1c, 0xfe, 0xd4, 0x04, 0x2c, 0x01, 0x0b, 0x1c,
+ 0x23, 0x33, 0x31, 0xdd, 0xfe, 0x4c, 0x44, 0xfe, 0x3c, 0x12, 0x4f, 0xfe, 0x44, 0x48, 0x0f, 0x6e,
+ 0xfe, 0x4c, 0x54, 0x6a, 0xda, 0x67, 0x79, 0x29, 0xfe, 0x06, 0x80, 0xfe, 0x48, 0x47, 0xfe, 0x52,
+ 0x13, 0x32, 0x06, 0x82, 0xfe, 0x4a, 0x13, 0xfe, 0x18, 0x10, 0x0f, 0x6e, 0xfe, 0x4c, 0x54, 0x6a,
+ 0xda, 0xfe, 0x06, 0x80, 0xfe, 0x48, 0x47, 0xfe, 0x38, 0x13, 0x32, 0x06, 0x82, 0xfe, 0x30, 0x13,
+ 0x0a, 0x08, 0x2d, 0xec, 0x14, 0x9d, 0x0a, 0x08, 0x05, 0x4c, 0x14, 0xfe, 0x0d, 0x00, 0x01, 0x36,
+ 0x7b, 0xfe, 0x52, 0x0d, 0x02, 0x23, 0x2c, 0x12, 0xfe, 0xe6, 0x00, 0xfe, 0x1c, 0x90, 0xfe, 0x40,
+ 0x5c, 0x04, 0x14, 0x9d, 0x01, 0x36, 0x02, 0x2a, 0xfe, 0x42, 0x5b, 0x99, 0x18, 0xfe, 0x46, 0x59,
+ 0xfe, 0xbf, 0x57, 0xfe, 0x77, 0x57, 0xfe, 0x87, 0x80, 0xfe, 0x31, 0xe4, 0x5a, 0x0a, 0x08, 0x09,
+ 0xfe, 0x84, 0x13, 0xfe, 0x20, 0x80, 0x06, 0x18, 0xfe, 0x7c, 0x12, 0x52, 0x08, 0x05, 0xfe, 0x6c,
+ 0x13, 0x03, 0xfe, 0xa2, 0x00, 0x27, 0x19, 0xfe, 0x80, 0x05, 0xfe, 0x31, 0xe4, 0x59, 0x52, 0x08,
+ 0x09, 0xfe, 0x56, 0x13, 0x03, 0xfe, 0xa0, 0x00, 0x27, 0xfe, 0x4e, 0x12, 0x66, 0xff, 0x02, 0x00,
+ 0x10, 0x26, 0xfe, 0x38, 0x05, 0x1b, 0x34, 0xfe, 0x89, 0x48, 0xff, 0x02, 0x00, 0x10, 0x26, 0xfe,
+ 0x46, 0x05, 0x25, 0xfe, 0x98, 0x05, 0x12, 0xfe, 0xe3, 0x00, 0x20, 0x52, 0xfe, 0x4a, 0xf0, 0xfe,
+ 0x66, 0x05, 0xfe, 0x49, 0xf0, 0xfe, 0x60, 0x05, 0x89, 0x24, 0xfe, 0x21, 0x00, 0xaa, 0x24, 0xfe,
+ 0x22, 0x00, 0x88, 0x24, 0x57, 0xfe, 0x09, 0x48, 0xff, 0x02, 0x00, 0x10, 0x26, 0xfe, 0x76, 0x05,
+ 0x25, 0xfe, 0x98, 0x05, 0xfe, 0xe2, 0x08, 0x52, 0x08, 0xcb, 0x4c, 0x01, 0xae, 0x24, 0x05, 0x13,
+ 0xd3, 0x39, 0xfe, 0x27, 0x01, 0x0a, 0x08, 0x2d, 0xfe, 0x22, 0x12, 0x42, 0x01, 0xb0, 0x14, 0x9d,
+ 0x0a, 0x08, 0x05, 0x4c, 0x14, 0xfe, 0x0d, 0x00, 0x01, 0x36, 0x7b, 0xfe, 0x52, 0x0d, 0x02, 0x23,
+ 0x03, 0xfe, 0x9c, 0x00, 0x27, 0xfe, 0x3e, 0x12, 0x03, 0x5b, 0x27, 0xfe, 0x36, 0x13, 0x42, 0x01,
+ 0xb0, 0x25, 0xfe, 0x08, 0x06, 0x07, 0x05, 0x52, 0x08, 0x1e, 0xfe, 0x02, 0x12, 0x4e, 0x01, 0xfe,
+ 0x7c, 0x15, 0x1c, 0xfe, 0xfe, 0x05, 0x12, 0xa5, 0x01, 0x4a, 0x12, 0xfe, 0xe5, 0x00, 0x03, 0x5b,
+ 0xbf, 0x0c, 0x5b, 0x03, 0xcd, 0x27, 0xfe, 0x62, 0x12, 0x03, 0x45, 0x27, 0xfe, 0x5a, 0x13, 0x01,
+ 0xfe, 0xe6, 0x18, 0x01, 0xfe, 0x50, 0x19, 0xfe, 0x43, 0x48, 0xc4, 0xcc, 0x0f, 0x70, 0xff, 0x02,
+ 0x00, 0x57, 0x51, 0x93, 0x1d, 0x43, 0x8c, 0xc4, 0x6d, 0x42, 0x01, 0xb0, 0x25, 0xfe, 0x72, 0x06,
+ 0x52, 0x08, 0x1a, 0xe9, 0x92, 0x07, 0x58, 0x01, 0xfe, 0xaa, 0x15, 0x1c, 0xfe, 0x68, 0x06, 0x12,
+ 0xa5, 0x01, 0x4a, 0x12, 0xfe, 0xe5, 0x00, 0x03, 0x45, 0xbf, 0x0c, 0x45, 0x16, 0x05, 0x01, 0xb0,
+ 0xfc, 0x75, 0x73, 0x01, 0xad, 0x8d, 0x12, 0xfe, 0xe2, 0x00, 0x26, 0xdb, 0x1b, 0x34, 0xfe, 0x0a,
+ 0xf0, 0xfe, 0xa6, 0x06, 0x94, 0xfe, 0x5c, 0x07, 0xfe, 0x06, 0xf0, 0xfe, 0x64, 0x07, 0x95, 0x86,
+ 0x02, 0x23, 0x0a, 0x08, 0x09, 0xfe, 0x2e, 0x12, 0x15, 0x18, 0x01, 0x0b, 0x15, 0x00, 0x01, 0x0b,
+ 0x15, 0x00, 0x01, 0x0b, 0x15, 0x00, 0x01, 0x0b, 0xfe, 0x99, 0xa4, 0x01, 0x0b, 0x15, 0x00, 0x02,
+ 0xfe, 0x32, 0x08, 0x78, 0x08, 0x1a, 0xfe, 0x38, 0x12, 0x0a, 0x08, 0x1a, 0xfe, 0x30, 0x13, 0x15,
+ 0xfe, 0x1b, 0x00, 0x01, 0x0b, 0x15, 0x00, 0x01, 0x0b, 0x15, 0x00, 0x01, 0x0b, 0x15, 0x00, 0x01,
+ 0x0b, 0x15, 0x05, 0x01, 0x0b, 0x15, 0x00, 0x02, 0xe1, 0x6b, 0x57, 0xbc, 0x4e, 0xfe, 0x9a, 0x81,
+ 0x54, 0x2d, 0x7a, 0xfe, 0x32, 0x07, 0x07, 0x2d, 0xfe, 0x09, 0x6f, 0xb8, 0xfe, 0xca, 0x45, 0xfe,
+ 0x32, 0x12, 0x68, 0x6c, 0x8c, 0x6b, 0x7f, 0x26, 0xfe, 0x44, 0x07, 0x1b, 0x34, 0xfe, 0x0a, 0xf0,
+ 0xfe, 0x32, 0x07, 0x95, 0x86, 0x94, 0xfe, 0x5c, 0x07, 0x02, 0x23, 0x01, 0x4a, 0x02, 0xdb, 0x15,
+ 0x1e, 0x02, 0xdb, 0xfe, 0x9c, 0xf7, 0xdc, 0xfe, 0x2c, 0x90, 0xfe, 0xae, 0x90, 0x55, 0xfe, 0xca,
+ 0x07, 0x0c, 0x5f, 0x17, 0x60, 0x0a, 0x53, 0x59, 0x37, 0x21, 0x1f, 0x06, 0x11, 0xfe, 0x0e, 0x12,
+ 0x8e, 0xfe, 0x80, 0x80, 0x39, 0x1f, 0x69, 0x29, 0xfe, 0x06, 0x10, 0xfe, 0x83, 0xe7, 0xfe, 0x48,
+ 0x00, 0xaa, 0xfe, 0x03, 0x40, 0x0a, 0x53, 0x5a, 0x37, 0x01, 0xb1, 0xb6, 0xfe, 0x1f, 0x40, 0x13,
+ 0x61, 0x01, 0xf1, 0xfe, 0x08, 0x50, 0xfe, 0x8a, 0x50, 0xfe, 0x44, 0x51, 0xfe, 0xc6, 0x51, 0x89,
+ 0xfe, 0x08, 0x90, 0xfe, 0x8a, 0x90, 0x0c, 0x5d, 0x17, 0x5e, 0xfe, 0x0c, 0x90, 0xfe, 0x8e, 0x90,
+ 0xfe, 0x40, 0x50, 0xfe, 0xc2, 0x50, 0x0c, 0x3e, 0x17, 0x3f, 0xfe, 0x4a, 0x10, 0x0a, 0x08, 0x59,
+ 0xfe, 0x2a, 0x12, 0xfe, 0x2c, 0x90, 0xfe, 0xae, 0x90, 0x0c, 0x5f, 0x17, 0x60, 0x0a, 0x08, 0x5a,
+ 0x8c, 0x01, 0xb1, 0xfe, 0x1f, 0x80, 0x13, 0x61, 0xfe, 0x44, 0x90, 0xfe, 0xc6, 0x90, 0x0c, 0x40,
+ 0x17, 0x41, 0xfe, 0x08, 0x90, 0xfe, 0x8a, 0x90, 0x0c, 0x5d, 0x17, 0x5e, 0xfe, 0x40, 0x90, 0xfe,
+ 0xc2, 0x90, 0x0c, 0x3e, 0x17, 0x3f, 0x0c, 0x2e, 0x17, 0x3c, 0x20, 0x0c, 0x48, 0x0c, 0x62, 0x0a,
+ 0x53, 0x1e, 0x37, 0x2b, 0x0f, 0xfe, 0x4e, 0x11, 0x26, 0xfe, 0x52, 0x08, 0xfe, 0x9e, 0xf0, 0xfe,
+ 0x66, 0x08, 0xba, 0x19, 0x34, 0x2b, 0x76, 0xe6, 0xc5, 0xfe, 0x8a, 0x08, 0xc6, 0xfe, 0xa8, 0x08,
+ 0x94, 0xfe, 0x7e, 0x08, 0xfe, 0x06, 0xf0, 0xfe, 0x84, 0x08, 0x95, 0x86, 0x02, 0x23, 0x01, 0x4a,
+ 0xfe, 0xc9, 0x10, 0x15, 0x1e, 0xfe, 0xc9, 0x10, 0x78, 0x08, 0x05, 0xeb, 0x78, 0x08, 0x09, 0x65,
+ 0x0a, 0x08, 0x09, 0xfe, 0x90, 0x12, 0xfe, 0x2e, 0x1c, 0x02, 0xfe, 0x08, 0x0b, 0x78, 0x08, 0x05,
+ 0x65, 0x78, 0x08, 0x09, 0xfe, 0x7a, 0x12, 0xfe, 0x2c, 0x1c, 0xfe, 0xaa, 0xf0, 0xfe, 0xc2, 0x09,
+ 0xfe, 0xac, 0xf0, 0xfe, 0xf0, 0x08, 0x02, 0xfe, 0xce, 0x09, 0xfe, 0xb7, 0xf0, 0xfe, 0xec, 0x08,
+ 0xfe, 0x02, 0xf6, 0x1a, 0x4e, 0xfe, 0x70, 0x18, 0xfe, 0xf1, 0x18, 0xfe, 0x40, 0x55, 0xfe, 0xe1,
+ 0x55, 0xfe, 0x10, 0x58, 0xfe, 0x91, 0x58, 0xfe, 0x14, 0x59, 0xfe, 0x95, 0x59, 0x1b, 0x85, 0xfe,
+ 0x8c, 0xf0, 0xfe, 0xec, 0x08, 0xfe, 0xac, 0xf0, 0xfe, 0xe0, 0x08, 0xb3, 0xfe, 0xcb, 0x10, 0xfe,
+ 0xad, 0xf0, 0xfe, 0xfc, 0x08, 0x02, 0xfe, 0x08, 0x0b, 0xb4, 0xfe, 0xbf, 0x10, 0xfe, 0x2b, 0xf0,
+ 0x85, 0xf5, 0x1d, 0xfe, 0x00, 0xfe, 0xec, 0xc0, 0xfe, 0xd2, 0xf0, 0x85, 0xfe, 0x76, 0x18, 0x1d,
+ 0x18, 0x19, 0x85, 0x03, 0xd2, 0x1d, 0x05, 0x19, 0x85, 0xc5, 0x49, 0xc6, 0x49, 0xb3, 0xb4, 0xfe,
+ 0x89, 0x10, 0x73, 0x66, 0x2c, 0x14, 0x9d, 0x01, 0x36, 0x10, 0xfe, 0x35, 0x00, 0xfe, 0x01, 0xf0,
+ 0x64, 0x10, 0x80, 0x02, 0x64, 0xfe, 0x98, 0x80, 0xc3, 0x09, 0xfe, 0x1a, 0x12, 0x4f, 0xfe, 0x19,
+ 0x82, 0xfe, 0x6c, 0x18, 0xfe, 0x44, 0x54, 0xbc, 0xfe, 0x19, 0x81, 0xfe, 0x74, 0x18, 0x90, 0x91,
+ 0x19, 0xfe, 0xbe, 0x08, 0x02, 0x49, 0x0a, 0x08, 0x59, 0xee, 0x03, 0x2e, 0x28, 0x3c, 0x0c, 0x40,
+ 0x17, 0x41, 0x9b, 0x2e, 0x9c, 0x3c, 0xfe, 0x6c, 0x18, 0xfe, 0xed, 0x18, 0xfe, 0x44, 0x54, 0xfe,
+ 0xe5, 0x54, 0x3a, 0x40, 0x3b, 0x41, 0x03, 0x48, 0x28, 0x62, 0x90, 0xfe, 0xe3, 0x54, 0xfe, 0x74,
+ 0x18, 0xfe, 0xf5, 0x18, 0x90, 0xfe, 0xe3, 0x54, 0x91, 0xbe, 0x55, 0xfe, 0xbe, 0x08, 0x02, 0x49,
+ 0xfe, 0x37, 0xf0, 0xfe, 0xca, 0x09, 0xfe, 0x8b, 0xf0, 0xfe, 0x50, 0x09, 0x02, 0x49, 0xfe, 0x98,
+ 0x80, 0xc3, 0x09, 0x22, 0xfe, 0xea, 0x0a, 0x3a, 0x48, 0x3b, 0x62, 0x55, 0xfe, 0x2e, 0x0a, 0x0f,
+ 0xfe, 0xc0, 0x07, 0x42, 0x98, 0x00, 0xed, 0xfe, 0x01, 0x59, 0xfe, 0x52, 0xf0, 0xfe, 0xfc, 0x09,
+ 0x90, 0x7a, 0xfe, 0x14, 0x0a, 0x3a, 0x48, 0x90, 0xfe, 0xe3, 0x54, 0x56, 0x48, 0x7d, 0x62, 0xfe,
+ 0x14, 0x58, 0xfe, 0x95, 0x58, 0x02, 0x49, 0x3a, 0x48, 0x3b, 0x62, 0xfe, 0x14, 0x59, 0xfe, 0x95,
+ 0x59, 0xbc, 0x56, 0x48, 0x56, 0x62, 0x02, 0x49, 0x0a, 0x08, 0x59, 0xfe, 0x82, 0x12, 0x0a, 0x08,
+ 0x1e, 0xfe, 0x66, 0x13, 0x21, 0x61, 0xb5, 0xfe, 0x03, 0xa1, 0xfe, 0x83, 0x80, 0xfe, 0xc8, 0x44,
+ 0xfe, 0x2e, 0x13, 0xfe, 0x04, 0x91, 0xfe, 0x86, 0x91, 0x69, 0x29, 0xfe, 0x40, 0x59, 0xfe, 0xc1,
+ 0x59, 0x55, 0xdf, 0x03, 0x5f, 0x28, 0x60, 0x0c, 0x7f, 0x17, 0x80, 0x56, 0x5f, 0x7d, 0x60, 0x01,
+ 0xb1, 0xb6, 0x69, 0x29, 0x13, 0x61, 0x9b, 0x2e, 0x9c, 0x3c, 0x3a, 0x40, 0x3b, 0x41, 0x91, 0xbe,
+ 0xfe, 0x04, 0xfa, 0x2e, 0xfe, 0x05, 0xfa, 0x3c, 0x01, 0xf1, 0xfe, 0x36, 0x10, 0x20, 0x0c, 0x7f,
+ 0x0c, 0x80, 0x3a, 0x40, 0x3b, 0x41, 0xfe, 0x12, 0x10, 0x0a, 0x08, 0x1e, 0x19, 0xdf, 0x3a, 0x3e,
+ 0x3b, 0x3f, 0x0a, 0x08, 0xfe, 0xf7, 0x00, 0x37, 0x03, 0x5d, 0x28, 0x5e, 0xfe, 0x10, 0x58, 0xfe,
+ 0x91, 0x58, 0x56, 0x48, 0x7d, 0x62, 0x02, 0xfe, 0xe4, 0x09, 0x0a, 0x08, 0x1e, 0x19, 0xdf, 0x0a,
+ 0x08, 0xfe, 0xf7, 0x00, 0x37, 0xbc, 0xfe, 0x19, 0x81, 0x4e, 0xfe, 0x10, 0x90, 0xfe, 0x92, 0x90,
+ 0xfe, 0xd3, 0x10, 0x32, 0x06, 0xa6, 0x19, 0xfe, 0xf8, 0x08, 0x12, 0xa6, 0xfe, 0x98, 0x80, 0xc3,
+ 0x09, 0xfe, 0x14, 0x13, 0x03, 0x3e, 0x28, 0x3f, 0x55, 0xfe, 0xf8, 0x08, 0xfe, 0x0c, 0x58, 0xfe,
+ 0x8d, 0x58, 0x02, 0x49, 0x20, 0x42, 0xfe, 0x19, 0x80, 0xe7, 0x0a, 0x08, 0x09, 0xfe, 0x1a, 0x12,
+ 0xf8, 0xfe, 0x19, 0x41, 0xf5, 0xc0, 0xfe, 0xd1, 0xf0, 0xe1, 0x14, 0x7e, 0x01, 0x36, 0x10, 0xfe,
+ 0x44, 0x00, 0xfe, 0x8e, 0x10, 0xf8, 0x56, 0x3e, 0xfe, 0xed, 0x19, 0x7d, 0x3f, 0xfe, 0x0c, 0x51,
+ 0xfe, 0x8e, 0x51, 0xf5, 0x1d, 0xfe, 0x00, 0xff, 0x35, 0xfe, 0x74, 0x10, 0xc0, 0xfe, 0xd2, 0xf0,
+ 0xfe, 0x96, 0x0b, 0xfe, 0x76, 0x18, 0x1d, 0x18, 0x8b, 0x03, 0xd2, 0x1d, 0x05, 0xfe, 0x08, 0x13,
+ 0x10, 0xfe, 0x16, 0x00, 0x02, 0x64, 0xfe, 0xd1, 0xf0, 0xfe, 0xa8, 0x0b, 0x14, 0x7e, 0x01, 0x36,
+ 0x10, 0xfe, 0x17, 0x00, 0xfe, 0x42, 0x10, 0xfe, 0xce, 0xf0, 0xfe, 0xae, 0x0b, 0xfe, 0x3c, 0x10,
+ 0xfe, 0xcd, 0xf0, 0xfe, 0xba, 0x0b, 0x10, 0xfe, 0x22, 0x00, 0x02, 0x64, 0xfe, 0xcb, 0xf0, 0xfe,
+ 0xc6, 0x0b, 0x10, 0xfe, 0x24, 0x00, 0x02, 0x64, 0xfe, 0xd0, 0xf0, 0xfe, 0xd0, 0x0b, 0x10, 0x9e,
+ 0xe4, 0xfe, 0xcf, 0xf0, 0xfe, 0xda, 0x0b, 0x10, 0x57, 0xfe, 0x10, 0x10, 0xfe, 0xcc, 0xf0, 0xe1,
+ 0xfe, 0x84, 0x80, 0xc3, 0x1e, 0x4c, 0x10, 0xfe, 0x12, 0x00, 0x2b, 0x0f, 0xfe, 0x4e, 0x11, 0x26,
+ 0xfe, 0xf0, 0x0b, 0xfe, 0x9e, 0xf0, 0xfe, 0x04, 0x0c, 0xba, 0x19, 0x34, 0x2b, 0x76, 0xe6, 0xc5,
+ 0x23, 0xc6, 0x23, 0x2b, 0xfc, 0x26, 0xfe, 0x10, 0x0c, 0x1b, 0x34, 0x94, 0xfe, 0x2c, 0x0c, 0x95,
+ 0x86, 0xc5, 0xdc, 0xc6, 0xdc, 0x02, 0x23, 0x01, 0x4a, 0xfe, 0xdb, 0x10, 0x12, 0xfe, 0xe8, 0x00,
+ 0xb3, 0xb4, 0x73, 0xc7, 0x81, 0xc8, 0x83, 0xfe, 0x89, 0xf0, 0x23, 0x33, 0x31, 0xe0, 0xc7, 0x81,
+ 0xc8, 0x83, 0x26, 0xfe, 0x56, 0x0c, 0x1c, 0x23, 0x33, 0x31, 0xde, 0xba, 0x65, 0x10, 0xfe, 0x42,
+ 0x00, 0x02, 0x64, 0x7c, 0x05, 0xfe, 0x81, 0x49, 0xfe, 0xa2, 0x12, 0x0a, 0x08, 0x09, 0xfe, 0x44,
+ 0x13, 0x10, 0x00, 0x54, 0x09, 0xfe, 0x54, 0x12, 0x54, 0xfe, 0x28, 0x00, 0x22, 0xfe, 0x88, 0x0d,
+ 0x07, 0x3d, 0x01, 0x0e, 0x06, 0x00, 0x4d, 0x44, 0xfe, 0x28, 0x00, 0xfe, 0xe2, 0x10, 0x01, 0xf6,
+ 0x01, 0xf7, 0x07, 0xa4, 0x01, 0xfe, 0x0a, 0x0f, 0x63, 0x12, 0x2f, 0x01, 0x72, 0x02, 0x2a, 0x10,
+ 0xfe, 0x44, 0x00, 0x54, 0x09, 0xe9, 0x44, 0x09, 0xfe, 0xb4, 0x10, 0x01, 0xae, 0x44, 0x09, 0xfe,
+ 0xaa, 0x10, 0x01, 0xae, 0xfe, 0x19, 0x82, 0xfe, 0x34, 0x46, 0xab, 0x44, 0x09, 0x10, 0xfe, 0x43,
+ 0x00, 0xfe, 0x96, 0x10, 0x0a, 0x53, 0x09, 0x37, 0x01, 0xf6, 0x01, 0xf7, 0x63, 0x12, 0x2f, 0x01,
+ 0x72, 0x99, 0x09, 0x63, 0x50, 0xc2, 0x02, 0xfe, 0x36, 0x03, 0x0a, 0x08, 0x09, 0x8b, 0x44, 0x09,
+ 0x10, 0x00, 0xfe, 0x5c, 0x10, 0x78, 0x08, 0x1a, 0xfe, 0x58, 0x12, 0x0a, 0x08, 0x1a, 0xfe, 0x50,
+ 0x13, 0xfe, 0x1c, 0x1c, 0xfe, 0x9d, 0xf0, 0xfe, 0x3e, 0x0d, 0xfe, 0x1c, 0x1c, 0xfe, 0x9d, 0xf0,
+ 0xfe, 0x44, 0x0d, 0x0a, 0x53, 0x1a, 0x37, 0xfe, 0xa9, 0x10, 0x10, 0xfe, 0x15, 0x00, 0xfe, 0x04,
+ 0xe6, 0x09, 0x4e, 0xfe, 0x2e, 0x10, 0x10, 0xfe, 0x13, 0x00, 0xfe, 0x10, 0x10, 0x10, 0x6e, 0xaa,
+ 0x10, 0xfe, 0x41, 0x00, 0x88, 0x10, 0xfe, 0x24, 0x00, 0x8d, 0xb3, 0xb4, 0x73, 0x03, 0x6f, 0x27,
+ 0x22, 0xd8, 0x4e, 0xfe, 0x04, 0xe6, 0x1a, 0xfe, 0x9d, 0x41, 0xfe, 0x1c, 0x42, 0x63, 0x01, 0xe2,
+ 0x02, 0x2a, 0xfa, 0x14, 0x09, 0x39, 0xa0, 0xb2, 0x14, 0xfe, 0x31, 0x00, 0x39, 0xa2, 0x01, 0xe5,
+ 0x02, 0xd7, 0x50, 0xfe, 0x06, 0xec, 0xd0, 0xfe, 0x0e, 0x47, 0x44, 0x2d, 0xfe, 0xce, 0x45, 0x35,
+ 0x50, 0xfe, 0x06, 0xea, 0xd0, 0xfe, 0x47, 0x4b, 0x92, 0xfe, 0x75, 0x57, 0x03, 0x5c, 0xfe, 0x98,
+ 0x56, 0xfe, 0x2e, 0x12, 0x07, 0x3d, 0x01, 0x0e, 0x42, 0xfe, 0x41, 0x58, 0x07, 0xa4, 0x01, 0x0e,
+ 0xfe, 0x49, 0x54, 0x96, 0xfe, 0x02, 0x0e, 0x07, 0x47, 0x01, 0x0e, 0xfe, 0x44, 0x48, 0x02, 0xfe,
+ 0x36, 0x03, 0x07, 0x5c, 0xfe, 0xee, 0x14, 0xfe, 0x0e, 0x47, 0x44, 0x2d, 0xfe, 0xce, 0x45, 0x35,
+ 0x50, 0xfe, 0xce, 0x47, 0xfe, 0xb7, 0x13, 0x02, 0x2a, 0x21, 0x1f, 0x06, 0x11, 0xfe, 0x9e, 0x12,
+ 0x20, 0x13, 0x58, 0x13, 0x9f, 0x13, 0xd5, 0x21, 0x2f, 0x42, 0x39, 0x2f, 0xba, 0xed, 0xfe, 0xbc,
+ 0xf0, 0xfe, 0xc4, 0x0e, 0x0f, 0x05, 0x13, 0x58, 0x01, 0xfe, 0xb8, 0x16, 0x03, 0xfe, 0x38, 0x01,
+ 0x28, 0xfe, 0x3a, 0x01, 0x55, 0xfe, 0xc8, 0x0e, 0xfe, 0x02, 0xec, 0xd5, 0x68, 0x00, 0x4d, 0xfe,
+ 0x04, 0xec, 0x1f, 0x67, 0xfe, 0x05, 0xf6, 0xfe, 0x34, 0x01, 0x01, 0xfe, 0x28, 0x17, 0xfe, 0x08,
+ 0x90, 0xfe, 0x48, 0xf4, 0x0d, 0xfe, 0x18, 0x13, 0xb8, 0xfe, 0x02, 0xea, 0xd5, 0x68, 0x7e, 0xfe,
+ 0xc5, 0x13, 0x14, 0x1a, 0x39, 0xa0, 0xb2, 0xfe, 0x2e, 0x10, 0x03, 0xfe, 0x38, 0x01, 0x1d, 0xfe,
+ 0xf0, 0xff, 0x0c, 0xfe, 0x60, 0x01, 0x03, 0xfe, 0x3a, 0x01, 0x0c, 0xfe, 0x62, 0x01, 0x43, 0x13,
+ 0x1f, 0x24, 0x05, 0x13, 0x2f, 0x12, 0x2f, 0xc2, 0x0f, 0x05, 0x04, 0x20, 0x04, 0x21, 0x58, 0xfe,
+ 0xf7, 0x12, 0x21, 0x9f, 0xb5, 0x13, 0x9f, 0x06, 0x7e, 0xfe, 0x71, 0x13, 0xfe, 0x24, 0x1c, 0x14,
+ 0x18, 0x39, 0xa0, 0xb2, 0xfe, 0xd9, 0x10, 0xc1, 0xfe, 0x03, 0xdc, 0xfe, 0x73, 0x57, 0xfe, 0x80,
+ 0x5d, 0x04, 0xc1, 0xfe, 0x03, 0xdc, 0xfe, 0x5b, 0x57, 0xfe, 0x80, 0x5d, 0x04, 0xfe, 0x03, 0x57,
+ 0xc1, 0x20, 0xfe, 0x00, 0xcc, 0x04, 0xfe, 0x03, 0x57, 0xc1, 0x77, 0x04, 0x0a, 0x08, 0x57, 0xfe,
+ 0x22, 0x13, 0xfe, 0x1c, 0x80, 0x06, 0x05, 0xfe, 0x1a, 0x13, 0xfe, 0x1e, 0x80, 0xef, 0xfe, 0x1d,
+ 0x80, 0xac, 0xfe, 0x0c, 0x90, 0xfe, 0x0e, 0x13, 0xfe, 0x0e, 0x90, 0xab, 0xfe, 0x3c, 0x90, 0xfe,
+ 0x30, 0xf4, 0x09, 0xfe, 0x3c, 0x50, 0x88, 0x01, 0xfe, 0x58, 0x17, 0x32, 0x06, 0x2f, 0x4d, 0x01,
+ 0xfe, 0x92, 0x16, 0xfe, 0x08, 0x10, 0x01, 0xf6, 0x01, 0xf7, 0x12, 0xfe, 0xe9, 0x00, 0x0a, 0x08,
+ 0x57, 0xfe, 0x2c, 0x13, 0x01, 0xfe, 0xea, 0x16, 0xfe, 0x1e, 0x1c, 0xfe, 0x14, 0x90, 0x0c, 0xfe,
+ 0x64, 0x01, 0xfe, 0x16, 0x90, 0x0c, 0xfe, 0x66, 0x01, 0x0a, 0x08, 0x5a, 0xfe, 0x12, 0x12, 0xfe,
+ 0x03, 0x80, 0x8e, 0xfe, 0x01, 0xec, 0x1f, 0xfe, 0x80, 0x40, 0x13, 0x1f, 0x69, 0x29, 0x12, 0xcf,
+ 0x63, 0x21, 0x1f, 0xfe, 0x00, 0x40, 0x79, 0x1f, 0x04, 0xfe, 0x08, 0x1c, 0x03, 0xfe, 0xac, 0x00,
+ 0xfe, 0x06, 0x58, 0x03, 0xfe, 0xae, 0x00, 0xfe, 0x07, 0x58, 0x03, 0xfe, 0xb0, 0x00, 0xfe, 0x08,
+ 0x58, 0x03, 0xfe, 0xb2, 0x00, 0xfe, 0x09, 0x58, 0xfe, 0x0a, 0x1c, 0x24, 0x6d, 0x13, 0xd0, 0x20,
+ 0x0c, 0x5b, 0x0c, 0x45, 0x0f, 0x3d, 0x51, 0x4e, 0x16, 0x2d, 0xfe, 0x90, 0x4d, 0xfe, 0x91, 0x54,
+ 0x22, 0xfe, 0xda, 0x0f, 0x44, 0x11, 0x0f, 0x47, 0x51, 0x16, 0x57, 0xfe, 0x90, 0x4d, 0xfe, 0x91,
+ 0x54, 0x22, 0xfe, 0xf0, 0x0f, 0x24, 0x11, 0x13, 0x1f, 0x7c, 0x6e, 0x67, 0x21, 0x1f, 0xfe, 0x00,
+ 0x40, 0x79, 0x1f, 0x12, 0xcf, 0xfe, 0x14, 0x56, 0xfe, 0xd6, 0xf0, 0x88, 0xfa, 0x73, 0xfe, 0x14,
+ 0x1c, 0xfe, 0x10, 0x1c, 0xfe, 0x18, 0x1c, 0x04, 0x50, 0xfe, 0x0c, 0x14, 0xfe, 0x0e, 0x47, 0xfe,
+ 0x07, 0xe6, 0x2d, 0xfe, 0xce, 0x47, 0xfe, 0xf5, 0x13, 0x04, 0x01, 0xae, 0x7c, 0x6e, 0x67, 0xfe,
+ 0x06, 0x80, 0xfe, 0x48, 0x47, 0xfe, 0x42, 0x13, 0x32, 0x06, 0x2f, 0xfe, 0x34, 0x13, 0x07, 0x47,
+ 0x01, 0x0e, 0xb9, 0xfe, 0x36, 0x12, 0xfe, 0x41, 0x48, 0xfe, 0x45, 0x48, 0x01, 0xf2, 0xfe, 0x00,
+ 0xcc, 0xb9, 0xfe, 0xf3, 0x13, 0x43, 0x77, 0x06, 0x11, 0xab, 0x07, 0x84, 0x01, 0x0e, 0xfe, 0x80,
+ 0x5c, 0x01, 0x72, 0xe3, 0x06, 0x82, 0x65, 0xfe, 0x14, 0x56, 0xfe, 0xd6, 0xf0, 0xfe, 0x3e, 0x10,
+ 0x04, 0xfe, 0x44, 0x58, 0x8e, 0xfe, 0x01, 0xec, 0xa2, 0xfe, 0x9e, 0x40, 0xfe, 0x9d, 0xe7, 0x00,
+ 0xfe, 0x9c, 0xe7, 0x1a, 0x79, 0x29, 0x01, 0xe2, 0xfe, 0xdd, 0x10, 0x2b, 0xc7, 0x81, 0xc8, 0x83,
+ 0x33, 0x31, 0xdd, 0x06, 0x1a, 0xfe, 0x48, 0x12, 0x06, 0x09, 0xfe, 0x56, 0x12, 0x06, 0x18, 0xfe,
+ 0x30, 0x12, 0x06, 0xc9, 0x19, 0xeb, 0x06, 0xfe, 0x23, 0x00, 0x19, 0xec, 0x06, 0x05, 0x19, 0xfe,
+ 0x7a, 0x12, 0x06, 0x1e, 0xfe, 0x12, 0x12, 0x06, 0x00, 0x19, 0x23, 0x14, 0xc9, 0x01, 0x36, 0xa9,
+ 0x2c, 0x01, 0x0b, 0x94, 0x4a, 0x04, 0x2c, 0xfe, 0x62, 0x08, 0x07, 0xd1, 0x01, 0xfe, 0x0a, 0x0f,
+ 0x12, 0x82, 0x02, 0x2a, 0x2c, 0x32, 0x06, 0xa6, 0xfe, 0xd9, 0x13, 0x3a, 0x3e, 0x3b, 0x3f, 0x55,
+ 0xfe, 0xce, 0x11, 0x0a, 0x08, 0x59, 0xfe, 0x72, 0x12, 0x9b, 0x2e, 0x9c, 0x3c, 0x91, 0xbe, 0x96,
+ 0xfe, 0x98, 0x11, 0x21, 0x61, 0xfe, 0x26, 0x13, 0x03, 0x7f, 0x28, 0x80, 0x55, 0xfe, 0x64, 0x0d,
+ 0x0c, 0x5f, 0x17, 0x60, 0x20, 0x0c, 0x7f, 0x0c, 0x80, 0x01, 0xb1, 0x24, 0x6d, 0x76, 0x13, 0x61,
+ 0x01, 0xf1, 0x9b, 0x2e, 0x9c, 0x3c, 0xfe, 0x04, 0x55, 0xfe, 0xa5, 0x55, 0xfe, 0x04, 0xfa, 0x2e,
+ 0xfe, 0x05, 0xfa, 0x3c, 0xfe, 0x91, 0x10, 0x03, 0x40, 0x28, 0x41, 0xfe, 0x40, 0x56, 0xfe, 0xe1,
+ 0x56, 0x0c, 0x40, 0x17, 0x41, 0x89, 0x9b, 0x2e, 0x9c, 0x3c, 0x91, 0xbe, 0x03, 0x5d, 0x28, 0x5e,
+ 0xfe, 0x00, 0x56, 0xfe, 0xa1, 0x56, 0x0c, 0x5d, 0x17, 0x5e, 0x0a, 0x08, 0x59, 0xfe, 0x1e, 0x12,
+ 0x21, 0x61, 0xfe, 0x1f, 0x40, 0x03, 0x5f, 0x28, 0x60, 0xfe, 0x2c, 0x50, 0xfe, 0xae, 0x50, 0x03,
+ 0x40, 0x28, 0x41, 0xfe, 0x44, 0x50, 0xfe, 0xc6, 0x50, 0x03, 0x5d, 0x28, 0x5e, 0xfe, 0x08, 0x50,
+ 0xfe, 0x8a, 0x50, 0x03, 0x3e, 0x28, 0x3f, 0xfe, 0x40, 0x50, 0xfe, 0xc2, 0x50, 0x02, 0x8a, 0x24,
+ 0x05, 0x13, 0xd4, 0x02, 0x71, 0x2c, 0x01, 0x0b, 0x1c, 0x4b, 0x33, 0x31, 0xdd, 0x06, 0x05, 0x22,
+ 0x4b, 0x32, 0x06, 0xa6, 0x22, 0x71, 0x01, 0xad, 0x1d, 0x43, 0x19, 0x4b, 0x0a, 0x08, 0x09, 0xf0,
+ 0x3a, 0x3e, 0x3b, 0x3f, 0xfe, 0x0a, 0x55, 0x35, 0xfe, 0x8b, 0x55, 0x56, 0x3e, 0x7d, 0x3f, 0xfe,
+ 0x0c, 0x51, 0xfe, 0x8e, 0x51, 0x02, 0x71, 0xfe, 0x19, 0x81, 0xb8, 0xfe, 0x19, 0x41, 0x02, 0x71,
+ 0x2c, 0x01, 0x0b, 0x1b, 0x34, 0x1c, 0xe8, 0x33, 0x31, 0xe0, 0x54, 0x18, 0xfe, 0xa6, 0x12, 0x54,
+ 0x09, 0x4c, 0x02, 0x4b, 0x01, 0x0b, 0x1b, 0x34, 0x1c, 0xe8, 0x33, 0x31, 0xde, 0x06, 0x18, 0x22,
+ 0x4b, 0x01, 0x0b, 0x1c, 0xe8, 0x33, 0x31, 0xfe, 0xe8, 0x09, 0xfe, 0xc2, 0x49, 0x4f, 0x03, 0xfe,
+ 0x9c, 0x00, 0x27, 0x8b, 0x52, 0x08, 0x1e, 0x35, 0xa9, 0xfe, 0xbb, 0x45, 0x54, 0x00, 0x65, 0x44,
+ 0x05, 0x7c, 0x43, 0xfe, 0xda, 0x14, 0x01, 0xad, 0x8d, 0xfe, 0x4b, 0x45, 0xf0, 0x32, 0x06, 0xa5,
+ 0xef, 0x03, 0xcd, 0x27, 0x8b, 0x03, 0x45, 0x27, 0x35, 0x66, 0x02, 0x71, 0xfe, 0xc0, 0x5d, 0xfe,
+ 0xf8, 0x14, 0xfe, 0x03, 0x17, 0x03, 0x5b, 0xbf, 0x0c, 0x5b, 0x66, 0x2c, 0x01, 0x0b, 0x25, 0x8a,
+ 0x01, 0xfe, 0x7c, 0x15, 0x02, 0x8a, 0x01, 0x0b, 0x1b, 0x34, 0x1c, 0x4b, 0x33, 0x31, 0xde, 0x06,
+ 0x05, 0x22, 0x4b, 0x01, 0xfe, 0x60, 0x14, 0xfe, 0x42, 0x58, 0xfe, 0x82, 0x14, 0xfe, 0xa4, 0x14,
+ 0x8d, 0xfe, 0x4a, 0xf4, 0x09, 0x19, 0x4b, 0xfe, 0x4a, 0xf4, 0x05, 0xea, 0x32, 0x06, 0xa5, 0x8c,
+ 0x02, 0x71, 0x03, 0x45, 0xbf, 0x0c, 0x45, 0x66, 0x2c, 0x01, 0x0b, 0x25, 0x8a, 0x01, 0xfe, 0xaa,
+ 0x15, 0x02, 0x8a, 0x0f, 0x05, 0x26, 0xfe, 0x9c, 0x13, 0x25, 0xfe, 0xb2, 0x13, 0x75, 0xfe, 0x89,
+ 0x48, 0x01, 0x0b, 0x20, 0x75, 0x04, 0x7b, 0xfe, 0xae, 0x13, 0x1b, 0xfe, 0xae, 0x13, 0x1c, 0xfe,
+ 0x9c, 0x13, 0x66, 0x2c, 0x01, 0x0b, 0xfe, 0xd5, 0x10, 0x0f, 0x70, 0xff, 0x02, 0x00, 0x57, 0x51,
+ 0x93, 0x1d, 0xfe, 0xff, 0x7f, 0xfe, 0x30, 0x56, 0xfe, 0x00, 0x5c, 0x04, 0x0f, 0x70, 0xff, 0x02,
+ 0x00, 0x57, 0x51, 0x93, 0x1d, 0x43, 0xfe, 0x30, 0x56, 0xfe, 0x00, 0x5c, 0x04, 0x0f, 0x70, 0xff,
+ 0x02, 0x00, 0x57, 0x51, 0x93, 0x04, 0x0f, 0x70, 0xff, 0x02, 0x00, 0x57, 0x51, 0x93, 0xfe, 0x0b,
+ 0x58, 0x04, 0x07, 0x5b, 0x01, 0x87, 0x07, 0x45, 0x01, 0x87, 0x04, 0xfe, 0x03, 0xa1, 0x1d, 0x11,
+ 0xff, 0x03, 0x00, 0x54, 0xfe, 0x00, 0xf4, 0x1e, 0x51, 0xfe, 0x00, 0x7d, 0xfe, 0x01, 0x7d, 0xfe,
+ 0x02, 0x7d, 0xfe, 0x03, 0x7c, 0x69, 0x29, 0x0c, 0x5d, 0x17, 0x5e, 0x56, 0x40, 0x7d, 0x41, 0x04,
+ 0xfe, 0x62, 0x08, 0xfe, 0x82, 0x4a, 0xfe, 0xe1, 0x1a, 0xfe, 0x83, 0x5a, 0x8e, 0x04, 0x01, 0xfe,
+ 0xe6, 0x18, 0xfe, 0x42, 0x48, 0x4e, 0x4f, 0x92, 0x01, 0x0b, 0x1c, 0xfe, 0x74, 0x15, 0x33, 0x31,
+ 0xe0, 0x01, 0x0b, 0x1c, 0xfe, 0x74, 0x15, 0x33, 0x31, 0xfe, 0xe8, 0x0a, 0xfe, 0xc1, 0x59, 0x03,
+ 0xcd, 0x27, 0xfe, 0xcc, 0x12, 0x52, 0x08, 0x1a, 0xfe, 0xc4, 0x13, 0x20, 0x68, 0x1a, 0xf0, 0x54,
+ 0xca, 0x6a, 0xfe, 0xba, 0x14, 0x4c, 0x0f, 0x05, 0x16, 0xca, 0x7c, 0x30, 0xfe, 0x78, 0x10, 0xff,
+ 0x02, 0x83, 0x55, 0xaa, 0xff, 0x02, 0x83, 0x55, 0x68, 0x18, 0xac, 0x98, 0xfe, 0x30, 0x00, 0x96,
+ 0xf3, 0x16, 0x6c, 0x0f, 0x05, 0xfe, 0x56, 0x10, 0x68, 0x09, 0xef, 0x98, 0xfe, 0x64, 0x00, 0x96,
+ 0xf3, 0x07, 0xfe, 0x64, 0x00, 0x16, 0x9e, 0x0f, 0x05, 0xfe, 0x28, 0x10, 0x68, 0x05, 0xfe, 0x60,
+ 0x13, 0x98, 0xfe, 0xc8, 0x00, 0x96, 0xf3, 0x07, 0xfe, 0xc8, 0x00, 0x16, 0x58, 0x0f, 0x05, 0x89,
+ 0x98, 0xfe, 0x90, 0x01, 0x7a, 0xfe, 0x20, 0x15, 0x92, 0xfe, 0x12, 0x10, 0xfe, 0x43, 0xf4, 0x9f,
+ 0xfe, 0x56, 0xf0, 0xfe, 0x32, 0x15, 0xfe, 0x04, 0xf4, 0x70, 0xfe, 0x43, 0xf4, 0x9e, 0xfe, 0xf3,
+ 0x10, 0xfe, 0x40, 0x5c, 0x01, 0xfe, 0xf4, 0x13, 0x1d, 0x43, 0xee, 0xfe, 0x00, 0x17, 0xfe, 0x4d,
+ 0xe4, 0x6d, 0x7a, 0xfe, 0x6e, 0x15, 0xc4, 0x6d, 0xfe, 0x1c, 0x10, 0xfe, 0x00, 0x17, 0xfe, 0x4d,
+ 0xe4, 0xcc, 0x7a, 0xfe, 0x6e, 0x15, 0xc4, 0xcc, 0x89, 0x4f, 0x20, 0xfe, 0x4d, 0xf4, 0x00, 0xe9,
+ 0x92, 0x0f, 0x05, 0xfe, 0xb4, 0x56, 0xfe, 0xc3, 0x58, 0x04, 0x4f, 0x0f, 0x09, 0x04, 0x15, 0x05,
+ 0x01, 0x0b, 0x25, 0xf4, 0x15, 0x09, 0x01, 0x0b, 0x25, 0xf4, 0x15, 0x18, 0x01, 0x0b, 0x25, 0xf4,
+ 0x75, 0xfe, 0x89, 0x49, 0x01, 0x0b, 0x04, 0x15, 0x05, 0x01, 0x0b, 0x25, 0xaf, 0x15, 0x18, 0x01,
+ 0x0b, 0x25, 0xaf, 0x15, 0x05, 0x01, 0x0b, 0x25, 0xaf, 0xfe, 0x89, 0x49, 0x01, 0x0b, 0x25, 0xaf,
+ 0x75, 0xfe, 0x89, 0x4a, 0x01, 0x0b, 0x04, 0x4f, 0x04, 0x21, 0xd3, 0x06, 0x05, 0xfe, 0x48, 0x13,
+ 0xb6, 0x13, 0xd3, 0xfe, 0x49, 0xf4, 0x00, 0x4c, 0x75, 0xa9, 0x66, 0xfe, 0x01, 0xec, 0xfe, 0x27,
+ 0x01, 0xfe, 0x89, 0x48, 0xff, 0x02, 0x00, 0x10, 0x26, 0xfe, 0x0c, 0x16, 0x32, 0x06, 0xfe, 0xe3,
+ 0x00, 0xfe, 0x20, 0x13, 0x1c, 0xfe, 0x30, 0x16, 0x20, 0x13, 0xd4, 0x01, 0x4a, 0x21, 0xd4, 0x06,
+ 0x05, 0x65, 0x0a, 0x53, 0x05, 0x37, 0x04, 0x07, 0x47, 0x01, 0x0e, 0xfe, 0x00, 0x40, 0x8f, 0x06,
+ 0x11, 0xac, 0x07, 0x84, 0x01, 0x0e, 0x8f, 0x07, 0x5c, 0x01, 0xa8, 0x04, 0x07, 0x84, 0x01, 0x0e,
+ 0x8f, 0xfe, 0x80, 0xe7, 0x11, 0x06, 0x11, 0x8b, 0xfe, 0x45, 0x58, 0x01, 0xf2, 0x8f, 0x04, 0x07,
+ 0x47, 0x01, 0x0e, 0x8f, 0x07, 0x5c, 0x01, 0xa8, 0x04, 0x07, 0x47, 0x01, 0x0e, 0xfe, 0x80, 0x80,
+ 0xfe, 0x80, 0x4c, 0xfe, 0x49, 0xe4, 0x11, 0xac, 0x07, 0x84, 0x01, 0x0e, 0xfe, 0x80, 0x4c, 0x07,
+ 0x5c, 0x01, 0x87, 0x04, 0x16, 0x11, 0x74, 0x6b, 0xfe, 0x60, 0x01, 0xfe, 0x18, 0xdf, 0xfe, 0x19,
+ 0xde, 0xfe, 0x24, 0x1c, 0xfe, 0x1d, 0xf7, 0x2d, 0x97, 0xfe, 0xcc, 0x16, 0x01, 0xfe, 0xd2, 0x17,
+ 0xed, 0x9a, 0x2d, 0x6b, 0xfe, 0x2c, 0x01, 0xfe, 0x2f, 0x19, 0x04, 0xb7, 0x22, 0xfe, 0xbc, 0x16,
+ 0xfe, 0xda, 0x10, 0x16, 0x11, 0x74, 0x03, 0xfe, 0x64, 0x01, 0xfe, 0x00, 0xf4, 0x1e, 0xfe, 0x18,
+ 0x58, 0x03, 0xfe, 0x66, 0x01, 0xfe, 0x19, 0x58, 0x9a, 0x1e, 0xfe, 0x3c, 0x90, 0xfe, 0x30, 0xf4,
+ 0x05, 0xfe, 0x3c, 0x50, 0x6b, 0xfe, 0x38, 0x00, 0xfe, 0x0f, 0x79, 0xfe, 0x1c, 0xf7, 0x1e, 0x97,
+ 0xfe, 0x16, 0x17, 0xfe, 0xb6, 0x14, 0x35, 0x04, 0xb7, 0x22, 0xfe, 0xee, 0x16, 0xfe, 0x9c, 0x10,
+ 0x16, 0x11, 0x74, 0xfe, 0x83, 0x5a, 0xfe, 0x18, 0xdf, 0xfe, 0x19, 0xde, 0xfe, 0x1d, 0xf7, 0x2e,
+ 0x97, 0xfe, 0x38, 0x17, 0xfe, 0x94, 0x14, 0xee, 0x9a, 0x2e, 0x6b, 0x1a, 0xfe, 0xaf, 0x19, 0xfe,
+ 0x98, 0xe7, 0x00, 0x04, 0xb7, 0x22, 0xfe, 0x2c, 0x17, 0xfe, 0x6c, 0x10, 0x16, 0x11, 0x74, 0xfe,
+ 0x30, 0xbc, 0xfe, 0xb2, 0xbc, 0x9a, 0xcb, 0x6b, 0x1a, 0xfe, 0x0f, 0x79, 0xfe, 0x1c, 0xf7, 0xcb,
+ 0x97, 0xfe, 0x70, 0x17, 0xfe, 0x5c, 0x14, 0x35, 0x04, 0xb7, 0x22, 0xfe, 0x5c, 0x17, 0xfe, 0x42,
+ 0x10, 0xfe, 0x02, 0xf6, 0x11, 0x74, 0xfe, 0x18, 0xfe, 0x5f, 0xfe, 0x19, 0xfe, 0x60, 0xfe, 0x03,
+ 0xa1, 0xfe, 0x1d, 0xf7, 0x5a, 0x97, 0xfe, 0x96, 0x17, 0xfe, 0x36, 0x14, 0xfe, 0x1c, 0x13, 0x9a,
+ 0x5a, 0x42, 0xfe, 0x83, 0x58, 0xfe, 0xaf, 0x19, 0xfe, 0x80, 0xe7, 0x11, 0xfe, 0x81, 0xe7, 0x11,
+ 0x12, 0xfe, 0xdd, 0x00, 0x69, 0x29, 0x04, 0x69, 0x29, 0xfe, 0x12, 0x45, 0x22, 0xfe, 0x86, 0x17,
+ 0x14, 0x05, 0x39, 0xa0, 0xb2, 0x02, 0x2a, 0xfe, 0x39, 0xf0, 0xfe, 0xda, 0x17, 0x20, 0x04, 0xfe,
+ 0x7e, 0x18, 0x1d, 0x18, 0x4d, 0x0f, 0x0d, 0x04, 0x74, 0x03, 0xd2, 0x1d, 0x05, 0xfe, 0xef, 0x12,
+ 0xfe, 0xe1, 0x10, 0x7c, 0x6e, 0x67, 0x32, 0x06, 0x2f, 0xfe, 0x3c, 0x13, 0xfe, 0x7e, 0x14, 0xfe,
+ 0x42, 0x13, 0x50, 0xc2, 0x07, 0x47, 0x01, 0x0e, 0xb9, 0xfe, 0x3e, 0x12, 0xfe, 0x41, 0x48, 0xfe,
+ 0x45, 0x48, 0x01, 0xf2, 0xfe, 0x00, 0xcc, 0xb9, 0xfe, 0xf3, 0x13, 0x43, 0x77, 0x06, 0x11, 0xab,
+ 0x07, 0x84, 0x01, 0x0e, 0xfe, 0x80, 0x4c, 0x01, 0x72, 0xfe, 0x16, 0x10, 0x06, 0x82, 0x8c, 0xfe,
+ 0x3c, 0x14, 0xfe, 0x24, 0x12, 0xfe, 0x14, 0x56, 0xfe, 0xd6, 0xf0, 0xfe, 0xfa, 0x17, 0x16, 0x09,
+ 0x04, 0xfe, 0x9c, 0xe7, 0x09, 0x10, 0xfe, 0x15, 0x00, 0x63, 0x79, 0x29, 0x01, 0xe2, 0x16, 0x05,
+ 0x04, 0x0a, 0x53, 0x2d, 0x37, 0x12, 0x2f, 0x01, 0x72, 0x16, 0x05, 0x04, 0xfe, 0x38, 0x90, 0xfe,
+ 0xba, 0x90, 0x3a, 0xce, 0x3b, 0xcf, 0xfe, 0x48, 0x55, 0x35, 0xfe, 0xc9, 0x55, 0x04, 0x21, 0xa3,
+ 0x76, 0x13, 0xa3, 0x04, 0x07, 0xa4, 0x01, 0x0e, 0xfe, 0x41, 0x48, 0x07, 0x3d, 0x01, 0x0e, 0xfe,
+ 0x49, 0x44, 0x19, 0xfe, 0xc2, 0x18, 0x76, 0x77, 0x04, 0x07, 0x47, 0x01, 0x0e, 0x06, 0x11, 0x65,
+ 0x07, 0x5c, 0x01, 0xa8, 0x07, 0x3d, 0x01, 0x0e, 0x76, 0x77, 0x04, 0xfe, 0x4e, 0xe4, 0x18, 0x6a,
+ 0xfe, 0xf6, 0x18, 0x03, 0xfe, 0x90, 0x00, 0xfe, 0x3a, 0x45, 0xfe, 0x2c, 0x10, 0xfe, 0x4e, 0xe4,
+ 0xc9, 0x6a, 0xfe, 0x08, 0x19, 0x03, 0xfe, 0x92, 0x00, 0xfe, 0x02, 0xe6, 0x1a, 0xe4, 0xfe, 0x4e,
+ 0xe4, 0xfe, 0x0b, 0x00, 0x6a, 0xfe, 0x1a, 0x19, 0x03, 0xfe, 0x94, 0x00, 0xfe, 0x02, 0xe6, 0x1e,
+ 0xfe, 0x08, 0x10, 0x03, 0xfe, 0x96, 0x00, 0xfe, 0x02, 0xe6, 0x6c, 0xfe, 0x4e, 0x45, 0xea, 0xb8,
+ 0xff, 0x04, 0x68, 0x54, 0xe7, 0x1d, 0x6d, 0xfe, 0x08, 0x1c, 0xfe, 0x67, 0x19, 0xfe, 0x0a, 0x1c,
+ 0xfe, 0x1a, 0xf4, 0xfe, 0x00, 0x04, 0xea, 0xfe, 0x48, 0xf4, 0x18, 0x7a, 0xfe, 0x4e, 0x19, 0x0f,
+ 0x18, 0x04, 0x06, 0x7e, 0xfe, 0x5a, 0xf0, 0xfe, 0x5e, 0x19, 0x24, 0xfe, 0x09, 0x00, 0xfe, 0x34,
+ 0x10, 0x06, 0x1a, 0xfe, 0x5a, 0xf0, 0xf8, 0x24, 0xca, 0xe5, 0x06, 0x18, 0x4d, 0x24, 0x6c, 0xe4,
+ 0x06, 0x09, 0x4d, 0x24, 0x9e, 0xe3, 0x06, 0x05, 0x4d, 0x24, 0x58, 0xa9, 0xb6, 0x04, 0x14, 0xfe,
+ 0x09, 0x00, 0x01, 0x36, 0xfe, 0x04, 0xfe, 0x81, 0x03, 0x83, 0xfe, 0x40, 0x5c, 0x04, 0x1b, 0xf9,
+ 0xfe, 0x14, 0xf0, 0x0b, 0x26, 0xfe, 0xb0, 0x19, 0x1b, 0xf9, 0x7b, 0xf9, 0xfe, 0x82, 0xf0, 0xfe,
+ 0xb4, 0x19, 0x04, 0xff, 0xdf, 0x00, 0x00,
};
STATIC unsigned short _adv_asc38C0800_size =
- sizeof(_adv_asc38C0800_buf); /* 0x14F1 */
+ sizeof(_adv_asc38C0800_buf); /* 0x14C7 */
STATIC ADV_DCNT _adv_asc38C0800_chksum =
- 0x053503A5; /* Expanded checksum. */
+ 0x0505BAF2UL; /* Expanded little-endian checksum. */
+
+
+STATIC unsigned char _adv_asc38C1600_buf[] = {
+ 0x00, 0x00, 0x00, 0xf2, 0x00, 0xfc, 0x00, 0x16, 0x00, 0xf0, 0x01, 0x00, 0xe6, 0x1b, 0x48, 0xe4,
+ 0x18, 0xe4, 0x03, 0xf6, 0x02, 0x00, 0x18, 0x80, 0x00, 0xfa, 0xff, 0xff, 0x04, 0x00, 0x00, 0xf6,
+ 0x09, 0xe7, 0x82, 0xe7, 0x85, 0xf0, 0x86, 0xf0, 0xe8, 0x0e, 0x9e, 0xe7, 0xff, 0x00, 0x55, 0xf0,
+ 0x01, 0xf6, 0x03, 0x00, 0x98, 0x57, 0x01, 0xe6, 0x00, 0xea, 0x00, 0xec, 0x18, 0xf4, 0x01, 0xfa,
+ 0x08, 0x00, 0xd2, 0x1b, 0x38, 0x54, 0x32, 0xf0, 0x70, 0x0d, 0x1e, 0xf0, 0xd5, 0xf0, 0xbc, 0x00,
+ 0x4b, 0xe4, 0x00, 0xe6, 0xb1, 0xf0, 0xb4, 0x00, 0x02, 0x13, 0x06, 0x13, 0x3e, 0x1c, 0x3e, 0x00,
+ 0xd8, 0x01, 0x00, 0x10, 0x0c, 0x1c, 0x00, 0x57, 0x00, 0x80, 0x02, 0x80, 0x1b, 0x80, 0x01, 0xfc,
+ 0x10, 0x00, 0x6a, 0x0d, 0xe0, 0x10, 0xb9, 0x54, 0xf2, 0x13, 0x18, 0x40, 0xbd, 0x56, 0x03, 0xe6,
+ 0x01, 0xea, 0x5c, 0xf0, 0x0f, 0x00, 0x20, 0x00, 0xc0, 0x00, 0x6c, 0x01, 0x6e, 0x01, 0x98, 0x10,
+ 0x04, 0x12, 0x04, 0x13, 0xbb, 0x55, 0x3c, 0x56, 0x03, 0x58, 0x4a, 0xe4, 0x40, 0x00, 0xb6, 0x00,
+ 0xbb, 0x00, 0x00, 0x01, 0x01, 0x01, 0x3e, 0x01, 0x7c, 0x09, 0x08, 0x12, 0x0a, 0x12, 0x4c, 0x1c,
+ 0x3e, 0x57, 0x30, 0xe4, 0x05, 0xe6, 0x0c, 0x00, 0x3c, 0x00, 0x80, 0x00, 0x24, 0x01, 0x3c, 0x01,
+ 0x68, 0x01, 0x6a, 0x01, 0x70, 0x01, 0x72, 0x01, 0x74, 0x01, 0x76, 0x01, 0x78, 0x01, 0x7c, 0x01,
+ 0x62, 0x0a, 0x74, 0x0d, 0x0c, 0x10, 0xea, 0x10, 0xec, 0x10, 0x22, 0x18, 0x4e, 0x1c, 0x02, 0x4a,
+ 0x3a, 0x55, 0x02, 0xee, 0x5b, 0xf0, 0x03, 0xf7, 0x06, 0xf7, 0x03, 0xfc, 0x06, 0x00, 0x1e, 0x00,
+ 0xbe, 0x00, 0xe1, 0x00, 0xde, 0x0e, 0x24, 0x18, 0x78, 0x18, 0x30, 0x1c, 0x32, 0x1c, 0x38, 0x1c,
+ 0x10, 0x44, 0x02, 0x48, 0x00, 0x4c, 0xb0, 0x57, 0x04, 0x80, 0x4d, 0xe4, 0x04, 0xea, 0x5d, 0xf0,
+ 0xa7, 0xf0, 0x04, 0xf6, 0x02, 0xfc, 0x05, 0x00, 0x09, 0x00, 0x19, 0x00, 0x32, 0x00, 0x33, 0x00,
+ 0x34, 0x00, 0x36, 0x00, 0x98, 0x00, 0x9e, 0x00, 0xcc, 0x00, 0x20, 0x01, 0x4e, 0x01, 0x79, 0x01,
+ 0xac, 0x08, 0x32, 0x0c, 0x02, 0x10, 0x04, 0x10, 0x12, 0x10, 0x0c, 0x12, 0x0a, 0x13, 0x6a, 0x14,
+ 0x7a, 0x14, 0x56, 0x17, 0x00, 0x4e, 0x00, 0x54, 0x00, 0xdc, 0x05, 0xf0, 0x09, 0xf0, 0x59, 0xf0,
+ 0xb8, 0xf0, 0x48, 0xf4, 0x0e, 0xf7, 0x0a, 0x00, 0x9b, 0x00, 0x9c, 0x00, 0xa4, 0x00, 0xb5, 0x00,
+ 0xba, 0x00, 0xd0, 0x00, 0xe7, 0x00, 0xe6, 0x03, 0x69, 0x08, 0xe9, 0x09, 0x2a, 0x0b, 0xd4, 0x0e,
+ 0x0a, 0x10, 0x0e, 0x10, 0x12, 0x13, 0x94, 0x14, 0xc8, 0x17, 0xc0, 0x19, 0x24, 0x1b, 0x20, 0x1c,
+ 0x34, 0x1c, 0x36, 0x1c, 0x08, 0x44, 0x38, 0x44, 0x91, 0x44, 0x0a, 0x45, 0x48, 0x46, 0x89, 0x48,
+ 0x68, 0x54, 0x83, 0x55, 0x01, 0x58, 0x83, 0x59, 0x40, 0x5c, 0x06, 0x83, 0x31, 0xe4, 0x02, 0xe6,
+ 0x07, 0xf0, 0x08, 0xf0, 0x0b, 0xf0, 0x0c, 0xf0, 0x4b, 0xf4, 0x04, 0xf8, 0x05, 0xf8, 0x02, 0xfa,
+ 0x03, 0xfa, 0x04, 0xfc, 0x05, 0xfc, 0x07, 0x00, 0xa8, 0x00, 0xaa, 0x00, 0xb9, 0x00, 0xe0, 0x00,
+ 0xe5, 0x00, 0x22, 0x01, 0x26, 0x01, 0x60, 0x01, 0x7a, 0x01, 0x82, 0x01, 0xc8, 0x01, 0xca, 0x01,
+ 0x84, 0x02, 0x6a, 0x03, 0xe2, 0x04, 0x4e, 0x07, 0x68, 0x08, 0x86, 0x09, 0xda, 0x0b, 0xfa, 0x0e,
+ 0x06, 0x10, 0x1a, 0x10, 0xed, 0x10, 0xf1, 0x10, 0xf3, 0x10, 0xf4, 0x10, 0x06, 0x12, 0x0e, 0x13,
+ 0x10, 0x13, 0x16, 0x13, 0x1e, 0x13, 0xc4, 0x14, 0x90, 0x15, 0xfe, 0x9c, 0xf0, 0x30, 0x04, 0xfe,
+ 0x9a, 0x0d, 0xff, 0x10, 0x00, 0x00, 0xe7, 0xfe, 0x00, 0x1c, 0x00, 0xe6, 0xfe, 0x88, 0x01, 0xff,
+ 0x03, 0x00, 0x00, 0xfe, 0x02, 0x15, 0xfe, 0x0c, 0x05, 0xff, 0x38, 0x00, 0x00, 0xfe, 0x57, 0x24,
+ 0x00, 0xfe, 0x4c, 0x00, 0x5d, 0xff, 0x04, 0x00, 0x00, 0x16, 0xff, 0x09, 0x00, 0x00, 0xff, 0x08,
+ 0x01, 0x01, 0xff, 0x08, 0xff, 0xff, 0xff, 0x27, 0x00, 0x00, 0xff, 0x10, 0xff, 0xff, 0xff, 0x13,
+ 0x00, 0x00, 0xfe, 0x78, 0x56, 0xfe, 0x34, 0x12, 0xff, 0x21, 0x00, 0x00, 0xfe, 0x04, 0xf7, 0xe6,
+ 0x32, 0x74, 0x0a, 0x01, 0xfe, 0x88, 0x0f, 0xfe, 0x04, 0xf7, 0xe6, 0x74, 0x0a, 0x58, 0x32, 0xfe,
+ 0x3d, 0xf0, 0xfe, 0x0a, 0x02, 0xfe, 0x20, 0xf0, 0xb3, 0xfe, 0x91, 0xf0, 0xfe, 0xf8, 0x01, 0xfe,
+ 0x90, 0xf0, 0xfe, 0xf8, 0x01, 0xfe, 0x8f, 0xf0, 0xb3, 0x02, 0x5f, 0x48, 0x04, 0xfe, 0xb6, 0x0d,
+ 0x01, 0xfe, 0x18, 0x0e, 0xfe, 0xdd, 0x12, 0xfe, 0xfc, 0x10, 0xfe, 0x28, 0x1c, 0x02, 0xfe, 0xa6,
+ 0x00, 0xfe, 0xd3, 0x12, 0x3b, 0x1f, 0xfe, 0xa6, 0x00, 0xca, 0xfe, 0x48, 0xf0, 0xfe, 0x8e, 0x02,
+ 0xfe, 0x49, 0xf0, 0xfe, 0xa8, 0x02, 0xfe, 0x4a, 0xf0, 0xfe, 0xc6, 0x02, 0xfe, 0x46, 0xf0, 0xfe,
+ 0x58, 0x02, 0xfe, 0x47, 0xf0, 0xfe, 0x5e, 0x02, 0xfe, 0x43, 0xf0, 0xfe, 0x4c, 0x02, 0xfe, 0x44,
+ 0xf0, 0xfe, 0x50, 0x02, 0xfe, 0x45, 0xf0, 0xfe, 0x54, 0x02, 0x18, 0x0a, 0x9b, 0x18, 0x05, 0x1f,
+ 0xae, 0x04, 0x30, 0xfe, 0x00, 0x1c, 0xf3, 0xfe, 0x02, 0x1c, 0xf2, 0xfe, 0x1e, 0x1c, 0xfe, 0xe9,
+ 0x10, 0x01, 0xfe, 0x34, 0x1a, 0xfe, 0xe7, 0x10, 0xfe, 0x06, 0xfc, 0xdc, 0x09, 0x78, 0x01, 0xb7,
+ 0x04, 0x30, 0x1b, 0x8e, 0x40, 0xaf, 0x01, 0xfe, 0x22, 0x10, 0x09, 0x78, 0x01, 0x7a, 0xfe, 0xbd,
+ 0x10, 0x09, 0x78, 0x01, 0x7a, 0xfe, 0xad, 0x10, 0xfe, 0x16, 0x1c, 0xfe, 0x58, 0x1c, 0x18, 0x05,
+ 0x1f, 0xae, 0x32, 0x25, 0x30, 0xfe, 0x3d, 0xf0, 0xfe, 0x0a, 0x02, 0x26, 0xfe, 0x9c, 0x02, 0xfe,
+ 0x5a, 0x1c, 0xfe, 0x12, 0x1c, 0xfe, 0x14, 0x1c, 0x1b, 0xfe, 0x30, 0x00, 0x40, 0xaf, 0x01, 0x9c,
+ 0x18, 0x05, 0x1f, 0xae, 0x04, 0xe7, 0x1d, 0x27, 0x07, 0x16, 0x2c, 0xfe, 0x69, 0x10, 0x18, 0x05,
+ 0x1f, 0xae, 0xfe, 0x04, 0xec, 0x27, 0x6f, 0x34, 0x1c, 0x27, 0xfe, 0x05, 0xf6, 0xdc, 0x01, 0xfe,
+ 0x66, 0x19, 0x0b, 0x59, 0x43, 0x3d, 0x11, 0x50, 0x58, 0xcd, 0x01, 0xfe, 0x9e, 0x18, 0x04, 0x30,
+ 0x09, 0x44, 0x01, 0x14, 0x07, 0x00, 0x2d, 0x01, 0x7c, 0xfe, 0x20, 0x10, 0x09, 0xb1, 0x01, 0x14,
+ 0xfe, 0x41, 0x58, 0x09, 0x44, 0x01, 0x14, 0xfe, 0x49, 0x54, 0x72, 0xfe, 0x14, 0x03, 0x01, 0xfe,
+ 0x9e, 0x18, 0x04, 0x30, 0x32, 0x6f, 0xfe, 0x02, 0xe8, 0x2b, 0xfe, 0xbf, 0x57, 0xfe, 0x9e, 0x43,
+ 0xfe, 0x77, 0x57, 0xfe, 0x27, 0xf0, 0xfe, 0xe4, 0x01, 0xfe, 0x07, 0x4b, 0xfe, 0x20, 0xf0, 0xb3,
+ 0xfe, 0x40, 0x1c, 0x25, 0xe9, 0xfe, 0x26, 0xf0, 0xfe, 0x66, 0x03, 0xfe, 0xa0, 0xf0, 0xfe, 0x54,
+ 0x03, 0xfe, 0x11, 0xf0, 0xb3, 0xb9, 0xfe, 0x9f, 0xf0, 0xfe, 0x74, 0x03, 0xfe, 0x46, 0x1c, 0x15,
+ 0xfe, 0x11, 0x00, 0x04, 0x69, 0x32, 0xfe, 0x48, 0x1c, 0xfe, 0x46, 0x1c, 0x22, 0x1d, 0xb0, 0xc2,
+ 0x1c, 0xb0, 0x09, 0x44, 0x01, 0x14, 0xc2, 0x82, 0x01, 0xfe, 0xd0, 0x18, 0x11, 0xdf, 0x25, 0xe9,
+ 0xfe, 0x01, 0xf0, 0xe9, 0xfe, 0x82, 0xf0, 0xfe, 0x9a, 0x03, 0xfe, 0x9c, 0x32, 0x11, 0xfe, 0xe4,
+ 0x00, 0x2a, 0xfe, 0xac, 0x03, 0x25, 0x39, 0x12, 0xfe, 0xbc, 0x03, 0x01, 0x47, 0xfe, 0x06, 0xf0,
+ 0xfe, 0xcc, 0x03, 0xa6, 0x99, 0xfe, 0x0a, 0xf0, 0xfe, 0x3e, 0x07, 0x04, 0x24, 0x02, 0x78, 0x1a,
+ 0x17, 0xfe, 0xee, 0x04, 0x1b, 0x5b, 0x01, 0x3c, 0x88, 0xfe, 0x6e, 0x02, 0x04, 0xe8, 0xfe, 0x46,
+ 0x1c, 0x32, 0x74, 0x19, 0xfe, 0x67, 0x1b, 0xfe, 0xbf, 0x57, 0xfe, 0x77, 0x57, 0xfe, 0x48, 0x1c,
+ 0x7e, 0x01, 0x9f, 0x7d, 0x09, 0x44, 0x01, 0x14, 0x07, 0x00, 0x17, 0xea, 0x09, 0xdf, 0x01, 0x14,
+ 0x81, 0x4b, 0x68, 0x86, 0x2b, 0x02, 0x78, 0x1a, 0xfe, 0x10, 0x12, 0x1b, 0x5b, 0x01, 0x3c, 0x88,
+ 0xfe, 0x6e, 0x02, 0x04, 0xe8, 0xd5, 0x92, 0xd6, 0x95, 0x25, 0x24, 0x2a, 0xfe, 0x44, 0x04, 0x12,
+ 0xfe, 0x40, 0x04, 0x75, 0xfe, 0xa0, 0x00, 0xfe, 0x9b, 0x57, 0xfe, 0x46, 0x12, 0x2e, 0xff, 0x02,
+ 0x00, 0x10, 0x01, 0x06, 0x12, 0xfe, 0xd8, 0x04, 0x2e, 0x01, 0x06, 0x12, 0x24, 0x23, 0x21, 0xec,
+ 0xfe, 0x4c, 0x44, 0xfe, 0x3c, 0x12, 0x4b, 0xfe, 0x44, 0x48, 0x0f, 0x2f, 0xfe, 0x4c, 0x54, 0x72,
+ 0xea, 0x6f, 0x86, 0x2b, 0xfe, 0x06, 0x80, 0xfe, 0x48, 0x47, 0xfe, 0x52, 0x13, 0x35, 0x07, 0x94,
+ 0xfe, 0x4a, 0x13, 0xfe, 0x18, 0x10, 0x0f, 0x2f, 0xfe, 0x4c, 0x54, 0x72, 0xea, 0xfe, 0x06, 0x80,
+ 0xfe, 0x48, 0x47, 0xfe, 0x38, 0x13, 0x35, 0x07, 0x94, 0xfe, 0x30, 0x13, 0x0b, 0x08, 0x38, 0xfe,
+ 0x1c, 0x12, 0x1b, 0x76, 0x0b, 0x08, 0x05, 0x48, 0x1b, 0xfe, 0x0d, 0x00, 0x01, 0x3c, 0x88, 0xfe,
+ 0x52, 0x0d, 0x04, 0x24, 0x2e, 0x11, 0xfe, 0xe6, 0x00, 0xfe, 0x1c, 0x90, 0xcc, 0x03, 0x1b, 0x76,
+ 0x01, 0x3c, 0x04, 0x30, 0xfe, 0x42, 0x5b, 0x74, 0x19, 0xfe, 0x46, 0x59, 0xfe, 0xbf, 0x57, 0xfe,
+ 0x77, 0x57, 0xfe, 0x87, 0x80, 0xce, 0x5d, 0x0b, 0x08, 0x0a, 0xfe, 0x84, 0x13, 0xfe, 0x20, 0x80,
+ 0x07, 0x19, 0xfe, 0x7c, 0x12, 0x36, 0x08, 0x05, 0xfe, 0x6c, 0x13, 0x02, 0xfe, 0xa2, 0x00, 0x1a,
+ 0x17, 0xfe, 0x84, 0x05, 0xce, 0x4e, 0x36, 0x08, 0x0a, 0xfe, 0x56, 0x13, 0x02, 0xfe, 0xa0, 0x00,
+ 0x1a, 0xfe, 0x4e, 0x12, 0x57, 0xff, 0x02, 0x00, 0x10, 0x2a, 0xfe, 0x3c, 0x05, 0x25, 0x39, 0xc7,
+ 0xff, 0x02, 0x00, 0x10, 0x2a, 0xfe, 0x4a, 0x05, 0x13, 0xfe, 0x9c, 0x05, 0x11, 0xfe, 0xe3, 0x00,
+ 0x22, 0x36, 0xfe, 0x4a, 0xf0, 0xfe, 0x6a, 0x05, 0xfe, 0x49, 0xf0, 0xfe, 0x64, 0x05, 0x6a, 0x29,
+ 0xfe, 0x21, 0x00, 0xb8, 0x29, 0xfe, 0x22, 0x00, 0x9b, 0x29, 0x43, 0xfe, 0x09, 0x48, 0xff, 0x02,
+ 0x00, 0x10, 0x2a, 0xfe, 0x7a, 0x05, 0x13, 0xfe, 0x9c, 0x05, 0xfe, 0xe2, 0x08, 0x36, 0x08, 0xfe,
+ 0x1c, 0x00, 0x48, 0x01, 0xa0, 0x29, 0x05, 0x1c, 0xe2, 0x40, 0xfe, 0x27, 0x01, 0x0b, 0x08, 0x38,
+ 0xfe, 0x22, 0x12, 0x3b, 0x01, 0x7b, 0x1b, 0x76, 0x0b, 0x08, 0x05, 0x48, 0x1b, 0xfe, 0x0d, 0x00,
+ 0x01, 0x3c, 0x88, 0xfe, 0x52, 0x0d, 0x04, 0x24, 0x02, 0xe4, 0x1a, 0xfe, 0xc6, 0x13, 0x02, 0xad,
+ 0x1a, 0xfe, 0x3e, 0x12, 0x02, 0x5e, 0x1a, 0xfe, 0x36, 0x13, 0x3b, 0x01, 0x7b, 0x13, 0xfe, 0x14,
+ 0x06, 0x09, 0x05, 0x36, 0x08, 0x20, 0xfe, 0x02, 0x12, 0x4a, 0x01, 0xfe, 0x62, 0x17, 0x12, 0xfe,
+ 0x0a, 0x06, 0x11, 0x79, 0x01, 0x47, 0x11, 0xe0, 0x02, 0x5e, 0x83, 0x0c, 0x5e, 0x02, 0x93, 0x1a,
+ 0xfe, 0x6e, 0x12, 0x02, 0x4f, 0x1a, 0xfe, 0x66, 0x13, 0x01, 0xbe, 0x07, 0x0e, 0x41, 0xfe, 0x34,
+ 0x06, 0x29, 0x0e, 0x01, 0xfe, 0x8e, 0x1b, 0xfe, 0x43, 0x48, 0x5a, 0x77, 0x0f, 0x51, 0xff, 0x02,
+ 0x00, 0x57, 0x4c, 0xa4, 0x1e, 0x34, 0x49, 0x5a, 0x42, 0x3b, 0x01, 0x7b, 0x13, 0xfe, 0x8a, 0x06,
+ 0x36, 0x08, 0x0e, 0xf6, 0x3e, 0x09, 0x8e, 0x01, 0xfe, 0x90, 0x17, 0x12, 0xfe, 0x80, 0x06, 0x11,
+ 0x79, 0x01, 0x47, 0x11, 0xe0, 0x02, 0x4f, 0x83, 0x0c, 0x4f, 0x18, 0x05, 0x01, 0x7b, 0xfe, 0xaa,
+ 0x10, 0x02, 0x67, 0x1a, 0xfe, 0x9a, 0x13, 0x3b, 0x01, 0x7b, 0x02, 0x93, 0x1a, 0xfe, 0x18, 0x12,
+ 0x36, 0x08, 0x0e, 0xf8, 0x01, 0xbe, 0x01, 0xfe, 0x8e, 0x1b, 0xfe, 0x43, 0x48, 0x5a, 0x77, 0xf0,
+ 0x3e, 0x09, 0x8e, 0x02, 0xad, 0x1a, 0xfe, 0x0e, 0x12, 0x36, 0x08, 0x20, 0x2d, 0xfe, 0x02, 0xf6,
+ 0x05, 0x6a, 0x70, 0x85, 0x00, 0x48, 0x5a, 0x42, 0x3b, 0x28, 0x8c, 0x49, 0xce, 0x0a, 0x13, 0xfe,
+ 0x36, 0x07, 0x01, 0xfe, 0xcc, 0x17, 0x12, 0xfe, 0x2c, 0x07, 0x22, 0x1c, 0x97, 0x11, 0x79, 0x01,
+ 0x47, 0x11, 0xe0, 0x1d, 0x97, 0x07, 0x05, 0xf7, 0x02, 0xe4, 0xfe, 0x58, 0x57, 0x0c, 0xe4, 0x04,
+ 0xfe, 0xce, 0x05, 0x02, 0x67, 0x83, 0x0c, 0x67, 0x18, 0x05, 0x01, 0x7b, 0xfe, 0x9c, 0x32, 0x6e,
+ 0x7e, 0x01, 0x9f, 0x7d, 0x11, 0xfe, 0xe2, 0x00, 0x2a, 0xeb, 0x25, 0x39, 0xfe, 0x0a, 0xf0, 0xfe,
+ 0x6a, 0x07, 0xa5, 0xfe, 0x20, 0x08, 0xfe, 0x06, 0xf0, 0xfe, 0x28, 0x08, 0xa6, 0x99, 0x04, 0x24,
+ 0x0b, 0x08, 0x0a, 0xfe, 0x2e, 0x12, 0x10, 0x19, 0x01, 0x06, 0x10, 0x00, 0x01, 0x06, 0x10, 0x00,
+ 0x01, 0x06, 0x10, 0x00, 0x01, 0x06, 0xfe, 0x99, 0xa4, 0x01, 0x06, 0x10, 0x00, 0x04, 0xfe, 0xf6,
+ 0x08, 0x84, 0x08, 0x0e, 0xfe, 0x38, 0x12, 0x0b, 0x08, 0x0e, 0xfe, 0x30, 0x13, 0x10, 0xfe, 0x1b,
+ 0x00, 0x01, 0x06, 0x10, 0x00, 0x01, 0x06, 0x10, 0x00, 0x01, 0x06, 0x10, 0x00, 0x01, 0x06, 0x10,
+ 0x05, 0x01, 0x06, 0x10, 0x00, 0x04, 0xee, 0x73, 0x43, 0x70, 0x4a, 0xfe, 0x9a, 0x81, 0x28, 0x38,
+ 0x41, 0xfe, 0xf6, 0x07, 0x09, 0x38, 0xfe, 0x09, 0x6f, 0xc5, 0xfe, 0xca, 0x45, 0xfe, 0x32, 0x12,
+ 0x4d, 0x5b, 0x49, 0x73, 0x90, 0x2a, 0xfe, 0x08, 0x08, 0x25, 0x39, 0xfe, 0x0a, 0xf0, 0xfe, 0xf6,
+ 0x07, 0xa6, 0x99, 0xa5, 0xfe, 0x20, 0x08, 0x04, 0x24, 0x01, 0x47, 0x04, 0xeb, 0x10, 0x20, 0x04,
+ 0xeb, 0xfe, 0x9c, 0xf7, 0x98, 0xfe, 0x2c, 0x90, 0xfe, 0xae, 0x90, 0x87, 0xfe, 0x8e, 0x08, 0x0c,
+ 0x62, 0x1f, 0x63, 0x0b, 0x59, 0x4e, 0x3d, 0x1d, 0x27, 0x07, 0x16, 0xfe, 0x0e, 0x12, 0x81, 0xfe,
+ 0x80, 0x80, 0x40, 0x27, 0x71, 0x2b, 0xf0, 0xfe, 0x83, 0xe7, 0xfe, 0x3f, 0x00, 0xb8, 0xfe, 0x03,
+ 0x40, 0x0b, 0x59, 0x5d, 0x3d, 0x01, 0xbd, 0xc3, 0xfe, 0x1f, 0x40, 0x1c, 0x66, 0x01, 0xbb, 0xfe,
+ 0x08, 0x50, 0xfe, 0x8a, 0x50, 0xfe, 0x44, 0x51, 0xfe, 0xc6, 0x51, 0x6a, 0xfe, 0x08, 0x90, 0xfe,
+ 0x8a, 0x90, 0x0c, 0x60, 0x1f, 0x61, 0xfe, 0x0c, 0x90, 0xfe, 0x8e, 0x90, 0xfe, 0x40, 0x50, 0xfe,
+ 0xc2, 0x50, 0x0c, 0x45, 0x1f, 0x46, 0xfe, 0x4a, 0x10, 0x0b, 0x08, 0x4e, 0xfe, 0x2a, 0x12, 0xfe,
+ 0x2c, 0x90, 0xfe, 0xae, 0x90, 0x0c, 0x62, 0x1f, 0x63, 0x0b, 0x08, 0x5d, 0x49, 0x01, 0xbd, 0xfe,
+ 0x1f, 0x80, 0x1c, 0x66, 0xfe, 0x44, 0x90, 0xfe, 0xc6, 0x90, 0x0c, 0x64, 0x1f, 0x65, 0xfe, 0x08,
+ 0x90, 0xfe, 0x8a, 0x90, 0x0c, 0x60, 0x1f, 0x61, 0xfe, 0x40, 0x90, 0xfe, 0xc2, 0x90, 0x0c, 0x45,
+ 0x1f, 0x46, 0x0c, 0x5c, 0x1f, 0x2f, 0x0b, 0x59, 0x20, 0x3d, 0x32, 0x0f, 0xfe, 0x4e, 0x11, 0x2a,
+ 0xfe, 0x0c, 0x09, 0xfe, 0x9e, 0xf0, 0xfe, 0x20, 0x09, 0xfe, 0x01, 0x48, 0x17, 0x39, 0x32, 0x80,
+ 0xf2, 0xd2, 0xfe, 0x4c, 0x09, 0xd3, 0xfe, 0x6a, 0x09, 0xd0, 0xfe, 0x4c, 0x09, 0xd1, 0xfe, 0x6a,
+ 0x09, 0xa5, 0xfe, 0x40, 0x09, 0xfe, 0x06, 0xf0, 0xfe, 0x46, 0x09, 0xa6, 0x99, 0x04, 0x24, 0x01,
+ 0x47, 0xfe, 0xc1, 0x10, 0x10, 0x20, 0xfe, 0xc1, 0x10, 0x84, 0x08, 0x05, 0xfe, 0x10, 0x12, 0x84,
+ 0x08, 0x0a, 0x55, 0x0b, 0x08, 0x0a, 0xfe, 0x70, 0x12, 0xfe, 0x2e, 0x1c, 0x04, 0xfe, 0xf8, 0x0a,
+ 0x84, 0x08, 0x05, 0x55, 0x84, 0x08, 0x0a, 0xfe, 0x5a, 0x12, 0xfe, 0x2c, 0x1c, 0xfe, 0xaa, 0xf0,
+ 0xfe, 0xf2, 0x09, 0xfe, 0xac, 0xf0, 0xfe, 0x8a, 0x09, 0xfe, 0x92, 0x10, 0xc0, 0xf4, 0xfe, 0xad,
+ 0xf0, 0xfe, 0x96, 0x09, 0x04, 0xfe, 0xf8, 0x0a, 0xc1, 0xfe, 0xe7, 0x10, 0xfe, 0x2b, 0xf0, 0xb6,
+ 0xfe, 0x6b, 0x18, 0x1e, 0xfe, 0x00, 0xfe, 0xfe, 0x1c, 0x12, 0xca, 0xfe, 0xd2, 0xf0, 0xb6, 0xfe,
+ 0x76, 0x18, 0x1e, 0x19, 0x17, 0xb6, 0x02, 0xe1, 0x1e, 0x05, 0x17, 0xb6, 0xd2, 0x54, 0xd3, 0x54,
+ 0xd0, 0x54, 0xd1, 0x54, 0xc0, 0xc1, 0xfe, 0xa9, 0x10, 0x7e, 0x57, 0x2e, 0x1b, 0x76, 0x01, 0x3c,
+ 0x15, 0xfe, 0x35, 0x00, 0xfe, 0x01, 0xf0, 0x69, 0x15, 0x91, 0x04, 0x69, 0xfe, 0x74, 0x18, 0x1e,
+ 0xfe, 0x00, 0xf8, 0x17, 0x54, 0x74, 0x0e, 0x01, 0xfe, 0x18, 0x0e, 0x48, 0x01, 0xfe, 0x9e, 0x18,
+ 0x1d, 0x2b, 0x81, 0x74, 0x19, 0x04, 0x54, 0xfe, 0x98, 0x80, 0xfe, 0x19, 0xe4, 0x0a, 0x26, 0xfe,
+ 0xda, 0x0a, 0x0b, 0x08, 0x4e, 0xfe, 0x82, 0x12, 0x0b, 0x08, 0x20, 0xfe, 0x66, 0x13, 0x1d, 0x66,
+ 0xc2, 0xfe, 0x03, 0xa1, 0xfe, 0x83, 0x80, 0xfe, 0xc8, 0x44, 0xfe, 0x2e, 0x13, 0xfe, 0x04, 0x91,
+ 0xfe, 0x86, 0x91, 0x71, 0x2b, 0xfe, 0x40, 0x59, 0xfe, 0xc1, 0x59, 0x87, 0xed, 0x02, 0x62, 0x37,
+ 0x63, 0x0c, 0x90, 0x1f, 0x91, 0xd7, 0x62, 0xd8, 0x63, 0x01, 0xbd, 0xc3, 0x71, 0x2b, 0x1c, 0x66,
+ 0xd9, 0x5c, 0xda, 0x2f, 0x8a, 0x64, 0x75, 0x65, 0xfe, 0x44, 0x55, 0xfe, 0xe5, 0x55, 0xfe, 0x04,
+ 0xfa, 0x5c, 0xfe, 0x05, 0xfa, 0x2f, 0x01, 0xbb, 0xfe, 0x36, 0x10, 0x22, 0x0c, 0x90, 0x0c, 0x91,
+ 0x8a, 0x64, 0x75, 0x65, 0x9c, 0x0b, 0x08, 0x20, 0x17, 0xed, 0x8a, 0x45, 0x75, 0x46, 0x0b, 0x08,
+ 0xfe, 0xf7, 0x00, 0x3d, 0x02, 0x60, 0x37, 0x61, 0xfe, 0x10, 0x58, 0xfe, 0x91, 0x58, 0xfe, 0x14,
+ 0x59, 0xfe, 0x95, 0x59, 0x04, 0x54, 0x0b, 0x08, 0x20, 0x17, 0xed, 0x0b, 0x08, 0xfe, 0xf7, 0x00,
+ 0x3d, 0x70, 0xfe, 0x19, 0x81, 0x4a, 0xfe, 0x10, 0x90, 0xfe, 0x92, 0x90, 0xfe, 0xd7, 0x10, 0x35,
+ 0x07, 0xb2, 0x17, 0xfe, 0x92, 0x09, 0x11, 0xb2, 0xfe, 0x98, 0x80, 0xfe, 0x19, 0xe4, 0x0a, 0xfe,
+ 0x14, 0x13, 0x02, 0x45, 0x37, 0x46, 0x87, 0xfe, 0x92, 0x09, 0xfe, 0x0c, 0x58, 0xfe, 0x8d, 0x58,
+ 0x04, 0x54, 0x22, 0x3b, 0xfe, 0x19, 0x80, 0xf3, 0x0b, 0x08, 0x0a, 0xfe, 0x1a, 0x12, 0xfe, 0x6c,
+ 0x19, 0xfe, 0x19, 0x41, 0xfe, 0x6b, 0x18, 0xca, 0xfe, 0xd1, 0xf0, 0xee, 0x1b, 0x8b, 0x01, 0x3c,
+ 0x15, 0xfe, 0x44, 0x00, 0xfe, 0x8e, 0x10, 0xfe, 0x6c, 0x19, 0xd7, 0x45, 0xfe, 0xed, 0x19, 0xd8,
+ 0x46, 0xfe, 0x0c, 0x51, 0xfe, 0x8e, 0x51, 0xfe, 0x6b, 0x18, 0x1e, 0xfe, 0x00, 0xff, 0x2c, 0xfe,
+ 0x74, 0x10, 0xca, 0xfe, 0xd2, 0xf0, 0xfe, 0x86, 0x0b, 0xfe, 0x76, 0x18, 0x1e, 0x19, 0x56, 0x02,
+ 0xe1, 0x1e, 0x05, 0xfe, 0x08, 0x13, 0x15, 0xfe, 0x16, 0x00, 0x04, 0x69, 0xfe, 0xd1, 0xf0, 0xfe,
+ 0x98, 0x0b, 0x1b, 0x8b, 0x01, 0x3c, 0x15, 0xfe, 0x17, 0x00, 0xfe, 0x42, 0x10, 0xfe, 0xce, 0xf0,
+ 0xfe, 0x9e, 0x0b, 0xfe, 0x3c, 0x10, 0xfe, 0xcd, 0xf0, 0xfe, 0xaa, 0x0b, 0x15, 0xfe, 0x22, 0x00,
+ 0x04, 0x69, 0xfe, 0xcb, 0xf0, 0xfe, 0xb6, 0x0b, 0x15, 0xfe, 0x24, 0x00, 0x04, 0x69, 0xfe, 0xd0,
+ 0xf0, 0xfe, 0xc0, 0x0b, 0x15, 0x8d, 0xf1, 0xfe, 0xcf, 0xf0, 0xfe, 0xca, 0x0b, 0x15, 0x43, 0xfe,
+ 0x10, 0x10, 0xfe, 0xcc, 0xf0, 0xee, 0xfe, 0x84, 0x80, 0xfe, 0x19, 0xe4, 0x20, 0x48, 0x15, 0xfe,
+ 0x12, 0x00, 0x32, 0x0f, 0xfe, 0x4e, 0x11, 0x2a, 0xfe, 0xe0, 0x0b, 0xfe, 0x9e, 0xf0, 0xfe, 0xf4,
+ 0x0b, 0xfe, 0x01, 0x48, 0x17, 0x39, 0x32, 0x80, 0xf2, 0xd2, 0x24, 0xd3, 0x24, 0xd0, 0x24, 0xd1,
+ 0x24, 0x32, 0xfe, 0x9c, 0x32, 0x2a, 0xfe, 0x08, 0x0c, 0x25, 0x39, 0xa5, 0xfe, 0x2c, 0x0c, 0xa6,
+ 0x99, 0xd2, 0x98, 0xd3, 0x98, 0xd0, 0x98, 0xd1, 0x98, 0x04, 0x24, 0x01, 0x47, 0xfe, 0xd3, 0x10,
+ 0x11, 0xfe, 0xe8, 0x00, 0xc0, 0xc1, 0x7e, 0xd5, 0x92, 0xd6, 0x95, 0xfe, 0x89, 0xf0, 0x24, 0x23,
+ 0x21, 0xb5, 0xd5, 0x92, 0xd6, 0x95, 0x2a, 0xfe, 0x56, 0x0c, 0x12, 0x24, 0x23, 0x21, 0xb4, 0xfe,
+ 0x01, 0x48, 0x55, 0x15, 0xfe, 0x42, 0x00, 0x04, 0x69, 0x89, 0x05, 0xfe, 0x81, 0x49, 0xfe, 0xa2,
+ 0x12, 0x0b, 0x08, 0x0a, 0xfe, 0x44, 0x13, 0x15, 0x00, 0x28, 0x0a, 0xfe, 0x54, 0x12, 0x28, 0xfe,
+ 0x28, 0x00, 0x26, 0xfe, 0x88, 0x0d, 0x09, 0x44, 0x01, 0x14, 0x07, 0x00, 0x2d, 0x3f, 0xfe, 0x28,
+ 0x00, 0xfe, 0xe2, 0x10, 0x01, 0xfe, 0xd6, 0x1a, 0x01, 0xfe, 0xe2, 0x1a, 0x09, 0xb1, 0x01, 0xfe,
+ 0xf2, 0x0e, 0x68, 0x11, 0x50, 0x01, 0x7c, 0x04, 0x30, 0x15, 0xfe, 0x44, 0x00, 0x28, 0x0a, 0xf6,
+ 0x3f, 0x0a, 0xfe, 0xb4, 0x10, 0x01, 0xa0, 0x3f, 0x0a, 0xfe, 0xaa, 0x10, 0x01, 0xa0, 0xfe, 0x19,
+ 0x82, 0xfe, 0x34, 0x46, 0x9e, 0x3f, 0x0a, 0x15, 0xfe, 0x43, 0x00, 0xfe, 0x96, 0x10, 0x0b, 0x59,
+ 0x0a, 0x3d, 0x01, 0xfe, 0xd6, 0x1a, 0x01, 0xfe, 0xe2, 0x1a, 0x68, 0x11, 0x50, 0x01, 0x7c, 0x74,
+ 0x0a, 0x68, 0x58, 0xcd, 0x04, 0xfe, 0x3a, 0x03, 0x0b, 0x08, 0x0a, 0x56, 0x3f, 0x0a, 0x15, 0x00,
+ 0xfe, 0x5c, 0x10, 0x84, 0x08, 0x0e, 0xfe, 0x58, 0x12, 0x0b, 0x08, 0x0e, 0xfe, 0x50, 0x13, 0xfe,
+ 0x1c, 0x1c, 0xfe, 0x9d, 0xf0, 0xfe, 0x3e, 0x0d, 0xfe, 0x1c, 0x1c, 0xfe, 0x9d, 0xf0, 0xfe, 0x44,
+ 0x0d, 0x0b, 0x59, 0x0e, 0x3d, 0xfe, 0xa9, 0x10, 0x15, 0xfe, 0x15, 0x00, 0xfe, 0x04, 0xe6, 0x0a,
+ 0x4a, 0xfe, 0x2e, 0x10, 0x15, 0xfe, 0x13, 0x00, 0xfe, 0x10, 0x10, 0x15, 0xfe, 0x47, 0x00, 0xb8,
+ 0x15, 0xfe, 0x41, 0x00, 0x9b, 0x15, 0xfe, 0x24, 0x00, 0x7d, 0xc0, 0xc1, 0x7e, 0x02, 0x78, 0x1a,
+ 0x26, 0xe8, 0x4a, 0xfe, 0x04, 0xe6, 0x0e, 0xfe, 0x9d, 0x41, 0xfe, 0x1c, 0x42, 0x68, 0x01, 0xef,
+ 0x04, 0x30, 0xfe, 0x12, 0x1c, 0x1b, 0x0a, 0x40, 0xac, 0xbf, 0x1b, 0xfe, 0x31, 0x00, 0x40, 0xaf,
+ 0x01, 0x9c, 0x04, 0xe7, 0x58, 0xfe, 0x06, 0xec, 0xde, 0xfe, 0x0e, 0x47, 0x3f, 0x38, 0xfe, 0xce,
+ 0x45, 0x2c, 0x58, 0xfe, 0x06, 0xea, 0xde, 0xfe, 0x47, 0x4b, 0x3e, 0xfe, 0x75, 0x57, 0x02, 0x5f,
+ 0xfe, 0x98, 0x56, 0xfe, 0x2a, 0x12, 0x09, 0x44, 0x01, 0x14, 0x3b, 0xfe, 0x41, 0x58, 0x09, 0xb1,
+ 0xfe, 0xfc, 0x14, 0xfe, 0x49, 0x54, 0xa7, 0xfe, 0xfe, 0x0d, 0x09, 0x53, 0xfe, 0xf0, 0x14, 0xfe,
+ 0x44, 0x48, 0x04, 0xfe, 0x3a, 0x03, 0x09, 0x5f, 0xfe, 0xda, 0x14, 0xfe, 0x0e, 0x47, 0x3f, 0x38,
+ 0xfe, 0xce, 0x45, 0x2c, 0x58, 0xfe, 0xce, 0x47, 0xfe, 0xbb, 0x13, 0x04, 0x30, 0x1d, 0x27, 0x07,
+ 0x16, 0xfe, 0x92, 0x12, 0x22, 0x1c, 0x8f, 0x1c, 0xe5, 0xfe, 0x08, 0x1c, 0xfe, 0x7c, 0x19, 0xfe,
+ 0xfd, 0x19, 0xfe, 0x0a, 0x1c, 0x02, 0xe3, 0xfe, 0x48, 0x55, 0x9e, 0x37, 0xfe, 0x62, 0x01, 0xfe,
+ 0xc9, 0x55, 0x2c, 0xfe, 0x6e, 0x10, 0x01, 0xfe, 0xf6, 0x18, 0x02, 0xfe, 0x38, 0x01, 0x37, 0xfe,
+ 0x3a, 0x01, 0x87, 0xfe, 0xb8, 0x0e, 0xfe, 0x02, 0xec, 0xe5, 0x4d, 0x00, 0x2d, 0xfe, 0x04, 0xec,
+ 0x27, 0x6f, 0xfe, 0x05, 0xf6, 0xfe, 0x34, 0x01, 0x01, 0xfe, 0x66, 0x19, 0xfe, 0x08, 0x90, 0xa9,
+ 0x0d, 0xfe, 0x18, 0x13, 0xc5, 0xfe, 0x02, 0xea, 0xe5, 0x4d, 0x8b, 0xfe, 0xc5, 0x13, 0x1b, 0x0e,
+ 0x40, 0xac, 0xbf, 0xfe, 0x26, 0x10, 0x02, 0xfe, 0x38, 0x01, 0x1e, 0xfe, 0xf0, 0xff, 0x0c, 0xe3,
+ 0x02, 0xfe, 0x3a, 0x01, 0x0c, 0xfe, 0x62, 0x01, 0x34, 0x1c, 0x27, 0x11, 0x50, 0xcd, 0x0f, 0x05,
+ 0x03, 0x22, 0x03, 0x1d, 0x8f, 0xc2, 0x1c, 0x8f, 0x07, 0x8b, 0xfe, 0x7f, 0x13, 0x1b, 0x19, 0x40,
+ 0xac, 0xbf, 0xfe, 0xe1, 0x10, 0xcb, 0xfe, 0x03, 0xdc, 0xfe, 0x73, 0x57, 0xfe, 0x80, 0x5d, 0x03,
+ 0xcb, 0xfe, 0x03, 0xdc, 0xfe, 0x5b, 0x57, 0xfe, 0x80, 0x5d, 0x03, 0xfe, 0x03, 0x57, 0xcb, 0x22,
+ 0xfe, 0x00, 0xcc, 0x03, 0xfe, 0x03, 0x57, 0xcb, 0x82, 0x03, 0x0b, 0x08, 0x43, 0xfe, 0x22, 0x13,
+ 0xfe, 0x1c, 0x80, 0x07, 0x05, 0xfe, 0x1a, 0x13, 0xfe, 0x1e, 0x80, 0xf9, 0xfe, 0x1d, 0x80, 0xba,
+ 0xfe, 0x0c, 0x90, 0xf7, 0xfe, 0x0e, 0x90, 0x9e, 0xfe, 0x3c, 0x90, 0xfe, 0x30, 0xf4, 0x0a, 0xfe,
+ 0x3c, 0x50, 0x9b, 0x01, 0xfe, 0x96, 0x19, 0x35, 0x07, 0x50, 0x2d, 0x01, 0xfe, 0xd0, 0x18, 0xfe,
+ 0x08, 0x10, 0x01, 0xfe, 0xd6, 0x1a, 0x01, 0xfe, 0xe2, 0x1a, 0x11, 0xfe, 0xe9, 0x00, 0x0b, 0x08,
+ 0x43, 0xfe, 0x2c, 0x13, 0x01, 0xfe, 0x28, 0x19, 0xfe, 0x1e, 0x1c, 0xfe, 0x14, 0x90, 0x0c, 0xfe,
+ 0x64, 0x01, 0xfe, 0x16, 0x90, 0x0c, 0xfe, 0x66, 0x01, 0x0b, 0x08, 0x5d, 0xfe, 0x12, 0x12, 0xfe,
+ 0x03, 0x80, 0x81, 0xfe, 0x01, 0xec, 0x27, 0xfe, 0x80, 0x40, 0x1c, 0x27, 0x71, 0x2b, 0x11, 0xdd,
+ 0x68, 0x1d, 0x27, 0xfe, 0x00, 0x40, 0x86, 0x27, 0x03, 0xfe, 0x08, 0x1c, 0x02, 0xfe, 0xac, 0x00,
+ 0xfe, 0x06, 0x58, 0x02, 0xfe, 0xae, 0x00, 0xfe, 0x07, 0x58, 0x02, 0xfe, 0xb0, 0x00, 0xfe, 0x08,
+ 0x58, 0x02, 0xfe, 0xb2, 0x00, 0xfe, 0x09, 0x58, 0xfe, 0x0a, 0x1c, 0x29, 0x42, 0x1c, 0xde, 0x22,
+ 0x0c, 0x5e, 0x0c, 0x4f, 0x0c, 0x67, 0x0f, 0x44, 0x4c, 0x4a, 0x18, 0x38, 0xfe, 0x90, 0x4d, 0xfe,
+ 0x91, 0x54, 0x26, 0xfe, 0xc6, 0x0f, 0x3f, 0x16, 0x0f, 0x53, 0x4c, 0x18, 0x43, 0xfe, 0x90, 0x4d,
+ 0xfe, 0x91, 0x54, 0x26, 0xfe, 0xdc, 0x0f, 0x29, 0x16, 0x1c, 0x27, 0x89, 0x2f, 0x6f, 0x1d, 0x27,
+ 0xfe, 0x00, 0x40, 0x86, 0x27, 0x11, 0xdd, 0xfe, 0x14, 0x56, 0xfe, 0xd6, 0xf0, 0xfe, 0xf0, 0x0f,
+ 0xfe, 0x12, 0x1c, 0x7e, 0xfe, 0x14, 0x1c, 0xfe, 0x10, 0x1c, 0xfe, 0x18, 0x1c, 0x03, 0x58, 0xfe,
+ 0x0c, 0x14, 0xfe, 0x0e, 0x47, 0xfe, 0x07, 0xe6, 0x38, 0xfe, 0xce, 0x47, 0xfe, 0xf5, 0x13, 0x03,
+ 0x01, 0xa0, 0x89, 0x2f, 0x6f, 0xfe, 0x06, 0x80, 0xfe, 0x48, 0x47, 0xfe, 0x42, 0x13, 0x35, 0x07,
+ 0x50, 0xfe, 0x34, 0x13, 0x09, 0x53, 0x01, 0x14, 0xc6, 0xfe, 0x36, 0x12, 0xfe, 0x41, 0x48, 0xfe,
+ 0x45, 0x48, 0x01, 0xfb, 0xfe, 0x00, 0xcc, 0xc6, 0xfe, 0xf3, 0x13, 0x34, 0x82, 0x07, 0x16, 0x9e,
+ 0x09, 0x96, 0x01, 0x14, 0xfe, 0x80, 0x5c, 0x01, 0x7c, 0xb9, 0x07, 0x94, 0x55, 0xfe, 0x14, 0x56,
+ 0xfe, 0xd6, 0xf0, 0xfe, 0x2a, 0x10, 0x03, 0xfe, 0x44, 0x58, 0x81, 0xfe, 0x01, 0xec, 0xaf, 0xfe,
+ 0x9e, 0x40, 0xfe, 0x9d, 0xe7, 0x00, 0xfe, 0x9c, 0xe7, 0x0e, 0x86, 0x2b, 0x01, 0xef, 0xfe, 0xdd,
+ 0x10, 0x32, 0xd5, 0x92, 0xd6, 0x95, 0x23, 0x21, 0xec, 0x07, 0x0e, 0xfe, 0x48, 0x12, 0x07, 0x0a,
+ 0xfe, 0x56, 0x12, 0x07, 0x19, 0xfe, 0x30, 0x12, 0x07, 0xdb, 0x17, 0xfe, 0xfc, 0x11, 0x07, 0xfe,
+ 0x23, 0x00, 0x17, 0x55, 0x07, 0x05, 0x17, 0xfe, 0x66, 0x12, 0x07, 0x20, 0xfe, 0x12, 0x12, 0x07,
+ 0x00, 0x17, 0x24, 0x1b, 0xdb, 0x01, 0x3c, 0x9a, 0x2e, 0x01, 0x06, 0xa5, 0x47, 0x03, 0x2e, 0xfe,
+ 0x62, 0x08, 0x09, 0xdf, 0x01, 0xfe, 0xf2, 0x0e, 0x11, 0x94, 0x04, 0x30, 0x2e, 0x35, 0x07, 0xb2,
+ 0xfe, 0xd9, 0x13, 0x8a, 0x45, 0x75, 0x46, 0x87, 0xfe, 0xba, 0x11, 0x0b, 0x08, 0x4e, 0xfe, 0x72,
+ 0x12, 0xd9, 0x5c, 0xda, 0x2f, 0xfe, 0x44, 0x55, 0xfe, 0xe5, 0x55, 0xa7, 0xfe, 0x84, 0x11, 0x1d,
+ 0x66, 0xfe, 0x26, 0x13, 0x02, 0x90, 0x37, 0x91, 0x87, 0xfe, 0x64, 0x0d, 0x0c, 0x62, 0x1f, 0x63,
+ 0x22, 0x0c, 0x90, 0x0c, 0x91, 0x01, 0xbd, 0x29, 0x42, 0x80, 0x1c, 0x66, 0x01, 0xbb, 0xd9, 0x5c,
+ 0xda, 0x2f, 0xfe, 0x04, 0x55, 0xfe, 0xa5, 0x55, 0xfe, 0x04, 0xfa, 0x5c, 0xfe, 0x05, 0xfa, 0x2f,
+ 0xfe, 0x91, 0x10, 0x02, 0x64, 0x37, 0x65, 0xfe, 0x40, 0x56, 0xfe, 0xe1, 0x56, 0x0c, 0x64, 0x1f,
+ 0x65, 0x6a, 0xd9, 0x5c, 0xda, 0x2f, 0xfe, 0x44, 0x55, 0xfe, 0xe5, 0x55, 0x02, 0x60, 0x37, 0x61,
+ 0xfe, 0x00, 0x56, 0xfe, 0xa1, 0x56, 0x0c, 0x60, 0x1f, 0x61, 0x0b, 0x08, 0x4e, 0xfe, 0x1e, 0x12,
+ 0x1d, 0x66, 0xfe, 0x1f, 0x40, 0x02, 0x62, 0x37, 0x63, 0xfe, 0x2c, 0x50, 0xfe, 0xae, 0x50, 0x02,
+ 0x64, 0x37, 0x65, 0xfe, 0x44, 0x50, 0xfe, 0xc6, 0x50, 0x02, 0x60, 0x37, 0x61, 0xfe, 0x08, 0x50,
+ 0xfe, 0x8a, 0x50, 0x02, 0x45, 0x37, 0x46, 0xfe, 0x40, 0x50, 0xfe, 0xc2, 0x50, 0x04, 0x6c, 0x29,
+ 0x05, 0x1c, 0x97, 0x04, 0x6b, 0x2e, 0x01, 0x06, 0x12, 0x3a, 0x23, 0x21, 0xec, 0x07, 0x05, 0x26,
+ 0x3a, 0x35, 0x07, 0xb2, 0x26, 0x6b, 0x01, 0x9f, 0x1e, 0x34, 0x17, 0x3a, 0x0b, 0x08, 0x0a, 0xfa,
+ 0x8a, 0x45, 0x75, 0x46, 0xfe, 0x0a, 0x55, 0x2c, 0xfe, 0x8b, 0x55, 0xd7, 0x45, 0xd8, 0x46, 0xfe,
+ 0x0c, 0x51, 0xfe, 0x8e, 0x51, 0x04, 0x6b, 0xfe, 0x19, 0x81, 0xc5, 0xfe, 0x19, 0x41, 0x04, 0x6b,
+ 0x2e, 0x01, 0x06, 0x25, 0x39, 0x12, 0xf5, 0x23, 0x21, 0xb5, 0x28, 0x19, 0xfe, 0xb2, 0x12, 0x28,
+ 0x0a, 0x9d, 0x28, 0x76, 0x17, 0xfe, 0x92, 0x13, 0x04, 0x3a, 0x01, 0x06, 0x25, 0x39, 0x12, 0xf5,
+ 0x23, 0x21, 0xb4, 0x07, 0x19, 0x26, 0x3a, 0x01, 0x06, 0x12, 0xf5, 0x23, 0x21, 0xfe, 0xe8, 0x09,
+ 0xfe, 0xc2, 0x49, 0x4b, 0x02, 0xad, 0x1a, 0x56, 0x36, 0x08, 0x20, 0x2c, 0x9a, 0xfe, 0xbb, 0x45,
+ 0x28, 0x00, 0x55, 0x3f, 0x05, 0x89, 0x34, 0x01, 0xfe, 0x22, 0x14, 0x01, 0x9f, 0x7d, 0xfe, 0x4b,
+ 0x45, 0xfa, 0x35, 0x07, 0x79, 0xf9, 0x02, 0x93, 0x1a, 0x56, 0x02, 0x4f, 0x1a, 0x2c, 0x57, 0x04,
+ 0x6b, 0xfe, 0xc0, 0x5d, 0x01, 0xa0, 0xfe, 0x03, 0x17, 0x02, 0x5e, 0x83, 0x0c, 0x5e, 0x57, 0x2e,
+ 0x01, 0x06, 0x13, 0x6c, 0x01, 0xfe, 0x62, 0x17, 0x04, 0x6c, 0x01, 0x06, 0x25, 0x39, 0x12, 0x3a,
+ 0x23, 0x21, 0xb4, 0x07, 0x05, 0x26, 0x3a, 0x01, 0xfe, 0xd0, 0x14, 0xfe, 0x42, 0x58, 0xfe, 0xe4,
+ 0x14, 0x01, 0x9f, 0x7d, 0xfe, 0x4a, 0xf4, 0x0a, 0x17, 0x3a, 0xfe, 0x4a, 0xf4, 0x05, 0x9d, 0x35,
+ 0x07, 0x79, 0x49, 0x04, 0x6b, 0x02, 0x4f, 0x83, 0x0c, 0x4f, 0x57, 0x2e, 0x01, 0x06, 0x13, 0x6c,
+ 0x01, 0xfe, 0x90, 0x17, 0x04, 0x6c, 0x01, 0x06, 0x25, 0x39, 0x12, 0x3a, 0x23, 0x21, 0xb4, 0x07,
+ 0x0e, 0x26, 0x3a, 0x01, 0xfe, 0xf8, 0x15, 0xcc, 0xfe, 0xa8, 0x14, 0xfe, 0xb4, 0x14, 0x7d, 0xfe,
+ 0x00, 0x17, 0xa9, 0x0a, 0x17, 0x3a, 0xa9, 0x05, 0x9d, 0x35, 0x07, 0x79, 0x49, 0x04, 0x6b, 0x02,
+ 0x67, 0x83, 0x0c, 0x67, 0x57, 0x2e, 0x01, 0x06, 0x13, 0x6c, 0x01, 0xfe, 0xcc, 0x17, 0x04, 0x6c,
+ 0x0f, 0x05, 0x2a, 0xfe, 0xf6, 0x13, 0x13, 0xfe, 0x0c, 0x14, 0x6e, 0xc7, 0x01, 0x06, 0x22, 0x6e,
+ 0x03, 0x88, 0xfe, 0x08, 0x14, 0x25, 0xfe, 0x08, 0x14, 0x12, 0xfe, 0xf6, 0x13, 0x57, 0x2e, 0x01,
+ 0x06, 0xfe, 0xd5, 0x10, 0x0f, 0x51, 0xff, 0x02, 0x00, 0x57, 0x4c, 0xa4, 0x1e, 0xfe, 0xff, 0x7f,
+ 0xfe, 0x30, 0x56, 0xfe, 0x00, 0x5c, 0x03, 0x0f, 0x51, 0xff, 0x02, 0x00, 0x57, 0x4c, 0xa4, 0x1e,
+ 0x34, 0xfe, 0x30, 0x56, 0xfe, 0x00, 0x5c, 0x03, 0x0f, 0x51, 0xff, 0x02, 0x00, 0x57, 0x4c, 0xa4,
+ 0x03, 0x0f, 0x51, 0xff, 0x02, 0x00, 0x57, 0x4c, 0xfe, 0x00, 0x5e, 0x03, 0x0f, 0x51, 0xff, 0x02,
+ 0x00, 0x57, 0x4c, 0xa4, 0xfe, 0x0b, 0x58, 0x03, 0x09, 0x5e, 0x01, 0x7a, 0x09, 0x4f, 0x01, 0x7a,
+ 0x09, 0x67, 0x01, 0x7a, 0x03, 0xfe, 0x03, 0xa1, 0x1e, 0x16, 0xff, 0x03, 0x00, 0x54, 0xfe, 0x00,
+ 0xf4, 0x20, 0x4c, 0xfe, 0x00, 0x7d, 0xfe, 0x01, 0x7d, 0xfe, 0x02, 0x7d, 0xfe, 0x03, 0x7c, 0x71,
+ 0x2b, 0x0c, 0x60, 0x1f, 0x61, 0xd7, 0x64, 0xd8, 0x65, 0x03, 0xfe, 0x62, 0x08, 0xfe, 0x82, 0x4a,
+ 0xfe, 0xe1, 0x1a, 0xfe, 0x83, 0x5a, 0x81, 0x03, 0x01, 0xbe, 0xfe, 0x42, 0x48, 0x4a, 0x4b, 0x3e,
+ 0x01, 0x06, 0x12, 0xfe, 0xf0, 0x15, 0x23, 0x21, 0xb5, 0x01, 0x06, 0x12, 0xfe, 0xf0, 0x15, 0x23,
+ 0x21, 0xfe, 0xe8, 0x0a, 0xfe, 0xc1, 0x59, 0x02, 0x93, 0x1a, 0xfe, 0xd8, 0x12, 0x36, 0x08, 0x0e,
+ 0xfe, 0xd0, 0x13, 0x22, 0x4d, 0x0e, 0x41, 0xfe, 0x18, 0x15, 0xcf, 0x0e, 0x4d, 0x0e, 0xfa, 0x28,
+ 0xab, 0x72, 0xfe, 0x36, 0x15, 0x48, 0x0f, 0x05, 0x18, 0xab, 0x89, 0x31, 0xfe, 0x78, 0x10, 0xff,
+ 0x02, 0x83, 0x55, 0xb8, 0xff, 0x02, 0x83, 0x55, 0x4d, 0x19, 0xba, 0xd4, 0xfe, 0x30, 0x00, 0xa7,
+ 0xfc, 0x18, 0x5b, 0x0f, 0x05, 0xfe, 0x56, 0x10, 0x4d, 0x0a, 0xf9, 0xd4, 0xfe, 0x64, 0x00, 0xa7,
+ 0xfc, 0x09, 0xfe, 0x64, 0x00, 0x18, 0x8d, 0x0f, 0x05, 0xfe, 0x28, 0x10, 0x4d, 0x05, 0xfe, 0x60,
+ 0x13, 0xd4, 0xfe, 0xc8, 0x00, 0xa7, 0xfc, 0x09, 0xfe, 0xc8, 0x00, 0x18, 0x8e, 0x0f, 0x05, 0x6a,
+ 0xd4, 0xfe, 0x90, 0x01, 0x41, 0xfe, 0x9c, 0x15, 0x3e, 0x9c, 0xfe, 0x43, 0xf4, 0x8f, 0xfe, 0x56,
+ 0xf0, 0xfe, 0xae, 0x15, 0xfe, 0x04, 0xf4, 0x51, 0xfe, 0x43, 0xf4, 0x8d, 0xf4, 0xcc, 0x01, 0xfe,
+ 0x4e, 0x14, 0x1e, 0x34, 0xf8, 0xfe, 0x00, 0x17, 0x85, 0x42, 0x41, 0xfe, 0xea, 0x15, 0x5a, 0x42,
+ 0xfe, 0x1c, 0x10, 0xfe, 0x00, 0x17, 0x85, 0x77, 0x41, 0xfe, 0xea, 0x15, 0x5a, 0x77, 0x6a, 0x4b,
+ 0x22, 0xfe, 0x4d, 0xf4, 0x00, 0xf6, 0x3e, 0x0f, 0x05, 0xfe, 0xb4, 0x56, 0xfe, 0xc3, 0x58, 0x03,
+ 0x4b, 0x0f, 0x0a, 0x03, 0x4b, 0x3b, 0x70, 0x4a, 0x3e, 0x01, 0x06, 0x12, 0xa1, 0x23, 0x21, 0xb5,
+ 0xfe, 0x03, 0xea, 0xfe, 0x7e, 0x01, 0x01, 0x06, 0x12, 0xa1, 0x23, 0x21, 0xfe, 0xe9, 0x0a, 0x01,
+ 0x06, 0x12, 0xa1, 0x23, 0x21, 0xfe, 0xe9, 0x0a, 0xfe, 0x05, 0xea, 0xfe, 0x7f, 0x01, 0x01, 0x06,
+ 0x12, 0xa1, 0x23, 0x21, 0xfe, 0x69, 0x09, 0xfe, 0x02, 0xea, 0xfe, 0x80, 0x01, 0x01, 0x06, 0x12,
+ 0xa1, 0x23, 0x21, 0xfe, 0xe8, 0x08, 0x40, 0xfe, 0x81, 0x01, 0x02, 0xad, 0x1a, 0x56, 0x36, 0x08,
+ 0x20, 0x2c, 0x9b, 0x70, 0xb9, 0x4d, 0x05, 0x2d, 0xfe, 0x34, 0xf4, 0x34, 0x9a, 0x70, 0x02, 0x93,
+ 0x1a, 0x56, 0x36, 0x08, 0x0e, 0x2c, 0xf0, 0x4a, 0x3e, 0xfe, 0x90, 0x10, 0xfe, 0x40, 0x5a, 0x1e,
+ 0x34, 0xf7, 0x85, 0x42, 0x41, 0xfe, 0xb6, 0x16, 0x5a, 0x42, 0x6a, 0x85, 0x77, 0x41, 0xfe, 0xb6,
+ 0x16, 0x5a, 0x77, 0xfe, 0xb4, 0x56, 0xfe, 0x40, 0x5d, 0x01, 0xbe, 0x01, 0xfe, 0x8e, 0x1b, 0xfe,
+ 0x02, 0x17, 0xfe, 0xc8, 0x45, 0xfe, 0x5a, 0xf0, 0xfe, 0xcc, 0x16, 0xfe, 0x43, 0x48, 0x28, 0x8c,
+ 0x2d, 0xfe, 0x34, 0xf4, 0xfe, 0x00, 0x11, 0xfe, 0x40, 0x10, 0x28, 0xab, 0x2d, 0xfe, 0x34, 0xf4,
+ 0x31, 0xfe, 0x34, 0x10, 0x28, 0xfe, 0x0b, 0x00, 0x2d, 0x3f, 0x5b, 0xfe, 0x28, 0x10, 0xfe, 0xc0,
+ 0x49, 0xff, 0x02, 0x00, 0x54, 0xa9, 0xfe, 0x90, 0x01, 0x41, 0xfe, 0x06, 0x17, 0x3e, 0xfe, 0x1c,
+ 0xf4, 0x34, 0x9c, 0xfe, 0x40, 0xf4, 0x8f, 0xfe, 0x56, 0xf0, 0xfe, 0x18, 0x17, 0xfe, 0x04, 0xf4,
+ 0x51, 0xfe, 0x40, 0xf4, 0x8d, 0xf4, 0x3b, 0x28, 0x8c, 0x49, 0xce, 0x0a, 0x1d, 0xfe, 0x7f, 0x01,
+ 0xfe, 0xc8, 0x46, 0xfe, 0x24, 0x13, 0x85, 0x00, 0x56, 0x22, 0x1d, 0xfe, 0x7e, 0x01, 0xfe, 0xc8,
+ 0x45, 0xfe, 0x14, 0x13, 0x1d, 0xfe, 0x80, 0x01, 0xfe, 0x48, 0x45, 0xfe, 0x0c, 0x13, 0x1d, 0xfe,
+ 0x81, 0x01, 0xfe, 0xc8, 0x44, 0x49, 0x22, 0x03, 0x0f, 0x05, 0x03, 0x70, 0x3e, 0x4b, 0x0f, 0x0a,
+ 0x03, 0x10, 0x05, 0x01, 0x06, 0x13, 0xfe, 0x8e, 0x17, 0x10, 0x0a, 0x01, 0x06, 0x13, 0xfe, 0x8e,
+ 0x17, 0x10, 0x19, 0x01, 0x06, 0x13, 0xfe, 0x8e, 0x17, 0x6e, 0xfe, 0x89, 0x49, 0x01, 0x06, 0x03,
+ 0x10, 0x05, 0x01, 0x06, 0x13, 0xbc, 0x10, 0x19, 0x01, 0x06, 0x13, 0xbc, 0x10, 0x05, 0x01, 0x06,
+ 0x13, 0xbc, 0xfe, 0x89, 0x49, 0x01, 0x06, 0x13, 0xbc, 0x6e, 0xfe, 0x89, 0x4a, 0x01, 0x06, 0x03,
+ 0x4b, 0x03, 0x10, 0x05, 0x01, 0x06, 0x13, 0x6d, 0x10, 0x76, 0x01, 0x06, 0x13, 0x6d, 0x10, 0x0e,
+ 0x01, 0x06, 0x13, 0x6d, 0xfe, 0x89, 0x49, 0x01, 0x06, 0x13, 0x6d, 0x10, 0x00, 0x01, 0x06, 0x13,
+ 0x6d, 0xfe, 0x89, 0x4a, 0x01, 0x06, 0x13, 0x6d, 0xfe, 0x09, 0x49, 0x01, 0x06, 0x13, 0x6d, 0x6e,
+ 0xc7, 0x01, 0x06, 0x03, 0x1d, 0xe2, 0x07, 0x05, 0xfe, 0x48, 0x13, 0xc3, 0x1c, 0xe2, 0xfe, 0x49,
+ 0xf4, 0x00, 0x48, 0x6e, 0x9a, 0x57, 0xfe, 0x01, 0xec, 0xfe, 0x27, 0x01, 0xc7, 0xff, 0x02, 0x00,
+ 0x10, 0x2a, 0xfe, 0x4a, 0x18, 0x35, 0x07, 0xfe, 0xe3, 0x00, 0xfe, 0x20, 0x13, 0x12, 0xfe, 0x6e,
+ 0x18, 0x22, 0x1c, 0x97, 0x01, 0x47, 0x1d, 0x97, 0x07, 0x05, 0x55, 0x0b, 0x59, 0x05, 0x3d, 0x03,
+ 0x09, 0x53, 0x01, 0x14, 0xfe, 0x00, 0x40, 0xa2, 0x07, 0x16, 0xba, 0x09, 0x96, 0x01, 0x14, 0xa2,
+ 0x09, 0x5f, 0x01, 0xb7, 0x03, 0x09, 0x96, 0x01, 0x14, 0xa2, 0xfe, 0x80, 0xe7, 0x16, 0x07, 0x16,
+ 0x56, 0xfe, 0x45, 0x58, 0x01, 0xfb, 0xa2, 0x03, 0x09, 0x53, 0x01, 0x14, 0xa2, 0x09, 0x5f, 0x01,
+ 0xb7, 0x03, 0x09, 0x53, 0x01, 0x14, 0xfe, 0x80, 0x80, 0xfe, 0x80, 0x4c, 0xfe, 0x49, 0xe4, 0x16,
+ 0xba, 0x09, 0x96, 0x01, 0x14, 0xfe, 0x80, 0x4c, 0x09, 0x5f, 0x01, 0x7a, 0x03, 0x18, 0x16, 0x7f,
+ 0x73, 0xe3, 0xfe, 0x18, 0xdf, 0xfe, 0x19, 0xde, 0xfe, 0x24, 0x1c, 0xfe, 0x1d, 0xf7, 0x38, 0xa8,
+ 0xfe, 0x0a, 0x19, 0x01, 0xfe, 0x10, 0x1a, 0xfe, 0x0c, 0x13, 0xaa, 0x38, 0x73, 0xfe, 0x2c, 0x01,
+ 0xfe, 0x2f, 0x19, 0x03, 0xc4, 0x26, 0xfe, 0xfa, 0x18, 0xfe, 0xda, 0x10, 0x18, 0x16, 0x7f, 0x02,
+ 0xfe, 0x64, 0x01, 0xfe, 0x00, 0xf4, 0x20, 0xfe, 0x18, 0x58, 0x02, 0xfe, 0x66, 0x01, 0xfe, 0x19,
+ 0x58, 0xaa, 0x20, 0xfe, 0x3c, 0x90, 0xfe, 0x30, 0xf4, 0x05, 0xfe, 0x3c, 0x50, 0x73, 0xfe, 0x38,
+ 0x00, 0xfe, 0x0f, 0x79, 0xfe, 0x1c, 0xf7, 0x20, 0xa8, 0xfe, 0x54, 0x19, 0xfe, 0xb6, 0x14, 0x2c,
+ 0x03, 0xc4, 0x26, 0xfe, 0x2c, 0x19, 0xfe, 0x9c, 0x10, 0x18, 0x16, 0x7f, 0xfe, 0x83, 0x5a, 0xfe,
+ 0x18, 0xdf, 0xfe, 0x19, 0xde, 0xfe, 0x1d, 0xf7, 0x4e, 0xa8, 0xfe, 0x76, 0x19, 0xbb, 0xf8, 0xaa,
+ 0x4e, 0x73, 0x0e, 0xfe, 0xaf, 0x19, 0xfe, 0x98, 0xe7, 0x00, 0x03, 0xc4, 0x26, 0xfe, 0x6a, 0x19,
+ 0xfe, 0x6c, 0x10, 0x18, 0x16, 0x7f, 0xfe, 0x30, 0xbc, 0xfe, 0xb2, 0xbc, 0xaa, 0x43, 0x73, 0x0e,
+ 0xfe, 0x0f, 0x79, 0xfe, 0x1c, 0xf7, 0x43, 0xa8, 0xfe, 0xae, 0x19, 0xfe, 0x5c, 0x14, 0x2c, 0x03,
+ 0xc4, 0x26, 0xfe, 0x9a, 0x19, 0xfe, 0x42, 0x10, 0xfe, 0x02, 0xf6, 0x16, 0x7f, 0xfe, 0x18, 0xfe,
+ 0x62, 0xfe, 0x19, 0xfe, 0x63, 0xfe, 0x03, 0xa1, 0xfe, 0x1d, 0xf7, 0x5d, 0xa8, 0xfe, 0xd4, 0x19,
+ 0xfe, 0x36, 0x14, 0xfe, 0x1c, 0x13, 0xaa, 0x5d, 0x3b, 0xfe, 0x83, 0x58, 0xfe, 0xaf, 0x19, 0xfe,
+ 0x80, 0xe7, 0x16, 0xfe, 0x81, 0xe7, 0x16, 0x11, 0xfe, 0xdd, 0x00, 0x71, 0x2b, 0x03, 0x71, 0x2b,
+ 0xfe, 0x12, 0x45, 0x26, 0xfe, 0xc4, 0x19, 0x1b, 0x05, 0x40, 0xac, 0xbf, 0x04, 0x30, 0xfe, 0x39,
+ 0xf0, 0xfe, 0x18, 0x1a, 0x22, 0x03, 0xfe, 0x7e, 0x18, 0x1e, 0x19, 0x2d, 0x0f, 0x0d, 0x03, 0x7f,
+ 0x02, 0xe1, 0x1e, 0x05, 0xfe, 0xef, 0x12, 0xfe, 0xe1, 0x10, 0x89, 0x2f, 0x6f, 0x35, 0x07, 0x50,
+ 0xfe, 0x3c, 0x13, 0xfe, 0x7e, 0x14, 0xfe, 0x42, 0x13, 0x58, 0xcd, 0x09, 0x53, 0x01, 0x14, 0xc6,
+ 0xfe, 0x3e, 0x12, 0xfe, 0x41, 0x48, 0xfe, 0x45, 0x48, 0x01, 0xfb, 0xfe, 0x00, 0xcc, 0xc6, 0xfe,
+ 0xf3, 0x13, 0x34, 0x82, 0x07, 0x16, 0x9e, 0x09, 0x96, 0x01, 0x14, 0xfe, 0x80, 0x4c, 0x01, 0x7c,
+ 0xfe, 0x16, 0x10, 0x07, 0x94, 0x49, 0xfe, 0x3c, 0x14, 0xfe, 0x24, 0x12, 0xfe, 0x14, 0x56, 0xfe,
+ 0xd6, 0xf0, 0xfe, 0x38, 0x1a, 0x18, 0x0a, 0x03, 0xfe, 0x9c, 0xe7, 0x0a, 0x15, 0xfe, 0x15, 0x00,
+ 0x68, 0x86, 0x2b, 0x01, 0xef, 0x18, 0x05, 0x03, 0x0b, 0x59, 0x38, 0x3d, 0x11, 0x50, 0x01, 0x7c,
+ 0x18, 0x05, 0x03, 0xfe, 0x38, 0x90, 0xfe, 0xba, 0x90, 0x8a, 0xdc, 0x75, 0xdd, 0xfe, 0x48, 0x55,
+ 0x2c, 0xfe, 0xc9, 0x55, 0x03, 0x1d, 0xb0, 0x80, 0x1c, 0xb0, 0x03, 0x09, 0xb1, 0x01, 0x14, 0xfe,
+ 0x41, 0x48, 0x09, 0x44, 0x01, 0x14, 0xfe, 0x49, 0x44, 0x17, 0xfe, 0x00, 0x1b, 0x80, 0x82, 0x03,
+ 0x09, 0x53, 0x01, 0x14, 0x07, 0x16, 0x55, 0x09, 0x5f, 0x01, 0xb7, 0x09, 0x44, 0x01, 0x14, 0x80,
+ 0x82, 0x03, 0xfe, 0x4e, 0xe4, 0x19, 0x72, 0xfe, 0x34, 0x1b, 0x02, 0xfe, 0x90, 0x00, 0xfe, 0x3a,
+ 0x45, 0xfe, 0x2c, 0x10, 0xfe, 0x4e, 0xe4, 0xdb, 0x72, 0xfe, 0x46, 0x1b, 0x02, 0xfe, 0x92, 0x00,
+ 0xcf, 0x0e, 0xf1, 0xfe, 0x4e, 0xe4, 0xfe, 0x0b, 0x00, 0x72, 0xfe, 0x58, 0x1b, 0x02, 0xfe, 0x94,
+ 0x00, 0xcf, 0x20, 0xfe, 0x08, 0x10, 0x02, 0xfe, 0x96, 0x00, 0xcf, 0x5b, 0xfe, 0x4e, 0x45, 0x9d,
+ 0xc5, 0xff, 0x04, 0x68, 0x54, 0xf3, 0x1e, 0x42, 0xfe, 0x08, 0x1c, 0xfe, 0x67, 0x19, 0xfe, 0x0a,
+ 0x1c, 0xfe, 0x1a, 0xf4, 0xfe, 0x00, 0x04, 0x9d, 0xa9, 0x19, 0x41, 0xfe, 0x8c, 0x1b, 0x0f, 0x19,
+ 0x03, 0x07, 0x8b, 0xfe, 0x5a, 0xf0, 0xfe, 0x9c, 0x1b, 0x29, 0x8c, 0xfe, 0x34, 0x10, 0x07, 0x0e,
+ 0xfe, 0x5a, 0xf0, 0xfe, 0xaa, 0x1b, 0x29, 0xab, 0xfe, 0x26, 0x10, 0x07, 0x19, 0x2d, 0x29, 0x5b,
+ 0xf1, 0x07, 0x0a, 0x2d, 0x29, 0x8d, 0xb9, 0x07, 0x05, 0x2d, 0x29, 0x8e, 0x9a, 0xc3, 0x03, 0x1b,
+ 0x8c, 0x01, 0x3c, 0xfe, 0x04, 0xfe, 0x92, 0x02, 0x95, 0xcc, 0x03, 0x25, 0xfe, 0xfe, 0x1b, 0xfe,
+ 0x14, 0xf0, 0x06, 0x2a, 0xfe, 0xee, 0x1b, 0x25, 0xfe, 0xfe, 0x1b, 0x88, 0xfe, 0xfe, 0x1b, 0xfe,
+ 0x82, 0xf0, 0xfe, 0xf2, 0x1b, 0x03, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff, 0x02,
+ 0x00, 0x00,
+};
+
+STATIC unsigned short _adv_asc38C1600_size =
+ sizeof(_adv_asc38C1600_buf); /* 0x1662 */
+STATIC ADV_DCNT _adv_asc38C1600_chksum =
+ 0x057A378AUL; /* Expanded little_endian checksum. */
/* a_init.c */
/*
* configuration. The BIOS now uses this structure when it is built.
* Additional structure information can be found in a_condor.h where
* the structure is defined.
+ *
+ * The XXX_Field_IsChar structs are needed to correct for endianness.
+ * These values are read from the board 16 bits at a time directly
+ * into the structs. Because some fields are char, the values will be
+ * in the wrong order. The XXX_Field_IsChar tells when to flip the
+ * bytes. Cleaner solutions are welcome. :-)
+ *
*/
STATIC ADVEEP_3550_CONFIG
Default_3550_EEPROM_Config ASC_INITDATA = {
0 /* num_of_err */
};
+STATIC ADVEEP_3550_CONFIG
+ADVEEP_3550_Config_Field_IsChar ASC_INITDATA = {
+ 0, /* cfg_lsw */
+ 0, /* cfg_msw */
+ 0, /* -disc_enable */
+ 0, /* wdtr_able */
+ 0, /* sdtr_able */
+ 0, /* start_motor */
+ 0, /* tagqng_able */
+ 0, /* bios_scan */
+ 0, /* scam_tolerant */
+ 1, /* adapter_scsi_id */
+ 1, /* bios_boot_delay */
+ 1, /* scsi_reset_delay */
+ 1, /* bios_id_lun */
+ 1, /* termination */
+ 1, /* reserved1 */
+ 0, /* bios_ctrl */
+ 0, /* ultra_able */
+ 0, /* reserved2 */
+ 1, /* max_host_qng */
+ 1, /* max_dvc_qng */
+ 0, /* dvc_cntl */
+ 0, /* bug_fix */
+ 0, /* serial_number_word1 */
+ 0, /* serial_number_word2 */
+ 0, /* serial_number_word3 */
+ 0, /* check_sum */
+ { 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 }, /* oem_name[16] */
+ 0, /* dvc_err_code */
+ 0, /* adv_err_code */
+ 0, /* adv_err_addr */
+ 0, /* saved_dvc_err_code */
+ 0, /* saved_adv_err_code */
+ 0, /* saved_adv_err_addr */
+ 0 /* num_of_err */
+};
+
STATIC ADVEEP_38C0800_CONFIG
Default_38C0800_EEPROM_Config ASC_INITDATA = {
ADV_EEPROM_BIOS_ENABLE, /* 00 cfg_lsw */
0 /* 63 reserved */
};
-/*
- * Initialize the ADV_DVC_VAR structure.
- *
- * On failure set the ADV_DVC_VAR field 'err_code' and return ADV_ERROR.
- *
- * For a non-fatal error return a warning code. If there are no warnings
- * then 0 is returned.
- */
-ASC_INITFUNC(
-STATIC int,
-AdvInitGetConfig(ADV_DVC_VAR *asc_dvc)
-)
-{
- ushort warn_code;
- AdvPortAddr iop_base;
- uchar pci_cmd_reg;
+STATIC ADVEEP_38C0800_CONFIG
+ADVEEP_38C0800_Config_Field_IsChar ASC_INITDATA = {
+ 0, /* 00 cfg_lsw */
+ 0, /* 01 cfg_msw */
+ 0, /* 02 disc_enable */
+ 0, /* 03 wdtr_able */
+ 0, /* 04 sdtr_speed1 */
+ 0, /* 05 start_motor */
+ 0, /* 06 tagqng_able */
+ 0, /* 07 bios_scan */
+ 0, /* 08 scam_tolerant */
+ 1, /* 09 adapter_scsi_id */
+ 1, /* bios_boot_delay */
+ 1, /* 10 scsi_reset_delay */
+ 1, /* bios_id_lun */
+ 1, /* 11 termination_se */
+ 1, /* termination_lvd */
+ 0, /* 12 bios_ctrl */
+ 0, /* 13 sdtr_speed2 */
+ 0, /* 14 sdtr_speed3 */
+ 1, /* 15 max_host_qng */
+ 1, /* max_dvc_qng */
+ 0, /* 16 dvc_cntl */
+ 0, /* 17 sdtr_speed4 */
+ 0, /* 18 serial_number_word1 */
+ 0, /* 19 serial_number_word2 */
+ 0, /* 20 serial_number_word3 */
+ 0, /* 21 check_sum */
+ { 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 }, /* 22-29 oem_name[16] */
+ 0, /* 30 dvc_err_code */
+ 0, /* 31 adv_err_code */
+ 0, /* 32 adv_err_addr */
+ 0, /* 33 saved_dvc_err_code */
+ 0, /* 34 saved_adv_err_code */
+ 0, /* 35 saved_adv_err_addr */
+ 0, /* 36 reserved */
+ 0, /* 37 reserved */
+ 0, /* 38 reserved */
+ 0, /* 39 reserved */
+ 0, /* 40 reserved */
+ 0, /* 41 reserved */
+ 0, /* 42 reserved */
+ 0, /* 43 reserved */
+ 0, /* 44 reserved */
+ 0, /* 45 reserved */
+ 0, /* 46 reserved */
+ 0, /* 47 reserved */
+ 0, /* 48 reserved */
+ 0, /* 49 reserved */
+ 0, /* 50 reserved */
+ 0, /* 51 reserved */
+ 0, /* 52 reserved */
+ 0, /* 53 reserved */
+ 0, /* 54 reserved */
+ 0, /* 55 reserved */
+ 0, /* 56 cisptr_lsw */
+ 0, /* 57 cisprt_msw */
+ 0, /* 58 subsysvid */
+ 0, /* 59 subsysid */
+ 0, /* 60 reserved */
+ 0, /* 61 reserved */
+ 0, /* 62 reserved */
+ 0 /* 63 reserved */
+};
+
+STATIC ADVEEP_38C1600_CONFIG
+Default_38C1600_EEPROM_Config ASC_INITDATA = {
+ ADV_EEPROM_BIOS_ENABLE, /* 00 cfg_lsw */
+ 0x0000, /* 01 cfg_msw */
+ 0xFFFF, /* 02 disc_enable */
+ 0xFFFF, /* 03 wdtr_able */
+ 0x5555, /* 04 sdtr_speed1 */
+ 0xFFFF, /* 05 start_motor */
+ 0xFFFF, /* 06 tagqng_able */
+ 0xFFFF, /* 07 bios_scan */
+ 0, /* 08 scam_tolerant */
+ 7, /* 09 adapter_scsi_id */
+ 0, /* bios_boot_delay */
+ 3, /* 10 scsi_reset_delay */
+ 0, /* bios_id_lun */
+ 0, /* 11 termination_se */
+ 0, /* termination_lvd */
+ 0xFFE7, /* 12 bios_ctrl */
+ 0x5555, /* 13 sdtr_speed2 */
+ 0x5555, /* 14 sdtr_speed3 */
+ ASC_DEF_MAX_HOST_QNG, /* 15 max_host_qng */
+ ASC_DEF_MAX_DVC_QNG, /* max_dvc_qng */
+ 0, /* 16 dvc_cntl */
+ 0x5555, /* 17 sdtr_speed4 */
+ 0, /* 18 serial_number_word1 */
+ 0, /* 19 serial_number_word2 */
+ 0, /* 20 serial_number_word3 */
+ 0, /* 21 check_sum */
+ { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 }, /* 22-29 oem_name[16] */
+ 0, /* 30 dvc_err_code */
+ 0, /* 31 adv_err_code */
+ 0, /* 32 adv_err_addr */
+ 0, /* 33 saved_dvc_err_code */
+ 0, /* 34 saved_adv_err_code */
+ 0, /* 35 saved_adv_err_addr */
+ 0, /* 36 reserved */
+ 0, /* 37 reserved */
+ 0, /* 38 reserved */
+ 0, /* 39 reserved */
+ 0, /* 40 reserved */
+ 0, /* 41 reserved */
+ 0, /* 42 reserved */
+ 0, /* 43 reserved */
+ 0, /* 44 reserved */
+ 0, /* 45 reserved */
+ 0, /* 46 reserved */
+ 0, /* 47 reserved */
+ 0, /* 48 reserved */
+ 0, /* 49 reserved */
+ 0, /* 50 reserved */
+ 0, /* 51 reserved */
+ 0, /* 52 reserved */
+ 0, /* 53 reserved */
+ 0, /* 54 reserved */
+ 0, /* 55 reserved */
+ 0, /* 56 cisptr_lsw */
+ 0, /* 57 cisprt_msw */
+ ADV_PCI_VENDOR_ID, /* 58 subsysvid */
+ ADV_PCI_DEVID_38C1600_REV1, /* 59 subsysid */
+ 0, /* 60 reserved */
+ 0, /* 61 reserved */
+ 0, /* 62 reserved */
+ 0 /* 63 reserved */
+};
+
+STATIC ADVEEP_38C1600_CONFIG
+ADVEEP_38C1600_Config_Field_IsChar ASC_INITDATA = {
+ 0, /* 00 cfg_lsw */
+ 0, /* 01 cfg_msw */
+ 0, /* 02 disc_enable */
+ 0, /* 03 wdtr_able */
+ 0, /* 04 sdtr_speed1 */
+ 0, /* 05 start_motor */
+ 0, /* 06 tagqng_able */
+ 0, /* 07 bios_scan */
+ 0, /* 08 scam_tolerant */
+ 1, /* 09 adapter_scsi_id */
+ 1, /* bios_boot_delay */
+ 1, /* 10 scsi_reset_delay */
+ 1, /* bios_id_lun */
+ 1, /* 11 termination_se */
+ 1, /* termination_lvd */
+ 0, /* 12 bios_ctrl */
+ 0, /* 13 sdtr_speed2 */
+ 0, /* 14 sdtr_speed3 */
+ 1, /* 15 max_host_qng */
+ 1, /* max_dvc_qng */
+ 0, /* 16 dvc_cntl */
+ 0, /* 17 sdtr_speed4 */
+ 0, /* 18 serial_number_word1 */
+ 0, /* 19 serial_number_word2 */
+ 0, /* 20 serial_number_word3 */
+ 0, /* 21 check_sum */
+ { 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 }, /* 22-29 oem_name[16] */
+ 0, /* 30 dvc_err_code */
+ 0, /* 31 adv_err_code */
+ 0, /* 32 adv_err_addr */
+ 0, /* 33 saved_dvc_err_code */
+ 0, /* 34 saved_adv_err_code */
+ 0, /* 35 saved_adv_err_addr */
+ 0, /* 36 reserved */
+ 0, /* 37 reserved */
+ 0, /* 38 reserved */
+ 0, /* 39 reserved */
+ 0, /* 40 reserved */
+ 0, /* 41 reserved */
+ 0, /* 42 reserved */
+ 0, /* 43 reserved */
+ 0, /* 44 reserved */
+ 0, /* 45 reserved */
+ 0, /* 46 reserved */
+ 0, /* 47 reserved */
+ 0, /* 48 reserved */
+ 0, /* 49 reserved */
+ 0, /* 50 reserved */
+ 0, /* 51 reserved */
+ 0, /* 52 reserved */
+ 0, /* 53 reserved */
+ 0, /* 54 reserved */
+ 0, /* 55 reserved */
+ 0, /* 56 cisptr_lsw */
+ 0, /* 57 cisprt_msw */
+ 0, /* 58 subsysvid */
+ 0, /* 59 subsysid */
+ 0, /* 60 reserved */
+ 0, /* 61 reserved */
+ 0, /* 62 reserved */
+ 0 /* 63 reserved */
+};
+
+/*
+ * Initialize the ADV_DVC_VAR structure.
+ *
+ * On failure set the ADV_DVC_VAR field 'err_code' and return ADV_ERROR.
+ *
+ * For a non-fatal error return a warning code. If there are no warnings
+ * then 0 is returned.
+ */
+ASC_INITFUNC(
+STATIC int,
+AdvInitGetConfig(ADV_DVC_VAR *asc_dvc)
+)
+{
+ ushort warn_code;
+ AdvPortAddr iop_base;
+ uchar pci_cmd_reg;
int status;
warn_code = 0;
AdvWriteWordRegister(iop_base, IOPW_CTRL_REG,
ADV_CTRL_REG_CMD_WR_IO_REG);
- if (asc_dvc->chip_type == ADV_CHIP_ASC38C0800)
+ if (asc_dvc->chip_type == ADV_CHIP_ASC38C1600)
+ {
+ if ((status = AdvInitFrom38C1600EEP(asc_dvc)) == ADV_ERROR)
+ {
+ return ADV_ERROR;
+ }
+ } else if (asc_dvc->chip_type == ADV_CHIP_ASC38C0800)
{
if ((status = AdvInitFrom38C0800EEP(asc_dvc)) == ADV_ERROR)
{
{
AdvWriteWordAutoIncLram(iop_base, (((ushort)
_adv_asc3550_buf[i + 3] << 8) |
- _adv_asc3550_buf[i + 2]));
+ _adv_asc3550_buf[i + 2]));
word++;
}
i += 3;
{
AdvWriteWordAutoIncLram(iop_base, (((ushort)
_adv_asc3550_buf[i + 2] << 8) |
- _adv_asc3550_buf[i + 1]));
+ _adv_asc3550_buf[i + 1]));
i += 2;
word++;
} else
{
AdvWriteWordAutoIncLram(iop_base, (((ushort)
_adv_asc3550_buf[(_adv_asc3550_buf[i] * 2) + 1] << 8) |
- _adv_asc3550_buf[_adv_asc3550_buf[i] * 2]));
+ _adv_asc3550_buf[_adv_asc3550_buf[i] * 2]));
word++;
}
}
*/
for (i = 0; i < ASC_MC_BIOSLEN/2; i++)
{
- AdvWriteByteLram(iop_base, ASC_MC_BIOSMEM + (2 * i), bios_mem[i]);
+ AdvWriteWordLram(iop_base, ASC_MC_BIOSMEM + (2 * i), bios_mem[i]);
}
/*
*/
if (asc_dvc->cfg->control_flag & CONTROL_FLAG_IGNORE_PERR)
{
- /*
- * Note: Don't remove the use of a temporary variable in
- * the following code, otherwise the Microsoft C compiler
- * will turn the following lines into a no-op.
- */
AdvReadWordLram(iop_base, ASC_MC_CONTROL_FLAG, word);
word |= CONTROL_FLAG_IGNORE_PERR;
AdvWriteWordLram(iop_base, ASC_MC_CONTROL_FLAG, word);
* after it is started below.
*/
AdvWriteWordLram(iop_base, ASC_MC_DEFAULT_SCSI_CFG0,
- PARITY_EN | SEL_TMO_LONG | OUR_ID_EN | asc_dvc->chip_scsi_id);
+ PARITY_EN | QUEUE_128 | SEL_TMO_LONG | OUR_ID_EN |
+ asc_dvc->chip_scsi_id);
/*
* Determine SCSI_CFG1 Microcode Default Value.
}
carrp->carr_pa = carr_paddr;
- carrp->carr_va = ADV_VADDR_TO_U32(carrp);
+ carrp->carr_va = cpu_to_le32(ADV_VADDR_TO_U32(carrp));
/*
* Insert the carrier at the beginning of the freelist.
*/
- carrp->next_vpa = ADV_VADDR_TO_U32(asc_dvc->carr_freelist);
+ carrp->next_vpa = cpu_to_le32(ADV_VADDR_TO_U32(asc_dvc->carr_freelist));
asc_dvc->carr_freelist = carrp;
carrp++;
return ADV_ERROR;
}
asc_dvc->carr_freelist =
- (ADV_CARR_T *) ADV_U32_TO_VADDR(asc_dvc->icq_sp->next_vpa);
+ (ADV_CARR_T *) ADV_U32_TO_VADDR(le32_to_cpu(asc_dvc->icq_sp->next_vpa));
/*
* The first command issued will be placed in the stopper carrier.
*/
- asc_dvc->icq_sp->next_vpa = ASC_CQ_STOPPER;
+ asc_dvc->icq_sp->next_vpa = cpu_to_le32(ASC_CQ_STOPPER);
/*
* Set RISC ICQ physical address start value.
*/
AdvWriteDWordLram(iop_base, ASC_MC_ICQ,
- cpu_to_le32(asc_dvc->icq_sp->carr_pa));
+ /* carr_pa is stored LE, must be native before write */
+ le32_to_cpu(asc_dvc->icq_sp->carr_pa));
/*
* Set-up the RISC->Host Initiator Response Queue (IRQ).
return ADV_ERROR;
}
asc_dvc->carr_freelist =
- (ADV_CARR_T *) ADV_U32_TO_VADDR(asc_dvc->irq_sp->next_vpa);
+ (ADV_CARR_T *) ADV_U32_TO_VADDR(le32_to_cpu(asc_dvc->irq_sp->next_vpa));
/*
* The first command completed by the RISC will be placed in
* Note: Set 'next_vpa' to ASC_CQ_STOPPER. When the request is
* completed the RISC will set the ASC_RQ_STOPPER bit.
*/
- asc_dvc->irq_sp->next_vpa = ASC_CQ_STOPPER;
+ asc_dvc->irq_sp->next_vpa = cpu_to_le32(ASC_CQ_STOPPER);
/*
* Set RISC IRQ physical address start value.
*/
AdvWriteDWordLram(iop_base, ASC_MC_IRQ,
- cpu_to_le32(asc_dvc->irq_sp->carr_pa));
+ /* carr_pa is LE, must be native before write */
+ le32_to_cpu(asc_dvc->irq_sp->carr_pa));
asc_dvc->carr_pending_cnt = 0;
AdvWriteByteRegister(iop_base, IOPB_INTR_ENABLES,
(ADV_INTR_ENABLE_HOST_INTR | ADV_INTR_ENABLE_GLOBAL_INTR));
- /*
- * Note: Don't remove the use of a temporary variable in
- * the following code, otherwise the Microsoft C compiler
- * will turn the following lines into a no-op.
- */
AdvReadWordLram(iop_base, ASC_MC_CODE_BEGIN_ADDR, word);
AdvWriteWordRegister(iop_base, IOPW_PC, word);
*/
if (asc_dvc->cfg->control_flag & CONTROL_FLAG_IGNORE_PERR)
{
- /*
- * Note: Don't remove the use of a temporary variable in
- * the following code, otherwise the Microsoft C compiler
- * will turn the following lines into a no-op.
- */
AdvReadWordLram(iop_base, ASC_MC_CONTROL_FLAG, word);
word |= CONTROL_FLAG_IGNORE_PERR;
AdvWriteWordLram(iop_base, ASC_MC_CONTROL_FLAG, word);
* after it is started below.
*/
AdvWriteWordLram(iop_base, ASC_MC_DEFAULT_SCSI_CFG0,
- PARITY_EN | SEL_TMO_LONG | OUR_ID_EN | asc_dvc->chip_scsi_id);
+ PARITY_EN | QUEUE_128 | SEL_TMO_LONG | OUR_ID_EN |
+ asc_dvc->chip_scsi_id);
/*
* Determine SCSI_CFG1 Microcode Default Value.
}
carrp->carr_pa = carr_paddr;
- carrp->carr_va = ADV_VADDR_TO_U32(carrp);
+ carrp->carr_va = cpu_to_le32(ADV_VADDR_TO_U32(carrp));
/*
* Insert the carrier at the beginning of the freelist.
*/
- carrp->next_vpa = ADV_VADDR_TO_U32(asc_dvc->carr_freelist);
+ carrp->next_vpa = cpu_to_le32(ADV_VADDR_TO_U32(asc_dvc->carr_freelist));
asc_dvc->carr_freelist = carrp;
carrp++;
return ADV_ERROR;
}
asc_dvc->carr_freelist =
- (ADV_CARR_T *) ADV_U32_TO_VADDR(asc_dvc->icq_sp->next_vpa);
+ (ADV_CARR_T *) ADV_U32_TO_VADDR(le32_to_cpu(asc_dvc->icq_sp->next_vpa));
/*
* The first command issued will be placed in the stopper carrier.
*/
- asc_dvc->icq_sp->next_vpa = ASC_CQ_STOPPER;
+ asc_dvc->icq_sp->next_vpa = cpu_to_le32(ASC_CQ_STOPPER);
/*
* Set RISC ICQ physical address start value.
*/
AdvWriteDWordLram(iop_base, ASC_MC_ICQ,
- cpu_to_le32(asc_dvc->icq_sp->carr_pa));
+ /* carr_pa is LE, must be native before write */
+ le32_to_cpu(asc_dvc->icq_sp->carr_pa));
/*
* Set-up the RISC->Host Initiator Response Queue (IRQ).
return ADV_ERROR;
}
asc_dvc->carr_freelist =
- (ADV_CARR_T *) ADV_U32_TO_VADDR(asc_dvc->irq_sp->next_vpa);
+ (ADV_CARR_T *) ADV_U32_TO_VADDR(le32_to_cpu(asc_dvc->irq_sp->next_vpa));
/*
* The first command completed by the RISC will be placed in
* Note: Set 'next_vpa' to ASC_CQ_STOPPER. When the request is
* completed the RISC will set the ASC_RQ_STOPPER bit.
*/
- asc_dvc->irq_sp->next_vpa = ASC_CQ_STOPPER;
+ asc_dvc->irq_sp->next_vpa = cpu_to_le32(ASC_CQ_STOPPER);
/*
* Set RISC IRQ physical address start value.
*/
AdvWriteDWordLram(iop_base, ASC_MC_IRQ,
- cpu_to_le32(asc_dvc->irq_sp->carr_pa));
+ /* carr_pa is LE, must be native before write */
+ le32_to_cpu(asc_dvc->irq_sp->carr_pa));
asc_dvc->carr_pending_cnt = 0;
AdvWriteByteRegister(iop_base, IOPB_INTR_ENABLES,
(ADV_INTR_ENABLE_HOST_INTR | ADV_INTR_ENABLE_GLOBAL_INTR));
- /*
- * Note: Don't remove the use of a temporary variable in
- * the following code, otherwise the Microsoft C compiler
- * will turn the following lines into a no-op.
- */
+
AdvReadWordLram(iop_base, ASC_MC_CODE_BEGIN_ADDR, word);
AdvWriteWordRegister(iop_base, IOPW_PC, word);
}
/*
- * Read the board's EEPROM configuration. Set fields in ADV_DVC_VAR and
- * ADV_DVC_CFG based on the EEPROM settings. The chip is stopped while
- * all of this is done.
+ * Initialize the ASC-38C1600.
*
- * On failure set the ADV_DVC_VAR field 'err_code' and return ADV_ERROR.
+ * On failure set the ASC_DVC_VAR field 'err_code' and return ADV_ERROR.
*
* For a non-fatal error return a warning code. If there are no warnings
* then 0 is returned.
- *
- * Note: Chip is stopped on entry.
*/
ASC_INITFUNC(
STATIC int,
-AdvInitFrom3550EEP(ADV_DVC_VAR *asc_dvc)
+AdvInitAsc38C1600Driver(ADV_DVC_VAR *asc_dvc)
)
{
- AdvPortAddr iop_base;
- ushort warn_code;
- ADVEEP_3550_CONFIG eep_config;
- int i;
+ AdvPortAddr iop_base;
+ ushort warn_code;
+ ADV_DCNT sum;
+ int begin_addr;
+ int end_addr;
+ ushort code_sum;
+ long word;
+ int j;
+ int adv_asc38C1600_expanded_size;
+ ADV_CARR_T *carrp;
+ ADV_DCNT contig_len;
+ ADV_SDCNT buf_size;
+ ADV_PADDR carr_paddr;
+ int i;
+ ushort scsi_cfg1;
+ uchar byte;
+ uchar tid;
+ ushort bios_mem[ASC_MC_BIOSLEN/2]; /* BIOS RISC Memory 0x40-0x8F. */
+ ushort wdtr_able, sdtr_able, ppr_able, tagqng_able;
+ uchar max_cmd[ASC_MAX_TID + 1];
- iop_base = asc_dvc->iop_base;
+ /* If there is already an error, don't continue. */
+ if (asc_dvc->err_code != 0)
+ {
+ return ADV_ERROR;
+ }
+
+ /*
+ * The caller must set 'chip_type' to ADV_CHIP_ASC38C1600.
+ */
+ if (asc_dvc->chip_type != ADV_CHIP_ASC38C1600)
+ {
+ asc_dvc->err_code = ASC_IERR_BAD_CHIPTYPE;
+ return ADV_ERROR;
+ }
warn_code = 0;
+ iop_base = asc_dvc->iop_base;
/*
- * Read the board's EEPROM configuration.
- *
- * Set default values if a bad checksum is found.
+ * Save the RISC memory BIOS region before writing the microcode.
+ * The BIOS may already be loaded and using its RISC LRAM region
+ * so its region must be saved and restored.
*
- * XXX - Don't handle big-endian access to EEPROM yet.
+ * Note: This code makes the assumption, which is currently true,
+ * that a chip reset does not clear RISC LRAM.
*/
- if (AdvGet3550EEPConfig(iop_base, &eep_config) != eep_config.check_sum)
+ for (i = 0; i < ASC_MC_BIOSLEN/2; i++)
{
- warn_code |= ASC_WARN_EEPROM_CHKSUM;
-
- /*
- * Set EEPROM default values.
- */
- for (i = 0; i < sizeof(ADVEEP_3550_CONFIG); i++)
- {
- *((uchar *) &eep_config + i) =
- *((uchar *) &Default_3550_EEPROM_Config + i);
- }
-
- /*
- * Assume the 6 byte board serial number that was read
- * from EEPROM is correct even if the EEPROM checksum
- * failed.
- */
- eep_config.serial_number_word3 =
- AdvReadEEPWord(iop_base, ASC_EEP_DVC_CFG_END - 1);
-
- eep_config.serial_number_word2 =
- AdvReadEEPWord(iop_base, ASC_EEP_DVC_CFG_END - 2);
-
- eep_config.serial_number_word1 =
- AdvReadEEPWord(iop_base, ASC_EEP_DVC_CFG_END - 3);
-
- AdvSet3550EEPConfig(iop_base, &eep_config);
+ AdvReadWordLram(iop_base, ASC_MC_BIOSMEM + (2 * i), bios_mem[i]);
}
+
/*
- * Set ASC_DVC_VAR and ASC_DVC_CFG variables from the
- * EEPROM configuration that was read.
- *
- * This is the mapping of EEPROM fields to Adv Library fields.
+ * Save current per TID negotiated values.
*/
- asc_dvc->wdtr_able = eep_config.wdtr_able;
- asc_dvc->sdtr_able = eep_config.sdtr_able;
+ AdvReadWordLram(iop_base, ASC_MC_WDTR_ABLE, wdtr_able);
+ AdvReadWordLram(iop_base, ASC_MC_SDTR_ABLE, sdtr_able);
+ AdvReadWordLram(iop_base, ASC_MC_PPR_ABLE, ppr_able);
+ AdvReadWordLram(iop_base, ASC_MC_TAGQNG_ABLE, tagqng_able);
+ for (tid = 0; tid <= ASC_MAX_TID; tid++)
+ {
+ AdvReadByteLram(iop_base, ASC_MC_NUMBER_OF_MAX_CMD + tid,
+ max_cmd[tid]);
+ }
+
+ /*
+ * RAM BIST (Built-In Self Test)
+ *
+ * Address : I/O base + offset 0x38h register (byte).
+ * Function: Bit 7-6(RW) : RAM mode
+ * Normal Mode : 0x00
+ * Pre-test Mode : 0x40
+ * RAM Test Mode : 0x80
+ * Bit 5 : unused
+ * Bit 4(RO) : Done bit
+ * Bit 3-0(RO) : Status
+ * Host Error : 0x08
+ * Int_RAM Error : 0x04
+ * RISC Error : 0x02
+ * SCSI Error : 0x01
+ * No Error : 0x00
+ *
+ * Note: RAM BIST code should be put right here, before loading the
+ * microcode and after saving the RISC memory BIOS region.
+ */
+
+ /*
+ * LRAM Pre-test
+ *
+ * Write PRE_TEST_MODE (0x40) to register and wait for 10 milliseconds.
+ * If Done bit not set or low nibble not PRE_TEST_VALUE (0x05), return
+ * an error. Reset to NORMAL_MODE (0x00) and do again. If cannot reset
+ * to NORMAL_MODE, return an error too.
+ */
+ for (i = 0; i < 2; i++)
+ {
+ AdvWriteByteRegister(iop_base, IOPB_RAM_BIST, PRE_TEST_MODE);
+ DvcSleepMilliSecond(10); /* Wait for 10ms before reading back. */
+ byte = AdvReadByteRegister(iop_base, IOPB_RAM_BIST);
+ if ((byte & RAM_TEST_DONE) == 0 || (byte & 0x0F) != PRE_TEST_VALUE)
+ {
+ asc_dvc->err_code |= ASC_IERR_BIST_PRE_TEST;
+ return ADV_ERROR;
+ }
+
+ AdvWriteByteRegister(iop_base, IOPB_RAM_BIST, NORMAL_MODE);
+ DvcSleepMilliSecond(10); /* Wait for 10ms before reading back. */
+ if (AdvReadByteRegister(iop_base, IOPB_RAM_BIST)
+ != NORMAL_VALUE)
+ {
+ asc_dvc->err_code |= ASC_IERR_BIST_PRE_TEST;
+ return ADV_ERROR;
+ }
+ }
+
+ /*
+ * LRAM Test - It takes about 1.5 ms to run through the test.
+ *
+ * Write RAM_TEST_MODE (0x80) to register and wait for 10 milliseconds.
+ * If Done bit not set or Status not 0, save register byte, set the
+ * err_code, and return an error.
+ */
+ AdvWriteByteRegister(iop_base, IOPB_RAM_BIST, RAM_TEST_MODE);
+ DvcSleepMilliSecond(10); /* Wait for 10ms before checking status. */
+
+ byte = AdvReadByteRegister(iop_base, IOPB_RAM_BIST);
+ if ((byte & RAM_TEST_DONE) == 0 || (byte & RAM_TEST_STATUS) != 0)
+ {
+ /* Get here if Done bit not set or Status not 0. */
+ asc_dvc->bist_err_code = byte; /* for BIOS display message */
+ asc_dvc->err_code |= ASC_IERR_BIST_RAM_TEST;
+ return ADV_ERROR;
+ }
+
+ /* We need to reset back to normal mode after LRAM test passes. */
+ AdvWriteByteRegister(iop_base, IOPB_RAM_BIST, NORMAL_MODE);
+
+ /*
+ * Load the Microcode
+ *
+ * Write the microcode image to RISC memory starting at address 0.
+ *
+ */
+ AdvWriteWordRegister(iop_base, IOPW_RAM_ADDR, 0);
+
+ /*
+ * Assume the following compressed format of the microcode buffer:
+ *
+ * 254 word (508 byte) table indexed by byte code followed
+ * by the following byte codes:
+ *
+ * 1-Byte Code:
+ * 00: Emit word 0 in table.
+ * 01: Emit word 1 in table.
+ * .
+ * FD: Emit word 253 in table.
+ *
+ * Multi-Byte Code:
+ * FE WW WW: (3 byte code) Word to emit is the next word WW WW.
+ * FF BB WW WW: (4 byte code) Emit BB count times next word WW WW.
+ */
+ word = 0;
+ for (i = 253 * 2; i < _adv_asc38C1600_size; i++)
+ {
+ if (_adv_asc38C1600_buf[i] == 0xff)
+ {
+ for (j = 0; j < _adv_asc38C1600_buf[i + 1]; j++)
+ {
+ AdvWriteWordAutoIncLram(iop_base, (((ushort)
+ _adv_asc38C1600_buf[i + 3] << 8) |
+ _adv_asc38C1600_buf[i + 2]));
+ word++;
+ }
+ i += 3;
+ } else if (_adv_asc38C1600_buf[i] == 0xfe)
+ {
+ AdvWriteWordAutoIncLram(iop_base, (((ushort)
+ _adv_asc38C1600_buf[i + 2] << 8) |
+ _adv_asc38C1600_buf[i + 1]));
+ i += 2;
+ word++;
+ } else
+ {
+ AdvWriteWordAutoIncLram(iop_base, (((ushort)
+ _adv_asc38C1600_buf[(_adv_asc38C1600_buf[i] * 2) + 1] << 8) |
+ _adv_asc38C1600_buf[_adv_asc38C1600_buf[i] * 2]));
+ word++;
+ }
+ }
+
+ /*
+ * Set 'word' for later use to clear the rest of memory and save
+ * the expanded mcode size.
+ */
+ word *= 2;
+ adv_asc38C1600_expanded_size = word;
+
+ /*
+ * Clear the rest of ASC-38C1600 Internal RAM (32KB).
+ */
+ for (; word < ADV_38C1600_MEMSIZE; word += 2)
+ {
+ AdvWriteWordAutoIncLram(iop_base, 0);
+ }
+
+ /*
+ * Verify the microcode checksum.
+ */
+ sum = 0;
+ AdvWriteWordRegister(iop_base, IOPW_RAM_ADDR, 0);
+
+ for (word = 0; word < adv_asc38C1600_expanded_size; word += 2)
+ {
+ sum += AdvReadWordAutoIncLram(iop_base);
+ }
+
+ if (sum != _adv_asc38C1600_chksum)
+ {
+ asc_dvc->err_code |= ASC_IERR_MCODE_CHKSUM;
+ return ADV_ERROR;
+ }
+
+ /*
+ * Restore the RISC memory BIOS region.
+ */
+ for (i = 0; i < ASC_MC_BIOSLEN/2; i++)
+ {
+ AdvWriteWordLram(iop_base, ASC_MC_BIOSMEM + (2 * i), bios_mem[i]);
+ }
+
+ /*
+ * Calculate and write the microcode code checksum to the microcode
+ * code checksum location ASC_MC_CODE_CHK_SUM (0x2C).
+ */
+ AdvReadWordLram(iop_base, ASC_MC_CODE_BEGIN_ADDR, begin_addr);
+ AdvReadWordLram(iop_base, ASC_MC_CODE_END_ADDR, end_addr);
+ code_sum = 0;
+ AdvWriteWordRegister(iop_base, IOPW_RAM_ADDR, begin_addr);
+ for (word = begin_addr; word < end_addr; word += 2)
+ {
+ code_sum += AdvReadWordAutoIncLram(iop_base);
+ }
+ AdvWriteWordLram(iop_base, ASC_MC_CODE_CHK_SUM, code_sum);
+
+ /*
+ * Read microcode version and date.
+ */
+ AdvReadWordLram(iop_base, ASC_MC_VERSION_DATE, asc_dvc->cfg->mcode_date);
+ AdvReadWordLram(iop_base, ASC_MC_VERSION_NUM, asc_dvc->cfg->mcode_version);
+
+ /*
+ * Set the chip type to indicate the ASC38C1600.
+ */
+ AdvWriteWordLram(iop_base, ASC_MC_CHIP_TYPE, ADV_CHIP_ASC38C1600);
+
+ /*
+ * Write 1 to bit 14 'DIS_TERM_DRV' in the SCSI_CFG1 register.
+ * When DIS_TERM_DRV set to 1, C_DET[3:0] will reflect current
+ * cable detection and then we are able to read C_DET[3:0].
+ *
+ * Note: We will reset DIS_TERM_DRV to 0 in the 'Set SCSI_CFG1
+ * Microcode Default Value' section below.
+ */
+ scsi_cfg1 = AdvReadWordRegister(iop_base, IOPW_SCSI_CFG1);
+ AdvWriteWordRegister(iop_base, IOPW_SCSI_CFG1, scsi_cfg1 | DIS_TERM_DRV);
+
+ /*
+ * If the PCI Configuration Command Register "Parity Error Response
+ * Control" Bit was clear (0), then set the microcode variable
+ * 'control_flag' CONTROL_FLAG_IGNORE_PERR flag to tell the microcode
+ * to ignore DMA parity errors.
+ */
+ if (asc_dvc->cfg->control_flag & CONTROL_FLAG_IGNORE_PERR)
+ {
+ AdvReadWordLram(iop_base, ASC_MC_CONTROL_FLAG, word);
+ word |= CONTROL_FLAG_IGNORE_PERR;
+ AdvWriteWordLram(iop_base, ASC_MC_CONTROL_FLAG, word);
+ }
+
+ /*
+ * If the BIOS control flag AIPP (Asynchronous Information
+ * Phase Protection) disable bit is not set, then set the firmware
+ * 'control_flag' CONTROL_FLAG_ENABLE_AIPP bit to enable
+ * AIPP checking and encoding.
+ */
+ if ((asc_dvc->bios_ctrl & BIOS_CTRL_AIPP_DIS) == 0)
+ {
+ AdvReadWordLram(iop_base, ASC_MC_CONTROL_FLAG, word);
+ word |= CONTROL_FLAG_ENABLE_AIPP;
+ AdvWriteWordLram(iop_base, ASC_MC_CONTROL_FLAG, word);
+ }
+
+ /*
+ * For ASC-38C1600 use DMA_CFG0 default values: FIFO_THRESH_80B [6:4],
+ * and START_CTL_TH [3:2].
+ */
+ AdvWriteByteRegister(iop_base, IOPB_DMA_CFG0,
+ FIFO_THRESH_80B | START_CTL_TH | READ_CMD_MRM);
+
+ /*
+ * Microcode operating variables for WDTR, SDTR, and command tag
+ * queuing will be set in AdvInquiryHandling() based on what a
+ * device reports it is capable of in Inquiry byte 7.
+ *
+ * If SCSI Bus Resets have been disabled, then directly set
+ * SDTR and WDTR from the EEPROM configuration. This will allow
+ * the BIOS and warm boot to work without a SCSI bus hang on
+ * the Inquiry caused by host and target mismatched DTR values.
+ * Without the SCSI Bus Reset, before an Inquiry a device can't
+ * be assumed to be in Asynchronous, Narrow mode.
+ */
+ if ((asc_dvc->bios_ctrl & BIOS_CTRL_RESET_SCSI_BUS) == 0)
+ {
+ AdvWriteWordLram(iop_base, ASC_MC_WDTR_ABLE, asc_dvc->wdtr_able);
+ AdvWriteWordLram(iop_base, ASC_MC_SDTR_ABLE, asc_dvc->sdtr_able);
+ }
+
+ /*
+ * Set microcode operating variables for DISC and SDTR_SPEED1,
+ * SDTR_SPEED2, SDTR_SPEED3, and SDTR_SPEED4 based on the EEPROM
+ * configuration values.
+ *
+ * The SDTR per TID bitmask overrides the SDTR_SPEED1, SDTR_SPEED2,
+ * SDTR_SPEED3, and SDTR_SPEED4 values so it is safe to set them
+ * without determining here whether the device supports SDTR.
+ */
+ AdvWriteWordLram(iop_base, ASC_MC_DISC_ENABLE, asc_dvc->cfg->disc_enable);
+ AdvWriteWordLram(iop_base, ASC_MC_SDTR_SPEED1, asc_dvc->sdtr_speed1);
+ AdvWriteWordLram(iop_base, ASC_MC_SDTR_SPEED2, asc_dvc->sdtr_speed2);
+ AdvWriteWordLram(iop_base, ASC_MC_SDTR_SPEED3, asc_dvc->sdtr_speed3);
+ AdvWriteWordLram(iop_base, ASC_MC_SDTR_SPEED4, asc_dvc->sdtr_speed4);
+
+ /*
+ * Set SCSI_CFG0 Microcode Default Value.
+ *
+ * The microcode will set the SCSI_CFG0 register using this value
+ * after it is started below.
+ */
+ AdvWriteWordLram(iop_base, ASC_MC_DEFAULT_SCSI_CFG0,
+ PARITY_EN | QUEUE_128 | SEL_TMO_LONG | OUR_ID_EN |
+ asc_dvc->chip_scsi_id);
+
+ /*
+ * Calculate SCSI_CFG1 Microcode Default Value.
+ *
+ * The microcode will set the SCSI_CFG1 register using this value
+ * after it is started below.
+ *
+ * Each ASC-38C1600 function has only two cable detect bits.
+ * The bus mode override bits are in IOPB_SOFT_OVER_WR.
+ */
+ scsi_cfg1 = AdvReadWordRegister(iop_base, IOPW_SCSI_CFG1);
+
+ /*
+ * If the cable is reversed all of the SCSI_CTRL register signals
+ * will be set. Check for and return an error if this condition is
+ * found.
+ */
+ if ((AdvReadWordRegister(iop_base, IOPW_SCSI_CTRL) & 0x3F07) == 0x3F07)
+ {
+ asc_dvc->err_code |= ASC_IERR_REVERSED_CABLE;
+ return ADV_ERROR;
+ }
+
+ /*
+ * Each ASC-38C1600 function has two connectors. Only an HVD device
+ * can not be connected to either connector. An LVD device or SE device
+ * may be connected to either connecor. If an SE device is connected,
+ * then at most Ultra speed (20 Mhz) can be used on both connectors.
+ *
+ * If an HVD device is attached, return an error.
+ */
+ if (scsi_cfg1 & HVD)
+ {
+ asc_dvc->err_code |= ASC_IERR_HVD_DEVICE;
+ return ADV_ERROR;
+ }
+
+ /*
+ * Each function in the ASC-38C1600 uses only the SE cable detect and
+ * termination because there are two connectors for each function. Each
+ * function may use either LVD or SE mode. Corresponding the SE automatic
+ * termination control EEPROM bits are used for each function. Each
+ * function has its own EEPROM. If SE automatic control is enabled for
+ * the function, then set the termination value based on a table listed
+ * in a_condor.h.
+ *
+ * If manual termination is specified in the EEPROM for the function,
+ * then 'termination' was set-up in AscInitFrom38C1600EEPROM() and is
+ * ready to be 'ored' into SCSI_CFG1.
+ */
+ if ((asc_dvc->cfg->termination & TERM_SE) == 0)
+ {
+ /* SE automatic termination control is enabled. */
+ switch(scsi_cfg1 & C_DET_SE)
+ {
+ /* TERM_SE_HI: on, TERM_SE_LO: on */
+ case 0x1: case 0x2: case 0x3:
+ asc_dvc->cfg->termination |= TERM_SE;
+ break;
+
+ case 0x0:
+ if (ASC_PCI_ID2FUNC(asc_dvc->cfg->pci_slot_info) == 0)
+ {
+ /* Function 0 - TERM_SE_HI: off, TERM_SE_LO: off */
+ }
+ else
+ {
+ /* Function 1 - TERM_SE_HI: on, TERM_SE_LO: off */
+ asc_dvc->cfg->termination |= TERM_SE_HI;
+ }
+ break;
+ }
+ }
+
+ /*
+ * Clear any set TERM_SE bits.
+ */
+ scsi_cfg1 &= ~TERM_SE;
+
+ /*
+ * Invert the TERM_SE bits and then set 'scsi_cfg1'.
+ */
+ scsi_cfg1 |= (~asc_dvc->cfg->termination & TERM_SE);
+
+ /*
+ * Clear Big Endian and Terminator Polarity bits and set possibly
+ * modified termination control bits in the Microcode SCSI_CFG1
+ * Register Value.
+ */
+ scsi_cfg1 &= (~BIG_ENDIAN & ~DIS_TERM_DRV & ~TERM_POL);
+
+ /*
+ * Set SCSI_CFG1 Microcode Default Value
+ *
+ * Set possibly modified termination control bits in the Microcode
+ * SCSI_CFG1 Register Value.
+ *
+ * The microcode will set the SCSI_CFG1 register using this value
+ * after it is started below.
+ */
+ AdvWriteWordLram(iop_base, ASC_MC_DEFAULT_SCSI_CFG1, scsi_cfg1);
+
+ /*
+ * Set MEM_CFG Microcode Default Value
+ *
+ * The microcode will set the MEM_CFG register using this value
+ * after it is started below.
+ *
+ * MEM_CFG may be accessed as a word or byte, but only bits 0-7
+ * are defined.
+ *
+ * ASC-38C1600 has 32KB internal memory.
+ *
+ * XXX - Since ASC38C1600 Rev.3 has a Local RAM failure issue, we come
+ * out a special 16K Adv Library and Microcode version. After the issue
+ * resolved, we should turn back to the 32K support. Both a_condor.h and
+ * mcode.sas files also need to be updated.
+ *
+ * AdvWriteWordLram(iop_base, ASC_MC_DEFAULT_MEM_CFG,
+ * BIOS_EN | RAM_SZ_32KB);
+ */
+ AdvWriteWordLram(iop_base, ASC_MC_DEFAULT_MEM_CFG, BIOS_EN | RAM_SZ_16KB);
+
+ /*
+ * Set SEL_MASK Microcode Default Value
+ *
+ * The microcode will set the SEL_MASK register using this value
+ * after it is started below.
+ */
+ AdvWriteWordLram(iop_base, ASC_MC_DEFAULT_SEL_MASK,
+ ADV_TID_TO_TIDMASK(asc_dvc->chip_scsi_id));
+
+ /*
+ * Build the carrier freelist.
+ *
+ * Driver must have already allocated memory and set 'carrier_buf'.
+ */
+
+ ASC_ASSERT(asc_dvc->carrier_buf != NULL);
+
+ carrp = (ADV_CARR_T *) ADV_16BALIGN(asc_dvc->carrier_buf);
+ asc_dvc->carr_freelist = NULL;
+ if (carrp == (ADV_CARR_T *) asc_dvc->carrier_buf)
+ {
+ buf_size = ADV_CARRIER_BUFSIZE;
+ } else
+ {
+ buf_size = ADV_CARRIER_BUFSIZE - sizeof(ADV_CARR_T);
+ }
+
+ do {
+ /*
+ * Get physical address for the carrier 'carrp'.
+ */
+ contig_len = sizeof(ADV_CARR_T);
+ carr_paddr = cpu_to_le32(DvcGetPhyAddr(asc_dvc, NULL, (uchar *) carrp,
+ (ADV_SDCNT *) &contig_len, ADV_IS_CARRIER_FLAG));
+
+ buf_size -= sizeof(ADV_CARR_T);
+
+ /*
+ * If the current carrier is not physically contiguous, then
+ * maybe there was a page crossing. Try the next carrier aligned
+ * start address.
+ */
+ if (contig_len < sizeof(ADV_CARR_T))
+ {
+ carrp++;
+ continue;
+ }
+
+ carrp->carr_pa = carr_paddr;
+ carrp->carr_va = cpu_to_le32(ADV_VADDR_TO_U32(carrp));
+
+ /*
+ * Insert the carrier at the beginning of the freelist.
+ */
+ carrp->next_vpa = cpu_to_le32(ADV_VADDR_TO_U32(asc_dvc->carr_freelist));
+ asc_dvc->carr_freelist = carrp;
+
+ carrp++;
+ }
+ while (buf_size > 0);
+
+ /*
+ * Set-up the Host->RISC Initiator Command Queue (ICQ).
+ */
+ if ((asc_dvc->icq_sp = asc_dvc->carr_freelist) == NULL)
+ {
+ asc_dvc->err_code |= ASC_IERR_NO_CARRIER;
+ return ADV_ERROR;
+ }
+ asc_dvc->carr_freelist =
+ (ADV_CARR_T *) ADV_U32_TO_VADDR(le32_to_cpu(asc_dvc->icq_sp->next_vpa));
+
+ /*
+ * The first command issued will be placed in the stopper carrier.
+ */
+ asc_dvc->icq_sp->next_vpa = cpu_to_le32(ASC_CQ_STOPPER);
+
+ /*
+ * Set RISC ICQ physical address start value. Initialize the
+ * COMMA register to the same value otherwise the RISC will
+ * prematurely detect a command is available.
+ */
+ AdvWriteDWordLram(iop_base, ASC_MC_ICQ,
+ /* carr_pa is stored LE, must be native before write */
+ le32_to_cpu(asc_dvc->icq_sp->carr_pa));
+ AdvWriteDWordRegister(iop_base, IOPDW_COMMA,
+ le32_to_cpu(asc_dvc->icq_sp->carr_pa));
+
+ /*
+ * Set-up the RISC->Host Initiator Response Queue (IRQ).
+ */
+ if ((asc_dvc->irq_sp = asc_dvc->carr_freelist) == NULL)
+ {
+ asc_dvc->err_code |= ASC_IERR_NO_CARRIER;
+ return ADV_ERROR;
+ }
+ asc_dvc->carr_freelist =
+ (ADV_CARR_T *) ADV_U32_TO_VADDR(le32_to_cpu(asc_dvc->irq_sp->next_vpa));
+
+ /*
+ * The first command completed by the RISC will be placed in
+ * the stopper.
+ *
+ * Note: Set 'next_vpa' to ASC_CQ_STOPPER. When the request is
+ * completed the RISC will set the ASC_RQ_STOPPER bit.
+ */
+ asc_dvc->irq_sp->next_vpa = cpu_to_le32(ASC_CQ_STOPPER);
+
+ /*
+ * Set RISC IRQ physical address start value.
+ */
+ AdvWriteDWordLram(iop_base, ASC_MC_IRQ,
+ /* carr_pa is LE, must be native before write */
+ le32_to_cpu(asc_dvc->irq_sp->carr_pa));
+ asc_dvc->carr_pending_cnt = 0;
+
+ AdvWriteByteRegister(iop_base, IOPB_INTR_ENABLES,
+ (ADV_INTR_ENABLE_HOST_INTR | ADV_INTR_ENABLE_GLOBAL_INTR));
+ AdvReadWordLram(iop_base, ASC_MC_CODE_BEGIN_ADDR, word);
+ AdvWriteWordRegister(iop_base, IOPW_PC, word);
+
+ /* finally, finally, gentlemen, start your engine */
+ AdvWriteWordRegister(iop_base, IOPW_RISC_CSR, ADV_RISC_CSR_RUN);
+
+ /*
+ * Reset the SCSI Bus if the EEPROM indicates that SCSI Bus
+ * Resets should be performed. The RISC has to be running
+ * to issue a SCSI Bus Reset.
+ */
+ if (asc_dvc->bios_ctrl & BIOS_CTRL_RESET_SCSI_BUS)
+ {
+ /*
+ * If the BIOS Signature is present in memory, restore the
+ * per TID microcode operating variables.
+ */
+ if (bios_mem[(ASC_MC_BIOS_SIGNATURE - ASC_MC_BIOSMEM)/2] == 0x55AA)
+ {
+ /*
+ * Restore per TID negotiated values.
+ */
+ AdvWriteWordLram(iop_base, ASC_MC_WDTR_ABLE, wdtr_able);
+ AdvWriteWordLram(iop_base, ASC_MC_SDTR_ABLE, sdtr_able);
+ AdvWriteWordLram(iop_base, ASC_MC_PPR_ABLE, ppr_able);
+ AdvWriteWordLram(iop_base, ASC_MC_TAGQNG_ABLE, tagqng_able);
+ for (tid = 0; tid <= ASC_MAX_TID; tid++)
+ {
+ AdvWriteByteLram(iop_base, ASC_MC_NUMBER_OF_MAX_CMD + tid,
+ max_cmd[tid]);
+ }
+ } else
+ {
+ if (AdvResetSB(asc_dvc) != ADV_TRUE)
+ {
+ warn_code = ASC_WARN_BUSRESET_ERROR;
+ }
+ }
+ }
+
+ return warn_code;
+}
+
+/*
+ * Read the board's EEPROM configuration. Set fields in ADV_DVC_VAR and
+ * ADV_DVC_CFG based on the EEPROM settings. The chip is stopped while
+ * all of this is done.
+ *
+ * On failure set the ADV_DVC_VAR field 'err_code' and return ADV_ERROR.
+ *
+ * For a non-fatal error return a warning code. If there are no warnings
+ * then 0 is returned.
+ *
+ * Note: Chip is stopped on entry.
+ */
+ASC_INITFUNC(
+STATIC int,
+AdvInitFrom3550EEP(ADV_DVC_VAR *asc_dvc)
+)
+{
+ AdvPortAddr iop_base;
+ ushort warn_code;
+ ADVEEP_3550_CONFIG eep_config;
+ int i;
+
+ iop_base = asc_dvc->iop_base;
+
+ warn_code = 0;
+
+ /*
+ * Read the board's EEPROM configuration.
+ *
+ * Set default values if a bad checksum is found.
+ *
+ * XXX - Don't handle big-endian access to EEPROM yet.
+ */
+ if (AdvGet3550EEPConfig(iop_base, &eep_config) != eep_config.check_sum)
+ {
+ warn_code |= ASC_WARN_EEPROM_CHKSUM;
+
+ /*
+ * Set EEPROM default values.
+ */
+ for (i = 0; i < sizeof(ADVEEP_3550_CONFIG); i++)
+ {
+ *((uchar *) &eep_config + i) =
+ *((uchar *) &Default_3550_EEPROM_Config + i);
+ }
+
+ /*
+ * Assume the 6 byte board serial number that was read
+ * from EEPROM is correct even if the EEPROM checksum
+ * failed.
+ */
+ eep_config.serial_number_word3 =
+ AdvReadEEPWord(iop_base, ASC_EEP_DVC_CFG_END - 1);
+
+ eep_config.serial_number_word2 =
+ AdvReadEEPWord(iop_base, ASC_EEP_DVC_CFG_END - 2);
+
+ eep_config.serial_number_word1 =
+ AdvReadEEPWord(iop_base, ASC_EEP_DVC_CFG_END - 3);
+
+ AdvSet3550EEPConfig(iop_base, &eep_config);
+ }
+ /*
+ * Set ASC_DVC_VAR and ASC_DVC_CFG variables from the
+ * EEPROM configuration that was read.
+ *
+ * This is the mapping of EEPROM fields to Adv Library fields.
+ */
+ asc_dvc->wdtr_able = eep_config.wdtr_able;
+ asc_dvc->sdtr_able = eep_config.sdtr_able;
asc_dvc->ultra_able = eep_config.ultra_able;
asc_dvc->tagqng_able = eep_config.tagqng_able;
asc_dvc->cfg->disc_enable = eep_config.disc_enable;
asc_dvc->max_host_qng = eep_config.max_host_qng;
asc_dvc->max_dvc_qng = eep_config.max_dvc_qng;
-
+
+ /*
+ * If the EEPROM 'termination' field is set to automatic (0), then set
+ * the ADV_DVC_CFG 'termination' field to automatic also.
+ *
+ * If the termination is specified with a non-zero 'termination'
+ * value check that a legal value is set and set the ADV_DVC_CFG
+ * 'termination' field appropriately.
+ */
+ if (eep_config.termination == 0)
+ {
+ asc_dvc->cfg->termination = 0; /* auto termination */
+ } else
+ {
+ /* Enable manual control with low off / high off. */
+ if (eep_config.termination == 1)
+ {
+ asc_dvc->cfg->termination = TERM_CTL_SEL;
+
+ /* Enable manual control with low off / high on. */
+ } else if (eep_config.termination == 2)
+ {
+ asc_dvc->cfg->termination = TERM_CTL_SEL | TERM_CTL_H;
+
+ /* Enable manual control with low on / high on. */
+ } else if (eep_config.termination == 3)
+ {
+ asc_dvc->cfg->termination = TERM_CTL_SEL | TERM_CTL_H | TERM_CTL_L;
+ } else
+ {
+ /*
+ * The EEPROM 'termination' field contains a bad value. Use
+ * automatic termination instead.
+ */
+ asc_dvc->cfg->termination = 0;
+ warn_code |= ASC_WARN_EEPROM_TERMINATION;
+ }
+ }
+
+ return warn_code;
+}
+
+/*
+ * Read the board's EEPROM configuration. Set fields in ADV_DVC_VAR and
+ * ADV_DVC_CFG based on the EEPROM settings. The chip is stopped while
+ * all of this is done.
+ *
+ * On failure set the ADV_DVC_VAR field 'err_code' and return ADV_ERROR.
+ *
+ * For a non-fatal error return a warning code. If there are no warnings
+ * then 0 is returned.
+ *
+ * Note: Chip is stopped on entry.
+ */
+ASC_INITFUNC(
+STATIC int,
+AdvInitFrom38C0800EEP(ADV_DVC_VAR *asc_dvc)
+)
+{
+ AdvPortAddr iop_base;
+ ushort warn_code;
+ ADVEEP_38C0800_CONFIG eep_config;
+ int i;
+ uchar tid, termination;
+ ushort sdtr_speed = 0;
+
+ iop_base = asc_dvc->iop_base;
+
+ warn_code = 0;
+
+ /*
+ * Read the board's EEPROM configuration.
+ *
+ * Set default values if a bad checksum is found.
+ *
+ * XXX - Don't handle big-endian access to EEPROM yet.
+ */
+ if (AdvGet38C0800EEPConfig(iop_base, &eep_config) != eep_config.check_sum)
+ {
+ warn_code |= ASC_WARN_EEPROM_CHKSUM;
+
+ /*
+ * Set EEPROM default values.
+ */
+ for (i = 0; i < sizeof(ADVEEP_38C0800_CONFIG); i++)
+ {
+ *((uchar *) &eep_config + i) =
+ *((uchar *) &Default_38C0800_EEPROM_Config + i);
+ }
+
+ /*
+ * Assume the 6 byte board serial number that was read
+ * from EEPROM is correct even if the EEPROM checksum
+ * failed.
+ */
+ eep_config.serial_number_word3 =
+ AdvReadEEPWord(iop_base, ASC_EEP_DVC_CFG_END - 1);
+
+ eep_config.serial_number_word2 =
+ AdvReadEEPWord(iop_base, ASC_EEP_DVC_CFG_END - 2);
+
+ eep_config.serial_number_word1 =
+ AdvReadEEPWord(iop_base, ASC_EEP_DVC_CFG_END - 3);
+
+ AdvSet38C0800EEPConfig(iop_base, &eep_config);
+ }
+ /*
+ * Set ADV_DVC_VAR and ADV_DVC_CFG variables from the
+ * EEPROM configuration that was read.
+ *
+ * This is the mapping of EEPROM fields to Adv Library fields.
+ */
+ asc_dvc->wdtr_able = eep_config.wdtr_able;
+ asc_dvc->sdtr_speed1 = eep_config.sdtr_speed1;
+ asc_dvc->sdtr_speed2 = eep_config.sdtr_speed2;
+ asc_dvc->sdtr_speed3 = eep_config.sdtr_speed3;
+ asc_dvc->sdtr_speed4 = eep_config.sdtr_speed4;
+ asc_dvc->tagqng_able = eep_config.tagqng_able;
+ asc_dvc->cfg->disc_enable = eep_config.disc_enable;
+ asc_dvc->max_host_qng = eep_config.max_host_qng;
+ asc_dvc->max_dvc_qng = eep_config.max_dvc_qng;
+ asc_dvc->chip_scsi_id = (eep_config.adapter_scsi_id & ADV_MAX_TID);
+ asc_dvc->start_motor = eep_config.start_motor;
+ asc_dvc->scsi_reset_wait = eep_config.scsi_reset_delay;
+ asc_dvc->bios_ctrl = eep_config.bios_ctrl;
+ asc_dvc->no_scam = eep_config.scam_tolerant;
+ asc_dvc->cfg->serial1 = eep_config.serial_number_word1;
+ asc_dvc->cfg->serial2 = eep_config.serial_number_word2;
+ asc_dvc->cfg->serial3 = eep_config.serial_number_word3;
+
+ /*
+ * For every Target ID if any of its 'sdtr_speed[1234]' bits
+ * are set, then set an 'sdtr_able' bit for it.
+ */
+ asc_dvc->sdtr_able = 0;
+ for (tid = 0; tid <= ADV_MAX_TID; tid++)
+ {
+ if (tid == 0)
+ {
+ sdtr_speed = asc_dvc->sdtr_speed1;
+ } else if (tid == 4)
+ {
+ sdtr_speed = asc_dvc->sdtr_speed2;
+ } else if (tid == 8)
+ {
+ sdtr_speed = asc_dvc->sdtr_speed3;
+ } else if (tid == 12)
+ {
+ sdtr_speed = asc_dvc->sdtr_speed4;
+ }
+ if (sdtr_speed & ADV_MAX_TID)
+ {
+ asc_dvc->sdtr_able |= (1 << tid);
+ }
+ sdtr_speed >>= 4;
+ }
+
+ /*
+ * Set the host maximum queuing (max. 253, min. 16) and the per device
+ * maximum queuing (max. 63, min. 4).
+ */
+ if (eep_config.max_host_qng > ASC_DEF_MAX_HOST_QNG)
+ {
+ eep_config.max_host_qng = ASC_DEF_MAX_HOST_QNG;
+ } else if (eep_config.max_host_qng < ASC_DEF_MIN_HOST_QNG)
+ {
+ /* If the value is zero, assume it is uninitialized. */
+ if (eep_config.max_host_qng == 0)
+ {
+ eep_config.max_host_qng = ASC_DEF_MAX_HOST_QNG;
+ } else
+ {
+ eep_config.max_host_qng = ASC_DEF_MIN_HOST_QNG;
+ }
+ }
+
+ if (eep_config.max_dvc_qng > ASC_DEF_MAX_DVC_QNG)
+ {
+ eep_config.max_dvc_qng = ASC_DEF_MAX_DVC_QNG;
+ } else if (eep_config.max_dvc_qng < ASC_DEF_MIN_DVC_QNG)
+ {
+ /* If the value is zero, assume it is uninitialized. */
+ if (eep_config.max_dvc_qng == 0)
+ {
+ eep_config.max_dvc_qng = ASC_DEF_MAX_DVC_QNG;
+ } else
+ {
+ eep_config.max_dvc_qng = ASC_DEF_MIN_DVC_QNG;
+ }
+ }
+
+ /*
+ * If 'max_dvc_qng' is greater than 'max_host_qng', then
+ * set 'max_dvc_qng' to 'max_host_qng'.
+ */
+ if (eep_config.max_dvc_qng > eep_config.max_host_qng)
+ {
+ eep_config.max_dvc_qng = eep_config.max_host_qng;
+ }
+
+ /*
+ * Set ADV_DVC_VAR 'max_host_qng' and ADV_DVC_VAR 'max_dvc_qng'
+ * values based on possibly adjusted EEPROM values.
+ */
+ asc_dvc->max_host_qng = eep_config.max_host_qng;
+ asc_dvc->max_dvc_qng = eep_config.max_dvc_qng;
+
/*
* If the EEPROM 'termination' field is set to automatic (0), then set
* the ADV_DVC_CFG 'termination' field to automatic also.
* value check that a legal value is set and set the ADV_DVC_CFG
* 'termination' field appropriately.
*/
- if (eep_config.termination == 0)
+ if (eep_config.termination_se == 0)
{
- asc_dvc->cfg->termination = 0; /* auto termination */
+ termination = 0; /* auto termination for SE */
} else
{
/* Enable manual control with low off / high off. */
- if (eep_config.termination == 1)
+ if (eep_config.termination_se == 1)
{
- asc_dvc->cfg->termination = TERM_CTL_SEL;
+ termination = 0;
/* Enable manual control with low off / high on. */
- } else if (eep_config.termination == 2)
+ } else if (eep_config.termination_se == 2)
{
- asc_dvc->cfg->termination = TERM_CTL_SEL | TERM_CTL_H;
+ termination = TERM_SE_HI;
/* Enable manual control with low on / high on. */
- } else if (eep_config.termination == 3)
+ } else if (eep_config.termination_se == 3)
{
- asc_dvc->cfg->termination = TERM_CTL_SEL | TERM_CTL_H | TERM_CTL_L;
+ termination = TERM_SE;
} else
{
/*
- * The EEPROM 'termination' field contains a bad value. Use
- * automatic termination instead.
+ * The EEPROM 'termination_se' field contains a bad value.
+ * Use automatic termination instead.
*/
- asc_dvc->cfg->termination = 0;
+ termination = 0;
+ warn_code |= ASC_WARN_EEPROM_TERMINATION;
+ }
+ }
+
+ if (eep_config.termination_lvd == 0)
+ {
+ asc_dvc->cfg->termination = termination; /* auto termination for LVD */
+ } else
+ {
+ /* Enable manual control with low off / high off. */
+ if (eep_config.termination_lvd == 1)
+ {
+ asc_dvc->cfg->termination = termination;
+
+ /* Enable manual control with low off / high on. */
+ } else if (eep_config.termination_lvd == 2)
+ {
+ asc_dvc->cfg->termination = termination | TERM_LVD_HI;
+
+ /* Enable manual control with low on / high on. */
+ } else if (eep_config.termination_lvd == 3)
+ {
+ asc_dvc->cfg->termination =
+ termination | TERM_LVD;
+ } else
+ {
+ /*
+ * The EEPROM 'termination_lvd' field contains a bad value.
+ * Use automatic termination instead.
+ */
+ asc_dvc->cfg->termination = termination;
warn_code |= ASC_WARN_EEPROM_TERMINATION;
}
}
}
/*
- * Read the board's EEPROM configuration. Set fields in ADV_DVC_VAR and
- * ADV_DVC_CFG based on the EEPROM settings. The chip is stopped while
+ * Read the board's EEPROM configuration. Set fields in ASC_DVC_VAR and
+ * ASC_DVC_CFG based on the EEPROM settings. The chip is stopped while
* all of this is done.
*
- * On failure set the ADV_DVC_VAR field 'err_code' and return ADV_ERROR.
+ * On failure set the ASC_DVC_VAR field 'err_code' and return ADV_ERROR.
*
* For a non-fatal error return a warning code. If there are no warnings
* then 0 is returned.
*/
ASC_INITFUNC(
STATIC int,
-AdvInitFrom38C0800EEP(ADV_DVC_VAR *asc_dvc)
+AdvInitFrom38C1600EEP(ADV_DVC_VAR *asc_dvc)
)
{
AdvPortAddr iop_base;
ushort warn_code;
- ADVEEP_38C0800_CONFIG eep_config;
+ ADVEEP_38C1600_CONFIG eep_config;
int i;
uchar tid, termination;
ushort sdtr_speed = 0;
* Read the board's EEPROM configuration.
*
* Set default values if a bad checksum is found.
- *
- * XXX - Don't handle big-endian access to EEPROM yet.
*/
- if (AdvGet38C0800EEPConfig(iop_base, &eep_config) != eep_config.check_sum)
+ if (AdvGet38C1600EEPConfig(iop_base, &eep_config) != eep_config.check_sum)
{
warn_code |= ASC_WARN_EEPROM_CHKSUM;
/*
* Set EEPROM default values.
*/
- for (i = 0; i < sizeof(ADVEEP_38C0800_CONFIG); i++)
+ for (i = 0; i < sizeof(ADVEEP_38C1600_CONFIG); i++)
{
- *((uchar *) &eep_config + i) =
- *((uchar *) &Default_38C0800_EEPROM_Config + i);
+ if (i == 1 && ASC_PCI_ID2FUNC(asc_dvc->cfg->pci_slot_info) != 0)
+ {
+ /*
+ * Set Function 1 EEPROM Word 0 MSB
+ *
+ * Clear the BIOS_ENABLE (bit 14) and INTAB (bit 11)
+ * EEPROM bits.
+ *
+ * Disable Bit 14 (BIOS_ENABLE) to fix SPARC Ultra 60 and
+ * old Mac system booting problem. The Expansion ROM must
+ * be disabled in Function 1 for these systems.
+ *
+ */
+ *((uchar *) &eep_config + i) =
+ ((*((uchar *) &Default_38C1600_EEPROM_Config + i)) &
+ (~(((ADV_EEPROM_BIOS_ENABLE | ADV_EEPROM_INTAB) >> 8) &
+ 0xFF)));
+
+ /*
+ * Set the INTAB (bit 11) if the GPIO 0 input indicates
+ * the Function 1 interrupt line is wired to INTA.
+ *
+ * Set/Clear Bit 11 (INTAB) from the GPIO bit 0 input:
+ * 1 - Function 1 interrupt line wired to INT A.
+ * 0 - Function 1 interrupt line wired to INT B.
+ *
+ * Note: Adapter boards always have Function 0 wired to INTA.
+ * Put all 5 GPIO bits in input mode and then read
+ * their input values.
+ */
+ AdvWriteByteRegister(iop_base, IOPB_GPIO_CNTL, 0);
+ if (AdvReadByteRegister(iop_base, IOPB_GPIO_DATA) & 0x01)
+ {
+ /* Function 1 interrupt wired to INTA; Set EEPROM bit. */
+ *((uchar *) &eep_config + i) |=
+ ((ADV_EEPROM_INTAB >> 8) & 0xFF);
+ }
+ }
+ else
+ {
+ *((uchar *) &eep_config + i) =
+ *((uchar *) &Default_38C1600_EEPROM_Config + i);
+ }
}
/*
eep_config.serial_number_word1 =
AdvReadEEPWord(iop_base, ASC_EEP_DVC_CFG_END - 3);
- AdvSet38C0800EEPConfig(iop_base, &eep_config);
+ AdvSet38C1600EEPConfig(iop_base, &eep_config);
}
+
/*
- * Set ADV_DVC_VAR and ADV_DVC_CFG variables from the
+ * Set ASC_DVC_VAR and ASC_DVC_CFG variables from the
* EEPROM configuration that was read.
*
* This is the mapping of EEPROM fields to Adv Library fields.
asc_dvc->sdtr_speed2 = eep_config.sdtr_speed2;
asc_dvc->sdtr_speed3 = eep_config.sdtr_speed3;
asc_dvc->sdtr_speed4 = eep_config.sdtr_speed4;
+ asc_dvc->ppr_able = 0;
asc_dvc->tagqng_able = eep_config.tagqng_able;
asc_dvc->cfg->disc_enable = eep_config.disc_enable;
asc_dvc->max_host_qng = eep_config.max_host_qng;
asc_dvc->max_dvc_qng = eep_config.max_dvc_qng;
- asc_dvc->chip_scsi_id = (eep_config.adapter_scsi_id & ADV_MAX_TID);
+ asc_dvc->chip_scsi_id = (eep_config.adapter_scsi_id & ASC_MAX_TID);
asc_dvc->start_motor = eep_config.start_motor;
asc_dvc->scsi_reset_wait = eep_config.scsi_reset_delay;
asc_dvc->bios_ctrl = eep_config.bios_ctrl;
asc_dvc->no_scam = eep_config.scam_tolerant;
- asc_dvc->cfg->serial1 = eep_config.serial_number_word1;
- asc_dvc->cfg->serial2 = eep_config.serial_number_word2;
- asc_dvc->cfg->serial3 = eep_config.serial_number_word3;
/*
* For every Target ID if any of its 'sdtr_speed[1234]' bits
* are set, then set an 'sdtr_able' bit for it.
*/
asc_dvc->sdtr_able = 0;
- for (tid = 0; tid <= ADV_MAX_TID; tid++)
+ for (tid = 0; tid <= ASC_MAX_TID; tid++)
{
if (tid == 0)
{
{
sdtr_speed = asc_dvc->sdtr_speed4;
}
- if (sdtr_speed & ADV_MAX_TID)
+ if (sdtr_speed & ASC_MAX_TID)
{
asc_dvc->sdtr_able |= (1 << tid);
}
}
/*
- * Set ADV_DVC_VAR 'max_host_qng' and ADV_DVC_VAR 'max_dvc_qng'
+ * Set ASC_DVC_VAR 'max_host_qng' and ASC_DVC_VAR 'max_dvc_qng'
* values based on possibly adjusted EEPROM values.
*/
asc_dvc->max_host_qng = eep_config.max_host_qng;
/*
* If the EEPROM 'termination' field is set to automatic (0), then set
- * the ADV_DVC_CFG 'termination' field to automatic also.
+ * the ASC_DVC_CFG 'termination' field to automatic also.
*
* If the termination is specified with a non-zero 'termination'
- * value check that a legal value is set and set the ADV_DVC_CFG
+ * value check that a legal value is set and set the ASC_DVC_CFG
* 'termination' field appropriately.
*/
if (eep_config.termination_se == 0)
ushort wval, chksum;
ushort *wbuf;
int eep_addr;
+ ushort *charfields;
+ /* Charfields will tell us which words coming from the EEProm should not
+ be byteswapped, because they are not a single short but a pair of
+ chars. */
+ charfields = (ushort*) &ADVEEP_3550_Config_Field_IsChar;
wbuf = (ushort *) cfg_buf;
chksum = 0;
{
wval = AdvReadEEPWord(iop_base, eep_addr);
chksum += wval;
- *wbuf = wval;
+ /* swap back as needed */
+ if (*charfields++)
+ *wbuf = cpu_to_le16(wval);
+ else
+ *wbuf = wval;
}
*wbuf = AdvReadEEPWord(iop_base, eep_addr);
+ if (*charfields++)
+ *wbuf = cpu_to_le16(*wbuf);
wbuf++;
for (eep_addr = ASC_EEP_DVC_CTL_BEGIN;
eep_addr < ASC_EEP_MAX_WORD_ADDR;
eep_addr++, wbuf++)
{
*wbuf = AdvReadEEPWord(iop_base, eep_addr);
+ if (*charfields++)
+ *wbuf = cpu_to_le16(*wbuf);
}
return chksum;
}
ushort wval, chksum;
ushort *wbuf;
int eep_addr;
+ ushort *charfields;
+ /* Charfields will tell us which words coming from the EEProm should not
+ be byteswapped, because they are not a single short but a pair of
+ chars. */
+ charfields = (ushort*) &ADVEEP_38C0800_Config_Field_IsChar;
wbuf = (ushort *) cfg_buf;
chksum = 0;
{
wval = AdvReadEEPWord(iop_base, eep_addr);
chksum += wval;
- *wbuf = wval;
+ /* swap back as needed */
+ if (*charfields++)
+ *wbuf = cpu_to_le16(wval);
+ else
+ *wbuf = wval;
}
*wbuf = AdvReadEEPWord(iop_base, eep_addr);
+ if (*charfields++)
+ *wbuf = cpu_to_le16(*wbuf);
wbuf++;
for (eep_addr = ASC_EEP_DVC_CTL_BEGIN;
eep_addr < ASC_EEP_MAX_WORD_ADDR;
eep_addr++, wbuf++)
{
*wbuf = AdvReadEEPWord(iop_base, eep_addr);
+ if (*charfields++)
+ *wbuf = cpu_to_le16(*wbuf);
}
return chksum;
}
+/*
+ * Read EEPROM configuration into the specified buffer.
+ *
+ * Return a checksum based on the EEPROM configuration read.
+ */
+ASC_INITFUNC(
+STATIC ushort,
+AdvGet38C1600EEPConfig(AdvPortAddr iop_base,
+ ADVEEP_38C1600_CONFIG *cfg_buf)
+)
+{
+ ushort wval, chksum;
+ ushort *wbuf;
+ int eep_addr;
+ ushort *charfields;
+
+ /* Charfields will tell us which words coming from the EEProm should not
+ be byteswapped, because they are not a single short but a pair of
+ chars. */
+ charfields = (ushort*) &ADVEEP_38C1600_Config_Field_IsChar;
+ wbuf = (ushort *) cfg_buf;
+ chksum = 0;
+
+ for (eep_addr = ASC_EEP_DVC_CFG_BEGIN;
+ eep_addr < ASC_EEP_DVC_CFG_END;
+ eep_addr++, wbuf++)
+ {
+ wval = AdvReadEEPWord(iop_base, eep_addr);
+ chksum += wval;
+ /* swap back as needed */
+ if (*charfields++)
+ *wbuf = cpu_to_le16(wval);
+ else
+ *wbuf = wval;
+ }
+ *wbuf = AdvReadEEPWord(iop_base, eep_addr);
+ if (*charfields++)
+ *wbuf = cpu_to_le16(*wbuf);
+ wbuf++;
+ for (eep_addr = ASC_EEP_DVC_CTL_BEGIN;
+ eep_addr < ASC_EEP_MAX_WORD_ADDR;
+ eep_addr++, wbuf++)
+ {
+ *wbuf = AdvReadEEPWord(iop_base, eep_addr);
+ if (*charfields++)
+ *wbuf = cpu_to_le16(*wbuf);
+ }
+ return chksum;
+}
/*
* Read the EEPROM from specified location
{
ushort *wbuf;
ushort addr, chksum;
+ ushort *charfields;
wbuf = (ushort *) cfg_buf;
+ charfields = (ushort *) &ADVEEP_3550_Config_Field_IsChar;
chksum = 0;
AdvWriteWordRegister(iop_base, IOPW_EE_CMD, ASC_EEP_CMD_WRITE_ABLE);
for (addr = ASC_EEP_DVC_CFG_BEGIN;
addr < ASC_EEP_DVC_CFG_END; addr++, wbuf++)
{
- chksum += *wbuf;
- AdvWriteWordRegister(iop_base, IOPW_EE_DATA, *wbuf);
+ ushort tmp;
+ if (charfields++) {
+ uchar *cbuf = (uchar *) wbuf;
+ tmp = *cbuf + ((*(cbuf + 1)) << 8);
+ }
+ else
+ tmp = *wbuf;
+ chksum += tmp;
+ AdvWriteWordRegister(iop_base, IOPW_EE_DATA, tmp);
AdvWriteWordRegister(iop_base, IOPW_EE_CMD, ASC_EEP_CMD_WRITE | addr);
AdvWaitEEPCmd(iop_base);
DvcSleepMilliSecond(ASC_EEP_DELAY_MS);
for (addr = ASC_EEP_DVC_CTL_BEGIN;
addr < ASC_EEP_MAX_WORD_ADDR; addr++, wbuf++)
{
- AdvWriteWordRegister(iop_base, IOPW_EE_DATA, *wbuf);
+ uchar *cbuf;
+ ushort tmp;
+ cbuf = (uchar *) wbuf;
+ tmp = *cbuf + ((*(cbuf + 1)) << 8);
+ AdvWriteWordRegister(iop_base, IOPW_EE_DATA, tmp);
AdvWriteWordRegister(iop_base, IOPW_EE_CMD, ASC_EEP_CMD_WRITE | addr);
AdvWaitEEPCmd(iop_base);
}
ADVEEP_38C0800_CONFIG *cfg_buf)
{
ushort *wbuf;
+ ushort *charfields;
ushort addr, chksum;
wbuf = (ushort *) cfg_buf;
+ charfields = (ushort *) &ADVEEP_38C0800_Config_Field_IsChar;
+ chksum = 0;
+
+ AdvWriteWordRegister(iop_base, IOPW_EE_CMD, ASC_EEP_CMD_WRITE_ABLE);
+ AdvWaitEEPCmd(iop_base);
+
+ /*
+ * Write EEPROM from word 0 to word 20
+ */
+ for (addr = ASC_EEP_DVC_CFG_BEGIN;
+ addr < ASC_EEP_DVC_CFG_END; addr++, wbuf++)
+ {
+ ushort tmp;
+ if (*charfields++) {
+ uchar *cbuf = (uchar *) wbuf;
+ tmp = *cbuf + ((*(cbuf + 1)) << 8);
+ }
+ else
+ tmp = *wbuf;
+ chksum += tmp;
+ AdvWriteWordRegister(iop_base, IOPW_EE_DATA, tmp);
+ AdvWriteWordRegister(iop_base, IOPW_EE_CMD, ASC_EEP_CMD_WRITE | addr);
+ AdvWaitEEPCmd(iop_base);
+ DvcSleepMilliSecond(ASC_EEP_DELAY_MS);
+ }
+
+ /*
+ * Write EEPROM checksum at word 21
+ */
+ AdvWriteWordRegister(iop_base, IOPW_EE_DATA, chksum);
+ AdvWriteWordRegister(iop_base, IOPW_EE_CMD, ASC_EEP_CMD_WRITE | addr);
+ AdvWaitEEPCmd(iop_base);
+ wbuf++; /* skip over check_sum */
+
+ /*
+ * Write EEPROM OEM name at words 22 to 29
+ */
+ for (addr = ASC_EEP_DVC_CTL_BEGIN;
+ addr < ASC_EEP_MAX_WORD_ADDR; addr++, wbuf++)
+ {
+ uchar *cbuf;
+ ushort tmp;
+ cbuf = (uchar *) wbuf;
+ tmp = *cbuf + ((*(cbuf + 1)) << 8);
+ AdvWriteWordRegister(iop_base, IOPW_EE_DATA, tmp);
+ AdvWriteWordRegister(iop_base, IOPW_EE_CMD, ASC_EEP_CMD_WRITE | addr);
+ AdvWaitEEPCmd(iop_base);
+ }
+ AdvWriteWordRegister(iop_base, IOPW_EE_CMD, ASC_EEP_CMD_WRITE_DISABLE);
+ AdvWaitEEPCmd(iop_base);
+ return;
+}
+
+/*
+ * Write the EEPROM from 'cfg_buf'.
+ */
+void
+AdvSet38C1600EEPConfig(AdvPortAddr iop_base,
+ ADVEEP_38C1600_CONFIG *cfg_buf)
+{
+ ushort *wbuf;
+ ushort *charfields;
+ ushort addr, chksum;
+
+ wbuf = (ushort *) cfg_buf;
+ charfields = (ushort *) &ADVEEP_38C1600_Config_Field_IsChar;
chksum = 0;
AdvWriteWordRegister(iop_base, IOPW_EE_CMD, ASC_EEP_CMD_WRITE_ABLE);
for (addr = ASC_EEP_DVC_CFG_BEGIN;
addr < ASC_EEP_DVC_CFG_END; addr++, wbuf++)
{
- chksum += *wbuf;
- AdvWriteWordRegister(iop_base, IOPW_EE_DATA, *wbuf);
+ ushort tmp;
+ if (*charfields++) {
+ uchar *cbuf = (uchar *) wbuf;
+ tmp = *cbuf + ((*(cbuf + 1)) << 8);
+ }
+ else
+ tmp = *wbuf;
+ chksum += tmp;
+ AdvWriteWordRegister(iop_base, IOPW_EE_DATA, tmp);
AdvWriteWordRegister(iop_base, IOPW_EE_CMD, ASC_EEP_CMD_WRITE | addr);
AdvWaitEEPCmd(iop_base);
DvcSleepMilliSecond(ASC_EEP_DELAY_MS);
for (addr = ASC_EEP_DVC_CTL_BEGIN;
addr < ASC_EEP_MAX_WORD_ADDR; addr++, wbuf++)
{
- AdvWriteWordRegister(iop_base, IOPW_EE_DATA, *wbuf);
+ uchar *cbuf;
+ ushort tmp;
+ cbuf = (uchar *) wbuf;
+ tmp = *cbuf + ((*(cbuf + 1)) << 8);
+ AdvWriteWordRegister(iop_base, IOPW_EE_DATA, tmp);
AdvWriteWordRegister(iop_base, IOPW_EE_CMD, ASC_EEP_CMD_WRITE | addr);
AdvWaitEEPCmd(iop_base);
}
return ADV_BUSY;
}
asc_dvc->carr_freelist =
- (ADV_CARR_T *) ADV_U32_TO_VADDR(new_carrp->next_vpa);
+ (ADV_CARR_T *) ADV_U32_TO_VADDR(le32_to_cpu(new_carrp->next_vpa));
asc_dvc->carr_pending_cnt++;
/*
* to the stopper value. The current stopper will be changed
* below to point to the new stopper.
*/
- new_carrp->next_vpa = ASC_CQ_STOPPER;
+ new_carrp->next_vpa = cpu_to_le32(ASC_CQ_STOPPER);
/*
* Clear the ADV_SCSI_REQ_Q done flag.
scsiq->a_flag &= ~ADV_SCSIQ_DONE;
req_size = sizeof(ADV_SCSI_REQ_Q);
- req_paddr = cpu_to_le32(DvcGetPhyAddr(asc_dvc, scsiq, (uchar *) scsiq,
- (ADV_SDCNT *) &req_size, ADV_IS_SCSIQ_FLAG));
+ req_paddr = DvcGetPhyAddr(asc_dvc, scsiq, (uchar *) scsiq,
+ (ADV_SDCNT *) &req_size, ADV_IS_SCSIQ_FLAG);
- ASC_ASSERT(ADV_DWALIGN(req_paddr) == req_paddr);
+ ASC_ASSERT(ADV_8BALIGN(req_paddr) == req_paddr);
ASC_ASSERT(req_size >= sizeof(ADV_SCSI_REQ_Q));
+ /* Wait for assertion before making little-endian */
+ req_paddr = cpu_to_le32(req_paddr);
+
/* Save virtual and physical address of ADV_SCSI_REQ_Q and carrier. */
- scsiq->scsiq_ptr = ADV_VADDR_TO_U32(scsiq);
+ scsiq->scsiq_ptr = cpu_to_le32(ADV_VADDR_TO_U32(scsiq));
scsiq->scsiq_rptr = req_paddr;
- scsiq->carr_va = ADV_VADDR_TO_U32(asc_dvc->icq_sp);
+ scsiq->carr_va = cpu_to_le32(ADV_VADDR_TO_U32(asc_dvc->icq_sp));
/*
* Every ADV_CARR_T.carr_pa is byte swapped to little-endian
* order during initialization.
*/
asc_dvc->icq_sp = new_carrp;
- /*
- * Tickle the RISC to tell it to read its Command Queue Head pointer.
- */
- AdvWriteByteRegister(iop_base, IOPB_TICKLE, ADV_TICKLE_A);
- if (asc_dvc->chip_type == ADV_CHIP_ASC3550)
+ if (asc_dvc->chip_type == ADV_CHIP_ASC3550 ||
+ asc_dvc->chip_type == ADV_CHIP_ASC38C0800)
{
/*
- * Clear the tickle value. In the ASC-3550 the RISC flag
- * command 'clr_tickle_a' does not work unless the host
- * value is cleared.
+ * Tickle the RISC to tell it to read its Command Queue Head pointer.
*/
- AdvWriteByteRegister(iop_base, IOPB_TICKLE, ADV_TICKLE_NOP);
+ AdvWriteByteRegister(iop_base, IOPB_TICKLE, ADV_TICKLE_A);
+ if (asc_dvc->chip_type == ADV_CHIP_ASC3550)
+ {
+ /*
+ * Clear the tickle value. In the ASC-3550 the RISC flag
+ * command 'clr_tickle_a' does not work unless the host
+ * value is cleared.
+ */
+ AdvWriteByteRegister(iop_base, IOPB_TICKLE, ADV_TICKLE_NOP);
+ }
+ } else if (asc_dvc->chip_type == ADV_CHIP_ASC38C1600)
+ {
+ /*
+ * Notify the RISC a carrier is ready by writing the physical
+ * address of the new carrier stopper to the COMMA register.
+ */
+ AdvWriteDWordRegister(iop_base, IOPDW_COMMA,
+ /* carr_pa is LE, must be native before write */
+ le32_to_cpu(new_carrp->carr_pa));
}
DvcLeaveCritical(last_int_level);
{
int status;
ushort wdtr_able, sdtr_able, tagqng_able;
+ ushort ppr_able = 0;
uchar tid, max_cmd[ADV_MAX_TID + 1];
AdvPortAddr iop_base;
ushort bios_sig;
*/
AdvReadWordLram(iop_base, ASC_MC_WDTR_ABLE, wdtr_able);
AdvReadWordLram(iop_base, ASC_MC_SDTR_ABLE, sdtr_able);
+ if (asc_dvc->chip_type == ADV_CHIP_ASC38C1600)
+ {
+ AdvReadWordLram(iop_base, ASC_MC_PPR_ABLE, ppr_able);
+ }
AdvReadWordLram(iop_base, ASC_MC_TAGQNG_ABLE, tagqng_able);
for (tid = 0; tid <= ADV_MAX_TID; tid++)
{
* re-initializing the chip.
*/
asc_dvc->err_code = 0;
- if (asc_dvc->chip_type == ADV_CHIP_ASC38C0800)
+ if (asc_dvc->chip_type == ADV_CHIP_ASC38C1600)
+ {
+ status = AdvInitAsc38C1600Driver(asc_dvc);
+ }
+ else if (asc_dvc->chip_type == ADV_CHIP_ASC38C0800)
{
status = AdvInitAsc38C0800Driver(asc_dvc);
} else
*/
AdvWriteWordLram(iop_base, ASC_MC_WDTR_ABLE, wdtr_able);
AdvWriteWordLram(iop_base, ASC_MC_SDTR_ABLE, sdtr_able);
+ if (asc_dvc->chip_type == ADV_CHIP_ASC38C1600)
+ {
+ AdvWriteWordLram(iop_base, ASC_MC_PPR_ABLE, ppr_able);
+ }
AdvWriteWordLram(iop_base, ASC_MC_TAGQNG_ABLE, tagqng_able);
for (tid = 0; tid <= ADV_MAX_TID; tid++)
{
uchar intrb_code;
AdvReadByteLram(iop_base, ASC_MC_INTRB_CODE, intrb_code);
- if (intrb_code == ADV_ASYNC_CARRIER_READY_FAILURE &&
- asc_dvc->carr_pending_cnt != 0)
+
+ if (asc_dvc->chip_type == ADV_CHIP_ASC3550 ||
+ asc_dvc->chip_type == ADV_CHIP_ASC38C0800)
{
- AdvWriteByteRegister(iop_base, IOPB_TICKLE, ADV_TICKLE_A);
- if (asc_dvc->chip_type == ADV_CHIP_ASC3550)
+ if (intrb_code == ADV_ASYNC_CARRIER_READY_FAILURE &&
+ asc_dvc->carr_pending_cnt != 0)
{
- AdvWriteByteRegister(iop_base, IOPB_TICKLE, ADV_TICKLE_NOP);
+ AdvWriteByteRegister(iop_base, IOPB_TICKLE, ADV_TICKLE_A);
+ if (asc_dvc->chip_type == ADV_CHIP_ASC3550)
+ {
+ AdvWriteByteRegister(iop_base, IOPB_TICKLE, ADV_TICKLE_NOP);
+ }
}
}
/*
* Check if the IRQ stopper carrier contains a completed request.
*/
- while (((irq_next_vpa = asc_dvc->irq_sp->next_vpa) & ASC_RQ_DONE) != 0)
+ while (((irq_next_vpa = le32_to_cpu(asc_dvc->irq_sp->next_vpa)) & ASC_RQ_DONE) != 0)
{
/*
* Get a pointer to the newly completed ADV_SCSI_REQ_Q structure.
* below complements the conversion of ASC_SCSI_REQ_Q.scsiq_ptr'
* in AdvExeScsiQueue().
*/
- scsiq = (ADV_SCSI_REQ_Q *) ADV_U32_TO_VADDR(asc_dvc->irq_sp->areq_vpa);
+ scsiq = (ADV_SCSI_REQ_Q *) ADV_U32_TO_VADDR(le32_to_cpu(asc_dvc->irq_sp->areq_vpa));
+
+ /*
+ * Request finished with good status and the queue was not
+ * DMAed to host memory by the firmware. Set all status fields
+ * to indicate good status.
+ */
+ if ((irq_next_vpa & ASC_RQ_GOOD) != 0)
+ {
+ scsiq->done_status = QD_NO_ERROR;
+ scsiq->host_status = scsiq->scsi_status = 0;
+ scsiq->data_cnt = 0L;
+ }
/*
* Advance the stopper pointer to the next carrier
asc_dvc->irq_sp = (ADV_CARR_T *)
ADV_U32_TO_VADDR(ASC_GET_CARRP(irq_next_vpa));
- free_carrp->next_vpa = ADV_VADDR_TO_U32(asc_dvc->carr_freelist);
+ free_carrp->next_vpa = cpu_to_le32(ADV_VADDR_TO_U32(asc_dvc->carr_freelist));
asc_dvc->carr_freelist = free_carrp;
asc_dvc->carr_pending_cnt--;
*/
scsiq->cntl = 0;
-#if __BIG_ENDIAN
- /*
- * After the request completes the only field in the ASC_SCSI_REQ_Q
- * structure needs to be byte swapped from little endian order to
- * big endian order is the residual data count.
- */
- scsiqp->data_cnt = le32_to_cpu(scsiqp->data_cnt);
-#endif /* __BIG_ENDIAN */
-
/*
* If the command that completed was a SCSI INQUIRY and
* LUN 0 was sent the command, then process the INQUIRY
* microcode to the transfer residual count.
*/
- if (scsiq->cdb[4] < 8 || (scsiq->cdb[4] - scsiq->data_cnt) < 8)
+ if (scsiq->cdb[4] < 8 || (scsiq->cdb[4] - le32_to_cpu(scsiq->data_cnt)) < 8)
{
return;
}
/*
* WDTR, SDTR, and Tag Queuing cannot be enabled for old devices.
*/
- if (inq->rsp_data_fmt < 2 && inq->ansi_apr_ver < 2)
+ if (INQ_RESPONSE_FMT(*inq) < 2 && INQ_ANSI_VER(*inq) < 2)
{
return;
} else
* device's 'wdtr_able' bit and write the new value to the
* microcode.
*/
- if ((asc_dvc->wdtr_able & tidmask) && inq->WBus16)
+ if ((asc_dvc->wdtr_able & tidmask) && INQ_WIDE16(*inq))
{
AdvReadWordLram(iop_base, ASC_MC_WDTR_ABLE, cfg_word);
if ((cfg_word & tidmask) == 0)
* supports synchronous transfers, then turn on the device's
* 'sdtr_able' bit. Write the new value to the microcode.
*/
- if ((asc_dvc->sdtr_able & tidmask) && inq->Sync)
+ if ((asc_dvc->sdtr_able & tidmask) && INQ_SYNC(*inq))
{
AdvReadWordLram(iop_base, ASC_MC_SDTR_ABLE, cfg_word);
if ((cfg_word & tidmask) == 0)
AdvWriteWordLram(iop_base, ASC_MC_SDTR_DONE, cfg_word);
}
}
+ /*
+ * If the Inquiry data included enough space for the SPI-3
+ * Clocking field, then check if DT mode is supported.
+ */
+ if (asc_dvc->chip_type == ADV_CHIP_ASC38C1600 &&
+ (scsiq->cdb[4] >= 57
+ || (scsiq->cdb[4] - le32_to_cpu(scsiq->data_cnt)) >= 57))
+ {
+ /*
+ * PPR (Parallel Protocol Request) Capable
+ *
+ * If the device supports DT mode, then it must be PPR capable.
+ * The PPR message will be used in place of the SDTR and WDTR
+ * messages to negotiate synchronous speed and offset, transfer
+ * width, and protocol options.
+ */
+ if (INQ_CLOCKING(*inq) & INQ_CLOCKING_DT_ONLY)
+ {
+ AdvReadWordLram(iop_base, ASC_MC_PPR_ABLE, asc_dvc->ppr_able);
+ asc_dvc->ppr_able |= tidmask;
+ AdvWriteWordLram(iop_base, ASC_MC_PPR_ABLE, asc_dvc->ppr_able);
+ }
+ }
/*
* If the EEPROM enabled Tag Queuing for the device and the
* disabling Tag Queuing in the BIOS devices with Tag Queuing
* bugs will at least work with the BIOS.
*/
- if ((asc_dvc->tagqng_able & tidmask) && inq->CmdQue)
+ if ((asc_dvc->tagqng_able & tidmask) && INQ_CMD_QUEUE(*inq))
{
AdvReadWordLram(iop_base, ASC_MC_TAGQNG_ABLE, cfg_word);
cfg_word |= tidmask;