Linux 2.4.0-test10pre12.4.0-test10pre1
authorLinus Torvalds<torvalds@linuxfoundation.org>
Fri, 23 Nov 2007 20:39:21 +0000 (23 15:39 -0500)
committerLinus Torvalds<torvalds@linuxfoundation.org>
Fri, 23 Nov 2007 20:39:21 +0000 (23 15:39 -0500)
    - Roger Larsson: ">=" instead of ">" to make the VM not get stuck.
    - Gideon Glass: brw_kiovec() failure case oops fix
    - Rik van Riel: better memory balancing and OOM killer
    - Ivan Kokshaysky: alpha compile fixes
    - Vojtech Pavlik: forgotten ENOUGH macro in via82cxxx ide driver
    - Arnaldo Carvalho de Melo: acpi resource leak fix
    - Brian Gerst: use mov's instead of xchg in kernel trap entry
    - Torben Mathiasen: tlan timer being added twice bug
    - Andrzej Krzysztofowicz: config file fixes
    - Jean Tourrilhes: Wavelan lockup on SMP fix
    - Roman Zippel: initdata must be initialized (even if it is to zero:
      gcc is strange)
    - Jean Tourrilhes: hp100 driver lockup at startup on SMP
    - Russell King: fix silly minixfs uninitialized error bug
    - (various): fix uid hashing to use "uid_t" instead of "unsigned short"
    - Jaroslav Kysela: isapnp timeout fix. NULL ptr dereference fix.
    - Alain Knaff: fdformat should work again.
    - Randy Dunlap: USB - fix bluetooth, acm, printer, serial to work
      with urb->dev changes.
    - Randy Dunlap: USB whiteheat serial driver firmware update.
    - Randy Dunlap: USB hub memory corruption and pegasus driver update
    - Andre Hedrick: IDE Makefile cleanup

71 files changed:
Documentation/Configure.help
Documentation/isapnp.txt
Documentation/usb/bluetooth.txt[new file with mode: 0644]
arch/arm/config.in
arch/arm/mm/init.c
arch/i386/kernel/acpi.c
arch/i386/kernel/entry.S
arch/ia64/kernel/smp.c
arch/m68k/kernel/setup.c
arch/ppc/config.in
arch/ppc/kernel/apus_setup.c
arch/ppc/kernel/prep_setup.c
arch/s390/config.in
arch/sparc64/config.in
drivers/Makefile
drivers/block/floppy.c
drivers/block/xd.c
drivers/i2o/i2o_scsi.c
drivers/ide/Makefile
drivers/ide/via82cxxx.c
drivers/md/md.c
drivers/net/acenic.c
drivers/net/hp100.c
drivers/net/tlan.c
drivers/net/tlan.h
drivers/net/wavelan.c
drivers/net/wavelan.p.h
drivers/pnp/isapnp.c
drivers/s390/Config.in
drivers/sound/msnd_pinnacle.c
drivers/sound/waveartist.c
drivers/usb/acm.c
drivers/usb/bluetooth.c
drivers/usb/devio.c
drivers/usb/hub.c
drivers/usb/pegasus.c
drivers/usb/printer.c
drivers/usb/serial/digi_acceleport.c
drivers/usb/serial/ftdi_sio.c
drivers/usb/serial/keyspan.c
drivers/usb/serial/keyspan_pda.c
drivers/usb/serial/omninet.c
drivers/usb/serial/usb-serial.h
drivers/usb/serial/usbserial.c
drivers/usb/serial/visor.c
drivers/usb/serial/whiteheat.c
drivers/usb/serial/whiteheat.h
drivers/usb/serial/whiteheat_fw.h
drivers/usb/storage/freecom.c
drivers/usb/storage/sddr09.c
drivers/usb/storage/transport.c
drivers/usb/storage/transport.h
drivers/usb/usb-uhci.c
fs/buffer.c
fs/minix/bitmap.c
fs/minix/namei.c
include/asm-alpha/fcntl.h
include/asm-alpha/system.h
include/linux/init.h
include/linux/isapnp.h
include/linux/module.h
include/linux/sched.h
include/linux/swap.h
kernel/user.c
mm/Makefile
mm/highmem.c
mm/oom_kill.c[new file with mode: 0644]
mm/page_alloc.c
mm/vmscan.c
scripts/Menuconfig
scripts/tkparse.c

index 3441bcd..bdf426f 100644 (file)
@@ -2376,6+2376,30 @@ CONFIG_PCI
   information about which PCI hardware does work under Linux and which
   doesn't.
 
+PCI support
+CONFIG_PCI_INTEGRATOR
+  Find out whether you have a PCI motherboard. PCI is the name of a
+  bus system, i.e. the way the CPU talks to the other stuff inside
+  your box. Other bus systems are ISA, EISA, Microchannel (MCA) or
+  VESA. If you have PCI, say Y, otherwise N. 
+
+  The PCI-HOWTO, available from
+  http://www.linuxdoc.org/docs.html#howto , contains valuable
+  information about which PCI hardware does work under Linux and which
+  doesn't.
+
+QSpan PCI
+CONFIG_PCI_QSPAN
+  Find out whether you have a PCI motherboard. PCI is the name of a
+  bus system, i.e. the way the CPU talks to the other stuff inside
+  your box. Other bus systems are ISA, EISA, Microchannel (MCA) or
+  VESA. If you have PCI, say Y, otherwise N. 
+
+  The PCI-HOWTO, available from
+  http://www.linuxdoc.org/docs.html#howto , contains valuable
+  information about which PCI hardware does work under Linux and which
+  doesn't.
+
 PCI access mode
 CONFIG_PCI_GOBIOS
   On PCI systems, the BIOS can be used to detect the PCI devices and
index 4cb7a9b..034156b 100644 (file)
@@ -1,5+1,5 @@
 ISA Plug & Play support by Jaroslav Kysela <perex@suse.cz>
-=========================================================
+==========================================================
 
 Interface /proc/isapnp
 ======================
@@ -13,7+13,7 @@ Write commands:
 ---------------
 
 With the write interface you can simply activate or modify the configuration
-for ISA Plug & Play devices. It is mainly useable for drivers which don't
+for ISA Plug & Play devices. It is mainly useable for drivers which has not
 use the ISA Plug & Play kernel support yet.
 
 card <idx> <vendor>    - select PnP device by vendor identification
@@ -33,8+33,8 @@ poked <reg> <value>   - poke configuration dword to selected register
 Explanation:
        - variable <idx> begins with zero
        - variable <CSN> begins with one
-       - <vendor> is in form 'PNP0000'
-       - <logdev> is in form 'PNP0000'
+       - <vendor> is in format 'PNP0000'
+       - <logdev> is in format 'PNP0000'
 
 Example:
 
@@ -54,6+54,7 @@ port 0 0x240
 activate
 EOF
 
+
 Information for developers
 ==========================
 
@@ -92,7+93,7 @@ callback with appropriate information.
 
 Example for ids parameter initialization:
 
-static struct isapnp_card_id ids[] __devinitdata = {
+static struct isapnp_card_id card_ids[] __devinitdata = {
        {
                ISAPNP_CARD_ID('A','D','V', 0x550a),
                 devs: {
@@ -105,6+106,25 @@ static struct isapnp_card_id ids[] __devinitdata = {
                ISAPNP_CARD_END,
        }
 };
+ISAPNP_CARD_TABLE(card_ids);
+
+extern int isapnp_probe_devs(const struct isapnp_device_id *ids,
+                            int (*probe)(struct pci_bus *card,
+                                         const struct isapnp_device_id *id));
+
+
+This function is a helper for drivers which requires to use one
+device from an ISA PnP card. For each matched devices is called the probe
+callback with appropriate information.
+
+Example for ids parameter initialization:
+
+static struct isapnp_device_id device_ids[] __devinitdata = {
+       { ISAPNP_DEVICE_SINGLE('E','S','S', 0x0968, 'E','S','S', 0x0968), }
+       { ISAPNP_DEVICE_SINGLE_END, }
+};
+MODULE_DEVICE_TABLE(isapnp, &device_ids);
+
 
 ISA PnP configuration
 =====================
@@ -157,6+177,8 @@ Example (game port initialization)
                              NULL);
        if (!dev)
                return -ENODEV;
+       if (dev->active)
+               return -EBUSY;
        if (dev->prepare(dev)<0)
                return -EAGAIN;
        if (!(dev->resource[0].flags & IORESOURCE_IO))
diff --git a/Documentation/usb/bluetooth.txt b/Documentation/usb/bluetooth.txt
new file mode 100644 (file)
index 0000000..774f5d3
--- /dev/null
@@ -0,0 +1,44 @@
+INTRODUCTION
+
+  The USB Bluetooth driver supports any USB Bluetooth device.
+  It currently works well with the Linux USB Bluetooth stack from Axis 
+  (available at http://developer.axis.com/software/bluetooth/ ) and 
+  has been rumored to work with other Linux USB Bluetooth stacks.
+
+
+CONFIGURATION
+
+  Currently the driver can handle up to 256 different USB Bluetooth 
+  devices at once. 
+
+  If you are not using devfs:
+    The major number that the driver uses is 216 so to use the driver,
+    create the following nodes:
+       mknod /dev/ttyUB0 c 216 0
+       mknod /dev/ttyUB1 c 216 1
+       mknod /dev/ttyUB2 c 216 2
+       mknod /dev/ttyUB3 c 216 3
+               .
+               .
+               .
+       mknod /dev/ttyUB254 c 216 254
+       mknod /dev/ttyUB255 c 216 255
+
+  If you are using devfs:
+    The devices supported by this driver will show up as
+    /dev/usb/ttub/{0,1,...}
+
+  When the device is connected and recognized by the driver, the driver
+  will print to the system log, which node the device has been bound to.
+
+
+CONTACT:
+
+  If anyone has any problems using this driver, please contact me, or 
+  join the Linux-USB mailing list (information on joining the mailing 
+  list, as well as a link to its searchable archive is at 
+  http://www.linux-usb.org/ )
+
+
+Greg Kroah-Hartman
+greg@kroah.com
index 1a79b55..fff0569 100644 (file)
@@ -213,7+213,8 @@ if [ "$CONFIG_ARCH_NEXUSPCI" = "y" -o \
    define_bool CONFIG_PCI y
 else
    if [ "$CONFIG_ARCH_INTEGRATOR" = "y" ]; then
-      bool 'PCI support' CONFIG_PCI
+      bool 'PCI support' CONFIG_PCI_INTEGRATOR
+      define_bool CONFIG_PCI $CONFIG_PCI_INTEGRATOR
    else
       define_bool CONFIG_PCI n
    fi
index a235232..8dc0eaf 100644 (file)
@@ -56,7+56,7 @@ extern char _stext, _text, _etext, _end, __init_begin, __init_end;
  * The sole use of this is to pass memory configuration
  * data from paging_init to mem_init.
  */
-static struct meminfo __initdata meminfo;
+static struct meminfo meminfo __initdata = { 0, };
 
 /*
  * empty_bad_page is the page that is used for page faults when
index 211a6ce..f9424d1 100644 (file)
  * - check copy*user return
  * - get rid of check_region
  * - get rid of verify_area
+ * Arnaldo Carvalho de Melo <acme@conectiva.com.br> - 2000/09/28
+ * - do proper release on failure in acpi_claim_ioports and acpi_init
  */
 
 #include <linux/config.h>
@@ -81,6+83,7 @@ static int acpi_do_sleep(ctl_table *ctl,
                         struct file *file,
                         void *buffer,
                         size_t *len);
+static void acpi_release(unsigned long start, unsigned long size);
 
 static struct ctl_table_header *acpi_sysctl = NULL;
 
@@ -1300,15+1303,28 @@ static int acpi_claim(unsigned long start, unsigned long size)
 static int acpi_claim_ioports(struct acpi_facp *facp)
 {
        // we don't get a guarantee of contiguity for any of the ACPI registers
-       if (acpi_claim(facp->pm1a_evt, facp->pm1_evt_len)
-           || acpi_claim(facp->pm1b_evt, facp->pm1_evt_len)
-           || acpi_claim(facp->pm1a_cnt, facp->pm1_cnt_len)
-           || acpi_claim(facp->pm1b_cnt, facp->pm1_cnt_len)
-           || acpi_claim(facp->pm_tmr, facp->pm_tm_len)
-           || acpi_claim(facp->gpe0, facp->gpe0_len)
-           || acpi_claim(facp->gpe1, facp->gpe1_len))
-               return -EBUSY;
+       if (acpi_claim(facp->pm1a_evt, facp->pm1_evt_len))
+               goto return_ebusy;
+       if (acpi_claim(facp->pm1b_evt, facp->pm1_evt_len))
+               goto release_pm1a_evt;
+       if (acpi_claim(facp->pm1a_cnt, facp->pm1_cnt_len))
+               goto release_pm1b_evt;
+       if (acpi_claim(facp->pm1b_cnt, facp->pm1_cnt_len))
+               goto release_pm1a_cnt;
+       if (acpi_claim(facp->pm_tmr, facp->pm_tm_len))
+               goto release_pm1b_cnt;
+       if (acpi_claim(facp->gpe0, facp->gpe0_len))
+               goto release_pm_tmr;
+       if (acpi_claim(facp->gpe1, facp->gpe1_len))
+               goto release_gpe0;
        return 0;
+release_gpe0:          acpi_release(facp->gpe0, facp->gpe0_len);
+release_pm_tmr:                acpi_release(facp->pm_tmr, facp->pm_tm_len);
+release_pm1b_cnt:      acpi_release(facp->pm1b_cnt, facp->pm1_cnt_len);
+release_pm1a_cnt:      acpi_release(facp->pm1a_cnt, facp->pm1_cnt_len);
+release_pm1b_evt:      acpi_release(facp->pm1b_evt, facp->pm1_evt_len);
+release_pm1a_evt:      acpi_release(facp->pm1a_evt, facp->pm1_evt_len);
+return_ebusy:          return -EBUSY;
 }
 
 /*
@@ -1523,8+1539,10 @@ static int acpi_do_table(ctl_table *ctl,
                                error = -ENOMEM;
                }
                if (data)
-                       if (copy_from_user(data, buffer, size))
+                       if (copy_from_user(data, buffer, size)) {
+                               acpi_destroy_table(info);
                                error = -EFAULT;
+                       }
                
                write_unlock(&acpi_do_table_lock);
        }
@@ -1838,7+1856,7 @@ int __init acpi_init(void)
                           &acpi_facp)) {
                printk(KERN_ERR "ACPI: SCI (IRQ%d) allocation failed\n",
                       facp->sci_int);
-               goto err_out;
+               goto cleanup_ioports;
        }
 
 #ifndef CONFIG_ACPI_S1_SLEEP
@@ -1846,6+1864,8 @@ int __init acpi_init(void)
 #endif
 
        acpi_sysctl = register_sysctl_table(acpi_dir_table, 1);
+       if (!acpi_sysctl)
+               goto cleanup_irq;
 
        pm_power_off = acpi_power_off;
 
@@ -1863,7+1883,10 @@ int __init acpi_init(void)
                pm_idle = acpi_idle;
 
        return 0;
-
+cleanup_irq:
+    free_irq(facp->sci_int, &acpi_facp);
+cleanup_ioports:
+    acpi_release_ioports(facp);
 err_out:
        if (pci_driver_registered)
                pci_unregister_driver(&acpi_driver);
index 57aada8..67f1f24 100644 (file)
@@ -305,16+305,18 @@ error_code:
        pushl %ebx
        cld
        movl %es,%ecx
-       xchgl %eax, ORIG_EAX(%esp)      # orig_eax (get the error code. )
+       movl ORIG_EAX(%esp), %esi       # get the error code
+       movl ES(%esp), %edi             # get the function address
+       movl %eax, ORIG_EAX(%esp)
+       movl %ecx, ES(%esp)
        movl %esp,%edx
-       xchgl %ecx, ES(%esp)            # get the address and save es.
-       pushl %eax                      # push the error code
-       pushl %edx
+       pushl %esi                      # push the error code
+       pushl %edx                      # push the pt_regs pointer
        movl $(__KERNEL_DS),%edx
        movl %edx,%ds
        movl %edx,%es
        GET_CURRENT(%ebx)
-       call *%ecx
+       call *%edi
        addl $8,%esp
        jmp ret_from_exception
 
index d64305c..799c2fe 100644 (file)
@@ -49,8+49,8 @@ extern struct cpuinfo_ia64 cpu_data[NR_CPUS];      /* Duh... */
 
 spinlock_t kernel_flag = SPIN_LOCK_UNLOCKED;
 
-struct smp_boot_data __initdata smp;
-char __initdata no_int_routing = 0;
+struct smp_boot_data smp __initdata = { 0, };
+char no_int_routing __initdata = 0;
 
 unsigned char smp_int_redirect;                        /* are INT and IPI redirectable by the chipset? */
 volatile int __cpu_number_map[NR_CPUS] = { -1, };    /* SAPIC ID -> Logical ID */
index 7a6637a..015aabf 100644 (file)
@@ -68,13+68,13 @@ char saved_command_line[CL_SIZE];
 
 char m68k_debug_device[6] = "";
 
-void (*mach_sched_init) (void (*handler)(int, void *, struct pt_regs *)) __initdata;
+void (*mach_sched_init) (void (*handler)(int, void *, struct pt_regs *)) __initdata = NULL;
 /* machine dependent keyboard functions */
-int (*mach_keyb_init) (void) __initdata;
+int (*mach_keyb_init) (void) __initdata = NULL;
 int (*mach_kbdrate) (struct kbd_repeat *) = NULL;
 void (*mach_kbd_leds) (unsigned int) = NULL;
 /* machine dependent irq functions */
-void (*mach_init_IRQ) (void) __initdata;
+void (*mach_init_IRQ) (void) __initdata = NULL;
 void (*(*mach_default_handler)[]) (int, void *, struct pt_regs *) = NULL;
 void (*mach_get_model) (char *model) = NULL;
 int (*mach_get_hardware_list) (char *buffer) = NULL;
index 0a217d4..4322aab 100644 (file)
@@ -104,11+104,11 @@ if [ "$CONFIG_APUS" = "y" -o "$CONFIG_4xx" = "y" -o \
      "$CONFIG_8260" = "y" ]; then
    define_bool CONFIG_PCI n
 else
-   if [ "$CONFIG_6xx" = "y" -o "$CONFIG_PPC64BRIDGE" = "y" ]; then
-      define_bool CONFIG_PCI y
+   if [ "$CONFIG_8xx" = "y" ]; then
+      bool 'QSpan PCI' CONFIG_PCI_QSPAN
+      define_bool CONFIG_PCI $CONFIG_PCI_QSPAN
    else
-   # CONFIG_8xx
-      bool 'QSpan PCI' CONFIG_PCI
+      define_bool CONFIG_PCI y
    fi
 fi
 
@@ -151,7+151,7 @@ if [ "$CONFIG_4xx" != "y" -a "$CONFIG_8xx" != "y" ]; then
 fi
 
 if [ "$CONFIG_PREP" = "y" -o "$CONFIG_ALL_PPC" = "y" ]; then
-  bool 'PReP bootloader kernel arguments' CONFIG_CMDLINE_BOOL y
+  bool 'PReP bootloader kernel arguments' CONFIG_CMDLINE_BOOL
   if [ "$CONFIG_CMDLINE_BOOL" = "y" ] ; then
     string 'Initial kernel command string' CONFIG_CMDLINE "console=ttyS0,9600 console=tty0 root=/dev/sda2"
   fi
index d75663b..5979c93 100644 (file)
@@ -82,13+82,13 @@ char debug_device[6] __apusdata = "";
 
 extern void amiga_init_IRQ(void);
 
-void (*mach_sched_init) (void (*handler)(int, void *, struct pt_regs *)) __initdata;
+void (*mach_sched_init) (void (*handler)(int, void *, struct pt_regs *)) __initdata = NULL;
 /* machine dependent keyboard functions */
-int (*mach_keyb_init) (void) __initdata;
+int (*mach_keyb_init) (void) __initdata = NULL;
 int (*mach_kbdrate) (struct kbd_repeat *) __apusdata = NULL;
 void (*mach_kbd_leds) (unsigned int) __apusdata = NULL;
 /* machine dependent irq functions */
-void (*mach_init_IRQ) (void) __initdata;
+void (*mach_init_IRQ) (void) __initdata = NULL;
 void (*(*mach_default_handler)[]) (int, void *, struct pt_regs *) __apusdata = NULL;
 void (*mach_get_model) (char *model) __apusdata = NULL;
 int (*mach_get_hardware_list) (char *buffer) __apusdata = NULL;
index d72e747..6e30462 100644 (file)
@@ -384,8+384,8 @@ void __init prep_res_calibrate_decr(void)
  * 2 following ones measure the interval. The precision of the method
  * is still doubtful due to the short interval sampled.
  */
-static __initdata volatile int calibrate_steps = 3;
-static __initdata unsigned tbstamp;
+static volatile int calibrate_steps __initdata = 3;
+static unsigned tbstamp __initdata = 0;
 
 void __init
 prep_calibrate_decr_handler(int            irq,
index cdb88b7..894e40d 100644 (file)
@@ -46,11+46,16 @@ tristate 'Kernel support for ELF binaries' CONFIG_BINFMT_ELF
 endmenu
 
 source drivers/s390/Config.in
+
+mainmenu_option next_comment
+comment 'Character devices'
 bool 'Unix98 PTY support' CONFIG_UNIX98_PTYS
 if [ "$CONFIG_UNIX98_PTYS" = "y" ]; then
   int 'Maximum number of Unix98 PTYs in use (0-2048)' CONFIG_UNIX98_PTY_COUNT 256
 fi
 
+endmenu
+
 if [ "$CONFIG_NET" = "y" ]; then
   source net/Config.in
 fi
index c49a87e..71e8973 100644 (file)
@@ -89,9+89,9 @@ bool 'Normal floppy disk support' CONFIG_BLK_DEV_FD
 tristate 'Loopback device support' CONFIG_BLK_DEV_LOOP
 dep_tristate 'Network block device support' CONFIG_BLK_DEV_NBD $CONFIG_NET
 
-#tristate 'Logical volume manager (LVM) support' CONFIG_BLK_DEV_LVM N
+#tristate 'Logical volume manager (LVM) support' CONFIG_BLK_DEV_LVM
 #if [ "$CONFIG_BLK_DEV_LVM" != "n" ]; then
-#   bool '   LVM information in proc filesystem' CONFIG_LVM_PROC_FS Y
+#   bool '   LVM information in proc filesystem' CONFIG_LVM_PROC_FS
 #fi
 
 include drivers/md/Config.in
@@ -166,7+166,7 @@ if [ "$CONFIG_SCSI" != "n" ]; then
    if [ "$CONFIG_PCI" != "n" ]; then
       dep_tristate 'Adaptec AIC7xxx support' CONFIG_SCSI_AIC7XXX $CONFIG_SCSI
       if [ "$CONFIG_SCSI_AIC7XXX" != "n" ]; then
-        bool '  Enable tagged command queueing (TCQ) by default' CONFIG_AIC7XXX_TAGGED_QUEUEING Y
+        bool '  Enable tagged command queueing (TCQ) by default' CONFIG_AIC7XXX_TAGGED_QUEUEING
         int  '  Maximum number of TCQ commands per device' CONFIG_AIC7XXX_CMDS_PER_DEVICE 8
         bool '  Collect statistics to report in /proc' CONFIG_AIC7XXX_PROC_STATS N
         int  '  Delay in seconds after SCSI bus reset' CONFIG_AIC7XXX_RESET_DELAY 5
index 1720f79..9b5c9ec 100644 (file)
@@ -28,9+28,9 @@ subdir-$(CONFIG_USB)          += usb
 subdir-$(CONFIG_INPUT)         += input
 subdir-$(CONFIG_PHONE)         += telephony
 subdir-$(CONFIG_SGI)           += sgi
-subdir-$(CONFIG_I2O)           += i2o
 subdir-$(CONFIG_IDE)           += ide
 subdir-$(CONFIG_SCSI)          += scsi
+subdir-$(CONFIG_I2O)           += i2o
 subdir-$(CONFIG_MD)            += md
 subdir-$(CONFIG_IEEE1394)      += ieee1394
 subdir-$(CONFIG_PNP)           += pnp
index 2b26bb6..6138417 100644 (file)
@@ -3435,6+3435,7 @@ static int get_floppy_geometry(int drive, int type, struct floppy_struct **g)
 static int fd_ioctl(struct inode *inode, struct file *filp, unsigned int cmd,
                    unsigned long param)
 {
+#define FD_IOCTL_ALLOWED ((filp) && (filp)->private_data)
 #define OUT(c,x) case c: outparam = (const char *) (x); break
 #define IN(c,x,tag) case c: *(x) = inparam. tag ; return 0
 
@@ -3502,7+3503,7 @@ static int fd_ioctl(struct inode *inode, struct file *filp, unsigned int cmd,
                return -EINVAL;
 
        /* permission checks */
-       if (((cmd & 0x40) && !(filp->f_mode & 2)) ||
+       if (((cmd & 0x40) && !FD_IOCTL_ALLOWED) ||
            ((cmd & 0x80) && !capable(CAP_SYS_ADMIN)))
                return -EPERM;
 
@@ -3708,6+3709,8 @@ static int floppy_open(struct inode * inode, struct file * filp)
                return -EIO;
        }
 
+       filp->private_data = (void*) 0;
+
        drive = DRIVE(inode->i_rdev);
        if (drive >= N_DRIVE ||
            !(allowed_drive_mask & (1 << drive)) ||
@@ -3775,6+3778,13 @@ static int floppy_open(struct inode * inode, struct file * filp)
                invalidate_buffers(MKDEV(FLOPPY_MAJOR,old_dev));
        }
 
+       /* Allow ioctls if we have write-permissions even if read-only open.
+        * Needed so that programs such as fdrawcmd still can work on write
+        * protected disks */
+       if ((filp->f_mode & 2) || 
+           (inode->i_sb && (permission(inode,2) == 0)))
+           filp->private_data = (void*) 8;
+
        if (UFDCS->rawcmd == 1)
                UFDCS->rawcmd = 2;
 
index b5df63b..892c90e 100644 (file)
@@ -142,9+142,9 @@ static DECLARE_WAIT_QUEUE_HEAD(xd_wait_int);
 static DECLARE_WAIT_QUEUE_HEAD(xd_wait_open);
 static u_char xd_valid[XD_MAXDRIVES] = { 0,0 };
 static u_char xd_drives, xd_irq = 5, xd_dma = 3, xd_maxsectors;
-static u_char xd_override __initdata, xd_type __initdata;
+static u_char xd_override __initdata = 0, xd_type __initdata = 0;
 static u_short xd_iobase = 0x320;
-static int xd_geo[XD_MAXDRIVES*3] __initdata;
+static int xd_geo[XD_MAXDRIVES*3] __initdata = { 0, };
 
 static volatile int xdc_busy;
 static DECLARE_WAIT_QUEUE_HEAD(xdc_wait);
index 3c147cf..edbd260 100644 (file)
@@ -902,12+902,8 @@ int i2o_scsi_bios_param(Disk * disk, kdev_t dev, int *ip)
        return 0;
 }
 
-/* Loadable module support */
-#ifdef MODULE
-
 MODULE_AUTHOR("Red Hat Software");
 
-Scsi_Host_Template driver_template = I2OSCSI;
+static Scsi_Host_Template driver_template = I2OSCSI;
 
 #include "../scsi/scsi_module.c"
-#endif
dissimilarity index 91%
index cc8d4e8..43fd39a 100644 (file)
-#
-# Makefile for the kernel ata, atapi, and ide block device drivers.
-#
-# Note! Dependencies are done automagically by 'make dep', which also
-# removes any old dependencies. DON'T put your own dependencies here
-# unless it's something special (ie not a .c file).
-#
-# Note 2! The CFLAGS definition is now inherited from the
-# parent makefile.
-#
-
-#
-# Note : at this point, these files are compiled on all systems.
-# In the future, some of these should be built conditionally.
-#
-
-SUB_DIRS     :=
-MOD_SUB_DIRS := $(SUB_DIRS)
-ALL_SUB_DIRS := $(SUB_DIRS)
-
-O_TARGET := idedriver.o
-O_OBJS   := ide-geometry.o
-M_OBJS   :=
-OX_OBJS :=
-MX_OBJS :=
-
-ifeq ($(CONFIG_BLK_DEV_AEC62XX),y)
-IDE_OBJS += aec62xx.o
-endif
-
-ifeq ($(CONFIG_BLK_DEV_ALI14XX),y)
-IDE_OBJS += ali14xx.o
-endif
-
-ifeq ($(CONFIG_BLK_DEV_ALI15X3),y)
-IDE_OBJS += alim15x3.o
-endif
-
-ifeq ($(CONFIG_BLK_DEV_AMD7409),y)
-IDE_OBJS += amd7409.o
-endif
-
-ifeq ($(CONFIG_BLK_DEV_BUDDHA),y)
-IDE_OBJS += buddha.o
-endif
-
-ifeq ($(CONFIG_BLK_DEV_CMD640),y)
-IDE_OBJS += cmd640.o
-endif
-
-ifeq ($(CONFIG_BLK_DEV_CMD64X),y)
-IDE_OBJS += cmd64x.o
-endif
-
-ifeq ($(CONFIG_BLK_DEV_CS5530),y)
-IDE_OBJS += cs5530.o
-endif
-
-ifeq ($(CONFIG_BLK_DEV_CY82C693),y)
-IDE_OBJS += cy82c693.o
-endif
-
-ifeq ($(CONFIG_BLK_DEV_DTC2278),y)
-IDE_OBJS += dtc2278.o
-endif
-
-ifeq ($(CONFIG_BLK_DEV_FALCON_IDE),y)
-IDE_OBJS += falconide.o
-endif
-
-ifeq ($(CONFIG_BLK_DEV_GAYLE),y)
-IDE_OBJS += gayle.o
-endif
-
-ifeq ($(CONFIG_BLK_DEV_Q40IDE),y)
-IDE_OBJS += q40ide.o
-endif
-
-ifeq ($(CONFIG_BLK_DEV_HD),y)
-O_OBJS += hd.o
-endif
-
-ifeq ($(CONFIG_BLK_DEV_HPT34X),y)
-IDE_OBJS += hpt34x.o
-endif
-
-ifeq ($(CONFIG_BLK_DEV_HPT366),y)
-IDE_OBJS += hpt366.o
-endif
-
-ifeq ($(CONFIG_BLK_DEV_HT6560B),y)
-IDE_OBJS += ht6560b.o
-endif
-
-ifeq ($(CONFIG_BLK_DEV_IDE_ICSIDE),y)
-IDE_OBJS += icside.o
-endif
-
-ifeq ($(CONFIG_BLK_DEV_IDEDMA),y)
-IDE_OBJS += ide-dma.o
-endif
-
-ifeq ($(CONFIG_BLK_DEV_IDEPCI),y)
-IDE_OBJS += ide-pci.o
-endif
-
-ifeq ($(CONFIG_BLK_DEV_ISAPNP),y)
-IDE_OBJS += ide-pnp.o
-endif
-
-ifeq ($(CONFIG_BLK_DEV_IDE_PMAC),y)
-IDE_OBJS += ide-pmac.o
-endif
-
-ifeq ($(CONFIG_BLK_DEV_MAC_IDE),y)
-IDE_OBJS += macide.o
-endif
-
-ifeq ($(CONFIG_BLK_DEV_NS87415),y)
-IDE_OBJS += ns87415.o
-endif
-
-ifeq ($(CONFIG_BLK_DEV_OPTI621),y)
-IDE_OBJS += opti621.o
-endif
-
-ifeq ($(CONFIG_BLK_DEV_PDC202XX),y)
-IDE_OBJS += pdc202xx.o
-endif
-
-ifeq ($(CONFIG_BLK_DEV_PDC4030),y)
-IDE_OBJS += pdc4030.o
-endif
-
-ifeq ($(CONFIG_BLK_DEV_PIIX),y)
-IDE_OBJS += piix.o
-endif
-
-ifeq ($(CONFIG_BLK_DEV_QD6580),y)
-IDE_OBJS += qd6580.o
-endif
-
-ifeq ($(CONFIG_BLK_DEV_IDE_RAPIDE),y)
-IDE_OBJS += rapide.o
-endif
-
-ifeq ($(CONFIG_BLK_DEV_RZ1000),y)
-IDE_OBJS += rz1000.o
-endif
-
-ifeq ($(CONFIG_BLK_DEV_SIS5513),y)
-IDE_OBJS += sis5513.o
-endif
-
-ifeq ($(CONFIG_BLK_DEV_SL82C105),y)
-IDE_OBJS += sl82c105.o
-endif
-
-ifeq ($(CONFIG_BLK_DEV_TRM290),y)
-IDE_OBJS += trm290.o
-endif
-
-ifeq ($(CONFIG_BLK_DEV_UMC8672),y)
-IDE_OBJS += umc8672.o
-endif
-
-ifeq ($(CONFIG_BLK_DEV_VIA82CXXX),y)
-IDE_OBJS += via82cxxx.o
-endif
-
-### if CONFIG_BLK_DEV_IDE is n, IDE_OBJS will be ignored
-
-ifeq ($(CONFIG_PROC_FS),y)
-IDE_OBJS += ide-proc.o
-endif
-  
-###Collect
-
-ifeq ($(CONFIG_BLK_DEV_IDE),y)
-  OX_OBJS += ide.o ide-features.o
-  O_OBJS += ide-probe.o $(IDE_OBJS)
-else
-  ifeq ($(CONFIG_BLK_DEV_IDE),m)
-  MIX_OBJS += ide.o ide-features.o $(IDE_OBJS)
-  M_OBJS += ide-mod.o ide-probe-mod.o
-  endif
-endif
-
-############
-
-ifeq ($(CONFIG_BLK_DEV_IDECS),y)
-O_OBJS += ide-cs.o
-else
-  ifeq ($(CONFIG_BLK_DEV_IDECS),m)
-  M_OBJS += ide-cs.o
-  endif
-endif
-
-ifeq ($(CONFIG_BLK_DEV_IDEDISK),y)
-O_OBJS += ide-disk.o
-else
-  ifeq ($(CONFIG_BLK_DEV_IDEDISK),m)
-  M_OBJS += ide-disk.o
-  endif
-endif
-
-ifeq ($(CONFIG_BLK_DEV_IDECD),y)
-O_OBJS += ide-cd.o
-else
-  ifeq ($(CONFIG_BLK_DEV_IDECD),m)
-  M_OBJS += ide-cd.o
-  endif
-endif
-
-ifeq ($(CONFIG_BLK_DEV_IDETAPE),y)
-O_OBJS += ide-tape.o
-else
-  ifeq ($(CONFIG_BLK_DEV_IDETAPE),m)
-  M_OBJS += ide-tape.o
-  endif
-endif
-
-ifeq ($(CONFIG_BLK_DEV_IDEFLOPPY),y)
-O_OBJS += ide-floppy.o
-else
-  ifeq ($(CONFIG_BLK_DEV_IDEFLOPPY),m)
-  M_OBJS += ide-floppy.o
-  endif
-endif
-
-include $(TOPDIR)/Rules.make
-
-ide-mod.o: ide.o ide-features.o $(IDE_OBJS)
-       $(LD) $(LD_RFLAG) -r -o $@ ide.o ide-features.o $(IDE_OBJS)
-
-ide-probe-mod.o: ide-probe.o ide-geometry.o
-       $(LD) $(LD_RFLAG) -r -o $@ ide-probe.o ide-geometry.o
+#
+# Makefile for the kernel ata, atapi, and ide block device drivers.
+#
+# 12 September 2000, Bartlomiej Zolnierkiewicz <bkz@linux-ide.org>
+# Rewritten to use lists instead of if-statements.
+#
+# Note : at this point, these files are compiled on all systems.
+# In the future, some of these should be built conditionally.
+#
+
+SUB_DIRS     :=
+MOD_SUB_DIRS := $(SUB_DIRS)
+ALL_SUB_DIRS := $(SUB_DIRS)
+
+O_TARGET := idedriver.o
+
+obj-y          :=
+obj-m          :=
+ide-obj-y      :=
+
+ide-obj-$(CONFIG_BLK_DEV_AEC62XX)      += aec62xx.o
+ide-obj-$(CONFIG_BLK_DEV_ALI14XX)      += ali14xx.o
+ide-obj-$(CONFIG_BLK_DEV_ALI15X3)      += alim15x3.o
+ide-obj-$(CONFIG_BLK_DEV_AMD7409)      += amd7409.o
+ide-obj-$(CONFIG_BLK_DEV_BUDDHA)       += buddha.o
+ide-obj-$(CONFIG_BLK_DEV_CMD640)       += cmd640.o
+ide-obj-$(CONFIG_BLK_DEV_CMD64X)       += cmd64x.o
+ide-obj-$(CONFIG_BLK_DEV_CS5530)       += cs5530.o
+ide-obj-$(CONFIG_BLK_DEV_CY82C693)     += cy82c693.o
+ide-obj-$(CONFIG_BLK_DEV_DTC2278)      += dtc2278.o
+ide-obj-$(CONFIG_BLK_DEV_FALCON_IDE)   += falconide.o
+ide-obj-$(CONFIG_BLK_DEV_GAYLE)                += gayle.o
+ide-obj-$(CONFIG_BLK_DEV_Q40IDE)       += q40ide.o
+ide-obj-$(CONFIG_BLK_DEV_HD)           += hd.o
+ide-obj-$(CONFIG_BLK_DEV_HPT34X)       += hpt34x.o
+ide-obj-$(CONFIG_BLK_DEV_HPT366)       += hpt366.o
+ide-obj-$(CONFIG_BLK_DEV_HT6560B)      += ht6560b.o
+ide-obj-$(CONFIG_BLK_DEV_IDE_ICSIDE)   += icside.o
+ide-obj-$(CONFIG_BLK_DEV_IDEDMA)       += ide-dma.o
+ide-obj-$(CONFIG_BLK_DEV_IDEPCI)       += ide-pci.o
+ide-obj-$(CONFIG_BLK_DEV_ISAPNP)       += ide-pnp.o
+ide-obj-$(CONFIG_BLK_DEV_IDE_PMAC)     += ide-pmac.o
+ide-obj-$(CONFIG_BLK_DEV_MAC_IDE)      += macide.o
+ide-obj-$(CONFIG_BLK_DEV_NS87415)      += ns87415.o
+ide-obj-$(CONFIG_BLK_DEV_OPTI621)      += opti621.o
+ide-obj-$(CONFIG_BLK_DEV_PDC202XX)     += pdc202xx.o
+ide-obj-$(CONFIG_BLK_DEV_PDC4030)      += pdc4030.o
+ide-obj-$(CONFIG_BLK_DEV_PIIX)         += piix.o
+ide-obj-$(CONFIG_BLK_DEV_QD6580)       += qd6580.o
+ide-obj-$(CONFIG_BLK_DEV_IDE_RAPIDE)   += rapide.o
+ide-obj-$(CONFIG_BLK_DEV_RZ1000)       += rz1000.o
+ide-obj-$(CONFIG_BLK_DEV_SIS5513)      += sis5513.o
+ide-obj-$(CONFIG_BLK_DEV_SL82C105)     += sl82c105.o
+ide-obj-$(CONFIG_BLK_DEV_TRM290)       += trm290.o
+ide-obj-$(CONFIG_BLK_DEV_UMC8672)      += umc8672.o
+ide-obj-$(CONFIG_BLK_DEV_VIA82CXXX)    += via82cxxx.o
+
+ide-obj-$(CONFIG_PROC_FS)              += ide-proc.o
+
+export-objs            := ide.o ide-features.o
+list-multi             := ide-mod.o ide-probe-mod.o
+ide-mod-objs           := $(export-objs) $(ide-obj-y)
+ide-probe-mod-objs     := ide-probe.o ide-geometry.o
+
+obj-$(CONFIG_BLK_DEV_IDE)      += ide-mod.o ide-probe-mod.o
+obj-$(CONFIG_BLK_DEV_IDECS)    += ide-cs.o
+obj-$(CONFIG_BLK_DEV_IDEDISK)  += ide-disk.o
+obj-$(CONFIG_BLK_DEV_IDECD)    += ide-cd.o
+obj-$(CONFIG_BLK_DEV_IDETAPE)  += ide-tape.o
+obj-$(CONFIG_BLK_DEV_IDEFLOPPY)        += ide-floppy.o
+
+# Extract lists of the multi-part drivers.
+# The 'int-*' lists are the intermediate files used to build the multi's.
+multi-y                := $(filter $(list-multi), $(obj-y))
+multi-m                := $(filter $(list-multi), $(obj-m))
+int-y          := $(sort $(foreach m, $(multi-y), $($(basename $(m))-objs)))
+int-m          := $(sort $(foreach m, $(multi-m), $($(basename $(m))-objs)))
+
+# Take multi-part drivers out of obj-y and put components in.
+obj-y          := $(filter-out $(list-multi), $(obj-y)) $(int-y)
+
+# Translate to Rules.make lists.
+O_OBJS         := $(filter-out $(export-objs), $(obj-y))
+OX_OBJS                := $(filter     $(export-objs), $(obj-y))
+M_OBJS         := $(sort $(filter-out $(export-objs), $(obj-m)))
+MI_OBJS                := $(sort $(filter-out  $(export-objs), $(int-m)))
+MIX_OBJS       := $(sort $(filter      $(export-objs), $(int-m)))
+
+include $(TOPDIR)/Rules.make
+
+ide-mod.o: $(ide-mod-objs)
+       $(LD) -r -o $@ $(ide-mod-objs)
+
+ide-probe-mod.o: $(ide-probe-mod-objs)
+       $(LD) -r -o $@ $(ide-probe-mod-objs)
index 1c1b68f..566dcc4 100644 (file)
@@ -1,5+1,5 @@
 /*
- * $Id: via82cxxx.c,v 2.1d 2000/10/01 10:01:00 vojtech Exp $
+ * $Id: via82cxxx.c,v 2.1e 2000/10/03 10:01:00 vojtech Exp $
  *
  *  Copyright (c) 2000 Vojtech Pavlik
  *
@@ -192,7+192,7 @@ static int via_get_info(char *buffer, char **addr, off_t offset, int count)
 
        via_print("----------VIA BusMastering IDE Configuration----------------");
 
-       via_print("Driver Version:                     2.1d");
+       via_print("Driver Version:                     2.1e");
 
        pci_read_config_byte(isa_dev, PCI_REVISION_ID, &t);
        via_print("South Bridge:                       VIA %s rev %#x", via_isa_bridges[via_config].name, t);
@@ -334,8+334,8 @@ static int via_set_speed(ide_drive_t *drive, byte speed)
  */
 
        switch(via_isa_bridges[via_config].speed) {
-               case XFER_UDMA_2: t = via_timing[i].udma ? (0xe0 | (FIT(via_timing[i].udma, 2, 5) - 2)) : 0x03; break;
-               case XFER_UDMA_4: t = via_timing[i].udma ? (0xe8 | (FIT(via_timing[i].udma, 2, 9) - 2)) : 0x0f; break;
+               case XFER_UDMA_2: t = via_timing[i].udma ? (0xe0 | (FIT(ENOUGH(via_timing[i].udma, T), 2, 5) - 2)) : 0x03; break;
+               case XFER_UDMA_4: t = via_timing[i].udma ? (0xe8 | (FIT(ENOUGH(via_timing[i].udma, T/2), 2, 9) - 2)) : 0x0f; break;
         }
 
        if (via_isa_bridges[via_config].speed != XFER_MW_DMA_2)
index 4e82a58..430532e 100644 (file)
@@ -2032,7+2032,7 @@ void md_setup_drive(void) md__init;
  * at boot time.
  */
 #ifdef CONFIG_AUTODETECT_RAID
-static int detected_devices[128] md__initdata;
+static int detected_devices[128] md__initdata = { 0, };
 static int dev_cnt=0;
 void md_autodetect_dev(kdev_t dev)
 {
@@ -3640,7+3640,7 @@ struct {
        int pers[MAX_MD_BOOT_DEVS];
        int chunk[MAX_MD_BOOT_DEVS];
        kdev_t devices[MAX_MD_BOOT_DEVS][MAX_REAL];
-} md_setup_args md__initdata;
+} md_setup_args md__initdata = { 0, };
 
 /*
  * Parse the command-line parameters given our kernel, but do not
index 8ccc6eb..8449613 100644 (file)
@@ -408,7+408,7 @@ static char version[] __initdata =
 
 static struct net_device *root_dev;
 
-static int probed __initdata;
+static int probed __initdata = 0;
 
 
 #ifdef NEW_NETINIT
index d54857b..74938f9 100644 (file)
 **   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 **
 **
+** 1.57 -> 1.57b - Jean II
+**   - fix spinlocks, SMP is now working !
+**
 ** 1.56 -> 1.57
 **   - updates for new PCI interface for 2.1 kernels
 **
@@ -701,7+704,7 @@ static int __init hp100_probe1( struct net_device *dev, int ioaddr, u_char bus,
 
   lp = (struct hp100_private *)dev->priv;
   memset( lp, 0, sizeof( struct hp100_private ) );
-  lp->lock = SPIN_LOCK_UNLOCKED;
+  spin_lock_init(&lp->lock);
   lp->id = eid;
   lp->chip = chip;
   lp->mode = local_mode;
@@ -1585,9+1588,11 @@ static int hp100_start_xmit_bm( struct sk_buff *skb, struct net_device *dev )
        }
       else
        {
-         hp100_ints_off();
+         spin_lock_irqsave (&lp->lock, flags);
+         hp100_ints_off();     /* Useful ? Jean II */
          i = hp100_sense_lan( dev );
          hp100_ints_on();
+         spin_unlock_irqrestore (&lp->lock, flags);
          if ( i == HP100_LAN_ERR )
            printk( "hp100: %s: link down detected\n", dev->name );
          else
@@ -1703,6+1708,7 @@ static void hp100_clean_txring( struct net_device *dev )
 /* tx function for slave modes */
 static int hp100_start_xmit( struct sk_buff *skb, struct net_device *dev )
 {
+  unsigned long flags;
   int i, ok_flag;
   int ioaddr = dev->base_addr;
   u_short val;
@@ -1759,9+1765,11 @@ static int hp100_start_xmit( struct sk_buff *skb, struct net_device *dev )
         }
       else
         {
-          hp100_ints_off();
+         spin_lock_irqsave (&lp->lock, flags);
+          hp100_ints_off();    /* Useful ? Jean II */
           i = hp100_sense_lan( dev );
           hp100_ints_on();
+         spin_unlock_irqrestore (&lp->lock, flags);
           if ( i == HP100_LAN_ERR )
             printk( "hp100: %s: link down detected\n", dev->name );
          else
@@ -1796,6+1804,7 @@ static int hp100_start_xmit( struct sk_buff *skb, struct net_device *dev )
 #endif
     }
        
+  spin_lock_irqsave (&lp->lock, flags);
   hp100_ints_off();
   val = hp100_inw( IRQ_STATUS );
   /* Ack / clear the interrupt TX_COMPLETE interrupt - this interrupt is set
@@ -1842,6+1851,7 @@ static int hp100_start_xmit( struct sk_buff *skb, struct net_device *dev )
   lp->stats.tx_bytes += skb->len;
   dev->trans_start=jiffies;
   hp100_ints_on();
+  spin_unlock_irqrestore (&lp->lock, flags);
        
   dev_kfree_skb_any( skb );
        
@@ -2104,16+2114,20 @@ static void hp100_rx_bm( struct net_device *dev )
  */
 static hp100_stats_t *hp100_get_stats( struct net_device *dev )
 {
+  unsigned long flags;
   int ioaddr = dev->base_addr;
+  struct hp100_private *lp = (struct hp100_private *)dev->priv;
 
 #ifdef HP100_DEBUG_B
   hp100_outw( 0x4215, TRACE );
 #endif
 
-  hp100_ints_off();
+  spin_lock_irqsave (&lp->lock, flags);
+  hp100_ints_off();    /* Useful ? Jean II */
   hp100_update_stats( dev );
   hp100_ints_on();
-  return &((struct hp100_private *)dev->priv)->stats;
+  spin_unlock_irqrestore (&lp->lock, flags);
+  return &(lp->stats);
 }
 
 static void hp100_update_stats( struct net_device *dev )
@@ -2535,10+2549,12 @@ static void hp100_start_interface( struct net_device *dev )
                   HP100_TX_ERROR   | HP100_SET_LB , IRQ_MASK );
     }
        
+  /* Note : before hp100_set_multicast_list(), because it will play with
+   * spinlock itself... Jean II */
+  spin_unlock_irqrestore (&lp->lock, flags);
+
   /* Enable MAC Tx and RX, set MAC modes, ... */
   hp100_set_multicast_list( dev );
-
-  spin_unlock_irqrestore (&lp->lock, flags);
 }
 
 \f
index 63dce60..bfbb827 100644 (file)
  *     v1.8a May 28, 2000   - Minor updates.
  *
  *     v1.9 July 25, 2000   - Fixed a few remaining Full-Duplex issues.
- *                                  - Updated with timer fixes from Andrew Morton.
- *                                  - Fixed module race in TLan_Open.
- *                          - Added routine to monitor PHY status.
- *                          - Added activity led support for Proliant devices.
+ *                          - Updated with timer fixes from Andrew Morton.
+ *                          - Fixed module race in TLan_Open.
+ *                          - Added routine to monitor PHY status.
+ *                          - Added activity led support for Proliant devices.
+ *
+ *     v1.10 Aug 30, 2000   - Added support for EISA based tlan controllers 
+ *                            like the Compaq NetFlex3/E. 
+ *                          - Rewrote tlan_probe to better handle multiple
+ *                            bus probes. Probing and device setup is now
+ *                            done through TLan_Probe and TLan_init_one. Actual
+ *                            hardware probe is done with kernel API and 
+ *                            TLan_EisaProbe.
+ *                          - Adjusted debug information for probing.
+ *                          - Fixed bug that would cause general debug information 
+ *                            to be printed after driver removal. 
+ *                          - Added transmit timeout handling.
+ *                          - Fixed OOM return values in tlan_probe. 
+ *                          - Fixed possible mem leak in tlan_exit 
+ *                            (now tlan_remove_one).
+ *                          - Fixed timer bug in TLan_phyMonitor.
+ *                          - This driver version is alpha quality, please
+ *                            send me any bug issues you may encounter.
+ *
+ *     v1.11 Aug 31, 2000   - Do not try to register irq 0 if no irq line was 
+ *                            set for EISA cards.
+ *                          - Added support for NetFlex3/E with nibble-rate
+ *                            10Base-T PHY. This is untestet as I haven't got
+ *                            one of these cards.
+ *                          - Fixed timer being added twice.
+ *                          - Disabled PhyMonitoring by default as this is
+ *                            work in progress. Define MONITOR to enable it.
+ *                          - Now we don't display link info with PHYs that
+ *                            doesn't support it (level1).
+ *                          - Incresed tx_timeout beacuse of auto-neg.
+ *                          - Adjusted timers for forced speeds.
  *
  *******************************************************************************/
 
-
+                                                                                
 #include <linux/module.h>
 
 #include "tlan.h"
 typedef u32 (TLanIntVectorFunc)( struct net_device *, u16 );
 
 
+/* For removing EISA devices */
+static struct net_device       *TLan_Eisa_Devices = NULL;
 
-static struct net_device       *TLanDevices = NULL;
 static int             TLanDevicesInstalled = 0;
 
 /* Force speed, duplex and aui settings */
@@ -138,13+170,18 @@ MODULE_PARM(speed, "i");
 MODULE_PARM(debug, "i");
 EXPORT_NO_SYMBOLS;
 
+/* Define this to enable Link beat monitoring */
+#undef MONITOR
+
 /* Turn on debugging. See linux/Documentation/networking/tlan.txt for details */
 static  int            debug = 0;
 
 static int             bbuf = 0;
 static u8              *TLanPadBuffer;
 static char            TLanSignature[] = "TLAN";
-static const char *tlan_banner = "ThunderLAN driver v1.9\n";
+static const char *tlan_banner = "ThunderLAN driver v1.11\n";
+static int tlan_have_pci = 0;
+static int tlan_have_eisa = 0;
 
 const char *media[] = {
        "10BaseT-HD ", "10BaseT-FD ","100baseTx-HD ", 
@@ -153,103+190,73 @@ const char *media[] = {
 
 int media_map[] = { 0x0020, 0x0040, 0x0080, 0x0100, 0x0200,};
 
-static TLanAdapterEntry TLanAdapterList[] __initdata = {
-       { PCI_VENDOR_ID_COMPAQ, 
-         PCI_DEVICE_ID_NETELLIGENT_10,
-         "Compaq Netelligent 10 T PCI UTP",
-         TLAN_ADAPTER_ACTIVITY_LED,
-         0x83
-       },
-       { PCI_VENDOR_ID_COMPAQ,
-         PCI_DEVICE_ID_NETELLIGENT_10_100,
-         "Compaq Netelligent 10/100 TX PCI UTP",
-         TLAN_ADAPTER_ACTIVITY_LED,
-         0x83
-       }, 
-       { PCI_VENDOR_ID_COMPAQ,
-         PCI_DEVICE_ID_NETFLEX_3P_INTEGRATED,
-         "Compaq Integrated NetFlex-3/P",
-         TLAN_ADAPTER_NONE,
-         0x83
-       }, 
-       { PCI_VENDOR_ID_COMPAQ,
-         PCI_DEVICE_ID_NETFLEX_3P,
-         "Compaq NetFlex-3/P",
-         TLAN_ADAPTER_UNMANAGED_PHY | TLAN_ADAPTER_BIT_RATE_PHY,
-         0x83
-       },
-       { PCI_VENDOR_ID_COMPAQ,
-         PCI_DEVICE_ID_NETFLEX_3P_BNC,
-         "Compaq NetFlex-3/P",
-         TLAN_ADAPTER_NONE,
-         0x83
-       },
-       { PCI_VENDOR_ID_COMPAQ,
-         PCI_DEVICE_ID_NETELLIGENT_10_100_PROLIANT,
-         "Compaq Netelligent Integrated 10/100 TX UTP",
-         TLAN_ADAPTER_ACTIVITY_LED,
-         0x83
-       },
-       { PCI_VENDOR_ID_COMPAQ,
-         PCI_DEVICE_ID_NETELLIGENT_10_100_DUAL,
-         "Compaq Netelligent Dual 10/100 TX PCI UTP",
-         TLAN_ADAPTER_NONE,
-         0x83
-       },
-       { PCI_VENDOR_ID_COMPAQ,
-         PCI_DEVICE_ID_DESKPRO_4000_5233MMX,
-         "Compaq Netelligent 10/100 TX Embedded UTP",
-         TLAN_ADAPTER_NONE,
-         0x83
-       },
-       { PCI_VENDOR_ID_OLICOM,
-         PCI_DEVICE_ID_OLICOM_OC2183,
-         "Olicom OC-2183/2185",
-         TLAN_ADAPTER_USE_INTERN_10,
-         0xF8
-       },
-       { PCI_VENDOR_ID_OLICOM,
-         PCI_DEVICE_ID_OLICOM_OC2325,
-         "Olicom OC-2325",
-         TLAN_ADAPTER_UNMANAGED_PHY,
-         0xF8
-       },
-       { PCI_VENDOR_ID_OLICOM,
-         PCI_DEVICE_ID_OLICOM_OC2326,
-         "Olicom OC-2326",
-         TLAN_ADAPTER_USE_INTERN_10,
-         0xF8
-       },
-       { PCI_VENDOR_ID_COMPAQ,
-         PCI_DEVICE_ID_NETELLIGENT_10_100_WS_5100,
-         "Compaq Netelligent 10/100 TX UTP",
-         TLAN_ADAPTER_ACTIVITY_LED,
-         0x83
-       },
-       { PCI_VENDOR_ID_COMPAQ,
-         PCI_DEVICE_ID_NETELLIGENT_10_T2,
-         "Compaq Netelligent 10 T/2 PCI UTP/Coax",
-         TLAN_ADAPTER_NONE,
-         0x83
-       },
-       { 0,
-         0,
-         NULL,
-         0,
-         0
-       } /* End of List */
+static struct board {
+       const char      *deviceLabel;
+       u32             flags;
+       u16             addrOfs;
+} board_info[] __devinitdata = {
+       { "Compaq Netelligent 10 T PCI UTP", TLAN_ADAPTER_ACTIVITY_LED, 0x83 },
+       { "Compaq Netelligent 10/100 TX PCI UTP", TLAN_ADAPTER_ACTIVITY_LED, 0x83 },
+       { "Compaq Integrated NetFlex-3/P", TLAN_ADAPTER_NONE, 0x83 },
+       { "Compaq NetFlex-3/P", TLAN_ADAPTER_UNMANAGED_PHY | TLAN_ADAPTER_BIT_RATE_PHY, 0x83 },
+       { "Compaq NetFlex-3/P", TLAN_ADAPTER_NONE, 0x83 },
+       { "Compaq Netelligent Integrated 10/100 TX UTP", TLAN_ADAPTER_ACTIVITY_LED, 0x83 },
+       { "Compaq Netelligent Dual 10/100 TX PCI UTP", TLAN_ADAPTER_NONE, 0x83 },
+       { "Compaq Netelligent 10/100 TX Embedded UTP", TLAN_ADAPTER_NONE, 0x83 },
+       { "Olicom OC-2183/2185", TLAN_ADAPTER_USE_INTERN_10, 0x83 },
+       { "Olicom OC-2325", TLAN_ADAPTER_UNMANAGED_PHY, 0xF8 },
+       { "Olicom OC-2326", TLAN_ADAPTER_USE_INTERN_10, 0xF8 },
+       { "Compaq Netelligent 10/100 TX UTP", TLAN_ADAPTER_ACTIVITY_LED, 0x83 },
+       { "Compaq Netelligent 10 T/2 PCI UTP/Coax", TLAN_ADAPTER_NONE, 0x83 },
+       { "Compaq NetFlex-3/E", TLAN_ADAPTER_ACTIVITY_LED |     /* EISA card */
+                               TLAN_ADAPTER_UNMANAGED_PHY | TLAN_ADAPTER_BIT_RATE_PHY, 0x83 }, 
+       { "Compaq NetFlex-3/E", TLAN_ADAPTER_ACTIVITY_LED, 0x83 }, /* EISA card */
 };
 
+static struct pci_device_id tlan_pci_tbl[] __devinitdata = {
+       { PCI_VENDOR_ID_COMPAQ, PCI_DEVICE_ID_NETELLIGENT_10,
+               PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 },
+       { PCI_VENDOR_ID_COMPAQ, PCI_DEVICE_ID_NETELLIGENT_10_100,
+               PCI_ANY_ID, PCI_ANY_ID, 0, 0, 1 },
+       { PCI_VENDOR_ID_COMPAQ, PCI_DEVICE_ID_NETFLEX_3P_INTEGRATED,
+               PCI_ANY_ID, PCI_ANY_ID, 0, 0, 2 },
+       { PCI_VENDOR_ID_COMPAQ, PCI_DEVICE_ID_NETFLEX_3P,
+               PCI_ANY_ID, PCI_ANY_ID, 0, 0, 3 },
+       { PCI_VENDOR_ID_COMPAQ, PCI_DEVICE_ID_NETFLEX_3P_BNC,
+               PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4 },
+       { PCI_VENDOR_ID_COMPAQ, PCI_DEVICE_ID_NETELLIGENT_10_100_PROLIANT,
+               PCI_ANY_ID, PCI_ANY_ID, 0, 0, 5 },
+       { PCI_VENDOR_ID_COMPAQ, PCI_DEVICE_ID_NETELLIGENT_10_100_DUAL,
+               PCI_ANY_ID, PCI_ANY_ID, 0, 0, 6 },
+       { PCI_VENDOR_ID_COMPAQ, PCI_DEVICE_ID_DESKPRO_4000_5233MMX,
+               PCI_ANY_ID, PCI_ANY_ID, 0, 0, 7 },
+       { PCI_VENDOR_ID_OLICOM, PCI_DEVICE_ID_OLICOM_OC2183,
+               PCI_ANY_ID, PCI_ANY_ID, 0, 0, 8 },
+       { PCI_VENDOR_ID_OLICOM, PCI_DEVICE_ID_OLICOM_OC2325,
+               PCI_ANY_ID, PCI_ANY_ID, 0, 0, 9 },
+       { PCI_VENDOR_ID_OLICOM, PCI_DEVICE_ID_OLICOM_OC2326,
+               PCI_ANY_ID, PCI_ANY_ID, 0, 0, 10 },
+       { PCI_VENDOR_ID_COMPAQ, PCI_DEVICE_ID_NETELLIGENT_10_100_WS_5100,
+               PCI_ANY_ID, PCI_ANY_ID, 0, 0, 11 },
+       { PCI_VENDOR_ID_COMPAQ, PCI_DEVICE_ID_NETELLIGENT_10_T2,
+               PCI_ANY_ID, PCI_ANY_ID, 0, 0, 12 },
+       { 0,}
+};
+MODULE_DEVICE_TABLE(pci, tlan_pci_tbl);                
 
-static int     TLan_PciProbe( u8 *, u8 *, u8 *, u32 *, u32 * );
+static int     TLan_EisaProbe( void );
+static void    TLan_Eisa_Cleanup( void );
 static int      TLan_Init( struct net_device * );
-static int     TLan_Open(struct net_device *dev);
-static int     TLan_StartTx(struct sk_buff *, struct net_device *);
-static void    TLan_HandleInterrupt(int, void *, struct pt_regs *);
-static int     TLan_Close(struct net_device *);
-static struct  net_device_stats *TLan_GetStats( struct net_device * );
-static void    TLan_SetMulticastList( struct net_device * );
-static int     TLan_ioctl(struct net_device *dev, struct ifreq *rq, int cmd);
+static int     TLan_Open( struct net_device *dev );
+static int     TLan_StartTx( struct sk_buff *, struct net_device *);
+static void    TLan_HandleInterrupt( int, void *, struct pt_regs *);
+static int     TLan_Close( struct net_device *);
+static struct  net_device_stats *TLan_GetStats( struct net_device *);
+static void    TLan_SetMulticastList( struct net_device *);
+static int     TLan_ioctl( struct net_device *dev, struct ifreq *rq, int cmd);
+static int      TLan_probe1( struct pci_dev *pdev, long ioaddr, int irq, int rev, const struct pci_device_id *ent);
+static void    TLan_tx_timeout( struct net_device *dev);
+static int     tlan_init_one( struct pci_dev *pdev, const struct pci_device_id *ent);
 
 static u32     TLan_HandleInvalid( struct net_device *, u16 );
 static u32     TLan_HandleTxEOF( struct net_device *, u16 );
@@ -278,7+285,10 @@ static void        TLan_PhyPowerUp( struct net_device * );
 static void    TLan_PhyReset( struct net_device * );
 static void    TLan_PhyStartLink( struct net_device * );
 static void    TLan_PhyFinishAutoNeg( struct net_device * );
-static void    TLan_PhyMonitor( struct net_device * );
+#ifdef MONITOR
+static void     TLan_PhyMonitor( struct net_device * );
+#endif
+
 /*
 static int     TLan_PhyNop( struct net_device * );
 static int     TLan_PhyInternalCheck( struct net_device * );
@@ -316,7+326,7 @@ TLan_SetTimer( struct net_device *dev, u32 ticks, u32 type )
 
        spin_lock_irqsave(&priv->lock, flags);
        if ( priv->timer.function != NULL &&
-               priv->timerType != TLAN_TIMER_ACTIVITY) {
+               priv->timerType != TLAN_TIMER_ACTIVITY ) { 
                spin_unlock_irqrestore(&priv->lock, flags);
                return;
        }
@@ -324,11+334,10 @@ TLan_SetTimer( struct net_device *dev, u32 ticks, u32 type )
        spin_unlock_irqrestore(&priv->lock, flags);
 
        priv->timer.data = (unsigned long) dev;
-       priv->timer.expires = jiffies + ticks;
        priv->timerSetAt = jiffies;
        priv->timerType = type;
-       add_timer( &priv->timer );
-
+       mod_timer(&priv->timer, jiffies + ticks);
+       
 } /* TLan_SetTimer */
 
 
@@ -344,8+353,10 @@ TLan_SetTimer( struct net_device *dev, u32 ticks, u32 type )
 
 
 
+
+
        /***************************************************************
-        *      tlan_exit
+        *      tlan_remove_one
         *
         *      Returns:
         *              Nothing
@@ -360,31+371,78 @@ TLan_SetTimer( struct net_device *dev, u32 ticks, u32 type )
         **************************************************************/
 
 
-static void __exit tlan_exit(void)
+static void __exit tlan_remove_one( struct pci_dev *pdev)
 {
-       struct net_device       *dev;
-       TLanPrivateInfo *priv;
+       struct net_device *dev = pdev->driver_data;
+       TLanPrivateInfo *priv = (TLanPrivateInfo *) dev->priv;
+       
+       unregister_netdev( dev );
 
-       while ( TLanDevicesInstalled ) {
-               dev = TLanDevices;
-               priv = (TLanPrivateInfo *) dev->priv;
-               if ( priv->dmaStorage ) {
-                       kfree( priv->dmaStorage );
-               }
-               release_region( dev->base_addr, 0x10 );
-               unregister_netdev( dev );
-               TLanDevices = priv->nextDevice;
-               kfree( dev );
-               TLanDevicesInstalled--;
+       if ( priv->dmaStorage ) {
+               kfree( priv->dmaStorage );
        }
-       kfree( TLanPadBuffer );
 
+       release_region( dev->base_addr, 0x10 );
+       
+       kfree( dev );
+               
 } 
 
+static struct pci_driver tlan_driver = {
+       name:           "tlan",
+       id_table:       tlan_pci_tbl,
+       probe:          tlan_init_one,
+       remove:         tlan_remove_one,        
+};
+
+static int __init tlan_probe(void)
+{
+       int             rc;
+       static int      pad_allocated = 0;
+       
+       printk(KERN_INFO "%s", tlan_banner);
+       
+       TLanPadBuffer = (u8 *) kmalloc(TLAN_MIN_FRAME_SIZE, 
+                                       (GFP_KERNEL | GFP_DMA));
+
+       if (TLanPadBuffer == NULL) {
+               printk(KERN_ERR "TLAN: Could not allocate memory for pad buffer.\n");
+               return -ENOMEM;
+       }
+
+       memset(TLanPadBuffer, 0, TLAN_MIN_FRAME_SIZE);
+       pad_allocated = 1;
+
+       TLAN_DBG(TLAN_DEBUG_PROBE, "Starting PCI Probe....\n");
+       
+       /* Use new style PCI probing. Now the kernel will
+          do most of this for us */
+       rc = pci_module_init(&tlan_driver);
+
+       TLAN_DBG(TLAN_DEBUG_PROBE, "Starting EISA Probe....\n");
+       rc = TLan_EisaProbe();
+               
+       printk(KERN_INFO "TLAN: %d device%s installed, PCI: %d  EISA: %d\n", 
+                TLanDevicesInstalled, TLanDevicesInstalled == 1 ? "" : "s",
+                tlan_have_pci, tlan_have_eisa);
+       
+       return ((TLanDevicesInstalled > 0) ? 0 : -ENODEV);
+
+}
+       
+
+static int __devinit tlan_init_one( struct pci_dev *pdev,
+                                   const struct pci_device_id *ent)
+{
+       return TLan_probe1( pdev, pci_resource_start(pdev, 0), pdev->irq,
+                       0, ent);
+
+}
+
 
 /*
        ***************************************************************
-        *      tlan_probe
+        *      tlan_probe1
         *
         *      Returns:
         *              0 on success, error code on error
@@ -401,197+459,250 @@ static void __exit tlan_exit(void)
         *
         **************************************************************/
 
-static int __init tlan_probe(void)
+static int __init TLan_probe1(struct pci_dev *pdev, 
+                               long ioaddr, int irq, int rev, const struct pci_device_id *ent )
 {
 
        struct net_device  *dev;
        TLanPrivateInfo    *priv;
-       static int         pad_allocated = 0;
-       u8                 dfn, irq, rev;
-       u32                io_base, index;
-       int                found;
-       
-       printk(KERN_INFO "%s", tlan_banner); 
+       u8                 pci_rev;
+       u16                device_id;
 
-       TLanPadBuffer = (u8 *) kmalloc(TLAN_MIN_FRAME_SIZE, 
-                                       (GFP_KERNEL | GFP_DMA));
-
-       if (TLanPadBuffer == NULL) {
-               printk(KERN_ERR "TLAN: Could not allocate memory for pad buffer.\n");
+       dev = init_etherdev(NULL, sizeof(TLanPrivateInfo));
+       if (dev == NULL) {
+               printk(KERN_ERR "TLAN: Could not allocate memory for device.\n");
                return -ENOMEM;
        }
-
-       memset(TLanPadBuffer, 0, TLAN_MIN_FRAME_SIZE);
-
-       while((found = TLan_PciProbe( &dfn, &irq, &rev, &io_base, &index))) {
-               dev = init_etherdev(NULL, sizeof(TLanPrivateInfo));
-               if (dev == NULL) {
-                       printk(KERN_ERR "TLAN: Could not allocate memory for device.\n");
-                       return -ENOMEM;
+       
+       priv = dev->priv;
+       memset(priv, 0, sizeof(TLanPrivateInfo));
+       
+               
+       dev->base_addr = ioaddr;
+       dev->irq = irq;
+        
+
+       /* Is this a PCI device? */
+       if (pdev) {
+               priv->adapter = &board_info[ent->driver_data];
+               if (pci_enable_device(pdev))
+                       return -1;
+               pci_read_config_byte ( pdev, PCI_REVISION_ID, &pci_rev);
+               priv->adapterRev = pci_rev; 
+               pci_set_master(pdev);
+               pdev->driver_data = dev;
+
+       } else  {     /* EISA card */
+               /* This is a hack. We need to know which board structure
+                * is suited for this adapter */
+               device_id = inw(ioaddr + EISA_ID2);
+               priv->is_eisa = 1;
+               if (device_id == 0x20F1) {
+                       priv->adapter = &board_info[13];        /* NetFlex-3/E */
+                       priv->adapterRev = 23;                  /* TLAN 2.3 */
+               } else {
+                       priv->adapter = &board_info[14];
+                       priv->adapterRev = 10;                  /* TLAN 1.0 */
                }
-               priv = dev->priv;
-               if (dev->priv == NULL) {
-                       dev->priv = kmalloc(sizeof(TLanPrivateInfo), GFP_KERNEL);
-                       priv = dev->priv;
+       }
+
+       /* Kernel parameters */
+       if (dev->mem_start) {
+               priv->aui    = dev->mem_start & 0x01;
+               priv->duplex = ((dev->mem_start & 0x06) == 0x06) ? 0 : (dev->mem_start & 0x06) >> 1;
+               priv->speed  = ((dev->mem_start & 0x18) == 0x18) ? 0 : (dev->mem_start & 0x18) >> 3;
+       
+               if (priv->speed == 0x1) {
+                       priv->speed = TLAN_SPEED_10;
+               } else if (priv->speed == 0x2) {
+                       priv->speed = TLAN_SPEED_100;
                }
-               memset(priv, 0, sizeof(TLanPrivateInfo));
-               
-               pad_allocated = 1;
-               
-               dev->base_addr = io_base;
-               dev->irq = irq;
-               priv->adapter = &TLanAdapterList[index];
-               priv->adapterRev = rev;
+               debug = priv->debug = dev->mem_end;
+       } else {
+
+               if ( ( duplex != 1 ) && ( duplex != 2 ) ) 
+                       duplex = 0;
                
+               priv->duplex = duplex;
+
+               if ( ( speed != 10 ) && ( speed != 100 ) )
+                       speed = 0;
                
-               /* Kernel parameters */
-               if (dev->mem_start) {
-                       priv->aui    = dev->mem_start & 0x01;
-                       priv->duplex = ((dev->mem_start & 0x06) == 0x06) ? 0 : (dev->mem_start & 0x06) >> 1;
-                       priv->speed  = ((dev->mem_start & 0x18) == 0x18) ? 0 : (dev->mem_start & 0x18) >> 3;
+               priv->aui   = aui;
+               priv->speed = speed;
+               priv->debug = debug;
                
-                       if (priv->speed == 0x1) {
-                               priv->speed = TLAN_SPEED_10;
-                       } else if (priv->speed == 0x2) {
-                               priv->speed = TLAN_SPEED_100;
-                       }
-                       debug = priv->debug = dev->mem_end;
-               } else {
+       }
+       
+       spin_lock_init(&priv->lock);
+       
+       if (TLan_Init(dev)) {
+               printk(KERN_ERR "TLAN: Could not register device.\n");
+               unregister_netdev(dev);
+               kfree(dev);
+               return -EAGAIN;
+       } else {
+       
+       TLanDevicesInstalled++;
+       
+       /* pdev is NULL if this is an EISA device */
+       if (pdev)
+               tlan_have_pci++;
+       else {
+               priv->nextDevice = TLan_Eisa_Devices;
+               TLan_Eisa_Devices = dev;
+               tlan_have_eisa++;
+       }
+       
+       printk(KERN_INFO "TLAN: %s irq=%2d, io=%04x, %s, Rev. %d\n",
+                       dev->name,
+                       (int) dev->irq,
+                       (int) dev->base_addr,
+                       priv->adapter->deviceLabel,
+                       priv->adapterRev);
+       return 0;
+       }
 
-                       if ( ( duplex != 1 ) && ( duplex != 2 ) ) 
-                               duplex = 0;
-                       
-                       priv->duplex = duplex;
+}
 
-                       if ( ( speed != 10 ) && ( speed != 100 ) )
-                               speed = 0;
-                       
-                       priv->aui   = aui;
-                       priv->speed = speed;
-                       priv->debug = debug;
-                       
-               }
-               
-               spin_lock_init(&priv->lock);
-               
-               if (TLan_Init(dev)) {
-                       printk(KERN_ERR "TLAN: Could not register device.\n");
-                       unregister_netdev(dev);
-                       kfree(dev);
-               } else {
-                       
-               TLanDevicesInstalled++;
-               priv->nextDevice = TLanDevices;
-               TLanDevices = dev;
-               printk(KERN_INFO "TLAN: %s irq=%2d, io=%04x, %s, Rev. %d\n",
-                               dev->name,
-                               (int) dev->irq,
-                               (int) dev->base_addr,
-                               priv->adapter->deviceLabel,
-                               priv->adapterRev);
-               }
 
-       }
+static void TLan_Eisa_Cleanup(void)
+{
+       struct net_device *dev;
+       TLanPrivateInfo *priv;
        
-       printk(KERN_INFO "TLAN: %d device%s installed\n", 
-                TLanDevicesInstalled, TLanDevicesInstalled == 1 ? "" : "s");
+       while( tlan_have_eisa ) {
+               dev = TLan_Eisa_Devices;
+               priv = (TLanPrivateInfo *) dev->priv;
+               if (priv->dmaStorage) {
+                       kfree(priv->dmaStorage);
+               }
+               release_region( dev->base_addr, 0x10);
+               unregister_netdev( dev );
+               TLan_Eisa_Devices = priv->nextDevice;
+               kfree( dev );
+               tlan_have_eisa--;
+       }
+}
        
-       return ((TLanDevicesInstalled > 0) ? 0 : -ENODEV);
+               
+static void __exit tlan_exit(void)
+{
+       if (tlan_have_pci)
+               pci_unregister_driver(&tlan_driver);
+
+       if (tlan_have_eisa)
+               TLan_Eisa_Cleanup();
+
+       kfree( TLanPadBuffer );
+
 }
 
+
 /* Module loading/unloading */
 module_init(tlan_probe);
 module_exit(tlan_exit);
 
 
 
-       /***************************************************************
-        *      TLan_PciProbe
+       /**************************************************************
+        *      TLan_EisaProbe
         *
-        *      Returns:
-        *              1 if another TLAN card was found, 0 if not.
-        *      Parms:
-        *              pci_dfn         The PCI whatever the card was
-        *                              found at.
-        *              pci_irq         The IRQ of the found adapter.
-        *              pci_rev         The revision of the adapter.
-        *              pci_io_base     The first IO port used by the
-        *                              adapter.
-        *              dl_ix           The index in the device list
-        *                              of the adapter.
-        *
-        *      This function searches for an adapter with PCI vendor
-        *      and device IDs matching those in the TLanAdapterList.
-        *      The function 'remembers' the last device it found,
-        *      and so finds a new device (if anymore are to be found)
-        *      each time the function is called.  It then looks up
-        *      pertinent PCI info and returns it to the caller.
+        *      Returns: 0 on success, 1 otherwise
         *
-        **************************************************************/
+        *      Parms:   None
+        *
+        *
+        *      This functions probes for EISA devices and calls 
+        *      TLan_probe1 when one is found. 
+        *
+        *************************************************************/
 
-static int __init TLan_PciProbe(u8 *pci_dfn, u8 *pci_irq, u8 *pci_rev, u32 *pci_io_base, u32 *dl_ix )
+static int __init TLan_EisaProbe (void) 
 {
-       static int dl_index = 0;
-       static struct pci_dev * pdev = NULL;
-       u16     pci_command;
-       int     reg;
-
-
-       for (; TLanAdapterList[dl_index].vendorId != 0; dl_index++) {
+       long    ioaddr;
+       int     rc = -ENODEV;
+       int     irq;
+       u16     device_id;
 
-               pdev = pci_find_device(
-                       TLanAdapterList[dl_index].vendorId,
-                       TLanAdapterList[dl_index].deviceId, pdev);
-
-               if ( pdev ) {
-
-                       TLAN_DBG(
-                               TLAN_DEBUG_GNRL,
-                               "found: Vendor Id = 0x%hx, Device Id = 0x%hx\n",
-                               TLanAdapterList[dl_index].vendorId,
-                               TLanAdapterList[dl_index].deviceId
-                       );
-
-                       if (pci_enable_device(pdev))
-                               continue;
-                       
-                       *pci_irq = pdev->irq;
-                       *pci_io_base = pci_resource_start (pdev, 0);
-                       *pci_dfn = pdev->devfn;
-                       pci_read_config_byte ( pdev, PCI_REVISION_ID, pci_rev);
-                       pci_read_config_word ( pdev,  PCI_COMMAND, &pci_command);
-
-                       for ( reg = PCI_BASE_ADDRESS_0; reg <= PCI_BASE_ADDRESS_5; reg +=4 ) {
-                               pci_read_config_dword( pdev, reg, pci_io_base);
-                               if ((pci_command & PCI_COMMAND_IO) && (*pci_io_base & 0x3)) {
-                                       *pci_io_base &= PCI_BASE_ADDRESS_IO_MASK;
-                                       TLAN_DBG( TLAN_DEBUG_GNRL, "IO mapping is available at %x.\n", *pci_io_base);
-                                       break;
-                               } else {
-                                       *pci_io_base = 0;
-                               }
-                       }
+       if (!EISA_bus) {        
+               TLAN_DBG(TLAN_DEBUG_PROBE, "No EISA bus present\n");
+               return 0;
+       }
+       
+       /* Loop through all slots of the EISA bus */
+       for (ioaddr = 0x1000; ioaddr < 0x9000; ioaddr += 0x1000) {
+               
+       TLAN_DBG(TLAN_DEBUG_PROBE,"EISA_ID 0x%4x: 0x%4x\n", (int) ioaddr + 0xC80, inw(ioaddr + EISA_ID));       
+       TLAN_DBG(TLAN_DEBUG_PROBE,"EISA_ID 0x%4x: 0x%4x\n", (int) ioaddr + 0xC82, inw(ioaddr + EISA_ID2));
 
-                       if ( *pci_io_base == 0 )
-                               printk(KERN_INFO "TLAN:    IO mapping not available, ignoring device.\n");
 
-                       pci_set_master(pdev);
+               TLAN_DBG(TLAN_DEBUG_PROBE, "Probing for EISA adapter at IO: 0x%4x : ",
+                                       (int) ioaddr);
+               if (request_region(ioaddr, 0x10, TLanSignature) == NULL) 
+                       goto out;
 
-                       if ( *pci_io_base ) {
-                               *dl_ix = dl_index;
-                               return 1;
-                       }
-
-               } else {
-                       pdev = NULL;
+               if (inw(ioaddr + EISA_ID) != 0x110E) {          
+                       release_region(ioaddr, 0x10);
+                       goto out;
+               }
+               
+               device_id = inw(ioaddr + EISA_ID2);
+               if (device_id !=  0x20F1 && device_id != 0x40F1) {              
+                       release_region (ioaddr, 0x10);
+                       goto out;
+               }
+               
+               if (inb(ioaddr + EISA_CR) != 0x1) {     /* Check if adapter is enabled */
+                       release_region (ioaddr, 0x10);
+                       goto out2;
                }
+               
+               if (debug == 0x10)              
+                       printk("Found one\n");
+
+
+               /* Get irq from board */
+               switch (inb(ioaddr + 0xCC0)) {
+                       case(0x10):
+                               irq=5;
+                               break;
+                       case(0x20):
+                               irq=9;
+                               break;
+                       case(0x40):
+                               irq=10;
+                               break;
+                       case(0x80):
+                               irq=11;
+                               break;
+                       default:
+                               goto out;
+               }               
+               
+               
+               /* Setup the newly found eisa adapter */
+               rc = TLan_probe1( NULL, ioaddr, irq,
+                                       12, NULL);
+               continue;
+               
+               out:
+                       if (debug == 0x10)
+                               printk("None found\n");
+                       continue;
+
+               out2:   if (debug == 0x10)
+                               printk("Card found but it is not enabled, skipping\n");
+                       continue;
+               
        }
 
-       return 0;
+       return rc;
 
-} /* TLan_PciProbe */
+} /* TLan_EisaProbe */
 
 
+       
 
 
        /***************************************************************
@@ -620,14+731,14 @@ static int TLan_Init( struct net_device *dev )
 
        priv = (TLanPrivateInfo *) dev->priv;
        
-       if (!request_region( dev->base_addr, 0x10, TLanSignature )) {
-               printk(KERN_ERR "TLAN: %s: Io port region 0x%lx size 0x%x in use.\n",
-                       dev->name,
-                       dev->base_addr,
-                       0x10 );
-               return -EIO;
-       }
-       
+       if (!priv->is_eisa)     /* EISA devices have already requested IO */
+               if (!request_region( dev->base_addr, 0x10, TLanSignature )) {
+                       printk(KERN_ERR "TLAN: %s: IO port region 0x%lx size 0x%x in use.\n",
+                               dev->name,
+                               dev->base_addr,
+                               0x10 );
+                       return -EIO;
+               }
        
        if ( bbuf ) {
                dma_size = ( TLAN_NUM_RX_LISTS + TLAN_NUM_TX_LISTS )
@@ -658,7+769,7 @@ static int TLan_Init( struct net_device *dev )
                                        (u8) priv->adapter->addrOfs + i,
                                        (u8 *) &dev->dev_addr[i] );
        if ( err ) {
-               printk(KERN_ERR "TLAN:  %s: Error reading MAC from eeprom: %d\n",
+               printk(KERN_ERR "TLAN: %s: Error reading MAC from eeprom: %d\n",
                        dev->name,
                        err );
        }
@@ -671,6+782,8 @@ static int TLan_Init( struct net_device *dev )
        dev->get_stats = &TLan_GetStats;
        dev->set_multicast_list = &TLan_SetMulticastList;
        dev->do_ioctl = &TLan_ioctl;
+       dev->tx_timeout = &TLan_tx_timeout;
+       dev->watchdog_timeo = TX_TIMEOUT;
 
        return 0;
 
@@ -709,9+822,10 @@ static int TLan_Open( struct net_device *dev )
        if ( err ) {
                printk(KERN_ERR "TLAN:  Cannot open %s because IRQ %d is already in use.\n", dev->name, dev->irq );
                MOD_DEC_USE_COUNT;
-               return err;
+               return -EAGAIN;
        }
        
+       init_timer(&priv->timer);
        netif_start_queue(dev);
        
        /* NOTE: It might not be necessary to read the stats before a
@@ -772,6+886,33 @@ static int TLan_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
 } /* tlan_ioctl */
 
 
+       /***************************************************************
+        *      TLan_tx_timeout
+        *
+        *      Returns: nothing
+        *
+        *      Params:
+        *              dev     structure of device which timed out 
+        *                      during transmit.
+        *
+        **************************************************************/
+
+static void TLan_tx_timeout(struct net_device *dev)
+{
+       //TLanPrivateInfo *priv = (TLanPrivateInfo *) dev->priv;
+       
+       TLAN_DBG( TLAN_DEBUG_GNRL, "%s: Transmit timed out.\n", dev->name);
+       
+       /* Ok so we timed out, lets see what we can do about it...*/
+       TLan_ResetLists( dev );         
+       TLan_ReadAndClearStats( dev, TLAN_IGNORE );
+       TLan_ResetAdapter( dev );
+       dev->trans_start = jiffies;
+       netif_start_queue( dev );       
+
+}
+       
+
 
        /***************************************************************
         *      TLan_StartTx
@@ -953,6+1094,7 @@ static int TLan_Close(struct net_device *dev)
                del_timer_sync( &priv->timer );
                priv->timer.function = NULL;
        }
+       
        free_irq( dev->irq, dev );
        TLan_FreeLists( dev );
        TLAN_DBG( TLAN_DEBUG_GNRL, "Device %s closed.\n", dev->name );
@@ -993,7+1135,7 @@ static struct net_device_stats *TLan_GetStats( struct net_device *dev )
        TLAN_DBG( TLAN_DEBUG_TX, "TRANSMIT:  %s Busy count = %d\n", dev->name, priv->txBusyCount );
        if ( debug & TLAN_DEBUG_GNRL ) {
                TLan_PrintDio( dev->base_addr );
-               TLan_PhyPrint( dev );
+               TLan_PhyPrint( dev );           
        }
        if ( debug & TLAN_DEBUG_LIST ) {
                for ( i = 0; i < TLAN_NUM_RX_LISTS; i++ )
@@ -1495,7+1637,7 @@ u32 TLan_HandleStatusCheck( struct net_device *dev, u16 host_int )
                        }
 
                        if (debug) {
-                               TLan_PhyPrint( dev );
+                               TLan_PhyPrint( dev );           
                        }
                }
        }
@@ -1598,9+1740,11 @@ void TLan_Timer( unsigned long data )
        priv->timer.function = NULL;
 
        switch ( priv->timerType ) {
+#ifdef MONITOR         
                case TLAN_TIMER_LINK_BEAT:
                        TLan_PhyMonitor( dev );
                        break;
+#endif
                case TLAN_TIMER_PHY_PDOWN:
                        TLan_PhyPowerDown( dev );
                        break;
@@ -2007,6+2151,7 @@ TLan_FinishReset( struct net_device *dev )
        u16             partner;
        u16             tlphy_ctl;
        u16             tlphy_par;
+       u16             tlphy_id1, tlphy_id2;
        int             i;
 
        phy = priv->phy[priv->phyNum];
@@ -2022,7+2167,9 @@ TLan_FinishReset( struct net_device *dev )
        }
        TLan_DioWrite8( dev->base_addr, TLAN_NET_MASK, data );
        TLan_DioWrite16( dev->base_addr, TLAN_MAX_RX, TLAN_MAX_FRAME_SIZE );
-
+       TLan_MiiReadReg( dev, phy, MII_GEN_ID_HI, &tlphy_id1 );
+       TLan_MiiReadReg( dev, phy, MII_GEN_ID_LO, &tlphy_id2 );
+       
        if ( ( priv->adapter->flags & TLAN_ADAPTER_UNMANAGED_PHY ) || ( priv->aui ) ) {
                status = MII_GS_LINK;
                printk( "TLAN:  %s: Link forced.\n", dev->name );
@@ -2030,7+2177,9 @@ TLan_FinishReset( struct net_device *dev )
                TLan_MiiReadReg( dev, phy, MII_GEN_STS, &status );
                udelay( 1000 );
                TLan_MiiReadReg( dev, phy, MII_GEN_STS, &status );
-               if ( status & MII_GS_LINK ) {
+               if ( (status & MII_GS_LINK) &&   /* We only support link info on Nat.Sem. PHY's */ 
+                       (tlphy_id1 == NAT_SEM_ID1) &&
+                       (tlphy_id2 == NAT_SEM_ID2) ) {
                        TLan_MiiReadReg( dev, phy, MII_AN_LPA, &partner );
                        TLan_MiiReadReg( dev, phy, TLAN_TLPHY_PAR, &tlphy_par );
                        
@@ -2043,7+2192,6 @@ TLan_FinishReset( struct net_device *dev )
                                printk( "AutoNegotiation enabled, at 10%sMbps %s-Duplex\n",
                                                tlphy_par & TLAN_PHY_SPEED_100 ? "" : "0",
                                                tlphy_par & TLAN_PHY_DUPLEX_FULL ? "Full" : "Half");
-
                                printk("TLAN: Partner capability: ");
                                        for (i = 5; i <= 10; i++)
                                                if (partner & (1<<i))
@@ -2052,12+2200,15 @@ TLan_FinishReset( struct net_device *dev )
                        }
 
                        TLan_DioWrite8( dev->base_addr, TLAN_LED_REG, TLAN_LED_LINK );
-                       
+#ifdef MONITOR                 
                        /* We have link beat..for now anyway */
-                       priv->link = 1;
-                       /*Enabling link beat monitoring */
+                       priv->link = 1;
+                       /*Enabling link beat monitoring */
                        TLan_SetTimer( dev, (10*HZ), TLAN_TIMER_LINK_BEAT );
-
+#endif 
+               } else if (status & MII_GS_LINK)  {
+                       printk( "TLAN: %s: Link active\n", dev->name );
+                       TLan_DioWrite8( dev->base_addr, TLAN_LED_REG, TLAN_LED_LINK );
                }
        }
 
@@ -2074,13+2225,12 @@ TLan_FinishReset( struct net_device *dev )
                TLan_SetMac( dev, 0, dev->dev_addr );
                priv->phyOnline = 1;
                outb( ( TLAN_HC_INT_ON >> 8 ), dev->base_addr + TLAN_HOST_CMD + 1 );
-               if ( debug >= 1 ) {
+               if ( debug >= 1 && debug != TLAN_DEBUG_PROBE ) {
                        outb( ( TLAN_HC_REQ_INT >> 8 ), dev->base_addr + TLAN_HOST_CMD + 1 );
                }
                outl( virt_to_bus( priv->rxList ), dev->base_addr + TLAN_CH_PARM );
                outl( TLAN_HC_GO | TLAN_HC_RT, dev->base_addr + TLAN_HOST_CMD );
-
-               } else {
+       } else {
                printk( "TLAN: %s: Link inactive, will retry in 10 secs...\n", dev->name );
                TLan_SetTimer( dev, (10*HZ), TLAN_TIMER_FINISH_RESET );
                return;
@@ -2217,7+2367,7 @@ void TLan_PhyDetect( struct net_device *dev )
        }
 
        TLan_MiiReadReg( dev, TLAN_PHY_MAX_ADDR, MII_GEN_ID_HI, &hi );
-
+       
        if ( hi != 0xFFFF ) {
                priv->phy[0] = TLAN_PHY_MAX_ADDR;
        } else {
@@ -2289,7+2439,7 @@ void TLan_PhyPowerUp( struct net_device *dev )
         * tranceiver.  The TLAN docs say both 50 ms and
         * 500 ms, so do the longer, just in case.
         */
-       TLan_SetTimer( dev, (HZ/2), TLAN_TIMER_PHY_RESET );
+       TLan_SetTimer( dev, (HZ/20), TLAN_TIMER_PHY_RESET );
 
 } /* TLan_PhyPowerUp */
 
@@ -2338,24+2488,24 @@ void TLan_PhyStartLink( struct net_device *dev )
        TLAN_DBG( TLAN_DEBUG_GNRL, "%s: Trying to activate link.\n", dev->name );
        TLan_MiiReadReg( dev, phy, MII_GEN_STS, &status );
        TLan_MiiReadReg( dev, phy, MII_GEN_STS, &ability );
+
        if ( ( status & MII_GS_AUTONEG ) && 
             ( ! priv->aui ) ) {
-
                ability = status >> 11;
                if ( priv->speed  == TLAN_SPEED_10 && 
                     priv->duplex == TLAN_DUPLEX_HALF) {
                        TLan_MiiWriteReg( dev, phy, MII_GEN_CTL, 0x0000);
                } else if ( priv->speed == TLAN_SPEED_10 &&
                            priv->duplex == TLAN_DUPLEX_FULL) {
-                           priv->tlanFullDuplex = TRUE;
-                           TLan_MiiWriteReg( dev, phy, MII_GEN_CTL, 0x0100);
+                       priv->tlanFullDuplex = TRUE;
+                       TLan_MiiWriteReg( dev, phy, MII_GEN_CTL, 0x0100);
                } else if ( priv->speed == TLAN_SPEED_100 &&
                            priv->duplex == TLAN_DUPLEX_HALF) {
-                           TLan_MiiWriteReg( dev, phy, MII_GEN_CTL, 0x2000);
+                       TLan_MiiWriteReg( dev, phy, MII_GEN_CTL, 0x2000);
                } else if ( priv->speed == TLAN_SPEED_100 &&
                            priv->duplex == TLAN_DUPLEX_FULL) {
-                           priv->tlanFullDuplex = TRUE;
-                           TLan_MiiWriteReg( dev, phy, MII_GEN_CTL, 0x2100);
+                       priv->tlanFullDuplex = TRUE;
+                       TLan_MiiWriteReg( dev, phy, MII_GEN_CTL, 0x2100);
                } else {
        
                        /* Set Auto-Neg advertisement */
@@ -2370,7+2520,7 @@ void TLan_PhyStartLink( struct net_device *dev )
                        * .5 sec should be plenty extra.
                        */
                        printk( "TLAN: %s: Starting autonegotiation.\n", dev->name );
-                       TLan_SetTimer( dev, (4*HZ), TLAN_TIMER_PHY_FINISH_AN );
+                       TLan_SetTimer( dev, (2*HZ), TLAN_TIMER_PHY_FINISH_AN );
                        return;
                }
                
@@ -2404,7+2554,7 @@ void TLan_PhyStartLink( struct net_device *dev )
        /* Wait for 2 sec to give the tranceiver time
         * to establish link.
         */
-       TLan_SetTimer( dev, (2*HZ), TLAN_TIMER_FINISH_RESET );
+       TLan_SetTimer( dev, (4*HZ), TLAN_TIMER_FINISH_RESET );
 
 } /* TLan_PhyStartLink */
 
@@ -2424,6+2574,9 @@ void TLan_PhyFinishAutoNeg( struct net_device *dev )
        phy = priv->phy[priv->phyNum];
 
        TLan_MiiReadReg( dev, phy, MII_GEN_STS, &status );
+       udelay( 1000 );
+       TLan_MiiReadReg( dev, phy, MII_GEN_STS, &status );
+
        if ( ! ( status & MII_GS_AUTOCMPLT ) ) {
                /* Wait for 8 sec to give the process
                 * more time.  Perhaps we should fail after a while.
@@ -2438,9+2591,9 @@ void TLan_PhyFinishAutoNeg( struct net_device *dev )
        TLan_MiiReadReg( dev, phy, MII_AN_LPA, &an_lpa );
        mode = an_adv & an_lpa & 0x03E0;
        if ( mode & 0x0100 ) {
-               priv->tlanFullDuplex = TRUE;    
+               priv->tlanFullDuplex = TRUE;
        } else if ( ! ( mode & 0x0080 ) && ( mode & 0x0040 ) ) {
-               priv->tlanFullDuplex = TRUE;    
+               priv->tlanFullDuplex = TRUE;
        }
 
        if ( ( ! ( mode & 0x0180 ) ) && ( priv->adapter->flags & TLAN_ADAPTER_USE_INTERN_10 ) && ( priv->phyNum != 0 ) ) {
@@ -2467,62+2620,61 @@ void TLan_PhyFinishAutoNeg( struct net_device *dev )
                
 } /* TLan_PhyFinishAutoNeg */
 
-
-
-
-       /*********************************************************************
-        *
-        *      TLan_PhyMonitor
-        *
-        *      Returns: 
-        *              None
-        *
-        *      Params:
-        *              dev             The device structure of this device.
-        *
-        *      
-        *      This function monitors PHY condition by reading the status
-        *      register via the MII bus. This can be used to give info
-        *      about link changes (up/down), and possible switch to alternate
-        *      media.
-        *
-        * ******************************************************************/
-
-void TLan_PhyMonitor( struct net_device *dev )
+#ifdef MONITOR
+
+        /*********************************************************************
+        *
+        *      TLan_phyMonitor
+        *
+        *      Returns: 
+        *              None
+        *
+        *      Params:
+        *              dev             The device structure of this device.
+        *
+        *      
+        *      This function monitors PHY condition by reading the status
+        *      register via the MII bus. This can be used to give info
+        *      about link changes (up/down), and possible switch to alternate
+        *      media.
+        *
+        * ******************************************************************/
+
+void TLan_PhyMonitor( struct net_device *data )
 {
+       struct net_device *dev = (struct net_device *)data;
        TLanPrivateInfo *priv = (TLanPrivateInfo *) dev->priv;
-       u16     phy;
-       u16     phy_status;
+       u16     phy;
+       u16     phy_status;
 
        phy = priv->phy[priv->phyNum];
 
-       /* Get PHY status register */
-       TLan_MiiReadReg( dev, phy, MII_GEN_STS, &phy_status );
-
-       /* Check if link has been lost */
-       if (!(phy_status & MII_GS_LINK)) { 
-               if (priv->link) {
-                       priv->link = 0;
-                       printk(KERN_DEBUG "TLAN: %s has lost link\n", dev->name);
-                       dev->flags &= ~IFF_RUNNING;
-                       TLan_SetTimer( dev, (2*HZ), TLAN_TIMER_LINK_BEAT );
-                       return;
+        /* Get PHY status register */
+        TLan_MiiReadReg( dev, phy, MII_GEN_STS, &phy_status );
+
+        /* Check if link has been lost */
+        if (!(phy_status & MII_GS_LINK)) { 
+              if (priv->link) {
+                     priv->link = 0;
+                     printk(KERN_DEBUG "TLAN: %s has lost link\n", dev->name);
+                     dev->flags &= ~IFF_RUNNING;
+                     TLan_SetTimer( dev, (2*HZ), TLAN_TIMER_LINK_BEAT );
+                     return;
                }
        }
 
-       /* Link restablished? */
-       if ((phy_status & MII_GS_LINK) && !priv->link) {
-               priv->link = 1;
-               printk(KERN_DEBUG "TLAN: %s has reestablished link\n", dev->name);
-               dev->flags |= IFF_RUNNING;
-               TLan_SetTimer( dev, (2*HZ), TLAN_TIMER_LINK_BEAT );
-       }
+        /* Link restablished? */
+        if ((phy_status & MII_GS_LINK) && !priv->link) {
+               priv->link = 1;
+               printk(KERN_DEBUG "TLAN: %s has reestablished link\n", dev->name);
+               dev->flags |= IFF_RUNNING;
+        }
 
        /* Setup a new monitor */
        TLan_SetTimer( dev, (2*HZ), TLAN_TIMER_LINK_BEAT );
+}      
 
-}
-       
+#endif /* MONITOR */
 
 
 /*****************************************************************************
@@ -2996,4+3148,3 @@ fail:
 
 
 
-
index 1d032f4..deb96db 100644 (file)
 #define TLAN_DEBUG_TX          0x0002
 #define TLAN_DEBUG_RX          0x0004 
 #define TLAN_DEBUG_LIST                0x0008
+#define TLAN_DEBUG_PROBE       0x0010
 
+#define TX_TIMEOUT             (10*HZ)  /* We need time for auto-neg */
 
 
 
@@ -103,6+105,24 @@ typedef struct tlan_adapter_entry {
 
 
 
+       /*****************************************************************
+        * EISA Definitions
+        *
+        ****************************************************************/
+
+#define EISA_ID      0xc80   /* EISA ID Registers */ 
+#define EISA_ID0     0xc80   /* EISA ID Register 0 */ 
+#define EISA_ID1     0xc81   /* EISA ID Register 1 */ 
+#define EISA_ID2     0xc82   /* EISA ID Register 2 */ 
+#define EISA_ID3     0xc83   /* EISA ID Register 3 */ 
+#define EISA_CR      0xc84   /* EISA Control Register */
+#define EISA_REG0    0xc88   /* EISA Configuration Register 0 */
+#define EISA_REG1    0xc89   /* EISA Configuration Register 1 */
+#define EISA_REG2    0xc8a   /* EISA Configuration Register 2 */
+#define EISA_REG3    0xc8f   /* EISA Configuration Register 3 */
+#define EISA_APROM   0xc90   /* Ethernet Address PROM */
+
+
 
        /*****************************************************************
         * Rx/Tx List Definitions
@@ -156,7+176,7 @@ typedef u8 TLanBuffer[TLAN_MAX_FRAME_SIZE];
         ****************************************************************/
 
 typedef struct tlan_private_tag {
-       struct net_device           *nextDevice;
+       struct net_device       *nextDevice;
        void                    *dmaStorage;
        u8                      *padBuffer;
        TLanList                *rxList;
@@ -175,7+195,7 @@ typedef struct tlan_private_tag {
        u32                     timerType;
        struct timer_list       timer;
        struct net_device_stats stats;
-       TLanAdapterEntry        *adapter;
+       struct board            *adapter;
        u32                     adapterRev;
        u32                     aui;
        u32                     debug;
@@ -188,6+208,7 @@ typedef struct tlan_private_tag {
        char                    devName[8];
        spinlock_t              lock;
        u8                      link;
+       u8                      is_eisa;
 } TLanPrivateInfo;
 
 
@@ -382,9+403,9 @@ typedef struct tlan_private_tag {
 #define        MII_GIL_OUI             0xFC00
 #define        MII_GIL_MODEL           0x03F0
 #define        MII_GIL_REVISION        0x000F
-#define MII_AN_ADV                     0x0004
-#define MII_AN_LPA                     0x0005
-#define MII_AN_EXP                     0x0006
+#define MII_AN_ADV                     0x04
+#define MII_AN_LPA                     0x05
+#define MII_AN_EXP                     0x06
 
 /* ThunderLAN Specific MII/PHY Registers */
 
@@ -411,6+432,12 @@ typedef struct tlan_private_tag {
 #define                TLAN_PHY_DUPLEX_FULL    0x0080
 #define                TLAN_PHY_AN_EN_STAT     0x0400
 
+/* National Sem. & Level1 PHY id's */
+#define NAT_SEM_ID1                    0x2000
+#define NAT_SEM_ID2                    0x5C01
+#define LEVEL1_ID1                     0x7810
+#define LEVEL1_ID2                     0x0000
+
 #define CIRC_INC( a, b ) if ( ++a >= b ) a = 0
 
 /* Routines to access internal registers. */
index 1a11b1b..30ab655 100644 (file)
@@ -173,37+173,29 @@ static inline void wv_16_on(unsigned long ioaddr, u16 hacr)
 /*------------------------------------------------------------------*/
 /*
  * Disable interrupts on the WaveLAN hardware.
+ * (called by wv_82586_stop())
  */
 static inline void wv_ints_off(device * dev)
 {
        net_local *lp = (net_local *) dev->priv;
        unsigned long ioaddr = dev->base_addr;
-       unsigned long flags;
-
-       wv_splhi(lp, &flags);
        
        lp->hacr &= ~HACR_INTRON;
        hacr_write(ioaddr, lp->hacr);
-
-       wv_splx(lp, &flags);
 }                              /* wv_ints_off */
 
 /*------------------------------------------------------------------*/
 /*
  * Enable interrupts on the WaveLAN hardware.
+ * (called by wv_hw_reset())
  */
 static inline void wv_ints_on(device * dev)
 {
        net_local *lp = (net_local *) dev->priv;
        unsigned long ioaddr = dev->base_addr;
-       unsigned long flags;
-
-       wv_splhi(lp, &flags);
 
        lp->hacr |= HACR_INTRON;
        hacr_write(ioaddr, lp->hacr);
-
-       wv_splx(lp, &flags);
 }                              /* wv_ints_on */
 
 /******************* MODEM MANAGEMENT SUBROUTINES *******************/
@@ -871,14+863,18 @@ if (lp->tx_n_in_use > 0)
 static inline void wv_82586_reconfig(device * dev)
 {
        net_local *lp = (net_local *) dev->priv;
+       unsigned long flags;
 
        /* Arm the flag, will be cleard in wv_82586_config() */
        lp->reconfig_82586 = 1;
 
        /* Check if we can do it now ! */
-       if((netif_running(dev)) && !(netif_queue_stopped(dev)))
+       if((netif_running(dev)) && !(netif_queue_stopped(dev))) {
+               wv_splhi(lp, &flags);
                /* May fail */
                wv_82586_config(dev);
+               wv_splx(lp, &flags);
+       }
        else {
 #ifdef DEBUG_CONFIG_INFO
                printk(KERN_DEBUG
@@ -2806,6+2802,7 @@ static inline int wv_packet_write(device * dev, void *buf, short length)
 static int wavelan_packet_xmit(struct sk_buff *skb, device * dev)
 {
        net_local *lp = (net_local *) dev->priv;
+       unsigned long flags;
 
 #ifdef DEBUG_TX_TRACE
        printk(KERN_DEBUG "%s: ->wavelan_packet_xmit(0x%X)\n", dev->name,
@@ -2822,7+2819,9 @@ static int wavelan_packet_xmit(struct sk_buff *skb, device * dev)
         * we can do it now.
         */
        if (lp->reconfig_82586) {
+               wv_splhi(lp, &flags);
                wv_82586_config(dev);
+               wv_splx(lp, &flags);
                /* Check that we can continue */
                if (lp->tx_n_in_use == (NTXBLOCKS - 1))
                        return 1;
@@ -3369,21+3368,17 @@ static void wv_82586_config(device * dev)
        ac_ias_t ias;           /* IA-setup action */
        ac_mcs_t mcs;           /* Multicast setup */
        struct dev_mc_list *dmi;
-       unsigned long flags;
 
 #ifdef DEBUG_CONFIG_TRACE
        printk(KERN_DEBUG "%s: ->wv_82586_config()\n", dev->name);
 #endif
 
-       wv_splhi(lp, &flags);
-       
        /* Check nothing bad has happened */
        if (lp->tx_n_in_use == (NTXBLOCKS - 1)) {
 #ifdef DEBUG_CONFIG_ERROR
                printk(KERN_INFO "%s: wv_82586_config(): Tx queue full.\n",
                       dev->name);
 #endif
-               wv_splx(lp, &flags);
                return;
        }
 
@@ -3524,8+3519,6 @@ static void wv_82586_config(device * dev)
        if (lp->tx_n_in_use == (NTXBLOCKS - 1))
                netif_stop_queue(dev);
 
-       wv_splx(lp, &flags);
-
 #ifdef DEBUG_CONFIG_TRACE
        printk(KERN_DEBUG "%s: <-wv_82586_config()\n", dev->name);
 #endif
@@ -3535,6+3528,7 @@ static void wv_82586_config(device * dev)
 /*
  * This routine, called by wavelan_close(), gracefully stops the 
  * WaveLAN controller (i82586).
+ * (called by wavelan_close())
  */
 static inline void wv_82586_stop(device * dev)
 {
@@ -3571,6+3565,7 @@ static inline void wv_82586_stop(device * dev)
  *     3. Reset & Configure LAN controller (using wv_82586_start)
  *     4. Start the LAN controller's command unit
  *     5. Start the LAN controller's receive unit
+ * (called by wavelan_interrupt(), wavelan_watchdog() & wavelan_open())
  */
 static int wv_hw_reset(device * dev)
 {
@@ -3676,16+3671,18 @@ static void wavelan_interrupt(int irq, void *dev_id, struct pt_regs *regs)
        lp = (net_local *) dev->priv;
        ioaddr = dev->base_addr;
 
-#ifdef DEBUG_INTERRUPT_ERROR
-       /* Check state of our spinlock (it should be cleared) */
+#ifdef DEBUG_INTERRUPT_INFO
+       /* Check state of our spinlock */
        if(spin_is_locked(&lp->spinlock))
-               printk(KERN_INFO
+               printk(KERN_DEBUG
                       "%s: wavelan_interrupt(): spinlock is already locked !!!\n",
                       dev->name);
 #endif
 
-       /* Prevent reentrancy. It is safe because wv_splhi disable interrupts
-        * before aquiring the spinlock */
+       /* Prevent reentrancy. We need to do that because we may have
+        * multiple interrupt handler running concurently.
+        * It is safe because wv_splhi() disable interrupts before aquiring
+        * the spinlock. */
        spin_lock(&lp->spinlock);
 
        /* Check modem interupt */
@@ -3712,6+3709,7 @@ static void wavelan_interrupt(int irq, void *dev_id, struct pt_regs *regs)
                       "%s: wavelan_interrupt(): interrupt not coming from i82586\n",
                       dev->name);
 #endif
+               spin_unlock (&lp->spinlock);
                return;
        }
 
@@ -3752,9+3750,6 @@ static void wavelan_interrupt(int irq, void *dev_id, struct pt_regs *regs)
                wv_receive(dev);
        }
 
-       /* Release spinlock here so that wv_hw_reset() can grab it */
-       spin_unlock (&lp->spinlock);
-
        /* Check the state of the command unit. */
        if (((status & SCB_ST_CNA) == SCB_ST_CNA) ||
            (((status & SCB_ST_CUS) != SCB_ST_CUS_ACTV) &&
@@ -3779,6+3774,9 @@ static void wavelan_interrupt(int irq, void *dev_id, struct pt_regs *regs)
                wv_hw_reset(dev);
        }
 
+       /* Release spinlock */
+       spin_unlock (&lp->spinlock);
+
 #ifdef DEBUG_INTERRUPT_TRACE
        printk(KERN_DEBUG "%s: <-wavelan_interrupt()\n", dev->name);
 #endif
@@ -3806,14+3804,13 @@ static void wavelan_watchdog(device *   dev)
               dev->name);
 #endif
 
-       wv_splhi(lp, &flags);
-
        /* Check that we came here for something */
        if (lp->tx_n_in_use <= 0) {
-               wv_splx(lp, &flags);
                return;
        }
 
+       wv_splhi(lp, &flags);
+
        /* Try to see if some buffers are not free (in case we missed
         * an interrupt */
        nreaped = wv_complete(dev, ioaddr, lp);
@@ -3910,6+3907,7 @@ static int wavelan_open(device * dev)
                       "%s: wavelan_open(): impossible to start the card\n",
                       dev->name);
 #endif
+               wv_splx(lp, &flags);
                return -EAGAIN;
        }
        wv_splx(lp, &flags);
@@ -3929,6+3927,9 @@ static int wavelan_open(device * dev)
  */
 static int wavelan_close(device * dev)
 {
+       net_local *lp = (net_local *) dev->priv;
+       unsigned long flags;
+
 #ifdef DEBUG_CALLBACK_TRACE
        printk(KERN_DEBUG "%s: ->wavelan_close(dev=0x%x)\n", dev->name,
               (unsigned int) dev);
@@ -3939,7+3940,9 @@ static int wavelan_close(device * dev)
        /*
         * Flush the Tx and disable Rx.
         */
+       wv_splhi(lp, &flags);
        wv_82586_stop(dev);
+       wv_splx(lp, &flags);
 
        free_irq(dev->irq, dev);
 
@@ -3965,7+3968,7 @@ static int __init wavelan_config(device * dev)
        net_local *lp;
 
 #ifdef DEBUG_CALLBACK_TRACE
-       printk(KERN_DEBUG "%s: ->wavelan_config(dev=0x%x, ioaddr=0x%x)\n",
+       printk(KERN_DEBUG "%s: ->wavelan_config(dev=0x%x, ioaddr=0x%lx)\n",
               dev->name, (unsigned int) dev, ioaddr);
 #endif
 
index 3e20776..f739356 100644 (file)
  *
  * SMP
  * ---
- *     We now *should* be SMP compliant.
- *     I don't have a SMP box to verify that (my Pentium 90 is not), so
- *     someone has to certify that from me.
+ *     We now are SMP compliant (I eventually fixed the remaining bugs).
+ *     The driver has been tested on a dual P6-150 and survived my usual
+ *     set of torture tests.
  *     Anyway, I spent enough time chasing interrupt re-entrancy during
  *     errors or reconfigure, and I designed the locked/unlocked sections
  *     of the driver with great care, and with the recent addition of
  *     - Fixup a potential gotcha when reconfiguring and thighten a bit
  *             the interactions with Tx queue.
  *
+ * Changes made for release in 2.4.0 :
+ * ---------------------------------
+ *     - Fix spinlock stupid bugs that I left in. The driver is now SMP
+ *             compliant and doesn't lockup at startup.
+ *
  * Wishes & dreams:
  * ----------------
  *     - roaming (see Pcmcia driver)
 /************************ CONSTANTS & MACROS ************************/
 
 #ifdef DEBUG_VERSION_SHOW
-static const char      *version        = "wavelan.c : v22 (wireless extensions) 21/02/00\n";
+static const char      *version        = "wavelan.c : v23 (SMP + wireless extensions) 05/10/00\n";
 #endif
 
 /* Watchdog temporisation */
index 45f7f05..7d7b705 100644 (file)
  *  Changelog:
  *  2000-01-01 Added quirks handling for buggy hardware
  *             Peter Denison <peterd@pnd-pc.demon.co.uk>
+ *  2000-06-14 Added isapnp_probe_devs() and isapnp_activate_dev()
+ *             Christoph Hellwig <hch@caldera.de>
  */
 
 #include <linux/config.h>
@@ -244,14+246,15 @@ static void __init isapnp_peek(unsigned char *data, int bytes)
        unsigned char d=0;
 
        for (i = 1; i <= bytes; i++) {
-               for (j = 0; j < 10; j++) {
+               for (j = 0; j < 20; j++) {
                        d = isapnp_read_byte(0x05);
                        if (d & 1)
                                break;
                        udelay(100);
                }
                if (!(d & 1)) {
-                       *data++ = 0xff;
+                       if (data != NULL)
+                               *data++ = 0xff;
                        continue;
                }
                d = isapnp_read_byte(0x04);     /* PRESDI */
@@ -1219,9+1222,9 @@ isapnp_match_card(const struct isapnp_card_id *ids, struct pci_bus *card)
 {
        int idx;
 
-       while (ids->vendor || ids->device) {
-               if ((ids->vendor == ISAPNP_ANY_ID || ids->vendor == card->vendor) &&
-                   (ids->device == ISAPNP_ANY_ID || ids->device == card->device)) {
+       while (ids->card_vendor || ids->card_device) {
+               if ((ids->card_vendor == ISAPNP_ANY_ID || ids->card_vendor == card->vendor) &&
+                   (ids->card_device == ISAPNP_ANY_ID || ids->card_device == card->device)) {
                        for (idx = 0; idx < ISAPNP_CARD_DEVS; idx++) {
                                if (ids->devs[idx].vendor == 0 &&
                                    ids->devs[idx].function == 0)
@@ -1258,6+1261,56 @@ int isapnp_probe_cards(const struct isapnp_card_id *ids,
        return count;
 }
 
+static const struct isapnp_device_id *
+isapnp_match_dev(const struct isapnp_device_id *ids, struct pci_dev *dev)
+{
+       while (ids->card_vendor || ids->card_device) {
+               if ((ids->card_vendor == ISAPNP_ANY_ID || ids->card_vendor == dev->bus->vendor) &&
+                   (ids->card_device == ISAPNP_ANY_ID || ids->card_device == dev->bus->device) &&
+                    (ids->vendor == ISAPNP_ANY_ID || ids->vendor == dev->vendor) &&
+                    (ids->function == ISAPNP_ANY_ID || ids->function == dev->device))
+                       return ids;
+               ids++;
+       }
+       return NULL;
+}
+
+int isapnp_probe_devs(const struct isapnp_device_id *ids,
+                     int (*probe)(struct pci_dev *dev,
+                                  const struct isapnp_device_id *id))
+{
+       
+       struct pci_dev *dev;
+       const struct isapnp_device_id *id;
+       int count = 0;
+
+       if (ids == NULL || probe == NULL)
+               return -EINVAL;
+       isapnp_for_each_dev(dev) {
+               id = isapnp_match_dev(ids, dev);
+               if (id != NULL && probe(dev, id) >= 0)
+                       count++;
+       }
+       return count;
+}
+
+int isapnp_activate_dev(struct pci_dev *dev, const char *name)
+{
+       int err;
+       
+       /* Device already active? Let's use it and inform the caller */
+       if (dev->active)
+               return -EBUSY;
+
+       if ((err = dev->activate(dev)) < 0) {
+               printk(KERN_ERR "isapnp: config of %s failed (out of resources?)[%d]\n", name, err);
+               dev->deactivate(dev);
+               return err;
+       }
+
+       return 0;
+}
+
 static unsigned int isapnp_dma_resource_flags(struct isapnp_dma *dma)
 {
        return dma->flags | IORESOURCE_DMA | IORESOURCE_AUTO;
@@ -2104,6+2157,8 @@ EXPORT_SYMBOL(isapnp_deactivate);
 EXPORT_SYMBOL(isapnp_find_card);
 EXPORT_SYMBOL(isapnp_find_dev);
 EXPORT_SYMBOL(isapnp_probe_cards);
+EXPORT_SYMBOL(isapnp_probe_devs);
+EXPORT_SYMBOL(isapnp_activate_dev);
 EXPORT_SYMBOL(isapnp_resource_change);
 
 int __init isapnp_init(void)
index d973c4e..dd95a0a 100644 (file)
@@ -5,7+5,7 @@ tristate 'Loopback device support' CONFIG_BLK_DEV_LOOP
 if [ "$CONFIG_NET" = "y" ]; then
   tristate 'Network block device support' CONFIG_BLK_DEV_NBD
 fi
-include drivers/md/Config.in
+source drivers/md/Config.in
 tristate 'RAM disk support' CONFIG_BLK_DEV_RAM
 if [ "$CONFIG_BLK_DEV_RAM" = "y" ]; then
   bool '   Initial RAM disk (initrd) support' CONFIG_BLK_DEV_INITRD
@@ -24,6+24,8 @@ if [ "$CONFIG_DASD" != "n"  ]; then
   bool '   Support for DIAG access to CMS reserved Disks' CONFIG_DASD_MDSK
 fi
 
+endmenu
+
 #menu_option next_comment
 #endmenu
 
@@ -33,7+35,7 @@ if [ "$CONFIG_NET" = "y" ]; then
   bool 'Channel Device Configuration (Temporary Option)' CONFIG_CHANDEV
   bool 'Network device support' CONFIG_NETDEVICES
   if [ "$CONFIG_NETDEVICES" = "y" ]; then
-    menu_option next_comment
+    mainmenu_option next_comment
     comment 'S390 Network devices'
     bool 'CTC device support' CONFIG_CTC
     bool 'IUCV device support (VM only)' CONFIG_IUCV
@@ -41,6+43,7 @@ if [ "$CONFIG_NET" = "y" ]; then
     bool 'Ethernet (10 or 100Mbit)' CONFIG_NET_ETHERNET
     bool 'Token Ring driver support' CONFIG_TR
     bool 'FDDI driver support' CONFIG_FDDI
+    endmenu
   fi
   endmenu
 fi
index dc3e548..7b9b1cc 100644 (file)
@@ -1595,20+1595,20 @@ static int write_ndelay __initdata =    -1;
 static int cfg __initdata =            -1;
 
 /* Extra Peripheral Configuration */
-static int reset __initdata;
-static int mpu_io __initdata;
-static int mpu_irq __initdata;
-static int ide_io0 __initdata;
-static int ide_io1 __initdata;
-static int ide_irq __initdata;
-static int joystick_io __initdata;
+static int reset __initdata = 0;
+static int mpu_io __initdata = 0;
+static int mpu_irq __initdata = 0;
+static int ide_io0 __initdata = 0;
+static int ide_io1 __initdata = 0;
+static int ide_irq __initdata = 0;
+static int joystick_io __initdata = 0;
 
 /* If we have the digital daugherboard... */
-static int digital __initdata;
+static int digital __initdata = 0;
 #endif
 
 static int fifosize __initdata =       DEFFIFOSIZE;
-static int calibrate_signal __initdata;
+static int calibrate_signal __initdata = 0;
 
 #else /* not a module */
 
index 0788264..5e4f6c3 100644 (file)
@@ -1762,10+1762,10 @@ static struct address_info cfg;
 
 static int attached;
 
-static int __initdata io;
-static int __initdata irq;
-static int __initdata dma;
-static int __initdata dma2;
+static int __initdata io = 0;
+static int __initdata irq = 0;
+static int __initdata dma = 0;
+static int __initdata dma2 = 0;
 
 
 MODULE_PARM(io, "i");          /* IO base */
index c0fd417..24ca485 100644 (file)
@@ -243,6+243,7 @@ static void acm_read_bulk(struct urb *urb)
        }
 
        urb->actual_length = 0;
+       urb->dev = acm->dev;
 
        if (usb_submit_urb(urb))
                dbg("failed resubmitting read urb");
@@ -291,9+292,11 @@ static int acm_tty_open(struct tty_struct *tty, struct file *filp)
 
        if (acm->used++) return 0;
 
+       acm->ctrlurb.dev = acm->dev;
        if (usb_submit_urb(&acm->ctrlurb))
                dbg("usb_submit_urb(ctrl irq) failed");
 
+       acm->readurb.dev = acm->dev;
        if (usb_submit_urb(&acm->readurb))
                dbg("usb_submit_urb(read bulk) failed");
 
@@ -339,6+342,7 @@ static int acm_tty_write(struct tty_struct *tty, int from_user, const unsigned c
                memcpy(acm->writeurb.transfer_buffer, buf, count);
 
        acm->writeurb.transfer_buffer_length = count;
+       acm->writeurb.dev = acm->dev;
 
        if (usb_submit_urb(&acm->writeurb))
                dbg("usb_submit_urb(write bulk) failed");
index 0100595..c543b24 100644 (file)
 /*
- * bluetooth.c   Version 0.4
+ * bluetooth.c   Version 0.6
  *
  * Copyright (c) 2000 Greg Kroah-Hartman       <greg@kroah.com>
  * Copyright (c) 2000 Mark Douglas Corner      <mcorner@umich.edu>
  *
  * USB Bluetooth driver, based on the Bluetooth Spec version 1.0B
  *
+ * (10/05/2000) Version 0.6 gkh
+ *     Fixed bug with urb->dev not being set properly, now that the usb
+ *     core needs it.
+ *     Got a real major id number and name.
+ *
  * (08/06/2000) Version 0.5 gkh
  *     Fixed problem of not resubmitting the bulk read urb if there is
  *     an error in the callback.  Ericsson devices seem to need this.
@@ -89,8+94,8 @@ MODULE_DESCRIPTION("USB Bluetooth driver");
 #define BLUETOOTH_PROGRAMMING_PROTOCOL_CODE    0x01
 
 
-#define BLUETOOTH_TTY_MAJOR    240     /* Prototype number for now */
-#define BLUETOOTH_TTY_MINORS   8
+#define BLUETOOTH_TTY_MAJOR    216     /* real device node major id */
+#define BLUETOOTH_TTY_MINORS   256     /* whole lotta bluetooth devices */
 
 #define USB_BLUETOOTH_MAGIC    0x6d02  /* magic number for bluetooth struct */
 
@@ -138,11+143,16 @@ struct usb_bluetooth {
 
        unsigned char *         interrupt_in_buffer;
        struct urb *            interrupt_in_urb;
+       __u8                    interrupt_in_endpointAddress;
+       __u8                    interrupt_in_interval;
+       int                     interrupt_in_buffer_size;
 
        unsigned char *         bulk_in_buffer;
        struct urb *            read_urb;
+       __u8                    bulk_in_endpointAddress;
+       int                     bulk_in_buffer_size;
 
-       int                     bulk_out_size;
+       int                     bulk_out_buffer_size;
        struct urb *            write_urb_pool[NUM_BULK_URBS];
        __u8                    bulk_out_endpointAddress;
 
@@ -312,10+322,18 @@ static int bluetooth_open (struct tty_struct *tty, struct file * filp)
 
 #ifndef BTBUGGYHARDWARE
        /* Start reading from the device */
+       FILL_BULK_URB(bluetooth->read_urb, bluetooth->dev, 
+                     usb_rcvbulkpipe(bluetooth->dev, bluetooth->bulk_in_endpointAddress),
+                     bluetooth->bulk_in_buffer, bluetooth->bulk_in_buffer_size, 
+                     bluetooth_read_bulk_callback, bluetooth);
        result = usb_submit_urb(bluetooth->read_urb);
        if (result)
                dbg(__FUNCTION__ " - usb_submit_urb(read bulk) failed with status %d", result);
 #endif
+       FILL_INT_URB(bluetooth->interrupt_in_urb, bluetooth->dev, 
+                    usb_rcvintpipe(bluetooth->dev, bluetooth->interrupt_in_endpointAddress),
+                    bluetooth->interrupt_in_buffer, bluetooth->interrupt_in_buffer_size, 
+                    bluetooth_int_callback, bluetooth, bluetooth->interrupt_in_interval);
        result = usb_submit_urb(bluetooth->interrupt_in_urb);
        if (result)
                dbg(__FUNCTION__ " - usb_submit_urb(interrupt in) failed with status %d", result);
@@ -445,7+463,7 @@ static int bluetooth_write (struct tty_struct * tty, int from_user, const unsign
                                        urb->transfer_buffer = NULL;
                                }
 
-                               buffer_size = MIN (count, bluetooth->bulk_out_size);
+                               buffer_size = MIN (count, bluetooth->bulk_out_buffer_size);
                                
                                new_buffer = kmalloc (buffer_size, GFP_KERNEL);
                                if (new_buffer == NULL) {
@@ -508,7+526,7 @@ static int bluetooth_write_room (struct tty_struct *tty)
 
        for (i = 0; i < NUM_BULK_URBS; ++i) {
                if (bluetooth->write_urb_pool[i]->status != -EINPROGRESS) {
-                       room += bluetooth->bulk_out_size;
+                       room += bluetooth->bulk_out_buffer_size;
                }
        }
 
@@ -627,6+645,7 @@ static void bluetooth_set_termios (struct tty_struct *tty, struct termios * old)
 #ifdef BTBUGGYHARDWARE
 void btusb_enable_bulk_read(struct tty_struct *tty){
        struct usb_bluetooth *bluetooth = get_usb_bluetooth ((struct usb_bluetooth *)tty->driver_data, __FUNCTION__);
+       int result;
 
        if (!bluetooth) {
                return;
@@ -639,9+658,15 @@ void btusb_enable_bulk_read(struct tty_struct *tty){
                return;
        }
 
-       if (bluetooth->read_urb)
-               if (usb_submit_urb(bluetooth->read_urb))
-                       dbg (__FUNCTION__ " - usb_submit_urb(read bulk) failed");
+       if (bluetooth->read_urb) {
+               FILL_BULK_URB(bluetooth->read_urb, bluetooth->dev, 
+                             usb_rcvbulkpipe(bluetooth->dev, bluetooth->bulk_in_endpointAddress),
+                             bluetooth->bulk_in_buffer, bluetooth->bulk_in_buffer_size, 
+                             bluetooth_read_bulk_callback, bluetooth);
+               result = usb_submit_urb(bluetooth->read_urb);
+               if (result)
+                       err (__FUNCTION__ " - failed submitting read urb, error %d", result);
+       }
 }
 
 void btusb_disable_bulk_read(struct tty_struct *tty){
@@ -782,14+807,20 @@ static void bluetooth_read_bulk_callback (struct urb *urb)
        unsigned char *data = urb->transfer_buffer;
        unsigned int count = urb->actual_length;
        unsigned int i;
-       uint packet_size;
+       unsigned int packet_size;
+       int result;
 
 #ifdef BTBUGGYHARDWARE
        if ((count == 4) && (data[0] == 0x00) && (data[1] == 0x00)
            && (data[2] == 0x00) && (data[3] == 0x00)) {
                urb->actual_length = 0;
-               if (usb_submit_urb(urb))
-                       dbg(__FUNCTION__ " - failed resubmitting read urb");
+               FILL_BULK_URB(bluetooth->read_urb, bluetooth->dev, 
+                             usb_rcvbulkpipe(bluetooth->dev, bluetooth->bulk_in_endpointAddress),
+                             bluetooth->bulk_in_buffer, bluetooth->bulk_in_buffer_size, 
+                             bluetooth_read_bulk_callback, bluetooth);
+               result = usb_submit_urb(bluetooth->read_urb);
+               if (result)
+                       err (__FUNCTION__ " - failed resubmitting read urb, error %d", result);
 
                return;
        }
@@ -863,8+894,13 @@ static void bluetooth_read_bulk_callback (struct urb *urb)
        }       
 
 exit:
-       if (usb_submit_urb(urb))
-               dbg(__FUNCTION__ " - failed resubmitting read urb");
+       FILL_BULK_URB(bluetooth->read_urb, bluetooth->dev, 
+                     usb_rcvbulkpipe(bluetooth->dev, bluetooth->bulk_in_endpointAddress),
+                     bluetooth->bulk_in_buffer, bluetooth->bulk_in_buffer_size, 
+                     bluetooth_read_bulk_callback, bluetooth);
+       result = usb_submit_urb(bluetooth->read_urb);
+       if (result)
+               err (__FUNCTION__ " - failed resubmitting read urb, error %d", result);
 
        return;
 }
@@ -1027,7+1063,8 @@ static void * usb_bluetooth_probe(struct usb_device *dev, unsigned int ifnum)
                err("No free urbs available");
                goto probe_error;
        }
-       buffer_size = endpoint->wMaxPacketSize;
+       bluetooth->bulk_in_buffer_size = buffer_size = endpoint->wMaxPacketSize;
+       bluetooth->bulk_in_endpointAddress = endpoint->bEndpointAddress;
        bluetooth->bulk_in_buffer = kmalloc (buffer_size, GFP_KERNEL);
        if (!bluetooth->bulk_in_buffer) {
                err("Couldn't allocate bulk_in_buffer");
@@ -1050,7+1087,7 @@ static void * usb_bluetooth_probe(struct usb_device *dev, unsigned int ifnum)
                bluetooth->write_urb_pool[i] = urb;
        }
        
-       bluetooth->bulk_out_size = endpoint->wMaxPacketSize * 2;
+       bluetooth->bulk_out_buffer_size = endpoint->wMaxPacketSize * 2;
 
        endpoint = interrupt_in_endpoint[0];
        bluetooth->interrupt_in_urb = usb_alloc_urb(0);
@@ -1058,7+1095,9 @@ static void * usb_bluetooth_probe(struct usb_device *dev, unsigned int ifnum)
                err("No free urbs available");
                goto probe_error;
        }
-       buffer_size = endpoint->wMaxPacketSize;
+       bluetooth->interrupt_in_buffer_size = buffer_size = endpoint->wMaxPacketSize;
+       bluetooth->interrupt_in_endpointAddress = endpoint->bEndpointAddress;
+       bluetooth->interrupt_in_interval = endpoint->bInterval;
        bluetooth->interrupt_in_buffer = kmalloc (buffer_size, GFP_KERNEL);
        if (!bluetooth->interrupt_in_buffer) {
                err("Couldn't allocate interrupt_in_buffer");
@@ -1070,7+1109,7 @@ static void * usb_bluetooth_probe(struct usb_device *dev, unsigned int ifnum)
 
        /* initialize the devfs nodes for this device and let the user know what bluetooths we are bound to */
        tty_register_devfs (&bluetooth_tty_driver, 0, minor);
-       info("Bluetooth converter now attached to ttyBLUE%d (or usb/ttblue/%d for devfs)", minor, minor);
+       info("Bluetooth converter now attached to ttyUB%d (or usb/ttub/%d for devfs)", minor, minor);
 
        bluetooth_table[minor] = bluetooth;
 
@@ -1145,7+1184,7 @@ static void usb_bluetooth_disconnect(struct usb_device *dev, void *ptr)
                        }
                }
                
-               info("Bluetooth converter now disconnected from ttyBLUE%d", bluetooth->minor);
+               info("Bluetooth converter now disconnected from ttyUB%d", bluetooth->minor);
 
                bluetooth_table[bluetooth->minor] = NULL;
 
@@ -1163,7+1202,7 @@ static void usb_bluetooth_disconnect(struct usb_device *dev, void *ptr)
 static struct tty_driver bluetooth_tty_driver = {
        magic:                  TTY_DRIVER_MAGIC,
        driver_name:            "usb-bluetooth",
-       name:                   "usb/ttblue/%d",
+       name:                   "usb/ttub/%d",
        major:                  BLUETOOTH_TTY_MAJOR,
        minor_start:            0,
        num:                    BLUETOOTH_TTY_MINORS,
index d099394..2a1e12a 100644 (file)
@@ -1035,12+1035,14 @@ static int proc_ioctl (struct dev_state *ps, void *arg)
        if ((size = _IOC_SIZE (ctrl.ioctl_code)) > 0) {
                if ((buf = kmalloc (size, GFP_KERNEL)) == 0)
                        return -ENOMEM;
-               if ((_IOC_DIR (ctrl.ioctl_code) & _IOC_WRITE) != 0
-                               && copy_from_user (buf, ctrl.data, size) != 0) {
-                       kfree (buf);
-                       return -EFAULT;
-               } else
+               if ((_IOC_DIR(ctrl.ioctl_code) & _IOC_WRITE)) {
+                       if (copy_from_user (buf, ctrl.data, size)) {
+                               kfree (buf);
+                               return -EFAULT;
+                       }
+               } else {
                        memset (buf, 0, size);
+               }
        }
 
        /* ioctl to device */
index 5ccae51..0be1c79 100644 (file)
@@ -539,8+539,6 @@ static void usb_hub_port_connect_change(struct usb_device *hub, int port,
 
        tempstr = kmalloc(1024, GFP_KERNEL);
        portstr = kmalloc(1024, GFP_KERNEL);
-       if (portstr)
-               portstr[0] = 0;
 
        for (i = 0; i < HUB_PROBE_TRIES; i++) {
                struct usb_device *pdev, *cdev;
@@ -567,6+565,7 @@ static void usb_hub_port_connect_change(struct usb_device *hub, int port,
                cdev = dev;
                pdev = dev->parent;
                if (portstr && tempstr) {
+                       portstr[0] = 0;
                        while (pdev) {
                                int port;
 
@@ -583,25+582,15 @@ static void usb_hub_port_connect_change(struct usb_device *hub, int port,
                                cdev = pdev;
                                pdev = pdev->parent;
                        }
-               }
-
-               if (portstr)
                        info("USB new device connect on bus%d/%s, assigned device number %d",
                                dev->bus->busnum, portstr, dev->devnum);
-               else
+               else
                        info("USB new device connect on bus%d, assigned device number %d",
                                dev->bus->busnum, dev->devnum);
 
-               if (portstr)
-                       kfree(portstr);
-               if (tempstr)
-                       kfree(tempstr);
-
                /* Run it through the hoops (find a driver, etc) */
-               if (!usb_new_device(dev)) {
-                       up(&usb_address0_sem);
-                       return;
-               }
+               if (!usb_new_device(dev))
+                       goto done;
 
                /* Free the configuration if there was an error */
                usb_free_dev(dev);
@@ -612,7+601,12 @@ static void usb_hub_port_connect_change(struct usb_device *hub, int port,
 
        hub->children[port] = NULL;
        usb_hub_port_disable(hub, port);
+done:
        up(&usb_address0_sem);
+       if (portstr)
+               kfree(portstr);
+       if (tempstr)
+               kfree(tempstr);
 }
 
 static void usb_hub_events(void)
index a58c29c..a71ff24 100644 (file)
 **             v0.4.0  Control messages remained unurbified are now URBs.
 **                     Now we can touch the HW at any time.
 **             v0.4.9  Control urbs again use process context to wait. Argh...
-**                     Some long standing bugs (start_net) fixed. Also nasty
-**                     trick with resubmiting control urb from interrupt
-**                     context used. Please let me know how it behaves.
-**                     Pegasus II support added since this version.
+**                     Some long standing bugs (enable_net_traffic) fixed.
+**                     Also nasty trick about resubmiting control urb from
+**                     interrupt context used. Please let me know how it
+**                     behaves. Pegasus II support added since this version.
 **                     TODO: suppressing HCD warnings spewage on disconnect.
+**             v0.4.13 Ethernet address is now set at probe(), not at open()
+**                     time as this seems to break dhcpd. 
 */
 
 /*
 #include <linux/usb.h>
 
 
-static const char *version = __FILE__ ": v0.4.9 2000/09/14 (C) 1999-2000 Petko Manolov (petkan@dce.bg)";
+static const char *version = __FILE__ ": v0.4.13 2000/10/09 (C) 1999-2000 Petko Manolov (petkan@dce.bg)";
 
 
 #define        PEGASUS_USE_INTR
@@ -81,10+83,13 @@ static const char *version = __FILE__ ": v0.4.9 2000/09/14 (C) 1999-2000 Petko M
 #define        LINKSYS_GPIO_RESET      0x24
 #define        DEFAULT_GPIO_SET        0x26
 
-#define        PEGASUS_PRESENT         1
-#define        PEGASUS_RUNNING         2
-#define        CTRL_URB_RUNNING        4
-#define        CTRL_URB_SLEEP          8
+#define        PEGASUS_PRESENT         0x00000001
+#define        PEGASUS_RUNNING         0x00000002
+#define        PEGASUS_TX_BUSY         0x00000004
+#define        PEGASUS_RX_BUSY         0x00000008
+#define        CTRL_URB_RUNNING        0x00000010
+#define        CTRL_URB_SLEEP          0x00000020
+#define        PEGASUS_UNPLUG          0x00000040
 #define        ETH_REGS_CHANGE         0x40000000
 #define        ETH_REGS_CHANGED        0x80000000
 
@@ -94,12+99,6 @@ static const char *version = __FILE__ ": v0.4.9 2000/09/14 (C) 1999-2000 Petko M
 #define        REG_TIMEOUT             (HZ)
 #define        PEGASUS_TX_TIMEOUT      (HZ*10)
 
-#ifdef PEGASUS_USE_INTR
-       #define INTR_IVAL       0x80
-#else
-       #define INTR_IVAL       0
-#endif
-
 #define        TX_UNDERRUN             0x80
 #define        EXCESSIVE_COL           0x40
 #define        LATE_COL                0x20
@@ -144,6+143,7 @@ typedef struct pegasus {
        struct net_device_stats stats;
        unsigned                flags;
        unsigned                features;
+       int                     intr_interval;
        struct urb              ctrl_urb, rx_urb, tx_urb, intr_urb;
        devrequest              dr;
        wait_queue_head_t       ctrl_wait;
@@ -165,7+165,7 @@ struct usb_eth_dev {
 
 
 static int loopback = 0;
-static int mode = 0;
+static int mii_mode = 0;
 static int multicast_filter_limit = 32;
 
 
@@ -183,13+183,14 @@ static struct usb_eth_dev usb_dev_id[] = {
        {"MELCO/BUFFALO LUA-TX", 0x0411, 0x0001, DEFAULT_GPIO_RESET},
        {"D-Link DSB-650TX", 0x2001, 0x4001, LINKSYS_GPIO_RESET},
        {"D-Link DSB-650TX", 0x2001, 0x4002, LINKSYS_GPIO_RESET},
-       {"D-Link DSB-650TX(PNA)", 0x2001, 0x4003, DEFAULT_GPIO_RESET},
+       {"D-Link DSB-650TX(PNA)", 0x2001, 0x4003,
+               HAS_HOME_PNA | DEFAULT_GPIO_RESET},
        {"D-Link DSB-650", 0x2001, 0xabc1, DEFAULT_GPIO_RESET},
        {"D-Link DU-E10", 0x07b8, 0xabc1, DEFAULT_GPIO_RESET},
        {"D-Link DU-E100", 0x07b8, 0x4002, DEFAULT_GPIO_RESET},
        {"Linksys USB10TX", 0x066b, 0x2202, LINKSYS_GPIO_RESET},
        {"Linksys USB100TX", 0x066b, 0x2203, LINKSYS_GPIO_RESET},
-       {"Linksys USB100TX", 0x066b, 0x2204, LINKSYS_GPIO_RESET},
+       {"Linksys USB100TX", 0x066b, 0x2204, HAS_HOME_PNA | LINKSYS_GPIO_RESET},
        {"Linksys USB Ethernet Adapter", 0x066b, 0x2206, LINKSYS_GPIO_RESET},
        {"SMC 202 USB Ethernet", 0x0707, 0x0200, DEFAULT_GPIO_RESET},
        {"ADMtek AN986 \"Pegasus\" USB Ethernet (eval board)", 0x07a6, 0x0986, 
@@ -209,7+210,7 @@ static int update_eth_regs_async( pegasus_t * );
 /* Aargh!!! I _really_ hate such tweaks */
 static void ctrl_callback( urb_t *urb )
 {
-       pegasus_t               *pegasus = urb->context;
+       pegasus_t       *pegasus = urb->context;
 
        if ( !pegasus )
                return;
@@ -260,11+261,11 @@ static int get_registers(pegasus_t *pegasus, __u16 indx, __u16 size, void *data)
 
        if ( (ret = usb_submit_urb( &pegasus->ctrl_urb )) ) {
                err( __FUNCTION__ " BAD CTRLs %d", ret);
-               return  ret;
+               goto out;
        }
        pegasus->flags |= CTRL_URB_SLEEP;
        interruptible_sleep_on( &pegasus->ctrl_wait );
-
+out:
        return  ret;
 }
 
@@ -419,7+420,7 @@ static int read_eprom_word( pegasus_t *pegasus, __u8 index, __u16 *retdata )
        return -1;
 }
 
-
+#ifdef PEGASUS_WRITE_EEPROM
 static inline void enable_eprom_write( pegasus_t *pegasus )
 {
        __u8    tmp;
@@ -461,40+462,23 @@ static int write_eprom_word( pegasus_t *pegasus, __u8 index, __u16 data )
        warn( __FUNCTION__ " failed" );
        return  -1;
 }
+#endif /* PEGASUS_WRITE_EEPROM */
 
-
-static void set_intr_interval( pegasus_t *pegasus )
+static inline void get_node_id( pegasus_t *pegasus, __u8 *id )
 {
-       __u16   d;
-       __u8    tmp;
+       int     i;
 
-       read_eprom_word( pegasus, 4, &d );
-       ((__u8 *)&d)[1] = INTR_IVAL;
-       write_eprom_word( pegasus, 4, d );
-       get_registers( pegasus, EthCtrl2, 1, &tmp );
-       set_register( pegasus, EthCtrl2, tmp | EPROM_LOAD );
-       udelay( 10000 );
-       set_register( pegasus, EthCtrl2, tmp );
-#ifdef PEGASUS_DUMP_EEPROM  
-       { int   i;
-       for ( i=0; i < 0x40; i++ ) {
-               read_eprom_word( pegasus, i, &d );
-               printk( "eepromword %02x-%04x, ", i, d );
-       }
-       printk( "\n" );
-       }
-#endif
+       for (i = 0; i < 3; i++)
+               read_eprom_word( pegasus, i, (__u16 *)&id[i*2]);
 }
 
 
-static inline int get_node_id( pegasus_t *pegasus, __u8 *id )
+static void set_ethernet_addr( pegasus_t *pegasus )
 {
-       int i;
+       __u8    node_id[6];
 
-       for (i = 0; i < 3; i++)
-               if ( read_eprom_word( pegasus, i, (__u16 *)&id[i*2]) )
-                       return 1;
-       return 0;
+       get_node_id(pegasus, node_id);
+       memcpy( pegasus->net->dev_addr, node_id, sizeof(node_id) );
 }
 
 
@@ -509,7+493,7 @@ static inline int reset_mac( pegasus_t *pegasus )
                if (~data & 0x08) {
                        if (loopback & 1) 
                                break;
-                       if ( mode && (pegasus->features & HAS_HOME_PNA) )
+                       if ( mii_mode && (pegasus->features & HAS_HOME_PNA) )
                                set_register( pegasus, Gpio1, 0x34 );
                        else
                                set_register( pegasus, Gpio1, 0x26 );
@@ -524,18+508,13 @@ static inline int reset_mac( pegasus_t *pegasus )
 }
 
 
-static int start_net( struct net_device *dev, struct usb_device *usb )
+static int enable_net_traffic( struct net_device *dev, struct usb_device *usb )
 {
        __u16   linkpart, bmsr;
-       __u8    node_id[6];
        __u8    data[4];
        pegasus_t *pegasus = dev->priv;
 
-       if ( get_node_id(pegasus, node_id) ) 
-               return 1;
 
-       set_registers( pegasus, EthID, sizeof(node_id), node_id );
-       memcpy( dev->dev_addr, node_id, sizeof(node_id) );
        if ( read_phy_word(pegasus, pegasus->phy, MII_BMSR, &bmsr) ) 
                return 2;
        if ( !(bmsr & 0x20) && !loopback ) 
@@ -552,7+531,7 @@ static int start_net( struct net_device *dev, struct usb_device *usb )
                data[1] |= 0x20; /* set full duplex */
        if ( linkpart & (ANLPA_100TX_FD | ANLPA_100TX_HD) )
                data[1] |= 0x10; /* set 100 Mbps */
-       if ( mode )
+       if ( mii_mode )
                data[1] = 0;
        data[2] = (loopback & 1) ? 0x09 : 0x01;
 
@@ -577,6+556,15 @@ static void read_bulk_callback( struct urb *urb )
                return;
 
        net = pegasus->net;
+       if ( !netif_device_present(net) )
+               return;
+
+       if ( pegasus->flags & PEGASUS_RX_BUSY ) {
+               pegasus->stats.rx_errors++;
+               return;
+       }
+       pegasus->flags |= PEGASUS_RX_BUSY;
+
        rx_status = *(int *)(pegasus->rx_buff + count - 4);
 
        if (urb->status) {
@@ -617,9+605,13 @@ static void read_bulk_callback( struct urb *urb )
        pegasus->stats.rx_bytes += pkt_len;
 
 goon:
-       pegasus->rx_urb.dev = pegasus->usb;
+       FILL_BULK_URB( &pegasus->rx_urb, pegasus->usb,
+                       usb_rcvbulkpipe(pegasus->usb, 1),
+                       pegasus->rx_buff, PEGASUS_MAX_MTU, 
+                       read_bulk_callback, pegasus );
        if ( (res = usb_submit_urb(&pegasus->rx_urb)) )
                warn( __FUNCTION__ " failed submint rx_urb %d", res);
+       pegasus->flags &= ~PEGASUS_RX_BUSY;
 }
 
 
@@ -629,10+621,14 @@ static void write_bulk_callback( struct urb *urb )
 
        if ( !pegasus || !(pegasus->flags & PEGASUS_RUNNING) )
                return;
+
+       if ( !netif_device_present(pegasus->net) )
+               return;
+               
        if ( urb->status )
                info("%s: TX status %d", pegasus->net->name, urb->status);
 
-       netif_wake_queue(pegasus->net);
+       netif_wake_queue( pegasus->net );
 }
 
 
@@ -675,12+671,12 @@ static void pegasus_tx_timeout( struct net_device *net )
        if ( !pegasus )
                return;
        
-       usb_unlink_urb(&pegasus->tx_urb);
+       usb_unlink_urb( &pegasus->tx_urb );
        warn("%s: Tx timed out.", net->name);
        pegasus->stats.tx_errors++;
        net->trans_start = jiffies;
 
-       netif_wake_queue(net);
+       netif_wake_queue( net );
 }
 
 
@@ -690,20+686,20 @@ static int pegasus_start_xmit( struct sk_buff *skb, struct net_device *net )
        int     count = ((skb->len+2) & 0x3f) ? skb->len+2 : skb->len+3;
        int     res;
 
-       netif_stop_queue(net);
-       if ( !(pegasus->flags & PEGASUS_RUNNING) )
-               return  0;
-
+       netif_stop_queue( net );
+               
        ((__u16 *)pegasus->tx_buff)[0] = skb->len;
        memcpy(pegasus->tx_buff+2, skb->data, skb->len);
+       FILL_BULK_URB( &pegasus->tx_urb, pegasus->usb,
+                       usb_sndbulkpipe(pegasus->usb, 2),
+                       pegasus->tx_buff, PEGASUS_MAX_MTU, 
+                       write_bulk_callback, pegasus );
        pegasus->tx_urb.transfer_buffer_length = count;
        pegasus->tx_urb.transfer_flags |= USB_ASYNC_UNLINK;
-
-       pegasus->tx_urb.dev = pegasus->usb;
        if ((res = usb_submit_urb(&pegasus->tx_urb))) {
                warn("failed tx_urb %d", res);
                pegasus->stats.tx_errors++;
-               netif_start_queue(net);
+               netif_start_queue( net );
        } else {
                pegasus->stats.tx_packets++;
                pegasus->stats.tx_bytes += skb->len;
@@ -722,7+718,7 @@ static struct net_device_stats *pegasus_netdev_stats( struct net_device *dev )
 }
 
 
-static inline void stop_net( pegasus_t *pegasus )
+static inline void disable_net_traffic( pegasus_t *pegasus )
 {
        int     tmp=0;
 
@@ -730,23+726,41 @@ static inline void stop_net( pegasus_t *pegasus )
 }
 
 
+static inline void get_interrupt_interval( pegasus_t *pegasus )
+{
+       __u8    data[2];
+
+       read_eprom_word( pegasus, 4, (__u16 *)data );
+       pegasus->intr_interval = data[1];
+}
+
+
 static int pegasus_open(struct net_device *net)
 {
        pegasus_t *pegasus = (pegasus_t *)net->priv;
        int     res;
 
-       if ((res = start_net(net, pegasus->usb))) {
-               err("can't start_net() - %d", res);
+       MOD_INC_USE_COUNT;
+       if ( (res = enable_net_traffic(net, pegasus->usb)) ) {
+               err("can't enable_net_traffic() - %d", res);
+               MOD_DEC_USE_COUNT;
                return -EIO;
        }
-       pegasus->rx_urb.dev = pegasus->usb;
+       FILL_BULK_URB( &pegasus->rx_urb, pegasus->usb,
+                       usb_rcvbulkpipe(pegasus->usb, 1),
+                       pegasus->rx_buff, PEGASUS_MAX_MTU, 
+                       read_bulk_callback, pegasus );
        if ( (res = usb_submit_urb(&pegasus->rx_urb)) )
                warn( __FUNCTION__ " failed rx_urb %d", res );
 #ifdef PEGASUS_USE_INTR
-       pegasus->intr_urb.dev = pegasus->usb;
+       get_interrupt_interval( pegasus );
+       FILL_INT_URB( &pegasus->intr_urb, pegasus->usb,
+                       usb_rcvintpipe(pegasus->usb, 3),
+                       pegasus->intr_buff, sizeof(pegasus->intr_buff),
+                       intr_callback, pegasus, pegasus->intr_interval );
        if ( (res = usb_submit_urb(&pegasus->intr_urb)) )
                warn( __FUNCTION__ " failed intr_urb %d", res);
-#endif         
+#endif
        netif_start_queue( net );
        pegasus->flags |= PEGASUS_RUNNING;
 
@@ -758,15+772,18 @@ static int pegasus_close( struct net_device *net )
 {
        pegasus_t       *pegasus = net->priv;
 
-       stop_net( pegasus );
        pegasus->flags &= ~PEGASUS_RUNNING;
-       netif_stop_queue(net);
+       netif_stop_queue( net );
+       if ( !(pegasus->flags & PEGASUS_UNPLUG) )
+               disable_net_traffic( pegasus );
 
        usb_unlink_urb( &pegasus->rx_urb );
        usb_unlink_urb( &pegasus->tx_urb );
        usb_unlink_urb( &pegasus->ctrl_urb );
        usb_unlink_urb( &pegasus->intr_urb );
 
+       MOD_DEC_USE_COUNT;
+
        return 0;
 }
 
@@ -855,7+872,7 @@ static inline void setup_pegasus_II( pegasus_t *pegasus )
 {
        set_register( pegasus, Reg1d, 0 );
        set_register( pegasus, Reg7b, 2 );
-       if ( pegasus->features & HAS_HOME_PNA )
+       if ( pegasus->features & HAS_HOME_PNA  && mii_mode )
                set_register( pegasus, Reg81, 6 );
        else
                set_register( pegasus, Reg81, 2 );
@@ -881,36+898,30 @@ static void * pegasus_probe( struct usb_device *dev, unsigned int ifnum )
                err("out of memory allocating device structure");
                return NULL;
        }
+
+       usb_inc_dev_use( dev );
        memset(pegasus, 0, sizeof(struct pegasus));
+       init_MUTEX( &pegasus-> ctrl_sem );
+       init_waitqueue_head( &pegasus->ctrl_wait );
 
        net = init_etherdev(0, 0);
+       pegasus->usb = dev;
+       pegasus->net = net;
        net->priv = pegasus;
        net->open = pegasus_open;
        net->stop = pegasus_close;
+#if LINUX_VERSION_CODE > KERNEL_VERSION(2,3,48)
        net->watchdog_timeo = PEGASUS_TX_TIMEOUT;
        net->tx_timeout = pegasus_tx_timeout;
+#endif
        net->do_ioctl = pegasus_ioctl;
        net->hard_start_xmit = pegasus_start_xmit;
        net->set_multicast_list = pegasus_set_multicast;
        net->get_stats = pegasus_netdev_stats;
        net->mtu = PEGASUS_MTU;
 
-       init_MUTEX( &pegasus-> ctrl_sem );
-       init_waitqueue_head( &pegasus->ctrl_wait );
-
-       usb_inc_dev_use (dev);
-       pegasus->usb = dev;
-       pegasus->net = net;
-
-       FILL_BULK_URB( &pegasus->rx_urb, dev, usb_rcvbulkpipe(dev, 1),
-                       pegasus->rx_buff, PEGASUS_MAX_MTU, 
-                       read_bulk_callback, pegasus );
-       FILL_BULK_URB( &pegasus->tx_urb, dev, usb_sndbulkpipe(dev, 2),
-                       pegasus->tx_buff, PEGASUS_MAX_MTU, 
-                       write_bulk_callback, pegasus );
-       FILL_INT_URB( &pegasus->intr_urb, dev, usb_rcvintpipe(dev, 3),
-                       pegasus->intr_buff, 8, intr_callback,
-                       pegasus, INTR_IVAL );
+       set_ethernet_addr( pegasus );
+       register_netdev( net );
 
        pegasus->features = usb_dev_id[dev_indx].private;
        if ( reset_mac(pegasus) ) {
@@ -932,12+943,9 @@ static void * pegasus_probe( struct usb_device *dev, unsigned int ifnum )
                pegasus->phy = 1;
        }
 
-       set_intr_interval( pegasus );
 
        info( "%s: %s", net->name, usb_dev_id[dev_indx].name );
 
-       MOD_INC_USE_COUNT;
-
        return pegasus;
 }
 
@@ -951,16+959,11 @@ static void pegasus_disconnect( struct usb_device *dev, void *ptr )
                return;
        }
 
-       stop_net( pegasus );
-       pegasus->flags &= ~PEGASUS_RUNNING;
-       netif_stop_queue( pegasus->net );
+       pegasus->flags |= PEGASUS_UNPLUG;
        unregister_netdev( pegasus->net );
-
-       usb_dec_dev_use (pegasus->usb);
+       usb_dec_dev_use( dev );
        kfree( pegasus );
        pegasus = NULL;
-
-       MOD_DEC_USE_COUNT;
 }
 
 
index bbbc05f..59e1c40 100644 (file)
@@ -192,6+192,7 @@ static int usblp_open(struct inode *inode, struct file *file)
 
        if (usblp->bidir) {
                usblp->readcount = 0;
+               usblp->readurb.dev = usblp->dev;
                usb_submit_urb(&usblp->readurb);
        }
 out:
@@ -301,6+302,7 @@ static ssize_t usblp_write(struct file *file, const char *buffer, size_t count,
                if (copy_from_user(usblp->writeurb.transfer_buffer, buffer + writecount,
                                usblp->writeurb.transfer_buffer_length)) return -EFAULT;
 
+               usblp->writeurb.dev = usblp->dev;
                usb_submit_urb(&usblp->writeurb);
        }
 
@@ -332,6+334,7 @@ static ssize_t usblp_read(struct file *file, char *buffer, size_t count, loff_t
        if (usblp->readurb.status) {
                err("usblp%d: error %d reading from printer",
                        usblp->minor, usblp->readurb.status);
+               usblp->readurb.dev = usblp->dev;
                usb_submit_urb(&usblp->readurb);
                return -EIO;
        }
@@ -342,8+345,10 @@ static ssize_t usblp_read(struct file *file, char *buffer, size_t count, loff_t
        if (copy_to_user(buffer, usblp->readurb.transfer_buffer + usblp->readcount, count))
                return -EFAULT;
 
-       if ((usblp->readcount += count) == usblp->readurb.actual_length)
+       if ((usblp->readcount += count) == usblp->readurb.actual_length) {
+               usblp->readurb.dev = usblp->dev;
                usb_submit_urb(&usblp->readurb);
+       }
 
        return count;
 }
index 8fabc83..f5635bb 100644 (file)
 *  Peter Berger (pberger@brimson.com)
 *  Al Borchers (borchers@steinerpoint.com)
 *
+* (10/05/2000) gkh
+*    -- Fixed bug with urb->dev not being set properly, now that the usb
+*      core needs it.
+* 
 *  (8/8/2000) pberger and borchers
 *    -- Fixed close so that 
 *       - it can timeout while waiting for transmit idle, if needed;
@@ -642,7+646,8 @@ dbg( "digi_write_oob_command: TOP: port=%d, count=%d", oob_priv->dp_port_num, co
 
                memcpy( oob_port->write_urb->transfer_buffer, buf, len );
                oob_port->write_urb->transfer_buffer_length = len;
-
+               oob_port->write_urb->dev = port->serial->dev;
+               
                if( (ret=usb_submit_urb(oob_port->write_urb)) == 0 ) {
                        count -= len;
                        buf += len;
@@ -728,6+733,7 @@ count );
                        memcpy( data, buf, len );
                        port->write_urb->transfer_buffer_length = len;
                }
+               port->write_urb->dev = port->serial->dev;
 
                if( (ret=usb_submit_urb(port->write_urb)) == 0 ) {
                        priv->dp_out_buf_len = 0;
@@ -802,6+808,7 @@ port_priv->dp_port_num, modem_signals );
        data[7] = 0;
 
        oob_port->write_urb->transfer_buffer_length = 8;
+       oob_port->write_urb->dev = port->serial->dev;
 
        if( (ret=usb_submit_urb(oob_port->write_urb)) == 0 ) {
                port_priv->dp_modem_signals =
@@ -921,8+928,10 @@ dbg( "digi_rx_unthrottle: TOP: port=%d", priv->dp_port_num );
        }
 
        /* restart read chain */
-       if( priv->dp_throttle_restart )
+       if( priv->dp_throttle_restart ) {
+               port->read_urb->dev = port->serial->dev;
                ret = usb_submit_urb( port->read_urb );
+       }
 
        /* turn throttle off */
        priv->dp_throttled = 0;
@@ -1270,6+1279,7 @@ priv->dp_port_num, count, from_user, in_interrupt() );
        }
 
        port->write_urb->transfer_buffer_length = data_len+2;
+       port->write_urb->dev = port->serial->dev;
 
        *data++ = DIGI_CMD_SEND_DATA;
        *data++ = data_len;
@@ -1349,6+1359,7 @@ dbg( "digi_write_bulk_callback: TOP, urb->status=%d", urb->status );
 
                port->write_urb->transfer_buffer_length
                        = priv->dp_out_buf_len+2;
+               port->write_urb->dev = serial->dev;
 
                memcpy( port->write_urb->transfer_buffer+2, priv->dp_out_buf,
                        priv->dp_out_buf_len );
@@ -1631,6+1642,7 @@ static int digi_startup_device( struct usb_serial *serial )
                port = &serial->port[i];
 
                port->write_urb->transfer_flags |= USB_DISABLE_SPD;
+               port->write_urb->dev = port->serial->dev;
 
                if( (ret=usb_submit_urb(port->read_urb)) != 0 ) {
                        err(
@@ -1794,6+1806,7 @@ dbg( "digi_read_bulk_callback: TOP" );
        }
 
        /* continue read */
+       urb->dev = port->serial->dev;
        if( (ret=usb_submit_urb(urb)) != 0 ) {
                err( __FUNCTION__ ": failed resubmitting urb, ret=%d, port=%d",
                        ret, priv->dp_port_num );
index 06c4a05..70f4cd1 100644 (file)
  *
  * See Documentation/usb/usb-serial.txt for more information on using this driver
  *
+ * (10/05/2000) gkh
+ *     Fixed bug with urb->dev not being set properly, now that the usb
+ *     core needs it.
+ * 
  * (09/11/2000) gkh
  *     Removed DEBUG #ifdefs with call to usb_serial_debug_data
  *
@@ -166,6+170,7 @@ static int  ftdi_sio_open (struct usb_serial_port *port, struct file *filp)
 { /* ftdi_sio_open */
        struct termios tmp_termios;
        struct usb_serial *serial = port->serial;
+       int result;
        char buf[1]; /* Needed for the usb_control_msg I think */
 
        dbg("ftdi_sio_open port %d", port->number);
@@ -216,9+221,14 @@ static int  ftdi_sio_open (struct usb_serial_port *port, struct file *filp)
                err("Error from RTS HIGH urb");
        }
        
-       /*Start reading from the device*/
-       if (usb_submit_urb(port->read_urb))
-               err("usb_submit_urb(read bulk) failed");
+       /* Start reading from the device */
+       FILL_BULK_URB(port->read_urb, serial->dev, 
+                     usb_rcvbulkpipe(serial->dev, port->bulk_in_endpointAddress),
+                     port->read_urb->transfer_buffer, port->read_urb->transfer_buffer_length,
+                     ftdi_sio_read_bulk_callback, port);
+       result = usb_submit_urb(port->read_urb);
+       if (result)
+               err(__FUNCTION__ " - failed submitting read urb, error %d", result);
 
        return (0);
 } /* ftdi_sio_open */
@@ -279,6+289,7 @@ static int ftdi_sio_write (struct usb_serial_port *port, int from_user,
        struct usb_serial *serial = port->serial;
        const int data_offset = 1;
        int rc; 
+       int result;
        DECLARE_WAITQUEUE(wait, current);
        
        dbg("ftdi_sio_serial_write port %d, %d bytes", port->number, count);
@@ -338,10+349,16 @@ static int ftdi_sio_write (struct usb_serial_port *port, int from_user,
                usb_serial_debug_data (__FILE__, __FUNCTION__, count, first_byte);
                
                /* send the data out the bulk port */
-               port->write_urb->transfer_buffer_length = count;
-
-               if (usb_submit_urb(port->write_urb))
-                       err("usb_submit_urb(write bulk) failed");
+               FILL_BULK_URB(port->write_urb, serial->dev, 
+                             usb_sndbulkpipe(serial->dev, port->bulk_out_endpointAddress),
+                             port->write_urb->transfer_buffer, count,
+                             ftdi_sio_write_bulk_callback, port);
+               
+               result = usb_submit_urb(port->write_urb);
+               if (result) {
+                       err(__FUNCTION__ " - failed submitting write urb, error %d", result);
+                       return 0;
+               }
 
                dbg("write returning: %d", count - data_offset);
                return (count - data_offset);
@@ -393,6+410,7 @@ static void ftdi_sio_read_bulk_callback (struct urb *urb)
 
        const int data_offset = 2;
        int i;
+       int result;
 
        dbg("ftdi_sio read callback");
 
@@ -429,8+447,14 @@ static void ftdi_sio_read_bulk_callback (struct urb *urb)
        }
 
        /* Continue trying to always read  */
-       if (usb_submit_urb(urb))
-               err("failed resubmitting read urb");
+       FILL_BULK_URB(urb, serial->dev, 
+                     usb_rcvbulkpipe(serial->dev, port->bulk_in_endpointAddress),
+                     urb->transfer_buffer, urb->transfer_buffer_length,
+                     ftdi_sio_read_bulk_callback, port);
+
+       result = usb_submit_urb(urb);
+       if (result)
+               err(__FUNCTION__ " - failed resubmitting read urb, error %d", result);
 
        return;
 } /* ftdi_sio_serial_read_bulk_callback */
index 7a1d026..9c509ff 100644 (file)
   Tip 'o the hat to Linuxcare for supporting staff in their work on
   open source projects.
 
+ (10/05/2000) gkh
+       Fixed bug with urb->dev not being set properly, now that the usb
+       core needs it.
+
   Wed Jul 19 14:00:42 EST 2000 gkh
        Added module_init and module_exit functions to handle the fact that this
        driver is a loadable module now.
@@ -202,6+206,7 @@ static int keyspan_write(struct usb_serial_port *port, int from_user,
 
                /* send the data out the bulk port */
                s_priv->out_urbs[current_urb]->transfer_buffer_length = count + 1;
+               s_priv->out_urbs[current_urb]->dev = serial->dev;
 
                if (usb_submit_urb(s_priv->out_urbs[current_urb])) {
                        dbg("usb_submit_urb(write bulk) failed");
@@ -234,13+239,26 @@ static void keyspan_write_bulk_callback (struct urb *urb)
 
 static void keyspan_read_bulk_callback (struct urb *urb)
 {
+       struct usb_serial       *serial = (struct usb_serial *)urb->context;
+       struct usb_serial_port  *port;
        int                     i;
        int                     endpoint;
-       struct usb_serial       *serial;
-       struct usb_serial_port  *port;
        struct tty_struct       *tty;
        unsigned char           *data = urb->transfer_buffer;
 
+       if (serial_paranoia_check (serial, __FUNCTION__))
+               return;
+       port = &serial->port[0];
+       if (port_paranoia_check (port, __FUNCTION__))
+               return;
+
+       if (urb->status) {
+               dbg(__FUNCTION__ " - nonzero read bulk status received: %d", urb->status);
+               return;
+       }
+
+       usb_serial_debug_data (__FILE__, __FUNCTION__, urb->actual_length, data);
+
        endpoint = usb_pipeendpoint(urb->pipe);
 
 
@@ -255,8+273,7 @@ static void keyspan_read_bulk_callback (struct urb *urb)
                        /* If this is one of the data endpoints, stuff it's
                           contents into the tty flip_buffer. */
                case 1:
-               case 2: serial = (struct usb_serial *) urb->context;
-                       port = &serial->port[0];
+               case 2:
                        tty = port->tty;
                        if (urb->actual_length) {
                                for (i = 0; i < urb->actual_length ; ++i) {
@@ -279,7+296,8 @@ static void keyspan_read_bulk_callback (struct urb *urb)
                        break;
        }
                                
-               /* Resubmit urb so we continue receiving */
+       /* Resubmit urb so we continue receiving */
+       urb->dev = serial->dev;
        if (usb_submit_urb(urb)) {
                dbg(__FUNCTION__ "resubmit read urb failed.\n");
        }
@@ -326,6+344,7 @@ static int keyspan_open (struct usb_serial_port *port, struct file *filp)
                /* Start reading from port */
        for (i = 0; i < 4; i++) {
                if (s_priv->in_urbs[i]) {
+                       s_priv->in_urbs[i]->dev = serial->dev;
                        if (usb_submit_urb(s_priv->in_urbs[i])) {
                                dbg(__FUNCTION__ " submit in urb %d failed", i);
                        }
@@ -578,8+597,9 @@ static int keyspan_usa19_send_setup(struct usb_serial *serial, struct usb_serial
                }
                memcpy (s_priv->out_urbs[2]->transfer_buffer, &msg, sizeof(msg));
        
-                       /* send the data out the device on control endpoint */
+               /* send the data out the device on control endpoint */
                s_priv->out_urbs[2]->transfer_buffer_length = sizeof(msg);
+               s_priv->out_urbs[2]->dev = serial->dev;
 
                if (usb_submit_urb(s_priv->out_urbs[2])) {
                        dbg(__FUNCTION__ " usb_submit_urb(setup) failed\n");
index 537ad80..51a1f10 100644 (file)
  *
  * See Documentation/usb/usb-serial.txt for more information on using this driver
  * 
+ * (10/05/2000) gkh
+ *     Fixed bug with urb->dev not being set properly, now that the usb
+ *     core needs it.
+ * 
  * (08/28/2000) gkh
  *     Added locks for SMP safeness.
  *     Fixed MOD_INC and MOD_DEC logic and the ability to open a port more 
@@ -212,6+216,7 @@ static void keyspan_pda_rx_unthrottle (struct usb_serial_port *port)
 {
        /* just restart the receive interrupt URB */
        dbg("keyspan_pda_rx_unthrottle port %d", port->number);
+       port->interrupt_in_urb->dev = port->serial->dev;
        if (usb_submit_urb(port->interrupt_in_urb))
                dbg(" usb_submit_urb(read urb) failed");
        return;
@@ -506,6+511,7 @@ static int keyspan_pda_write(struct usb_serial_port *port, int from_user,
                
                priv->tx_room -= count;
 
+               port->write_urb->dev = port->serial->dev;
                if (usb_submit_urb(port->write_urb)) {
                        dbg(" usb_submit_urb(write bulk) failed");
                        spin_unlock_irqrestore (&port->port_lock, flags);
@@ -627,6+633,7 @@ static int keyspan_pda_open (struct usb_serial_port *port, struct file *filp)
                        keyspan_pda_set_modem_info(serial, 0);
 
                /*Start reading from the device*/
+               port->interrupt_in_urb->dev = serial->dev;
                if (usb_submit_urb(port->interrupt_in_urb))
                        dbg(__FUNCTION__" - usb_submit_urb(read int) failed");
        } else {
index 1d1bd08..dc832fa 100644 (file)
  *
  * Please report both successes and troubles to the author at omninet@kroah.com
  *
+ * (10/05/2000) gkh
+ *     Fixed bug with urb->dev not being set properly, now that the usb
+ *     core needs it.
+ * 
  * (08/28/2000) gkh
  *     Added locks for SMP safeness.
  *     Fixed MOD_INC and MOD_DEC logic and the ability to open a port more 
@@ -129,6+133,7 @@ static int omninet_open (struct usb_serial_port *port, struct file *filp)
        struct usb_serial_port  *wport;
        struct omninet_data     *od;
        unsigned long           flags;
+       int                     result;
 
        if (port_paranoia_check (port, __FUNCTION__))
                return -ENODEV;
@@ -162,8+167,13 @@ static int omninet_open (struct usb_serial_port *port, struct file *filp)
                wport->tty = port->tty;
 
                /* Start reading from the device */
-               if (usb_submit_urb(port->read_urb))
-                       dbg(__FUNCTION__" - read bulk (%p) failed", port->read_urb);
+               FILL_BULK_URB(port->read_urb, serial->dev, 
+                             usb_rcvbulkpipe(serial->dev, port->bulk_in_endpointAddress),
+                             port->read_urb->transfer_buffer, port->read_urb->transfer_buffer_length,
+                             omninet_read_bulk_callback, port);
+               result = usb_submit_urb(port->read_urb);
+               if (result)
+                       err(__FUNCTION__ " - failed submitting read urb, error %d", result);
        }
 
        spin_unlock_irqrestore (&port->port_lock, flags);
@@ -222,6+232,7 @@ static void omninet_read_bulk_callback (struct urb *urb)
        struct omninet_header   *header = (struct omninet_header *) &data[0];
 
        int i;
+       int result;
 
 //     dbg("omninet_read_bulk_callback");
 
@@ -255,8+266,13 @@ static void omninet_read_bulk_callback (struct urb *urb)
        }
 
        /* Continue trying to always read  */
-       if (usb_submit_urb(urb))
-               dbg(__FUNCTION__" - failed resubmitting read urb");
+       FILL_BULK_URB(urb, serial->dev, 
+                     usb_rcvbulkpipe(serial->dev, port->bulk_in_endpointAddress),
+                     urb->transfer_buffer, urb->transfer_buffer_length,
+                     omninet_read_bulk_callback, port);
+       result = usb_submit_urb(urb);
+       if (result)
+               err(__FUNCTION__ " - failed resubmitting read urb, error %d", result);
 
        return;
 }
@@ -270,11+286,7 @@ static int omninet_write (struct usb_serial_port *port, int from_user, const uns
        struct omninet_header   *header = (struct omninet_header *) wport->write_urb->transfer_buffer;
 
        unsigned long           flags;
-/*
-#ifdef DEBUG
-       int i;
-#endif
-*/
+       int                     result;
 
 //     dbg("omninet_write port %d", port->number);
 
@@ -282,23+294,13 @@ static int omninet_write (struct usb_serial_port *port, int from_user, const uns
                dbg(__FUNCTION__" - write request of 0 bytes");
                return (0);
        }
-/*
-#ifdef DEBUG
-       printk (KERN_DEBUG __FILE__ ": omninet_write %d: ", count);
-               for (i = 0; i < count; i++) {
-                       if( isalpha(buf[i]) )
-                               printk ("%c ", buf[i]);
-                       else
-                               printk ("%.2x ", buf[i]);
-               }
-               printk ("\n");
-#endif
-*/
        if (wport->write_urb->status == -EINPROGRESS) {
                dbg (__FUNCTION__" - already writing");
                return (0);
        }
 
+       usb_serial_debug_data (__FILE__, __FUNCTION__, count, buf);
+       
        spin_lock_irqsave (&port->port_lock, flags);
        
        count = (count > OMNINET_BULKOUTSIZE) ? OMNINET_BULKOUTSIZE : count;
@@ -319,8+321,10 @@ static int omninet_write (struct usb_serial_port *port, int from_user, const uns
        /* send the data out the bulk port, always 64 bytes */
        wport->write_urb->transfer_buffer_length = 64;
 
-       if (usb_submit_urb(wport->write_urb)) {
-               dbg(__FUNCTION__" - usb_submit_urb(write bulk) failed");
+       wport->write_urb->dev = serial->dev;
+       result = usb_submit_urb(wport->write_urb);
+       if (result) {
+               err(__FUNCTION__ " - failed submitting write urb, error %d", result);
                spin_unlock_irqrestore (&port->port_lock, flags);
                return 0;
        }
index b589dec..5dde774 100644 (file)
  *
  * See Documentation/usb/usb-serial.txt for more information on using this driver
  *
+ * (10/05/2000) gkh
+ *     Added interrupt_in_endpointAddress and bulk_in_endpointAddress to help
+ *     fix bug with urb->dev not being set properly, now that the usb core
+ *     needs it.
+ * 
  * (09/11/2000) gkh
  *     Added usb_serial_debug_data function to help get rid of #DEBUG in the
  *     drivers.
@@ -57,9+62,11 @@ struct usb_serial_port {
 
        unsigned char *         interrupt_in_buffer;
        struct urb *            interrupt_in_urb;
+       __u8                    interrupt_in_endpointAddress;
 
        unsigned char *         bulk_in_buffer;
        struct urb *            read_urb;
+       __u8                    bulk_in_endpointAddress;
 
        unsigned char *         bulk_out_buffer;
        int                     bulk_out_size;
index 86c8755..902a4e1 100644 (file)
  *
  * See Documentation/usb/usb-serial.txt for more information on using this driver
  * 
+ * (10/05/2000) gkh
+ *     Fixed bug with urb->dev not being set properly, now that the usb
+ *     core needs it.
+ * 
  * (09/11/2000) gkh
  *     Removed DEBUG #ifdefs with call to usb_serial_debug_data
  *
@@ -693,6+697,7 @@ static int generic_open (struct usb_serial_port *port, struct file *filp)
 {
        struct usb_serial *serial = port->serial;
        unsigned long flags;
+       int result;
 
        if (port_paranoia_check (port, __FUNCTION__))
                return -ENODEV;
@@ -709,9+714,17 @@ static int generic_open (struct usb_serial_port *port, struct file *filp)
 
                /* if we have a bulk interrupt, start reading from it */
                if (serial->num_bulk_in) {
-                       /*Start reading from the device*/
-                       if (usb_submit_urb(port->read_urb))
-                               dbg(__FUNCTION__ " - usb_submit_urb(read bulk) failed");
+                       /* Start reading from the device */
+                       FILL_BULK_URB(port->read_urb, serial->dev, 
+                                     usb_rcvbulkpipe(serial->dev, port->bulk_in_endpointAddress),
+                                     port->read_urb->transfer_buffer, port->read_urb->transfer_buffer_length,
+                                     ((serial->type->read_bulk_callback) ?
+                                      serial->type->read_bulk_callback :
+                                      generic_read_bulk_callback), 
+                                     port);
+                       result = usb_submit_urb(port->read_urb);
+                       if (result)
+                               err(__FUNCTION__ " - failed resubmitting read urb, error %d", result);
                }
        }
        
@@ -751,6+764,7 @@ static int generic_write (struct usb_serial_port *port, int from_user, const uns
 {
        struct usb_serial *serial = port->serial;
        unsigned long flags;
+       int result;
 
        dbg(__FUNCTION__ " - port %d", port->number);
 
@@ -778,11+792,19 @@ static int generic_write (struct usb_serial_port *port, int from_user, const uns
                        memcpy (port->write_urb->transfer_buffer, buf, count);
                }  
 
-               /* send the data out the bulk port */
-               port->write_urb->transfer_buffer_length = count;
+               /* set up our urb */
+               FILL_BULK_URB(port->write_urb, serial->dev, 
+                             usb_sndbulkpipe(serial->dev, port->bulk_out_endpointAddress),
+                             port->write_urb->transfer_buffer, count,
+                             ((serial->type->write_bulk_callback) ? 
+                              serial->type->write_bulk_callback : 
+                              generic_write_bulk_callback), 
+                             port);
 
-               if (usb_submit_urb(port->write_urb)) {
-                       dbg(__FUNCTION__ " - usb_submit_urb(write bulk) failed");
+               /* send the data out the bulk port */
+               result = usb_submit_urb(port->write_urb);
+               if (result) {
+                       err(__FUNCTION__ " - failed submitting write urb, error %d", result);
                        spin_unlock_irqrestore (&port->port_lock, flags);
                        return 0;
                }
@@ -835,6+857,7 @@ static void generic_read_bulk_callback (struct urb *urb)
        struct tty_struct *tty;
        unsigned char *data = urb->transfer_buffer;
        int i;
+       int result;
 
        dbg(__FUNCTION__ " - port %d", port->number);
        
@@ -859,10+882,16 @@ static void generic_read_bulk_callback (struct urb *urb)
        }
 
        /* Continue trying to always read  */
-       if (usb_submit_urb(urb))
-               dbg(__FUNCTION__ " - failed resubmitting read urb");
-
-       return;
+       FILL_BULK_URB(port->read_urb, serial->dev, 
+                     usb_rcvbulkpipe(serial->dev, port->bulk_in_endpointAddress),
+                     port->read_urb->transfer_buffer, port->read_urb->transfer_buffer_length,
+                     ((serial->type->read_bulk_callback) ?
+                      serial->type->read_bulk_callback :
+                      generic_read_bulk_callback), 
+                     port);
+       result = usb_submit_urb(port->read_urb);
+       if (result)
+               err(__FUNCTION__ " - failed resubmitting read urb, error %d", result);
 }
 
 
@@ -1071,6+1100,7 @@ static void * usb_serial_probe(struct usb_device *dev, unsigned int ifnum)
                        goto probe_error;
                }
                buffer_size = endpoint->wMaxPacketSize;
+               port->bulk_in_endpointAddress = endpoint->bEndpointAddress;
                port->bulk_in_buffer = kmalloc (buffer_size, GFP_KERNEL);
                if (!port->bulk_in_buffer) {
                        err("Couldn't allocate bulk_in_buffer");
@@ -1119,6+1149,7 @@ static void * usb_serial_probe(struct usb_device *dev, unsigned int ifnum)
                        goto probe_error;
                }
                buffer_size = endpoint->wMaxPacketSize;
+               port->interrupt_in_endpointAddress = endpoint->bEndpointAddress;
                port->interrupt_in_buffer = kmalloc (buffer_size, GFP_KERNEL);
                if (!port->interrupt_in_buffer) {
                        err("Couldn't allocate interrupt_in_buffer");
@@ -1136,6+1167,7 @@ static void * usb_serial_probe(struct usb_device *dev, unsigned int ifnum)
        /* we don't use num_ports here cauz some devices have more endpoint pairs than ports */
        max_endpoints = MAX(num_bulk_in, num_bulk_out);
        max_endpoints = MAX(max_endpoints, num_interrupt_in);
+       dbg (__FUNCTION__ " - setting up %d port structures for this device", max_endpoints);
        for (i = 0; i < max_endpoints; ++i) {
                port = &serial->port[i];
                port->number = i + serial->minor;
index 4245c13..868333c 100644 (file)
  *
  * See Documentation/usb/usb-serial.txt for more information on using this driver
  * 
+ * (10/05/2000) gkh
+ *     Fixed bug with urb->dev not being set properly, now that the usb
+ *     core needs it.
+ * 
  * (09/11/2000) gkh
  *     Got rid of always calling kmalloc for every urb we wrote out to the
  *     device.
@@ -138,7+142,9 @@ static int          bytes_out;
  ******************************************************************************/
 static int visor_open (struct usb_serial_port *port, struct file *filp)
 {
+       struct usb_serial *serial = port->serial;
        unsigned long flags;
+       int result;
 
        if (port_paranoia_check (port, __FUNCTION__))
                return -ENODEV;
@@ -155,9+161,14 @@ static int visor_open (struct usb_serial_port *port, struct file *filp)
                bytes_in = 0;
                bytes_out = 0;
 
-               /*Start reading from the device*/
-               if (usb_submit_urb(port->read_urb))
-                       dbg(__FUNCTION__  " - usb_submit_urb(read bulk) failed");
+               /* Start reading from the device */
+               FILL_BULK_URB(port->read_urb, serial->dev, 
+                             usb_rcvbulkpipe(serial->dev, port->bulk_in_endpointAddress),
+                             port->read_urb->transfer_buffer, port->read_urb->transfer_buffer_length,
+                             visor_read_bulk_callback, port);
+               result = usb_submit_urb(port->read_urb);
+               if (result)
+                       err(__FUNCTION__ " - failed submitting read urb, error %d", result);
        }
        
        spin_unlock_irqrestore (&port->port_lock, flags);
@@ -301,15+312,22 @@ static void visor_write_bulk_callback (struct urb *urb)
 static void visor_read_bulk_callback (struct urb *urb)
 {
        struct usb_serial_port *port = (struct usb_serial_port *)urb->context;
+       struct usb_serial *serial = get_usb_serial (port, __FUNCTION__);
        struct tty_struct *tty;
        unsigned char *data = urb->transfer_buffer;
        int i;
+       int result;
 
        if (port_paranoia_check (port, __FUNCTION__))
                return;
 
        dbg(__FUNCTION__ " - port %d", port->number);
 
+       if (!serial) {
+               dbg(__FUNCTION__ " - bad serial pointer, exiting");
+               return;
+       }
+
        if (urb->status) {
                dbg(__FUNCTION__ " - nonzero read bulk status received: %d", urb->status);
                return;
@@ -327,8+345,13 @@ static void visor_read_bulk_callback (struct urb *urb)
        }
 
        /* Continue trying to always read  */
-       if (usb_submit_urb(urb))
-               dbg(__FUNCTION__ " - failed resubmitting read urb");
+       FILL_BULK_URB(port->read_urb, serial->dev, 
+                     usb_rcvbulkpipe(serial->dev, port->bulk_in_endpointAddress),
+                     port->read_urb->transfer_buffer, port->read_urb->transfer_buffer_length,
+                     visor_read_bulk_callback, port);
+       result = usb_submit_urb(port->read_urb);
+       if (result)
+               err(__FUNCTION__ " - failed resubmitting read urb, error %d", result);
        return;
 }
 
@@ -352,13+375,16 @@ static void visor_throttle (struct usb_serial_port *port)
 static void visor_unthrottle (struct usb_serial_port *port)
 {
        unsigned long flags;
+       int result;
 
        dbg(__FUNCTION__ " - port %d", port->number);
 
        spin_lock_irqsave (&port->port_lock, flags);
 
-       if (usb_submit_urb (port->read_urb))
-               dbg(__FUNCTION__ " - usb_submit_urb(read bulk) failed");
+       port->read_urb->dev = port->serial->dev;
+       result = usb_submit_urb(port->read_urb);
+       if (result)
+               err(__FUNCTION__ " - failed submitting read urb, error %d", result);
 
        spin_unlock_irqrestore (&port->port_lock, flags);
 
index 7302b72..55abab3 100644 (file)
  *
  * See Documentation/usb/usb-serial.txt for more information on using this driver
  * 
+ * (10/05/2000) gkh
+ *     Fixed bug with urb->dev not being set properly, now that the usb
+ *     core needs it.
+ * 
+ * (10/03/2000) smd
+ *     firmware is improved to guard against crap sent to device
+ *     firmware now replies CMD_FAILURE on bad things
+ *     read_callback fix you provided for private info struct
+ *     command_finished now indicates success or fail
+ *     setup_port struct now packed to avoid gcc padding
+ *     firmware uses 1 based port numbering, driver now handles that
+ *
  * (09/11/2000) gkh
  *     Removed DEBUG #ifdefs with call to usb_serial_debug_data
  *
@@ -148,8+160,11 @@ static void command_port_write_callback (struct urb *urb)
 
 static void command_port_read_callback (struct urb *urb)
 {
-       struct whiteheat_private *info = (struct whiteheat_private *)urb->context;
+       struct usb_serial_port *port = (struct usb_serial_port *)urb->context;
+       struct usb_serial *serial = get_usb_serial (port, __FUNCTION__);
+       struct whiteheat_private *info;
        unsigned char *data = urb->transfer_buffer;
+       int result;
 
        dbg (__FUNCTION__);
 
@@ -158,15+173,39 @@ static void command_port_read_callback (struct urb *urb)
                return;
        }
 
+       if (!serial) {
+               dbg(__FUNCTION__ " - bad serial pointer, exiting");
+               return;
+       }
+       
        usb_serial_debug_data (__FILE__, __FUNCTION__, urb->actual_length, data);
 
+       info = (struct whiteheat_private *)port->private;
+       if (!info) {
+               dbg (__FUNCTION__ " - info is NULL, exiting.");
+               return;
+       }
+
        /* right now, if the command is COMMAND_COMPLETE, just flip the bit saying the command finished */
        /* in the future we're going to have to pay attention to the actual command that completed */
        if (data[0] == WHITEHEAT_CMD_COMPLETE) {
-               info->command_finished = TRUE;
+               info->command_finished = WHITEHEAT_CMD_COMPLETE;
+               wake_up_interruptible(&info->wait_command);
        }
        
-       return;
+       if (data[0] == WHITEHEAT_CMD_FAILURE) {
+               info->command_finished = WHITEHEAT_CMD_FAILURE;
+               wake_up_interruptible(&info->wait_command);
+       }
+       
+       /* Continue trying to always read */
+       FILL_BULK_URB(port->read_urb, serial->dev, 
+                     usb_rcvbulkpipe(serial->dev, port->bulk_in_endpointAddress),
+                     port->read_urb->transfer_buffer, port->read_urb->transfer_buffer_length,
+                     command_port_read_callback, port);
+       result = usb_submit_urb(port->read_urb);
+       if (result)
+               dbg(__FUNCTION__ " - failed resubmitting read urb, error %d", result);
 }
 
 
@@ -187,6+226,7 @@ static int whiteheat_send_cmd (struct usb_serial *serial, __u8 command, __u8 *da
        transfer_buffer[0] = command;
        memcpy (&transfer_buffer[1], data, datasize);
        port->write_urb->transfer_buffer_length = datasize + 1;
+       port->write_urb->dev = serial->dev;
        if (usb_submit_urb (port->write_urb)) {
                dbg (__FUNCTION__" - submit urb failed");
                return -1;
@@ -203,6+243,16 @@ static int whiteheat_send_cmd (struct usb_serial *serial, __u8 command, __u8 *da
                return -1;
        }
 
+       if (info->command_finished == WHITEHEAT_CMD_FAILURE) {
+               dbg (__FUNCTION__ " - command failed.");
+               return -1;
+       }
+
+       if (info->command_finished == WHITEHEAT_CMD_COMPLETE) {
+               dbg (__FUNCTION__ " - command completed.");
+               return 0;
+       }
+
        return 0;
 }
 
@@ -212,6+262,7 @@ static int whiteheat_open (struct usb_serial_port *port, struct file *filp)
        struct whiteheat_min_set        open_command;
        struct usb_serial_port          *command_port;
        struct whiteheat_private        *info;
+       int                             result;
 
        dbg(__FUNCTION__" - port %d", port->number);
 
@@ -234,15+285,20 @@ static int whiteheat_open (struct usb_serial_port *port, struct file *filp)
                command_port->private = info;
                command_port->write_urb->complete = command_port_write_callback;
                command_port->read_urb->complete = command_port_read_callback;
-               usb_submit_urb (command_port->read_urb);        
+               command_port->read_urb->dev = port->serial->dev;
+               command_port->tty = port->tty;          /* need this to "fake" our our sanity check macros */
+               usb_submit_urb (command_port->read_urb);
        }
        
        /* Start reading from the device */
-       if (usb_submit_urb(port->read_urb))
-               dbg(__FUNCTION__ " - usb_submit_urb(read bulk) failed");
+       port->read_urb->dev = port->serial->dev;
+       result = usb_submit_urb(port->read_urb);
+       if (result)
+               err(__FUNCTION__ " - failed submitting read urb, error %d", result);
 
        /* send an open port command */
-       open_command.port = port->number - port->serial->minor;
+       /* firmware uses 1 based port numbering */
+       open_command.port = port->number - port->serial->minor + 1;
        whiteheat_send_cmd (port->serial, WHITEHEAT_OPEN, (__u8 *)&open_command, sizeof(open_command));
 
        /* Need to do device specific setup here (control lines, baud rate, etc.) */
@@ -261,7+317,8 @@ static void whiteheat_close(struct usb_serial_port *port, struct file * filp)
        dbg(__FUNCTION__ " - port %d", port->number);
        
        /* send a close command to the port */
-       close_command.port = port->number - port->serial->minor;
+       /* firmware uses 1 based port numbering */
+       close_command.port = port->number - port->serial->minor + 1;
        whiteheat_send_cmd (port->serial, WHITEHEAT_CLOSE, (__u8 *)&close_command, sizeof(close_command));
 
        /* Need to change the control lines here */
@@ -303,6+360,10 @@ static void whiteheat_set_termios (struct usb_serial_port *port, struct termios
                return;
        }
        
+       /* set the port number */
+       /* firmware uses 1 based port numbering */
+       port_settings.port = port->number + 1;
+
        /* get the byte size */
        switch (cflag & CSIZE) {
                case CS5:       port_settings.bits = 5;   break;
@@ -337,10+398,10 @@ static void whiteheat_set_termios (struct usb_serial_port *port, struct termios
        else
                port_settings.hflow = 0;
        dbg(__FUNCTION__ " - hardware flow control = %s %s %s %s",
-           (port_settings.hflow | WHITEHEAT_CTS_FLOW) ? "CTS" : "",
-           (port_settings.hflow | WHITEHEAT_RTS_FLOW) ? "RTS" : "",
-           (port_settings.hflow | WHITEHEAT_DSR_FLOW) ? "DSR" : "",
-           (port_settings.hflow | WHITEHEAT_DTR_FLOW) ? "DTR" : "");
+           (port_settings.hflow & WHITEHEAT_CTS_FLOW) ? "CTS" : "",
+           (port_settings.hflow & WHITEHEAT_RTS_FLOW) ? "RTS" : "",
+           (port_settings.hflow & WHITEHEAT_DSR_FLOW) ? "DSR" : "",
+           (port_settings.hflow & WHITEHEAT_DTR_FLOW) ? "DTR" : "");
        
        /* determine software flow control */
        if (I_IXOFF(port->tty))
@@ -485,7+546,8 @@ static void set_command (struct usb_serial_port *port, unsigned char state, unsi
        struct whiteheat_rdb_set rdb_command;
        
        /* send a set rts command to the port */
-       rdb_command.port = port->number - port->serial->minor;
+       /* firmware uses 1 based port numbering */
+       rdb_command.port = port->number - port->serial->minor + 1;
        rdb_command.state = state;
 
        whiteheat_send_cmd (port->serial, command, (__u8 *)&rdb_command, sizeof(rdb_command));
index 970a555..99cdbb6 100644 (file)
 #define WHITEHEAT_ECHO                 14      /* send data to the indicated IN endpoint */
 #define WHITEHEAT_DO_TEST              15      /* perform the specified test */
 #define WHITEHEAT_CMD_COMPLETE         16      /* reply for certain commands */
+#define WHITEHEAT_CMD_FAILURE          17      /* reply for failed commands */
 
 /* Data for the WHITEHEAT_SETUP_PORT command */
 #define WHITEHEAT_CTS_FLOW             0x08
@@ -64,7+65,7 @@ struct whiteheat_port_settings {
                                 *      RTS (0x80) (RTS off/on when receiver fills/empties)
                                 *      DTR (0x02) (DTR off/on when receiver fills/empties) */
        __u8    lloop;          /* local loopback 0 or 1, default 0 */
-};
+} __attribute__ ((packed));
 
 /* data for WHITEHEAT_SET_RTS, WHITEHEAT_SET_DTR, and WHITEHEAT_SET_BREAK commands */
 struct whiteheat_rdb_set {
index 7d942ba..e50a9e8 100644 (file)
@@ -47,159+47,154 @@ struct whiteheat_hex_record {
 };
 
 static const struct whiteheat_hex_record whiteheat_firmware[] = {
-{ 0x0000,      3,      {0x02, 0x93, 0xa9} },
+{ 0x0000,      3,      {0x02, 0x95, 0x09} },
 { 0x0003,      3,      {0x02, 0x13, 0x12} },
-{ 0x000b,      3,      {0x02, 0x0a, 0x80} },
-{ 0x0033,      3,      {0x02, 0x08, 0x15} },
+{ 0x000b,      3,      {0x02, 0x0a, 0x91} },
+{ 0x0033,      3,      {0x02, 0x08, 0x1b} },
 { 0x0043,      3,      {0x02, 0x0a, 0x00} },
-{ 0x005b,      3,      {0x02, 0x82, 0x31} },
+{ 0x005b,      3,      {0x02, 0x1a, 0xd2} },
 { 0x0370,      16,     {0x90, 0x7f, 0xe9, 0xe0, 0x70, 0x03, 0x02, 0x04, 0x73, 0x14, 0x70, 0x03, 0x02, 0x04, 0xe7, 0x24} },
-{ 0x0380,      16,     {0xfe, 0x70, 0x03, 0x02, 0x05, 0x45, 0x24, 0xfb, 0x70, 0x03, 0x02, 0x04, 0x64, 0x14, 0x70, 0x03} },
+{ 0x0380,      16,     {0xfe, 0x70, 0x03, 0x02, 0x05, 0x4f, 0x24, 0xfb, 0x70, 0x03, 0x02, 0x04, 0x64, 0x14, 0x70, 0x03} },
 { 0x0390,      16,     {0x02, 0x04, 0x52, 0x14, 0x70, 0x03, 0x02, 0x04, 0x3a, 0x14, 0x70, 0x03, 0x02, 0x04, 0x49, 0x24} },
-{ 0x03a0,      16,     {0x05, 0x60, 0x03, 0x02, 0x05, 0x94, 0x90, 0x7f, 0xeb, 0xe0, 0x24, 0xfe, 0x60, 0x16, 0x14, 0x60} },
+{ 0x03a0,      16,     {0x05, 0x60, 0x03, 0x02, 0x05, 0x9e, 0x90, 0x7f, 0xeb, 0xe0, 0x24, 0xfe, 0x60, 0x16, 0x14, 0x60} },
 { 0x03b0,      16,     {0x36, 0x24, 0x02, 0x70, 0x7b, 0x74, 0x12, 0x90, 0x7f, 0xd4, 0xf0, 0x74, 0x00, 0x90, 0x7f, 0xd5} },
-{ 0x03c0,      16,     {0xf0, 0x02, 0x05, 0x9b, 0x90, 0x7f, 0xea, 0xe0, 0xff, 0x12, 0x09, 0x7b, 0xea, 0x49, 0x60, 0x0d} },
-{ 0x03d0,      16,     {0xea, 0x90, 0x7f, 0xd4, 0xf0, 0xe9, 0x90, 0x7f, 0xd5, 0xf0, 0x02, 0x05, 0x9b, 0x90, 0x7f, 0xb4} },
-{ 0x03e0,      16,     {0xe0, 0x44, 0x01, 0xf0, 0x02, 0x05, 0x9b, 0x90, 0x7f, 0xea, 0xe0, 0xff, 0x12, 0x09, 0x3a, 0xea} },
-{ 0x03f0,      16,     {0x49, 0x60, 0x33, 0x12, 0x9b, 0x72, 0xf5, 0x4b, 0x90, 0x7f, 0xee, 0xe0, 0xff, 0xe5, 0x4b, 0xd3} },
+{ 0x03c0,      16,     {0xf0, 0x02, 0x05, 0xa5, 0x90, 0x7f, 0xea, 0xe0, 0xff, 0x12, 0x09, 0x81, 0xea, 0x49, 0x60, 0x0d} },
+{ 0x03d0,      16,     {0xea, 0x90, 0x7f, 0xd4, 0xf0, 0xe9, 0x90, 0x7f, 0xd5, 0xf0, 0x02, 0x05, 0xa5, 0x90, 0x7f, 0xb4} },
+{ 0x03e0,      16,     {0xe0, 0x44, 0x01, 0xf0, 0x02, 0x05, 0xa5, 0x90, 0x7f, 0xea, 0xe0, 0xff, 0x12, 0x09, 0x40, 0xea} },
+{ 0x03f0,      16,     {0x49, 0x60, 0x33, 0x12, 0x9f, 0x48, 0xf5, 0x4b, 0x90, 0x7f, 0xee, 0xe0, 0xff, 0xe5, 0x4b, 0xd3} },
 { 0x0400,      16,     {0x9f, 0x40, 0x03, 0xe0, 0xf5, 0x4b, 0xe5, 0x4b, 0xd3, 0x94, 0x40, 0x40, 0x03, 0x75, 0x4b, 0x40} },
-{ 0x0410,      16,     {0xae, 0x02, 0xaf, 0x01, 0x7c, 0x7f, 0x7d, 0x00, 0xab, 0x4b, 0x12, 0x8d, 0xd9, 0x90, 0x7f, 0xb5} },
-{ 0x0420,      16,     {0xe5, 0x4b, 0xf0, 0x02, 0x05, 0x9b, 0x90, 0x7f, 0xb4, 0xe0, 0x44, 0x01, 0xf0, 0x02, 0x05, 0x9b} },
-{ 0x0430,      16,     {0x90, 0x7f, 0xb4, 0xe0, 0x44, 0x01, 0xf0, 0x02, 0x05, 0x9b, 0x90, 0x7f, 0x00, 0xe5, 0x21, 0xf0} },
-{ 0x0440,      16,     {0x90, 0x7f, 0xb5, 0x74, 0x01, 0xf0, 0x02, 0x05, 0x9b, 0x90, 0x7f, 0xea, 0xe0, 0xf5, 0x21, 0x02} },
-{ 0x0450,      16,     {0x05, 0x9b, 0x90, 0x7f, 0xea, 0xe0, 0xf5, 0x31, 0xd2, 0x02, 0x43, 0x88, 0x10, 0xd2, 0xeb, 0xd2} },
-{ 0x0460,      16,     {0xa8, 0x02, 0x05, 0x9b, 0x90, 0x7f, 0x00, 0xe5, 0x31, 0xf0, 0x90, 0x7f, 0xb5, 0x74, 0x01, 0xf0} },
-{ 0x0470,      16,     {0x02, 0x05, 0x9b, 0x90, 0x7f, 0xe8, 0xe0, 0x24, 0x7f, 0x60, 0x24, 0x14, 0x60, 0x31, 0x24, 0x02} },
+{ 0x0410,      16,     {0xae, 0x02, 0xaf, 0x01, 0x7c, 0x7f, 0x7d, 0x00, 0xab, 0x4b, 0x12, 0x8e, 0x81, 0x90, 0x7f, 0xb5} },
+{ 0x0420,      16,     {0xe5, 0x4b, 0xf0, 0x02, 0x05, 0xa5, 0x90, 0x7f, 0xb4, 0xe0, 0x44, 0x01, 0xf0, 0x02, 0x05, 0xa5} },
+{ 0x0430,      16,     {0x90, 0x7f, 0xb4, 0xe0, 0x44, 0x01, 0xf0, 0x02, 0x05, 0xa5, 0x90, 0x7f, 0x00, 0xe5, 0x21, 0xf0} },
+{ 0x0440,      16,     {0x90, 0x7f, 0xb5, 0x74, 0x01, 0xf0, 0x02, 0x05, 0xa5, 0x90, 0x7f, 0xea, 0xe0, 0xf5, 0x21, 0x02} },
+{ 0x0450,      16,     {0x05, 0xa5, 0x90, 0x7f, 0xea, 0xe0, 0xf5, 0x31, 0xd2, 0x02, 0x43, 0x88, 0x10, 0xd2, 0xeb, 0xd2} },
+{ 0x0460,      16,     {0xa8, 0x02, 0x05, 0xa5, 0x90, 0x7f, 0x00, 0xe5, 0x31, 0xf0, 0x90, 0x7f, 0xb5, 0x74, 0x01, 0xf0} },
+{ 0x0470,      16,     {0x02, 0x05, 0xa5, 0x90, 0x7f, 0xe8, 0xe0, 0x24, 0x7f, 0x60, 0x24, 0x14, 0x60, 0x31, 0x24, 0x02} },
 { 0x0480,      16,     {0x70, 0x5b, 0xa2, 0x00, 0xe4, 0x33, 0xff, 0x25, 0xe0, 0xff, 0xa2, 0x05, 0xe4, 0x33, 0x4f, 0x90} },
-{ 0x0490,      16,     {0x7f, 0x00, 0xf0, 0xe4, 0xa3, 0xf0, 0x90, 0x7f, 0xb5, 0x74, 0x02, 0xf0, 0x02, 0x05, 0x9b, 0xe4} },
-{ 0x04a0,      16,     {0x90, 0x7f, 0x00, 0xf0, 0xa3, 0xf0, 0x90, 0x7f, 0xb5, 0x74, 0x02, 0xf0, 0x02, 0x05, 0x9b, 0x90} },
+{ 0x0490,      16,     {0x7f, 0x00, 0xf0, 0xe4, 0xa3, 0xf0, 0x90, 0x7f, 0xb5, 0x74, 0x02, 0xf0, 0x02, 0x05, 0xa5, 0xe4} },
+{ 0x04a0,      16,     {0x90, 0x7f, 0x00, 0xf0, 0xa3, 0xf0, 0x90, 0x7f, 0xb5, 0x74, 0x02, 0xf0, 0x02, 0x05, 0xa5, 0x90} },
 { 0x04b0,      16,     {0x7f, 0xec, 0xe0, 0xf4, 0x54, 0x80, 0xff, 0xc4, 0x54, 0x0f, 0xff, 0xe0, 0x54, 0x07, 0x2f, 0x25} },
 { 0x04c0,      16,     {0xe0, 0x24, 0xb4, 0xf5, 0x82, 0xe4, 0x34, 0x7f, 0xf5, 0x83, 0xe0, 0x54, 0x01, 0x90, 0x7f, 0x00} },
-{ 0x04d0,      16,     {0xf0, 0xe4, 0xa3, 0xf0, 0x90, 0x7f, 0xb5, 0x74, 0x02, 0xf0, 0x02, 0x05, 0x9b, 0x90, 0x7f, 0xb4} },
-{ 0x04e0,      16,     {0xe0, 0x44, 0x01, 0xf0, 0x02, 0x05, 0x9b, 0x90, 0x7f, 0xe8, 0xe0, 0x24, 0xfe, 0x60, 0x1d, 0x24} },
-{ 0x04f0,      16,     {0x02, 0x60, 0x03, 0x02, 0x05, 0x9b, 0x90, 0x7f, 0xea, 0xe0, 0xb4, 0x01, 0x05, 0xc2, 0x00, 0x02} },
-{ 0x0500,      16,     {0x05, 0x9b, 0x90, 0x7f, 0xb4, 0xe0, 0x44, 0x01, 0xf0, 0x02, 0x05, 0x9b, 0x90, 0x7f, 0xea, 0xe0} },
-{ 0x0510,      16,     {0x70, 0x2a, 0x90, 0x7f, 0xec, 0xe0, 0xff, 0xf4, 0x54, 0x80, 0xfe, 0xc4, 0x54, 0x0f, 0xfe, 0xef} },
-{ 0x0520,      16,     {0x54, 0x07, 0xfd, 0x2e, 0x25, 0xe0, 0x24, 0xb4, 0xf5, 0x82, 0xe4, 0x34, 0x7f, 0xf5, 0x83, 0xe4} },
-{ 0x0530,      16,     {0xf0, 0x90, 0x7f, 0xd7, 0xed, 0xf0, 0xef, 0x44, 0x20, 0xf0, 0x80, 0x5f, 0x90, 0x7f, 0xb4, 0xe0} },
-{ 0x0540,      16,     {0x44, 0x01, 0xf0, 0x80, 0x56, 0x90, 0x7f, 0xe8, 0xe0, 0x24, 0xfe, 0x60, 0x18, 0x24, 0x02, 0x70} },
-{ 0x0550,      16,     {0x4a, 0x90, 0x7f, 0xea, 0xe0, 0xb4, 0x01, 0x04, 0xd2, 0x00, 0x80, 0x3f, 0x90, 0x7f, 0xb4, 0xe0} },
-{ 0x0560,      16,     {0x44, 0x01, 0xf0, 0x80, 0x36, 0x90, 0x7f, 0xea, 0xe0, 0x70, 0x20, 0x90, 0x7f, 0xec, 0xe0, 0xf4} },
-{ 0x0570,      16,     {0x54, 0x80, 0xff, 0xc4, 0x54, 0x0f, 0xff, 0xe0, 0x54, 0x07, 0x2f, 0x25, 0xe0, 0x24, 0xb4, 0xf5} },
-{ 0x0580,      16,     {0x82, 0xe4, 0x34, 0x7f, 0xf5, 0x83, 0x74, 0x01, 0xf0, 0x80, 0x10, 0x90, 0x7f, 0xb4, 0xe0, 0x44} },
-{ 0x0590,      16,     {0x01, 0xf0, 0x80, 0x07, 0x90, 0x7f, 0xb4, 0xe0, 0x44, 0x01, 0xf0, 0x90, 0x7f, 0xb4, 0xe0, 0x44} },
-{ 0x05a0,      2,      {0x02, 0xf0} },
-{ 0x05a2,      1,      {0x22} },
-{ 0x05a3,      16,     {0x75, 0x47, 0xff, 0x75, 0x46, 0xff, 0x75, 0x45, 0x0f, 0x75, 0x44, 0x00, 0xd2, 0x03, 0xc2, 0x06} },
-{ 0x05b3,      16,     {0xc2, 0x02, 0xc2, 0x00, 0xc2, 0x05, 0xc2, 0x01, 0x90, 0x03, 0x00, 0x74, 0x19, 0xf0, 0xe4, 0x90} },
-{ 0x05c3,      16,     {0x01, 0xbc, 0xf0, 0xc2, 0x04, 0x90, 0x01, 0xc0, 0xf0, 0xa3, 0xf0, 0xc2, 0xaf, 0xc2, 0xa8, 0x12} },
-{ 0x05d3,      16,     {0x0b, 0x8d, 0xe4, 0x90, 0x02, 0xaf, 0xf0, 0x90, 0x01, 0x00, 0xf0, 0xa3, 0xf0, 0xa3, 0xf0, 0xa3} },
-{ 0x05e3,      16,     {0xf0, 0xa3, 0xf0, 0xa3, 0x74, 0x10, 0xf0, 0xa3, 0x74, 0x01, 0xf0, 0xa3, 0x74, 0x08, 0xf0, 0x7e} },
-{ 0x05f3,      16,     {0x01, 0x7f, 0x00, 0x12, 0x19, 0xc1, 0x75, 0x49, 0x12, 0x75, 0x4a, 0x0a, 0x90, 0x01, 0x0b, 0xe0} },
-{ 0x0603,      16,     {0xff, 0x05, 0x4a, 0xe5, 0x4a, 0xac, 0x49, 0x70, 0x02, 0x05, 0x49, 0x14, 0xf5, 0x82, 0x8c, 0x83} },
-{ 0x0613,      16,     {0xef, 0xf0, 0x90, 0x01, 0x0c, 0xe0, 0x44, 0x80, 0xff, 0x05, 0x4a, 0xe5, 0x4a, 0xac, 0x49, 0x70} },
-{ 0x0623,      16,     {0x02, 0x05, 0x49, 0x14, 0xf5, 0x82, 0x8c, 0x83, 0xef, 0xf0, 0x90, 0x01, 0x0d, 0xe0, 0xff, 0x05} },
-{ 0x0633,      16,     {0x4a, 0xe5, 0x4a, 0xac, 0x49, 0x70, 0x02, 0x05, 0x49, 0x14, 0xf5, 0x82, 0x8c, 0x83, 0xef, 0xf0} },
-{ 0x0643,      16,     {0x90, 0x01, 0x0e, 0xe0, 0xff, 0x05, 0x4a, 0xe5, 0x4a, 0xac, 0x49, 0x70, 0x02, 0x05, 0x49, 0x14} },
-{ 0x0653,      16,     {0xf5, 0x82, 0x8c, 0x83, 0xef, 0xf0, 0x90, 0x12, 0x0a, 0xe4, 0x93, 0xff, 0x74, 0x01, 0x93, 0x90} },
-{ 0x0663,      16,     {0x01, 0x1c, 0xcf, 0xf0, 0xa3, 0xef, 0xf0, 0x90, 0x01, 0x1c, 0xe0, 0xff, 0xa3, 0xe0, 0xfe, 0xef} },
-{ 0x0673,      16,     {0x6e, 0xff, 0x90, 0x01, 0x1c, 0xf0, 0xa3, 0xe0, 0x6f, 0xff, 0xf0, 0x90, 0x01, 0x1c, 0xe0, 0x6f} },
-{ 0x0683,      16,     {0xf0, 0xe0, 0xfe, 0xa3, 0xe0, 0xff, 0xe4, 0xfc, 0xfd, 0x75, 0x4f, 0x10, 0x75, 0x50, 0x02, 0x75} },
-{ 0x0693,      16,     {0x51, 0x12, 0x75, 0x52, 0xac, 0x12, 0x90, 0x15, 0x75, 0x49, 0x12, 0x75, 0x4a, 0xb2, 0x90, 0x01} },
-{ 0x06a3,      16,     {0x0d, 0xe0, 0xff, 0x05, 0x4a, 0xe5, 0x4a, 0xac, 0x49, 0x70, 0x02, 0x05, 0x49, 0x14, 0xf5, 0x82} },
-{ 0x06b3,      16,     {0x8c, 0x83, 0xef, 0xf0, 0x90, 0x01, 0x0e, 0xe0, 0xff, 0x05, 0x4a, 0xe5, 0x4a, 0xac, 0x49, 0x70} },
-{ 0x06c3,      16,     {0x02, 0x05, 0x49, 0x14, 0xf5, 0x82, 0x8c, 0x83, 0xef, 0xf0, 0x90, 0x7f, 0x92, 0xe0, 0xff, 0xc4} },
-{ 0x06d3,      16,     {0x54, 0x0f, 0x24, 0x41, 0xff, 0x05, 0x4a, 0xe5, 0x4a, 0xac, 0x49, 0x70, 0x02, 0x05, 0x49, 0x14} },
-{ 0x06e3,      16,     {0xf5, 0x82, 0x8c, 0x83, 0xef, 0xf0, 0x05, 0x4a, 0xe5, 0x4a, 0xae, 0x49, 0x70, 0x02, 0x05, 0x49} },
-{ 0x06f3,      16,     {0x14, 0xf5, 0x82, 0x8e, 0x83, 0xe4, 0xf0, 0x75, 0x82, 0x10, 0x75, 0x83, 0x01, 0xe0, 0xfc, 0xa3} },
-{ 0x0703,      16,     {0xe0, 0xfd, 0xa3, 0xe0, 0xfe, 0xa3, 0xe0, 0xff, 0x90, 0x01, 0x18, 0x12, 0x9d, 0x25, 0x7e, 0x01} },
-{ 0x0713,      16,     {0x7f, 0x18, 0x12, 0x85, 0x08, 0x90, 0x01, 0x18, 0xe0, 0xfc, 0xa3, 0xe0, 0xfd, 0xa3, 0xe0, 0xfe} },
-{ 0x0723,      16,     {0xa3, 0xe0, 0xff, 0x75, 0x4f, 0x0a, 0x75, 0x50, 0x06, 0x75, 0x51, 0x12, 0x75, 0x52, 0xb8, 0x12} },
-{ 0x0733,      16,     {0x90, 0x15, 0xd2, 0xe8, 0x43, 0xd8, 0x20, 0x90, 0x7f, 0xab, 0x74, 0xff, 0xf0, 0x53, 0x91, 0xef} },
-{ 0x0743,      16,     {0x90, 0x7f, 0xaf, 0xe0, 0x44, 0x01, 0xf0, 0x90, 0x7f, 0xae, 0xe0, 0x44, 0x1f, 0xf0, 0xd2, 0xaf} },
-{ 0x0753,      16,     {0x20, 0x01, 0x2e, 0x20, 0x01, 0x2b, 0xa2, 0x03, 0x92, 0x07, 0x12, 0x09, 0xca, 0x75, 0x43, 0x50} },
-{ 0x0763,      16,     {0x75, 0x42, 0x6d, 0x75, 0x41, 0x33, 0x75, 0x40, 0x00, 0x20, 0x01, 0xe4, 0x7f, 0xff, 0x7e, 0xff} },
-{ 0x0773,      16,     {0x7d, 0xff, 0x7c, 0xff, 0x78, 0x40, 0x12, 0x9d, 0x0e, 0xec, 0x4d, 0x4e, 0x4f, 0x60, 0xd1, 0x80} },
-{ 0x0783,      16,     {0xe8, 0x30, 0x01, 0x05, 0x12, 0x03, 0x70, 0xc2, 0x01, 0x30, 0x06, 0x0d, 0x12, 0x0a, 0xed, 0x50} },
-{ 0x0793,      16,     {0x06, 0x12, 0x0b, 0x00, 0x12, 0x0a, 0xf2, 0xc2, 0x06, 0x12, 0x92, 0x38, 0x90, 0x01, 0xbd, 0xe0} },
-{ 0x07a3,      16,     {0x60, 0x10, 0x7e, 0x7b, 0x7f, 0x40, 0x12, 0x8e, 0xc1, 0xe4, 0x90, 0x01, 0xbd, 0xf0, 0x90, 0x7f} },
-{ 0x07b3,      16,     {0xd3, 0xf0, 0x90, 0x02, 0xaf, 0xe0, 0xb4, 0x0f, 0x03, 0x12, 0x95, 0x30, 0x12, 0x99, 0xcc, 0xe4} },
-{ 0x07c3,      16,     {0xff, 0x74, 0x01, 0xa8, 0x07, 0x08, 0x80, 0x02, 0xc3, 0x33, 0xd8, 0xfc, 0xfe, 0x90, 0x01, 0xbc} },
-{ 0x07d3,      16,     {0xe0, 0x5e, 0x60, 0x14, 0x74, 0x27, 0x2f, 0xf8, 0xe6, 0xd3, 0x94, 0x0a, 0x40, 0x04, 0x7e, 0x01} },
-{ 0x07e3,      16,     {0x80, 0x02, 0x7e, 0x00, 0x8e, 0x48, 0x80, 0x03, 0x75, 0x48, 0x01, 0x74, 0x68, 0x2f, 0xf5, 0x82} },
-{ 0x07f3,      16,     {0xe4, 0x34, 0x20, 0xf5, 0x83, 0xe5, 0x48, 0xf0, 0x0f, 0xbf, 0x04, 0xc5, 0xe5, 0x2b, 0xd3, 0x94} },
-{ 0x0803,      16,     {0x0a, 0x40, 0x04, 0x7f, 0x01, 0x80, 0x02, 0x7f, 0x00, 0x90, 0x20, 0x6c, 0xef, 0xf0, 0x02, 0x07} },
-{ 0x0813,      1,      {0x84} },
-{ 0x0814,      1,      {0x22} },
-{ 0x0815,      4,      {0x53, 0xd8, 0xef, 0x32} },
-{ 0x0819,      16,     {0xe4, 0x90, 0x7f, 0x9c, 0xf0, 0x7f, 0x0a, 0xfe, 0x12, 0x09, 0x23, 0x90, 0x7f, 0x96, 0x74, 0x89} },
-{ 0x0829,      16,     {0xf0, 0x90, 0x7f, 0x9c, 0x74, 0xcf, 0xf0, 0x7f, 0xf4, 0x7e, 0x01, 0x12, 0x09, 0x23, 0x90, 0x7f} },
-{ 0x0839,      16,     {0x96, 0xe0, 0x54, 0xfe, 0xf0, 0x7f, 0x0a, 0x7e, 0x00, 0x12, 0x09, 0x23, 0x7f, 0x02, 0x7d, 0xff} },
-{ 0x0849,      16,     {0x12, 0x81, 0xe0, 0x7f, 0x05, 0x7e, 0x00, 0x12, 0x09, 0x23, 0x90, 0x7f, 0x96, 0xe0, 0x44, 0x02} },
-{ 0x0859,      16,     {0xf0, 0xe0, 0x54, 0x7f, 0xf0, 0x7f, 0x05, 0x7e, 0x00, 0x12, 0x09, 0x23, 0x90, 0x7f, 0x96, 0xe0} },
-{ 0x0869,      16,     {0x44, 0x40, 0xf0, 0x7f, 0x05, 0x7e, 0x00, 0x12, 0x09, 0x23, 0x90, 0x7f, 0x96, 0xe0, 0x54, 0xbf} },
-{ 0x0879,      16,     {0xf0, 0x7f, 0x32, 0x7e, 0x00, 0x12, 0x09, 0x23, 0x90, 0x7f, 0x96, 0xe0, 0x44, 0x40, 0xf0, 0x7f} },
-{ 0x0889,      7,      {0x32, 0x7e, 0x00, 0x12, 0x09, 0x23, 0x22} },
-{ 0x0890,      16,     {0x90, 0x7f, 0x96, 0xe0, 0x54, 0xfd, 0xf0, 0xe0, 0x44, 0x80, 0xf0, 0x7f, 0x0a, 0x7e, 0x00, 0x12} },
-{ 0x08a0,      16,     {0x09, 0x23, 0x7f, 0x02, 0xe4, 0xfd, 0x12, 0x81, 0xe0, 0x7f, 0x05, 0x7e, 0x00, 0x12, 0x09, 0x23} },
-{ 0x08b0,      16,     {0x90, 0x7f, 0x96, 0xe0, 0x54, 0xbf, 0xf0, 0x7f, 0x05, 0x7e, 0x00, 0x12, 0x09, 0x23, 0x90, 0x7f} },
-{ 0x08c0,      16,     {0x96, 0xe0, 0x44, 0x04, 0xf0, 0x7f, 0x05, 0x7e, 0x00, 0x12, 0x09, 0x23, 0x90, 0x7f, 0x96, 0xe0} },
-{ 0x08d0,      16,     {0x54, 0xf7, 0xf0, 0x7f, 0x05, 0x7e, 0x00, 0x12, 0x09, 0x23, 0x90, 0x7f, 0x96, 0xe0, 0x44, 0x01} },
-{ 0x08e0,      12,     {0xf0, 0x7f, 0x05, 0x7e, 0x00, 0x12, 0x09, 0x23, 0x12, 0x0b, 0x00, 0x22} },
-{ 0x08ec,      16,     {0x90, 0x11, 0xfc, 0xe4, 0x93, 0x70, 0x2f, 0x90, 0x7f, 0x93, 0x74, 0x30, 0xf0, 0x90, 0x7f, 0x94} },
-{ 0x08fc,      16,     {0x74, 0x3c, 0xf0, 0x90, 0x7f, 0x95, 0x74, 0xc6, 0xf0, 0xe4, 0x90, 0x7f, 0x97, 0xf0, 0x90, 0x7f} },
-{ 0x090c,      16,     {0x9d, 0x74, 0x02, 0xf0, 0x90, 0x7f, 0xe2, 0x74, 0x12, 0xf0, 0x12, 0x08, 0x19, 0x75, 0x82, 0xfc} },
-{ 0x091c,      7,      {0x75, 0x83, 0x11, 0x74, 0xff, 0xf0, 0x22} },
-{ 0x0923,      16,     {0x8e, 0x58, 0x8f, 0x59, 0xe5, 0x59, 0x15, 0x59, 0xae, 0x58, 0x70, 0x02, 0x15, 0x58, 0x4e, 0x60} },
-{ 0x0933,      7,      {0x05, 0x12, 0x09, 0xef, 0x80, 0xee, 0x22} },
-{ 0x093a,      2,      {0x8f, 0x4c} },
-{ 0x093c,      16,     {0xe4, 0xf5, 0x4d, 0x75, 0x4e, 0xff, 0x75, 0x4f, 0x12, 0x75, 0x50, 0x6a, 0xab, 0x4e, 0xaa, 0x4f} },
-{ 0x094c,      16,     {0xa9, 0x50, 0x90, 0x00, 0x01, 0x12, 0x9b, 0x8b, 0xb4, 0x03, 0x1d, 0xaf, 0x4d, 0x05, 0x4d, 0xef} },
-{ 0x095c,      16,     {0xb5, 0x4c, 0x01, 0x22, 0x12, 0x9b, 0x72, 0x7e, 0x00, 0x29, 0xff, 0xee, 0x3a, 0xa9, 0x07, 0x75} },
-{ 0x096c,      14,     {0x4e, 0xff, 0xf5, 0x4f, 0x89, 0x50, 0x80, 0xd4, 0x7b, 0x00, 0x7a, 0x00, 0x79, 0x00} },
-{ 0x097a,      1,      {0x22} },
-{ 0x097b,      16,     {0xe4, 0xfe, 0x75, 0x4e, 0xff, 0x75, 0x4f, 0x12, 0x75, 0x50, 0x12, 0xab, 0x4e, 0xaa, 0x4f, 0xa9} },
-{ 0x098b,      16,     {0x50, 0x90, 0x00, 0x01, 0x12, 0x9b, 0x8b, 0x64, 0x02, 0x70, 0x2d, 0xad, 0x06, 0x0e, 0xed, 0xb5} },
-{ 0x099b,      16,     {0x07, 0x01, 0x22, 0x90, 0x00, 0x02, 0x12, 0x9b, 0xe4, 0x85, 0xf0, 0x4c, 0xf5, 0x4d, 0x62, 0x4c} },
-{ 0x09ab,      16,     {0xe5, 0x4c, 0x62, 0x4d, 0xe5, 0x4d, 0x62, 0x4c, 0x29, 0xfd, 0xe5, 0x4c, 0x3a, 0xa9, 0x05, 0x75} },
-{ 0x09bb,      14,     {0x4e, 0xff, 0xf5, 0x4f, 0x89, 0x50, 0x80, 0xc3, 0x7b, 0x00, 0x7a, 0x00, 0x79, 0x00} },
-{ 0x09c9,      1,      {0x22} },
-{ 0x09ca,      16,     {0x90, 0x7f, 0xd6, 0xe0, 0x54, 0xfb, 0xf0, 0xe0, 0x44, 0x08, 0xf0, 0x30, 0x07, 0x04, 0xe0, 0x44} },
-{ 0x09da,      16,     {0x02, 0xf0, 0x7f, 0xd0, 0x7e, 0x07, 0x12, 0x09, 0x23, 0x90, 0x7f, 0xd6, 0xe0, 0x54, 0xf7, 0xf0} },
-{ 0x09ea,      5,      {0xe0, 0x44, 0x04, 0xf0, 0x22} },
-{ 0x09ef,      16,     {0x74, 0x00, 0xf5, 0x86, 0x90, 0xfd, 0xa5, 0x7c, 0x05, 0xa3, 0xe5, 0x82, 0x45, 0x83, 0x70, 0xf9} },
-{ 0x09ff,      1,      {0x22} },
+{ 0x04d0,      16,     {0xf0, 0xe4, 0xa3, 0xf0, 0x90, 0x7f, 0xb5, 0x74, 0x02, 0xf0, 0x02, 0x05, 0xa5, 0x90, 0x7f, 0xb4} },
+{ 0x04e0,      16,     {0xe0, 0x44, 0x01, 0xf0, 0x02, 0x05, 0xa5, 0x90, 0x7f, 0xe8, 0xe0, 0x24, 0xfe, 0x60, 0x1d, 0x24} },
+{ 0x04f0,      16,     {0x02, 0x60, 0x03, 0x02, 0x05, 0xa5, 0x90, 0x7f, 0xea, 0xe0, 0xb4, 0x01, 0x05, 0xc2, 0x00, 0x02} },
+{ 0x0500,      16,     {0x05, 0xa5, 0x90, 0x7f, 0xb4, 0xe0, 0x44, 0x01, 0xf0, 0x02, 0x05, 0xa5, 0x90, 0x7f, 0xea, 0xe0} },
+{ 0x0510,      16,     {0x70, 0x34, 0x90, 0x7f, 0xec, 0xe0, 0xff, 0x54, 0x07, 0xfe, 0xf5, 0x4b, 0xef, 0x30, 0xe7, 0x03} },
+{ 0x0520,      16,     {0x43, 0x4b, 0x10, 0x90, 0x7f, 0xd7, 0xe5, 0x4b, 0xf0, 0xe5, 0x4b, 0x44, 0x20, 0xf0, 0xef, 0xf4} },
+{ 0x0530,      16,     {0x54, 0x80, 0xfd, 0xc4, 0x54, 0x0f, 0x2e, 0x25, 0xe0, 0x24, 0xb4, 0xf5, 0x82, 0xe4, 0x34, 0x7f} },
+{ 0x0540,      16,     {0xf5, 0x83, 0xe4, 0xf0, 0x80, 0x5f, 0x90, 0x7f, 0xb4, 0xe0, 0x44, 0x01, 0xf0, 0x80, 0x56, 0x90} },
+{ 0x0550,      16,     {0x7f, 0xe8, 0xe0, 0x24, 0xfe, 0x60, 0x18, 0x24, 0x02, 0x70, 0x4a, 0x90, 0x7f, 0xea, 0xe0, 0xb4} },
+{ 0x0560,      16,     {0x01, 0x04, 0xd2, 0x00, 0x80, 0x3f, 0x90, 0x7f, 0xb4, 0xe0, 0x44, 0x01, 0xf0, 0x80, 0x36, 0x90} },
+{ 0x0570,      16,     {0x7f, 0xea, 0xe0, 0x70, 0x20, 0x90, 0x7f, 0xec, 0xe0, 0xf4, 0x54, 0x80, 0xff, 0xc4, 0x54, 0x0f} },
+{ 0x0580,      16,     {0xff, 0xe0, 0x54, 0x07, 0x2f, 0x25, 0xe0, 0x24, 0xb4, 0xf5, 0x82, 0xe4, 0x34, 0x7f, 0xf5, 0x83} },
+{ 0x0590,      16,     {0x74, 0x01, 0xf0, 0x80, 0x10, 0x90, 0x7f, 0xb4, 0xe0, 0x44, 0x01, 0xf0, 0x80, 0x07, 0x90, 0x7f} },
+{ 0x05a0,      12,     {0xb4, 0xe0, 0x44, 0x01, 0xf0, 0x90, 0x7f, 0xb4, 0xe0, 0x44, 0x02, 0xf0} },
+{ 0x05ac,      1,      {0x22} },
+{ 0x05ad,      16,     {0x75, 0x47, 0xff, 0x75, 0x46, 0xff, 0x75, 0x45, 0x0f, 0x75, 0x44, 0x00, 0xd2, 0x03, 0xc2, 0x06} },
+{ 0x05bd,      16,     {0xc2, 0x02, 0xc2, 0x00, 0xc2, 0x05, 0xc2, 0x01, 0x90, 0x03, 0x00, 0x74, 0x19, 0xf0, 0xe4, 0x90} },
+{ 0x05cd,      16,     {0x01, 0xbc, 0xf0, 0xc2, 0x04, 0x90, 0x01, 0xc0, 0xf0, 0xa3, 0xf0, 0xc2, 0xaf, 0xc2, 0xa8, 0x12} },
+{ 0x05dd,      16,     {0x0b, 0x8d, 0xe4, 0x90, 0x02, 0xaf, 0xf0, 0x90, 0x01, 0x00, 0xf0, 0xa3, 0xf0, 0xa3, 0xf0, 0xa3} },
+{ 0x05ed,      16,     {0xf0, 0xa3, 0xf0, 0xa3, 0x74, 0x10, 0xf0, 0xa3, 0x74, 0x01, 0xf0, 0xa3, 0x74, 0x08, 0xf0, 0x7e} },
+{ 0x05fd,      16,     {0x01, 0x7f, 0x00, 0x12, 0x10, 0x2c, 0x75, 0x49, 0x12, 0x75, 0x4a, 0x0a, 0x90, 0x01, 0x0b, 0xe0} },
+{ 0x060d,      16,     {0xff, 0x05, 0x4a, 0xe5, 0x4a, 0xac, 0x49, 0x70, 0x02, 0x05, 0x49, 0x14, 0xf5, 0x82, 0x8c, 0x83} },
+{ 0x061d,      16,     {0xef, 0xf0, 0x90, 0x01, 0x0c, 0xe0, 0x44, 0x80, 0xff, 0x05, 0x4a, 0xe5, 0x4a, 0xac, 0x49, 0x70} },
+{ 0x062d,      16,     {0x02, 0x05, 0x49, 0x14, 0xf5, 0x82, 0x8c, 0x83, 0xef, 0xf0, 0x90, 0x01, 0x0d, 0xe0, 0xff, 0x05} },
+{ 0x063d,      16,     {0x4a, 0xe5, 0x4a, 0xac, 0x49, 0x70, 0x02, 0x05, 0x49, 0x14, 0xf5, 0x82, 0x8c, 0x83, 0xef, 0xf0} },
+{ 0x064d,      16,     {0x90, 0x01, 0x0e, 0xe0, 0xff, 0x05, 0x4a, 0xe5, 0x4a, 0xac, 0x49, 0x70, 0x02, 0x05, 0x49, 0x14} },
+{ 0x065d,      16,     {0xf5, 0x82, 0x8c, 0x83, 0xef, 0xf0, 0x90, 0x12, 0x0a, 0xe4, 0x93, 0xff, 0x74, 0x01, 0x93, 0x90} },
+{ 0x066d,      16,     {0x01, 0x1c, 0xcf, 0xf0, 0xa3, 0xef, 0xf0, 0x90, 0x01, 0x1c, 0xe0, 0xff, 0xa3, 0xe0, 0xfe, 0xef} },
+{ 0x067d,      16,     {0x6e, 0xff, 0x90, 0x01, 0x1c, 0xf0, 0xa3, 0xe0, 0x6f, 0xff, 0xf0, 0x90, 0x01, 0x1c, 0xe0, 0x6f} },
+{ 0x068d,      16,     {0xf0, 0xe0, 0xfe, 0xa3, 0xe0, 0xff, 0xe4, 0xfc, 0xfd, 0x75, 0x4f, 0x10, 0x75, 0x50, 0x02, 0x75} },
+{ 0x069d,      16,     {0x51, 0x12, 0x75, 0x52, 0xac, 0x12, 0x91, 0x7a, 0x75, 0x49, 0x12, 0x75, 0x4a, 0xb2, 0x90, 0x01} },
+{ 0x06ad,      16,     {0x0d, 0xe0, 0xff, 0x05, 0x4a, 0xe5, 0x4a, 0xac, 0x49, 0x70, 0x02, 0x05, 0x49, 0x14, 0xf5, 0x82} },
+{ 0x06bd,      16,     {0x8c, 0x83, 0xef, 0xf0, 0x90, 0x01, 0x0e, 0xe0, 0xff, 0x05, 0x4a, 0xe5, 0x4a, 0xac, 0x49, 0x70} },
+{ 0x06cd,      16,     {0x02, 0x05, 0x49, 0x14, 0xf5, 0x82, 0x8c, 0x83, 0xef, 0xf0, 0x90, 0x7f, 0x92, 0xe0, 0xff, 0xc4} },
+{ 0x06dd,      16,     {0x54, 0x0f, 0x24, 0x41, 0xff, 0x05, 0x4a, 0xe5, 0x4a, 0xac, 0x49, 0x70, 0x02, 0x05, 0x49, 0x14} },
+{ 0x06ed,      16,     {0xf5, 0x82, 0x8c, 0x83, 0xef, 0xf0, 0x05, 0x4a, 0xe5, 0x4a, 0xae, 0x49, 0x70, 0x02, 0x05, 0x49} },
+{ 0x06fd,      16,     {0x14, 0xf5, 0x82, 0x8e, 0x83, 0xe4, 0xf0, 0x75, 0x82, 0x10, 0x75, 0x83, 0x01, 0xe0, 0xfc, 0xa3} },
+{ 0x070d,      16,     {0xe0, 0xfd, 0xa3, 0xe0, 0xfe, 0xa3, 0xe0, 0xff, 0x90, 0x01, 0x18, 0x12, 0xa0, 0xfb, 0x7e, 0x01} },
+{ 0x071d,      16,     {0x7f, 0x18, 0x12, 0x85, 0x2f, 0x90, 0x01, 0x18, 0xe0, 0xfc, 0xa3, 0xe0, 0xfd, 0xa3, 0xe0, 0xfe} },
+{ 0x072d,      16,     {0xa3, 0xe0, 0xff, 0x75, 0x4f, 0x0a, 0x75, 0x50, 0x06, 0x75, 0x51, 0x12, 0x75, 0x52, 0xb8, 0x12} },
+{ 0x073d,      16,     {0x91, 0x7a, 0xd2, 0xe8, 0x43, 0xd8, 0x20, 0x90, 0x7f, 0xab, 0x74, 0xff, 0xf0, 0x53, 0x91, 0xef} },
+{ 0x074d,      16,     {0x90, 0x7f, 0xaf, 0xe0, 0x44, 0x01, 0xf0, 0x90, 0x7f, 0xae, 0xe0, 0x44, 0x1f, 0xf0, 0xd2, 0xaf} },
+{ 0x075d,      16,     {0x20, 0x01, 0x2e, 0x20, 0x01, 0x2b, 0xa2, 0x03, 0x92, 0x07, 0x12, 0x09, 0xd0, 0x75, 0x43, 0x50} },
+{ 0x076d,      16,     {0x75, 0x42, 0x6d, 0x75, 0x41, 0x33, 0x75, 0x40, 0x00, 0x20, 0x01, 0xe4, 0x7f, 0xff, 0x7e, 0xff} },
+{ 0x077d,      16,     {0x7d, 0xff, 0x7c, 0xff, 0x78, 0x40, 0x12, 0xa0, 0xe4, 0xec, 0x4d, 0x4e, 0x4f, 0x60, 0xd1, 0x80} },
+{ 0x078d,      16,     {0xe8, 0x30, 0x01, 0x05, 0x12, 0x03, 0x70, 0xc2, 0x01, 0x30, 0x06, 0x0d, 0x12, 0x09, 0xf5, 0x50} },
+{ 0x079d,      16,     {0x06, 0x12, 0x0b, 0x00, 0x12, 0x09, 0xfa, 0xc2, 0x06, 0x12, 0x93, 0x98, 0x90, 0x01, 0xbd, 0xe0} },
+{ 0x07ad,      16,     {0x60, 0x0c, 0x12, 0x8f, 0x55, 0xe4, 0x90, 0x01, 0xbd, 0xf0, 0x90, 0x7f, 0xd3, 0xf0, 0x90, 0x02} },
+{ 0x07bd,      16,     {0xaf, 0xe0, 0xb4, 0x0f, 0x03, 0x12, 0x96, 0xe2, 0x12, 0x9d, 0xa2, 0xe4, 0xff, 0x74, 0x01, 0xa8} },
+{ 0x07cd,      16,     {0x07, 0x08, 0x80, 0x02, 0xc3, 0x33, 0xd8, 0xfc, 0xfe, 0x90, 0x01, 0xbc, 0xe0, 0x5e, 0x60, 0x14} },
+{ 0x07dd,      16,     {0x74, 0x27, 0x2f, 0xf8, 0xe6, 0xd3, 0x94, 0x0a, 0x40, 0x04, 0x7e, 0x01, 0x80, 0x02, 0x7e, 0x00} },
+{ 0x07ed,      16,     {0x8e, 0x48, 0x80, 0x03, 0x75, 0x48, 0x01, 0x74, 0x68, 0x2f, 0xf5, 0x82, 0xe4, 0x34, 0x20, 0xf5} },
+{ 0x07fd,      16,     {0x83, 0xe5, 0x48, 0xf0, 0x0f, 0xbf, 0x04, 0xc5, 0xe5, 0x2b, 0xd3, 0x94, 0x0a, 0x40, 0x04, 0x7f} },
+{ 0x080d,      13,     {0x01, 0x80, 0x02, 0x7f, 0x00, 0x90, 0x20, 0x6c, 0xef, 0xf0, 0x02, 0x07, 0x8e} },
+{ 0x081a,      1,      {0x22} },
+{ 0x081b,      4,      {0x53, 0xd8, 0xef, 0x32} },
+{ 0x081f,      16,     {0xe4, 0x90, 0x7f, 0x9c, 0xf0, 0x7f, 0x0a, 0xfe, 0x12, 0x09, 0x29, 0x90, 0x7f, 0x96, 0x74, 0x89} },
+{ 0x082f,      16,     {0xf0, 0x90, 0x7f, 0x9c, 0x74, 0xcf, 0xf0, 0x7f, 0xf4, 0x7e, 0x01, 0x12, 0x09, 0x29, 0x90, 0x7f} },
+{ 0x083f,      16,     {0x96, 0xe0, 0x54, 0xfe, 0xf0, 0x7f, 0x0a, 0x7e, 0x00, 0x12, 0x09, 0x29, 0x7f, 0x02, 0x7d, 0xff} },
+{ 0x084f,      16,     {0x12, 0x11, 0x77, 0x7f, 0x05, 0x7e, 0x00, 0x12, 0x09, 0x29, 0x90, 0x7f, 0x96, 0xe0, 0x44, 0x02} },
+{ 0x085f,      16,     {0xf0, 0xe0, 0x54, 0x7f, 0xf0, 0x7f, 0x05, 0x7e, 0x00, 0x12, 0x09, 0x29, 0x90, 0x7f, 0x96, 0xe0} },
+{ 0x086f,      16,     {0x44, 0x40, 0xf0, 0x7f, 0x05, 0x7e, 0x00, 0x12, 0x09, 0x29, 0x90, 0x7f, 0x96, 0xe0, 0x54, 0xbf} },
+{ 0x087f,      16,     {0xf0, 0x7f, 0x32, 0x7e, 0x00, 0x12, 0x09, 0x29, 0x90, 0x7f, 0x96, 0xe0, 0x44, 0x40, 0xf0, 0x7f} },
+{ 0x088f,      7,      {0x32, 0x7e, 0x00, 0x12, 0x09, 0x29, 0x22} },
+{ 0x0896,      16,     {0x90, 0x7f, 0x96, 0xe0, 0x54, 0xfd, 0xf0, 0xe0, 0x44, 0x80, 0xf0, 0x7f, 0x0a, 0x7e, 0x00, 0x12} },
+{ 0x08a6,      16,     {0x09, 0x29, 0x7f, 0x02, 0xe4, 0xfd, 0x12, 0x11, 0x77, 0x7f, 0x05, 0x7e, 0x00, 0x12, 0x09, 0x29} },
+{ 0x08b6,      16,     {0x90, 0x7f, 0x96, 0xe0, 0x54, 0xbf, 0xf0, 0x7f, 0x05, 0x7e, 0x00, 0x12, 0x09, 0x29, 0x90, 0x7f} },
+{ 0x08c6,      16,     {0x96, 0xe0, 0x44, 0x04, 0xf0, 0x7f, 0x05, 0x7e, 0x00, 0x12, 0x09, 0x29, 0x90, 0x7f, 0x96, 0xe0} },
+{ 0x08d6,      16,     {0x54, 0xf7, 0xf0, 0x7f, 0x05, 0x7e, 0x00, 0x12, 0x09, 0x29, 0x90, 0x7f, 0x96, 0xe0, 0x44, 0x01} },
+{ 0x08e6,      12,     {0xf0, 0x7f, 0x05, 0x7e, 0x00, 0x12, 0x09, 0x29, 0x12, 0x0b, 0x00, 0x22} },
+{ 0x08f2,      16,     {0x90, 0x95, 0xbe, 0xe4, 0x93, 0x70, 0x2f, 0x90, 0x7f, 0x93, 0x74, 0x30, 0xf0, 0x90, 0x7f, 0x94} },
+{ 0x0902,      16,     {0x74, 0x3c, 0xf0, 0x90, 0x7f, 0x95, 0x74, 0xc6, 0xf0, 0xe4, 0x90, 0x7f, 0x97, 0xf0, 0x90, 0x7f} },
+{ 0x0912,      16,     {0x9d, 0x74, 0x02, 0xf0, 0x90, 0x7f, 0xe2, 0x74, 0x12, 0xf0, 0x12, 0x08, 0x1f, 0x75, 0x82, 0xbe} },
+{ 0x0922,      7,      {0x75, 0x83, 0x95, 0x74, 0xff, 0xf0, 0x22} },
+{ 0x0929,      16,     {0x8e, 0x58, 0x8f, 0x59, 0xe5, 0x59, 0x15, 0x59, 0xae, 0x58, 0x70, 0x02, 0x15, 0x58, 0x4e, 0x60} },
+{ 0x0939,      7,      {0x05, 0x12, 0x0a, 0x58, 0x80, 0xee, 0x22} },
+{ 0x0940,      2,      {0x8f, 0x4c} },
+{ 0x0942,      16,     {0xe4, 0xf5, 0x4d, 0x75, 0x4e, 0xff, 0x75, 0x4f, 0x12, 0x75, 0x50, 0x6a, 0xab, 0x4e, 0xaa, 0x4f} },
+{ 0x0952,      16,     {0xa9, 0x50, 0x90, 0x00, 0x01, 0x12, 0x9f, 0x61, 0xb4, 0x03, 0x1d, 0xaf, 0x4d, 0x05, 0x4d, 0xef} },
+{ 0x0962,      16,     {0xb5, 0x4c, 0x01, 0x22, 0x12, 0x9f, 0x48, 0x7e, 0x00, 0x29, 0xff, 0xee, 0x3a, 0xa9, 0x07, 0x75} },
+{ 0x0972,      14,     {0x4e, 0xff, 0xf5, 0x4f, 0x89, 0x50, 0x80, 0xd4, 0x7b, 0x00, 0x7a, 0x00, 0x79, 0x00} },
+{ 0x0980,      1,      {0x22} },
+{ 0x0981,      16,     {0xe4, 0xfe, 0x75, 0x4e, 0xff, 0x75, 0x4f, 0x12, 0x75, 0x50, 0x12, 0xab, 0x4e, 0xaa, 0x4f, 0xa9} },
+{ 0x0991,      16,     {0x50, 0x90, 0x00, 0x01, 0x12, 0x9f, 0x61, 0x64, 0x02, 0x70, 0x2d, 0xad, 0x06, 0x0e, 0xed, 0xb5} },
+{ 0x09a1,      16,     {0x07, 0x01, 0x22, 0x90, 0x00, 0x02, 0x12, 0x9f, 0xba, 0x85, 0xf0, 0x4c, 0xf5, 0x4d, 0x62, 0x4c} },
+{ 0x09b1,      16,     {0xe5, 0x4c, 0x62, 0x4d, 0xe5, 0x4d, 0x62, 0x4c, 0x29, 0xfd, 0xe5, 0x4c, 0x3a, 0xa9, 0x05, 0x75} },
+{ 0x09c1,      14,     {0x4e, 0xff, 0xf5, 0x4f, 0x89, 0x50, 0x80, 0xc3, 0x7b, 0x00, 0x7a, 0x00, 0x79, 0x00} },
+{ 0x09cf,      1,      {0x22} },
+{ 0x09d0,      16,     {0x90, 0x7f, 0xd6, 0xe0, 0x54, 0xfb, 0xf0, 0xe0, 0x44, 0x08, 0xf0, 0x30, 0x07, 0x04, 0xe0, 0x44} },
+{ 0x09e0,      16,     {0x02, 0xf0, 0x7f, 0xd0, 0x7e, 0x07, 0x12, 0x09, 0x29, 0x90, 0x7f, 0xd6, 0xe0, 0x54, 0xf7, 0xf0} },
+{ 0x09f0,      5,      {0xe0, 0x44, 0x04, 0xf0, 0x22} },
+{ 0x09f5,      5,      {0x12, 0x08, 0x96, 0xd3, 0x22} },
+{ 0x09fa,      5,      {0x12, 0x08, 0x1f, 0xd3, 0x22} },
+{ 0x09ff,      1,      {0x32} },
 { 0x0a00,      16,     {0x02, 0x0b, 0xaa, 0x00, 0x02, 0x0b, 0xdd, 0x00, 0x02, 0x0b, 0xc2, 0x00, 0x02, 0x0c, 0x1c, 0x00} },
-{ 0x0a10,      16,     {0x02, 0x0c, 0x06, 0x00, 0x02, 0x0a, 0xf7, 0x00, 0x02, 0x0a, 0xf8, 0x00, 0x02, 0x0a, 0xf9, 0x00} },
-{ 0x0a20,      16,     {0x02, 0x0c, 0x37, 0x00, 0x02, 0x0d, 0x27, 0x00, 0x02, 0x0c, 0x73, 0x00, 0x02, 0x0d, 0x7b, 0x00} },
-{ 0x0a30,      16,     {0x02, 0x0c, 0xaf, 0x00, 0x02, 0x0d, 0xcf, 0x00, 0x02, 0x0c, 0xeb, 0x00, 0x02, 0x0e, 0x23, 0x00} },
-{ 0x0a40,      16,     {0x02, 0x0a, 0xfa, 0x00, 0x02, 0x0a, 0xfc, 0x00, 0x02, 0x0a, 0xfb, 0x00, 0x02, 0x0a, 0xfd, 0x00} },
-{ 0x0a50,      8,      {0x02, 0x0e, 0x77, 0x00, 0x02, 0x0e, 0x8d, 0x00} },
-{ 0x0a58,      16,     {0x53, 0x8e, 0xf7, 0xe5, 0x89, 0x54, 0xf1, 0x44, 0x01, 0xf5, 0x89, 0x75, 0x8c, 0xb1, 0xd2, 0xa9} },
-{ 0x0a68,      16,     {0x75, 0x98, 0x40, 0x75, 0xcb, 0xff, 0x75, 0xca, 0xf3, 0x75, 0xc8, 0x34, 0xe4, 0xff, 0x7f, 0x05} },
-{ 0x0a78,      7,      {0x78, 0x27, 0xe4, 0xf6, 0x08, 0xdf, 0xfc} },
-{ 0x0a7f,      1,      {0x22} },
-{ 0x0a80,      16,     {0xc0, 0xe0, 0xc0, 0x83, 0xc0, 0x82, 0xc0, 0xd0, 0x75, 0xd0, 0x00, 0xc0, 0x00, 0xc0, 0x06, 0xc0} },
-{ 0x0a90,      1,      {0x07} },
-{ 0x0a91,      16,     {0x30, 0x04, 0x16, 0x75, 0x8c, 0xf8, 0x75, 0x8a, 0x30, 0x7f, 0x2f, 0xae, 0x07, 0x1f, 0xee, 0x60} },
-{ 0x0aa1,      16,     {0x3c, 0x90, 0x20, 0x00, 0x74, 0x55, 0xf0, 0x80, 0xf2, 0x75, 0x8c, 0xb1, 0x7f, 0x27, 0xef, 0xd3} },
-{ 0x0ab1,      16,     {0x94, 0x2b, 0x50, 0x09, 0xa8, 0x07, 0xe6, 0x60, 0x01, 0x16, 0x0f, 0x80, 0xf1, 0x90, 0x03, 0x00} },
-{ 0x0ac1,      16,     {0xe0, 0x60, 0x02, 0x14, 0xf0, 0x90, 0x01, 0xc0, 0xe0, 0x70, 0x02, 0xa3, 0xe0, 0x60, 0x0e, 0x90} },
-{ 0x0ad1,      13,     {0x01, 0xc1, 0xe0, 0x24, 0xff, 0xf0, 0x90, 0x01, 0xc0, 0xe0, 0x34, 0xff, 0xf0} },
-{ 0x0ade,      15,     {0xd0, 0x07, 0xd0, 0x06, 0xd0, 0x00, 0xd0, 0xd0, 0xd0, 0x82, 0xd0, 0x83, 0xd0, 0xe0, 0x32} },
-{ 0x0aed,      5,      {0x12, 0x08, 0x90, 0xd3, 0x22} },
-{ 0x0af2,      5,      {0x12, 0x08, 0x19, 0xd3, 0x22} },
-{ 0x0af7,      1,      {0x32} },
-{ 0x0af8,      1,      {0x32} },
-{ 0x0af9,      1,      {0x32} },
-{ 0x0afa,      1,      {0x32} },
-{ 0x0afb,      1,      {0x32} },
-{ 0x0afc,      1,      {0x32} },
-{ 0x0afd,      1,      {0x32} },
+{ 0x0a10,      16,     {0x02, 0x0c, 0x06, 0x00, 0x02, 0x09, 0xff, 0x00, 0x02, 0x0a, 0xfe, 0x00, 0x02, 0x0a, 0xff, 0x00} },
+{ 0x0a20,      16,     {0x02, 0x0c, 0x37, 0x00, 0x02, 0x0d, 0x29, 0x00, 0x02, 0x0c, 0x73, 0x00, 0x02, 0x0d, 0x7d, 0x00} },
+{ 0x0a30,      16,     {0x02, 0x0c, 0xaf, 0x00, 0x02, 0x0d, 0xd1, 0x00, 0x02, 0x0c, 0xeb, 0x00, 0x02, 0x0e, 0x25, 0x00} },
+{ 0x0a40,      16,     {0x02, 0x0d, 0x27, 0x00, 0x02, 0x0e, 0x79, 0x00, 0x02, 0x0d, 0x28, 0x00, 0x02, 0x0e, 0x7a, 0x00} },
+{ 0x0a50,      8,      {0x02, 0x0e, 0x7b, 0x00, 0x02, 0x0e, 0x91, 0x00} },
+{ 0x0a58,      16,     {0x74, 0x00, 0xf5, 0x86, 0x90, 0xfd, 0xa5, 0x7c, 0x05, 0xa3, 0xe5, 0x82, 0x45, 0x83, 0x70, 0xf9} },
+{ 0x0a68,      1,      {0x22} },
+{ 0x0a69,      16,     {0x53, 0x8e, 0xf7, 0xe5, 0x89, 0x54, 0xf1, 0x44, 0x01, 0xf5, 0x89, 0x75, 0x8c, 0xb1, 0xd2, 0xa9} },
+{ 0x0a79,      16,     {0x75, 0x98, 0x40, 0x75, 0xcb, 0xff, 0x75, 0xca, 0xf3, 0x75, 0xc8, 0x34, 0xe4, 0xff, 0x7f, 0x05} },
+{ 0x0a89,      7,      {0x78, 0x27, 0xe4, 0xf6, 0x08, 0xdf, 0xfc} },
+{ 0x0a90,      1,      {0x22} },
+{ 0x0a91,      16,     {0xc0, 0xe0, 0xc0, 0x83, 0xc0, 0x82, 0xc0, 0xd0, 0x75, 0xd0, 0x00, 0xc0, 0x00, 0xc0, 0x06, 0xc0} },
+{ 0x0aa1,      1,      {0x07} },
+{ 0x0aa2,      16,     {0x30, 0x04, 0x16, 0x75, 0x8c, 0xf8, 0x75, 0x8a, 0x30, 0x7f, 0x2f, 0xae, 0x07, 0x1f, 0xee, 0x60} },
+{ 0x0ab2,      16,     {0x3c, 0x90, 0x20, 0x00, 0x74, 0x55, 0xf0, 0x80, 0xf2, 0x75, 0x8c, 0xb1, 0x7f, 0x27, 0xef, 0xd3} },
+{ 0x0ac2,      16,     {0x94, 0x2b, 0x50, 0x09, 0xa8, 0x07, 0xe6, 0x60, 0x01, 0x16, 0x0f, 0x80, 0xf1, 0x90, 0x03, 0x00} },
+{ 0x0ad2,      16,     {0xe0, 0x60, 0x02, 0x14, 0xf0, 0x90, 0x01, 0xc0, 0xe0, 0x70, 0x02, 0xa3, 0xe0, 0x60, 0x0e, 0x90} },
+{ 0x0ae2,      13,     {0x01, 0xc1, 0xe0, 0x24, 0xff, 0xf0, 0x90, 0x01, 0xc0, 0xe0, 0x34, 0xff, 0xf0} },
+{ 0x0aef,      15,     {0xd0, 0x07, 0xd0, 0x06, 0xd0, 0x00, 0xd0, 0xd0, 0xd0, 0x82, 0xd0, 0x83, 0xd0, 0xe0, 0x32} },
+{ 0x0afe,      1,      {0x32} },
+{ 0x0aff,      1,      {0x32} },
 { 0x0b00,      9,      {0x90, 0x7f, 0xd6, 0xe0, 0x44, 0x80, 0xf0, 0x80, 0x74} },
 { 0x0b7d,      16,     {0x43, 0x87, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22} },
-{ 0x0b8d,      16,     {0xd2, 0x00, 0x75, 0x8e, 0x10, 0xe4, 0x90, 0x7f, 0x92, 0xf0, 0x12, 0x10, 0x0c, 0x12, 0x08, 0xec} },
-{ 0x0b9d,      13,     {0x12, 0x0e, 0xa9, 0x12, 0x90, 0xe6, 0x12, 0x1b, 0x0c, 0x12, 0x0a, 0x58, 0x22} },
+{ 0x0b8d,      16,     {0xd2, 0x00, 0x75, 0x8e, 0x10, 0xe4, 0x90, 0x7f, 0x92, 0xf0, 0x12, 0x80, 0x00, 0x12, 0x08, 0xf2} },
+{ 0x0b9d,      13,     {0x12, 0x0e, 0xad, 0x12, 0x11, 0xe5, 0x12, 0x11, 0xc8, 0x12, 0x0a, 0x69, 0x22} },
 { 0x0baa,      16,     {0xc0, 0xe0, 0xc0, 0x83, 0xc0, 0x82, 0xd2, 0x01, 0x53, 0x91, 0xef, 0x90, 0x7f, 0xab, 0x74, 0x01} },
 { 0x0bba,      8,      {0xf0, 0xd0, 0x82, 0xd0, 0x83, 0xd0, 0xe0, 0x32} },
 { 0x0bc2,      16,     {0xc0, 0xe0, 0xc0, 0x83, 0xc0, 0x82, 0x90, 0x7f, 0xc4, 0xe4, 0xf0, 0x53, 0x91, 0xef, 0x90, 0x7f} },
@@ -227,91+222,97 @@ static const struct whiteheat_hex_record whiteheat_firmware[] = {
 { 0x0cfb,      16,     {0xa9, 0x74, 0x10, 0xf0, 0xe5, 0x30, 0x30, 0xe3, 0x13, 0xe5, 0x3b, 0x30, 0xe3, 0x07, 0x90, 0x20} },
 { 0x0d0b,      16,     {0x1c, 0xe0, 0x44, 0x01, 0xf0, 0x90, 0x20, 0x19, 0xe0, 0x44, 0x01, 0xf0, 0xe5, 0x2b, 0x70, 0x03} },
 { 0x0d1b,      12,     {0x75, 0x2b, 0x14, 0xd0, 0xd0, 0xd0, 0x82, 0xd0, 0x83, 0xd0, 0xe0, 0x32} },
-{ 0x0d27,      16,     {0xc0, 0xe0, 0xc0, 0x83, 0xc0, 0x82, 0xc0, 0x85, 0xc0, 0x84, 0xc0, 0x86, 0x75, 0x86, 0x00, 0xc0} },
-{ 0x0d37,      16,     {0xd0, 0x75, 0xd0, 0x10, 0x53, 0x91, 0xef, 0x90, 0x7f, 0xaa, 0x74, 0x02, 0xf0, 0xe5, 0x30, 0x20} },
-{ 0x0d47,      16,     {0xe0, 0x06, 0x90, 0x7f, 0xc7, 0xf0, 0x80, 0x16, 0xe5, 0x3b, 0x30, 0xe0, 0x0a, 0x90, 0x7f, 0xc7} },
-{ 0x0d57,      16,     {0xe0, 0x90, 0x02, 0xf8, 0xf0, 0x80, 0x07, 0x90, 0x20, 0x01, 0xe0, 0x44, 0x02, 0xf0, 0xe5, 0x2b} },
-{ 0x0d67,      16,     {0x70, 0x03, 0x75, 0x2b, 0x14, 0xd0, 0xd0, 0xd0, 0x86, 0xd0, 0x84, 0xd0, 0x85, 0xd0, 0x82, 0xd0} },
-{ 0x0d77,      4,      {0x83, 0xd0, 0xe0, 0x32} },
-{ 0x0d7b,      16,     {0xc0, 0xe0, 0xc0, 0x83, 0xc0, 0x82, 0xc0, 0x85, 0xc0, 0x84, 0xc0, 0x86, 0x75, 0x86, 0x00, 0xc0} },
-{ 0x0d8b,      16,     {0xd0, 0x75, 0xd0, 0x10, 0x53, 0x91, 0xef, 0x90, 0x7f, 0xaa, 0x74, 0x04, 0xf0, 0xe5, 0x30, 0x20} },
-{ 0x0d9b,      16,     {0xe1, 0x06, 0x90, 0x7f, 0xc9, 0xf0, 0x80, 0x16, 0xe5, 0x3b, 0x30, 0xe1, 0x0a, 0x90, 0x7f, 0xc9} },
-{ 0x0dab,      16,     {0xe0, 0x90, 0x02, 0xf9, 0xf0, 0x80, 0x07, 0x90, 0x20, 0x09, 0xe0, 0x44, 0x02, 0xf0, 0xe5, 0x2b} },
-{ 0x0dbb,      16,     {0x70, 0x03, 0x75, 0x2b, 0x14, 0xd0, 0xd0, 0xd0, 0x86, 0xd0, 0x84, 0xd0, 0x85, 0xd0, 0x82, 0xd0} },
-{ 0x0dcb,      4,      {0x83, 0xd0, 0xe0, 0x32} },
-{ 0x0dcf,      16,     {0xc0, 0xe0, 0xc0, 0x83, 0xc0, 0x82, 0xc0, 0x85, 0xc0, 0x84, 0xc0, 0x86, 0x75, 0x86, 0x00, 0xc0} },
-{ 0x0ddf,      16,     {0xd0, 0x75, 0xd0, 0x10, 0x53, 0x91, 0xef, 0x90, 0x7f, 0xaa, 0x74, 0x08, 0xf0, 0xe5, 0x30, 0x20} },
-{ 0x0def,      16,     {0xe2, 0x06, 0x90, 0x7f, 0xcb, 0xf0, 0x80, 0x16, 0xe5, 0x3b, 0x30, 0xe2, 0x0a, 0x90, 0x7f, 0xcb} },
-{ 0x0dff,      16,     {0xe0, 0x90, 0x02, 0xfa, 0xf0, 0x80, 0x07, 0x90, 0x20, 0x11, 0xe0, 0x44, 0x02, 0xf0, 0xe5, 0x2b} },
-{ 0x0e0f,      16,     {0x70, 0x03, 0x75, 0x2b, 0x14, 0xd0, 0xd0, 0xd0, 0x86, 0xd0, 0x84, 0xd0, 0x85, 0xd0, 0x82, 0xd0} },
-{ 0x0e1f,      4,      {0x83, 0xd0, 0xe0, 0x32} },
-{ 0x0e23,      16,     {0xc0, 0xe0, 0xc0, 0x83, 0xc0, 0x82, 0xc0, 0x85, 0xc0, 0x84, 0xc0, 0x86, 0x75, 0x86, 0x00, 0xc0} },
-{ 0x0e33,      16,     {0xd0, 0x75, 0xd0, 0x10, 0x53, 0x91, 0xef, 0x90, 0x7f, 0xaa, 0x74, 0x10, 0xf0, 0xe5, 0x30, 0x20} },
-{ 0x0e43,      16,     {0xe3, 0x06, 0x90, 0x7f, 0xcd, 0xf0, 0x80, 0x16, 0xe5, 0x3b, 0x30, 0xe3, 0x0a, 0x90, 0x7f, 0xcd} },
-{ 0x0e53,      16,     {0xe0, 0x90, 0x02, 0xfb, 0xf0, 0x80, 0x07, 0x90, 0x20, 0x19, 0xe0, 0x44, 0x02, 0xf0, 0xe5, 0x2b} },
-{ 0x0e63,      16,     {0x70, 0x03, 0x75, 0x2b, 0x14, 0xd0, 0xd0, 0xd0, 0x86, 0xd0, 0x84, 0xd0, 0x85, 0xd0, 0x82, 0xd0} },
-{ 0x0e73,      4,      {0x83, 0xd0, 0xe0, 0x32} },
-{ 0x0e77,      16,     {0xc0, 0xe0, 0xc0, 0x83, 0xc0, 0x82, 0x53, 0x91, 0xef, 0x90, 0x7f, 0xa9, 0x74, 0x80, 0xf0, 0xd0} },
-{ 0x0e87,      6,      {0x82, 0xd0, 0x83, 0xd0, 0xe0, 0x32} },
-{ 0x0e8d,      16,     {0xc0, 0xe0, 0xc0, 0x83, 0xc0, 0x82, 0x53, 0x91, 0xef, 0x90, 0x7f, 0xaa, 0x74, 0x80, 0xf0, 0x90} },
-{ 0x0e9d,      12,     {0x01, 0xbd, 0x74, 0xff, 0xf0, 0xd0, 0x82, 0xd0, 0x83, 0xd0, 0xe0, 0x32} },
-{ 0x0ea9,      16,     {0x90, 0x01, 0x20, 0x12, 0x9d, 0x31, 0x00, 0x00, 0x25, 0x80, 0x90, 0x01, 0x24, 0x74, 0x08, 0xf0} },
-{ 0x0eb9,      16,     {0xa3, 0x74, 0x01, 0xf0, 0xa3, 0x74, 0x6e, 0xf0, 0xa3, 0xf0, 0xa3, 0x74, 0x13, 0xf0, 0xa3, 0x74} },
-{ 0x0ec9,      16,     {0x11, 0xf0, 0xe4, 0xa3, 0xf0, 0xa3, 0xf0, 0x90, 0x01, 0x1e, 0xf0, 0x90, 0x01, 0x1e, 0xe0, 0xff} },
-{ 0x0ed9,      16,     {0xc3, 0x94, 0x04, 0x50, 0x13, 0xef, 0x04, 0xa3, 0xf0, 0x7e, 0x01, 0x7f, 0x1f, 0x12, 0x85, 0xe1} },
-{ 0x0ee9,      16,     {0x90, 0x01, 0x1e, 0xe0, 0x04, 0xf0, 0x80, 0xe3, 0xe4, 0xf5, 0x26, 0x90, 0x01, 0x1e, 0xf0, 0x90} },
-{ 0x0ef9,      16,     {0x01, 0x1e, 0xe0, 0xff, 0xc3, 0x94, 0x04, 0x50, 0x1a, 0x74, 0xf8, 0x2f, 0xf5, 0x82, 0xe4, 0x34} },
-{ 0x0f09,      16,     {0x02, 0xf5, 0x83, 0xe4, 0xf0, 0x74, 0x22, 0x2f, 0xf8, 0xe4, 0xf6, 0x90, 0x01, 0x1e, 0xe0, 0x04} },
-{ 0x0f19,      16,     {0xf0, 0x80, 0xdc, 0xe4, 0xf5, 0x30, 0xe5, 0xc0, 0x60, 0x2f, 0x90, 0x01, 0x1e, 0x74, 0x01, 0xf0} },
-{ 0x0f29,      16,     {0x90, 0x01, 0x1e, 0xe0, 0xff, 0xd3, 0x94, 0x04, 0x50, 0x1f, 0xef, 0x14, 0xff, 0x74, 0x01, 0xa8} },
-{ 0x0f39,      16,     {0x07, 0x08, 0x80, 0x02, 0xc3, 0x33, 0xd8, 0xfc, 0x42, 0x30, 0x7e, 0x01, 0x7f, 0x1e, 0x12, 0x83} },
-{ 0x0f49,      16,     {0x5f, 0x90, 0x01, 0x1e, 0xe0, 0x04, 0xf0, 0x80, 0xd7, 0xe4, 0xf5, 0x3a, 0x90, 0x01, 0x1e, 0xf0} },
-{ 0x0f59,      16,     {0x90, 0x01, 0x1e, 0xe0, 0xff, 0x75, 0xf0, 0x08, 0xa4, 0x24, 0x06, 0xf5, 0x82, 0xe4, 0x34, 0x20} },
-{ 0x0f69,      16,     {0xf5, 0x83, 0xe0, 0x54, 0xf0, 0xfe, 0x74, 0xc5, 0x2f, 0xf5, 0x82, 0xe4, 0x34, 0x01, 0xf5, 0x83} },
-{ 0x0f79,      16,     {0xee, 0xf0, 0x74, 0x36, 0x2f, 0xf8, 0xa6, 0x06, 0x74, 0x32, 0x2f, 0xf8, 0xe4, 0xf6, 0x74, 0x2c} },
-{ 0x0f89,      16,     {0x2f, 0xf8, 0xe4, 0xf6, 0x74, 0xfc, 0x2f, 0xf5, 0x82, 0xe4, 0x34, 0x02, 0xf5, 0x83, 0xe4, 0xf0} },
-{ 0x0f99,      16,     {0x90, 0x01, 0x1e, 0xe0, 0x04, 0xf0, 0xe0, 0xb4, 0x04, 0xb6, 0x90, 0x20, 0x60, 0xe0, 0x54, 0x0f} },
-{ 0x0fa9,      16,     {0xf5, 0x4b, 0x60, 0x5e, 0xe4, 0x90, 0x01, 0x1e, 0xf0, 0x90, 0x01, 0x1e, 0xe0, 0xff, 0xc3, 0x94} },
-{ 0x0fb9,      16,     {0x04, 0x50, 0xe7, 0x74, 0x01, 0xa8, 0x07, 0x08, 0x80, 0x02, 0xc3, 0x33, 0xd8, 0xfc, 0x55, 0x4b} },
-{ 0x0fc9,      16,     {0x60, 0x38, 0x90, 0x01, 0x1e, 0xe0, 0xff, 0x75, 0xf0, 0x08, 0xa4, 0x24, 0x02, 0xf5, 0x82, 0xe4} },
-{ 0x0fd9,      16,     {0x34, 0x20, 0xf5, 0x83, 0xe0, 0xfe, 0xef, 0x75, 0xf0, 0x08, 0xa4, 0x24, 0x05, 0xf5, 0x82, 0xe4} },
-{ 0x0fe9,      16,     {0x34, 0x20, 0xf5, 0x83, 0xe0, 0xef, 0x75, 0xf0, 0x08, 0xa4, 0x24, 0x06, 0xf5, 0x82, 0xe4, 0x34} },
-{ 0x0ff9,      16,     {0x20, 0xf5, 0x83, 0xe0, 0xfe, 0x7d, 0x06, 0x12, 0x82, 0xd5, 0x90, 0x01, 0x1e, 0xe0, 0x04, 0xf0} },
-{ 0x1009,      3,      {0x80, 0xa7, 0x22} },
-{ 0x100c,      16,     {0x7b, 0xff, 0x7a, 0x12, 0x79, 0x1b, 0x90, 0x00, 0x04, 0x12, 0x9b, 0x8b, 0xfd, 0x8b, 0x4d, 0x75} },
-{ 0x101c,      16,     {0x4e, 0x12, 0x75, 0x4f, 0x24, 0xe4, 0x90, 0x7f, 0xe1, 0xf0, 0x90, 0x7f, 0xe0, 0xf0, 0xf5, 0x4b} },
-{ 0x102c,      16,     {0xf5, 0x4c, 0x90, 0x02, 0xae, 0xf0, 0x90, 0x7f, 0xdf, 0xf0, 0x90, 0x7f, 0xde, 0xf0, 0x90, 0x7f} },
-{ 0x103c,      16,     {0xa9, 0x74, 0xff, 0xf0, 0x90, 0x7f, 0xaa, 0xf0, 0xe4, 0xfc, 0xec, 0x25, 0xe0, 0x24, 0xb4, 0xf5} },
-{ 0x104c,      16,     {0x82, 0xe4, 0x34, 0x7f, 0xf5, 0x83, 0xe4, 0xf0, 0x0c, 0xbc, 0x10, 0xee, 0xe4, 0x90, 0x7f, 0xdd} },
-{ 0x105c,      16,     {0xf0, 0xaf, 0x05, 0x1d, 0xef, 0x70, 0x03, 0x02, 0x11, 0xd2, 0xab, 0x4d, 0xaa, 0x4e, 0xa9, 0x4f} },
-{ 0x106c,      16,     {0x90, 0x00, 0x01, 0x12, 0x9b, 0x8b, 0x64, 0x05, 0x60, 0x03, 0x02, 0x11, 0xc1, 0x90, 0x00, 0x03} },
-{ 0x107c,      16,     {0x12, 0x9b, 0x8b, 0x64, 0x01, 0x60, 0x03, 0x02, 0x11, 0x48, 0x90, 0x00, 0x02, 0x12, 0x9b, 0x8b} },
-{ 0x108c,      16,     {0xff, 0x54, 0x7f, 0xfc, 0xd3, 0x94, 0x07, 0x50, 0x03, 0x02, 0x11, 0x22, 0xec, 0xc3, 0x94, 0x10} },
-{ 0x109c,      16,     {0x40, 0x03, 0x02, 0x11, 0x22, 0xef, 0x30, 0xe7, 0x42, 0xe5, 0x4c, 0xae, 0x4b, 0x78, 0x02, 0xce} },
-{ 0x10ac,      16,     {0xc3, 0x13, 0xce, 0x13, 0xd8, 0xf9, 0xff, 0x74, 0xf0, 0x2c, 0xf5, 0x82, 0xe4, 0x34, 0x7f, 0xf5} },
-{ 0x10bc,      16,     {0x83, 0xef, 0xf0, 0x90, 0x7f, 0xe0, 0xe0, 0xff, 0xec, 0x24, 0xf8, 0xfe, 0x74, 0x01, 0xa8, 0x06} },
-{ 0x10cc,      16,     {0x08, 0x80, 0x02, 0xc3, 0x33, 0xd8, 0xfc, 0x4f, 0x90, 0x7f, 0xe0, 0xf0, 0x90, 0x02, 0xae, 0xe0} },
-{ 0x10dc,      16,     {0x04, 0xf0, 0x90, 0x7f, 0xdd, 0xe0, 0x44, 0x80, 0xf0, 0x80, 0x3e, 0xe5, 0x4c, 0xae, 0x4b, 0x78} },
-{ 0x10ec,      16,     {0x02, 0xce, 0xc3, 0x13, 0xce, 0x13, 0xd8, 0xf9, 0xff, 0x74, 0xe8, 0x2c, 0xf5, 0x82, 0xe4, 0x34} },
-{ 0x10fc,      16,     {0x7f, 0xf5, 0x83, 0xef, 0xf0, 0x90, 0x7f, 0xe1, 0xe0, 0xff, 0xec, 0x24, 0xf8, 0xfe, 0x74, 0x01} },
-{ 0x110c,      16,     {0xa8, 0x06, 0x08, 0x80, 0x02, 0xc3, 0x33, 0xd8, 0xfc, 0x4f, 0x90, 0x7f, 0xe1, 0xf0, 0x90, 0x02} },
-{ 0x111c,      16,     {0xae, 0xe0, 0x04, 0xf0, 0x80, 0x03, 0x7f, 0xff, 0x22, 0x90, 0x00, 0x04, 0x12, 0x9b, 0x8b, 0x25} },
-{ 0x112c,      16,     {0x4c, 0xf5, 0x4c, 0xe4, 0x35, 0x4b, 0xf5, 0x4b, 0x90, 0x00, 0x05, 0x12, 0x9b, 0x8b, 0xfe, 0xe4} },
-{ 0x113c,      16,     {0x25, 0x4c, 0xf5, 0x4c, 0xee, 0x35, 0x4b, 0xf5, 0x4b, 0x02, 0x11, 0xc4, 0xab, 0x4d, 0xaa, 0x4e} },
-{ 0x114c,      16,     {0xa9, 0x4f, 0x90, 0x00, 0x03, 0x12, 0x9b, 0x8b, 0xff, 0x64, 0x02, 0x60, 0x05, 0xef, 0x64, 0x03} },
-{ 0x115c,      16,     {0x70, 0x60, 0x90, 0x00, 0x02, 0x12, 0x9b, 0x8b, 0xff, 0x54, 0x7f, 0xfc, 0xd3, 0x94, 0x07, 0x50} },
-{ 0x116c,      16,     {0x4e, 0xef, 0x30, 0xe7, 0x1e, 0x90, 0x7f, 0xde, 0xe0, 0xff, 0x74, 0x01, 0xa8, 0x04, 0x08, 0x80} },
-{ 0x117c,      16,     {0x02, 0xc3, 0x33, 0xd8, 0xfc, 0xfe, 0x4f, 0x90, 0x7f, 0xde, 0xf0, 0x90, 0x7f, 0xac, 0xe0, 0x4e} },
-{ 0x118c,      16,     {0xf0, 0x80, 0x35, 0x90, 0x7f, 0xdf, 0xe0, 0xff, 0x74, 0x01, 0xa8, 0x04, 0x08, 0x80, 0x02, 0xc3} },
-{ 0x119c,      16,     {0x33, 0xd8, 0xfc, 0xfe, 0x4f, 0x90, 0x7f, 0xdf, 0xf0, 0x90, 0x7f, 0xad, 0xe0, 0x4e, 0xf0, 0xec} },
-{ 0x11ac,      16,     {0x25, 0xe0, 0x24, 0xc5, 0xf5, 0x82, 0xe4, 0x34, 0x7f, 0xf5, 0x83, 0xec, 0xf0, 0x80, 0x09, 0x7f} },
-{ 0x11bc,      16,     {0xff, 0x22, 0x7f, 0xff, 0x22, 0x7f, 0xff, 0x22, 0x74, 0x07, 0x25, 0x4f, 0xf5, 0x4f, 0xe4, 0x35} },
-{ 0x11cc,      16,     {0x4e, 0xf5, 0x4e, 0x02, 0x10, 0x5d, 0x20, 0x03, 0x0d, 0x90, 0x02, 0xae, 0xe0, 0x60, 0x07, 0x90} },
-{ 0x11dc,      8,      {0x7f, 0xae, 0xe0, 0x44, 0x02, 0xf0, 0x7f, 0x00} },
-{ 0x11e4,      1,      {0x22} },
-{ 0x11e5,      16,     {0x8f, 0x82, 0x8e, 0x83, 0xe0, 0x14, 0xff, 0x74, 0x01, 0xa8, 0x07, 0x08, 0x80, 0x02, 0xc3, 0x33} },
-{ 0x11f5,      7,      {0xd8, 0xfc, 0x42, 0x3a, 0x7f, 0x00, 0x22} },
-{ 0x11fc,      3,      {0x00, 0x03, 0x15} },
+{ 0x0d27,      1,      {0x32} },
+{ 0x0d28,      1,      {0x32} },
+{ 0x0d29,      16,     {0xc0, 0xe0, 0xc0, 0x83, 0xc0, 0x82, 0xc0, 0x85, 0xc0, 0x84, 0xc0, 0x86, 0x75, 0x86, 0x00, 0xc0} },
+{ 0x0d39,      16,     {0xd0, 0x75, 0xd0, 0x10, 0x53, 0x91, 0xef, 0x90, 0x7f, 0xaa, 0x74, 0x02, 0xf0, 0xe5, 0x30, 0x20} },
+{ 0x0d49,      16,     {0xe0, 0x06, 0x90, 0x7f, 0xc7, 0xf0, 0x80, 0x16, 0xe5, 0x3b, 0x30, 0xe0, 0x0a, 0x90, 0x7f, 0xc7} },
+{ 0x0d59,      16,     {0xe0, 0x90, 0x02, 0xf8, 0xf0, 0x80, 0x07, 0x90, 0x20, 0x01, 0xe0, 0x44, 0x02, 0xf0, 0xe5, 0x2b} },
+{ 0x0d69,      16,     {0x70, 0x03, 0x75, 0x2b, 0x14, 0xd0, 0xd0, 0xd0, 0x86, 0xd0, 0x84, 0xd0, 0x85, 0xd0, 0x82, 0xd0} },
+{ 0x0d79,      4,      {0x83, 0xd0, 0xe0, 0x32} },
+{ 0x0d7d,      16,     {0xc0, 0xe0, 0xc0, 0x83, 0xc0, 0x82, 0xc0, 0x85, 0xc0, 0x84, 0xc0, 0x86, 0x75, 0x86, 0x00, 0xc0} },
+{ 0x0d8d,      16,     {0xd0, 0x75, 0xd0, 0x10, 0x53, 0x91, 0xef, 0x90, 0x7f, 0xaa, 0x74, 0x04, 0xf0, 0xe5, 0x30, 0x20} },
+{ 0x0d9d,      16,     {0xe1, 0x06, 0x90, 0x7f, 0xc9, 0xf0, 0x80, 0x16, 0xe5, 0x3b, 0x30, 0xe1, 0x0a, 0x90, 0x7f, 0xc9} },
+{ 0x0dad,      16,     {0xe0, 0x90, 0x02, 0xf9, 0xf0, 0x80, 0x07, 0x90, 0x20, 0x09, 0xe0, 0x44, 0x02, 0xf0, 0xe5, 0x2b} },
+{ 0x0dbd,      16,     {0x70, 0x03, 0x75, 0x2b, 0x14, 0xd0, 0xd0, 0xd0, 0x86, 0xd0, 0x84, 0xd0, 0x85, 0xd0, 0x82, 0xd0} },
+{ 0x0dcd,      4,      {0x83, 0xd0, 0xe0, 0x32} },
+{ 0x0dd1,      16,     {0xc0, 0xe0, 0xc0, 0x83, 0xc0, 0x82, 0xc0, 0x85, 0xc0, 0x84, 0xc0, 0x86, 0x75, 0x86, 0x00, 0xc0} },
+{ 0x0de1,      16,     {0xd0, 0x75, 0xd0, 0x10, 0x53, 0x91, 0xef, 0x90, 0x7f, 0xaa, 0x74, 0x08, 0xf0, 0xe5, 0x30, 0x20} },
+{ 0x0df1,      16,     {0xe2, 0x06, 0x90, 0x7f, 0xcb, 0xf0, 0x80, 0x16, 0xe5, 0x3b, 0x30, 0xe2, 0x0a, 0x90, 0x7f, 0xcb} },
+{ 0x0e01,      16,     {0xe0, 0x90, 0x02, 0xfa, 0xf0, 0x80, 0x07, 0x90, 0x20, 0x11, 0xe0, 0x44, 0x02, 0xf0, 0xe5, 0x2b} },
+{ 0x0e11,      16,     {0x70, 0x03, 0x75, 0x2b, 0x14, 0xd0, 0xd0, 0xd0, 0x86, 0xd0, 0x84, 0xd0, 0x85, 0xd0, 0x82, 0xd0} },
+{ 0x0e21,      4,      {0x83, 0xd0, 0xe0, 0x32} },
+{ 0x0e25,      16,     {0xc0, 0xe0, 0xc0, 0x83, 0xc0, 0x82, 0xc0, 0x85, 0xc0, 0x84, 0xc0, 0x86, 0x75, 0x86, 0x00, 0xc0} },
+{ 0x0e35,      16,     {0xd0, 0x75, 0xd0, 0x10, 0x53, 0x91, 0xef, 0x90, 0x7f, 0xaa, 0x74, 0x10, 0xf0, 0xe5, 0x30, 0x20} },
+{ 0x0e45,      16,     {0xe3, 0x06, 0x90, 0x7f, 0xcd, 0xf0, 0x80, 0x16, 0xe5, 0x3b, 0x30, 0xe3, 0x0a, 0x90, 0x7f, 0xcd} },
+{ 0x0e55,      16,     {0xe0, 0x90, 0x02, 0xfb, 0xf0, 0x80, 0x07, 0x90, 0x20, 0x19, 0xe0, 0x44, 0x02, 0xf0, 0xe5, 0x2b} },
+{ 0x0e65,      16,     {0x70, 0x03, 0x75, 0x2b, 0x14, 0xd0, 0xd0, 0xd0, 0x86, 0xd0, 0x84, 0xd0, 0x85, 0xd0, 0x82, 0xd0} },
+{ 0x0e75,      4,      {0x83, 0xd0, 0xe0, 0x32} },
+{ 0x0e79,      1,      {0x32} },
+{ 0x0e7a,      1,      {0x32} },
+{ 0x0e7b,      16,     {0xc0, 0xe0, 0xc0, 0x83, 0xc0, 0x82, 0x53, 0x91, 0xef, 0x90, 0x7f, 0xa9, 0x74, 0x80, 0xf0, 0xd0} },
+{ 0x0e8b,      6,      {0x82, 0xd0, 0x83, 0xd0, 0xe0, 0x32} },
+{ 0x0e91,      16,     {0xc0, 0xe0, 0xc0, 0x83, 0xc0, 0x82, 0x53, 0x91, 0xef, 0x90, 0x7f, 0xaa, 0x74, 0x80, 0xf0, 0x90} },
+{ 0x0ea1,      12,     {0x01, 0xbd, 0x74, 0xff, 0xf0, 0xd0, 0x82, 0xd0, 0x83, 0xd0, 0xe0, 0x32} },
+{ 0x0ead,      16,     {0x90, 0x01, 0x20, 0x12, 0xa1, 0x07, 0x00, 0x00, 0x25, 0x80, 0x90, 0x01, 0x24, 0x74, 0x08, 0xf0} },
+{ 0x0ebd,      16,     {0xa3, 0x74, 0x01, 0xf0, 0xa3, 0x74, 0x6e, 0xf0, 0xa3, 0xf0, 0xa3, 0x74, 0x13, 0xf0, 0xa3, 0x74} },
+{ 0x0ecd,      16,     {0x11, 0xf0, 0xe4, 0xa3, 0xf0, 0xa3, 0xf0, 0x90, 0x01, 0x1e, 0xf0, 0x90, 0x01, 0x1e, 0xe0, 0xff} },
+{ 0x0edd,      16,     {0x04, 0xa3, 0xf0, 0xef, 0x75, 0xf0, 0x0d, 0xa4, 0x24, 0x01, 0xf9, 0x74, 0x03, 0x35, 0xf0, 0xa8} },
+{ 0x0eed,      16,     {0x01, 0xfc, 0x7d, 0x01, 0x7b, 0x01, 0x7a, 0x01, 0x79, 0x1f, 0x7e, 0x00, 0x7f, 0x0d, 0x12, 0x9f} },
+{ 0x0efd,      16,     {0x1f, 0x7e, 0x01, 0x7f, 0x1f, 0x12, 0x86, 0x17, 0x90, 0x01, 0x1e, 0xe0, 0x04, 0xf0, 0xe0, 0xc3} },
+{ 0x0f0d,      16,     {0x94, 0x04, 0x40, 0xc7, 0xe4, 0xf5, 0x26, 0x90, 0x01, 0x1e, 0xf0, 0x90, 0x01, 0x1e, 0xe0, 0xff} },
+{ 0x0f1d,      16,     {0xc3, 0x94, 0x04, 0x50, 0x1a, 0x74, 0xf8, 0x2f, 0xf5, 0x82, 0xe4, 0x34, 0x02, 0xf5, 0x83, 0xe4} },
+{ 0x0f2d,      16,     {0xf0, 0x74, 0x22, 0x2f, 0xf8, 0xe4, 0xf6, 0x90, 0x01, 0x1e, 0xe0, 0x04, 0xf0, 0x80, 0xdc, 0xe4} },
+{ 0x0f3d,      16,     {0xf5, 0x30, 0xe5, 0xc0, 0x60, 0x2f, 0x90, 0x01, 0x1e, 0x74, 0x01, 0xf0, 0x90, 0x01, 0x1e, 0xe0} },
+{ 0x0f4d,      16,     {0xff, 0xd3, 0x94, 0x04, 0x50, 0x1f, 0xef, 0x14, 0xff, 0x74, 0x01, 0xa8, 0x07, 0x08, 0x80, 0x02} },
+{ 0x0f5d,      16,     {0xc3, 0x33, 0xd8, 0xfc, 0x42, 0x30, 0x7e, 0x01, 0x7f, 0x1e, 0x12, 0x83, 0xb7, 0x90, 0x01, 0x1e} },
+{ 0x0f6d,      16,     {0xe0, 0x04, 0xf0, 0x80, 0xd7, 0xe4, 0xf5, 0x3a, 0x90, 0x01, 0x1e, 0xf0, 0x90, 0x01, 0x1e, 0xe0} },
+{ 0x0f7d,      16,     {0xff, 0x75, 0xf0, 0x08, 0xa4, 0x24, 0x06, 0xf5, 0x82, 0xe4, 0x34, 0x20, 0xf5, 0x83, 0xe0, 0x54} },
+{ 0x0f8d,      16,     {0xf0, 0xfe, 0x74, 0xc5, 0x2f, 0xf5, 0x82, 0xe4, 0x34, 0x01, 0xf5, 0x83, 0xee, 0xf0, 0x74, 0x36} },
+{ 0x0f9d,      16,     {0x2f, 0xf8, 0xa6, 0x06, 0x74, 0x32, 0x2f, 0xf8, 0xe4, 0xf6, 0x74, 0x2c, 0x2f, 0xf8, 0xe4, 0xf6} },
+{ 0x0fad,      16,     {0x74, 0xfc, 0x2f, 0xf5, 0x82, 0xe4, 0x34, 0x02, 0xf5, 0x83, 0xe4, 0xf0, 0x90, 0x01, 0x1e, 0xe0} },
+{ 0x0fbd,      16,     {0x04, 0xf0, 0xe0, 0xb4, 0x04, 0xb6, 0x90, 0x20, 0x60, 0xe0, 0x54, 0x0f, 0xf5, 0x4b, 0x60, 0x5e} },
+{ 0x0fcd,      4,      {0xe4, 0x90, 0x01, 0x1e} },
+{ 0x0fd1,      16,     {0xf0, 0x90, 0x01, 0x1e, 0xe0, 0xff, 0xc3, 0x94, 0x04, 0x50, 0xe7, 0x74, 0x01, 0xa8, 0x07, 0x08} },
+{ 0x0fe1,      16,     {0x80, 0x02, 0xc3, 0x33, 0xd8, 0xfc, 0x55, 0x4b, 0x60, 0x38, 0x90, 0x01, 0x1e, 0xe0, 0xff, 0x75} },
+{ 0x0ff1,      16,     {0xf0, 0x08, 0xa4, 0x24, 0x02, 0xf5, 0x82, 0xe4, 0x34, 0x20, 0xf5, 0x83, 0xe0, 0xfe, 0xef, 0x75} },
+{ 0x1001,      16,     {0xf0, 0x08, 0xa4, 0x24, 0x05, 0xf5, 0x82, 0xe4, 0x34, 0x20, 0xf5, 0x83, 0xe0, 0xef, 0x75, 0xf0} },
+{ 0x1011,      16,     {0x08, 0xa4, 0x24, 0x06, 0xf5, 0x82, 0xe4, 0x34, 0x20, 0xf5, 0x83, 0xe0, 0xfe, 0x7d, 0x06, 0x12} },
+{ 0x1021,      11,     {0x83, 0x2d, 0x90, 0x01, 0x1e, 0xe0, 0x04, 0xf0, 0x80, 0xa7, 0x22} },
+{ 0x102c,      4,      {0xad, 0x07, 0xac, 0x06} },
+{ 0x1030,      16,     {0x79, 0x06, 0xed, 0x24, 0x04, 0xf5, 0x82, 0xe4, 0x3c, 0xf5, 0x83, 0xe0, 0xfa, 0xa3, 0xe0, 0xfb} },
+{ 0x1040,      16,     {0x4a, 0x70, 0x03, 0x02, 0x11, 0x74, 0xe9, 0xb4, 0x07, 0x00, 0x40, 0x03, 0x02, 0x11, 0x46, 0x90} },
+{ 0x1050,      16,     {0x10, 0x56, 0xf8, 0x28, 0x28, 0x73, 0x02, 0x11, 0x24, 0x02, 0x10, 0xdc, 0x02, 0x10, 0xc5, 0x02} },
+{ 0x1060,      16,     {0x10, 0xab, 0x02, 0x10, 0x9a, 0x02, 0x10, 0x85, 0x02, 0x10, 0x6b, 0x90, 0x7f, 0xa5, 0xe0, 0x44} },
+{ 0x1070,      16,     {0x80, 0xf0, 0x8d, 0x82, 0x8c, 0x83, 0xa3, 0xe0, 0xff, 0x25, 0xe0, 0x44, 0xa0, 0x90, 0x7f, 0xa6} },
+{ 0x1080,      16,     {0xf0, 0x19, 0x02, 0x11, 0x46, 0x19, 0x8d, 0x82, 0x8c, 0x83, 0xe0, 0xc3, 0x94, 0x20, 0x40, 0x0a} },
+{ 0x1090,      16,     {0xa3, 0xa3, 0xe0, 0x90, 0x7f, 0xa6, 0xf0, 0x02, 0x11, 0x46, 0x8d, 0x82, 0x8c, 0x83, 0xa3, 0xa3} },
+{ 0x10a0,      16,     {0xe0, 0xa3, 0xe0, 0x90, 0x7f, 0xa6, 0xf0, 0x19, 0x02, 0x11, 0x46, 0x90, 0x7f, 0xa5, 0xe0, 0x44} },
+{ 0x10b0,      16,     {0x80, 0xf0, 0x8d, 0x82, 0x8c, 0x83, 0xa3, 0xe0, 0xff, 0x25, 0xe0, 0x44, 0xa1, 0x90, 0x7f, 0xa6} },
+{ 0x10c0,      16,     {0xf0, 0x19, 0x02, 0x11, 0x46, 0xeb, 0x64, 0x01, 0x4a, 0x70, 0x08, 0x90, 0x7f, 0xa5, 0xe0, 0x44} },
+{ 0x10d0,      16,     {0x20, 0xf0, 0x19, 0x90, 0x7f, 0xa6, 0xe0, 0xf5, 0x54, 0x19, 0x80, 0x6a, 0xed, 0x24, 0x04, 0xf5} },
+{ 0x10e0,      16,     {0x82, 0xe4, 0x3c, 0xf5, 0x83, 0xe0, 0xfe, 0xa3, 0xe0, 0x64, 0x02, 0x4e, 0x70, 0x08, 0x90, 0x7f} },
+{ 0x10f0,      16,     {0xa5, 0xe0, 0x44, 0x20, 0xf0, 0x19, 0x90, 0x7f, 0xa6, 0xe0, 0xff, 0xed, 0x24, 0x06, 0xf5, 0x82} },
+{ 0x1100,      16,     {0xe4, 0x3c, 0xf5, 0x83, 0xe4, 0x75, 0xf0, 0x01, 0x12, 0x9f, 0xa4, 0x85, 0xf0, 0x82, 0xf5, 0x83} },
+{ 0x1110,      16,     {0xef, 0xf0, 0xed, 0x24, 0x04, 0xf5, 0x82, 0xe4, 0x3c, 0xf5, 0x83, 0x74, 0xff, 0xf5, 0xf0, 0x12} },
+{ 0x1120,      16,     {0x9f, 0x8e, 0x80, 0x22, 0x90, 0x7f, 0xa5, 0xe0, 0x44, 0x40, 0xf0, 0x90, 0x7f, 0xa6, 0xe0, 0xff} },
+{ 0x1130,      16,     {0xed, 0x24, 0x06, 0xf5, 0x82, 0xe4, 0x3c, 0xf5, 0x83, 0xe0, 0xfa, 0xa3, 0xe0, 0xf5, 0x82, 0x8a} },
+{ 0x1140,      16,     {0x83, 0xef, 0xf0, 0x7f, 0x08, 0x22, 0x90, 0x7f, 0xa5, 0xe0, 0xf5, 0x54, 0x30, 0xe0, 0xf7, 0x30} },
+{ 0x1150,      16,     {0xe2, 0x07, 0xe0, 0x44, 0x40, 0xf0, 0x7f, 0x06, 0x22, 0xe9, 0xd3, 0x94, 0x02, 0x50, 0x03, 0x02} },
+{ 0x1160,      16,     {0x10, 0x32, 0xe5, 0x54, 0x30, 0xe1, 0x03, 0x02, 0x10, 0x32, 0x90, 0x7f, 0xa5, 0xe0, 0x44, 0x40} },
+{ 0x1170,      6,      {0xf0, 0x7f, 0x07, 0x22, 0x7f, 0x08} },
+{ 0x1176,      1,      {0x22} },
+{ 0x1177,      2,      {0xae, 0x07} },
+{ 0x1179,      16,     {0x7c, 0x02, 0xec, 0x14, 0x60, 0x15, 0x14, 0x70, 0x1e, 0x90, 0x7f, 0xa5, 0xe0, 0x44, 0x80, 0xf0} },
+{ 0x1189,      16,     {0xee, 0x25, 0xe0, 0x44, 0x40, 0x90, 0x7f, 0xa6, 0xf0, 0x80, 0x0c, 0x90, 0x7f, 0xa6, 0xed, 0xf0} },
+{ 0x1199,      16,     {0x90, 0x7f, 0xa5, 0xe0, 0x44, 0x40, 0xf0, 0x90, 0x7f, 0xa5, 0xe0, 0xfb, 0x30, 0xe0, 0xf8, 0xbc} },
+{ 0x11a9,      16,     {0x02, 0x0a, 0x20, 0xe1, 0x07, 0xe0, 0x44, 0x40, 0xf0, 0x7f, 0x07, 0x22, 0xeb, 0x30, 0xe2, 0x0a} },
+{ 0x11b9,      14,     {0x90, 0x7f, 0xa5, 0xe0, 0x44, 0x40, 0xf0, 0x7f, 0x06, 0x22, 0xdc, 0xb6, 0x7f, 0x08} },
+{ 0x11c7,      1,      {0x22} },
+{ 0x11c8,      16,     {0x7f, 0x05, 0x7e, 0x00, 0x12, 0x09, 0x29, 0x7f, 0x02, 0x7d, 0xff, 0x12, 0x11, 0x77, 0x7f, 0x05} },
+{ 0x11d8,      13,     {0x7e, 0x00, 0x12, 0x09, 0x29, 0x7f, 0x03, 0x7d, 0xff, 0x12, 0x11, 0x77, 0x22} },
+{ 0x11e5,      16,     {0xe4, 0x90, 0x01, 0xc9, 0xf0, 0x7e, 0x01, 0x7f, 0xca, 0x90, 0x01, 0xbe, 0xee, 0xf0, 0xa3, 0xef} },
+{ 0x11f5,      10,     {0xf0, 0x90, 0x01, 0xc2, 0xee, 0xf0, 0xa3, 0xef, 0xf0, 0x22} },
 { 0x1200,      16,     {0x12, 0x01, 0x00, 0x01, 0xff, 0xff, 0xff, 0x40, 0x10, 0x07, 0x01, 0x80, 0x42, 0x00, 0x01, 0x02} },
 { 0x1210,      16,     {0x03, 0x01, 0x09, 0x02, 0x58, 0x00, 0x01, 0x01, 0x04, 0x80, 0x3c, 0x09, 0x04, 0x00, 0x00, 0x0a} },
 { 0x1220,      16,     {0xff, 0xff, 0xff, 0x05, 0x07, 0x05, 0x81, 0x02, 0x40, 0x00, 0x00, 0x07, 0x05, 0x01, 0x02, 0x40} },
@@ -438,557+439,623 @@ static const struct whiteheat_hex_record whiteheat_firmware[] = {
 { 0x19a0,      16,     {0x80, 0x1b, 0xe0, 0xde, 0xfd, 0x90, 0x7f, 0xe2, 0xe0, 0x54, 0xbf, 0xf0, 0x90, 0x20, 0x58, 0x74} },
 { 0x19b0,      16,     {0x00, 0xf0, 0x90, 0x20, 0x19, 0xe0, 0x54, 0xfd, 0xf0, 0x90, 0x7f, 0xcd, 0xf0, 0x02, 0x13, 0x43} },
 { 0x19c0,      1,      {0x32} },
-{ 0x19c1,      4,      {0xad, 0x07, 0xac, 0x06} },
-{ 0x19c5,      16,     {0x79, 0x06, 0xed, 0x24, 0x04, 0xf5, 0x82, 0xe4, 0x3c, 0xf5, 0x83, 0xe0, 0xfa, 0xa3, 0xe0, 0xfb} },
-{ 0x19d5,      16,     {0x4a, 0x70, 0x03, 0x02, 0x1b, 0x09, 0xe9, 0xb4, 0x07, 0x00, 0x40, 0x03, 0x02, 0x1a, 0xdb, 0x90} },
-{ 0x19e5,      16,     {0x19, 0xeb, 0xf8, 0x28, 0x28, 0x73, 0x02, 0x1a, 0xb9, 0x02, 0x1a, 0x71, 0x02, 0x1a, 0x5a, 0x02} },
-{ 0x19f5,      16,     {0x1a, 0x40, 0x02, 0x1a, 0x2f, 0x02, 0x1a, 0x1a, 0x02, 0x1a, 0x00, 0x90, 0x7f, 0xa5, 0xe0, 0x44} },
-{ 0x1a05,      16,     {0x80, 0xf0, 0x8d, 0x82, 0x8c, 0x83, 0xa3, 0xe0, 0xff, 0x25, 0xe0, 0x44, 0xa0, 0x90, 0x7f, 0xa6} },
-{ 0x1a15,      16,     {0xf0, 0x19, 0x02, 0x1a, 0xdb, 0x19, 0x8d, 0x82, 0x8c, 0x83, 0xe0, 0xc3, 0x94, 0x20, 0x40, 0x0a} },
-{ 0x1a25,      16,     {0xa3, 0xa3, 0xe0, 0x90, 0x7f, 0xa6, 0xf0, 0x02, 0x1a, 0xdb, 0x8d, 0x82, 0x8c, 0x83, 0xa3, 0xa3} },
-{ 0x1a35,      16,     {0xe0, 0xa3, 0xe0, 0x90, 0x7f, 0xa6, 0xf0, 0x19, 0x02, 0x1a, 0xdb, 0x90, 0x7f, 0xa5, 0xe0, 0x44} },
-{ 0x1a45,      16,     {0x80, 0xf0, 0x8d, 0x82, 0x8c, 0x83, 0xa3, 0xe0, 0xff, 0x25, 0xe0, 0x44, 0xa1, 0x90, 0x7f, 0xa6} },
-{ 0x1a55,      16,     {0xf0, 0x19, 0x02, 0x1a, 0xdb, 0xeb, 0x64, 0x01, 0x4a, 0x70, 0x08, 0x90, 0x7f, 0xa5, 0xe0, 0x44} },
-{ 0x1a65,      16,     {0x20, 0xf0, 0x19, 0x90, 0x7f, 0xa6, 0xe0, 0xf5, 0x54, 0x19, 0x80, 0x6a, 0xed, 0x24, 0x04, 0xf5} },
-{ 0x1a75,      16,     {0x82, 0xe4, 0x3c, 0xf5, 0x83, 0xe0, 0xfe, 0xa3, 0xe0, 0x64, 0x02, 0x4e, 0x70, 0x08, 0x90, 0x7f} },
-{ 0x1a85,      16,     {0xa5, 0xe0, 0x44, 0x20, 0xf0, 0x19, 0x90, 0x7f, 0xa6, 0xe0, 0xff, 0xed, 0x24, 0x06, 0xf5, 0x82} },
-{ 0x1a95,      16,     {0xe4, 0x3c, 0xf5, 0x83, 0xe4, 0x75, 0xf0, 0x01, 0x12, 0x9b, 0xce, 0x85, 0xf0, 0x82, 0xf5, 0x83} },
-{ 0x1aa5,      16,     {0xef, 0xf0, 0xed, 0x24, 0x04, 0xf5, 0x82, 0xe4, 0x3c, 0xf5, 0x83, 0x74, 0xff, 0xf5, 0xf0, 0x12} },
-{ 0x1ab5,      16,     {0x9b, 0xb8, 0x80, 0x22, 0x90, 0x7f, 0xa5, 0xe0, 0x44, 0x40, 0xf0, 0x90, 0x7f, 0xa6, 0xe0, 0xff} },
-{ 0x1ac5,      16,     {0xed, 0x24, 0x06, 0xf5, 0x82, 0xe4, 0x3c, 0xf5, 0x83, 0xe0, 0xfa, 0xa3, 0xe0, 0xf5, 0x82, 0x8a} },
-{ 0x1ad5,      16,     {0x83, 0xef, 0xf0, 0x7f, 0x08, 0x22, 0x90, 0x7f, 0xa5, 0xe0, 0xf5, 0x54, 0x30, 0xe0, 0xf7, 0x30} },
-{ 0x1ae5,      16,     {0xe2, 0x07, 0xe0, 0x44, 0x40, 0xf0, 0x7f, 0x06, 0x22, 0xe9, 0xd3, 0x94, 0x02, 0x50, 0x03, 0x02} },
-{ 0x1af5,      16,     {0x19, 0xc7, 0xe5, 0x54, 0x30, 0xe1, 0x03, 0x02, 0x19, 0xc7, 0x90, 0x7f, 0xa5, 0xe0, 0x44, 0x40} },
-{ 0x1b05,      6,      {0xf0, 0x7f, 0x07, 0x22, 0x7f, 0x08} },
-{ 0x1b0b,      1,      {0x22} },
-{ 0x1b0c,      16,     {0x7f, 0x05, 0x7e, 0x00, 0x12, 0x09, 0x23, 0x7f, 0x02, 0x7d, 0xff, 0x12, 0x81, 0xe0, 0x7f, 0x05} },
-{ 0x1b1c,      13,     {0x7e, 0x00, 0x12, 0x09, 0x23, 0x7f, 0x03, 0x7d, 0xff, 0x12, 0x81, 0xe0, 0x22} },
-{ 0x1b29,      16,     {0xff, 0xfe, 0xfd, 0xfc, 0xfb, 0xfa, 0xf9, 0xf8, 0xf7, 0xf6, 0xf5, 0xf4, 0xf3, 0xf2, 0xf1, 0xf0} },
-{ 0x8000,      4,      {0x8e, 0x54, 0x8f, 0x55} },
-{ 0x8004,      16,     {0x75, 0x56, 0x03, 0xe5, 0x55, 0x24, 0x04, 0xf5, 0x82, 0xe4, 0x35, 0x54, 0xf5, 0x83, 0xe0, 0xfe} },
-{ 0x8014,      16,     {0xa3, 0xe0, 0x4e, 0x70, 0x03, 0x02, 0x81, 0x0e, 0xe5, 0x56, 0x60, 0x4e, 0x14, 0x60, 0x38, 0x14} },
-{ 0x8024,      16,     {0x60, 0x20, 0x14, 0x60, 0x03, 0x02, 0x80, 0xb2, 0x90, 0x7f, 0xa5, 0xe0, 0x44, 0x80, 0xf0, 0x85} },
-{ 0x8034,      16,     {0x55, 0x82, 0x85, 0x54, 0x83, 0xa3, 0xe0, 0xff, 0x25, 0xe0, 0x44, 0xa0, 0x90, 0x7f, 0xa6, 0xf0} },
-{ 0x8044,      16,     {0x80, 0x6c, 0x85, 0x55, 0x82, 0x85, 0x54, 0x83, 0xe0, 0xc3, 0x94, 0x20, 0x40, 0x09, 0xa3, 0xa3} },
-{ 0x8054,      16,     {0xe0, 0x90, 0x7f, 0xa6, 0xf0, 0x80, 0x57, 0x15, 0x56, 0x85, 0x55, 0x82, 0x85, 0x54, 0x83, 0xa3} },
-{ 0x8064,      16,     {0xa3, 0xe0, 0xa3, 0xe0, 0x90, 0x7f, 0xa6, 0xf0, 0x80, 0x44, 0xe5, 0x55, 0x24, 0x06, 0xf5, 0x82} },
-{ 0x8074,      16,     {0xe4, 0x35, 0x54, 0xf5, 0x83, 0xe4, 0x75, 0xf0, 0x01, 0x12, 0x9b, 0xce, 0x85, 0xf0, 0x82, 0xf5} },
-{ 0x8084,      16,     {0x83, 0xe0, 0x90, 0x7f, 0xa6, 0xf0, 0x90, 0x7f, 0xa5, 0xe0, 0x44, 0x40, 0xf0, 0xe5, 0x55, 0x24} },
-{ 0x8094,      16,     {0x04, 0xf5, 0x82, 0xe4, 0x35, 0x54, 0xf5, 0x83, 0x74, 0xff, 0xf5, 0xf0, 0x12, 0x9b, 0xb8, 0x85} },
-{ 0x80a4,      16,     {0x55, 0x82, 0x85, 0x54, 0x83, 0xa3, 0xa3, 0xe4, 0x75, 0xf0, 0x01, 0x12, 0x9b, 0xb8, 0x90, 0x7f} },
-{ 0x80b4,      16,     {0xa5, 0xe0, 0xf5, 0x57, 0x30, 0xe0, 0xf7, 0x30, 0xe2, 0x07, 0xe0, 0x44, 0x40, 0xf0, 0x7f, 0x06} },
-{ 0x80c4,      16,     {0x22, 0xe5, 0x57, 0x20, 0xe1, 0x0a, 0x90, 0x7f, 0xa5, 0xe0, 0x44, 0x40, 0xf0, 0x7f, 0x07, 0x22} },
-{ 0x80d4,      16,     {0xe5, 0x56, 0x70, 0x31, 0x7f, 0x01, 0x7e, 0x00, 0x12, 0x09, 0x23, 0x90, 0x7f, 0xa5, 0xe0, 0x44} },
-{ 0x80e4,      16,     {0x80, 0xf0, 0x85, 0x55, 0x82, 0x85, 0x54, 0x83, 0xa3, 0xe0, 0xff, 0x25, 0xe0, 0x44, 0xa0, 0x90} },
-{ 0x80f4,      16,     {0x7f, 0xa6, 0xf0, 0x90, 0x7f, 0xa5, 0xe0, 0xf5, 0x57, 0x30, 0xe0, 0xf7, 0x30, 0xe1, 0xd5, 0x75} },
-{ 0x8104,      12,     {0x56, 0x03, 0x02, 0x80, 0x07, 0x15, 0x56, 0x02, 0x80, 0x07, 0x7f, 0x08} },
-{ 0x8110,      1,      {0x22} },
-{ 0x8111,      2,      {0xac, 0x07} },
-{ 0x8113,      16,     {0x90, 0x7f, 0xa5, 0xe0, 0x44, 0x80, 0xf0, 0xec, 0x25, 0xe0, 0x44, 0x41, 0x90, 0x7f, 0xa6, 0xf0} },
-{ 0x8123,      16,     {0x7b, 0x3c, 0xaf, 0x03, 0x1b, 0xef, 0x70, 0x16, 0x90, 0x7f, 0xa5, 0xe0, 0x44, 0x40, 0xf0, 0x90} },
-{ 0x8133,      16,     {0x7f, 0xa6, 0xe0, 0xfd, 0x7d, 0x32, 0xaf, 0x05, 0x1d, 0xef, 0x60, 0xd4, 0x80, 0xf8, 0x90, 0x7f} },
-{ 0x8143,      16,     {0xa5, 0xe0, 0xfd, 0x30, 0xe0, 0xdc, 0x20, 0xe1, 0x09, 0xe0, 0x44, 0x40, 0xf0, 0x7e, 0xff, 0x7f} },
-{ 0x8153,      16,     {0xf9, 0x22, 0xed, 0x30, 0xe2, 0x0c, 0x90, 0x7f, 0xa5, 0xe0, 0x44, 0x40, 0xf0, 0x7e, 0xff, 0x7f} },
-{ 0x8163,      16,     {0xfa, 0x22, 0x90, 0x7f, 0xa5, 0xe0, 0x44, 0x20, 0xf0, 0x90, 0x7f, 0xa6, 0xe0, 0xfd, 0x7b, 0x1e} },
-{ 0x8173,      16,     {0xaf, 0x03, 0x1b, 0xef, 0x70, 0x16, 0x90, 0x7f, 0xa5, 0xe0, 0x44, 0x40, 0xf0, 0x90, 0x7f, 0xa6} },
-{ 0x8183,      16,     {0xe0, 0xfd, 0x7d, 0x32, 0xaf, 0x05, 0x1d, 0xef, 0x60, 0x86, 0x80, 0xf8, 0x90, 0x7f, 0xa5, 0xe0} },
-{ 0x8193,      16,     {0xfd, 0x20, 0xe0, 0xdc, 0x7b, 0x3c, 0xaf, 0x03, 0x1b, 0xef, 0x70, 0x19, 0x90, 0x7f, 0xa5, 0xe0} },
-{ 0x81a3,      16,     {0x44, 0x40, 0xf0, 0x90, 0x7f, 0xa6, 0xe0, 0xfd, 0x7d, 0x32, 0xaf, 0x05, 0x1d, 0xef, 0x70, 0x03} },
-{ 0x81b3,      16,     {0x02, 0x81, 0x13, 0x80, 0xf5, 0x90, 0x7f, 0xa5, 0xe0, 0xfd, 0x30, 0xe0, 0xd9, 0x30, 0xe2, 0x09} },
-{ 0x81c3,      16,     {0xe0, 0x44, 0x40, 0xf0, 0x7e, 0xff, 0x7f, 0xfa, 0x22, 0xc2, 0xaf, 0x90, 0x7f, 0xa5, 0xe0, 0x44} },
-{ 0x81d3,      12,     {0x40, 0xf0, 0x90, 0x7f, 0xa6, 0xe0, 0xfd, 0xd2, 0xaf, 0xff, 0x7e, 0x00} },
-{ 0x81df,      1,      {0x22} },
-{ 0x81e0,      2,      {0xae, 0x07} },
-{ 0x81e2,      16,     {0x7c, 0x02, 0xec, 0x14, 0x60, 0x15, 0x14, 0x70, 0x1e, 0x90, 0x7f, 0xa5, 0xe0, 0x44, 0x80, 0xf0} },
-{ 0x81f2,      16,     {0xee, 0x25, 0xe0, 0x44, 0x40, 0x90, 0x7f, 0xa6, 0xf0, 0x80, 0x0c, 0x90, 0x7f, 0xa6, 0xed, 0xf0} },
-{ 0x8202,      16,     {0x90, 0x7f, 0xa5, 0xe0, 0x44, 0x40, 0xf0, 0x90, 0x7f, 0xa5, 0xe0, 0xfb, 0x30, 0xe0, 0xf8, 0xbc} },
-{ 0x8212,      16,     {0x02, 0x0a, 0x20, 0xe1, 0x07, 0xe0, 0x44, 0x40, 0xf0, 0x7f, 0x07, 0x22, 0xeb, 0x30, 0xe2, 0x0a} },
-{ 0x8222,      14,     {0x90, 0x7f, 0xa5, 0xe0, 0x44, 0x40, 0xf0, 0x7f, 0x06, 0x22, 0xdc, 0xb6, 0x7f, 0x08} },
-{ 0x8230,      1,      {0x22} },
-{ 0x8231,      16,     {0xc0, 0xe0, 0xc0, 0x83, 0xc0, 0x82, 0xc2, 0xa9, 0x90, 0x03, 0x00, 0x74, 0x19, 0xf0, 0xd2, 0xa9} },
-{ 0x8241,      15,     {0x53, 0x91, 0x7f, 0x90, 0x01, 0xc4, 0xe4, 0xf0, 0xd0, 0x82, 0xd0, 0x83, 0xd0, 0xe0, 0x32} },
-{ 0x8250,      16,     {0xef, 0x75, 0xf0, 0x08, 0xa4, 0x24, 0x00, 0xf5, 0x82, 0xe4, 0x34, 0x20, 0xab, 0x82, 0xfa, 0xf5} },
-{ 0x8260,      16,     {0x83, 0xa3, 0xe4, 0xf0, 0x8b, 0x82, 0x8a, 0x83, 0xa3, 0xa3, 0xa3, 0xe0, 0xf5, 0x5e, 0x74, 0xbf} },
-{ 0x8270,      16,     {0xf0, 0x8b, 0x82, 0x8a, 0x83, 0xa3, 0xa3, 0xe0, 0x44, 0x10, 0xf0, 0x8b, 0x82, 0x8a, 0x83, 0xa3} },
-{ 0x8280,      16,     {0xa3, 0xa3, 0xe4, 0xf0, 0x8b, 0x82, 0x8a, 0x83, 0xa3, 0xf0, 0xf9, 0xed, 0x60, 0x1d, 0x74, 0x01} },
-{ 0x8290,      16,     {0x7e, 0x00, 0xa8, 0x07, 0x08, 0x80, 0x05, 0xc3, 0x33, 0xce, 0x33, 0xce, 0xd8, 0xf9, 0xff, 0xe4} },
-{ 0x82a0,      16,     {0xef, 0x55, 0x3b, 0x60, 0x04, 0x79, 0x09, 0x80, 0x02, 0x79, 0x0d, 0x8b, 0x82, 0x8a, 0x83, 0xa3} },
-{ 0x82b0,      16,     {0xa3, 0xa3, 0x74, 0xbf, 0xf0, 0x8b, 0x82, 0x8a, 0x83, 0xa3, 0xa3, 0xe0, 0x54, 0xef, 0xf0, 0x8b} },
-{ 0x82c0,      16,     {0x82, 0x8a, 0x83, 0xa3, 0xa3, 0xa3, 0xe5, 0x5e, 0xf0, 0xae, 0x02, 0xaf, 0x03, 0x8f, 0x82, 0x8e} },
-{ 0x82d0,      4,      {0x83, 0xa3, 0xe9, 0xf0} },
-{ 0x82d4,      1,      {0x22} },
-{ 0x82d5,      4,      {0x8f, 0x5e, 0x8d, 0x5f} },
-{ 0x82d9,      16,     {0xe4, 0xf5, 0x60, 0x74, 0x3c, 0x2f, 0xf8, 0x76, 0x08, 0xe5, 0x5e, 0x75, 0xf0, 0x0d, 0xa4, 0x24} },
-{ 0x82e9,      16,     {0x02, 0xf5, 0x82, 0xe4, 0x34, 0x03, 0xf5, 0x83, 0xe0, 0xfc, 0xa3, 0xe0, 0xfd, 0xa3, 0xe0, 0xfe} },
-{ 0x82f9,      16,     {0xa3, 0xe0, 0xff, 0x7b, 0x80, 0x7a, 0x25, 0x79, 0x00, 0x78, 0x00, 0xc3, 0x12, 0x9c, 0xea, 0x50} },
-{ 0x8309,      16,     {0x3c, 0xe5, 0x5e, 0x75, 0xf0, 0x0d, 0xa4, 0x24, 0x02, 0xf5, 0x82, 0xe4, 0x34, 0x03, 0xf5, 0x83} },
-{ 0x8319,      16,     {0xe0, 0xfc, 0xa3, 0xe0, 0xfd, 0xa3, 0xe0, 0xfe, 0xa3, 0xe0, 0xff, 0x7b, 0x00, 0x7a, 0x96, 0x78} },
-{ 0x8329,      16,     {0x00, 0xc3, 0x12, 0x9c, 0xea, 0x40, 0x0c, 0x75, 0x60, 0x40, 0x74, 0x3c, 0x25, 0x5e, 0xf8, 0x76} },
-{ 0x8339,      16,     {0x10, 0x80, 0x0a, 0x75, 0x60, 0x80, 0x74, 0x3c, 0x25, 0x5e, 0xf8, 0x76, 0x38, 0xe5, 0x60, 0x45} },
-{ 0x8349,      16,     {0x5f, 0x44, 0x01, 0xff, 0xe5, 0x5e, 0x75, 0xf0, 0x08, 0xa4, 0x24, 0x02, 0xf5, 0x82, 0xe4, 0x34} },
-{ 0x8359,      5,      {0x20, 0xf5, 0x83, 0xef, 0xf0} },
-{ 0x835e,      1,      {0x22} },
-{ 0x835f,      16,     {0x8f, 0x82, 0x8e, 0x83, 0xe0, 0x14, 0xf5, 0x54, 0x75, 0xf0, 0x08, 0xa4, 0x24, 0x00, 0xf5, 0x82} },
-{ 0x836f,      16,     {0xe4, 0x34, 0x20, 0xaf, 0x82, 0xf5, 0x55, 0x8f, 0x56, 0xe5, 0x54, 0x25, 0xe0, 0x24, 0xc6, 0xf5} },
-{ 0x837f,      16,     {0x82, 0xe4, 0x34, 0x7f, 0xf5, 0x83, 0xe0, 0x20, 0xe1, 0x0f, 0xe5, 0x54, 0x25, 0xe0, 0x24, 0xc7} },
-{ 0x838f,      16,     {0xf5, 0x82, 0xe4, 0x34, 0x7f, 0xf5, 0x83, 0xe4, 0xf0, 0x74, 0x22, 0x25, 0x54, 0xf8, 0xe4, 0xf6} },
-{ 0x839f,      16,     {0xe5, 0x56, 0x24, 0x04, 0xf5, 0x82, 0xe4, 0x35, 0x55, 0xf5, 0x83, 0xe0, 0x44, 0x03, 0xf0, 0xaf} },
-{ 0x83af,      16,     {0x54, 0x7d, 0x06, 0x12, 0x82, 0xd5, 0xaf, 0x54, 0x7d, 0x01, 0x12, 0x82, 0x50, 0x85, 0x56, 0x82} },
-{ 0x83bf,      16,     {0x85, 0x55, 0x83, 0xa3, 0xa3, 0xe0, 0x20, 0xe0, 0x22, 0xe0, 0xff, 0xe5, 0x56, 0x24, 0x05, 0xf5} },
-{ 0x83cf,      16,     {0x82, 0xe4, 0x35, 0x55, 0xf5, 0x83, 0xe0, 0xe5, 0x56, 0x24, 0x06, 0xf5, 0x82, 0xe4, 0x35, 0x55} },
-{ 0x83df,      16,     {0xf5, 0x83, 0xe0, 0xff, 0xaf, 0x54, 0x7d, 0x06, 0x12, 0x82, 0xd5, 0x74, 0xf8, 0x25, 0x54, 0xf5} },
-{ 0x83ef,      16,     {0x82, 0xe4, 0x34, 0x02, 0xf5, 0x83, 0xe4, 0xf0, 0xe5, 0x54, 0x25, 0xe0, 0xff, 0xc3, 0x74, 0x0c} },
-{ 0x83ff,      16,     {0x9f, 0x75, 0xf0, 0x40, 0xa4, 0x24, 0x40, 0xf5, 0x82, 0xe5, 0xf0, 0x34, 0x7b, 0xaf, 0x82, 0xfe} },
-{ 0x840f,      16,     {0xe5, 0x54, 0x25, 0xe0, 0x24, 0xef, 0xf5, 0x82, 0xe4, 0x34, 0x02, 0xf5, 0x83, 0xee, 0xf0, 0xa3} },
-{ 0x841f,      16,     {0xef, 0xf0, 0xaf, 0x54, 0x74, 0x01, 0xa8, 0x07, 0x08, 0x80, 0x02, 0xc3, 0x33, 0xd8, 0xfc, 0x42} },
-{ 0x842f,      3,      {0x30, 0x7f, 0x00} },
-{ 0x8432,      1,      {0x22} },
-{ 0x8433,      16,     {0x8f, 0x82, 0x8e, 0x83, 0xe0, 0x14, 0xf5, 0x54, 0xff, 0xe4, 0xfd, 0x12, 0x82, 0x50, 0x74, 0xf8} },
-{ 0x8443,      16,     {0x25, 0x54, 0xf5, 0x82, 0xe4, 0x34, 0x02, 0xf5, 0x83, 0xe4, 0xf0, 0xe5, 0x54, 0x75, 0xf0, 0x08} },
-{ 0x8453,      16,     {0xa4, 0x24, 0x00, 0xf5, 0x82, 0xe4, 0x34, 0x20, 0xaf, 0x82, 0xf5, 0x56, 0x8f, 0x57, 0xf5, 0x83} },
-{ 0x8463,      16,     {0xe5, 0x82, 0x24, 0x04, 0xf5, 0x82, 0xe4, 0x35, 0x83, 0xf5, 0x83, 0xe0, 0x54, 0xfc, 0xf0, 0xaf} },
-{ 0x8473,      16,     {0x54, 0x7d, 0x06, 0x12, 0x82, 0xd5, 0xe5, 0x57, 0x24, 0x05, 0xf5, 0x82, 0xe4, 0x35, 0x56, 0xf5} },
-{ 0x8483,      16,     {0x83, 0xe0, 0x30, 0xe0, 0x09, 0x85, 0x57, 0x82, 0x85, 0x56, 0x83, 0xe0, 0xf5, 0x55, 0xaf, 0x54} },
-{ 0x8493,      16,     {0x74, 0x01, 0xa8, 0x07, 0x08, 0x80, 0x02, 0xc3, 0x33, 0xd8, 0xfc, 0xf4, 0x52, 0x30, 0xe5, 0x54} },
-{ 0x84a3,      16,     {0x25, 0xe0, 0x24, 0xc6, 0xf5, 0x82, 0xe4, 0x34, 0x7f, 0xf5, 0x83, 0xe0, 0x20, 0xe1, 0x0f, 0xe5} },
-{ 0x84b3,      16,     {0x54, 0x25, 0xe0, 0x24, 0xc7, 0xf5, 0x82, 0xe4, 0x34, 0x7f, 0xf5, 0x83, 0xe4, 0xf0, 0x7f, 0x00} },
-{ 0x84c3,      1,      {0x22} },
-{ 0x84c4,      4,      {0x8e, 0x54, 0x8f, 0x55} },
-{ 0x84c8,      16,     {0x8f, 0x82, 0x8e, 0x83, 0xe0, 0x14, 0xf5, 0x56, 0x75, 0xf0, 0x08, 0xa4, 0x24, 0x01, 0xf5, 0x82} },
-{ 0x84d8,      16,     {0xe4, 0x34, 0x20, 0xf5, 0x83, 0xe0, 0x54, 0x03, 0x70, 0x23, 0x85, 0x55, 0x82, 0x8e, 0x83, 0xa3} },
-{ 0x84e8,      16,     {0xe0, 0x30, 0xe0, 0x07, 0xaf, 0x56, 0x7d, 0x02, 0x12, 0x82, 0xd5, 0x85, 0x55, 0x82, 0x85, 0x54} },
-{ 0x84f8,      15,     {0x83, 0xa3, 0xe0, 0x30, 0xe1, 0x07, 0xaf, 0x56, 0x7d, 0x04, 0x12, 0x82, 0xd5, 0x7f, 0x00} },
-{ 0x8507,      1,      {0x22} },
-{ 0x8508,      16,     {0x8f, 0x82, 0x8e, 0x83, 0xc0, 0x83, 0xc0, 0x82, 0xe0, 0xfd, 0xa3, 0xa3, 0xa3, 0xe0, 0xfc, 0xed} },
-{ 0x8518,      16,     {0x6c, 0xd0, 0x82, 0xd0, 0x83, 0xf0, 0x8f, 0x82, 0x8e, 0x83, 0xa3, 0xa3, 0xa3, 0xc0, 0x83, 0xc0} },
-{ 0x8528,      16,     {0x82, 0xe0, 0xfd, 0x8f, 0x82, 0x8e, 0x83, 0xe0, 0xfc, 0xed, 0x6c, 0xd0, 0x82, 0xd0, 0x83, 0xf0} },
-{ 0x8538,      16,     {0x8f, 0x82, 0x8e, 0x83, 0xc0, 0x83, 0xc0, 0x82, 0xa3, 0xa3, 0xa3, 0xe0, 0xfd, 0xec, 0x6d, 0xd0} },
-{ 0x8548,      16,     {0x82, 0xd0, 0x83, 0xf0, 0x8f, 0x82, 0x8e, 0x83, 0xa3, 0xc0, 0x83, 0xc0, 0x82, 0xe0, 0xfd, 0x8f} },
-{ 0x8558,      16,     {0x82, 0x8e, 0x83, 0xa3, 0xa3, 0xe0, 0xfc, 0xed, 0x6c, 0xd0, 0x82, 0xd0, 0x83, 0xf0, 0x8f, 0x82} },
-{ 0x8568,      16,     {0x8e, 0x83, 0xa3, 0xa3, 0xc0, 0x83, 0xc0, 0x82, 0xe0, 0xfd, 0x8f, 0x82, 0x8e, 0x83, 0xa3, 0xe0} },
-{ 0x8578,      16,     {0xfc, 0xed, 0x6c, 0xd0, 0x82, 0xd0, 0x83, 0xf0, 0x8f, 0x82, 0x8e, 0x83, 0xa3, 0xc0, 0x83, 0xc0} },
-{ 0x8588,      16,     {0x82, 0xe0, 0xfd, 0x8f, 0x82, 0x8e, 0x83, 0xa3, 0xa3, 0xe0, 0xff, 0xed, 0x6f, 0xd0, 0x82, 0xd0} },
-{ 0x8598,      3,      {0x83, 0xf0, 0x22} },
-{ 0x859b,      16,     {0x79, 0x0d, 0x8e, 0x54, 0x8f, 0x55, 0x8f, 0x82, 0x8e, 0x83, 0xe0, 0x75, 0xf0, 0x0d, 0xa4, 0x24} },
-{ 0x85ab,      16,     {0xf4, 0xf5, 0x82, 0xe4, 0x34, 0x02, 0xaf, 0x82, 0xfe, 0xad, 0x01, 0x19, 0xed, 0x60, 0x24, 0x0f} },
-{ 0x85bb,      16,     {0xef, 0xac, 0x06, 0x70, 0x01, 0x0e, 0x14, 0xf5, 0x82, 0x8c, 0x83, 0xe0, 0xfd, 0x05, 0x55, 0xe5} },
-{ 0x85cb,      16,     {0x55, 0xaa, 0x54, 0x70, 0x02, 0x05, 0x54, 0x14, 0xf5, 0x82, 0x8a, 0x83, 0xe0, 0x6d, 0x60, 0xd9} },
-{ 0x85db,      5,      {0x7f, 0x01, 0x22, 0x7f, 0x00} },
-{ 0x85e0,      1,      {0x22} },
-{ 0x85e1,      4,      {0x8e, 0x54, 0x8f, 0x55} },
-{ 0x85e5,      16,     {0x8f, 0x82, 0x8e, 0x83, 0xe0, 0x14, 0xf5, 0x5b, 0x75, 0xf0, 0x08, 0xa4, 0x24, 0x00, 0xf5, 0x82} },
-{ 0x85f5,      16,     {0xe4, 0x34, 0x20, 0xaf, 0x82, 0xf5, 0x5c, 0x8f, 0x5d, 0xaa, 0x06, 0xa9, 0x55, 0x7b, 0x01, 0xc0} },
-{ 0x8605,      16,     {0x03, 0xc0, 0x01, 0xe5, 0x5b, 0x75, 0xf0, 0x0d, 0xa4, 0x24, 0x01, 0xf9, 0x74, 0x03, 0x35, 0xf0} },
-{ 0x8615,      16,     {0xa8, 0x01, 0xfc, 0xad, 0x03, 0xd0, 0x01, 0xd0, 0x03, 0x7e, 0x00, 0x7f, 0x0d, 0x12, 0x9b, 0x49} },
-{ 0x8625,      16,     {0x85, 0x55, 0x82, 0x85, 0x54, 0x83, 0xa3, 0xe0, 0xfc, 0xa3, 0xe0, 0xfd, 0xa3, 0xe0, 0xfe, 0xa3} },
-{ 0x8635,      16,     {0xe0, 0xff, 0x7b, 0x08, 0x7a, 0x00, 0x79, 0x00, 0x78, 0x00, 0xd3, 0x12, 0x9c, 0xea, 0x40, 0x10} },
-{ 0x8645,      16,     {0x85, 0x55, 0x82, 0x85, 0x54, 0x83, 0xa3, 0x12, 0x9d, 0x31, 0x00, 0x00, 0x00, 0x08, 0x80, 0x2e} },
-{ 0x8655,      16,     {0x85, 0x55, 0x82, 0x85, 0x54, 0x83, 0xa3, 0xe0, 0xfc, 0xa3, 0xe0, 0xfd, 0xa3, 0xe0, 0xfe, 0xa3} },
-{ 0x8665,      16,     {0xe0, 0xff, 0x7b, 0x00, 0x7a, 0x08, 0x79, 0x07, 0x78, 0x00, 0xc3, 0x12, 0x9c, 0xea, 0x50, 0x0e} },
-{ 0x8675,      16,     {0x85, 0x55, 0x82, 0x85, 0x54, 0x83, 0xa3, 0x12, 0x9d, 0x31, 0x00, 0x07, 0x08, 0x00, 0x85, 0x55} },
-{ 0x8685,      16,     {0x82, 0x85, 0x54, 0x83, 0xa3, 0xe0, 0xf8, 0xa3, 0xe0, 0xf9, 0xa3, 0xe0, 0xfa, 0xa3, 0xe0, 0xfb} },
-{ 0x8695,      16,     {0x7f, 0x00, 0x7e, 0x50, 0x7d, 0x46, 0x7c, 0x00, 0x12, 0x9c, 0x58, 0x8f, 0x59, 0x8e, 0x58, 0x8d} },
-{ 0x86a5,      16,     {0x57, 0x8c, 0x56, 0x7b, 0x0a, 0x7a, 0x00, 0x79, 0x00, 0x78, 0x00, 0x12, 0x9c, 0x58, 0xaf, 0x03} },
-{ 0x86b5,      16,     {0x8f, 0x5a, 0xaf, 0x59, 0xae, 0x58, 0xad, 0x57, 0xac, 0x56, 0x7b, 0x0a, 0x7a, 0x00, 0x79, 0x00} },
-{ 0x86c5,      16,     {0x78, 0x00, 0x12, 0x9c, 0x58, 0x8f, 0x59, 0x8e, 0x58, 0x8d, 0x57, 0x8c, 0x56, 0xe5, 0x5a, 0xc3} },
-{ 0x86d5,      16,     {0x94, 0x05, 0x40, 0x15, 0xe5, 0x59, 0x24, 0x01, 0xf5, 0x59, 0xe4, 0x35, 0x58, 0xf5, 0x58, 0xe4} },
-{ 0x86e5,      16,     {0x35, 0x57, 0xf5, 0x57, 0xe4, 0x35, 0x56, 0xf5, 0x56, 0x85, 0x5d, 0x82, 0x85, 0x5c, 0x83, 0xa3} },
-{ 0x86f5,      16,     {0xe4, 0xf0, 0x85, 0x5d, 0x82, 0x85, 0x5c, 0x83, 0xa3, 0xa3, 0xa3, 0xe0, 0x44, 0x80, 0xf0, 0x85} },
-{ 0x8705,      16,     {0x5d, 0x82, 0x85, 0x5c, 0x83, 0xe5, 0x59, 0xf0, 0xaf, 0x59, 0xae, 0x58, 0xad, 0x57, 0xac, 0x56} },
-{ 0x8715,      16,     {0x78, 0x08, 0x12, 0x9c, 0xfb, 0x85, 0x5d, 0x82, 0x85, 0x5c, 0x83, 0xa3, 0xef, 0xf0, 0x85, 0x5d} },
-{ 0x8725,      16,     {0x82, 0x85, 0x5c, 0x83, 0xa3, 0xa3, 0xa3, 0xe0, 0x54, 0x7f, 0xf0, 0xe4, 0xf5, 0x5a, 0xe5, 0x55} },
-{ 0x8735,      16,     {0x24, 0x08, 0xf5, 0x82, 0xe4, 0x35, 0x54, 0xf5, 0x83, 0xe0, 0xff, 0xb4, 0x62, 0x05, 0x43, 0x5a} },
-{ 0x8745,      16,     {0x0a, 0x80, 0x10, 0xef, 0xb4, 0x72, 0x05, 0x43, 0x5a, 0x08, 0x80, 0x07, 0xef, 0xb4, 0x74, 0x03} },
-{ 0x8755,      16,     {0x43, 0x5a, 0x02, 0xe5, 0x55, 0x24, 0x0b, 0xf5, 0x82, 0xe4, 0x35, 0x54, 0xf5, 0x83, 0xe0, 0xff} },
-{ 0x8765,      16,     {0x30, 0xe3, 0x03, 0x43, 0x5a, 0x80, 0xef, 0x30, 0xe7, 0x12, 0x43, 0x5a, 0x40, 0xe5, 0x5d, 0x24} },
-{ 0x8775,      16,     {0x04, 0xf5, 0x82, 0xe4, 0x35, 0x5c, 0xf5, 0x83, 0xe0, 0x44, 0x02, 0xf0, 0xe5, 0x55, 0x24, 0x0b} },
-{ 0x8785,      16,     {0xf5, 0x82, 0xe4, 0x35, 0x54, 0xf5, 0x83, 0xe0, 0xff, 0x20, 0xe1, 0x03, 0x30, 0xe4, 0x23, 0xaf} },
-{ 0x8795,      16,     {0x5b, 0x74, 0x01, 0xa8, 0x07, 0x08, 0x80, 0x02, 0xc3, 0x33, 0xd8, 0xfc, 0x42, 0x3b, 0xe5, 0x5d} },
-{ 0x87a5,      16,     {0x24, 0x04, 0xf5, 0x82, 0xe4, 0x35, 0x5c, 0xf5, 0x83, 0xe0, 0x44, 0x01, 0xf0, 0xe4, 0xf5, 0x5a} },
-{ 0x87b5,      16,     {0x80, 0x10, 0xaf, 0x5b, 0x74, 0x01, 0xa8, 0x07, 0x08, 0x80, 0x02, 0xc3, 0x33, 0xd8, 0xfc, 0xf4} },
-{ 0x87c5,      16,     {0x52, 0x3b, 0x85, 0x5d, 0x82, 0x85, 0x5c, 0x83, 0xa3, 0xa3, 0xa3, 0x74, 0xbf, 0xf0, 0x85, 0x5d} },
-{ 0x87d5,      16,     {0x82, 0x85, 0x5c, 0x83, 0xa3, 0xa3, 0xe4, 0xf0, 0xe5, 0x5a, 0xf0, 0xe5, 0x55, 0x24, 0x0a, 0xf5} },
-{ 0x87e5,      16,     {0x82, 0xe4, 0x35, 0x54, 0xf5, 0x83, 0xe0, 0xff, 0xe5, 0x5d, 0x24, 0x04, 0xf5, 0x82, 0xe4, 0x35} },
-{ 0x87f5,      16,     {0x5c, 0xf5, 0x83, 0xef, 0xf0, 0xe5, 0x55, 0x24, 0x0a, 0xf5, 0x82, 0xe4, 0x35, 0x54, 0xf5, 0x83} },
-{ 0x8805,      16,     {0xe0, 0xff, 0xe5, 0x5d, 0x24, 0x05, 0xf5, 0x82, 0xe4, 0x35, 0x5c, 0xf5, 0x83, 0xef, 0xf0, 0xe5} },
-{ 0x8815,      16,     {0x55, 0x24, 0x09, 0xf5, 0x82, 0xe4, 0x35, 0x54, 0xf5, 0x83, 0xe0, 0xff, 0xe5, 0x5d, 0x24, 0x06} },
-{ 0x8825,      16,     {0xf5, 0x82, 0xe4, 0x35, 0x5c, 0xf5, 0x83, 0xef, 0xf0, 0xe5, 0x55, 0x24, 0x09, 0xf5, 0x82, 0xe4} },
-{ 0x8835,      16,     {0x35, 0x54, 0xf5, 0x83, 0xe0, 0xff, 0xe5, 0x5d, 0x24, 0x07, 0xf5, 0x82, 0xe4, 0x35, 0x5c, 0xf5} },
-{ 0x8845,      16,     {0x83, 0xef, 0xf0, 0x85, 0x5d, 0x82, 0x85, 0x5c, 0x83, 0xa3, 0xa3, 0xa3, 0xe4, 0xf0, 0x85, 0x5d} },
-{ 0x8855,      16,     {0x82, 0x85, 0x5c, 0x83, 0xa3, 0xa3, 0xf0, 0xaf, 0x5b, 0x7d, 0x06, 0x12, 0x82, 0xd5, 0x75, 0x5a} },
-{ 0x8865,      16,     {0x08, 0xe5, 0x55, 0x24, 0x0c, 0xf5, 0x82, 0xe4, 0x35, 0x54, 0xf5, 0x83, 0xe0, 0x60, 0x03, 0x43} },
-{ 0x8875,      16,     {0x5a, 0x10, 0xe5, 0x5d, 0x24, 0x04, 0xf5, 0x82, 0xe4, 0x35, 0x5c, 0xf5, 0x83, 0xe0, 0x54, 0x03} },
-{ 0x8885,      16,     {0x45, 0x5a, 0xf0, 0xe5, 0x55, 0x24, 0x06, 0xf5, 0x82, 0xe4, 0x35, 0x54, 0xf5, 0x83, 0xe0, 0x14} },
-{ 0x8895,      16,     {0xff, 0x25, 0xe0, 0x25, 0xe0, 0xff, 0xe5, 0x55, 0x24, 0x05, 0xf5, 0x82, 0xe4, 0x35, 0x54, 0xf5} },
-{ 0x88a5,      16,     {0x83, 0xe0, 0x24, 0xfb, 0x4f, 0xf5, 0x5a, 0xe5, 0x55, 0x24, 0x07, 0xf5, 0x82, 0xe4, 0x35, 0x54} },
-{ 0x88b5,      16,     {0xf5, 0x83, 0xe0, 0x24, 0xd0, 0x60, 0x15, 0x14, 0x60, 0x17, 0x24, 0xc2, 0x60, 0x09, 0x24, 0x0a} },
-{ 0x88c5,      16,     {0x70, 0x12, 0x43, 0x5a, 0x18, 0x80, 0x0d, 0x43, 0x5a, 0x08, 0x80, 0x08, 0x43, 0x5a, 0x38, 0x80} },
-{ 0x88d5,      16,     {0x03, 0x43, 0x5a, 0x28, 0x85, 0x5d, 0x82, 0x85, 0x5c, 0x83, 0xa3, 0xa3, 0xa3, 0xe5, 0x5a, 0xf0} },
-{ 0x88e5,      9,      {0xaf, 0x5b, 0x7d, 0x01, 0x12, 0x82, 0x50, 0x7f, 0x00} },
-{ 0x88ee,      1,      {0x22} },
-{ 0x88ef,      16,     {0x8f, 0x82, 0x8e, 0x83, 0xe0, 0x14, 0xff, 0x75, 0xf0, 0x08, 0xa4, 0x24, 0x00, 0xf5, 0x82, 0xe4} },
-{ 0x88ff,      16,     {0x34, 0x20, 0xad, 0x82, 0xfc, 0x90, 0x01, 0x2c, 0x74, 0x08, 0xf0, 0xef, 0x04, 0xa3, 0xf0, 0xe4} },
-{ 0x890f,      16,     {0xa3, 0xf0, 0x8d, 0x82, 0x8c, 0x83, 0xe5, 0x82, 0x24, 0x06, 0xf5, 0x82, 0xe4, 0x35, 0x83, 0xf5} },
-{ 0x891f,      16,     {0x83, 0xe0, 0x90, 0x01, 0x2f, 0xf0, 0x8d, 0x82, 0x8c, 0x83, 0xe5, 0x82, 0x24, 0x05, 0xf5, 0x82} },
-{ 0x892f,      16,     {0xe4, 0x35, 0x83, 0xf5, 0x83, 0xe0, 0x54, 0x1e, 0x90, 0x01, 0x30, 0xf0, 0x74, 0x2c, 0x2f, 0xf8} },
-{ 0x893f,      16,     {0xe6, 0xa3, 0xf0, 0x74, 0x01, 0xa8, 0x07, 0x08, 0x80, 0x02, 0xc3, 0x33, 0xd8, 0xfc, 0xf5, 0x54} },
-{ 0x894f,      16,     {0x7f, 0x02, 0x12, 0x81, 0x11, 0xc3, 0xee, 0x64, 0x80, 0x94, 0x80, 0x40, 0xf3, 0xe5, 0x54, 0x5f} },
-{ 0x895f,      16,     {0x90, 0x01, 0x32, 0xf0, 0x7e, 0x01, 0x7f, 0x2c, 0x75, 0x60, 0x00, 0x75, 0x5f, 0x00, 0x75, 0x5e} },
-{ 0x896f,      11,     {0x00, 0x75, 0x5d, 0x00, 0x7d, 0x07, 0x12, 0x8e, 0x0c, 0x7f, 0x00} },
-{ 0x897a,      1,      {0x22} },
-{ 0x897b,      16,     {0x8f, 0x82, 0x8e, 0x83, 0xe0, 0x75, 0xf0, 0x08, 0xa4, 0x24, 0xf8, 0xf5, 0x82, 0xe4, 0x34, 0x1f} },
-{ 0x898b,      16,     {0xaf, 0x82, 0xfe, 0x90, 0x01, 0x33, 0x74, 0x0a, 0xf0, 0x8f, 0x82, 0x8e, 0x83, 0xe5, 0x82, 0x24} },
-{ 0x899b,      16,     {0x04, 0xf5, 0x82, 0xe4, 0x35, 0x83, 0xf5, 0x83, 0xe0, 0x90, 0x01, 0x34, 0xf0, 0x7e, 0x01, 0x7f} },
-{ 0x89ab,      16,     {0x33, 0x75, 0x60, 0x00, 0x75, 0x5f, 0x00, 0x75, 0x5e, 0x00, 0x75, 0x5d, 0x00, 0x7d, 0x02, 0x12} },
-{ 0x89bb,      4,      {0x8e, 0x0c, 0x7f, 0x00} },
-{ 0x89bf,      1,      {0x22} },
-{ 0x89c0,      16,     {0x8f, 0x82, 0x8e, 0x83, 0xe0, 0x75, 0xf0, 0x08, 0xa4, 0x24, 0xf8, 0xf5, 0x82, 0xe4, 0x34, 0x1f} },
-{ 0x89d0,      16,     {0xad, 0x82, 0xfc, 0x8f, 0x82, 0xa3, 0xe0, 0x60, 0x0f, 0xed, 0x24, 0x04, 0xf5, 0x82, 0xe4, 0x3c} },
-{ 0x89e0,      16,     {0xf5, 0x83, 0xe0, 0x44, 0x02, 0xf0, 0x80, 0x11, 0xae, 0x04, 0xaf, 0x05, 0xef, 0x24, 0x04, 0xf5} },
-{ 0x89f0,      11,     {0x82, 0xe4, 0x3e, 0xf5, 0x83, 0xe0, 0x54, 0xfd, 0xf0, 0x7f, 0x00} },
-{ 0x89fb,      1,      {0x22} },
-{ 0x89fc,      16,     {0x8f, 0x82, 0x8e, 0x83, 0xe0, 0x75, 0xf0, 0x08, 0xa4, 0x24, 0xf8, 0xf5, 0x82, 0xe4, 0x34, 0x1f} },
-{ 0x8a0c,      16,     {0xad, 0x82, 0xfc, 0x8f, 0x82, 0xa3, 0xe0, 0x60, 0x0f, 0xed, 0x24, 0x04, 0xf5, 0x82, 0xe4, 0x3c} },
-{ 0x8a1c,      16,     {0xf5, 0x83, 0xe0, 0x44, 0x01, 0xf0, 0x80, 0x11, 0xae, 0x04, 0xaf, 0x05, 0xef, 0x24, 0x04, 0xf5} },
-{ 0x8a2c,      11,     {0x82, 0xe4, 0x3e, 0xf5, 0x83, 0xe0, 0x54, 0xfe, 0xf0, 0x7f, 0x00} },
-{ 0x8a37,      1,      {0x22} },
-{ 0x8a38,      16,     {0x8f, 0x82, 0x8e, 0x83, 0xe0, 0x75, 0xf0, 0x08, 0xa4, 0x24, 0xf8, 0xf5, 0x82, 0xe4, 0x34, 0x1f} },
-{ 0x8a48,      16,     {0xad, 0x82, 0xfc, 0x8f, 0x82, 0xa3, 0xe0, 0x60, 0x0d, 0x8d, 0x82, 0x8c, 0x83, 0xa3, 0xa3, 0xa3} },
-{ 0x8a58,      16,     {0xe0, 0x44, 0x40, 0xf0, 0x80, 0x0f, 0xae, 0x04, 0xaf, 0x05, 0x8f, 0x82, 0x8e, 0x83, 0xa3, 0xa3} },
-{ 0x8a68,      7,      {0xa3, 0xe0, 0x54, 0xbf, 0xf0, 0x7f, 0x00} },
-{ 0x8a6f,      1,      {0x22} },
-{ 0x8a70,      4,      {0x8e, 0x54, 0x8f, 0x55} },
-{ 0x8a74,      16,     {0x8f, 0x82, 0x8e, 0x83, 0xa3, 0xe0, 0xf5, 0x58, 0x8f, 0x82, 0x8e, 0x83, 0xe0, 0x24, 0xfe, 0x60} },
-{ 0x8a84,      16,     {0x16, 0x14, 0x60, 0x1f, 0x14, 0x60, 0x28, 0x24, 0x03, 0x70, 0x2e, 0x7e, 0x7e, 0x7f, 0x80, 0x75} },
-{ 0x8a94,      16,     {0x56, 0x7e, 0x75, 0x57, 0x80, 0x80, 0x22, 0x7e, 0x7e, 0x7f, 0x00, 0x75, 0x56, 0x7e, 0x75, 0x57} },
-{ 0x8aa4,      16,     {0x00, 0x80, 0x16, 0x7e, 0x7d, 0x7f, 0x80, 0x75, 0x56, 0x7d, 0x75, 0x57, 0x80, 0x80, 0x0a, 0x7e} },
-{ 0x8ab4,      16,     {0x7d, 0x7f, 0x00, 0x75, 0x56, 0x7d, 0x75, 0x57, 0x00, 0xe5, 0x58, 0x70, 0x20, 0x85, 0x57, 0x82} },
-{ 0x8ac4,      16,     {0x85, 0x56, 0x83, 0x74, 0xff, 0xf0, 0x85, 0x55, 0x82, 0x85, 0x54, 0x83, 0xe0, 0x25, 0xe0, 0x24} },
-{ 0x8ad4,      16,     {0xb5, 0xf5, 0x82, 0xe4, 0x34, 0x7f, 0xf5, 0x83, 0x74, 0x01, 0xf0, 0x80, 0x4d, 0xe5, 0x55, 0x24} },
-{ 0x8ae4,      16,     {0x02, 0xff, 0xe4, 0x35, 0x54, 0xfe, 0xe5, 0x58, 0x60, 0x23, 0x0f, 0xef, 0xac, 0x06, 0x70, 0x01} },
-{ 0x8af4,      16,     {0x0e, 0x14, 0xf5, 0x82, 0x8c, 0x83, 0xe0, 0xfd, 0x05, 0x57, 0xe5, 0x57, 0xaa, 0x56, 0x70, 0x02} },
-{ 0x8b04,      16,     {0x05, 0x56, 0x14, 0xf5, 0x82, 0x8a, 0x83, 0xed, 0xf0, 0x15, 0x58, 0x80, 0xd9, 0x85, 0x55, 0x82} },
-{ 0x8b14,      16,     {0x85, 0x54, 0x83, 0xa3, 0xe0, 0xff, 0x85, 0x55, 0x82, 0x85, 0x54, 0x83, 0xe0, 0x25, 0xe0, 0x24} },
-{ 0x8b24,      12,     {0xb5, 0xf5, 0x82, 0xe4, 0x34, 0x7f, 0xf5, 0x83, 0xef, 0xf0, 0x7f, 0x00} },
-{ 0x8b30,      1,      {0x22} },
-{ 0x8b31,      16,     {0xef, 0x24, 0x05, 0xf5, 0x55, 0xe4, 0x3e, 0xf5, 0x54, 0x90, 0x01, 0x35, 0x74, 0x07, 0xf0, 0x90} },
-{ 0x8b41,      16,     {0x01, 0x7a, 0x74, 0x01, 0xf0, 0xa3, 0x74, 0x36, 0xf0, 0x85, 0x55, 0x82, 0x85, 0x54, 0x83, 0xa3} },
-{ 0x8b51,      16,     {0xa3, 0xa3, 0xe0, 0xfe, 0xa3, 0xe0, 0x8e, 0x56, 0xf5, 0x57, 0x85, 0x55, 0x82, 0x85, 0x54, 0x83} },
-{ 0x8b61,      16,     {0xe0, 0x24, 0x9e, 0x60, 0x61, 0x24, 0xf9, 0x60, 0x0e, 0x24, 0xf1, 0x70, 0x03, 0x02, 0x8c, 0x12} },
-{ 0x8b71,      16,     {0x24, 0x14, 0x60, 0x03, 0x02, 0x8c, 0x5e, 0x85, 0x55, 0x82, 0x85, 0x54, 0x83, 0xa3, 0xe0, 0xfe} },
-{ 0x8b81,      16,     {0xa3, 0xe0, 0xff, 0xc3, 0xe4, 0x9f, 0xf5, 0x59, 0x74, 0x01, 0x9e, 0xf5, 0x58, 0xd3, 0xe5, 0x59} },
-{ 0x8b91,      16,     {0x94, 0x40, 0xe5, 0x58, 0x94, 0x00, 0x40, 0x06, 0x75, 0x58, 0x00, 0x75, 0x59, 0x40, 0xd3, 0xe5} },
-{ 0x8ba1,      16,     {0x57, 0x95, 0x59, 0xe5, 0x56, 0x95, 0x58, 0x50, 0x03, 0x02, 0x8c, 0x61, 0xae, 0x58, 0xaf, 0x59} },
-{ 0x8bb1,      16,     {0x85, 0x55, 0x82, 0x85, 0x54, 0x83, 0xa3, 0xa3, 0xa3, 0xee, 0xf0, 0xfe, 0xa3, 0xef, 0xf0, 0x8e} },
-{ 0x8bc1,      16,     {0x56, 0xf5, 0x57, 0x02, 0x8c, 0x61, 0x85, 0x55, 0x82, 0x85, 0x54, 0x83, 0xa3, 0xe0, 0xfe, 0xa3} },
-{ 0x8bd1,      16,     {0xe0, 0xff, 0xc3, 0x74, 0x30, 0x9f, 0xf5, 0x59, 0xe4, 0x9e, 0xf5, 0x58, 0xd3, 0xe5, 0x59, 0x94} },
-{ 0x8be1,      16,     {0x10, 0xe5, 0x58, 0x94, 0x00, 0x40, 0x06, 0x75, 0x58, 0x00, 0x75, 0x59, 0x10, 0xd3, 0xe5, 0x57} },
-{ 0x8bf1,      16,     {0x95, 0x59, 0xe5, 0x56, 0x95, 0x58, 0x40, 0x68, 0xae, 0x58, 0xaf, 0x59, 0x85, 0x55, 0x82, 0x85} },
-{ 0x8c01,      16,     {0x54, 0x83, 0xa3, 0xa3, 0xa3, 0xee, 0xf0, 0xfe, 0xa3, 0xef, 0xf0, 0x8e, 0x56, 0xf5, 0x57, 0x80} },
-{ 0x8c11,      16,     {0x4f, 0x85, 0x55, 0x82, 0x85, 0x54, 0x83, 0xa3, 0xe0, 0xfe, 0xa3, 0xe0, 0xff, 0xc3, 0xe4, 0x9f} },
-{ 0x8c21,      16,     {0xf5, 0x59, 0xe4, 0x9e, 0xf5, 0x58, 0x45, 0x59, 0x60, 0x0b, 0xd3, 0xe5, 0x59, 0x94, 0x40, 0xe5} },
-{ 0x8c31,      16,     {0x58, 0x94, 0x00, 0x40, 0x06, 0x75, 0x58, 0x00, 0x75, 0x59, 0x40, 0xd3, 0xe5, 0x57, 0x95, 0x59} },
-{ 0x8c41,      16,     {0xe5, 0x56, 0x95, 0x58, 0x40, 0x17, 0xae, 0x58, 0xaf, 0x59, 0x85, 0x55, 0x82, 0x85, 0x54, 0x83} },
-{ 0x8c51,      16,     {0xa3, 0xa3, 0xa3, 0xee, 0xf0, 0xfe, 0xa3, 0xef, 0xf0, 0x8e, 0x56, 0xf5, 0x57, 0x7f, 0x01, 0x22} },
-{ 0x8c61,      16,     {0x85, 0x55, 0x82, 0x85, 0x54, 0x83, 0xe0, 0x24, 0x9e, 0x70, 0x03, 0x02, 0x8d, 0x21, 0x24, 0xf9} },
-{ 0x8c71,      16,     {0x60, 0x58, 0x24, 0xf1, 0x70, 0x03, 0x02, 0x8d, 0x71, 0x24, 0x14, 0x60, 0x03, 0x02, 0x8d, 0xb5} },
-{ 0x8c81,      16,     {0x85, 0x55, 0x82, 0x85, 0x54, 0x83, 0xa3, 0xe0, 0xfe, 0xa3, 0xe0, 0xff, 0xd3, 0x94, 0xff, 0xee} },
-{ 0x8c91,      16,     {0x94, 0x00, 0x40, 0x03, 0x02, 0x8d, 0xb5, 0x90, 0x01, 0x75, 0xef, 0xf0, 0xe5, 0x57, 0x15, 0x57} },
-{ 0x8ca1,      16,     {0xae, 0x56, 0x70, 0x02, 0x15, 0x56, 0x4e, 0x70, 0x03, 0x02, 0x8d, 0xb5, 0x90, 0x01, 0x75, 0xe0} },
-{ 0x8cb1,      16,     {0xff, 0x04, 0xf0, 0xa8, 0x07, 0xe6, 0xff, 0x90, 0x01, 0x7a, 0xe4, 0x75, 0xf0, 0x01, 0x12, 0x9b} },
-{ 0x8cc1,      16,     {0xce, 0x85, 0xf0, 0x82, 0xf5, 0x83, 0xef, 0xf0, 0x80, 0xd2, 0x85, 0x55, 0x82, 0x85, 0x54, 0x83} },
-{ 0x8cd1,      16,     {0xa3, 0xe0, 0xfe, 0xa3, 0xe0, 0xff, 0xc3, 0x94, 0x80, 0xee, 0x94, 0x00, 0x50, 0x03, 0x02, 0x8d} },
-{ 0x8ce1,      16,     {0xb5, 0xd3, 0xef, 0x94, 0xff, 0xee, 0x94, 0x00, 0x40, 0x03, 0x02, 0x8d, 0xb5, 0x90, 0x01, 0x76} },
-{ 0x8cf1,      16,     {0xef, 0xf0, 0xe5, 0x57, 0x15, 0x57, 0xae, 0x56, 0x70, 0x02, 0x15, 0x56, 0x4e, 0x70, 0x03, 0x02} },
-{ 0x8d01,      16,     {0x8d, 0xb5, 0x90, 0x01, 0x76, 0xe0, 0xff, 0x04, 0xf0, 0xa8, 0x07, 0xe6, 0xff, 0x90, 0x01, 0x7a} },
-{ 0x8d11,      16,     {0xe4, 0x75, 0xf0, 0x01, 0x12, 0x9b, 0xce, 0x85, 0xf0, 0x82, 0xf5, 0x83, 0xef, 0xf0, 0x80, 0xd2} },
-{ 0x8d21,      16,     {0x85, 0x55, 0x82, 0x85, 0x54, 0x83, 0xa3, 0xe0, 0xfe, 0xa3, 0xe0, 0xff, 0xc3, 0x94, 0x20, 0xee} },
-{ 0x8d31,      16,     {0x94, 0x00, 0x50, 0x03, 0x02, 0x8d, 0xb5, 0xd3, 0xef, 0x94, 0x2f, 0xee, 0x94, 0x00, 0x50, 0x74} },
-{ 0x8d41,      16,     {0x90, 0x01, 0x77, 0xef, 0xf0, 0xe5, 0x57, 0x15, 0x57, 0xae, 0x56, 0x70, 0x02, 0x15, 0x56, 0x4e} },
-{ 0x8d51,      16,     {0x60, 0x62, 0x90, 0x01, 0x77, 0xe0, 0xff, 0x04, 0xf0, 0xa8, 0x07, 0xe6, 0xff, 0x90, 0x01, 0x7a} },
-{ 0x8d61,      16,     {0xe4, 0x75, 0xf0, 0x01, 0x12, 0x9b, 0xce, 0x85, 0xf0, 0x82, 0xf5, 0x83, 0xef, 0xf0, 0x80, 0xd5} },
-{ 0x8d71,      16,     {0x85, 0x55, 0x82, 0x85, 0x54, 0x83, 0xa3, 0xe0, 0xff, 0xa3, 0xe0, 0x90, 0x01, 0x78, 0xcf, 0xf0} },
-{ 0x8d81,      16,     {0xa3, 0xef, 0xf0, 0xe5, 0x57, 0x15, 0x57, 0xae, 0x56, 0x70, 0x02, 0x15, 0x56, 0x4e, 0x60, 0x24} },
-{ 0x8d91,      16,     {0x90, 0x01, 0x78, 0xe4, 0x75, 0xf0, 0x01, 0x12, 0x9b, 0xce, 0x85, 0xf0, 0x82, 0xf5, 0x83, 0xe0} },
-{ 0x8da1,      16,     {0xff, 0x90, 0x01, 0x7a, 0xe4, 0x75, 0xf0, 0x01, 0x12, 0x9b, 0xce, 0x85, 0xf0, 0x82, 0xf5, 0x83} },
-{ 0x8db1,      16,     {0xef, 0xf0, 0x80, 0xcf, 0x7e, 0x01, 0x7f, 0x35, 0x85, 0x55, 0x82, 0x85, 0x54, 0x83, 0xa3, 0xa3} },
-{ 0x8dc1,      16,     {0xa3, 0xe0, 0xa3, 0xe0, 0x04, 0xfd, 0x75, 0x60, 0x00, 0x75, 0x5f, 0x00, 0x75, 0x5e, 0x00, 0x75} },
-{ 0x8dd1,      7,      {0x5d, 0x00, 0x12, 0x8e, 0x0c, 0x7f, 0x00} },
-{ 0x8dd8,      1,      {0x22} },
-{ 0x8dd9,      16,     {0x8e, 0x61, 0x8f, 0x62, 0x8c, 0x63, 0x8d, 0x64, 0xaf, 0x03, 0x1b, 0xef, 0x60, 0x24, 0x05, 0x62} },
-{ 0x8de9,      16,     {0xe5, 0x62, 0xae, 0x61, 0x70, 0x02, 0x05, 0x61, 0x14, 0xf5, 0x82, 0x8e, 0x83, 0xe0, 0xff, 0x05} },
-{ 0x8df9,      16,     {0x64, 0xe5, 0x64, 0xac, 0x63, 0x70, 0x02, 0x05, 0x63, 0x14, 0xf5, 0x82, 0x8c, 0x83, 0xef, 0xf0} },
-{ 0x8e09,      3,      {0x80, 0xd6, 0x22} },
-{ 0x8e0c,      16,     {0x8d, 0x5c, 0xab, 0x07, 0xaa, 0x06, 0xaf, 0x60, 0xae, 0x5f, 0xad, 0x5e, 0xac, 0x5d, 0xec, 0x4d} },
-{ 0x8e1c,      16,     {0x4e, 0x4f, 0x60, 0x1c, 0x90, 0x7f, 0xc2, 0xe0, 0x30, 0xe1, 0x1c, 0x7f, 0xff, 0x7e, 0xff, 0x7d} },
-{ 0x8e2c,      16,     {0xff, 0x7c, 0xff, 0x78, 0x5d, 0x12, 0x9d, 0x0e, 0xec, 0x4d, 0x4e, 0x4f, 0x60, 0x09, 0x80, 0xe4} },
-{ 0x8e3c,      16,     {0x90, 0x7f, 0xc2, 0xe0, 0x20, 0xe1, 0xf9, 0x90, 0x7f, 0xc2, 0xe0, 0x20, 0xe1, 0x16, 0xaf, 0x03} },
-{ 0x8e4c,      16,     {0xae, 0x02, 0x7c, 0x7b, 0x7d, 0x80, 0xab, 0x5c, 0x12, 0x8d, 0xd9, 0x90, 0x7f, 0xc3, 0xe5, 0x5c} },
-{ 0x8e5c,      7,      {0xf0, 0x7f, 0x01, 0x22, 0x7f, 0x00, 0x22} },
-{ 0x8e63,      16,     {0x90, 0x01, 0x84, 0x74, 0x0b, 0xf0, 0x90, 0x20, 0x70, 0xe0, 0x54, 0xf0, 0xff, 0xc4, 0x54, 0x0f} },
-{ 0x8e73,      16,     {0x90, 0x01, 0x85, 0xf0, 0x90, 0x11, 0xfd, 0xe4, 0x93, 0x90, 0x01, 0x86, 0xf0, 0x90, 0x11, 0xfe} },
-{ 0x8e83,      16,     {0xe4, 0x93, 0x90, 0x01, 0x87, 0xf0, 0xe4, 0x90, 0x01, 0x7c, 0xf0, 0xa3, 0xf0, 0xa3, 0xf0, 0xa3} },
-{ 0x8e93,      16,     {0xf0, 0xa3, 0xf0, 0xa3, 0x74, 0x10, 0xf0, 0xa3, 0x74, 0x01, 0xf0, 0xa3, 0x74, 0x88, 0xf0, 0x7e} },
-{ 0x8ea3,      16,     {0x01, 0x7f, 0x7c, 0x12, 0x19, 0xc1, 0x7e, 0x01, 0x7f, 0x84, 0x75, 0x60, 0x00, 0x75, 0x5f, 0x00} },
-{ 0x8eb3,      13,     {0x75, 0x5e, 0x00, 0x75, 0x5d, 0x00, 0x7d, 0x14, 0x12, 0x8e, 0x0c, 0x7f, 0x00} },
-{ 0x8ec0,      1,      {0x22} },
-{ 0x8ec1,      4,      {0x8e, 0x4b, 0x8f, 0x4c} },
-{ 0x8ec5,      16,     {0x85, 0x4b, 0x4e, 0x85, 0x4c, 0x4f, 0xe5, 0x4f, 0x24, 0x01, 0xf5, 0x53, 0xe4, 0x35, 0x4e, 0xf5} },
-{ 0x8ed5,      16,     {0x52, 0x85, 0x4f, 0x82, 0x85, 0x4e, 0x83, 0xe0, 0x14, 0xb4, 0x0f, 0x00, 0x40, 0x03, 0x02, 0x8f} },
-{ 0x8ee5,      16,     {0xd6, 0x90, 0x8e, 0xed, 0xf8, 0x28, 0x28, 0x73, 0x02, 0x8f, 0x1a, 0x02, 0x8f, 0x26, 0x02, 0x8f} },
-{ 0x8ef5,      16,     {0x32, 0x02, 0x8f, 0x5c, 0x02, 0x8f, 0x67, 0x02, 0x8f, 0x72, 0x02, 0x8f, 0x7d, 0x02, 0x8f, 0x88} },
-{ 0x8f05,      16,     {0x02, 0x8f, 0x93, 0x02, 0x8f, 0x9e, 0x02, 0x8f, 0xa9, 0x02, 0x8f, 0xb0, 0x02, 0x8f, 0xd6, 0x02} },
-{ 0x8f15,      16,     {0x8f, 0xbb, 0x02, 0x8f, 0xc6, 0xaf, 0x53, 0xae, 0x52, 0x12, 0x83, 0x5f, 0x8f, 0x4d, 0x02, 0x8f} },
-{ 0x8f25,      16,     {0xd6, 0xaf, 0x53, 0xae, 0x52, 0x12, 0x84, 0x33, 0x8f, 0x4d, 0x02, 0x8f, 0xd6, 0x85, 0x52, 0x50} },
-{ 0x8f35,      16,     {0x85, 0x53, 0x51, 0xe5, 0x51, 0x24, 0x01, 0xff, 0xe4, 0x35, 0x50, 0xfe, 0x12, 0x85, 0x08, 0xaf} },
-{ 0x8f45,      16,     {0x51, 0xae, 0x50, 0x12, 0x85, 0x9b, 0xef, 0x70, 0x03, 0x02, 0x8f, 0xd6, 0xaf, 0x51, 0xae, 0x50} },
-{ 0x8f55,      16,     {0x12, 0x85, 0xe1, 0x8f, 0x4d, 0x80, 0x7a, 0xaf, 0x53, 0xae, 0x52, 0x12, 0x89, 0xc0, 0x8f, 0x4d} },
-{ 0x8f65,      16,     {0x80, 0x6f, 0xaf, 0x53, 0xae, 0x52, 0x12, 0x89, 0xfc, 0x8f, 0x4d, 0x80, 0x64, 0xaf, 0x53, 0xae} },
-{ 0x8f75,      16,     {0x52, 0x12, 0x8a, 0x38, 0x8f, 0x4d, 0x80, 0x59, 0xaf, 0x4c, 0xae, 0x4b, 0x12, 0x8b, 0x31, 0x8f} },
-{ 0x8f85,      16,     {0x4d, 0x80, 0x4e, 0xaf, 0x53, 0xae, 0x52, 0x12, 0x88, 0xef, 0x8f, 0x4d, 0x80, 0x43, 0xaf, 0x53} },
-{ 0x8f95,      16,     {0xae, 0x52, 0x12, 0x84, 0xc4, 0x8f, 0x4d, 0x80, 0x38, 0xaf, 0x53, 0xae, 0x52, 0x12, 0x89, 0x7b} },
-{ 0x8fa5,      16,     {0x8f, 0x4d, 0x80, 0x2d, 0x12, 0x8e, 0x63, 0x8f, 0x4d, 0x80, 0x26, 0xaf, 0x53, 0xae, 0x52, 0x12} },
-{ 0x8fb5,      16,     {0x11, 0xe5, 0x8f, 0x4d, 0x80, 0x1b, 0xaf, 0x53, 0xae, 0x52, 0x12, 0x8a, 0x70, 0x8f, 0x4d, 0x80} },
-{ 0x8fc5,      16,     {0x10, 0xaf, 0x4c, 0xae, 0x4b, 0x7c, 0x02, 0x7d, 0xaf, 0x7b, 0x40, 0x12, 0x8d, 0xd9, 0xe4, 0xf5} },
-{ 0x8fd5,      16,     {0x4d, 0x85, 0x4f, 0x82, 0x85, 0x4e, 0x83, 0xe0, 0xff, 0x14, 0x24, 0xfa, 0x50, 0x04, 0x24, 0xfe} },
-{ 0x8fe5,      16,     {0x70, 0x2b, 0x90, 0x01, 0x98, 0x74, 0x10, 0xf0, 0xa3, 0xef, 0xf0, 0x85, 0x53, 0x82, 0x85, 0x52} },
-{ 0x8ff5,      16,     {0x83, 0xe0, 0x90, 0x01, 0x9a, 0xf0, 0x7e, 0x01, 0x7f, 0x98, 0x75, 0x60, 0x00, 0x75, 0x5f, 0x00} },
-{ 0x9005,      15,     {0x75, 0x5e, 0x00, 0x75, 0x5d, 0x00, 0x7d, 0x03, 0x12, 0x8e, 0x0c, 0x8f, 0x4d, 0xaf, 0x4d} },
-{ 0x9014,      1,      {0x22} },
-{ 0x9015,      8,      {0x8f, 0x4e, 0x8e, 0x4d, 0x8d, 0x4c, 0x8c, 0x4b} },
-{ 0x901d,      16,     {0x75, 0x55, 0x01, 0x75, 0x56, 0x9c, 0xe4, 0xf5, 0x54, 0xaf, 0x50, 0x15, 0x50, 0xef, 0x70, 0x03} },
-{ 0x902d,      16,     {0x02, 0x90, 0xb3, 0xaf, 0x4f, 0xe4, 0xfc, 0xfd, 0xfe, 0xf8, 0xf9, 0xfa, 0xab, 0x07, 0xaf, 0x4e} },
-{ 0x903d,      16,     {0xae, 0x4d, 0xad, 0x4c, 0xac, 0x4b, 0x12, 0x9c, 0x58, 0xaf, 0x03, 0x8f, 0x53, 0xaf, 0x4e, 0xae} },
-{ 0x904d,      16,     {0x4d, 0xad, 0x4c, 0xac, 0x4b, 0xc0, 0x04, 0xc0, 0x05, 0xc0, 0x06, 0xc0, 0x07, 0xaf, 0x4f, 0xe4} },
-{ 0x905d,      16,     {0xfc, 0xfd, 0xfe, 0xf8, 0xf9, 0xfa, 0xab, 0x07, 0xd0, 0x07, 0xd0, 0x06, 0xd0, 0x05, 0xd0, 0x04} },
-{ 0x906d,      16,     {0x12, 0x9c, 0x58, 0x8f, 0x4e, 0x8e, 0x4d, 0x8d, 0x4c, 0x8c, 0x4b, 0xe5, 0x53, 0x24, 0x30, 0xf5} },
-{ 0x907d,      16,     {0x53, 0xd3, 0x94, 0x39, 0x40, 0x06, 0x74, 0x07, 0x25, 0x53, 0xf5, 0x53, 0x05, 0x56, 0xe5, 0x56} },
-{ 0x908d,      16,     {0xae, 0x55, 0x70, 0x02, 0x05, 0x55, 0x14, 0xf5, 0x82, 0x8e, 0x83, 0xe4, 0xf0, 0x05, 0x56, 0xe5} },
-{ 0x909d,      16,     {0x56, 0xae, 0x55, 0x70, 0x02, 0x05, 0x55, 0x14, 0xf5, 0x82, 0x8e, 0x83, 0xe5, 0x53, 0xf0, 0x05} },
-{ 0x90ad,      16,     {0x54, 0x05, 0x54, 0x02, 0x90, 0x26, 0xe5, 0x56, 0x15, 0x56, 0x70, 0x02, 0x15, 0x55, 0xaf, 0x54} },
-{ 0x90bd,      16,     {0x15, 0x54, 0xef, 0x60, 0x23, 0xe5, 0x56, 0x15, 0x56, 0xae, 0x55, 0x70, 0x02, 0x15, 0x55, 0xf5} },
-{ 0x90cd,      16,     {0x82, 0x8e, 0x83, 0xe0, 0xff, 0x05, 0x52, 0xe5, 0x52, 0xac, 0x51, 0x70, 0x02, 0x05, 0x51, 0x14} },
-{ 0x90dd,      8,      {0xf5, 0x82, 0x8c, 0x83, 0xef, 0xf0, 0x80, 0xd6} },
-{ 0x90e5,      1,      {0x22} },
-{ 0x90e6,      16,     {0xe4, 0x90, 0x01, 0xc9, 0xf0, 0x7e, 0x01, 0x7f, 0xca, 0x90, 0x01, 0xbe, 0xee, 0xf0, 0xa3, 0xef} },
-{ 0x90f6,      10,     {0xf0, 0x90, 0x01, 0xc2, 0xee, 0xf0, 0xa3, 0xef, 0xf0, 0x22} },
-{ 0x9100,      16,     {0xaa, 0x07, 0xa9, 0x05, 0x90, 0x01, 0xc9, 0xe0, 0xc3, 0x94, 0x40, 0x50, 0x61, 0xac, 0x02, 0x74} },
-{ 0x9110,      16,     {0x01, 0x7e, 0x00, 0xa8, 0x04, 0x08, 0x80, 0x05, 0xc3, 0x33, 0xce, 0x33, 0xce, 0xd8, 0xf9, 0xff} },
-{ 0x9120,      16,     {0xe4, 0xef, 0x55, 0x30, 0x60, 0x45, 0xea, 0x04, 0xff, 0x90, 0x01, 0xc2, 0xe0, 0xfc, 0xa3, 0xe0} },
-{ 0x9130,      16,     {0xfd, 0xf5, 0x82, 0x8c, 0x83, 0xef, 0xf0, 0xa3, 0xe9, 0xf0, 0x8d, 0x82, 0x8c, 0x83, 0xa3, 0xa3} },
-{ 0x9140,      16,     {0xeb, 0xf0, 0x90, 0x01, 0xc2, 0xe4, 0x75, 0xf0, 0x03, 0x12, 0x9b, 0xb8, 0xfc, 0xd3, 0xe5, 0xf0} },
-{ 0x9150,      16,     {0x94, 0x87, 0xec, 0x94, 0x02, 0x40, 0x0a, 0x90, 0x01, 0xc2, 0x74, 0x01, 0xf0, 0xa3, 0x74, 0xca} },
-{ 0x9160,      16,     {0xf0, 0xc2, 0xaf, 0x90, 0x01, 0xc9, 0xe0, 0x04, 0xf0, 0xd2, 0xaf, 0x7f, 0x01, 0x22, 0x7f, 0x00} },
-{ 0x9170,      1,      {0x22} },
-{ 0x9171,      16,     {0x90, 0x01, 0xc9, 0xe0, 0xd3, 0x94, 0x00, 0x40, 0x55, 0x90, 0x01, 0xbe, 0xe0, 0xfc, 0xa3, 0xe0} },
-{ 0x9181,      16,     {0xaa, 0x04, 0xf9, 0x7b, 0x01, 0xc0, 0x03, 0xc0, 0x02, 0xc0, 0x01, 0xaa, 0x06, 0xa9, 0x07, 0xa8} },
-{ 0x9191,      16,     {0x01, 0xac, 0x02, 0xad, 0x03, 0xd0, 0x01, 0xd0, 0x02, 0xd0, 0x03, 0x7e, 0x00, 0x7f, 0x03, 0x12} },
-{ 0x91a1,      16,     {0x9b, 0x49, 0x90, 0x01, 0xbe, 0xe4, 0x75, 0xf0, 0x03, 0x12, 0x9b, 0xb8, 0xfc, 0xd3, 0xe5, 0xf0} },
-{ 0x91b1,      16,     {0x94, 0x87, 0xec, 0x94, 0x02, 0x40, 0x0a, 0x90, 0x01, 0xbe, 0x74, 0x01, 0xf0, 0xa3, 0x74, 0xca} },
-{ 0x91c1,      16,     {0xf0, 0xc2, 0xaf, 0x90, 0x01, 0xc9, 0xe0, 0x14, 0xf0, 0xd2, 0xaf, 0x7f, 0x01, 0x22, 0x7f, 0x00} },
-{ 0x91d1,      1,      {0x22} },
-{ 0x91d2,      16,     {0x90, 0x7f, 0xc2, 0xe0, 0x20, 0xe1, 0x5e, 0x7e, 0x7b, 0x7f, 0x80, 0x75, 0x50, 0x7b, 0x75, 0x51} },
-{ 0x91e2,      16,     {0x80, 0xe5, 0x51, 0x24, 0x01, 0xff, 0xe4, 0x35, 0x50, 0xa9, 0x07, 0x7b, 0x01, 0x8b, 0x52, 0xf5} },
-{ 0x91f2,      16,     {0x53, 0x89, 0x54, 0xfe, 0x12, 0x91, 0x71, 0xef, 0x60, 0x3b, 0xab, 0x52, 0xaa, 0x53, 0xa9, 0x54} },
-{ 0x9202,      16,     {0x12, 0x9b, 0x72, 0x14, 0xff, 0x90, 0x00, 0x01, 0x12, 0x9b, 0x8b, 0xb4, 0x02, 0x16, 0xc2, 0xaf} },
-{ 0x9212,      16,     {0xef, 0x75, 0xf0, 0x08, 0xa4, 0x24, 0x01, 0xf5, 0x82, 0xe4, 0x34, 0x20, 0xf5, 0x83, 0xe0, 0x44} },
-{ 0x9222,      16,     {0x04, 0xf0, 0xd2, 0xaf, 0x85, 0x51, 0x82, 0x85, 0x50, 0x83, 0x74, 0x0d, 0xf0, 0x90, 0x7f, 0xc3} },
-{ 0x9232,      5,      {0x74, 0x04, 0xf0, 0xd2, 0xaf} },
-{ 0x9237,      1,      {0x22} },
-{ 0x9238,      16,     {0x12, 0x91, 0xd2, 0xe4, 0xf5, 0x4b, 0x74, 0x36, 0x25, 0x4b, 0xf8, 0xe6, 0x54, 0xf0, 0xf5, 0x4c} },
-{ 0x9248,      16,     {0x74, 0xc5, 0x25, 0x4b, 0xf5, 0x82, 0xe4, 0x34, 0x01, 0xf5, 0x83, 0xe0, 0x65, 0x4c, 0xff, 0xc4} },
-{ 0x9258,      16,     {0x54, 0x0f, 0xf5, 0x4d, 0x60, 0x22, 0x74, 0xc5, 0x25, 0x4b, 0xf5, 0x82, 0xe4, 0x34, 0x01, 0xf5} },
-{ 0x9268,      16,     {0x83, 0xe5, 0x4c, 0xf0, 0xaf, 0x4b, 0x7d, 0x01, 0xe5, 0x4c, 0x45, 0x4d, 0xfb, 0x12, 0x91, 0x00} },
-{ 0x9278,      16,     {0xef, 0x70, 0x05, 0x12, 0x91, 0xd2, 0x80, 0xec, 0x05, 0x4b, 0xe5, 0x4b, 0xc3, 0x94, 0x04, 0x40} },
-{ 0x9288,      16,     {0xb5, 0x12, 0x91, 0xd2, 0xe5, 0x3a, 0x60, 0x48, 0xe4, 0xf5, 0x4b, 0xaf, 0x4b, 0x74, 0x01, 0xa8} },
-{ 0x9298,      16,     {0x07, 0x08, 0x80, 0x02, 0xc3, 0x33, 0xd8, 0xfc, 0xf5, 0x4c, 0x55, 0x3a, 0x60, 0x29, 0xe5, 0x4b} },
-{ 0x92a8,      16,     {0x75, 0xf0, 0x08, 0xa4, 0x24, 0x05, 0xf5, 0x82, 0xe4, 0x34, 0x20, 0xf5, 0x83, 0xe0, 0x30, 0xe6} },
-{ 0x92b8,      16,     {0x16, 0xaf, 0x4b, 0x7d, 0x04, 0x7b, 0x80, 0x12, 0x91, 0x00, 0xef, 0x70, 0x05, 0x12, 0x91, 0xd2} },
-{ 0x92c8,      16,     {0x80, 0xef, 0xe5, 0x4c, 0xf4, 0x52, 0x3a, 0x05, 0x4b, 0xe5, 0x4b, 0xc3, 0x94, 0x04, 0x40, 0xbb} },
-{ 0x92d8,      16,     {0x90, 0x03, 0x00, 0xe0, 0x60, 0x03, 0x02, 0x93, 0xa5, 0x74, 0x19, 0xf0, 0x7f, 0x02, 0x12, 0x81} },
-{ 0x92e8,      16,     {0x11, 0x8e, 0x4e, 0x8f, 0x4f, 0xc3, 0xe5, 0x4e, 0x64, 0x80, 0x94, 0x80, 0x40, 0xee, 0x90, 0x01} },
-{ 0x92f8,      16,     {0xbc, 0xe0, 0x65, 0x4f, 0xf0, 0x60, 0x37, 0xe4, 0xf5, 0x4b, 0xaf, 0x4b, 0x74, 0x01, 0xa8, 0x07} },
-{ 0x9308,      16,     {0x08, 0x80, 0x02, 0xc3, 0x33, 0xd8, 0xfc, 0xf5, 0x4c, 0x90, 0x01, 0xbc, 0xe0, 0x55, 0x4c, 0x60} },
-{ 0x9318,      16,     {0x14, 0xaf, 0x4b, 0x7d, 0x08, 0xe5, 0x4c, 0x55, 0x4f, 0xfb, 0x12, 0x91, 0x00, 0xef, 0x70, 0x05} },
-{ 0x9328,      16,     {0x12, 0x91, 0xd2, 0x80, 0xec, 0x05, 0x4b, 0xe5, 0x4b, 0xc3, 0x94, 0x04, 0x40, 0xcc, 0x90, 0x01} },
-{ 0x9338,      16,     {0xbc, 0xe5, 0x4f, 0xf0, 0xe4, 0xf5, 0x4b, 0xc2, 0xaf, 0x74, 0x32, 0x25, 0x4b, 0xf8, 0xe6, 0xf5} },
-{ 0x9348,      16,     {0x4c, 0xe4, 0xf6, 0xd2, 0xaf, 0x53, 0x4c, 0x1e, 0xe5, 0x4c, 0x60, 0x11, 0xaf, 0x4b, 0x7d, 0x02} },
-{ 0x9358,      16,     {0xab, 0x4c, 0x12, 0x91, 0x00, 0xef, 0x70, 0x05, 0x12, 0x91, 0xd2, 0x80, 0xef, 0x74, 0x2c, 0x25} },
-{ 0x9368,      16,     {0x4b, 0xf8, 0xe6, 0xf5, 0x4c, 0x74, 0xfc, 0x25, 0x4b, 0xf5, 0x82, 0xe4, 0x34, 0x02, 0xf5, 0x83} },
-{ 0x9378,      16,     {0xe0, 0x65, 0x4c, 0x60, 0x11, 0xaf, 0x4b, 0x7d, 0x04, 0xab, 0x4c, 0x12, 0x91, 0x00, 0xef, 0x70} },
-{ 0x9388,      16,     {0x05, 0x12, 0x91, 0xd2, 0x80, 0xef, 0x74, 0xfc, 0x25, 0x4b, 0xf5, 0x82, 0xe4, 0x34, 0x02, 0xf5} },
-{ 0x9398,      16,     {0x83, 0xe5, 0x4c, 0xf0, 0x05, 0x4b, 0xe5, 0x4b, 0xc3, 0x94, 0x04, 0x40, 0x9a, 0x12, 0x91, 0xd2} },
-{ 0x93a8,      1,      {0x22} },
-{ 0x93a9,      12,     {0x78, 0x7f, 0xe4, 0xf6, 0xd8, 0xfd, 0x75, 0x81, 0x64, 0x02, 0x93, 0xf0} },
-{ 0x93b5,      16,     {0x02, 0x05, 0xa3, 0xe4, 0x93, 0xa3, 0xf8, 0xe4, 0x93, 0xa3, 0x40, 0x03, 0xf6, 0x80, 0x01, 0xf2} },
-{ 0x93c5,      16,     {0x08, 0xdf, 0xf4, 0x80, 0x29, 0xe4, 0x93, 0xa3, 0xf8, 0x54, 0x07, 0x24, 0x0c, 0xc8, 0xc3, 0x33} },
-{ 0x93d5,      16,     {0xc4, 0x54, 0x0f, 0x44, 0x20, 0xc8, 0x83, 0x40, 0x04, 0xf4, 0x56, 0x80, 0x01, 0x46, 0xf6, 0xdf} },
-{ 0x93e5,      16,     {0xe4, 0x80, 0x0b, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x90, 0x94, 0x35, 0xe4, 0x7e} },
-{ 0x93f5,      16,     {0x01, 0x93, 0x60, 0xbc, 0xa3, 0xff, 0x54, 0x3f, 0x30, 0xe5, 0x09, 0x54, 0x1f, 0xfe, 0xe4, 0x93} },
-{ 0x9405,      16,     {0xa3, 0x60, 0x01, 0x0e, 0xcf, 0x54, 0xc0, 0x25, 0xe0, 0x60, 0xa8, 0x40, 0xb8, 0xe4, 0x93, 0xa3} },
-{ 0x9415,      16,     {0xfa, 0xe4, 0x93, 0xa3, 0xf8, 0xe4, 0x93, 0xa3, 0xc8, 0xc5, 0x82, 0xc8, 0xca, 0xc5, 0x83, 0xca} },
-{ 0x9425,      16,     {0xf0, 0xa3, 0xc8, 0xc5, 0x82, 0xc8, 0xca, 0xc5, 0x83, 0xca, 0xdf, 0xe9, 0xde, 0xe7, 0x80, 0xbe} },
-{ 0x9435,      16,     {0x60, 0x24, 0x02, 0x8a, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x81, 0x82, 0x84, 0x88} },
-{ 0x9445,      16,     {0x90, 0xa0, 0xc0, 0xc1, 0xc2, 0xc4, 0xc8, 0xd0, 0xe0, 0xe1, 0xe2, 0xe4, 0xe8, 0xf0, 0xf1, 0xf2} },
-{ 0x9455,      8,      {0xf4, 0xf8, 0xf9, 0xfa, 0xfc, 0xfd, 0xfe, 0xff} },
-{ 0x945d,      1,      {0x00} },
-{ 0x945e,      11,     {0xc0, 0xe0, 0xc0, 0x83, 0xc0, 0x82, 0xc0, 0xd0, 0x75, 0xd0, 0x18} },
-{ 0x9469,      16,     {0x90, 0x20, 0x60, 0xe0, 0x54, 0x0f, 0xfe, 0x30, 0xe0, 0x05, 0x90, 0x20, 0x02, 0xe0, 0xff, 0xee} },
-{ 0x9479,      16,     {0x30, 0xe1, 0x05, 0x90, 0x20, 0x0a, 0xe0, 0xff, 0xee, 0x30, 0xe2, 0x05, 0x90, 0x20, 0x12, 0xe0} },
-{ 0x9489,      16,     {0xff, 0xee, 0x30, 0xe3, 0x05, 0x90, 0x20, 0x1a, 0xe0, 0xff, 0x90, 0x01, 0xc4, 0xe0, 0xb5, 0x1e} },
-{ 0x9499,      10,     {0x04, 0xe4, 0xf0, 0x80, 0x05, 0x90, 0x01, 0xc4, 0xee, 0xf0} },
-{ 0x94a3,      9,      {0xd0, 0xd0, 0xd0, 0x82, 0xd0, 0x83, 0xd0, 0xe0, 0x32} },
-{ 0x94ac,      2,      {0xa9, 0x03} },
-{ 0x94ae,      16,     {0xef, 0x75, 0xf0, 0x08, 0xa4, 0x24, 0x00, 0xf5, 0x82, 0xe4, 0x34, 0x20, 0xab, 0x82, 0xfa, 0xe5} },
-{ 0x94be,      16,     {0x57, 0x45, 0x58, 0xf5, 0x59, 0xe9, 0x60, 0x14, 0x8a, 0x83, 0xe5, 0x82, 0x24, 0x04, 0xf5, 0x82} },
-{ 0x94ce,      16,     {0xe4, 0x35, 0x83, 0xf5, 0x83, 0xe0, 0x4d, 0xf0, 0xe4, 0xfe, 0x80, 0x13, 0xeb, 0x24, 0x04, 0xf5} },
-{ 0x94de,      16,     {0x82, 0xe4, 0x3a, 0xf5, 0x83, 0xe0, 0xff, 0xed, 0xf4, 0xfc, 0xef, 0x5c, 0xf0, 0xae, 0x59, 0xeb} },
-{ 0x94ee,      16,     {0x24, 0x06, 0xf5, 0x82, 0xe4, 0x3a, 0xf5, 0x83, 0xe0, 0x55, 0x59, 0xfc, 0xb5, 0x06, 0x03, 0xaf} },
-{ 0x94fe,      16,     {0x05, 0x22, 0xe5, 0x57, 0x5c, 0xfe, 0xe5, 0x58, 0x5c, 0xfd, 0xe9, 0x60, 0x16, 0xee, 0x70, 0x04} },
-{ 0x950e,      16,     {0x7f, 0x01, 0x80, 0x02, 0x7f, 0x00, 0xae, 0x07, 0xed, 0x70, 0x04, 0x7f, 0x01, 0x80, 0x02, 0x7f} },
-{ 0x951e,      16,     {0x00, 0xad, 0x07, 0xee, 0x60, 0x03, 0xaf, 0x57, 0x22, 0xed, 0x60, 0x03, 0xaf, 0x58, 0x22, 0x7f} },
-{ 0x952e,      1,      {0x00} },
-{ 0x952f,      1,      {0x22} },
-{ 0x9530,      16,     {0x75, 0x50, 0x02, 0x75, 0x51, 0xb0, 0x90, 0x03, 0x35, 0x74, 0x0f, 0xf0, 0x85, 0x51, 0x82, 0x85} },
-{ 0x9540,      16,     {0x50, 0x83, 0xe0, 0xff, 0x90, 0x03, 0x36, 0xf0, 0x85, 0x51, 0x82, 0x85, 0x50, 0x83, 0xa3, 0xe0} },
-{ 0x9550,      16,     {0x90, 0x03, 0x37, 0xf0, 0xa3, 0x74, 0xff, 0xf0, 0x75, 0x52, 0x03, 0x75, 0x53, 0x39, 0xef, 0x14} },
-{ 0x9560,      16,     {0xb4, 0x0b, 0x00, 0x40, 0x03, 0x02, 0x99, 0x98, 0x90, 0x95, 0x6f, 0xf8, 0x28, 0x28, 0x73, 0x02} },
-{ 0x9570,      16,     {0x95, 0x90, 0x02, 0x96, 0x2f, 0x02, 0x97, 0x34, 0x02, 0x97, 0x54, 0x02, 0x97, 0x54, 0x02, 0x97} },
-{ 0x9580,      16,     {0xef, 0x02, 0x98, 0x2a, 0x02, 0x98, 0x4f, 0x02, 0x99, 0x0d, 0x02, 0x99, 0x39, 0x02, 0x99, 0x65} },
-{ 0x9590,      16,     {0xe4, 0xf5, 0x4b, 0xe5, 0x4b, 0x75, 0xf0, 0x08, 0xa4, 0x24, 0x00, 0xf5, 0x82, 0xe4, 0x34, 0x20} },
-{ 0x95a0,      16,     {0xaf, 0x82, 0xf5, 0x4e, 0x8f, 0x4f, 0xe4, 0xff, 0xe4, 0xfe, 0xef, 0x60, 0x10, 0x74, 0x8a, 0x2e} },
-{ 0x95b0,      16,     {0xf5, 0x82, 0xe4, 0x34, 0x02, 0xf5, 0x83, 0xe0, 0xf4, 0xf5, 0x4c, 0x80, 0x0d, 0x74, 0x8a, 0x2e} },
-{ 0x95c0,      16,     {0xf5, 0x82, 0xe4, 0x34, 0x02, 0xf5, 0x83, 0xe0, 0xf5, 0x4c, 0xe5, 0x4f, 0x24, 0x07, 0xf5, 0x82} },
-{ 0x95d0,      16,     {0xe4, 0x35, 0x4e, 0xf5, 0x83, 0xe5, 0x4c, 0xf0, 0xe0, 0xf5, 0x4d, 0x65, 0x4c, 0x60, 0x38, 0xe4} },
-{ 0x95e0,      16,     {0x90, 0x03, 0x38, 0xf0, 0xe5, 0x4b, 0x04, 0xfd, 0x05, 0x53, 0xe5, 0x53, 0xaa, 0x52, 0x70, 0x02} },
-{ 0x95f0,      16,     {0x05, 0x52, 0x14, 0xf5, 0x82, 0x8a, 0x83, 0xed, 0xf0, 0x05, 0x53, 0xe5, 0x53, 0xac, 0x52, 0x70} },
-{ 0x9600,      16,     {0x02, 0x05, 0x52, 0x14, 0xf5, 0x82, 0x8c, 0x83, 0xe5, 0x4c, 0xf0, 0x85, 0x53, 0x82, 0x85, 0x52} },
-{ 0x9610,      16,     {0x83, 0xe5, 0x4d, 0xf0, 0x02, 0x99, 0x9e, 0x0e, 0xbe, 0x24, 0x8f, 0x0f, 0xef, 0x64, 0x02, 0x70} },
-{ 0x9620,      16,     {0x87, 0x05, 0x4b, 0xe5, 0x4b, 0x64, 0x04, 0x60, 0x03, 0x02, 0x95, 0x93, 0x02, 0x99, 0x9e, 0xe4} },
-{ 0x9630,      16,     {0xf5, 0x4b, 0xaf, 0x4b, 0xe4, 0xfd, 0x12, 0x82, 0x50, 0x05, 0x4b, 0xe5, 0x4b, 0xd3, 0x94, 0x03} },
-{ 0x9640,      16,     {0x40, 0xf0, 0x90, 0x00, 0x04, 0x74, 0x94, 0xf0, 0xa3, 0x74, 0x5e, 0xf0, 0xe4, 0xf5, 0x4d, 0x7e} },
-{ 0x9650,      16,     {0x20, 0x7f, 0x00, 0x75, 0x4e, 0x20, 0x75, 0x4f, 0x00, 0xf5, 0x4b, 0xaf, 0x4b, 0x74, 0x01, 0xa8} },
-{ 0x9660,      16,     {0x07, 0x08, 0x80, 0x02, 0xc3, 0x33, 0xd8, 0xfc, 0xf5, 0x4c, 0x90, 0x01, 0xc4, 0xf0, 0x90, 0x01} },
-{ 0x9670,      16,     {0xc0, 0xe4, 0xf0, 0xa3, 0x74, 0x0a, 0xf0, 0x85, 0x4f, 0x82, 0x85, 0x4e, 0x83, 0xa3, 0x74, 0x02} },
-{ 0x9680,      16,     {0xf0, 0x90, 0x01, 0xc4, 0xe0, 0xb5, 0x4c, 0x34, 0x90, 0x01, 0xc0, 0xe0, 0x70, 0x02, 0xa3, 0xe0} },
-{ 0x9690,      16,     {0x70, 0xef, 0x90, 0x03, 0x38, 0xf0, 0xe5, 0x4b, 0x04, 0xff, 0x05, 0x53, 0xe5, 0x53, 0xac, 0x52} },
-{ 0x96a0,      16,     {0x70, 0x02, 0x05, 0x52, 0x14, 0xf5, 0x82, 0x8c, 0x83, 0xef, 0xf0, 0x85, 0x53, 0x82, 0x85, 0x52} },
-{ 0x96b0,      16,     {0x83, 0x74, 0xff, 0xf0, 0xe4, 0x90, 0x01, 0xc4, 0xf0, 0x75, 0x4d, 0xff, 0x90, 0x01, 0xc4, 0xe0} },
-{ 0x96c0,      16,     {0xff, 0x60, 0x37, 0xe4, 0x90, 0x03, 0x38, 0xf0, 0xe5, 0x4b, 0x04, 0xfe, 0x05, 0x53, 0xe5, 0x53} },
-{ 0x96d0,      16,     {0xac, 0x52, 0x70, 0x02, 0x05, 0x52, 0x14, 0xf5, 0x82, 0x8c, 0x83, 0xee, 0xf0, 0x05, 0x53, 0xe5} },
-{ 0x96e0,      16,     {0x53, 0xac, 0x52, 0x70, 0x02, 0x05, 0x52, 0x14, 0xf5, 0x82, 0x8c, 0x83, 0xef, 0xf0, 0x85, 0x53} },
-{ 0x96f0,      16,     {0x82, 0x85, 0x52, 0x83, 0xe5, 0x4c, 0xf0, 0x75, 0x4d, 0xff, 0xe5, 0x4d, 0x70, 0x16, 0x74, 0x08} },
-{ 0x9700,      16,     {0x25, 0x4f, 0xf5, 0x4f, 0xe4, 0x35, 0x4e, 0xf5, 0x4e, 0x05, 0x4b, 0xe5, 0x4b, 0x64, 0x04, 0x60} },
-{ 0x9710,      16,     {0x03, 0x02, 0x96, 0x5b, 0xe4, 0xf5, 0x4b, 0xaf, 0x4b, 0x7d, 0x01, 0x12, 0x82, 0x50, 0x05, 0x4b} },
-{ 0x9720,      16,     {0xe5, 0x4b, 0xd3, 0x94, 0x03, 0x40, 0xf0, 0x90, 0x00, 0x04, 0x74, 0x13, 0xf0, 0xa3, 0x74, 0x12} },
-{ 0x9730,      16,     {0xf0, 0x02, 0x99, 0x9e, 0x85, 0x51, 0x82, 0x85, 0x50, 0x83, 0xa3, 0xe0, 0x14, 0xff, 0x74, 0x01} },
-{ 0x9740,      16,     {0xa8, 0x07, 0x08, 0x80, 0x02, 0xc3, 0x33, 0xd8, 0xfc, 0x90, 0x02, 0xf7, 0xf0, 0x90, 0x01, 0xc4} },
-{ 0x9750,      16,     {0xf0, 0x02, 0x99, 0x9e, 0x90, 0x01, 0xc0, 0x74, 0x03, 0xf0, 0xa3, 0x74, 0xe8, 0xf0, 0xe4, 0xf5} },
-{ 0x9760,      16,     {0x4d, 0x90, 0x02, 0xf7, 0xe0, 0xff, 0x90, 0x01, 0xc4, 0xe0, 0xb5, 0x07, 0x19, 0x90, 0x01, 0xc0} },
-{ 0x9770,      16,     {0xe0, 0x70, 0x02, 0xa3, 0xe0, 0x70, 0xea, 0x90, 0x03, 0x38, 0xf0, 0x85, 0x53, 0x82, 0x85, 0x52} },
-{ 0x9780,      16,     {0x83, 0x74, 0xff, 0xf0, 0xf5, 0x4d, 0xe5, 0x4d, 0x60, 0x03, 0x02, 0x99, 0x9e, 0x90, 0x01, 0xc0} },
-{ 0x9790,      16,     {0xf0, 0xa3, 0x74, 0x96, 0xf0, 0x90, 0x01, 0xc0, 0xe0, 0x70, 0x02, 0xa3, 0xe0, 0x70, 0xf6, 0x7f} },
-{ 0x97a0,      16,     {0x02, 0x12, 0x81, 0x11, 0xc3, 0xee, 0x64, 0x80, 0x94, 0x80, 0x40, 0xf3, 0xef, 0x54, 0x0f, 0xf5} },
-{ 0x97b0,      16,     {0x4d, 0x90, 0x02, 0xf7, 0xe0, 0x55, 0x4d, 0x70, 0x04, 0x7f, 0x01, 0x80, 0x02, 0x7f, 0x00, 0x8f} },
-{ 0x97c0,      16,     {0x4c, 0x85, 0x51, 0x82, 0x85, 0x50, 0x83, 0xe0, 0xb4, 0x05, 0x0c, 0xe5, 0x4c, 0x70, 0x04, 0x7f} },
-{ 0x97d0,      16,     {0x01, 0x80, 0x02, 0x7f, 0x00, 0x8f, 0x4c, 0xe5, 0x4c, 0x70, 0x03, 0x02, 0x99, 0x9e, 0xe4, 0x90} },
-{ 0x97e0,      16,     {0x03, 0x38, 0xf0, 0x85, 0x53, 0x82, 0x85, 0x52, 0x83, 0xe5, 0x4d, 0xf0, 0x02, 0x99, 0x9e, 0xe4} },
-{ 0x97f0,      16,     {0xff, 0xfd, 0x12, 0x82, 0x50, 0x7e, 0x20, 0x7f, 0x00, 0x75, 0x4e, 0x20, 0x75, 0x4f, 0x00, 0x85} },
-{ 0x9800,      16,     {0x4f, 0x82, 0x85, 0x4e, 0x83, 0xa3, 0xa3, 0xa3, 0xe0, 0x44, 0x80, 0xf0, 0x85, 0x4f, 0x82, 0x85} },
-{ 0x9810,      16,     {0x4e, 0x83, 0x74, 0x01, 0xf0, 0xa3, 0xe4, 0xf0, 0x85, 0x4f, 0x82, 0x85, 0x4e, 0x83, 0xa3, 0xa3} },
-{ 0x9820,      16,     {0xa3, 0xe0, 0x54, 0x7f, 0xf0, 0xd2, 0x04, 0x02, 0x99, 0x9e, 0xc2, 0x04, 0x7e, 0x20, 0x7f, 0x00} },
-{ 0x9830,      16,     {0x75, 0x4e, 0x20, 0x75, 0x4f, 0x00, 0xe5, 0x4f, 0x24, 0x05, 0xf5, 0x82, 0xe4, 0x35, 0x4e, 0xf5} },
-{ 0x9840,      16,     {0x83, 0xe0, 0x30, 0xe6, 0xf1, 0xe4, 0xff, 0x7d, 0x01, 0x12, 0x82, 0x50, 0x02, 0x99, 0x9e, 0xe4} },
-{ 0x9850,      16,     {0xf5, 0x4d, 0xf5, 0x4b, 0xaf, 0x4b, 0xe4, 0xfd, 0x12, 0x82, 0x50, 0xe5, 0x4b, 0x75, 0xf0, 0x08} },
-{ 0x9860,      16,     {0xa4, 0x24, 0x00, 0xf5, 0x82, 0xe4, 0x34, 0x20, 0xaf, 0x82, 0xf5, 0x4e, 0x8f, 0x4f, 0xf5, 0x83} },
-{ 0x9870,      16,     {0xe5, 0x82, 0x24, 0x04, 0xf5, 0x82, 0xe4, 0x35, 0x83, 0xf5, 0x83, 0xe0, 0x54, 0xfc, 0xf0, 0xaf} },
-{ 0x9880,      16,     {0x4b, 0x7d, 0x01, 0x7b, 0x01, 0x75, 0x57, 0x80, 0x75, 0x58, 0x40, 0x12, 0x94, 0xac, 0x8f, 0x4d} },
-{ 0x9890,      16,     {0xe5, 0x4d, 0x70, 0x11, 0xaf, 0x4b, 0x7d, 0x02, 0x7b, 0x01, 0x75, 0x57, 0x10, 0x75, 0x58, 0x20} },
-{ 0x98a0,      16,     {0x12, 0x94, 0xac, 0x8f, 0x4d, 0xe5, 0x4d, 0x70, 0x10, 0xaf, 0x4b, 0x7d, 0x01, 0xfb, 0x75, 0x57} },
-{ 0x98b0,      16,     {0x80, 0x75, 0x58, 0x40, 0x12, 0x94, 0xac, 0x8f, 0x4d, 0xe5, 0x4d, 0x70, 0x10, 0xaf, 0x4b, 0x7d} },
-{ 0x98c0,      16,     {0x02, 0xfb, 0x75, 0x57, 0x10, 0x75, 0x58, 0x20, 0x12, 0x94, 0xac, 0x8f, 0x4d, 0xaf, 0x4b, 0x7d} },
-{ 0x98d0,      16,     {0x01, 0x12, 0x82, 0x50, 0xe5, 0x4d, 0x60, 0x26, 0xe4, 0x90, 0x03, 0x38, 0xf0, 0xe5, 0x4b, 0x04} },
-{ 0x98e0,      16,     {0xff, 0x05, 0x53, 0xe5, 0x53, 0xac, 0x52, 0x70, 0x02, 0x05, 0x52, 0x14, 0xf5, 0x82, 0x8c, 0x83} },
-{ 0x98f0,      16,     {0xef, 0xf0, 0x85, 0x53, 0x82, 0x85, 0x52, 0x83, 0xe5, 0x4d, 0xf0, 0x02, 0x99, 0x9e, 0x05, 0x4b} },
-{ 0x9900,      16,     {0xe5, 0x4b, 0xd3, 0x94, 0x03, 0x50, 0x03, 0x02, 0x98, 0x54, 0x02, 0x99, 0x9e, 0xe4, 0x90, 0x03} },
-{ 0x9910,      16,     {0x59, 0xf0, 0xa3, 0xf0, 0xa3, 0xf0, 0xa3, 0xf0, 0xa3, 0xf0, 0xa3, 0x74, 0x10, 0xf0, 0xa3, 0x74} },
-{ 0x9920,      16,     {0x1b, 0xf0, 0xa3, 0x74, 0x29, 0xf0, 0x7e, 0x03, 0x7f, 0x59, 0x12, 0x80, 0x00, 0xef, 0x64, 0x08} },
-{ 0x9930,      16,     {0x60, 0x6c, 0xe4, 0x90, 0x03, 0x38, 0xf0, 0x80, 0x65, 0xe4, 0x90, 0x03, 0x59, 0xf0, 0xa3, 0xf0} },
-{ 0x9940,      16,     {0xa3, 0xf0, 0xa3, 0xf0, 0xa3, 0xf0, 0xa3, 0x74, 0x10, 0xf0, 0xa3, 0xe5, 0x52, 0xf0, 0xa3, 0xe5} },
-{ 0x9950,      16,     {0x53, 0xf0, 0x7e, 0x03, 0x7f, 0x59, 0x12, 0x19, 0xc1, 0xef, 0x64, 0x08, 0x60, 0x40, 0xe4, 0x90} },
-{ 0x9960,      16,     {0x03, 0x38, 0xf0, 0x80, 0x39, 0xe4, 0x90, 0x03, 0x59, 0xf0, 0xa3, 0xf0, 0xa3, 0xf0, 0xa3, 0xf0} },
-{ 0x9970,      16,     {0xa3, 0xf0, 0xa3, 0x74, 0x10, 0xf0, 0xe5, 0x51, 0x24, 0x02, 0x90, 0x03, 0x60, 0xf0, 0xe4, 0x35} },
-{ 0x9980,      16,     {0x50, 0x90, 0x03, 0x5f, 0xf0, 0x7e, 0x03, 0x7f, 0x59, 0x12, 0x80, 0x00, 0xef, 0x64, 0x08, 0x60} },
-{ 0x9990,      16,     {0x0d, 0xe4, 0x90, 0x03, 0x38, 0xf0, 0x80, 0x06, 0x90, 0x03, 0x38, 0x74, 0x01, 0xf0, 0x90, 0x01} },
-{ 0x99a0,      16,     {0xc0, 0xe4, 0xf0, 0xa3, 0x74, 0x0a, 0xf0, 0x90, 0x01, 0xc0, 0xe0, 0x70, 0x02, 0xa3, 0xe0, 0x70} },
-{ 0x99b0,      16,     {0xf6, 0x7e, 0x03, 0x7f, 0x35, 0x75, 0x60, 0x00, 0x75, 0x5f, 0x00, 0x75, 0x5e, 0x00, 0x75, 0x5d} },
-{ 0x99c0,      11,     {0x00, 0x7d, 0x24, 0x12, 0x8e, 0x0c, 0xe4, 0x90, 0x02, 0xaf, 0xf0} },
-{ 0x99cb,      1,      {0x22} },
-{ 0x99cc,      16,     {0xe4, 0xff, 0x74, 0xf8, 0x2f, 0xf5, 0x82, 0xe4, 0x34, 0x02, 0xf5, 0x83, 0xe0, 0x70, 0x03, 0x02} },
-{ 0x99dc,      16,     {0x9a, 0x6f, 0x74, 0x36, 0x2f, 0xf8, 0xe6, 0x20, 0xe5, 0x03, 0x02, 0x9a, 0x6f, 0xef, 0x75, 0xf0} },
-{ 0x99ec,      16,     {0x08, 0xa4, 0x24, 0x00, 0xf5, 0x82, 0xe4, 0x34, 0x20, 0xad, 0x82, 0xfc, 0xf5, 0x83, 0xe5, 0x82} },
-{ 0x99fc,      16,     {0x24, 0x05, 0xf5, 0x82, 0xe4, 0x35, 0x83, 0xf5, 0x83, 0xe0, 0x54, 0x60, 0x64, 0x60, 0x70, 0x63} },
-{ 0x9a0c,      16,     {0xef, 0x25, 0xe0, 0x24, 0xef, 0xf5, 0x82, 0xe4, 0x34, 0x02, 0xf5, 0x83, 0xe4, 0x75, 0xf0, 0x01} },
-{ 0x9a1c,      16,     {0x12, 0x9b, 0xce, 0x85, 0xf0, 0x82, 0xf5, 0x83, 0xe0, 0x8d, 0x82, 0x8c, 0x83, 0xf0, 0x74, 0xf8} },
-{ 0x9a2c,      16,     {0x2f, 0xf5, 0x82, 0xe4, 0x34, 0x02, 0xf5, 0x83, 0xe0, 0x14, 0xf0, 0x70, 0x36, 0xef, 0x25, 0xe0} },
-{ 0x9a3c,      16,     {0x24, 0xc7, 0xf5, 0x82, 0xe4, 0x34, 0x7f, 0xf5, 0x83, 0xe4, 0xf0, 0xef, 0x25, 0xe0, 0xfe, 0xc3} },
-{ 0x9a4c,      16,     {0x74, 0x0c, 0x9e, 0x75, 0xf0, 0x40, 0xa4, 0x24, 0x40, 0xf5, 0x82, 0xe5, 0xf0, 0x34, 0x7b, 0xad} },
-{ 0x9a5c,      16,     {0x82, 0xfc, 0xef, 0x25, 0xe0, 0x24, 0xef, 0xf5, 0x82, 0xe4, 0x34, 0x02, 0xf5, 0x83, 0xec, 0xf0} },
-{ 0x9a6c,      12,     {0xa3, 0xed, 0xf0, 0x0f, 0xef, 0x64, 0x04, 0x60, 0x03, 0x02, 0x99, 0xce} },
-{ 0x9a78,      1,      {0x22} },
-{ 0x9a79,      16,     {0xe7, 0x09, 0xf6, 0x08, 0xdf, 0xfa, 0x80, 0x46, 0xe7, 0x09, 0xf2, 0x08, 0xdf, 0xfa, 0x80, 0x3e} },
-{ 0x9a89,      16,     {0x88, 0x82, 0x8c, 0x83, 0xe7, 0x09, 0xf0, 0xa3, 0xdf, 0xfa, 0x80, 0x32, 0xe3, 0x09, 0xf6, 0x08} },
-{ 0x9a99,      16,     {0xdf, 0xfa, 0x80, 0x78, 0xe3, 0x09, 0xf2, 0x08, 0xdf, 0xfa, 0x80, 0x70, 0x88, 0x82, 0x8c, 0x83} },
-{ 0x9aa9,      16,     {0xe3, 0x09, 0xf0, 0xa3, 0xdf, 0xfa, 0x80, 0x64, 0x89, 0x82, 0x8a, 0x83, 0xe0, 0xa3, 0xf6, 0x08} },
-{ 0x9ab9,      16,     {0xdf, 0xfa, 0x80, 0x58, 0x89, 0x82, 0x8a, 0x83, 0xe0, 0xa3, 0xf2, 0x08, 0xdf, 0xfa, 0x80, 0x4c} },
-{ 0x9ac9,      16,     {0x80, 0xd2, 0x80, 0xfa, 0x80, 0xc6, 0x80, 0xd4, 0x80, 0x69, 0x80, 0xf2, 0x80, 0x33, 0x80, 0x10} },
-{ 0x9ad9,      16,     {0x80, 0xa6, 0x80, 0xea, 0x80, 0x9a, 0x80, 0xa8, 0x80, 0xda, 0x80, 0xe2, 0x80, 0xca, 0x80, 0x33} },
-{ 0x9ae9,      16,     {0x89, 0x82, 0x8a, 0x83, 0xec, 0xfa, 0xe4, 0x93, 0xa3, 0xc8, 0xc5, 0x82, 0xc8, 0xcc, 0xc5, 0x83} },
-{ 0x9af9,      16,     {0xcc, 0xf0, 0xa3, 0xc8, 0xc5, 0x82, 0xc8, 0xcc, 0xc5, 0x83, 0xcc, 0xdf, 0xe9, 0xde, 0xe7, 0x80} },
-{ 0x9b09,      16,     {0x0d, 0x89, 0x82, 0x8a, 0x83, 0xe4, 0x93, 0xa3, 0xf6, 0x08, 0xdf, 0xf9, 0xec, 0xfa, 0xa9, 0xf0} },
-{ 0x9b19,      16,     {0xed, 0xfb, 0x22, 0x89, 0x82, 0x8a, 0x83, 0xec, 0xfa, 0xe0, 0xa3, 0xc8, 0xc5, 0x82, 0xc8, 0xcc} },
-{ 0x9b29,      16,     {0xc5, 0x83, 0xcc, 0xf0, 0xa3, 0xc8, 0xc5, 0x82, 0xc8, 0xcc, 0xc5, 0x83, 0xcc, 0xdf, 0xea, 0xde} },
-{ 0x9b39,      16,     {0xe8, 0x80, 0xdb, 0x89, 0x82, 0x8a, 0x83, 0xe4, 0x93, 0xa3, 0xf2, 0x08, 0xdf, 0xf9, 0x80, 0xcc} },
-{ 0x9b49,      16,     {0x88, 0xf0, 0xed, 0x24, 0x02, 0xb4, 0x04, 0x00, 0x50, 0xc2, 0xf5, 0x82, 0xeb, 0x24, 0x02, 0xb4} },
-{ 0x9b59,      16,     {0x04, 0x00, 0x50, 0xb8, 0x23, 0x23, 0x45, 0x82, 0xf5, 0x82, 0xef, 0x4e, 0x60, 0xae, 0xef, 0x60} },
-{ 0x9b69,      9,      {0x01, 0x0e, 0xe5, 0x82, 0x23, 0x90, 0x9a, 0xc9, 0x73} },
-{ 0x9b72,      16,     {0xbb, 0x01, 0x06, 0x89, 0x82, 0x8a, 0x83, 0xe0, 0x22, 0x50, 0x02, 0xe7, 0x22, 0xbb, 0xfe, 0x02} },
-{ 0x9b82,      9,      {0xe3, 0x22, 0x89, 0x82, 0x8a, 0x83, 0xe4, 0x93, 0x22} },
-{ 0x9b8b,      16,     {0xbb, 0x01, 0x0c, 0xe5, 0x82, 0x29, 0xf5, 0x82, 0xe5, 0x83, 0x3a, 0xf5, 0x83, 0xe0, 0x22, 0x50} },
-{ 0x9b9b,      16,     {0x06, 0xe9, 0x25, 0x82, 0xf8, 0xe6, 0x22, 0xbb, 0xfe, 0x06, 0xe9, 0x25, 0x82, 0xf8, 0xe2, 0x22} },
-{ 0x9bab,      13,     {0xe5, 0x82, 0x29, 0xf5, 0x82, 0xe5, 0x83, 0x3a, 0xf5, 0x83, 0xe4, 0x93, 0x22} },
-{ 0x9bb8,      16,     {0xc5, 0xf0, 0xf8, 0xa3, 0xe0, 0x28, 0xf0, 0xc5, 0xf0, 0xf8, 0xe5, 0x82, 0x15, 0x82, 0x70, 0x02} },
-{ 0x9bc8,      6,      {0x15, 0x83, 0xe0, 0x38, 0xf0, 0x22} },
-{ 0x9bce,      16,     {0xa3, 0xf8, 0xe0, 0xc5, 0xf0, 0x25, 0xf0, 0xf0, 0xe5, 0x82, 0x15, 0x82, 0x70, 0x02, 0x15, 0x83} },
-{ 0x9bde,      6,      {0xe0, 0xc8, 0x38, 0xf0, 0xe8, 0x22} },
-{ 0x9be4,      16,     {0xbb, 0x01, 0x10, 0xe5, 0x82, 0x29, 0xf5, 0x82, 0xe5, 0x83, 0x3a, 0xf5, 0x83, 0xe0, 0xf5, 0xf0} },
-{ 0x9bf4,      16,     {0xa3, 0xe0, 0x22, 0x50, 0x09, 0xe9, 0x25, 0x82, 0xf8, 0x86, 0xf0, 0x08, 0xe6, 0x22, 0xbb, 0xfe} },
-{ 0x9c04,      16,     {0x0a, 0xe9, 0x25, 0x82, 0xf8, 0xe2, 0xf5, 0xf0, 0x08, 0xe2, 0x22, 0xe5, 0x83, 0x2a, 0xf5, 0x83} },
-{ 0x9c14,      8,      {0xe9, 0x93, 0xf5, 0xf0, 0xa3, 0xe9, 0x93, 0x22} },
-{ 0x9c1c,      16,     {0x75, 0xf0, 0x08, 0x75, 0x82, 0x00, 0xef, 0x2f, 0xff, 0xee, 0x33, 0xfe, 0xcd, 0x33, 0xcd, 0xcc} },
-{ 0x9c2c,      16,     {0x33, 0xcc, 0xc5, 0x82, 0x33, 0xc5, 0x82, 0x9b, 0xed, 0x9a, 0xec, 0x99, 0xe5, 0x82, 0x98, 0x40} },
-{ 0x9c3c,      16,     {0x0c, 0xf5, 0x82, 0xee, 0x9b, 0xfe, 0xed, 0x9a, 0xfd, 0xec, 0x99, 0xfc, 0x0f, 0xd5, 0xf0, 0xd6} },
-{ 0x9c4c,      16,     {0xe4, 0xce, 0xfb, 0xe4, 0xcd, 0xfa, 0xe4, 0xcc, 0xf9, 0xa8, 0x82, 0x22, 0xb8, 0x00, 0xc1, 0xb9} },
-{ 0x9c5c,      16,     {0x00, 0x59, 0xba, 0x00, 0x2d, 0xec, 0x8b, 0xf0, 0x84, 0xcf, 0xce, 0xcd, 0xfc, 0xe5, 0xf0, 0xcb} },
-{ 0x9c6c,      16,     {0xf9, 0x78, 0x18, 0xef, 0x2f, 0xff, 0xee, 0x33, 0xfe, 0xed, 0x33, 0xfd, 0xec, 0x33, 0xfc, 0xeb} },
-{ 0x9c7c,      16,     {0x33, 0xfb, 0x10, 0xd7, 0x03, 0x99, 0x40, 0x04, 0xeb, 0x99, 0xfb, 0x0f, 0xd8, 0xe5, 0xe4, 0xf9} },
-{ 0x9c8c,      16,     {0xfa, 0x22, 0x78, 0x18, 0xef, 0x2f, 0xff, 0xee, 0x33, 0xfe, 0xed, 0x33, 0xfd, 0xec, 0x33, 0xfc} },
-{ 0x9c9c,      16,     {0xc9, 0x33, 0xc9, 0x10, 0xd7, 0x05, 0x9b, 0xe9, 0x9a, 0x40, 0x07, 0xec, 0x9b, 0xfc, 0xe9, 0x9a} },
-{ 0x9cac,      16,     {0xf9, 0x0f, 0xd8, 0xe0, 0xe4, 0xc9, 0xfa, 0xe4, 0xcc, 0xfb, 0x22, 0x75, 0xf0, 0x10, 0xef, 0x2f} },
-{ 0x9cbc,      16,     {0xff, 0xee, 0x33, 0xfe, 0xed, 0x33, 0xfd, 0xcc, 0x33, 0xcc, 0xc8, 0x33, 0xc8, 0x10, 0xd7, 0x07} },
-{ 0x9ccc,      16,     {0x9b, 0xec, 0x9a, 0xe8, 0x99, 0x40, 0x0a, 0xed, 0x9b, 0xfd, 0xec, 0x9a, 0xfc, 0xe8, 0x99, 0xf8} },
-{ 0x9cdc,      14,     {0x0f, 0xd5, 0xf0, 0xda, 0xe4, 0xcd, 0xfb, 0xe4, 0xcc, 0xfa, 0xe4, 0xc8, 0xf9, 0x22} },
-{ 0x9cea,      16,     {0xeb, 0x9f, 0xf5, 0xf0, 0xea, 0x9e, 0x42, 0xf0, 0xe9, 0x9d, 0x42, 0xf0, 0xe8, 0x9c, 0x45, 0xf0} },
-{ 0x9cfa,      1,      {0x22} },
-{ 0x9cfb,      16,     {0xe8, 0x60, 0x0f, 0xec, 0xc3, 0x13, 0xfc, 0xed, 0x13, 0xfd, 0xee, 0x13, 0xfe, 0xef, 0x13, 0xff} },
-{ 0x9d0b,      3,      {0xd8, 0xf1, 0x22} },
-{ 0x9d0e,      16,     {0x08, 0x08, 0x08, 0xe6, 0xcf, 0x2f, 0xf6, 0x18, 0xe6, 0xce, 0x3e, 0xf6, 0x18, 0xe6, 0xcd, 0x3d} },
-{ 0x9d1e,      7,      {0xf6, 0x18, 0xe6, 0xcc, 0x3c, 0xf6, 0x22} },
-{ 0x9d25,      12,     {0xec, 0xf0, 0xa3, 0xed, 0xf0, 0xa3, 0xee, 0xf0, 0xa3, 0xef, 0xf0, 0x22} },
-{ 0x9d31,      16,     {0xa8, 0x82, 0x85, 0x83, 0xf0, 0xd0, 0x83, 0xd0, 0x82, 0x12, 0x9d, 0x48, 0x12, 0x9d, 0x48, 0x12} },
-{ 0x9d41,      16,     {0x9d, 0x48, 0x12, 0x9d, 0x48, 0xe4, 0x73, 0xe4, 0x93, 0xa3, 0xc5, 0x83, 0xc5, 0xf0, 0xc5, 0x83} },
-{ 0x9d51,      16,     {0xc8, 0xc5, 0x82, 0xc8, 0xf0, 0xa3, 0xc5, 0x83, 0xc5, 0xf0, 0xc5, 0x83, 0xc8, 0xc5, 0x82, 0xc8} },
-{ 0x9d61,      1,      {0x22} },
+{ 0x19c1,      4,      {0x8e, 0x54, 0x8f, 0x55} },
+{ 0x19c5,      16,     {0x75, 0x56, 0x03, 0xe5, 0x55, 0x24, 0x04, 0xf5, 0x82, 0xe4, 0x35, 0x54, 0xf5, 0x83, 0xe0, 0xfe} },
+{ 0x19d5,      16,     {0xa3, 0xe0, 0x4e, 0x70, 0x03, 0x02, 0x1a, 0xcf, 0xe5, 0x56, 0x60, 0x4e, 0x14, 0x60, 0x38, 0x14} },
+{ 0x19e5,      16,     {0x60, 0x20, 0x14, 0x60, 0x03, 0x02, 0x1a, 0x73, 0x90, 0x7f, 0xa5, 0xe0, 0x44, 0x80, 0xf0, 0x85} },
+{ 0x19f5,      16,     {0x55, 0x82, 0x85, 0x54, 0x83, 0xa3, 0xe0, 0xff, 0x25, 0xe0, 0x44, 0xa0, 0x90, 0x7f, 0xa6, 0xf0} },
+{ 0x1a05,      16,     {0x80, 0x6c, 0x85, 0x55, 0x82, 0x85, 0x54, 0x83, 0xe0, 0xc3, 0x94, 0x20, 0x40, 0x09, 0xa3, 0xa3} },
+{ 0x1a15,      16,     {0xe0, 0x90, 0x7f, 0xa6, 0xf0, 0x80, 0x57, 0x15, 0x56, 0x85, 0x55, 0x82, 0x85, 0x54, 0x83, 0xa3} },
+{ 0x1a25,      16,     {0xa3, 0xe0, 0xa3, 0xe0, 0x90, 0x7f, 0xa6, 0xf0, 0x80, 0x44, 0xe5, 0x55, 0x24, 0x06, 0xf5, 0x82} },
+{ 0x1a35,      16,     {0xe4, 0x35, 0x54, 0xf5, 0x83, 0xe4, 0x75, 0xf0, 0x01, 0x12, 0x9f, 0xa4, 0x85, 0xf0, 0x82, 0xf5} },
+{ 0x1a45,      16,     {0x83, 0xe0, 0x90, 0x7f, 0xa6, 0xf0, 0x90, 0x7f, 0xa5, 0xe0, 0x44, 0x40, 0xf0, 0xe5, 0x55, 0x24} },
+{ 0x1a55,      16,     {0x04, 0xf5, 0x82, 0xe4, 0x35, 0x54, 0xf5, 0x83, 0x74, 0xff, 0xf5, 0xf0, 0x12, 0x9f, 0x8e, 0x85} },
+{ 0x1a65,      16,     {0x55, 0x82, 0x85, 0x54, 0x83, 0xa3, 0xa3, 0xe4, 0x75, 0xf0, 0x01, 0x12, 0x9f, 0x8e, 0x90, 0x7f} },
+{ 0x1a75,      16,     {0xa5, 0xe0, 0xf5, 0x57, 0x30, 0xe0, 0xf7, 0x30, 0xe2, 0x07, 0xe0, 0x44, 0x40, 0xf0, 0x7f, 0x06} },
+{ 0x1a85,      16,     {0x22, 0xe5, 0x57, 0x20, 0xe1, 0x0a, 0x90, 0x7f, 0xa5, 0xe0, 0x44, 0x40, 0xf0, 0x7f, 0x07, 0x22} },
+{ 0x1a95,      16,     {0xe5, 0x56, 0x70, 0x31, 0x7f, 0x01, 0x7e, 0x00, 0x12, 0x09, 0x29, 0x90, 0x7f, 0xa5, 0xe0, 0x44} },
+{ 0x1aa5,      16,     {0x80, 0xf0, 0x85, 0x55, 0x82, 0x85, 0x54, 0x83, 0xa3, 0xe0, 0xff, 0x25, 0xe0, 0x44, 0xa0, 0x90} },
+{ 0x1ab5,      16,     {0x7f, 0xa6, 0xf0, 0x90, 0x7f, 0xa5, 0xe0, 0xf5, 0x57, 0x30, 0xe0, 0xf7, 0x30, 0xe1, 0xd5, 0x75} },
+{ 0x1ac5,      12,     {0x56, 0x03, 0x02, 0x19, 0xc8, 0x15, 0x56, 0x02, 0x19, 0xc8, 0x7f, 0x08} },
+{ 0x1ad1,      1,      {0x22} },
+{ 0x1ad2,      16,     {0xc0, 0xe0, 0xc0, 0x83, 0xc0, 0x82, 0xc2, 0xa9, 0x90, 0x03, 0x00, 0x74, 0x19, 0xf0, 0xd2, 0xa9} },
+{ 0x1ae2,      15,     {0x53, 0x91, 0x7f, 0x90, 0x01, 0xc4, 0xe4, 0xf0, 0xd0, 0x82, 0xd0, 0x83, 0xd0, 0xe0, 0x32} },
+{ 0x1af1,      4,      {0x8e, 0x54, 0x8f, 0x55} },
+{ 0x1af5,      16,     {0x8f, 0x82, 0x8e, 0x83, 0xe0, 0x14, 0xf5, 0x56, 0xc3, 0x94, 0x04, 0x40, 0x03, 0x7f, 0xff, 0x22} },
+{ 0x1b05,      16,     {0xe5, 0x56, 0x75, 0xf0, 0x08, 0xa4, 0x24, 0x01, 0xf5, 0x82, 0xe4, 0x34, 0x20, 0xf5, 0x83, 0xe0} },
+{ 0x1b15,      16,     {0x54, 0x03, 0x70, 0x24, 0x85, 0x55, 0x82, 0x85, 0x54, 0x83, 0xa3, 0xe0, 0x30, 0xe0, 0x07, 0xaf} },
+{ 0x1b25,      16,     {0x56, 0x7d, 0x02, 0x12, 0x83, 0x2d, 0x85, 0x55, 0x82, 0x85, 0x54, 0x83, 0xa3, 0xe0, 0x30, 0xe1} },
+{ 0x1b35,      10,     {0x07, 0xaf, 0x56, 0x7d, 0x04, 0x12, 0x83, 0x2d, 0x7f, 0x00} },
+{ 0x1b3f,      1,      {0x22} },
+{ 0x8000,      16,     {0x7b, 0xff, 0x7a, 0x12, 0x79, 0x1b, 0x90, 0x00, 0x04, 0x12, 0x9f, 0x61, 0xfd, 0x8b, 0x4d, 0x75} },
+{ 0x8010,      16,     {0x4e, 0x12, 0x75, 0x4f, 0x24, 0xe4, 0x90, 0x7f, 0xe1, 0xf0, 0x90, 0x7f, 0xe0, 0xf0, 0xf5, 0x4b} },
+{ 0x8020,      16,     {0xf5, 0x4c, 0x90, 0x02, 0xae, 0xf0, 0x90, 0x7f, 0xdf, 0xf0, 0x90, 0x7f, 0xde, 0xf0, 0x90, 0x7f} },
+{ 0x8030,      16,     {0xa9, 0x74, 0xff, 0xf0, 0x90, 0x7f, 0xaa, 0xf0, 0xe4, 0xfc, 0xec, 0x25, 0xe0, 0x24, 0xb4, 0xf5} },
+{ 0x8040,      16,     {0x82, 0xe4, 0x34, 0x7f, 0xf5, 0x83, 0xe4, 0xf0, 0x0c, 0xbc, 0x10, 0xee, 0xe4, 0x90, 0x7f, 0xdd} },
+{ 0x8050,      16,     {0xf0, 0xaf, 0x05, 0x1d, 0xef, 0x70, 0x03, 0x02, 0x81, 0xc6, 0xab, 0x4d, 0xaa, 0x4e, 0xa9, 0x4f} },
+{ 0x8060,      16,     {0x90, 0x00, 0x01, 0x12, 0x9f, 0x61, 0x64, 0x05, 0x60, 0x03, 0x02, 0x81, 0xb5, 0x90, 0x00, 0x03} },
+{ 0x8070,      16,     {0x12, 0x9f, 0x61, 0x64, 0x01, 0x60, 0x03, 0x02, 0x81, 0x3c, 0x90, 0x00, 0x02, 0x12, 0x9f, 0x61} },
+{ 0x8080,      16,     {0xff, 0x54, 0x7f, 0xfc, 0xd3, 0x94, 0x07, 0x50, 0x03, 0x02, 0x81, 0x16, 0xec, 0xc3, 0x94, 0x10} },
+{ 0x8090,      16,     {0x40, 0x03, 0x02, 0x81, 0x16, 0xef, 0x30, 0xe7, 0x42, 0xe5, 0x4c, 0xae, 0x4b, 0x78, 0x02, 0xce} },
+{ 0x80a0,      16,     {0xc3, 0x13, 0xce, 0x13, 0xd8, 0xf9, 0xff, 0x74, 0xf0, 0x2c, 0xf5, 0x82, 0xe4, 0x34, 0x7f, 0xf5} },
+{ 0x80b0,      16,     {0x83, 0xef, 0xf0, 0x90, 0x7f, 0xe0, 0xe0, 0xff, 0xec, 0x24, 0xf8, 0xfe, 0x74, 0x01, 0xa8, 0x06} },
+{ 0x80c0,      16,     {0x08, 0x80, 0x02, 0xc3, 0x33, 0xd8, 0xfc, 0x4f, 0x90, 0x7f, 0xe0, 0xf0, 0x90, 0x02, 0xae, 0xe0} },
+{ 0x80d0,      16,     {0x04, 0xf0, 0x90, 0x7f, 0xdd, 0xe0, 0x44, 0x80, 0xf0, 0x80, 0x3e, 0xe5, 0x4c, 0xae, 0x4b, 0x78} },
+{ 0x80e0,      16,     {0x02, 0xce, 0xc3, 0x13, 0xce, 0x13, 0xd8, 0xf9, 0xff, 0x74, 0xe8, 0x2c, 0xf5, 0x82, 0xe4, 0x34} },
+{ 0x80f0,      16,     {0x7f, 0xf5, 0x83, 0xef, 0xf0, 0x90, 0x7f, 0xe1, 0xe0, 0xff, 0xec, 0x24, 0xf8, 0xfe, 0x74, 0x01} },
+{ 0x8100,      16,     {0xa8, 0x06, 0x08, 0x80, 0x02, 0xc3, 0x33, 0xd8, 0xfc, 0x4f, 0x90, 0x7f, 0xe1, 0xf0, 0x90, 0x02} },
+{ 0x8110,      16,     {0xae, 0xe0, 0x04, 0xf0, 0x80, 0x03, 0x7f, 0xff, 0x22, 0x90, 0x00, 0x04, 0x12, 0x9f, 0x61, 0x25} },
+{ 0x8120,      16,     {0x4c, 0xf5, 0x4c, 0xe4, 0x35, 0x4b, 0xf5, 0x4b, 0x90, 0x00, 0x05, 0x12, 0x9f, 0x61, 0xfe, 0xe4} },
+{ 0x8130,      16,     {0x25, 0x4c, 0xf5, 0x4c, 0xee, 0x35, 0x4b, 0xf5, 0x4b, 0x02, 0x81, 0xb8, 0xab, 0x4d, 0xaa, 0x4e} },
+{ 0x8140,      16,     {0xa9, 0x4f, 0x90, 0x00, 0x03, 0x12, 0x9f, 0x61, 0xff, 0x64, 0x02, 0x60, 0x05, 0xef, 0x64, 0x03} },
+{ 0x8150,      16,     {0x70, 0x60, 0x90, 0x00, 0x02, 0x12, 0x9f, 0x61, 0xff, 0x54, 0x7f, 0xfc, 0xd3, 0x94, 0x07, 0x50} },
+{ 0x8160,      16,     {0x4e, 0xef, 0x30, 0xe7, 0x1e, 0x90, 0x7f, 0xde, 0xe0, 0xff, 0x74, 0x01, 0xa8, 0x04, 0x08, 0x80} },
+{ 0x8170,      16,     {0x02, 0xc3, 0x33, 0xd8, 0xfc, 0xfe, 0x4f, 0x90, 0x7f, 0xde, 0xf0, 0x90, 0x7f, 0xac, 0xe0, 0x4e} },
+{ 0x8180,      16,     {0xf0, 0x80, 0x35, 0x90, 0x7f, 0xdf, 0xe0, 0xff, 0x74, 0x01, 0xa8, 0x04, 0x08, 0x80, 0x02, 0xc3} },
+{ 0x8190,      16,     {0x33, 0xd8, 0xfc, 0xfe, 0x4f, 0x90, 0x7f, 0xdf, 0xf0, 0x90, 0x7f, 0xad, 0xe0, 0x4e, 0xf0, 0xec} },
+{ 0x81a0,      16,     {0x25, 0xe0, 0x24, 0xc5, 0xf5, 0x82, 0xe4, 0x34, 0x7f, 0xf5, 0x83, 0xec, 0xf0, 0x80, 0x09, 0x7f} },
+{ 0x81b0,      16,     {0xff, 0x22, 0x7f, 0xff, 0x22, 0x7f, 0xff, 0x22, 0x74, 0x07, 0x25, 0x4f, 0xf5, 0x4f, 0xe4, 0x35} },
+{ 0x81c0,      16,     {0x4e, 0xf5, 0x4e, 0x02, 0x80, 0x51, 0x20, 0x03, 0x0d, 0x90, 0x02, 0xae, 0xe0, 0x60, 0x07, 0x90} },
+{ 0x81d0,      8,      {0x7f, 0xae, 0xe0, 0x44, 0x02, 0xf0, 0x7f, 0x00} },
+{ 0x81d8,      1,      {0x22} },
+{ 0x81d9,      2,      {0xac, 0x07} },
+{ 0x81db,      16,     {0x90, 0x7f, 0xa5, 0xe0, 0x44, 0x80, 0xf0, 0xec, 0x25, 0xe0, 0x44, 0x41, 0x90, 0x7f, 0xa6, 0xf0} },
+{ 0x81eb,      16,     {0x7b, 0x3c, 0xaf, 0x03, 0x1b, 0xef, 0x70, 0x16, 0x90, 0x7f, 0xa5, 0xe0, 0x44, 0x40, 0xf0, 0x90} },
+{ 0x81fb,      16,     {0x7f, 0xa6, 0xe0, 0xfd, 0x7d, 0x32, 0xaf, 0x05, 0x1d, 0xef, 0x60, 0xd4, 0x80, 0xf8, 0x90, 0x7f} },
+{ 0x820b,      16,     {0xa5, 0xe0, 0xfd, 0x30, 0xe0, 0xdc, 0x20, 0xe1, 0x09, 0xe0, 0x44, 0x40, 0xf0, 0x7e, 0xff, 0x7f} },
+{ 0x821b,      16,     {0xf9, 0x22, 0xed, 0x30, 0xe2, 0x0c, 0x90, 0x7f, 0xa5, 0xe0, 0x44, 0x40, 0xf0, 0x7e, 0xff, 0x7f} },
+{ 0x822b,      16,     {0xfa, 0x22, 0x90, 0x7f, 0xa5, 0xe0, 0x44, 0x20, 0xf0, 0x90, 0x7f, 0xa6, 0xe0, 0xfd, 0x7b, 0x1e} },
+{ 0x823b,      16,     {0xaf, 0x03, 0x1b, 0xef, 0x70, 0x16, 0x90, 0x7f, 0xa5, 0xe0, 0x44, 0x40, 0xf0, 0x90, 0x7f, 0xa6} },
+{ 0x824b,      16,     {0xe0, 0xfd, 0x7d, 0x32, 0xaf, 0x05, 0x1d, 0xef, 0x60, 0x86, 0x80, 0xf8, 0x90, 0x7f, 0xa5, 0xe0} },
+{ 0x825b,      16,     {0xfd, 0x20, 0xe0, 0xdc, 0x7b, 0x3c, 0xaf, 0x03, 0x1b, 0xef, 0x70, 0x19, 0x90, 0x7f, 0xa5, 0xe0} },
+{ 0x826b,      16,     {0x44, 0x40, 0xf0, 0x90, 0x7f, 0xa6, 0xe0, 0xfd, 0x7d, 0x32, 0xaf, 0x05, 0x1d, 0xef, 0x70, 0x03} },
+{ 0x827b,      16,     {0x02, 0x81, 0xdb, 0x80, 0xf5, 0x90, 0x7f, 0xa5, 0xe0, 0xfd, 0x30, 0xe0, 0xd9, 0x30, 0xe2, 0x09} },
+{ 0x828b,      16,     {0xe0, 0x44, 0x40, 0xf0, 0x7e, 0xff, 0x7f, 0xfa, 0x22, 0xc2, 0xaf, 0x90, 0x7f, 0xa5, 0xe0, 0x44} },
+{ 0x829b,      12,     {0x40, 0xf0, 0x90, 0x7f, 0xa6, 0xe0, 0xfd, 0xd2, 0xaf, 0xff, 0x7e, 0x00} },
+{ 0x82a7,      1,      {0x22} },
+{ 0x82a8,      16,     {0xef, 0x75, 0xf0, 0x08, 0xa4, 0x24, 0x00, 0xf5, 0x82, 0xe4, 0x34, 0x20, 0xab, 0x82, 0xfa, 0xf5} },
+{ 0x82b8,      16,     {0x83, 0xa3, 0xe4, 0xf0, 0x8b, 0x82, 0x8a, 0x83, 0xa3, 0xa3, 0xa3, 0xe0, 0xf5, 0x5e, 0x74, 0xbf} },
+{ 0x82c8,      16,     {0xf0, 0x8b, 0x82, 0x8a, 0x83, 0xa3, 0xa3, 0xe0, 0x44, 0x10, 0xf0, 0x8b, 0x82, 0x8a, 0x83, 0xa3} },
+{ 0x82d8,      16,     {0xa3, 0xa3, 0xe4, 0xf0, 0x8b, 0x82, 0x8a, 0x83, 0xa3, 0xf0, 0xf9, 0xed, 0x60, 0x1d, 0x74, 0x01} },
+{ 0x82e8,      16,     {0x7e, 0x00, 0xa8, 0x07, 0x08, 0x80, 0x05, 0xc3, 0x33, 0xce, 0x33, 0xce, 0xd8, 0xf9, 0xff, 0xe4} },
+{ 0x82f8,      16,     {0xef, 0x55, 0x3b, 0x60, 0x04, 0x79, 0x09, 0x80, 0x02, 0x79, 0x0d, 0x8b, 0x82, 0x8a, 0x83, 0xa3} },
+{ 0x8308,      16,     {0xa3, 0xa3, 0x74, 0xbf, 0xf0, 0x8b, 0x82, 0x8a, 0x83, 0xa3, 0xa3, 0xe0, 0x54, 0xef, 0xf0, 0x8b} },
+{ 0x8318,      16,     {0x82, 0x8a, 0x83, 0xa3, 0xa3, 0xa3, 0xe5, 0x5e, 0xf0, 0xae, 0x02, 0xaf, 0x03, 0x8f, 0x82, 0x8e} },
+{ 0x8328,      4,      {0x83, 0xa3, 0xe9, 0xf0} },
+{ 0x832c,      1,      {0x22} },
+{ 0x832d,      4,      {0x8f, 0x5e, 0x8d, 0x5f} },
+{ 0x8331,      16,     {0xe4, 0xf5, 0x60, 0x74, 0x3c, 0x2f, 0xf8, 0x76, 0x08, 0xe5, 0x5e, 0x75, 0xf0, 0x0d, 0xa4, 0x24} },
+{ 0x8341,      16,     {0x02, 0xf5, 0x82, 0xe4, 0x34, 0x03, 0xf5, 0x83, 0xe0, 0xfc, 0xa3, 0xe0, 0xfd, 0xa3, 0xe0, 0xfe} },
+{ 0x8351,      16,     {0xa3, 0xe0, 0xff, 0x7b, 0x80, 0x7a, 0x25, 0x79, 0x00, 0x78, 0x00, 0xc3, 0x12, 0xa0, 0xc0, 0x50} },
+{ 0x8361,      16,     {0x3c, 0xe5, 0x5e, 0x75, 0xf0, 0x0d, 0xa4, 0x24, 0x02, 0xf5, 0x82, 0xe4, 0x34, 0x03, 0xf5, 0x83} },
+{ 0x8371,      16,     {0xe0, 0xfc, 0xa3, 0xe0, 0xfd, 0xa3, 0xe0, 0xfe, 0xa3, 0xe0, 0xff, 0x7b, 0x00, 0x7a, 0x96, 0x78} },
+{ 0x8381,      16,     {0x00, 0xc3, 0x12, 0xa0, 0xc0, 0x40, 0x0c, 0x75, 0x60, 0x40, 0x74, 0x3c, 0x25, 0x5e, 0xf8, 0x76} },
+{ 0x8391,      16,     {0x10, 0x80, 0x0a, 0x75, 0x60, 0x80, 0x74, 0x3c, 0x25, 0x5e, 0xf8, 0x76, 0x38, 0xe5, 0x60, 0x45} },
+{ 0x83a1,      16,     {0x5f, 0x44, 0x01, 0xff, 0xe5, 0x5e, 0x75, 0xf0, 0x08, 0xa4, 0x24, 0x02, 0xf5, 0x82, 0xe4, 0x34} },
+{ 0x83b1,      5,      {0x20, 0xf5, 0x83, 0xef, 0xf0} },
+{ 0x83b6,      1,      {0x22} },
+{ 0x83b7,      16,     {0x8f, 0x82, 0x8e, 0x83, 0xe0, 0x14, 0xf5, 0x54, 0xc3, 0x94, 0x04, 0x40, 0x03, 0x7f, 0xff, 0x22} },
+{ 0x83c7,      16,     {0xe5, 0x54, 0x75, 0xf0, 0x08, 0xa4, 0x24, 0x00, 0xf5, 0x82, 0xe4, 0x34, 0x20, 0xaf, 0x82, 0xf5} },
+{ 0x83d7,      16,     {0x55, 0x8f, 0x56, 0xe5, 0x54, 0x25, 0xe0, 0x24, 0xc6, 0xf5, 0x82, 0xe4, 0x34, 0x7f, 0xf5, 0x83} },
+{ 0x83e7,      16,     {0xe0, 0x20, 0xe1, 0x0f, 0xe5, 0x54, 0x25, 0xe0, 0x24, 0xc7, 0xf5, 0x82, 0xe4, 0x34, 0x7f, 0xf5} },
+{ 0x83f7,      16,     {0x83, 0xe4, 0xf0, 0x74, 0x22, 0x25, 0x54, 0xf8, 0xe4, 0xf6, 0xe5, 0x56, 0x24, 0x04, 0xf5, 0x82} },
+{ 0x8407,      16,     {0xe4, 0x35, 0x55, 0xf5, 0x83, 0xe0, 0x44, 0x03, 0xf0, 0xaf, 0x54, 0x7d, 0x06, 0x12, 0x83, 0x2d} },
+{ 0x8417,      16,     {0xaf, 0x54, 0x7d, 0x01, 0x12, 0x82, 0xa8, 0x85, 0x56, 0x82, 0x85, 0x55, 0x83, 0xa3, 0xa3, 0xe0} },
+{ 0x8427,      16,     {0x20, 0xe0, 0x22, 0xe0, 0xff, 0xe5, 0x56, 0x24, 0x05, 0xf5, 0x82, 0xe4, 0x35, 0x55, 0xf5, 0x83} },
+{ 0x8437,      16,     {0xe0, 0xe5, 0x56, 0x24, 0x06, 0xf5, 0x82, 0xe4, 0x35, 0x55, 0xf5, 0x83, 0xe0, 0xff, 0xaf, 0x54} },
+{ 0x8447,      16,     {0x7d, 0x06, 0x12, 0x83, 0x2d, 0x74, 0xf8, 0x25, 0x54, 0xf5, 0x82, 0xe4, 0x34, 0x02, 0xf5, 0x83} },
+{ 0x8457,      16,     {0xe4, 0xf0, 0xe5, 0x54, 0x25, 0xe0, 0xff, 0xc3, 0x74, 0x0c, 0x9f, 0x75, 0xf0, 0x40, 0xa4, 0x24} },
+{ 0x8467,      16,     {0x40, 0xf5, 0x82, 0xe5, 0xf0, 0x34, 0x7b, 0xaf, 0x82, 0xfe, 0xe5, 0x54, 0x25, 0xe0, 0x24, 0xef} },
+{ 0x8477,      16,     {0xf5, 0x82, 0xe4, 0x34, 0x02, 0xf5, 0x83, 0xee, 0xf0, 0xa3, 0xef, 0xf0, 0xaf, 0x54, 0x74, 0x01} },
+{ 0x8487,      13,     {0xa8, 0x07, 0x08, 0x80, 0x02, 0xc3, 0x33, 0xd8, 0xfc, 0x42, 0x30, 0x7f, 0x00} },
+{ 0x8494,      1,      {0x22} },
+{ 0x8495,      16,     {0x8f, 0x82, 0x8e, 0x83, 0xe0, 0x14, 0xf5, 0x54, 0xc3, 0x94, 0x04, 0x40, 0x03, 0x7f, 0xff, 0x22} },
+{ 0x84a5,      16,     {0xaf, 0x54, 0xe4, 0xfd, 0x12, 0x82, 0xa8, 0x74, 0xf8, 0x25, 0x54, 0xf5, 0x82, 0xe4, 0x34, 0x02} },
+{ 0x84b5,      16,     {0xf5, 0x83, 0xe4, 0xf0, 0xe5, 0x54, 0x75, 0xf0, 0x08, 0xa4, 0x24, 0x00, 0xf5, 0x82, 0xe4, 0x34} },
+{ 0x84c5,      16,     {0x20, 0xaf, 0x82, 0xf5, 0x56, 0x8f, 0x57, 0xf5, 0x83, 0xe5, 0x82, 0x24, 0x04, 0xf5, 0x82, 0xe4} },
+{ 0x84d5,      16,     {0x35, 0x83, 0xf5, 0x83, 0xe0, 0x54, 0xfc, 0xf0, 0xaf, 0x54, 0x7d, 0x06, 0x12, 0x83, 0x2d, 0xe5} },
+{ 0x84e5,      16,     {0x57, 0x24, 0x05, 0xf5, 0x82, 0xe4, 0x35, 0x56, 0xf5, 0x83, 0xe0, 0x30, 0xe0, 0x09, 0x85, 0x57} },
+{ 0x84f5,      16,     {0x82, 0x85, 0x56, 0x83, 0xe0, 0xf5, 0x55, 0xaf, 0x54, 0x74, 0x01, 0xa8, 0x07, 0x08, 0x80, 0x02} },
+{ 0x8505,      16,     {0xc3, 0x33, 0xd8, 0xfc, 0xf4, 0x52, 0x30, 0xe5, 0x54, 0x25, 0xe0, 0x24, 0xc6, 0xf5, 0x82, 0xe4} },
+{ 0x8515,      16,     {0x34, 0x7f, 0xf5, 0x83, 0xe0, 0x20, 0xe1, 0x0f, 0xe5, 0x54, 0x25, 0xe0, 0x24, 0xc7, 0xf5, 0x82} },
+{ 0x8525,      9,      {0xe4, 0x34, 0x7f, 0xf5, 0x83, 0xe4, 0xf0, 0x7f, 0x00} },
+{ 0x852e,      1,      {0x22} },
+{ 0x852f,      16,     {0x8f, 0x82, 0x8e, 0x83, 0xc0, 0x83, 0xc0, 0x82, 0xe0, 0xfd, 0xa3, 0xa3, 0xa3, 0xe0, 0xfc, 0xed} },
+{ 0x853f,      16,     {0x6c, 0xd0, 0x82, 0xd0, 0x83, 0xf0, 0x8f, 0x82, 0x8e, 0x83, 0xa3, 0xa3, 0xa3, 0xc0, 0x83, 0xc0} },
+{ 0x854f,      16,     {0x82, 0xe0, 0xfd, 0x8f, 0x82, 0x8e, 0x83, 0xe0, 0xfc, 0xed, 0x6c, 0xd0, 0x82, 0xd0, 0x83, 0xf0} },
+{ 0x855f,      16,     {0x8f, 0x82, 0x8e, 0x83, 0xc0, 0x83, 0xc0, 0x82, 0xa3, 0xa3, 0xa3, 0xe0, 0xfd, 0xec, 0x6d, 0xd0} },
+{ 0x856f,      16,     {0x82, 0xd0, 0x83, 0xf0, 0x8f, 0x82, 0x8e, 0x83, 0xa3, 0xc0, 0x83, 0xc0, 0x82, 0xe0, 0xfd, 0x8f} },
+{ 0x857f,      16,     {0x82, 0x8e, 0x83, 0xa3, 0xa3, 0xe0, 0xfc, 0xed, 0x6c, 0xd0, 0x82, 0xd0, 0x83, 0xf0, 0x8f, 0x82} },
+{ 0x858f,      16,     {0x8e, 0x83, 0xa3, 0xa3, 0xc0, 0x83, 0xc0, 0x82, 0xe0, 0xfd, 0x8f, 0x82, 0x8e, 0x83, 0xa3, 0xe0} },
+{ 0x859f,      16,     {0xfc, 0xed, 0x6c, 0xd0, 0x82, 0xd0, 0x83, 0xf0, 0x8f, 0x82, 0x8e, 0x83, 0xa3, 0xc0, 0x83, 0xc0} },
+{ 0x85af,      16,     {0x82, 0xe0, 0xfd, 0x8f, 0x82, 0x8e, 0x83, 0xa3, 0xa3, 0xe0, 0xff, 0xed, 0x6f, 0xd0, 0x82, 0xd0} },
+{ 0x85bf,      3,      {0x83, 0xf0, 0x22} },
+{ 0x85c2,      4,      {0xad, 0x07, 0xac, 0x06} },
+{ 0x85c6,      16,     {0x79, 0x0d, 0x8d, 0x82, 0x8c, 0x83, 0xe0, 0x14, 0xfe, 0xc3, 0x94, 0x04, 0x40, 0x03, 0x7f, 0xff} },
+{ 0x85d6,      16,     {0x22, 0x8c, 0x54, 0x8d, 0x55, 0xee, 0x75, 0xf0, 0x0d, 0xa4, 0x24, 0x01, 0xf5, 0x82, 0xe4, 0x34} },
+{ 0x85e6,      16,     {0x03, 0xaf, 0x82, 0xfe, 0xad, 0x01, 0x19, 0xed, 0x60, 0x24, 0x0f, 0xef, 0xac, 0x06, 0x70, 0x01} },
+{ 0x85f6,      16,     {0x0e, 0x14, 0xf5, 0x82, 0x8c, 0x83, 0xe0, 0xfd, 0x05, 0x55, 0xe5, 0x55, 0xaa, 0x54, 0x70, 0x02} },
+{ 0x8606,      16,     {0x05, 0x54, 0x14, 0xf5, 0x82, 0x8a, 0x83, 0xe0, 0x6d, 0x60, 0xd9, 0x7f, 0x01, 0x22, 0x7f, 0x00} },
+{ 0x8616,      1,      {0x22} },
+{ 0x8617,      4,      {0x8e, 0x54, 0x8f, 0x55} },
+{ 0x861b,      16,     {0x8f, 0x82, 0x8e, 0x83, 0xe0, 0x14, 0xf5, 0x5b, 0xc3, 0x94, 0x04, 0x40, 0x03, 0x7f, 0xff, 0x22} },
+{ 0x862b,      16,     {0xe5, 0x5b, 0x75, 0xf0, 0x08, 0xa4, 0x24, 0x00, 0xf5, 0x82, 0xe4, 0x34, 0x20, 0xaf, 0x82, 0xf5} },
+{ 0x863b,      16,     {0x5c, 0x8f, 0x5d, 0x85, 0x55, 0x82, 0x85, 0x54, 0x83, 0xa3, 0xe0, 0xfc, 0xa3, 0xe0, 0xfd, 0xa3} },
+{ 0x864b,      16,     {0xe0, 0xfe, 0xa3, 0xe0, 0xff, 0x7b, 0x08, 0x7a, 0x00, 0x79, 0x00, 0x78, 0x00, 0xd3, 0x12, 0xa0} },
+{ 0x865b,      16,     {0xc0, 0x40, 0x10, 0x85, 0x55, 0x82, 0x85, 0x54, 0x83, 0xa3, 0x12, 0xa1, 0x07, 0x00, 0x00, 0x00} },
+{ 0x866b,      16,     {0x08, 0x80, 0x2e, 0x85, 0x55, 0x82, 0x85, 0x54, 0x83, 0xa3, 0xe0, 0xfc, 0xa3, 0xe0, 0xfd, 0xa3} },
+{ 0x867b,      16,     {0xe0, 0xfe, 0xa3, 0xe0, 0xff, 0x7b, 0x00, 0x7a, 0x08, 0x79, 0x07, 0x78, 0x00, 0xc3, 0x12, 0xa0} },
+{ 0x868b,      16,     {0xc0, 0x50, 0x0e, 0x85, 0x55, 0x82, 0x85, 0x54, 0x83, 0xa3, 0x12, 0xa1, 0x07, 0x00, 0x07, 0x08} },
+{ 0x869b,      16,     {0x00, 0x85, 0x55, 0x82, 0x85, 0x54, 0x83, 0xa3, 0xe0, 0xf8, 0xa3, 0xe0, 0xf9, 0xa3, 0xe0, 0xfa} },
+{ 0x86ab,      16,     {0xa3, 0xe0, 0xfb, 0x7f, 0x00, 0x7e, 0x50, 0x7d, 0x46, 0x7c, 0x00, 0x12, 0xa0, 0x2e, 0x8f, 0x59} },
+{ 0x86bb,      16,     {0x8e, 0x58, 0x8d, 0x57, 0x8c, 0x56, 0x7b, 0x0a, 0x7a, 0x00, 0x79, 0x00, 0x78, 0x00, 0x12, 0xa0} },
+{ 0x86cb,      16,     {0x2e, 0xaf, 0x03, 0x8f, 0x5a, 0xaf, 0x59, 0xae, 0x58, 0xad, 0x57, 0xac, 0x56, 0x7b, 0x0a, 0x7a} },
+{ 0x86db,      16,     {0x00, 0x79, 0x00, 0x78, 0x00, 0x12, 0xa0, 0x2e, 0x8f, 0x59, 0x8e, 0x58, 0x8d, 0x57, 0x8c, 0x56} },
+{ 0x86eb,      16,     {0xe5, 0x5a, 0xc3, 0x94, 0x05, 0x40, 0x15, 0xe5, 0x59, 0x24, 0x01, 0xf5, 0x59, 0xe4, 0x35, 0x58} },
+{ 0x86fb,      16,     {0xf5, 0x58, 0xe4, 0x35, 0x57, 0xf5, 0x57, 0xe4, 0x35, 0x56, 0xf5, 0x56, 0x85, 0x5d, 0x82, 0x85} },
+{ 0x870b,      16,     {0x5c, 0x83, 0xa3, 0xe4, 0xf0, 0x85, 0x5d, 0x82, 0x85, 0x5c, 0x83, 0xa3, 0xa3, 0xa3, 0xe0, 0x44} },
+{ 0x871b,      16,     {0x80, 0xf0, 0x85, 0x5d, 0x82, 0x85, 0x5c, 0x83, 0xe5, 0x59, 0xf0, 0xaf, 0x59, 0xae, 0x58, 0xad} },
+{ 0x872b,      16,     {0x57, 0xac, 0x56, 0x78, 0x08, 0x12, 0xa0, 0xd1, 0x85, 0x5d, 0x82, 0x85, 0x5c, 0x83, 0xa3, 0xef} },
+{ 0x873b,      16,     {0xf0, 0x85, 0x5d, 0x82, 0x85, 0x5c, 0x83, 0xa3, 0xa3, 0xa3, 0xe0, 0x54, 0x7f, 0xf0, 0xe4, 0xf5} },
+{ 0x874b,      16,     {0x5a, 0xe5, 0x55, 0x24, 0x08, 0xf5, 0x82, 0xe4, 0x35, 0x54, 0xf5, 0x83, 0xe0, 0xff, 0xb4, 0x62} },
+{ 0x875b,      16,     {0x05, 0x43, 0x5a, 0x0a, 0x80, 0x1a, 0xef, 0xb4, 0x72, 0x05, 0x43, 0x5a, 0x08, 0x80, 0x11, 0xef} },
+{ 0x876b,      16,     {0xb4, 0x74, 0x05, 0x43, 0x5a, 0x02, 0x80, 0x08, 0xef, 0x64, 0x6e, 0x60, 0x03, 0x7f, 0xff, 0x22} },
+{ 0x877b,      16,     {0xe5, 0x55, 0x24, 0x0b, 0xf5, 0x82, 0xe4, 0x35, 0x54, 0xf5, 0x83, 0xe0, 0xff, 0x30, 0xe3, 0x03} },
+{ 0x878b,      16,     {0x43, 0x5a, 0x80, 0xef, 0x30, 0xe7, 0x12, 0x43, 0x5a, 0x40, 0xe5, 0x5d, 0x24, 0x04, 0xf5, 0x82} },
+{ 0x879b,      16,     {0xe4, 0x35, 0x5c, 0xf5, 0x83, 0xe0, 0x44, 0x02, 0xf0, 0xe5, 0x55, 0x24, 0x0b, 0xf5, 0x82, 0xe4} },
+{ 0x87ab,      16,     {0x35, 0x54, 0xf5, 0x83, 0xe0, 0xff, 0x20, 0xe1, 0x03, 0x30, 0xe4, 0x23, 0xaf, 0x5b, 0x74, 0x01} },
+{ 0x87bb,      16,     {0xa8, 0x07, 0x08, 0x80, 0x02, 0xc3, 0x33, 0xd8, 0xfc, 0x42, 0x3b, 0xe5, 0x5d, 0x24, 0x04, 0xf5} },
+{ 0x87cb,      16,     {0x82, 0xe4, 0x35, 0x5c, 0xf5, 0x83, 0xe0, 0x44, 0x01, 0xf0, 0xe4, 0xf5, 0x5a, 0x80, 0x10, 0xaf} },
+{ 0x87db,      16,     {0x5b, 0x74, 0x01, 0xa8, 0x07, 0x08, 0x80, 0x02, 0xc3, 0x33, 0xd8, 0xfc, 0xf4, 0x52, 0x3b, 0x85} },
+{ 0x87eb,      16,     {0x5d, 0x82, 0x85, 0x5c, 0x83, 0xa3, 0xa3, 0xa3, 0x74, 0xbf, 0xf0, 0x85, 0x5d, 0x82, 0x85, 0x5c} },
+{ 0x87fb,      16,     {0x83, 0xa3, 0xa3, 0xe4, 0xf0, 0xe5, 0x5a, 0xf0, 0xe5, 0x55, 0x24, 0x0a, 0xf5, 0x82, 0xe4, 0x35} },
+{ 0x880b,      16,     {0x54, 0xf5, 0x83, 0xe0, 0xff, 0xe5, 0x5d, 0x24, 0x04, 0xf5, 0x82, 0xe4, 0x35, 0x5c, 0xf5, 0x83} },
+{ 0x881b,      16,     {0xef, 0xf0, 0xe5, 0x55, 0x24, 0x0a, 0xf5, 0x82, 0xe4, 0x35, 0x54, 0xf5, 0x83, 0xe0, 0xff, 0xe5} },
+{ 0x882b,      16,     {0x5d, 0x24, 0x05, 0xf5, 0x82, 0xe4, 0x35, 0x5c, 0xf5, 0x83, 0xef, 0xf0, 0xe5, 0x55, 0x24, 0x09} },
+{ 0x883b,      16,     {0xf5, 0x82, 0xe4, 0x35, 0x54, 0xf5, 0x83, 0xe0, 0xff, 0xe5, 0x5d, 0x24, 0x06, 0xf5, 0x82, 0xe4} },
+{ 0x884b,      16,     {0x35, 0x5c, 0xf5, 0x83, 0xef, 0xf0, 0xe5, 0x55, 0x24, 0x09, 0xf5, 0x82, 0xe4, 0x35, 0x54, 0xf5} },
+{ 0x885b,      16,     {0x83, 0xe0, 0xff, 0xe5, 0x5d, 0x24, 0x07, 0xf5, 0x82, 0xe4, 0x35, 0x5c, 0xf5, 0x83, 0xef, 0xf0} },
+{ 0x886b,      16,     {0x85, 0x5d, 0x82, 0x85, 0x5c, 0x83, 0xa3, 0xa3, 0xa3, 0xe4, 0xf0, 0x85, 0x5d, 0x82, 0x85, 0x5c} },
+{ 0x887b,      16,     {0x83, 0xa3, 0xa3, 0xf0, 0xaf, 0x5b, 0x7d, 0x06, 0x12, 0x83, 0x2d, 0x75, 0x5a, 0x08, 0xe5, 0x55} },
+{ 0x888b,      16,     {0x24, 0x0c, 0xf5, 0x82, 0xe4, 0x35, 0x54, 0xf5, 0x83, 0xe0, 0x60, 0x03, 0x43, 0x5a, 0x10, 0xe5} },
+{ 0x889b,      16,     {0x5d, 0x24, 0x04, 0xf5, 0x82, 0xe4, 0x35, 0x5c, 0xf5, 0x83, 0xe0, 0x54, 0x03, 0x45, 0x5a, 0xf0} },
+{ 0x88ab,      16,     {0xe5, 0x55, 0x24, 0x05, 0xf5, 0x82, 0xe4, 0x35, 0x54, 0xf5, 0x83, 0xe0, 0xfe, 0xc3, 0x94, 0x05} },
+{ 0x88bb,      16,     {0x40, 0x06, 0xee, 0xd3, 0x94, 0x08, 0x40, 0x03, 0x7f, 0xff, 0x22, 0xe5, 0x55, 0x24, 0x06, 0xf5} },
+{ 0x88cb,      16,     {0x82, 0xe4, 0x35, 0x54, 0xf5, 0x83, 0xe0, 0xfd, 0xc3, 0x94, 0x01, 0x40, 0x06, 0xed, 0xd3, 0x94} },
+{ 0x88db,      16,     {0x02, 0x40, 0x03, 0x7f, 0xff, 0x22, 0xed, 0x14, 0xff, 0x25, 0xe0, 0x25, 0xe0, 0xff, 0xee, 0x24} },
+{ 0x88eb,      16,     {0xfb, 0x4f, 0xf5, 0x5a, 0xe5, 0x55, 0x24, 0x07, 0xf5, 0x82, 0xe4, 0x35, 0x54, 0xf5, 0x83, 0xe0} },
+{ 0x88fb,      16,     {0x24, 0xd0, 0x60, 0x18, 0x14, 0x60, 0x1a, 0x24, 0xc3, 0x60, 0x1e, 0x14, 0x60, 0x09, 0x24, 0x0a} },
+{ 0x890b,      16,     {0x70, 0x14, 0x43, 0x5a, 0x18, 0x80, 0x12, 0x43, 0x5a, 0x08, 0x80, 0x0d, 0x43, 0x5a, 0x38, 0x80} },
+{ 0x891b,      16,     {0x08, 0x43, 0x5a, 0x28, 0x80, 0x03, 0x7f, 0xff, 0x22, 0x85, 0x5d, 0x82, 0x85, 0x5c, 0x83, 0xa3} },
+{ 0x892b,      16,     {0xa3, 0xa3, 0xe5, 0x5a, 0xf0, 0xaf, 0x5b, 0x7d, 0x01, 0x12, 0x82, 0xa8, 0xaa, 0x54, 0xa9, 0x55} },
+{ 0x893b,      16,     {0x7b, 0x01, 0xc0, 0x01, 0xe5, 0x5b, 0x75, 0xf0, 0x0d, 0xa4, 0x24, 0x01, 0xf9, 0x74, 0x03, 0x35} },
+{ 0x894b,      15,     {0xf0, 0xa8, 0x01, 0xfc, 0xd0, 0x01, 0x7e, 0x00, 0x7f, 0x0d, 0x12, 0x9f, 0x1f, 0x7f, 0x00} },
+{ 0x895a,      1,      {0x22} },
+{ 0x895b,      16,     {0x8f, 0x82, 0x8e, 0x83, 0xe0, 0x14, 0xfe, 0xc3, 0x94, 0x04, 0x40, 0x03, 0x7f, 0xff, 0x22, 0xee} },
+{ 0x896b,      16,     {0x75, 0xf0, 0x08, 0xa4, 0x24, 0x00, 0xf5, 0x82, 0xe4, 0x34, 0x20, 0xad, 0x82, 0xfc, 0x90, 0x01} },
+{ 0x897b,      16,     {0x2c, 0x74, 0x08, 0xf0, 0xee, 0x04, 0xa3, 0xf0, 0xe4, 0xa3, 0xf0, 0x8d, 0x82, 0x8c, 0x83, 0xe5} },
+{ 0x898b,      16,     {0x82, 0x24, 0x06, 0xf5, 0x82, 0xe4, 0x35, 0x83, 0xf5, 0x83, 0xe0, 0x90, 0x01, 0x2f, 0xf0, 0x8d} },
+{ 0x899b,      16,     {0x82, 0x8c, 0x83, 0xe5, 0x82, 0x24, 0x05, 0xf5, 0x82, 0xe4, 0x35, 0x83, 0xf5, 0x83, 0xe0, 0x54} },
+{ 0x89ab,      16,     {0x1e, 0x90, 0x01, 0x30, 0xf0, 0x74, 0x2c, 0x2e, 0xf8, 0xe6, 0xa3, 0xf0, 0xaf, 0x06, 0x74, 0x01} },
+{ 0x89bb,      16,     {0xa8, 0x07, 0x08, 0x80, 0x02, 0xc3, 0x33, 0xd8, 0xfc, 0xf5, 0x54, 0x7f, 0x02, 0x12, 0x81, 0xd9} },
+{ 0x89cb,      16,     {0xc3, 0xee, 0x64, 0x80, 0x94, 0x80, 0x40, 0xf3, 0xe5, 0x54, 0x5f, 0x90, 0x01, 0x32, 0xf0, 0x7e} },
+{ 0x89db,      10,     {0x01, 0x7f, 0x2c, 0x7d, 0x07, 0x12, 0x8e, 0xb4, 0x7f, 0x00} },
+{ 0x89e5,      1,      {0x22} },
+{ 0x89e6,      16,     {0x8f, 0x82, 0x8e, 0x83, 0xe0, 0x14, 0xfe, 0xc3, 0x94, 0x04, 0x40, 0x03, 0x7f, 0xff, 0x22, 0xee} },
+{ 0x89f6,      16,     {0x75, 0xf0, 0x08, 0xa4, 0x24, 0x00, 0xf5, 0x82, 0xe4, 0x34, 0x20, 0xaf, 0x82, 0xfe, 0x90, 0x01} },
+{ 0x8a06,      16,     {0x33, 0x74, 0x0a, 0xf0, 0x8f, 0x82, 0x8e, 0x83, 0xe5, 0x82, 0x24, 0x04, 0xf5, 0x82, 0xe4, 0x35} },
+{ 0x8a16,      16,     {0x83, 0xf5, 0x83, 0xe0, 0x90, 0x01, 0x34, 0xf0, 0x7e, 0x01, 0x7f, 0x33, 0x7d, 0x02, 0x12, 0x8e} },
+{ 0x8a26,      3,      {0xb4, 0x7f, 0x00} },
+{ 0x8a29,      1,      {0x22} },
+{ 0x8a2a,      4,      {0xad, 0x07, 0xac, 0x06} },
+{ 0x8a2e,      16,     {0x8d, 0x82, 0x8c, 0x83, 0xe0, 0x14, 0xfe, 0xc3, 0x94, 0x04, 0x40, 0x03, 0x7f, 0xff, 0x22, 0xee} },
+{ 0x8a3e,      16,     {0x75, 0xf0, 0x08, 0xa4, 0x24, 0x00, 0xf5, 0x82, 0xe4, 0x34, 0x20, 0xaf, 0x82, 0xfe, 0x8d, 0x82} },
+{ 0x8a4e,      16,     {0x8c, 0x83, 0xa3, 0xe0, 0x60, 0x0f, 0xef, 0x24, 0x04, 0xf5, 0x82, 0xe4, 0x3e, 0xf5, 0x83, 0xe0} },
+{ 0x8a5e,      16,     {0x44, 0x02, 0xf0, 0x80, 0x0d, 0xef, 0x24, 0x04, 0xf5, 0x82, 0xe4, 0x3e, 0xf5, 0x83, 0xe0, 0x54} },
+{ 0x8a6e,      4,      {0xfd, 0xf0, 0x7f, 0x00} },
+{ 0x8a72,      1,      {0x22} },
+{ 0x8a73,      4,      {0xad, 0x07, 0xac, 0x06} },
+{ 0x8a77,      16,     {0x8d, 0x82, 0x8c, 0x83, 0xe0, 0x14, 0xfe, 0xc3, 0x94, 0x04, 0x40, 0x03, 0x7f, 0xff, 0x22, 0xee} },
+{ 0x8a87,      16,     {0x75, 0xf0, 0x08, 0xa4, 0x24, 0x00, 0xf5, 0x82, 0xe4, 0x34, 0x20, 0xaf, 0x82, 0xfe, 0x8d, 0x82} },
+{ 0x8a97,      16,     {0x8c, 0x83, 0xa3, 0xe0, 0x60, 0x0f, 0xef, 0x24, 0x04, 0xf5, 0x82, 0xe4, 0x3e, 0xf5, 0x83, 0xe0} },
+{ 0x8aa7,      16,     {0x44, 0x01, 0xf0, 0x80, 0x0d, 0xef, 0x24, 0x04, 0xf5, 0x82, 0xe4, 0x3e, 0xf5, 0x83, 0xe0, 0x54} },
+{ 0x8ab7,      4,      {0xfe, 0xf0, 0x7f, 0x00} },
+{ 0x8abb,      1,      {0x22} },
+{ 0x8abc,      4,      {0xad, 0x07, 0xac, 0x06} },
+{ 0x8ac0,      16,     {0x8d, 0x82, 0x8c, 0x83, 0xe0, 0x14, 0xfe, 0xc3, 0x94, 0x04, 0x40, 0x03, 0x7f, 0xff, 0x22, 0xee} },
+{ 0x8ad0,      16,     {0x75, 0xf0, 0x08, 0xa4, 0x24, 0x00, 0xf5, 0x82, 0xe4, 0x34, 0x20, 0xaf, 0x82, 0xfe, 0x8d, 0x82} },
+{ 0x8ae0,      16,     {0x8c, 0x83, 0xa3, 0xe0, 0x60, 0x0d, 0x8f, 0x82, 0x8e, 0x83, 0xa3, 0xa3, 0xa3, 0xe0, 0x44, 0x40} },
+{ 0x8af0,      16,     {0xf0, 0x80, 0x0b, 0x8f, 0x82, 0x8e, 0x83, 0xa3, 0xa3, 0xa3, 0xe0, 0x54, 0xbf, 0xf0, 0x7f, 0x00} },
+{ 0x8b00,      1,      {0x22} },
+{ 0x8b01,      16,     {0x8f, 0x82, 0x8e, 0x83, 0xe0, 0x14, 0xfe, 0xc3, 0x94, 0x04, 0x40, 0x03, 0x7f, 0xff, 0x22, 0xaf} },
+{ 0x8b11,      16,     {0x06, 0x74, 0x01, 0xa8, 0x07, 0x08, 0x80, 0x02, 0xc3, 0x33, 0xd8, 0xfc, 0x42, 0x3a, 0x7f, 0x00} },
+{ 0x8b21,      1,      {0x22} },
+{ 0x8b22,      4,      {0x8e, 0x54, 0x8f, 0x55} },
+{ 0x8b26,      16,     {0x8f, 0x82, 0x8e, 0x83, 0xa3, 0xe0, 0xf5, 0x59, 0x8f, 0x82, 0x8e, 0x83, 0xe0, 0xf5, 0x56, 0xc3} },
+{ 0x8b36,      16,     {0x94, 0x04, 0x40, 0x03, 0x7f, 0xff, 0x22, 0xe5, 0x56, 0x24, 0xfe, 0x60, 0x16, 0x14, 0x60, 0x1f} },
+{ 0x8b46,      16,     {0x14, 0x60, 0x28, 0x24, 0x03, 0x70, 0x2e, 0x7e, 0x7e, 0x7f, 0x80, 0x75, 0x57, 0x7e, 0x75, 0x58} },
+{ 0x8b56,      16,     {0x80, 0x80, 0x22, 0x7e, 0x7e, 0x7f, 0x00, 0x75, 0x57, 0x7e, 0x75, 0x58, 0x00, 0x80, 0x16, 0x7e} },
+{ 0x8b66,      16,     {0x7d, 0x7f, 0x80, 0x75, 0x57, 0x7d, 0x75, 0x58, 0x80, 0x80, 0x0a, 0x7e, 0x7d, 0x7f, 0x00, 0x75} },
+{ 0x8b76,      16,     {0x57, 0x7d, 0x75, 0x58, 0x00, 0xe5, 0x59, 0x70, 0x1b, 0x85, 0x58, 0x82, 0x85, 0x57, 0x83, 0x74} },
+{ 0x8b86,      16,     {0xff, 0xf0, 0xe5, 0x56, 0x25, 0xe0, 0x24, 0xb5, 0xf5, 0x82, 0xe4, 0x34, 0x7f, 0xf5, 0x83, 0x74} },
+{ 0x8b96,      16,     {0x01, 0xf0, 0x80, 0x48, 0xe5, 0x55, 0x24, 0x02, 0xff, 0xe4, 0x35, 0x54, 0xfe, 0xe5, 0x59, 0x60} },
+{ 0x8ba6,      16,     {0x23, 0x0f, 0xef, 0xac, 0x06, 0x70, 0x01, 0x0e, 0x14, 0xf5, 0x82, 0x8c, 0x83, 0xe0, 0xfd, 0x05} },
+{ 0x8bb6,      16,     {0x58, 0xe5, 0x58, 0xaa, 0x57, 0x70, 0x02, 0x05, 0x57, 0x14, 0xf5, 0x82, 0x8a, 0x83, 0xed, 0xf0} },
+{ 0x8bc6,      16,     {0x15, 0x59, 0x80, 0xd9, 0x85, 0x55, 0x82, 0x85, 0x54, 0x83, 0xa3, 0xe0, 0xff, 0xe5, 0x56, 0x25} },
+{ 0x8bd6,      14,     {0xe0, 0x24, 0xb5, 0xf5, 0x82, 0xe4, 0x34, 0x7f, 0xf5, 0x83, 0xef, 0xf0, 0x7f, 0x00} },
+{ 0x8be4,      1,      {0x22} },
+{ 0x8be5,      16,     {0xef, 0x24, 0x05, 0xf5, 0x55, 0xe4, 0x3e, 0xf5, 0x54, 0x90, 0x01, 0x35, 0x74, 0x07, 0xf0, 0x90} },
+{ 0x8bf5,      16,     {0x01, 0x7a, 0x74, 0x01, 0xf0, 0xa3, 0x74, 0x36, 0xf0, 0x85, 0x55, 0x82, 0x85, 0x54, 0x83, 0xa3} },
+{ 0x8c05,      16,     {0xa3, 0xa3, 0xe0, 0xfe, 0xa3, 0xe0, 0x8e, 0x56, 0xf5, 0x57, 0x85, 0x55, 0x82, 0x85, 0x54, 0x83} },
+{ 0x8c15,      16,     {0xe0, 0x24, 0x9e, 0x60, 0x61, 0x24, 0xf9, 0x60, 0x0e, 0x24, 0xf1, 0x70, 0x03, 0x02, 0x8c, 0xc6} },
+{ 0x8c25,      16,     {0x24, 0x14, 0x60, 0x03, 0x02, 0x8d, 0x12, 0x85, 0x55, 0x82, 0x85, 0x54, 0x83, 0xa3, 0xe0, 0xfe} },
+{ 0x8c35,      16,     {0xa3, 0xe0, 0xff, 0xc3, 0xe4, 0x9f, 0xf5, 0x59, 0x74, 0x01, 0x9e, 0xf5, 0x58, 0xd3, 0xe5, 0x59} },
+{ 0x8c45,      16,     {0x94, 0x40, 0xe5, 0x58, 0x94, 0x00, 0x40, 0x06, 0x75, 0x58, 0x00, 0x75, 0x59, 0x40, 0xd3, 0xe5} },
+{ 0x8c55,      16,     {0x57, 0x95, 0x59, 0xe5, 0x56, 0x95, 0x58, 0x50, 0x03, 0x02, 0x8d, 0x15, 0xae, 0x58, 0xaf, 0x59} },
+{ 0x8c65,      16,     {0x85, 0x55, 0x82, 0x85, 0x54, 0x83, 0xa3, 0xa3, 0xa3, 0xee, 0xf0, 0xfe, 0xa3, 0xef, 0xf0, 0x8e} },
+{ 0x8c75,      16,     {0x56, 0xf5, 0x57, 0x02, 0x8d, 0x15, 0x85, 0x55, 0x82, 0x85, 0x54, 0x83, 0xa3, 0xe0, 0xfe, 0xa3} },
+{ 0x8c85,      16,     {0xe0, 0xff, 0xc3, 0x74, 0x30, 0x9f, 0xf5, 0x59, 0xe4, 0x9e, 0xf5, 0x58, 0xd3, 0xe5, 0x59, 0x94} },
+{ 0x8c95,      16,     {0x10, 0xe5, 0x58, 0x94, 0x00, 0x40, 0x06, 0x75, 0x58, 0x00, 0x75, 0x59, 0x10, 0xd3, 0xe5, 0x57} },
+{ 0x8ca5,      16,     {0x95, 0x59, 0xe5, 0x56, 0x95, 0x58, 0x40, 0x68, 0xae, 0x58, 0xaf, 0x59, 0x85, 0x55, 0x82, 0x85} },
+{ 0x8cb5,      16,     {0x54, 0x83, 0xa3, 0xa3, 0xa3, 0xee, 0xf0, 0xfe, 0xa3, 0xef, 0xf0, 0x8e, 0x56, 0xf5, 0x57, 0x80} },
+{ 0x8cc5,      16,     {0x4f, 0x85, 0x55, 0x82, 0x85, 0x54, 0x83, 0xa3, 0xe0, 0xfe, 0xa3, 0xe0, 0xff, 0xc3, 0xe4, 0x9f} },
+{ 0x8cd5,      16,     {0xf5, 0x59, 0xe4, 0x9e, 0xf5, 0x58, 0x45, 0x59, 0x60, 0x0b, 0xd3, 0xe5, 0x59, 0x94, 0x40, 0xe5} },
+{ 0x8ce5,      16,     {0x58, 0x94, 0x00, 0x40, 0x06, 0x75, 0x58, 0x00, 0x75, 0x59, 0x40, 0xd3, 0xe5, 0x57, 0x95, 0x59} },
+{ 0x8cf5,      16,     {0xe5, 0x56, 0x95, 0x58, 0x40, 0x17, 0xae, 0x58, 0xaf, 0x59, 0x85, 0x55, 0x82, 0x85, 0x54, 0x83} },
+{ 0x8d05,      16,     {0xa3, 0xa3, 0xa3, 0xee, 0xf0, 0xfe, 0xa3, 0xef, 0xf0, 0x8e, 0x56, 0xf5, 0x57, 0x7f, 0x01, 0x22} },
+{ 0x8d15,      16,     {0x85, 0x55, 0x82, 0x85, 0x54, 0x83, 0xe0, 0x24, 0x9e, 0x70, 0x03, 0x02, 0x8d, 0xd5, 0x24, 0xf9} },
+{ 0x8d25,      16,     {0x60, 0x58, 0x24, 0xf1, 0x70, 0x03, 0x02, 0x8e, 0x25, 0x24, 0x14, 0x60, 0x03, 0x02, 0x8e, 0x69} },
+{ 0x8d35,      16,     {0x85, 0x55, 0x82, 0x85, 0x54, 0x83, 0xa3, 0xe0, 0xfe, 0xa3, 0xe0, 0xff, 0xd3, 0x94, 0xff, 0xee} },
+{ 0x8d45,      16,     {0x94, 0x00, 0x40, 0x03, 0x02, 0x8e, 0x69, 0x90, 0x01, 0x75, 0xef, 0xf0, 0xe5, 0x57, 0x15, 0x57} },
+{ 0x8d55,      16,     {0xae, 0x56, 0x70, 0x02, 0x15, 0x56, 0x4e, 0x70, 0x03, 0x02, 0x8e, 0x69, 0x90, 0x01, 0x75, 0xe0} },
+{ 0x8d65,      16,     {0xff, 0x04, 0xf0, 0xa8, 0x07, 0xe6, 0xff, 0x90, 0x01, 0x7a, 0xe4, 0x75, 0xf0, 0x01, 0x12, 0x9f} },
+{ 0x8d75,      16,     {0xa4, 0x85, 0xf0, 0x82, 0xf5, 0x83, 0xef, 0xf0, 0x80, 0xd2, 0x85, 0x55, 0x82, 0x85, 0x54, 0x83} },
+{ 0x8d85,      16,     {0xa3, 0xe0, 0xfe, 0xa3, 0xe0, 0xff, 0xc3, 0x94, 0x80, 0xee, 0x94, 0x00, 0x50, 0x03, 0x02, 0x8e} },
+{ 0x8d95,      16,     {0x69, 0xd3, 0xef, 0x94, 0xff, 0xee, 0x94, 0x00, 0x40, 0x03, 0x02, 0x8e, 0x69, 0x90, 0x01, 0x76} },
+{ 0x8da5,      16,     {0xef, 0xf0, 0xe5, 0x57, 0x15, 0x57, 0xae, 0x56, 0x70, 0x02, 0x15, 0x56, 0x4e, 0x70, 0x03, 0x02} },
+{ 0x8db5,      16,     {0x8e, 0x69, 0x90, 0x01, 0x76, 0xe0, 0xff, 0x04, 0xf0, 0xa8, 0x07, 0xe6, 0xff, 0x90, 0x01, 0x7a} },
+{ 0x8dc5,      16,     {0xe4, 0x75, 0xf0, 0x01, 0x12, 0x9f, 0xa4, 0x85, 0xf0, 0x82, 0xf5, 0x83, 0xef, 0xf0, 0x80, 0xd2} },
+{ 0x8dd5,      16,     {0x85, 0x55, 0x82, 0x85, 0x54, 0x83, 0xa3, 0xe0, 0xfe, 0xa3, 0xe0, 0xff, 0xc3, 0x94, 0x20, 0xee} },
+{ 0x8de5,      16,     {0x94, 0x00, 0x50, 0x03, 0x02, 0x8e, 0x69, 0xd3, 0xef, 0x94, 0x2f, 0xee, 0x94, 0x00, 0x50, 0x74} },
+{ 0x8df5,      16,     {0x90, 0x01, 0x77, 0xef, 0xf0, 0xe5, 0x57, 0x15, 0x57, 0xae, 0x56, 0x70, 0x02, 0x15, 0x56, 0x4e} },
+{ 0x8e05,      16,     {0x60, 0x62, 0x90, 0x01, 0x77, 0xe0, 0xff, 0x04, 0xf0, 0xa8, 0x07, 0xe6, 0xff, 0x90, 0x01, 0x7a} },
+{ 0x8e15,      16,     {0xe4, 0x75, 0xf0, 0x01, 0x12, 0x9f, 0xa4, 0x85, 0xf0, 0x82, 0xf5, 0x83, 0xef, 0xf0, 0x80, 0xd5} },
+{ 0x8e25,      16,     {0x85, 0x55, 0x82, 0x85, 0x54, 0x83, 0xa3, 0xe0, 0xff, 0xa3, 0xe0, 0x90, 0x01, 0x78, 0xcf, 0xf0} },
+{ 0x8e35,      16,     {0xa3, 0xef, 0xf0, 0xe5, 0x57, 0x15, 0x57, 0xae, 0x56, 0x70, 0x02, 0x15, 0x56, 0x4e, 0x60, 0x24} },
+{ 0x8e45,      16,     {0x90, 0x01, 0x78, 0xe4, 0x75, 0xf0, 0x01, 0x12, 0x9f, 0xa4, 0x85, 0xf0, 0x82, 0xf5, 0x83, 0xe0} },
+{ 0x8e55,      16,     {0xff, 0x90, 0x01, 0x7a, 0xe4, 0x75, 0xf0, 0x01, 0x12, 0x9f, 0xa4, 0x85, 0xf0, 0x82, 0xf5, 0x83} },
+{ 0x8e65,      16,     {0xef, 0xf0, 0x80, 0xcf, 0x7e, 0x01, 0x7f, 0x35, 0x85, 0x55, 0x82, 0x85, 0x54, 0x83, 0xa3, 0xa3} },
+{ 0x8e75,      11,     {0xa3, 0xe0, 0xa3, 0xe0, 0x04, 0xfd, 0x12, 0x8e, 0xb4, 0x7f, 0x00} },
+{ 0x8e80,      1,      {0x22} },
+{ 0x8e81,      16,     {0x8e, 0x5f, 0x8f, 0x60, 0x8c, 0x61, 0x8d, 0x62, 0xaf, 0x03, 0x1b, 0xef, 0x60, 0x24, 0x05, 0x60} },
+{ 0x8e91,      16,     {0xe5, 0x60, 0xae, 0x5f, 0x70, 0x02, 0x05, 0x5f, 0x14, 0xf5, 0x82, 0x8e, 0x83, 0xe0, 0xff, 0x05} },
+{ 0x8ea1,      16,     {0x62, 0xe5, 0x62, 0xac, 0x61, 0x70, 0x02, 0x05, 0x61, 0x14, 0xf5, 0x82, 0x8c, 0x83, 0xef, 0xf0} },
+{ 0x8eb1,      3,      {0x80, 0xd6, 0x22} },
+{ 0x8eb4,      6,      {0x8d, 0x5a, 0xab, 0x07, 0xaa, 0x06} },
+{ 0x8eba,      16,     {0x75, 0x5e, 0x40, 0x75, 0x5d, 0x0d, 0x75, 0x5c, 0x03, 0x75, 0x5b, 0x00, 0x90, 0x7f, 0xc2, 0xe0} },
+{ 0x8eca,      16,     {0x20, 0xe1, 0xf9, 0xaf, 0x5e, 0xae, 0x5d, 0xad, 0x5c, 0xac, 0x5b, 0xec, 0x4d, 0x4e, 0x4f, 0x70} },
+{ 0x8eda,      16,     {0x08, 0x90, 0x7f, 0xc2, 0x74, 0x02, 0xf0, 0x80, 0xd7, 0x90, 0x7f, 0xc2, 0xe0, 0x20, 0xe1, 0x16} },
+{ 0x8eea,      16,     {0xaf, 0x03, 0xae, 0x02, 0x7c, 0x7b, 0x7d, 0x80, 0xab, 0x5a, 0x12, 0x8e, 0x81, 0x90, 0x7f, 0xc3} },
+{ 0x8efa,      8,      {0xe5, 0x5a, 0xf0, 0x7f, 0x01, 0x22, 0x7f, 0x00} },
+{ 0x8f02,      1,      {0x22} },
+{ 0x8f03,      16,     {0x90, 0x01, 0x84, 0x74, 0x0b, 0xf0, 0x90, 0x20, 0x70, 0xe0, 0x54, 0xf0, 0xff, 0xc4, 0x54, 0x0f} },
+{ 0x8f13,      16,     {0x90, 0x01, 0x85, 0xf0, 0x90, 0x95, 0xbf, 0xe4, 0x93, 0x90, 0x01, 0x86, 0xf0, 0x90, 0x95, 0xc0} },
+{ 0x8f23,      16,     {0xe4, 0x93, 0x90, 0x01, 0x87, 0xf0, 0xe4, 0x90, 0x01, 0x7c, 0xf0, 0xa3, 0xf0, 0xa3, 0xf0, 0xa3} },
+{ 0x8f33,      16,     {0xf0, 0xa3, 0xf0, 0xa3, 0x74, 0x10, 0xf0, 0xa3, 0x74, 0x01, 0xf0, 0xa3, 0x74, 0x88, 0xf0, 0x7e} },
+{ 0x8f43,      16,     {0x01, 0x7f, 0x7c, 0x12, 0x10, 0x2c, 0x7e, 0x01, 0x7f, 0x84, 0x7d, 0x14, 0x12, 0x8e, 0xb4, 0x7f} },
+{ 0x8f53,      1,      {0x00} },
+{ 0x8f54,      1,      {0x22} },
+{ 0x8f55,      16,     {0x7e, 0x7b, 0x7f, 0x40, 0x75, 0x4b, 0x7b, 0x75, 0x4c, 0x40, 0x90, 0x7f, 0xd3, 0xe0, 0xff, 0x85} },
+{ 0x8f65,      16,     {0x4b, 0x4e, 0x85, 0x4c, 0x4f, 0xe5, 0x4f, 0x24, 0x01, 0xf5, 0x53, 0xe4, 0x35, 0x4e, 0xf5, 0x52} },
+{ 0x8f75,      16,     {0xe4, 0xf5, 0x4d, 0x85, 0x4f, 0x82, 0x85, 0x4e, 0x83, 0xe0, 0xfe, 0x14, 0xb4, 0x0c, 0x00, 0x50} },
+{ 0x8f85,      16,     {0x5b, 0x90, 0x8f, 0x8d, 0xf8, 0x28, 0x28, 0x73, 0x02, 0x8f, 0xb1, 0x02, 0x8f, 0xb1, 0x02, 0x8f} },
+{ 0x8f95,      16,     {0xbb, 0x02, 0x8f, 0xc5, 0x02, 0x8f, 0xc5, 0x02, 0x8f, 0xc5, 0x02, 0x8f, 0xd9, 0x02, 0x8f, 0xb1} },
+{ 0x8fa5,      16,     {0x02, 0x8f, 0xcf, 0x02, 0x8f, 0xb1, 0x02, 0x8f, 0xe1, 0x02, 0x8f, 0xb1, 0xef, 0x64, 0x02, 0x60} },
+{ 0x8fb5,      16,     {0x2b, 0x75, 0x4d, 0xff, 0x80, 0x26, 0xef, 0x64, 0x0e, 0x60, 0x21, 0x75, 0x4d, 0xff, 0x80, 0x1c} },
+{ 0x8fc5,      16,     {0xef, 0x64, 0x03, 0x60, 0x17, 0x75, 0x4d, 0xff, 0x80, 0x12, 0xef, 0x64, 0x03, 0x60, 0x0d, 0x75} },
+{ 0x8fd5,      16,     {0x4d, 0xff, 0x80, 0x08, 0xef, 0x64, 0x06, 0x60, 0x03, 0x75, 0x4d, 0xff, 0xe5, 0x4d, 0x60, 0x15} },
+{ 0x8fe5,      16,     {0x90, 0x01, 0x98, 0x74, 0x11, 0xf0, 0xa3, 0xee, 0xf0, 0x7e, 0x01, 0x7f, 0x98, 0x7d, 0x02, 0x12} },
+{ 0x8ff5,      16,     {0x8e, 0xb4, 0xaf, 0x4d, 0x22, 0xe4, 0xf5, 0x4d, 0x85, 0x4f, 0x82, 0x85, 0x4e, 0x83, 0xe0, 0x14} },
+{ 0x9005,      16,     {0xb4, 0x0f, 0x00, 0x40, 0x03, 0x02, 0x91, 0x23, 0x90, 0x90, 0x14, 0xf8, 0x28, 0x28, 0x73, 0x02} },
+{ 0x9015,      16,     {0x90, 0x41, 0x02, 0x90, 0x4d, 0x02, 0x90, 0x59, 0x02, 0x90, 0xa7, 0x02, 0x90, 0xb2, 0x02, 0x90} },
+{ 0x9025,      16,     {0xbd, 0x02, 0x90, 0xc8, 0x02, 0x90, 0xd3, 0x02, 0x90, 0xde, 0x02, 0x90, 0xe9, 0x02, 0x90, 0xf4} },
+{ 0x9035,      16,     {0x02, 0x90, 0xfb, 0x02, 0x91, 0x23, 0x02, 0x91, 0x06, 0x02, 0x91, 0x11, 0xaf, 0x53, 0xae, 0x52} },
+{ 0x9045,      16,     {0x12, 0x83, 0xb7, 0x8f, 0x4d, 0x02, 0x91, 0x26, 0xaf, 0x53, 0xae, 0x52, 0x12, 0x84, 0x95, 0x8f} },
+{ 0x9055,      16,     {0x4d, 0x02, 0x91, 0x26, 0x85, 0x52, 0x50, 0x85, 0x53, 0x51, 0xe5, 0x51, 0x24, 0x01, 0xff, 0xe4} },
+{ 0x9065,      16,     {0x35, 0x50, 0xfe, 0x12, 0x85, 0x2f, 0xaf, 0x51, 0xae, 0x50, 0x12, 0x85, 0xc2, 0x8f, 0x4d, 0xef} },
+{ 0x9075,      16,     {0x64, 0x01, 0x60, 0x03, 0x02, 0x91, 0x26, 0xaf, 0x51, 0xae, 0x50, 0x12, 0x86, 0x17, 0x8f, 0x4d} },
+{ 0x9085,      16,     {0xe5, 0x4d, 0x70, 0x03, 0x02, 0x91, 0x26, 0x85, 0x51, 0x82, 0x85, 0x50, 0x83, 0xe0, 0x75, 0xf0} },
+{ 0x9095,      16,     {0x0d, 0xa4, 0x24, 0xf4, 0xf5, 0x82, 0xe4, 0x34, 0x02, 0xaf, 0x82, 0xfe, 0x12, 0x86, 0x17, 0x02} },
+{ 0x90a5,      16,     {0x91, 0x26, 0xaf, 0x53, 0xae, 0x52, 0x12, 0x8a, 0x2a, 0x8f, 0x4d, 0x80, 0x74, 0xaf, 0x53, 0xae} },
+{ 0x90b5,      16,     {0x52, 0x12, 0x8a, 0x73, 0x8f, 0x4d, 0x80, 0x69, 0xaf, 0x53, 0xae, 0x52, 0x12, 0x8a, 0xbc, 0x8f} },
+{ 0x90c5,      16,     {0x4d, 0x80, 0x5e, 0xaf, 0x4c, 0xae, 0x4b, 0x12, 0x8b, 0xe5, 0x8f, 0x4d, 0x80, 0x53, 0xaf, 0x53} },
+{ 0x90d5,      16,     {0xae, 0x52, 0x12, 0x89, 0x5b, 0x8f, 0x4d, 0x80, 0x48, 0xaf, 0x53, 0xae, 0x52, 0x12, 0x1a, 0xf1} },
+{ 0x90e5,      16,     {0x8f, 0x4d, 0x80, 0x3d, 0xaf, 0x53, 0xae, 0x52, 0x12, 0x89, 0xe6, 0x8f, 0x4d, 0x80, 0x32, 0x12} },
+{ 0x90f5,      16,     {0x8f, 0x03, 0x8f, 0x4d, 0x80, 0x2b, 0xaf, 0x53, 0xae, 0x52, 0x12, 0x8b, 0x01, 0x8f, 0x4d, 0x80} },
+{ 0x9105,      16,     {0x20, 0xaf, 0x53, 0xae, 0x52, 0x12, 0x8b, 0x22, 0x8f, 0x4d, 0x80, 0x15, 0xaf, 0x4c, 0xae, 0x4b} },
+{ 0x9115,      16,     {0x7c, 0x02, 0x7d, 0xaf, 0x7b, 0x40, 0x12, 0x8e, 0x81, 0xe4, 0xf5, 0x4d, 0x80, 0x03, 0x75, 0x4d} },
+{ 0x9125,      16,     {0xff, 0xe5, 0x4d, 0x60, 0x1d, 0x90, 0x01, 0x98, 0x74, 0x11, 0xf0, 0x85, 0x4f, 0x82, 0x85, 0x4e} },
+{ 0x9135,      16,     {0x83, 0xe0, 0x90, 0x01, 0x99, 0xf0, 0x7e, 0x01, 0x7f, 0x98, 0x7d, 0x02, 0x12, 0x8e, 0xb4, 0xaf} },
+{ 0x9145,      16,     {0x4d, 0x22, 0x85, 0x4f, 0x82, 0x85, 0x4e, 0x83, 0xe0, 0xff, 0x14, 0x24, 0xfa, 0x50, 0x04, 0x24} },
+{ 0x9155,      16,     {0xfe, 0x70, 0x1f, 0x90, 0x01, 0x98, 0x74, 0x10, 0xf0, 0xa3, 0xef, 0xf0, 0x85, 0x53, 0x82, 0x85} },
+{ 0x9165,      16,     {0x52, 0x83, 0xe0, 0x90, 0x01, 0x9a, 0xf0, 0x7e, 0x01, 0x7f, 0x98, 0x7d, 0x03, 0x12, 0x8e, 0xb4} },
+{ 0x9175,      4,      {0x8f, 0x4d, 0xaf, 0x4d} },
+{ 0x9179,      1,      {0x22} },
+{ 0x917a,      8,      {0x8f, 0x4e, 0x8e, 0x4d, 0x8d, 0x4c, 0x8c, 0x4b} },
+{ 0x9182,      16,     {0x75, 0x55, 0x01, 0x75, 0x56, 0x9c, 0xe4, 0xf5, 0x54, 0xaf, 0x50, 0x15, 0x50, 0xef, 0x70, 0x03} },
+{ 0x9192,      16,     {0x02, 0x92, 0x18, 0xaf, 0x4f, 0xe4, 0xfc, 0xfd, 0xfe, 0xf8, 0xf9, 0xfa, 0xab, 0x07, 0xaf, 0x4e} },
+{ 0x91a2,      16,     {0xae, 0x4d, 0xad, 0x4c, 0xac, 0x4b, 0x12, 0xa0, 0x2e, 0xaf, 0x03, 0x8f, 0x53, 0xaf, 0x4e, 0xae} },
+{ 0x91b2,      16,     {0x4d, 0xad, 0x4c, 0xac, 0x4b, 0xc0, 0x04, 0xc0, 0x05, 0xc0, 0x06, 0xc0, 0x07, 0xaf, 0x4f, 0xe4} },
+{ 0x91c2,      16,     {0xfc, 0xfd, 0xfe, 0xf8, 0xf9, 0xfa, 0xab, 0x07, 0xd0, 0x07, 0xd0, 0x06, 0xd0, 0x05, 0xd0, 0x04} },
+{ 0x91d2,      16,     {0x12, 0xa0, 0x2e, 0x8f, 0x4e, 0x8e, 0x4d, 0x8d, 0x4c, 0x8c, 0x4b, 0xe5, 0x53, 0x24, 0x30, 0xf5} },
+{ 0x91e2,      16,     {0x53, 0xd3, 0x94, 0x39, 0x40, 0x06, 0x74, 0x07, 0x25, 0x53, 0xf5, 0x53, 0x05, 0x56, 0xe5, 0x56} },
+{ 0x91f2,      16,     {0xae, 0x55, 0x70, 0x02, 0x05, 0x55, 0x14, 0xf5, 0x82, 0x8e, 0x83, 0xe4, 0xf0, 0x05, 0x56, 0xe5} },
+{ 0x9202,      16,     {0x56, 0xae, 0x55, 0x70, 0x02, 0x05, 0x55, 0x14, 0xf5, 0x82, 0x8e, 0x83, 0xe5, 0x53, 0xf0, 0x05} },
+{ 0x9212,      16,     {0x54, 0x05, 0x54, 0x02, 0x91, 0x8b, 0xe5, 0x56, 0x15, 0x56, 0x70, 0x02, 0x15, 0x55, 0xaf, 0x54} },
+{ 0x9222,      16,     {0x15, 0x54, 0xef, 0x60, 0x23, 0xe5, 0x56, 0x15, 0x56, 0xae, 0x55, 0x70, 0x02, 0x15, 0x55, 0xf5} },
+{ 0x9232,      16,     {0x82, 0x8e, 0x83, 0xe0, 0xff, 0x05, 0x52, 0xe5, 0x52, 0xac, 0x51, 0x70, 0x02, 0x05, 0x51, 0x14} },
+{ 0x9242,      8,      {0xf5, 0x82, 0x8c, 0x83, 0xef, 0xf0, 0x80, 0xd6} },
+{ 0x924a,      1,      {0x22} },
+{ 0x924b,      16,     {0xaa, 0x07, 0xa9, 0x05, 0x90, 0x01, 0xc9, 0xe0, 0xc3, 0x94, 0x40, 0x50, 0x61, 0xac, 0x02, 0x74} },
+{ 0x925b,      16,     {0x01, 0x7e, 0x00, 0xa8, 0x04, 0x08, 0x80, 0x05, 0xc3, 0x33, 0xce, 0x33, 0xce, 0xd8, 0xf9, 0xff} },
+{ 0x926b,      16,     {0xe4, 0xef, 0x55, 0x30, 0x60, 0x45, 0xea, 0x04, 0xff, 0x90, 0x01, 0xc2, 0xe0, 0xfc, 0xa3, 0xe0} },
+{ 0x927b,      16,     {0xfd, 0xf5, 0x82, 0x8c, 0x83, 0xef, 0xf0, 0xa3, 0xe9, 0xf0, 0x8d, 0x82, 0x8c, 0x83, 0xa3, 0xa3} },
+{ 0x928b,      16,     {0xeb, 0xf0, 0x90, 0x01, 0xc2, 0xe4, 0x75, 0xf0, 0x03, 0x12, 0x9f, 0x8e, 0xfc, 0xd3, 0xe5, 0xf0} },
+{ 0x929b,      16,     {0x94, 0x87, 0xec, 0x94, 0x02, 0x40, 0x0a, 0x90, 0x01, 0xc2, 0x74, 0x01, 0xf0, 0xa3, 0x74, 0xca} },
+{ 0x92ab,      16,     {0xf0, 0xc2, 0xaf, 0x90, 0x01, 0xc9, 0xe0, 0x04, 0xf0, 0xd2, 0xaf, 0x7f, 0x01, 0x22, 0x7f, 0x00} },
+{ 0x92bb,      1,      {0x22} },
+{ 0x92bc,      16,     {0x90, 0x01, 0xc9, 0xe0, 0xd3, 0x94, 0x00, 0x40, 0x55, 0x90, 0x01, 0xbe, 0xe0, 0xfc, 0xa3, 0xe0} },
+{ 0x92cc,      16,     {0xaa, 0x04, 0xf9, 0x7b, 0x01, 0xc0, 0x03, 0xc0, 0x02, 0xc0, 0x01, 0xaa, 0x06, 0xa9, 0x07, 0xa8} },
+{ 0x92dc,      16,     {0x01, 0xac, 0x02, 0xad, 0x03, 0xd0, 0x01, 0xd0, 0x02, 0xd0, 0x03, 0x7e, 0x00, 0x7f, 0x03, 0x12} },
+{ 0x92ec,      16,     {0x9f, 0x1f, 0x90, 0x01, 0xbe, 0xe4, 0x75, 0xf0, 0x03, 0x12, 0x9f, 0x8e, 0xfc, 0xd3, 0xe5, 0xf0} },
+{ 0x92fc,      16,     {0x94, 0x87, 0xec, 0x94, 0x02, 0x40, 0x0a, 0x90, 0x01, 0xbe, 0x74, 0x01, 0xf0, 0xa3, 0x74, 0xca} },
+{ 0x930c,      16,     {0xf0, 0xc2, 0xaf, 0x90, 0x01, 0xc9, 0xe0, 0x14, 0xf0, 0xd2, 0xaf, 0x7f, 0x01, 0x22, 0x7f, 0x00} },
+{ 0x931c,      1,      {0x22} },
+{ 0x931d,      16,     {0x90, 0x7f, 0xc2, 0xe0, 0x20, 0xe1, 0x73, 0x7e, 0x7b, 0x7f, 0x80, 0x75, 0x50, 0x7b, 0x75, 0x51} },
+{ 0x932d,      16,     {0x80, 0xe5, 0x51, 0x24, 0x01, 0xff, 0xe4, 0x35, 0x50, 0xa9, 0x07, 0x7b, 0x01, 0x8b, 0x52, 0xf5} },
+{ 0x933d,      16,     {0x53, 0x89, 0x54, 0xfe, 0x12, 0x92, 0xbc, 0xef, 0x60, 0x50, 0xab, 0x52, 0xaa, 0x53, 0xa9, 0x54} },
+{ 0x934d,      16,     {0x12, 0x9f, 0x48, 0x14, 0xff, 0x90, 0x00, 0x01, 0x12, 0x9f, 0x61, 0xb4, 0x02, 0x16, 0xc2, 0xaf} },
+{ 0x935d,      16,     {0xef, 0x75, 0xf0, 0x08, 0xa4, 0x24, 0x01, 0xf5, 0x82, 0xe4, 0x34, 0x20, 0xf5, 0x83, 0xe0, 0x44} },
+{ 0x936d,      16,     {0x04, 0xf0, 0xd2, 0xaf, 0x74, 0x01, 0x7e, 0x00, 0xa8, 0x07, 0x08, 0x80, 0x05, 0xc3, 0x33, 0xce} },
+{ 0x937d,      16,     {0x33, 0xce, 0xd8, 0xf9, 0xff, 0xe4, 0xef, 0x55, 0x30, 0x60, 0x0f, 0x85, 0x51, 0x82, 0x85, 0x50} },
+{ 0x938d,      10,     {0x83, 0x74, 0x0d, 0xf0, 0x90, 0x7f, 0xc3, 0x74, 0x04, 0xf0} },
+{ 0x9397,      1,      {0x22} },
+{ 0x9398,      16,     {0x12, 0x93, 0x1d, 0xe4, 0xf5, 0x4b, 0x74, 0x36, 0x25, 0x4b, 0xf8, 0xe6, 0x54, 0xf0, 0xf5, 0x4c} },
+{ 0x93a8,      16,     {0x74, 0xc5, 0x25, 0x4b, 0xf5, 0x82, 0xe4, 0x34, 0x01, 0xf5, 0x83, 0xe0, 0x65, 0x4c, 0xff, 0xc4} },
+{ 0x93b8,      16,     {0x54, 0x0f, 0xf5, 0x4d, 0x60, 0x22, 0x74, 0xc5, 0x25, 0x4b, 0xf5, 0x82, 0xe4, 0x34, 0x01, 0xf5} },
+{ 0x93c8,      16,     {0x83, 0xe5, 0x4c, 0xf0, 0xaf, 0x4b, 0x7d, 0x01, 0xe5, 0x4c, 0x45, 0x4d, 0xfb, 0x12, 0x92, 0x4b} },
+{ 0x93d8,      16,     {0xef, 0x70, 0x05, 0x12, 0x93, 0x1d, 0x80, 0xec, 0x05, 0x4b, 0xe5, 0x4b, 0xc3, 0x94, 0x04, 0x40} },
+{ 0x93e8,      16,     {0xb5, 0x12, 0x93, 0x1d, 0xe5, 0x3a, 0x60, 0x48, 0xe4, 0xf5, 0x4b, 0xaf, 0x4b, 0x74, 0x01, 0xa8} },
+{ 0x93f8,      16,     {0x07, 0x08, 0x80, 0x02, 0xc3, 0x33, 0xd8, 0xfc, 0xf5, 0x4c, 0x55, 0x3a, 0x60, 0x29, 0xe5, 0x4b} },
+{ 0x9408,      16,     {0x75, 0xf0, 0x08, 0xa4, 0x24, 0x05, 0xf5, 0x82, 0xe4, 0x34, 0x20, 0xf5, 0x83, 0xe0, 0x30, 0xe6} },
+{ 0x9418,      16,     {0x16, 0xaf, 0x4b, 0x7d, 0x04, 0x7b, 0x80, 0x12, 0x92, 0x4b, 0xef, 0x70, 0x05, 0x12, 0x93, 0x1d} },
+{ 0x9428,      16,     {0x80, 0xef, 0xe5, 0x4c, 0xf4, 0x52, 0x3a, 0x05, 0x4b, 0xe5, 0x4b, 0xc3, 0x94, 0x04, 0x40, 0xbb} },
+{ 0x9438,      16,     {0x90, 0x03, 0x00, 0xe0, 0x60, 0x03, 0x02, 0x95, 0x05, 0x74, 0x19, 0xf0, 0x7f, 0x02, 0x12, 0x81} },
+{ 0x9448,      16,     {0xd9, 0x8e, 0x4e, 0x8f, 0x4f, 0xc3, 0xe5, 0x4e, 0x64, 0x80, 0x94, 0x80, 0x40, 0xee, 0x90, 0x01} },
+{ 0x9458,      16,     {0xbc, 0xe0, 0x65, 0x4f, 0xf0, 0x60, 0x37, 0xe4, 0xf5, 0x4b, 0xaf, 0x4b, 0x74, 0x01, 0xa8, 0x07} },
+{ 0x9468,      16,     {0x08, 0x80, 0x02, 0xc3, 0x33, 0xd8, 0xfc, 0xf5, 0x4c, 0x90, 0x01, 0xbc, 0xe0, 0x55, 0x4c, 0x60} },
+{ 0x9478,      16,     {0x14, 0xaf, 0x4b, 0x7d, 0x08, 0xe5, 0x4c, 0x55, 0x4f, 0xfb, 0x12, 0x92, 0x4b, 0xef, 0x70, 0x05} },
+{ 0x9488,      16,     {0x12, 0x93, 0x1d, 0x80, 0xec, 0x05, 0x4b, 0xe5, 0x4b, 0xc3, 0x94, 0x04, 0x40, 0xcc, 0x90, 0x01} },
+{ 0x9498,      16,     {0xbc, 0xe5, 0x4f, 0xf0, 0xe4, 0xf5, 0x4b, 0xc2, 0xaf, 0x74, 0x32, 0x25, 0x4b, 0xf8, 0xe6, 0xf5} },
+{ 0x94a8,      16,     {0x4c, 0xe4, 0xf6, 0xd2, 0xaf, 0x53, 0x4c, 0x1e, 0xe5, 0x4c, 0x60, 0x11, 0xaf, 0x4b, 0x7d, 0x02} },
+{ 0x94b8,      16,     {0xab, 0x4c, 0x12, 0x92, 0x4b, 0xef, 0x70, 0x05, 0x12, 0x93, 0x1d, 0x80, 0xef, 0x74, 0x2c, 0x25} },
+{ 0x94c8,      16,     {0x4b, 0xf8, 0xe6, 0xf5, 0x4c, 0x74, 0xfc, 0x25, 0x4b, 0xf5, 0x82, 0xe4, 0x34, 0x02, 0xf5, 0x83} },
+{ 0x94d8,      16,     {0xe0, 0x65, 0x4c, 0x60, 0x11, 0xaf, 0x4b, 0x7d, 0x04, 0xab, 0x4c, 0x12, 0x92, 0x4b, 0xef, 0x70} },
+{ 0x94e8,      16,     {0x05, 0x12, 0x93, 0x1d, 0x80, 0xef, 0x74, 0xfc, 0x25, 0x4b, 0xf5, 0x82, 0xe4, 0x34, 0x02, 0xf5} },
+{ 0x94f8,      16,     {0x83, 0xe5, 0x4c, 0xf0, 0x05, 0x4b, 0xe5, 0x4b, 0xc3, 0x94, 0x04, 0x40, 0x9a, 0x12, 0x93, 0x1d} },
+{ 0x9508,      1,      {0x22} },
+{ 0x9509,      12,     {0x78, 0x7f, 0xe4, 0xf6, 0xd8, 0xfd, 0x75, 0x81, 0x62, 0x02, 0x95, 0x50} },
+{ 0x9515,      16,     {0x02, 0x05, 0xad, 0xe4, 0x93, 0xa3, 0xf8, 0xe4, 0x93, 0xa3, 0x40, 0x03, 0xf6, 0x80, 0x01, 0xf2} },
+{ 0x9525,      16,     {0x08, 0xdf, 0xf4, 0x80, 0x29, 0xe4, 0x93, 0xa3, 0xf8, 0x54, 0x07, 0x24, 0x0c, 0xc8, 0xc3, 0x33} },
+{ 0x9535,      16,     {0xc4, 0x54, 0x0f, 0x44, 0x20, 0xc8, 0x83, 0x40, 0x04, 0xf4, 0x56, 0x80, 0x01, 0x46, 0xf6, 0xdf} },
+{ 0x9545,      16,     {0xe4, 0x80, 0x0b, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x90, 0x95, 0x95, 0xe4, 0x7e} },
+{ 0x9555,      16,     {0x01, 0x93, 0x60, 0xbc, 0xa3, 0xff, 0x54, 0x3f, 0x30, 0xe5, 0x09, 0x54, 0x1f, 0xfe, 0xe4, 0x93} },
+{ 0x9565,      16,     {0xa3, 0x60, 0x01, 0x0e, 0xcf, 0x54, 0xc0, 0x25, 0xe0, 0x60, 0xa8, 0x40, 0xb8, 0xe4, 0x93, 0xa3} },
+{ 0x9575,      16,     {0xfa, 0xe4, 0x93, 0xa3, 0xf8, 0xe4, 0x93, 0xa3, 0xc8, 0xc5, 0x82, 0xc8, 0xca, 0xc5, 0x83, 0xca} },
+{ 0x9585,      16,     {0xf0, 0xa3, 0xc8, 0xc5, 0x82, 0xc8, 0xca, 0xc5, 0x83, 0xca, 0xdf, 0xe9, 0xde, 0xe7, 0x80, 0xbe} },
+{ 0x9595,      16,     {0x60, 0x24, 0x02, 0x8a, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x81, 0x82, 0x84, 0x88} },
+{ 0x95a5,      16,     {0x90, 0xa0, 0xc0, 0xc1, 0xc2, 0xc4, 0xc8, 0xd0, 0xe0, 0xe1, 0xe2, 0xe4, 0xe8, 0xf0, 0xf1, 0xf2} },
+{ 0x95b5,      8,      {0xf4, 0xf8, 0xf9, 0xfa, 0xfc, 0xfd, 0xfe, 0xff} },
+{ 0x95bd,      1,      {0x00} },
+{ 0x95be,      3,      {0x00, 0x03, 0x1d} },
+{ 0x95c1,      8,      {0x8b, 0x54, 0x8a, 0x55, 0x89, 0x56, 0x8d, 0x57} },
+{ 0x95c9,      16,     {0xe4, 0xf5, 0x58, 0xf5, 0x59, 0xaf, 0x57, 0x15, 0x57, 0xef, 0x60, 0x36, 0xab, 0x54, 0x05, 0x56} },
+{ 0x95d9,      16,     {0xe5, 0x56, 0xaa, 0x55, 0x70, 0x02, 0x05, 0x55, 0x14, 0xf9, 0x12, 0x9f, 0x48, 0xff, 0xe5, 0x58} },
+{ 0x95e9,      16,     {0xe5, 0x59, 0x6f, 0x25, 0xe0, 0xff, 0xe4, 0x33, 0xfe, 0x74, 0xa2, 0x2f, 0xf5, 0x82, 0xee, 0x34} },
+{ 0x95f9,      16,     {0x9b, 0xf5, 0x83, 0xe5, 0x58, 0xff, 0xe4, 0x93, 0xf5, 0x58, 0x74, 0x01, 0x93, 0x6f, 0xf5, 0x59} },
+{ 0x9609,      6,      {0x80, 0xc3, 0xae, 0x58, 0xaf, 0x59} },
+{ 0x960f,      1,      {0x22} },
+{ 0x9610,      11,     {0xc0, 0xe0, 0xc0, 0x83, 0xc0, 0x82, 0xc0, 0xd0, 0x75, 0xd0, 0x18} },
+{ 0x961b,      16,     {0x90, 0x20, 0x60, 0xe0, 0x54, 0x0f, 0xfe, 0x30, 0xe0, 0x05, 0x90, 0x20, 0x02, 0xe0, 0xff, 0xee} },
+{ 0x962b,      16,     {0x30, 0xe1, 0x05, 0x90, 0x20, 0x0a, 0xe0, 0xff, 0xee, 0x30, 0xe2, 0x05, 0x90, 0x20, 0x12, 0xe0} },
+{ 0x963b,      16,     {0xff, 0xee, 0x30, 0xe3, 0x05, 0x90, 0x20, 0x1a, 0xe0, 0xff, 0x90, 0x01, 0xc4, 0xe0, 0xb5, 0x1e} },
+{ 0x964b,      10,     {0x04, 0xe4, 0xf0, 0x80, 0x05, 0x90, 0x01, 0xc4, 0xee, 0xf0} },
+{ 0x9655,      9,      {0xd0, 0xd0, 0xd0, 0x82, 0xd0, 0x83, 0xd0, 0xe0, 0x32} },
+{ 0x965e,      2,      {0xa9, 0x03} },
+{ 0x9660,      16,     {0xef, 0x75, 0xf0, 0x08, 0xa4, 0x24, 0x00, 0xf5, 0x82, 0xe4, 0x34, 0x20, 0xab, 0x82, 0xfa, 0xe5} },
+{ 0x9670,      16,     {0x57, 0x45, 0x58, 0xf5, 0x59, 0xe9, 0x60, 0x14, 0x8a, 0x83, 0xe5, 0x82, 0x24, 0x04, 0xf5, 0x82} },
+{ 0x9680,      16,     {0xe4, 0x35, 0x83, 0xf5, 0x83, 0xe0, 0x4d, 0xf0, 0xe4, 0xfe, 0x80, 0x13, 0xeb, 0x24, 0x04, 0xf5} },
+{ 0x9690,      16,     {0x82, 0xe4, 0x3a, 0xf5, 0x83, 0xe0, 0xff, 0xed, 0xf4, 0xfc, 0xef, 0x5c, 0xf0, 0xae, 0x59, 0xeb} },
+{ 0x96a0,      16,     {0x24, 0x06, 0xf5, 0x82, 0xe4, 0x3a, 0xf5, 0x83, 0xe0, 0x55, 0x59, 0xfc, 0xb5, 0x06, 0x03, 0xaf} },
+{ 0x96b0,      16,     {0x05, 0x22, 0xe5, 0x57, 0x5c, 0xfe, 0xe5, 0x58, 0x5c, 0xfd, 0xe9, 0x60, 0x16, 0xee, 0x70, 0x04} },
+{ 0x96c0,      16,     {0x7f, 0x01, 0x80, 0x02, 0x7f, 0x00, 0xae, 0x07, 0xed, 0x70, 0x04, 0x7f, 0x01, 0x80, 0x02, 0x7f} },
+{ 0x96d0,      16,     {0x00, 0xad, 0x07, 0xee, 0x60, 0x03, 0xaf, 0x57, 0x22, 0xed, 0x60, 0x03, 0xaf, 0x58, 0x22, 0x7f} },
+{ 0x96e0,      1,      {0x00} },
+{ 0x96e1,      1,      {0x22} },
+{ 0x96e2,      16,     {0x75, 0x50, 0x02, 0x75, 0x51, 0xb0, 0x90, 0x03, 0x35, 0x74, 0x0f, 0xf0, 0x85, 0x51, 0x82, 0x85} },
+{ 0x96f2,      16,     {0x50, 0x83, 0xe0, 0xff, 0x90, 0x03, 0x36, 0xf0, 0x85, 0x51, 0x82, 0x85, 0x50, 0x83, 0xa3, 0xe0} },
+{ 0x9702,      16,     {0x90, 0x03, 0x37, 0xf0, 0xa3, 0x74, 0xff, 0xf0, 0x75, 0x52, 0x03, 0x75, 0x53, 0x39, 0xef, 0x14} },
+{ 0x9712,      16,     {0xb4, 0x0b, 0x00, 0x40, 0x03, 0x02, 0x9b, 0x6a, 0x90, 0x97, 0x21, 0xf8, 0x28, 0x28, 0x73, 0x02} },
+{ 0x9722,      16,     {0x97, 0x42, 0x02, 0x97, 0xe1, 0x02, 0x98, 0xe6, 0x02, 0x99, 0x06, 0x02, 0x99, 0x06, 0x02, 0x99} },
+{ 0x9732,      16,     {0xa1, 0x02, 0x99, 0xdc, 0x02, 0x9a, 0x01, 0x02, 0x9a, 0xbf, 0x02, 0x9a, 0xef, 0x02, 0x9b, 0x1b} },
+{ 0x9742,      16,     {0xe4, 0xf5, 0x4b, 0xe5, 0x4b, 0x75, 0xf0, 0x08, 0xa4, 0x24, 0x00, 0xf5, 0x82, 0xe4, 0x34, 0x20} },
+{ 0x9752,      16,     {0xaf, 0x82, 0xf5, 0x4e, 0x8f, 0x4f, 0xe4, 0xff, 0xe4, 0xfe, 0xef, 0x60, 0x10, 0x74, 0x8a, 0x2e} },
+{ 0x9762,      16,     {0xf5, 0x82, 0xe4, 0x34, 0x02, 0xf5, 0x83, 0xe0, 0xf4, 0xf5, 0x4c, 0x80, 0x0d, 0x74, 0x8a, 0x2e} },
+{ 0x9772,      16,     {0xf5, 0x82, 0xe4, 0x34, 0x02, 0xf5, 0x83, 0xe0, 0xf5, 0x4c, 0xe5, 0x4f, 0x24, 0x07, 0xf5, 0x82} },
+{ 0x9782,      16,     {0xe4, 0x35, 0x4e, 0xf5, 0x83, 0xe5, 0x4c, 0xf0, 0xe0, 0xf5, 0x4d, 0x65, 0x4c, 0x60, 0x38, 0xe4} },
+{ 0x9792,      16,     {0x90, 0x03, 0x38, 0xf0, 0xe5, 0x4b, 0x04, 0xfd, 0x05, 0x53, 0xe5, 0x53, 0xaa, 0x52, 0x70, 0x02} },
+{ 0x97a2,      16,     {0x05, 0x52, 0x14, 0xf5, 0x82, 0x8a, 0x83, 0xed, 0xf0, 0x05, 0x53, 0xe5, 0x53, 0xac, 0x52, 0x70} },
+{ 0x97b2,      16,     {0x02, 0x05, 0x52, 0x14, 0xf5, 0x82, 0x8c, 0x83, 0xe5, 0x4c, 0xf0, 0x85, 0x53, 0x82, 0x85, 0x52} },
+{ 0x97c2,      16,     {0x83, 0xe5, 0x4d, 0xf0, 0x02, 0x9b, 0x70, 0x0e, 0xbe, 0x24, 0x8f, 0x0f, 0xef, 0x64, 0x02, 0x70} },
+{ 0x97d2,      16,     {0x87, 0x05, 0x4b, 0xe5, 0x4b, 0x64, 0x04, 0x60, 0x03, 0x02, 0x97, 0x45, 0x02, 0x9b, 0x70, 0xe4} },
+{ 0x97e2,      16,     {0xf5, 0x4b, 0xaf, 0x4b, 0xe4, 0xfd, 0x12, 0x82, 0xa8, 0x05, 0x4b, 0xe5, 0x4b, 0xd3, 0x94, 0x03} },
+{ 0x97f2,      16,     {0x40, 0xf0, 0x90, 0x00, 0x04, 0x74, 0x96, 0xf0, 0xa3, 0x74, 0x10, 0xf0, 0xe4, 0xf5, 0x4d, 0x7e} },
+{ 0x9802,      16,     {0x20, 0x7f, 0x00, 0x75, 0x4e, 0x20, 0x75, 0x4f, 0x00, 0xf5, 0x4b, 0xaf, 0x4b, 0x74, 0x01, 0xa8} },
+{ 0x9812,      16,     {0x07, 0x08, 0x80, 0x02, 0xc3, 0x33, 0xd8, 0xfc, 0xf5, 0x4c, 0x90, 0x01, 0xc4, 0xf0, 0x90, 0x01} },
+{ 0x9822,      16,     {0xc0, 0xe4, 0xf0, 0xa3, 0x74, 0x0a, 0xf0, 0x85, 0x4f, 0x82, 0x85, 0x4e, 0x83, 0xa3, 0x74, 0x02} },
+{ 0x9832,      16,     {0xf0, 0x90, 0x01, 0xc4, 0xe0, 0xb5, 0x4c, 0x34, 0x90, 0x01, 0xc0, 0xe0, 0x70, 0x02, 0xa3, 0xe0} },
+{ 0x9842,      16,     {0x70, 0xef, 0x90, 0x03, 0x38, 0xf0, 0xe5, 0x4b, 0x04, 0xff, 0x05, 0x53, 0xe5, 0x53, 0xac, 0x52} },
+{ 0x9852,      16,     {0x70, 0x02, 0x05, 0x52, 0x14, 0xf5, 0x82, 0x8c, 0x83, 0xef, 0xf0, 0x85, 0x53, 0x82, 0x85, 0x52} },
+{ 0x9862,      16,     {0x83, 0x74, 0xff, 0xf0, 0xe4, 0x90, 0x01, 0xc4, 0xf0, 0x75, 0x4d, 0xff, 0x90, 0x01, 0xc4, 0xe0} },
+{ 0x9872,      16,     {0xff, 0x60, 0x37, 0xe4, 0x90, 0x03, 0x38, 0xf0, 0xe5, 0x4b, 0x04, 0xfe, 0x05, 0x53, 0xe5, 0x53} },
+{ 0x9882,      16,     {0xac, 0x52, 0x70, 0x02, 0x05, 0x52, 0x14, 0xf5, 0x82, 0x8c, 0x83, 0xee, 0xf0, 0x05, 0x53, 0xe5} },
+{ 0x9892,      16,     {0x53, 0xac, 0x52, 0x70, 0x02, 0x05, 0x52, 0x14, 0xf5, 0x82, 0x8c, 0x83, 0xef, 0xf0, 0x85, 0x53} },
+{ 0x98a2,      16,     {0x82, 0x85, 0x52, 0x83, 0xe5, 0x4c, 0xf0, 0x75, 0x4d, 0xff, 0xe5, 0x4d, 0x70, 0x16, 0x74, 0x08} },
+{ 0x98b2,      16,     {0x25, 0x4f, 0xf5, 0x4f, 0xe4, 0x35, 0x4e, 0xf5, 0x4e, 0x05, 0x4b, 0xe5, 0x4b, 0x64, 0x04, 0x60} },
+{ 0x98c2,      16,     {0x03, 0x02, 0x98, 0x0d, 0xe4, 0xf5, 0x4b, 0xaf, 0x4b, 0x7d, 0x01, 0x12, 0x82, 0xa8, 0x05, 0x4b} },
+{ 0x98d2,      16,     {0xe5, 0x4b, 0xd3, 0x94, 0x03, 0x40, 0xf0, 0x90, 0x00, 0x04, 0x74, 0x13, 0xf0, 0xa3, 0x74, 0x12} },
+{ 0x98e2,      16,     {0xf0, 0x02, 0x9b, 0x70, 0x85, 0x51, 0x82, 0x85, 0x50, 0x83, 0xa3, 0xe0, 0x14, 0xff, 0x74, 0x01} },
+{ 0x98f2,      16,     {0xa8, 0x07, 0x08, 0x80, 0x02, 0xc3, 0x33, 0xd8, 0xfc, 0x90, 0x02, 0xf7, 0xf0, 0x90, 0x01, 0xc4} },
+{ 0x9902,      16,     {0xf0, 0x02, 0x9b, 0x70, 0x90, 0x01, 0xc0, 0x74, 0x03, 0xf0, 0xa3, 0x74, 0xe8, 0xf0, 0xe4, 0xf5} },
+{ 0x9912,      16,     {0x4d, 0x90, 0x02, 0xf7, 0xe0, 0xff, 0x90, 0x01, 0xc4, 0xe0, 0xb5, 0x07, 0x19, 0x90, 0x01, 0xc0} },
+{ 0x9922,      16,     {0xe0, 0x70, 0x02, 0xa3, 0xe0, 0x70, 0xea, 0x90, 0x03, 0x38, 0xf0, 0x85, 0x53, 0x82, 0x85, 0x52} },
+{ 0x9932,      16,     {0x83, 0x74, 0xff, 0xf0, 0xf5, 0x4d, 0xe5, 0x4d, 0x60, 0x03, 0x02, 0x9b, 0x70, 0x90, 0x01, 0xc0} },
+{ 0x9942,      16,     {0xf0, 0xa3, 0x74, 0x96, 0xf0, 0x90, 0x01, 0xc0, 0xe0, 0x70, 0x02, 0xa3, 0xe0, 0x70, 0xf6, 0x7f} },
+{ 0x9952,      16,     {0x02, 0x12, 0x81, 0xd9, 0xc3, 0xee, 0x64, 0x80, 0x94, 0x80, 0x40, 0xf3, 0xef, 0x54, 0x0f, 0xf5} },
+{ 0x9962,      16,     {0x4d, 0x90, 0x02, 0xf7, 0xe0, 0x55, 0x4d, 0x70, 0x04, 0x7f, 0x01, 0x80, 0x02, 0x7f, 0x00, 0x8f} },
+{ 0x9972,      16,     {0x4c, 0x85, 0x51, 0x82, 0x85, 0x50, 0x83, 0xe0, 0xb4, 0x05, 0x0c, 0xe5, 0x4c, 0x70, 0x04, 0x7f} },
+{ 0x9982,      16,     {0x01, 0x80, 0x02, 0x7f, 0x00, 0x8f, 0x4c, 0xe5, 0x4c, 0x70, 0x03, 0x02, 0x9b, 0x70, 0xe4, 0x90} },
+{ 0x9992,      16,     {0x03, 0x38, 0xf0, 0x85, 0x53, 0x82, 0x85, 0x52, 0x83, 0xe5, 0x4d, 0xf0, 0x02, 0x9b, 0x70, 0xe4} },
+{ 0x99a2,      16,     {0xff, 0xfd, 0x12, 0x82, 0xa8, 0x7e, 0x20, 0x7f, 0x00, 0x75, 0x4e, 0x20, 0x75, 0x4f, 0x00, 0x85} },
+{ 0x99b2,      16,     {0x4f, 0x82, 0x85, 0x4e, 0x83, 0xa3, 0xa3, 0xa3, 0xe0, 0x44, 0x80, 0xf0, 0x85, 0x4f, 0x82, 0x85} },
+{ 0x99c2,      16,     {0x4e, 0x83, 0x74, 0x01, 0xf0, 0xa3, 0xe4, 0xf0, 0x85, 0x4f, 0x82, 0x85, 0x4e, 0x83, 0xa3, 0xa3} },
+{ 0x99d2,      16,     {0xa3, 0xe0, 0x54, 0x7f, 0xf0, 0xd2, 0x04, 0x02, 0x9b, 0x70, 0xc2, 0x04, 0x7e, 0x20, 0x7f, 0x00} },
+{ 0x99e2,      16,     {0x75, 0x4e, 0x20, 0x75, 0x4f, 0x00, 0xe5, 0x4f, 0x24, 0x05, 0xf5, 0x82, 0xe4, 0x35, 0x4e, 0xf5} },
+{ 0x99f2,      16,     {0x83, 0xe0, 0x30, 0xe6, 0xf1, 0xe4, 0xff, 0x7d, 0x01, 0x12, 0x82, 0xa8, 0x02, 0x9b, 0x70, 0xe4} },
+{ 0x9a02,      16,     {0xf5, 0x4d, 0xf5, 0x4b, 0xaf, 0x4b, 0xe4, 0xfd, 0x12, 0x82, 0xa8, 0xe5, 0x4b, 0x75, 0xf0, 0x08} },
+{ 0x9a12,      16,     {0xa4, 0x24, 0x00, 0xf5, 0x82, 0xe4, 0x34, 0x20, 0xaf, 0x82, 0xf5, 0x4e, 0x8f, 0x4f, 0xf5, 0x83} },
+{ 0x9a22,      16,     {0xe5, 0x82, 0x24, 0x04, 0xf5, 0x82, 0xe4, 0x35, 0x83, 0xf5, 0x83, 0xe0, 0x54, 0xfc, 0xf0, 0xaf} },
+{ 0x9a32,      16,     {0x4b, 0x7d, 0x01, 0x7b, 0x01, 0x75, 0x57, 0x80, 0x75, 0x58, 0x40, 0x12, 0x96, 0x5e, 0x8f, 0x4d} },
+{ 0x9a42,      16,     {0xe5, 0x4d, 0x70, 0x11, 0xaf, 0x4b, 0x7d, 0x02, 0x7b, 0x01, 0x75, 0x57, 0x10, 0x75, 0x58, 0x20} },
+{ 0x9a52,      16,     {0x12, 0x96, 0x5e, 0x8f, 0x4d, 0xe5, 0x4d, 0x70, 0x10, 0xaf, 0x4b, 0x7d, 0x01, 0xfb, 0x75, 0x57} },
+{ 0x9a62,      16,     {0x80, 0x75, 0x58, 0x40, 0x12, 0x96, 0x5e, 0x8f, 0x4d, 0xe5, 0x4d, 0x70, 0x10, 0xaf, 0x4b, 0x7d} },
+{ 0x9a72,      16,     {0x02, 0xfb, 0x75, 0x57, 0x10, 0x75, 0x58, 0x20, 0x12, 0x96, 0x5e, 0x8f, 0x4d, 0xaf, 0x4b, 0x7d} },
+{ 0x9a82,      16,     {0x01, 0x12, 0x82, 0xa8, 0xe5, 0x4d, 0x60, 0x26, 0xe4, 0x90, 0x03, 0x38, 0xf0, 0xe5, 0x4b, 0x04} },
+{ 0x9a92,      16,     {0xff, 0x05, 0x53, 0xe5, 0x53, 0xac, 0x52, 0x70, 0x02, 0x05, 0x52, 0x14, 0xf5, 0x82, 0x8c, 0x83} },
+{ 0x9aa2,      16,     {0xef, 0xf0, 0x85, 0x53, 0x82, 0x85, 0x52, 0x83, 0xe5, 0x4d, 0xf0, 0x02, 0x9b, 0x70, 0x05, 0x4b} },
+{ 0x9ab2,      16,     {0xe5, 0x4b, 0xd3, 0x94, 0x03, 0x50, 0x03, 0x02, 0x9a, 0x06, 0x02, 0x9b, 0x70, 0xe4, 0x90, 0x03} },
+{ 0x9ac2,      16,     {0x59, 0xf0, 0xa3, 0xf0, 0xa3, 0xf0, 0xa3, 0xf0, 0xa3, 0xf0, 0xa3, 0x74, 0x10, 0xf0, 0xa3, 0x74} },
+{ 0x9ad2,      16,     {0x9b, 0xf0, 0xa3, 0x74, 0x92, 0xf0, 0x7e, 0x03, 0x7f, 0x59, 0x12, 0x19, 0xc1, 0xef, 0x64, 0x08} },
+{ 0x9ae2,      16,     {0x70, 0x03, 0x02, 0x9b, 0x70, 0xe4, 0x90, 0x03, 0x38, 0xf0, 0x02, 0x9b, 0x70, 0xe4, 0x90, 0x03} },
+{ 0x9af2,      16,     {0x59, 0xf0, 0xa3, 0xf0, 0xa3, 0xf0, 0xa3, 0xf0, 0xa3, 0xf0, 0xa3, 0x74, 0x10, 0xf0, 0xa3, 0xe5} },
+{ 0x9b02,      16,     {0x52, 0xf0, 0xa3, 0xe5, 0x53, 0xf0, 0x7e, 0x03, 0x7f, 0x59, 0x12, 0x10, 0x2c, 0xef, 0x64, 0x08} },
+{ 0x9b12,      16,     {0x60, 0x5c, 0xe4, 0x90, 0x03, 0x38, 0xf0, 0x80, 0x55, 0xe5, 0x51, 0x24, 0x02, 0xff, 0xe4, 0x35} },
+{ 0x9b22,      16,     {0x50, 0xfa, 0xa9, 0x07, 0x7b, 0x01, 0x7d, 0x10, 0x12, 0x95, 0xc1, 0xef, 0x4e, 0x70, 0x32, 0x90} },
+{ 0x9b32,      16,     {0x03, 0x59, 0xf0, 0xa3, 0xf0, 0xa3, 0xf0, 0xa3, 0xf0, 0xa3, 0xf0, 0xa3, 0x74, 0x10, 0xf0, 0xe5} },
+{ 0x9b42,      16,     {0x51, 0x24, 0x02, 0x90, 0x03, 0x60, 0xf0, 0xe4, 0x35, 0x50, 0x90, 0x03, 0x5f, 0xf0, 0x7e, 0x03} },
+{ 0x9b52,      16,     {0x7f, 0x59, 0x12, 0x19, 0xc1, 0xef, 0x64, 0x08, 0x60, 0x14, 0xe4, 0x90, 0x03, 0x38, 0xf0, 0x80} },
+{ 0x9b62,      16,     {0x0d, 0xe4, 0x90, 0x03, 0x38, 0xf0, 0x80, 0x06, 0x90, 0x03, 0x38, 0x74, 0x01, 0xf0, 0x90, 0x01} },
+{ 0x9b72,      16,     {0xc0, 0xe4, 0xf0, 0xa3, 0x74, 0x0a, 0xf0, 0x90, 0x01, 0xc0, 0xe0, 0x70, 0x02, 0xa3, 0xe0, 0x70} },
+{ 0x9b82,      15,     {0xf6, 0x7e, 0x03, 0x7f, 0x35, 0x7d, 0x24, 0x12, 0x8e, 0xb4, 0xe4, 0x90, 0x02, 0xaf, 0xf0} },
+{ 0x9b91,      1,      {0x22} },
+{ 0x9b92,      16,     {0xff, 0xfe, 0xfc, 0xf8, 0xf0, 0xe0, 0xc0, 0x80, 0x00, 0x01, 0x03, 0x07, 0x0f, 0x1f, 0x3f, 0x7f} },
+{ 0x9ba2,      16,     {0x00, 0x00, 0xc0, 0xc1, 0xc1, 0x81, 0x01, 0x40, 0xc3, 0x01, 0x03, 0xc0, 0x02, 0x80, 0xc2, 0x41} },
+{ 0x9bb2,      16,     {0xc6, 0x01, 0x06, 0xc0, 0x07, 0x80, 0xc7, 0x41, 0x05, 0x00, 0xc5, 0xc1, 0xc4, 0x81, 0x04, 0x40} },
+{ 0x9bc2,      16,     {0xcc, 0x01, 0x0c, 0xc0, 0x0d, 0x80, 0xcd, 0x41, 0x0f, 0x00, 0xcf, 0xc1, 0xce, 0x81, 0x0e, 0x40} },
+{ 0x9bd2,      16,     {0x0a, 0x00, 0xca, 0xc1, 0xcb, 0x81, 0x0b, 0x40, 0xc9, 0x01, 0x09, 0xc0, 0x08, 0x80, 0xc8, 0x41} },
+{ 0x9be2,      16,     {0xd8, 0x01, 0x18, 0xc0, 0x19, 0x80, 0xd9, 0x41, 0x1b, 0x00, 0xdb, 0xc1, 0xda, 0x81, 0x1a, 0x40} },
+{ 0x9bf2,      16,     {0x1e, 0x00, 0xde, 0xc1, 0xdf, 0x81, 0x1f, 0x40, 0xdd, 0x01, 0x1d, 0xc0, 0x1c, 0x80, 0xdc, 0x41} },
+{ 0x9c02,      16,     {0x14, 0x00, 0xd4, 0xc1, 0xd5, 0x81, 0x15, 0x40, 0xd7, 0x01, 0x17, 0xc0, 0x16, 0x80, 0xd6, 0x41} },
+{ 0x9c12,      16,     {0xd2, 0x01, 0x12, 0xc0, 0x13, 0x80, 0xd3, 0x41, 0x11, 0x00, 0xd1, 0xc1, 0xd0, 0x81, 0x10, 0x40} },
+{ 0x9c22,      16,     {0xf0, 0x01, 0x30, 0xc0, 0x31, 0x80, 0xf1, 0x41, 0x33, 0x00, 0xf3, 0xc1, 0xf2, 0x81, 0x32, 0x40} },
+{ 0x9c32,      16,     {0x36, 0x00, 0xf6, 0xc1, 0xf7, 0x81, 0x37, 0x40, 0xf5, 0x01, 0x35, 0xc0, 0x34, 0x80, 0xf4, 0x41} },
+{ 0x9c42,      16,     {0x3c, 0x00, 0xfc, 0xc1, 0xfd, 0x81, 0x3d, 0x40, 0xff, 0x01, 0x3f, 0xc0, 0x3e, 0x80, 0xfe, 0x41} },
+{ 0x9c52,      16,     {0xfa, 0x01, 0x3a, 0xc0, 0x3b, 0x80, 0xfb, 0x41, 0x39, 0x00, 0xf9, 0xc1, 0xf8, 0x81, 0x38, 0x40} },
+{ 0x9c62,      16,     {0x28, 0x00, 0xe8, 0xc1, 0xe9, 0x81, 0x29, 0x40, 0xeb, 0x01, 0x2b, 0xc0, 0x2a, 0x80, 0xea, 0x41} },
+{ 0x9c72,      16,     {0xee, 0x01, 0x2e, 0xc0, 0x2f, 0x80, 0xef, 0x41, 0x2d, 0x00, 0xed, 0xc1, 0xec, 0x81, 0x2c, 0x40} },
+{ 0x9c82,      16,     {0xe4, 0x01, 0x24, 0xc0, 0x25, 0x80, 0xe5, 0x41, 0x27, 0x00, 0xe7, 0xc1, 0xe6, 0x81, 0x26, 0x40} },
+{ 0x9c92,      16,     {0x22, 0x00, 0xe2, 0xc1, 0xe3, 0x81, 0x23, 0x40, 0xe1, 0x01, 0x21, 0xc0, 0x20, 0x80, 0xe0, 0x41} },
+{ 0x9ca2,      16,     {0xa0, 0x01, 0x60, 0xc0, 0x61, 0x80, 0xa1, 0x41, 0x63, 0x00, 0xa3, 0xc1, 0xa2, 0x81, 0x62, 0x40} },
+{ 0x9cb2,      16,     {0x66, 0x00, 0xa6, 0xc1, 0xa7, 0x81, 0x67, 0x40, 0xa5, 0x01, 0x65, 0xc0, 0x64, 0x80, 0xa4, 0x41} },
+{ 0x9cc2,      16,     {0x6c, 0x00, 0xac, 0xc1, 0xad, 0x81, 0x6d, 0x40, 0xaf, 0x01, 0x6f, 0xc0, 0x6e, 0x80, 0xae, 0x41} },
+{ 0x9cd2,      16,     {0xaa, 0x01, 0x6a, 0xc0, 0x6b, 0x80, 0xab, 0x41, 0x69, 0x00, 0xa9, 0xc1, 0xa8, 0x81, 0x68, 0x40} },
+{ 0x9ce2,      16,     {0x78, 0x00, 0xb8, 0xc1, 0xb9, 0x81, 0x79, 0x40, 0xbb, 0x01, 0x7b, 0xc0, 0x7a, 0x80, 0xba, 0x41} },
+{ 0x9cf2,      16,     {0xbe, 0x01, 0x7e, 0xc0, 0x7f, 0x80, 0xbf, 0x41, 0x7d, 0x00, 0xbd, 0xc1, 0xbc, 0x81, 0x7c, 0x40} },
+{ 0x9d02,      16,     {0xb4, 0x01, 0x74, 0xc0, 0x75, 0x80, 0xb5, 0x41, 0x77, 0x00, 0xb7, 0xc1, 0xb6, 0x81, 0x76, 0x40} },
+{ 0x9d12,      16,     {0x72, 0x00, 0xb2, 0xc1, 0xb3, 0x81, 0x73, 0x40, 0xb1, 0x01, 0x71, 0xc0, 0x70, 0x80, 0xb0, 0x41} },
+{ 0x9d22,      16,     {0x50, 0x00, 0x90, 0xc1, 0x91, 0x81, 0x51, 0x40, 0x93, 0x01, 0x53, 0xc0, 0x52, 0x80, 0x92, 0x41} },
+{ 0x9d32,      16,     {0x96, 0x01, 0x56, 0xc0, 0x57, 0x80, 0x97, 0x41, 0x55, 0x00, 0x95, 0xc1, 0x94, 0x81, 0x54, 0x40} },
+{ 0x9d42,      16,     {0x9c, 0x01, 0x5c, 0xc0, 0x5d, 0x80, 0x9d, 0x41, 0x5f, 0x00, 0x9f, 0xc1, 0x9e, 0x81, 0x5e, 0x40} },
+{ 0x9d52,      16,     {0x5a, 0x00, 0x9a, 0xc1, 0x9b, 0x81, 0x5b, 0x40, 0x99, 0x01, 0x59, 0xc0, 0x58, 0x80, 0x98, 0x41} },
+{ 0x9d62,      16,     {0x88, 0x01, 0x48, 0xc0, 0x49, 0x80, 0x89, 0x41, 0x4b, 0x00, 0x8b, 0xc1, 0x8a, 0x81, 0x4a, 0x40} },
+{ 0x9d72,      16,     {0x4e, 0x00, 0x8e, 0xc1, 0x8f, 0x81, 0x4f, 0x40, 0x8d, 0x01, 0x4d, 0xc0, 0x4c, 0x80, 0x8c, 0x41} },
+{ 0x9d82,      16,     {0x44, 0x00, 0x84, 0xc1, 0x85, 0x81, 0x45, 0x40, 0x87, 0x01, 0x47, 0xc0, 0x46, 0x80, 0x86, 0x41} },
+{ 0x9d92,      16,     {0x82, 0x01, 0x42, 0xc0, 0x43, 0x80, 0x83, 0x41, 0x41, 0x00, 0x81, 0xc1, 0x80, 0x81, 0x40, 0x40} },
+{ 0x9da2,      16,     {0xe4, 0xff, 0x74, 0xf8, 0x2f, 0xf5, 0x82, 0xe4, 0x34, 0x02, 0xf5, 0x83, 0xe0, 0x70, 0x03, 0x02} },
+{ 0x9db2,      16,     {0x9e, 0x45, 0x74, 0x36, 0x2f, 0xf8, 0xe6, 0x20, 0xe5, 0x03, 0x02, 0x9e, 0x45, 0xef, 0x75, 0xf0} },
+{ 0x9dc2,      16,     {0x08, 0xa4, 0x24, 0x00, 0xf5, 0x82, 0xe4, 0x34, 0x20, 0xad, 0x82, 0xfc, 0xf5, 0x83, 0xe5, 0x82} },
+{ 0x9dd2,      16,     {0x24, 0x05, 0xf5, 0x82, 0xe4, 0x35, 0x83, 0xf5, 0x83, 0xe0, 0x54, 0x60, 0x64, 0x60, 0x70, 0x63} },
+{ 0x9de2,      16,     {0xef, 0x25, 0xe0, 0x24, 0xef, 0xf5, 0x82, 0xe4, 0x34, 0x02, 0xf5, 0x83, 0xe4, 0x75, 0xf0, 0x01} },
+{ 0x9df2,      16,     {0x12, 0x9f, 0xa4, 0x85, 0xf0, 0x82, 0xf5, 0x83, 0xe0, 0x8d, 0x82, 0x8c, 0x83, 0xf0, 0x74, 0xf8} },
+{ 0x9e02,      16,     {0x2f, 0xf5, 0x82, 0xe4, 0x34, 0x02, 0xf5, 0x83, 0xe0, 0x14, 0xf0, 0x70, 0x36, 0xef, 0x25, 0xe0} },
+{ 0x9e12,      16,     {0x24, 0xc7, 0xf5, 0x82, 0xe4, 0x34, 0x7f, 0xf5, 0x83, 0xe4, 0xf0, 0xef, 0x25, 0xe0, 0xfe, 0xc3} },
+{ 0x9e22,      16,     {0x74, 0x0c, 0x9e, 0x75, 0xf0, 0x40, 0xa4, 0x24, 0x40, 0xf5, 0x82, 0xe5, 0xf0, 0x34, 0x7b, 0xad} },
+{ 0x9e32,      16,     {0x82, 0xfc, 0xef, 0x25, 0xe0, 0x24, 0xef, 0xf5, 0x82, 0xe4, 0x34, 0x02, 0xf5, 0x83, 0xec, 0xf0} },
+{ 0x9e42,      12,     {0xa3, 0xed, 0xf0, 0x0f, 0xef, 0x64, 0x04, 0x60, 0x03, 0x02, 0x9d, 0xa4} },
+{ 0x9e4e,      1,      {0x22} },
+{ 0x9e4f,      16,     {0xe7, 0x09, 0xf6, 0x08, 0xdf, 0xfa, 0x80, 0x46, 0xe7, 0x09, 0xf2, 0x08, 0xdf, 0xfa, 0x80, 0x3e} },
+{ 0x9e5f,      16,     {0x88, 0x82, 0x8c, 0x83, 0xe7, 0x09, 0xf0, 0xa3, 0xdf, 0xfa, 0x80, 0x32, 0xe3, 0x09, 0xf6, 0x08} },
+{ 0x9e6f,      16,     {0xdf, 0xfa, 0x80, 0x78, 0xe3, 0x09, 0xf2, 0x08, 0xdf, 0xfa, 0x80, 0x70, 0x88, 0x82, 0x8c, 0x83} },
+{ 0x9e7f,      16,     {0xe3, 0x09, 0xf0, 0xa3, 0xdf, 0xfa, 0x80, 0x64, 0x89, 0x82, 0x8a, 0x83, 0xe0, 0xa3, 0xf6, 0x08} },
+{ 0x9e8f,      16,     {0xdf, 0xfa, 0x80, 0x58, 0x89, 0x82, 0x8a, 0x83, 0xe0, 0xa3, 0xf2, 0x08, 0xdf, 0xfa, 0x80, 0x4c} },
+{ 0x9e9f,      16,     {0x80, 0xd2, 0x80, 0xfa, 0x80, 0xc6, 0x80, 0xd4, 0x80, 0x69, 0x80, 0xf2, 0x80, 0x33, 0x80, 0x10} },
+{ 0x9eaf,      16,     {0x80, 0xa6, 0x80, 0xea, 0x80, 0x9a, 0x80, 0xa8, 0x80, 0xda, 0x80, 0xe2, 0x80, 0xca, 0x80, 0x33} },
+{ 0x9ebf,      16,     {0x89, 0x82, 0x8a, 0x83, 0xec, 0xfa, 0xe4, 0x93, 0xa3, 0xc8, 0xc5, 0x82, 0xc8, 0xcc, 0xc5, 0x83} },
+{ 0x9ecf,      16,     {0xcc, 0xf0, 0xa3, 0xc8, 0xc5, 0x82, 0xc8, 0xcc, 0xc5, 0x83, 0xcc, 0xdf, 0xe9, 0xde, 0xe7, 0x80} },
+{ 0x9edf,      16,     {0x0d, 0x89, 0x82, 0x8a, 0x83, 0xe4, 0x93, 0xa3, 0xf6, 0x08, 0xdf, 0xf9, 0xec, 0xfa, 0xa9, 0xf0} },
+{ 0x9eef,      16,     {0xed, 0xfb, 0x22, 0x89, 0x82, 0x8a, 0x83, 0xec, 0xfa, 0xe0, 0xa3, 0xc8, 0xc5, 0x82, 0xc8, 0xcc} },
+{ 0x9eff,      16,     {0xc5, 0x83, 0xcc, 0xf0, 0xa3, 0xc8, 0xc5, 0x82, 0xc8, 0xcc, 0xc5, 0x83, 0xcc, 0xdf, 0xea, 0xde} },
+{ 0x9f0f,      16,     {0xe8, 0x80, 0xdb, 0x89, 0x82, 0x8a, 0x83, 0xe4, 0x93, 0xa3, 0xf2, 0x08, 0xdf, 0xf9, 0x80, 0xcc} },
+{ 0x9f1f,      16,     {0x88, 0xf0, 0xed, 0x24, 0x02, 0xb4, 0x04, 0x00, 0x50, 0xc2, 0xf5, 0x82, 0xeb, 0x24, 0x02, 0xb4} },
+{ 0x9f2f,      16,     {0x04, 0x00, 0x50, 0xb8, 0x23, 0x23, 0x45, 0x82, 0xf5, 0x82, 0xef, 0x4e, 0x60, 0xae, 0xef, 0x60} },
+{ 0x9f3f,      9,      {0x01, 0x0e, 0xe5, 0x82, 0x23, 0x90, 0x9e, 0x9f, 0x73} },
+{ 0x9f48,      16,     {0xbb, 0x01, 0x06, 0x89, 0x82, 0x8a, 0x83, 0xe0, 0x22, 0x50, 0x02, 0xe7, 0x22, 0xbb, 0xfe, 0x02} },
+{ 0x9f58,      9,      {0xe3, 0x22, 0x89, 0x82, 0x8a, 0x83, 0xe4, 0x93, 0x22} },
+{ 0x9f61,      16,     {0xbb, 0x01, 0x0c, 0xe5, 0x82, 0x29, 0xf5, 0x82, 0xe5, 0x83, 0x3a, 0xf5, 0x83, 0xe0, 0x22, 0x50} },
+{ 0x9f71,      16,     {0x06, 0xe9, 0x25, 0x82, 0xf8, 0xe6, 0x22, 0xbb, 0xfe, 0x06, 0xe9, 0x25, 0x82, 0xf8, 0xe2, 0x22} },
+{ 0x9f81,      13,     {0xe5, 0x82, 0x29, 0xf5, 0x82, 0xe5, 0x83, 0x3a, 0xf5, 0x83, 0xe4, 0x93, 0x22} },
+{ 0x9f8e,      16,     {0xc5, 0xf0, 0xf8, 0xa3, 0xe0, 0x28, 0xf0, 0xc5, 0xf0, 0xf8, 0xe5, 0x82, 0x15, 0x82, 0x70, 0x02} },
+{ 0x9f9e,      6,      {0x15, 0x83, 0xe0, 0x38, 0xf0, 0x22} },
+{ 0x9fa4,      16,     {0xa3, 0xf8, 0xe0, 0xc5, 0xf0, 0x25, 0xf0, 0xf0, 0xe5, 0x82, 0x15, 0x82, 0x70, 0x02, 0x15, 0x83} },
+{ 0x9fb4,      6,      {0xe0, 0xc8, 0x38, 0xf0, 0xe8, 0x22} },
+{ 0x9fba,      16,     {0xbb, 0x01, 0x10, 0xe5, 0x82, 0x29, 0xf5, 0x82, 0xe5, 0x83, 0x3a, 0xf5, 0x83, 0xe0, 0xf5, 0xf0} },
+{ 0x9fca,      16,     {0xa3, 0xe0, 0x22, 0x50, 0x09, 0xe9, 0x25, 0x82, 0xf8, 0x86, 0xf0, 0x08, 0xe6, 0x22, 0xbb, 0xfe} },
+{ 0x9fda,      16,     {0x0a, 0xe9, 0x25, 0x82, 0xf8, 0xe2, 0xf5, 0xf0, 0x08, 0xe2, 0x22, 0xe5, 0x83, 0x2a, 0xf5, 0x83} },
+{ 0x9fea,      8,      {0xe9, 0x93, 0xf5, 0xf0, 0xa3, 0xe9, 0x93, 0x22} },
+{ 0x9ff2,      16,     {0x75, 0xf0, 0x08, 0x75, 0x82, 0x00, 0xef, 0x2f, 0xff, 0xee, 0x33, 0xfe, 0xcd, 0x33, 0xcd, 0xcc} },
+{ 0xa002,      16,     {0x33, 0xcc, 0xc5, 0x82, 0x33, 0xc5, 0x82, 0x9b, 0xed, 0x9a, 0xec, 0x99, 0xe5, 0x82, 0x98, 0x40} },
+{ 0xa012,      16,     {0x0c, 0xf5, 0x82, 0xee, 0x9b, 0xfe, 0xed, 0x9a, 0xfd, 0xec, 0x99, 0xfc, 0x0f, 0xd5, 0xf0, 0xd6} },
+{ 0xa022,      16,     {0xe4, 0xce, 0xfb, 0xe4, 0xcd, 0xfa, 0xe4, 0xcc, 0xf9, 0xa8, 0x82, 0x22, 0xb8, 0x00, 0xc1, 0xb9} },
+{ 0xa032,      16,     {0x00, 0x59, 0xba, 0x00, 0x2d, 0xec, 0x8b, 0xf0, 0x84, 0xcf, 0xce, 0xcd, 0xfc, 0xe5, 0xf0, 0xcb} },
+{ 0xa042,      16,     {0xf9, 0x78, 0x18, 0xef, 0x2f, 0xff, 0xee, 0x33, 0xfe, 0xed, 0x33, 0xfd, 0xec, 0x33, 0xfc, 0xeb} },
+{ 0xa052,      16,     {0x33, 0xfb, 0x10, 0xd7, 0x03, 0x99, 0x40, 0x04, 0xeb, 0x99, 0xfb, 0x0f, 0xd8, 0xe5, 0xe4, 0xf9} },
+{ 0xa062,      16,     {0xfa, 0x22, 0x78, 0x18, 0xef, 0x2f, 0xff, 0xee, 0x33, 0xfe, 0xed, 0x33, 0xfd, 0xec, 0x33, 0xfc} },
+{ 0xa072,      16,     {0xc9, 0x33, 0xc9, 0x10, 0xd7, 0x05, 0x9b, 0xe9, 0x9a, 0x40, 0x07, 0xec, 0x9b, 0xfc, 0xe9, 0x9a} },
+{ 0xa082,      16,     {0xf9, 0x0f, 0xd8, 0xe0, 0xe4, 0xc9, 0xfa, 0xe4, 0xcc, 0xfb, 0x22, 0x75, 0xf0, 0x10, 0xef, 0x2f} },
+{ 0xa092,      16,     {0xff, 0xee, 0x33, 0xfe, 0xed, 0x33, 0xfd, 0xcc, 0x33, 0xcc, 0xc8, 0x33, 0xc8, 0x10, 0xd7, 0x07} },
+{ 0xa0a2,      16,     {0x9b, 0xec, 0x9a, 0xe8, 0x99, 0x40, 0x0a, 0xed, 0x9b, 0xfd, 0xec, 0x9a, 0xfc, 0xe8, 0x99, 0xf8} },
+{ 0xa0b2,      14,     {0x0f, 0xd5, 0xf0, 0xda, 0xe4, 0xcd, 0xfb, 0xe4, 0xcc, 0xfa, 0xe4, 0xc8, 0xf9, 0x22} },
+{ 0xa0c0,      16,     {0xeb, 0x9f, 0xf5, 0xf0, 0xea, 0x9e, 0x42, 0xf0, 0xe9, 0x9d, 0x42, 0xf0, 0xe8, 0x9c, 0x45, 0xf0} },
+{ 0xa0d0,      1,      {0x22} },
+{ 0xa0d1,      16,     {0xe8, 0x60, 0x0f, 0xec, 0xc3, 0x13, 0xfc, 0xed, 0x13, 0xfd, 0xee, 0x13, 0xfe, 0xef, 0x13, 0xff} },
+{ 0xa0e1,      3,      {0xd8, 0xf1, 0x22} },
+{ 0xa0e4,      16,     {0x08, 0x08, 0x08, 0xe6, 0xcf, 0x2f, 0xf6, 0x18, 0xe6, 0xce, 0x3e, 0xf6, 0x18, 0xe6, 0xcd, 0x3d} },
+{ 0xa0f4,      7,      {0xf6, 0x18, 0xe6, 0xcc, 0x3c, 0xf6, 0x22} },
+{ 0xa0fb,      12,     {0xec, 0xf0, 0xa3, 0xed, 0xf0, 0xa3, 0xee, 0xf0, 0xa3, 0xef, 0xf0, 0x22} },
+{ 0xa107,      16,     {0xa8, 0x82, 0x85, 0x83, 0xf0, 0xd0, 0x83, 0xd0, 0x82, 0x12, 0xa1, 0x1e, 0x12, 0xa1, 0x1e, 0x12} },
+{ 0xa117,      16,     {0xa1, 0x1e, 0x12, 0xa1, 0x1e, 0xe4, 0x73, 0xe4, 0x93, 0xa3, 0xc5, 0x83, 0xc5, 0xf0, 0xc5, 0x83} },
+{ 0xa127,      16,     {0xc8, 0xc5, 0x82, 0xc8, 0xf0, 0xa3, 0xc5, 0x83, 0xc5, 0xf0, 0xc5, 0x83, 0xc8, 0xc5, 0x82, 0xc8} },
+{ 0xa137,      1,      {0x22} },
 { 0xffff,      0,      {0x00} }
 };
 
index 860c381..912ae94 100644 (file)
@@ -1,6+1,6 @@
 /* Driver for Freecom USB/IDE adaptor
  *
- * $Id: freecom.c,v 1.12 2000/09/22 01:16:17 mdharm Exp $
+ * $Id: freecom.c,v 1.13 2000/10/03 01:06:07 mdharm Exp $
  *
  * Freecom v0.1:
  *
  * (http://www.freecom.de/)
  */
 
+#include <linux/config.h>
 #include "transport.h"
 #include "protocol.h"
 #include "usb.h"
 #include "freecom.h"
 #include "linux/hdreg.h"
 
+#ifdef CONFIG_USB_STORAGE_DEBUG
 static void pdump (void *, int);
+#endif
 
 struct freecom_udata {
         __u8    buffer[64];             /* Common command block. */
@@ -104,7+107,7 @@ struct freecom_status {
  * Transfer an entire SCSI command's worth of data payload over the bulk
  * pipe.
  *
- * Note that this uses us_transfer_partial to achieve it's goals -- this
+ * Note that this uses usb_stor_transfer_partial to achieve it's goals -- this
  * function simply determines if we're going to use scatter-gather or not,
  * and acts appropriately.  For now, it also re-interprets the error codes.
  */
@@ -133,11+136,12 @@ static void us_transfer_freecom(Scsi_Cmnd *srb, struct us_data* us, int transfer
                         * remaining data */
                        if (transfer_amount - total_transferred >= 
                                        sg[i].length) {
-                               result = us_transfer_partial(us, sg[i].address, 
-                                               sg[i].length);
+                               result = usb_stor_transfer_partial(us,
+                                               sg[i].address, sg[i].length);
                                total_transferred += sg[i].length;
                        } else
-                               result = us_transfer_partial(us, sg[i].address,
+                               result = usb_stor_transfer_partial(us,
+                                               sg[i].address,
                                                transfer_amount - total_transferred);
 
                        /* if we get an error, end the loop here */
@@ -147,7+151,7 @@ static void us_transfer_freecom(Scsi_Cmnd *srb, struct us_data* us, int transfer
        }
        else
                /* no scatter-gather, just make the request */
-               result = us_transfer_partial(us, srb->request_buffer, 
+               result = usb_stor_transfer_partial(us, srb->request_buffer, 
                                             transfer_amount);
 
        /* return the result in the data structure itself */
@@ -165,7+169,7 @@ freecom_ide_write (struct us_data *us, int reg, int value)
         int opipe;
         int result, partial;
 
-        printk (KERN_DEBUG "IDE out 0x%02x <- 0x%02x\n", reg, value);
+        US_DEBUGP("IDE out 0x%02x <- 0x%02x\n", reg, value);
 
         /* Get handles for both transports. */
         opipe = usb_sndbulkpipe (us->pusb_dev, us->ep_out);
@@ -247,7+251,7 @@ freecom_ide_read (struct us_data *us, int reg, int *value)
         else
                 *value = le16_to_cpu (*(__u16 *) buffer);
 
-        printk (KERN_DEBUG "IDE in  0x%02x -> 0x%02x\n", reg, *value);
+        US_DEBUGP("IDE in  0x%02x -> 0x%02x\n", reg, *value);
 
         return USB_STOR_TRANSPORT_GOOD;
 }
@@ -260,16+264,13 @@ freecom_readdata (Scsi_Cmnd *srb, struct us_data *us,
         struct freecom_xfer_wrap *fxfr =
                 (struct freecom_xfer_wrap *) extra->buffer;
         int result, partial;
-        int offset;
-        int this_read;
-        __u8 *buffer = extra->buffer;
 
         fxfr->Type = FCM_PACKET_INPUT | 0x00;
         fxfr->Timeout = 0;    /* Short timeout for debugging. */
         fxfr->Count = cpu_to_le32 (count);
         memset (fxfr->Pad, 0, sizeof (fxfr->Pad));
 
-        printk (KERN_DEBUG "Read data Freecom! (c=%d)\n", count);
+        US_DEBUGP("Read data Freecom! (c=%d)\n", count);
 
         /* Issue the transfer command. */
         result = usb_stor_bulk_msg (us, fxfr, opipe,
@@ -280,78+281,19 @@ freecom_readdata (Scsi_Cmnd *srb, struct us_data *us,
 
                /* -ENOENT -- we canceled this transfer */
                if (result == -ENOENT) {
-                       US_DEBUGP("us_transfer_partial(): transfer aborted\n");
+                       US_DEBUGP("freecom_readdata(): transfer aborted\n");
                        return US_BULK_TRANSFER_ABORTED;
                }
 
                 return USB_STOR_TRANSPORT_ERROR;
         }
-        printk (KERN_DEBUG "Done issuing read request: %d %d\n",
-                        result, partial);
+        US_DEBUGP("Done issuing read request: %d %d\n", result, partial);
 
         /* Now transfer all of our blocks. */
-       printk (KERN_DEBUG "Start of read\n");
+       US_DEBUGP("Start of read\n");
        us_transfer_freecom(srb, us, count);
-#if 0
-        if (srb->use_sg) {
-                US_DEBUGP ("Need to implement scatter-gather\n");
-                return USB_STOR_TRANSPORT_ERROR;
-        } else {
-                offset = 0;
-
-                while (offset < count) {
-#if 0
-                        this_read = count - offset;
-                        if (this_read > 64)
-                                this_read = 64;
-#else
-                        this_read = 64;
-#endif
-
-                        printk (KERN_DEBUG "Start of read\n");
-                        /* Use the given buffer directly, but only if there
-                         * is space for an entire packet. */
-
-                        if (offset + 64 <= srb->request_bufflen) {
-                                result = usb_stor_bulk_msg (
-                                                us, srb->request_buffer+offset,
-                                                ipipe, this_read, &partial);
-                                printk (KERN_DEBUG "Read111 = %d, %d\n",
-                                                result, partial);
-                                pdump (srb->request_buffer+offset,
-                                                partial);
-                        } else {
-                                result = usb_stor_bulk_msg (
-                                                us, buffer,
-                                                ipipe, this_read, &partial);
-                                printk (KERN_DEBUG "Read112 = %d, %d\n",
-                                                result, partial);
-                                memcpy (srb->request_buffer+offset,
-                                                buffer,
-                                                srb->request_bufflen - offset);
-                                pdump (srb->request_buffer+offset,
-                                               srb->request_bufflen - offset);
-                        }
-
-                        if (result != 0) {
-                                US_DEBUGP ("Freecom readblock r=%d, p=%d\n",
-                                                result, partial);
-
-                               /* -ENOENT -- we canceled this transfer */
-                               if (result == -ENOENT) {
-                                       US_DEBUGP("us_transfer_partial(): transfer aborted\n");
-                                       return US_BULK_TRANSFER_ABORTED;
-                               }
+        US_DEBUGP("freecom_readdata done!\n");
 
-                                return USB_STOR_TRANSPORT_ERROR;
-                        }
-
-                        offset += this_read;
-                }
-        }
-#endif
-
-        printk (KERN_DEBUG "freecom_readdata done!\n");
         return USB_STOR_TRANSPORT_GOOD;
 }
 
@@ -363,16+305,13 @@ freecom_writedata (Scsi_Cmnd *srb, struct us_data *us,
         struct freecom_xfer_wrap *fxfr =
                 (struct freecom_xfer_wrap *) extra->buffer;
         int result, partial;
-        int offset;
-        int this_write;
-        __u8 *buffer = extra->buffer;
 
         fxfr->Type = FCM_PACKET_OUTPUT | 0x00;
         fxfr->Timeout = 0;    /* Short timeout for debugging. */
         fxfr->Count = cpu_to_le32 (count);
         memset (fxfr->Pad, 0, sizeof (fxfr->Pad));
 
-        printk (KERN_DEBUG "Write data Freecom! (c=%d)\n", count);
+        US_DEBUGP("Write data Freecom! (c=%d)\n", count);
 
         /* Issue the transfer command. */
         result = usb_stor_bulk_msg (us, fxfr, opipe,
@@ -383,78+322,20 @@ freecom_writedata (Scsi_Cmnd *srb, struct us_data *us,
 
                /* -ENOENT -- we canceled this transfer */
                if (result == -ENOENT) {
-                       US_DEBUGP("us_transfer_partial(): transfer aborted\n");
+                       US_DEBUGP("freecom_writedata(): transfer aborted\n");
                        return US_BULK_TRANSFER_ABORTED;
                }
 
                 return USB_STOR_TRANSPORT_ERROR;
         }
-        printk (KERN_DEBUG "Done issuing write request: %d %d\n",
+        US_DEBUGP("Done issuing write request: %d %d\n",
                         result, partial);
 
         /* Now transfer all of our blocks. */
-       printk (KERN_DEBUG "Start of write\n");
+       US_DEBUGP("Start of write\n");
        us_transfer_freecom(srb, us, count);
-#if 0
-        if (srb->use_sg) {
-                US_DEBUGP ("Need to implement scatter-gather\n");
-                return USB_STOR_TRANSPORT_ERROR;
-        } else {
-                offset = 0;
-
-                while (offset < count) {
-#if 1
-                        this_write = count - offset;
-                        if (this_write > 64)
-                                this_write = 64;
-#else
-                        this_write = 64;
-#endif
-
-                        printk (KERN_DEBUG "Start of write\n");
-                        /* Use the given buffer directly, but only if there
-                         * is space for an entire packet. */
-
-                        if (offset + 64 <= srb->request_bufflen) {
-                                result = usb_stor_bulk_msg (
-                                                us, srb->request_buffer+offset,
-                                                opipe, this_write, &partial);
-                                printk (KERN_DEBUG "Write111 = %d, %d\n",
-                                                result, partial);
-                                pdump (srb->request_buffer+offset,
-                                                partial);
-                        } else {
-                                result = usb_stor_bulk_msg (
-                                                us, buffer,
-                                                opipe, this_write, &partial);
-                                printk (KERN_DEBUG "Write112 = %d, %d\n",
-                                                result, partial);
-                                memcpy (buffer,
-                                                srb->request_buffer+offset,
-                                                srb->request_bufflen - offset);
-                                pdump (srb->request_buffer+offset,
-                                               srb->request_bufflen - offset);
-                        }
-
-                        if (result != 0) {
-                                US_DEBUGP ("Freecom writeblock r=%d, p=%d\n",
-                                                result, partial);
-
-                               /* -ENOENT -- we canceled this transfer */
-                               if (result == -ENOENT) {
-                                       US_DEBUGP("us_transfer_partial(): transfer aborted\n");
-                                       return US_BULK_TRANSFER_ABORTED;
-                               }
-
-                                return USB_STOR_TRANSPORT_ERROR;
-                        }
-
-                        offset += this_write;
-                }
-        }
-#endif
 
-        printk (KERN_DEBUG "freecom_writedata done!\n");
+        US_DEBUGP("freecom_writedata done!\n");
         return USB_STOR_TRANSPORT_GOOD;
 }
 
@@ -477,7+358,7 @@ int freecom_transport(Scsi_Cmnd *srb, struct us_data *us)
         fcb = (struct freecom_cb_wrap *) extra->buffer;
         fst = (struct freecom_status *) extra->buffer;
 
-        printk (KERN_DEBUG "Freecom TRANSPORT STARTED\n");
+        US_DEBUGP("Freecom TRANSPORT STARTED\n");
 
         /* Get handles for both transports. */
         opipe = usb_sndbulkpipe (us->pusb_dev, us->ep_out);
@@ -496,7+377,7 @@ int freecom_transport(Scsi_Cmnd *srb, struct us_data *us)
         memcpy (fcb->Atapi, srb->cmnd, 12);
         memset (fcb->Filler, 0, sizeof (fcb->Filler));
 
-        pdump (srb->cmnd, 12);
+        US_DEBUG(pdump (srb->cmnd, 12));
 
         /* Send it out. */
         result = usb_stor_bulk_msg (us, fcb, opipe,
@@ -511,7+392,7 @@ int freecom_transport(Scsi_Cmnd *srb, struct us_data *us)
 
                /* -ENOENT -- we canceled this transfer */
                if (result == -ENOENT) {
-                       US_DEBUGP("us_transfer_partial(): transfer aborted\n");
+                       US_DEBUGP("freecom_transport(): transfer aborted\n");
                        return US_BULK_TRANSFER_ABORTED;
                }
 
@@ -522,14+403,14 @@ int freecom_transport(Scsi_Cmnd *srb, struct us_data *us)
          * doesn't hurt us to always do it now. */
         result = usb_stor_bulk_msg (us, fst, ipipe,
                         FCM_PACKET_LENGTH, &partial);
-        printk (KERN_DEBUG "foo Status result %d %d\n", result, partial);
+        US_DEBUGP("foo Status result %d %d\n", result, partial);
        /* -ENOENT -- we canceled this transfer */
        if (result == -ENOENT) {
-               US_DEBUGP("us_transfer_partial(): transfer aborted\n");
+               US_DEBUGP("freecom_transport(): transfer aborted\n");
                return US_BULK_TRANSFER_ABORTED;
        }
 
-        pdump ((void *) fst, partial);
+        US_DEBUG(pdump ((void *) fst, partial));
 
        /* while we haven't recieved the IRQ */
        while (!(fst->Status & 0x2)) {
@@ -545,16+426,17 @@ int freecom_transport(Scsi_Cmnd *srb, struct us_data *us)
                result = usb_stor_bulk_msg (us, fcb, opipe,
                                FCM_PACKET_LENGTH, &partial);
                
-               /* The Freecom device will only fail if there is something wrong in
-                * USB land.  It returns the status in its own registers, which
-                * come back in the bulk pipe. */
+               /* The Freecom device will only fail if there is something
+                * wrong in USB land.  It returns the status in its own
+                * registers, which come back in the bulk pipe.
+                */
                if (result != 0) {
                        US_DEBUGP ("freecom xport failure: r=%d, p=%d\n",
                                        result, partial);
                        
                        /* -ENOENT -- we canceled this transfer */
                        if (result == -ENOENT) {
-                               US_DEBUGP("us_transfer_partial(): transfer aborted\n");
+                               US_DEBUGP("freecom_transport(): transfer aborted\n");
                                return US_BULK_TRANSFER_ABORTED;
                        }
                        
@@ -564,35+446,35 @@ int freecom_transport(Scsi_Cmnd *srb, struct us_data *us)
                /* actually get the status info */
                result = usb_stor_bulk_msg (us, fst, ipipe,
                                FCM_PACKET_LENGTH, &partial);
-               printk (KERN_DEBUG "bar Status result %d %d\n", result, partial);
+               US_DEBUGP("bar Status result %d %d\n", result, partial);
                /* -ENOENT -- we canceled this transfer */
                if (result == -ENOENT) {
-                       US_DEBUGP("us_transfer_partial(): transfer aborted\n");
+                       US_DEBUGP("freecom_transport(): transfer aborted\n");
                        return US_BULK_TRANSFER_ABORTED;
                }
 
-               pdump ((void *) fst, partial);
+               US_DEBUG(pdump ((void *) fst, partial));
        }
        
         if (partial != 4 || result != 0) {
                 return USB_STOR_TRANSPORT_ERROR;
         }
         if ((fst->Status & 1) != 0) {
-                printk (KERN_DEBUG "operation failed\n");
+                US_DEBUGP("operation failed\n");
                 return USB_STOR_TRANSPORT_FAILED;
         }
 
         /* The device might not have as much data available as we
          * requested.  If you ask for more than the device has, this reads
          * and such will hang. */
-        printk (KERN_DEBUG "Device indicates that it has %d bytes available\n",
+        US_DEBUGP("Device indicates that it has %d bytes available\n",
                         le16_to_cpu (fst->Count));
 
         /* Find the length we desire to read.  It is the lesser of the SCSI
          * layer's requested length, and the length the device claims to
          * have available. */
-        length = us_transfer_length (srb);
-        printk (KERN_DEBUG "SCSI requested %d\n", length);
+        length = usb_stor_transfer_length (srb);
+        US_DEBUGP("SCSI requested %d\n", length);
         if (length > le16_to_cpu (fst->Count))
                 length = le16_to_cpu (fst->Count);
 
@@ -604,17+486,17 @@ int freecom_transport(Scsi_Cmnd *srb, struct us_data *us)
                 /* Make sure that the status indicates that the device
                  * wants data as well. */
                 if ((fst->Status & DRQ_STAT) == 0 || (fst->Reason & 3) != 2) {
-                        printk (KERN_DEBUG "SCSI wants data, drive doesn't have any\n");
+                        US_DEBUGP("SCSI wants data, drive doesn't have any\n");
                         return USB_STOR_TRANSPORT_FAILED;
                 }
                 result = freecom_readdata (srb, us, ipipe, opipe, length);
                 if (result != USB_STOR_TRANSPORT_GOOD)
                         return result;
 
-                printk (KERN_DEBUG "FCM: Waiting for status\n");
+                US_DEBUGP("FCM: Waiting for status\n");
                 result = usb_stor_bulk_msg (us, fst, ipipe,
                                 FCM_PACKET_LENGTH, &partial);
-               pdump ((void *) fst, partial);
+               US_DEBUG(pdump ((void *) fst, partial));
                 if (result == -ENOENT) {
                         US_DEBUGP ("freecom_transport: transfer aborted\n");
                         return US_BULK_TRANSFER_ABORTED;
@@ -622,14+504,14 @@ int freecom_transport(Scsi_Cmnd *srb, struct us_data *us)
                 if (partial != 4 || result != 0)
                         return USB_STOR_TRANSPORT_ERROR;
                 if ((fst->Status & ERR_STAT) != 0) {
-                        printk (KERN_DEBUG "operation failed\n");
+                        US_DEBUGP("operation failed\n");
                         return USB_STOR_TRANSPORT_FAILED;
                 }
                 if ((fst->Reason & 3) != 3) {
-                        printk (KERN_DEBUG "Drive seems still hungry\n");
+                        US_DEBUGP("Drive seems still hungry\n");
                         return USB_STOR_TRANSPORT_FAILED;
                 }
-                printk (KERN_DEBUG "Transfer happy\n");
+                US_DEBUGP("Transfer happy\n");
                 break;
 
         case SCSI_DATA_WRITE:
@@ -641,7+523,7 @@ int freecom_transport(Scsi_Cmnd *srb, struct us_data *us)
                         return result;
 
 #if 1
-                printk (KERN_DEBUG "FCM: Waiting for status\n");
+                US_DEBUGP("FCM: Waiting for status\n");
                 result = usb_stor_bulk_msg (us, fst, ipipe,
                                 FCM_PACKET_LENGTH, &partial);
                 if (result == -ENOENT) {
@@ -651,15+533,15 @@ int freecom_transport(Scsi_Cmnd *srb, struct us_data *us)
                 if (partial != 4 || result != 0)
                         return USB_STOR_TRANSPORT_ERROR;
                 if ((fst->Status & ERR_STAT) != 0) {
-                        printk (KERN_DEBUG "operation failed\n");
+                        US_DEBUGP("operation failed\n");
                         return USB_STOR_TRANSPORT_FAILED;
                 }
                 if ((fst->Reason & 3) != 3) {
-                        printk (KERN_DEBUG "Drive seems still hungry\n");
+                        US_DEBUGP("Drive seems still hungry\n");
                         return USB_STOR_TRANSPORT_FAILED;
                 }
 #endif
-                printk (KERN_DEBUG "Transfer happy\n");
+                US_DEBUGP("Transfer happy\n");
                 break;
 
 
@@ -675,27+557,12 @@ int freecom_transport(Scsi_Cmnd *srb, struct us_data *us)
                 break;
         }
 
-#if 0
-        /* After the transfer, we can read our status register. */
-        printk (KERN_DEBUG "Going to read status register\n");
-        result = usb_stor_bulk_msg (us, &fst, ipipe,
-                        FCM_PACKET_LENGTH, &partial);
-        printk (KERN_DEBUG "Result from read %d %d\n", result, partial);
-        if (result != 0) {
-                return USB_STOR_TRANSPORT_ERROR;
-        }
-        if ((fst.Reason & 1) != 0) {
-                return USB_STOR_TRANSPORT_FAILED;
-        }
-#endif
-
         return USB_STOR_TRANSPORT_GOOD;
 
-        printk (KERN_DEBUG "Freecom: transfer_length = %d\n",
-                        us_transfer_length (srb));
+        US_DEBUGP("Freecom: transfer_length = %d\n",
+                       usb_stor_transfer_length (srb));
 
-        printk (KERN_DEBUG "Freecom: direction = %d\n",
-                        srb->sc_data_direction);
+        US_DEBUGP("Freecom: direction = %d\n", srb->sc_data_direction);
 
         return USB_STOR_TRANSPORT_ERROR;
 }
@@ -713,13+580,14 @@ freecom_init (struct us_data *us)
                 us->extra = kmalloc (sizeof (struct freecom_udata),
                                 GFP_KERNEL);
                 if (us->extra == NULL) {
-                        printk (KERN_WARNING USB_STORAGE "Out of memory\n");
+                        US_DEBUGP("Out of memory\n");
                         return USB_STOR_TRANSPORT_ERROR;
                 }
         }
 
-       result = usb_stor_control_msg(us, usb_rcvctrlpipe(us->pusb_dev, 0),
-                       0x4c, 0xc0, 0x4346, 0x0, buffer, 0x20);
+       result = usb_control_msg(us->pusb_dev,
+                       usb_rcvctrlpipe(us->pusb_dev, 0),
+                       0x4c, 0xc0, 0x4346, 0x0, buffer, 0x20, 3*HZ);
        buffer[32] = '\0';
        US_DEBUGP("String returned from FC init is: %s\n", buffer);
 
@@ -736,7+604,7 @@ freecom_init (struct us_data *us)
                 if (result != USB_STOR_TRANSPORT_GOOD)
                         return result;
                 if (counter-- < 0) {
-                        printk (KERN_WARNING USB_STORAGE "Timeout in freecom");
+                        US_DEBUGP("Timeout in freecom");
                         return USB_STOR_TRANSPORT_ERROR;
                 }
         } while ((value & 0x80) != 0);
@@ -751,7+619,7 @@ freecom_init (struct us_data *us)
                 if (result != USB_STOR_TRANSPORT_GOOD)
                         return result;
                 if (counter-- < 0) {
-                        printk (KERN_WARNING USB_STORAGE "Timeout in freecom");
+                        US_DEBUGP("Timeout in freecom");
                         return USB_STOR_TRANSPORT_ERROR;
                 }
         } while ((value & 0x80) != 0);
@@ -765,12+633,13 @@ freecom_init (struct us_data *us)
 
 int usb_stor_freecom_reset(struct us_data *us)
 {
-        printk (KERN_DEBUG "freecom reset called\n");
+        printk (KERN_CRIT "freecom reset called\n");
 
         /* We don't really have this feature. */
-        return USB_STOR_TRANSPORT_ERROR;
+        return FAILED;
 }
 
+#ifdef CONFIG_USB_STORAGE_DEBUG
 static void pdump (void *ibuffer, int length)
 {
        static char line[80];
@@ -791,7+660,7 @@ static void pdump (void *ibuffer, int length)
                                                line[offset++] = '.';
                                }
                                line[offset] = 0;
-                               printk (KERN_DEBUG "%s\n", line);
+                               US_DEBUGP("%s\n", line);
                                offset = 0;
                        }
                        offset += sprintf (line+offset, "%08x:", i);
@@ -819,7+688,8 @@ static void pdump (void *ibuffer, int length)
                        line[offset++] = '.';
        }
        line[offset] = 0;
-       printk (KERN_DEBUG "%s\n", line);
+       US_DEBUGP("%s\n", line);
        offset = 0;
 }
+#endif
 
index 5641a75..cbf3db2 100644 (file)
@@ -1,6+1,6 @@
 /* Driver for SanDisk SDDR-09 SmartMedia reader
  *
- * $Id: sddr09.c,v 1.10 2000/08/25 00:13:51 mdharm Exp $
+ * $Id: sddr09.c,v 1.12 2000/10/03 01:06:07 mdharm Exp $
  *
  * SDDR09 driver v0.1:
  *
 #include <linux/errno.h>
 #include <linux/malloc.h>
 
-extern int usb_stor_control_msg(struct us_data *us, unsigned int pipe,
-       u8 request, u8 requesttype, u16 value, u16 index,
-       void *data, u16 size);
-extern int usb_stor_bulk_msg(struct us_data *us, void *data, int pipe,
-       unsigned int len, unsigned int *act_len);
-
 #define short_pack(lsb,msb) ( ((u16)(lsb)) | ( ((u16)(msb))<<8 ) )
 #define LSB_of(s) ((s)&0xFF)
 #define MSB_of(s) ((s)>>8)
@@ -418,7+412,7 @@ int sddr09_read_control(struct us_data *us,
                MSB_of(blocks), LSB_of(blocks)
        };
 
-       US_DEBUGP("Read control address %08X blocks %04X\n",
+       US_DEBUGP("Read control address %08lX blocks %04X\n",
                address, blocks);
 
        result = sddr09_send_control(us,
@@ -814,8+808,8 @@ int sddr09_transport(Scsi_Cmnd *srb, struct us_data *us)
        unsigned char inquiry_response[36] = {
                0x00, 0x80, 0x00, 0x02, 0x1F, 0x00, 0x00, 0x00
        };
-       unsigned char mode_page_01[12] = {
-               0x01, 0x0a, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+       unsigned char mode_page_01[4] = { // write-protected for now
+               0x03, 0x00, 0x80, 0x00
        };
        unsigned char *ptr;
        unsigned long capacity;
@@ -887,14+881,14 @@ int sddr09_transport(Scsi_Cmnd *srb, struct us_data *us)
        }
 
        if (srb->cmnd[0] == MODE_SENSE) {
-       
+
                        // Read-write error recovery page: there needs to
                        // be a check for write-protect here
 
                if ( (srb->cmnd[2] & 0x3F) == 0x01 ) {
-                       if (ptr==NULL || srb->request_bufflen<12)
+                       if (ptr==NULL || srb->request_bufflen<4)
                                return USB_STOR_TRANSPORT_ERROR;
-                       memcpy(ptr, mode_page_01, 12);
+                       memcpy(ptr, mode_page_01, sizeof(mode_page_01));
                        return USB_STOR_TRANSPORT_GOOD;
                }
 
index ebfda2b..8971a14 100644 (file)
@@ -1,6+1,6 @@
 /* Driver for USB Mass Storage compliant devices
  *
- * $Id: transport.c,v 1.27 2000/09/28 21:54:30 mdharm Exp $
+ * $Id: transport.c,v 1.28 2000/10/03 01:06:07 mdharm Exp $
  *
  * Current development and maintenance by:
  *   (c) 1999, 2000 Matthew Dharm (mdharm-usb@one-eyed-alien.net)
 /* Calculate the length of the data transfer (not the command) for any
  * given SCSI command
  */
-static unsigned int us_transfer_length(Scsi_Cmnd *srb)
+unsigned int usb_stor_transfer_length(Scsi_Cmnd *srb)
 {
        int i;
        int doDefault = 0;
@@ -506,7+506,7 @@ int usb_stor_bulk_msg(struct us_data *us, void *data, int pipe,
  * timeout limit.  Thus we don't have to worry about it for individual
  * packets.
  */
-static int us_transfer_partial(struct us_data *us, char *buf, int length)
+int usb_stor_transfer_partial(struct us_data *us, char *buf, int length)
 {
        int result;
        int partial;
@@ -519,7+519,7 @@ static int us_transfer_partial(struct us_data *us, char *buf, int length)
                pipe = usb_sndbulkpipe(us->pusb_dev, us->ep_out);
 
        /* transfer the data */
-       US_DEBUGP("us_transfer_partial(): xfer %d bytes\n", length);
+       US_DEBUGP("usb_stor_transfer_partial(): xfer %d bytes\n", length);
        result = usb_stor_bulk_msg(us, buf, pipe, length, &partial);
        US_DEBUGP("usb_stor_bulk_msg() returned %d xferred %d/%d\n",
                  result, partial, length);
@@ -532,7+532,7 @@ static int us_transfer_partial(struct us_data *us, char *buf, int length)
        
        /* did we send all the data? */
        if (partial == length) {
-               US_DEBUGP("us_transfer_partial(): transfer complete\n");
+               US_DEBUGP("usb_stor_transfer_partial(): transfer complete\n");
                return US_BULK_TRANSFER_GOOD;
        }
 
@@ -540,18+540,18 @@ static int us_transfer_partial(struct us_data *us, char *buf, int length)
        if (result) {
                /* NAK - that means we've retried a few times allready */
                if (result == -ETIMEDOUT) {
-                       US_DEBUGP("us_transfer_partial(): device NAKed\n");
+                       US_DEBUGP("usb_stor_transfer_partial(): device NAKed\n");
                        return US_BULK_TRANSFER_FAILED;
                }
 
                /* -ENOENT -- we canceled this transfer */
                if (result == -ENOENT) {
-                       US_DEBUGP("us_transfer_partial(): transfer aborted\n");
+                       US_DEBUGP("usb_stor_transfer_partial(): transfer aborted\n");
                        return US_BULK_TRANSFER_ABORTED;
                }
 
                /* the catch-all case */
-               US_DEBUGP("us_transfer_partial(): unknown error\n");
+               US_DEBUGP("usb_stor_transfer_partial(): unknown error\n");
                return US_BULK_TRANSFER_FAILED;
        }
 
@@ -564,7+564,7 @@ static int us_transfer_partial(struct us_data *us, char *buf, int length)
  * Transfer an entire SCSI command's worth of data payload over the bulk
  * pipe.
  *
- * Note that this uses us_transfer_partial to achieve it's goals -- this
+ * Note that this uses usb_stor_transfer_partial to achieve it's goals -- this
  * function simply determines if we're going to use scatter-gather or not,
  * and acts appropriately.  For now, it also re-interprets the error codes.
  */
@@ -577,7+577,7 @@ static void us_transfer(Scsi_Cmnd *srb, struct us_data* us)
        unsigned int transfer_amount;
 
        /* calculate how much we want to transfer */
-       transfer_amount = us_transfer_length(srb);
+       transfer_amount = usb_stor_transfer_length(srb);
 
        /* was someone foolish enough to request more data than available
         * buffer space? */
@@ -597,11+597,12 @@ static void us_transfer(Scsi_Cmnd *srb, struct us_data* us)
                         * remaining data */
                        if (transfer_amount - total_transferred >= 
                                        sg[i].length) {
-                               result = us_transfer_partial(us, sg[i].address, 
-                                               sg[i].length);
+                               result = usb_stor_transfer_partial(us,
+                                               sg[i].address, sg[i].length);
                                total_transferred += sg[i].length;
                        } else
-                               result = us_transfer_partial(us, sg[i].address,
+                               result = usb_stor_transfer_partial(us,
+                                               sg[i].address,
                                                transfer_amount - total_transferred);
 
                        /* if we get an error, end the loop here */
@@ -611,7+612,7 @@ static void us_transfer(Scsi_Cmnd *srb, struct us_data* us)
        }
        else
                /* no scatter-gather, just make the request */
-               result = us_transfer_partial(us, srb->request_buffer, 
+               result = usb_stor_transfer_partial(us, srb->request_buffer, 
                                             transfer_amount);
 
        /* return the result in the data structure itself */
@@ -873,7+874,7 @@ int usb_stor_CBI_transport(Scsi_Cmnd *srb, struct us_data *us)
 
        /* DATA STAGE */
        /* transfer the data payload for this command, if one exists*/
-       if (us_transfer_length(srb)) {
+       if (usb_stor_transfer_length(srb)) {
                us_transfer(srb, us);
                US_DEBUGP("CBI data stage result is 0x%x\n", srb->result);
 
@@ -978,7+979,7 @@ int usb_stor_CB_transport(Scsi_Cmnd *srb, struct us_data *us)
 
        /* DATA STAGE */
        /* transfer the data payload for this command, if one exists*/
-       if (us_transfer_length(srb)) {
+       if (usb_stor_transfer_length(srb)) {
                us_transfer(srb, us);
                US_DEBUGP("CB data stage result is 0x%x\n", srb->result);
 
@@ -1042,7+1043,7 @@ int usb_stor_Bulk_transport(Scsi_Cmnd *srb, struct us_data *us)
        
        /* set up the command wrapper */
        bcb.Signature = cpu_to_le32(US_BULK_CB_SIGN);
-       bcb.DataTransferLength = cpu_to_le32(us_transfer_length(srb));
+       bcb.DataTransferLength = cpu_to_le32(usb_stor_transfer_length(srb));
        bcb.Flags = srb->sc_data_direction == SCSI_DATA_READ ? 1 << 7 : 0;
        bcb.Tag = srb->serial_number;
        bcb.Lun = srb->cmnd[1] >> 5;
index 7590f17..df6719c 100644 (file)
@@ -1,7+1,7 @@
 /* Driver for USB Mass Storage compliant devices
  * Transport Functions Header File
  *
- * $Id: transport.h,v 1.12 2000/09/08 21:20:06 mdharm Exp $
+ * $Id: transport.h,v 1.13 2000/10/03 01:06:07 mdharm Exp $
  *
  * Current development and maintenance by:
  *   (c) 1999, 2000 Matthew Dharm (mdharm-usb@one-eyed-alien.net)
@@ -136,8+136,11 @@ extern int usb_stor_Bulk_transport(Scsi_Cmnd*, struct us_data*);
 extern int usb_stor_Bulk_max_lun(struct us_data*);
 extern int usb_stor_Bulk_reset(struct us_data*);
 
-void usb_stor_invoke_transport(Scsi_Cmnd *, struct us_data *);
-
-extern int dpcm_transport(Scsi_Cmnd *srb, struct us_data *us);
-
+extern unsigned int usb_stor_transfer_length(Scsi_Cmnd*);
+extern void usb_stor_invoke_transport(Scsi_Cmnd*, struct us_data*);
+extern int usb_stor_transfer_partial(struct us_data*, char*, int);
+extern int usb_stor_bulk_msg(struct us_data*, void*, int, unsigned int,
+               unsigned int*);
+extern int usb_stor_control_msg(struct us_data*, unsigned int, u8, u8,
+               u16, u16, void*, u16);
 #endif
index fbed8c1..3c37f3e 100644 (file)
  * (C) Copyright 1999 Johannes Erdfelt
  * (C) Copyright 1999 Randy Dunlap
  *
- * $Id: usb-uhci.c,v 1.239 2000/09/19 20:15:12 acher Exp $
+ * $Id: usb-uhci.c,v 1.242 2000/10/05 21:19:49 acher Exp $
  */
 
 #include <linux/config.h>
 /* This enables an extra UHCI slab for memory debugging */
 #define DEBUG_SLAB
 
-#define VERSTR "$Revision: 1.239 $ time " __TIME__ " " __DATE__
+#define VERSTR "$Revision: 1.242 $ time " __TIME__ " " __DATE__
 
 #include <linux/usb.h>
 #include "usb-uhci.h"
@@ -2563,6+2563,8 @@ _static int process_urb (uhci_t *s, struct list_head *p)
                                        uhci_submit_urb (urb);
                                }
                        }
+                       else if (!urb->complete)
+                               urb->dev = NULL;
 
                        if (proceed && urb->next) {
                                // if there are linked urbs - handle submitting of them right now.
@@ -2580,9+2582,10 @@ _static int process_urb (uhci_t *s, struct list_head *p)
                                        urb->dev=NULL;
                                        urb->complete ((struct urb *) urb);
                                }
+                               else
+                                       urb->dev=NULL;
                        }
                        
-                       urb->dev=NULL; // Just in case no completion was called
                        usb_dec_dev_use (usb_dev);
                        spin_unlock(&urb->lock);                
                        spin_lock(&s->urb_list_lock);
index 145e117..328daa9 100644 (file)
@@ -706,7+706,7 @@ void set_blocksize(kdev_t dev, int size)
 static void refill_freelist(int size)
 {
        if (!grow_buffers(size)) {
-               wakeup_bdflush(1);
+               wakeup_bdflush(1);  /* Sets task->state to TASK_RUNNING */
                current->policy |= SCHED_YIELD;
                schedule();
        }
@@ -2060,7+2060,7 @@ int brw_kiovec(int rw, int nr, struct kiobuf *iovec[],
            buffer_heads and exit. */
        spin_lock(&unused_list_lock);
        for (i = bhind; --i >= 0; ) {
-               __put_unused_buffer_head(bh[bhind]);
+               __put_unused_buffer_head(bh[i]);
        }
        spin_unlock(&unused_list_lock);
        goto finished;
index a268be2..dce2687 100644 (file)
@@ -225,13+225,16 @@ struct inode * minix_new_inode(const struct inode * dir, int * error)
        int i,j;
 
        inode = get_empty_inode();
-       if (!inode)
+       if (!inode) {
+               *error = -ENOMEM;
                return NULL;
+       }
        sb = dir->i_sb;
        inode->i_sb = sb;
        inode->i_flags = 0;
        j = 8192;
        bh = NULL;
+       *error = -ENOSPC;
        lock_super(sb);
        for (i = 0; i < sb->u.minix_sb.s_imap_blocks; i++) {
                bh = inode->i_sb->u.minix_sb.s_imap[i];
index 870656c..eadbb79 100644 (file)
@@ -210,10+210,8 @@ static int minix_create(struct inode * dir, struct dentry *dentry, int mode)
        struct minix_dir_entry * de;
 
        inode = minix_new_inode(dir, &error);
-       if (error)
-               return error;
        if (!inode)
-               return -ENOSPC;
+               return error;
        inode->i_op = &minix_file_inode_operations;
        inode->i_fop = &minix_file_operations;
        inode->i_mapping->a_ops = &minix_aops;
@@ -242,10+240,8 @@ static int minix_mknod(struct inode * dir, struct dentry *dentry, int mode, int
        struct minix_dir_entry * de;
 
        inode = minix_new_inode(dir, &error);
-       if (error)
-               return error;
        if (!inode)
-               return -ENOSPC;
+               return error;
        inode->i_uid = current->fsuid;
        init_special_inode(inode, mode, rdev);
        mark_inode_dirty(inode);
@@ -275,10+271,8 @@ static int minix_mkdir(struct inode * dir, struct dentry *dentry, int mode)
        if (dir->i_nlink >= info->s_link_max)
                return -EMLINK;
        inode = minix_new_inode(dir, &error);
-       if (error)
-               return error;
        if (!inode)
-               return -ENOSPC;
+               return error;
        inode->i_op = &minix_dir_inode_operations;
        inode->i_fop = &minix_dir_operations;
        inode->i_size = 2 * info->s_dirsize;
@@ -461,9+455,6 @@ static int minix_symlink(struct inode * dir, struct dentry *dentry,
        if (i>1024)
                goto out;
        inode = minix_new_inode(dir, &err);
-       if (err)
-               goto out;
-       err = -ENOSPC;
        if (!inode)
                goto out;
 
index 86a7366..292765e 100644 (file)
 #define F_EXLCK                16      /* or 3 */
 #define F_SHLCK                32      /* or 4 */
 
-#define F_INPROGRESS   16
+#define F_INPROGRESS   64
 
 /* operations for bsd flock(), also used by the kernel implementation */
 #define LOCK_SH                1       /* shared lock */
index b97d0c5..6d34c54 100644 (file)
 #define START_ADDR     (PAGE_OFFSET+KERNEL_START_PHYS+0x10000)
 
 #ifndef __ASSEMBLY__
+#include <linux/kernel.h>
 
 /*
  * This is the logout header that should be common to all platforms
index 6300d86..0376e7a 100644 (file)
  *
  * For initialized data not at file scope, i.e. within a function,
  * you should use __initlocaldata instead, due to a bug in GCC 2.7.
+ * Don't forget to initialize the data, as gcc otherwise puts the
+ * data into the bss section and not into the init section.
  */
 
 #ifndef MODULE
index 0985c29..f44001d 100644 (file)
@@ -132,17+132,33 @@ struct isapnp_resources {
 #define ISAPNP_CARD_DEVS       8
 
 #define ISAPNP_CARD_ID(_va, _vb, _vc, _device) \
-               vendor: ISAPNP_VENDOR(_va, _vb, _vc), device: ISAPNP_DEVICE(_device)
+               card_vendor: ISAPNP_VENDOR(_va, _vb, _vc), card_device: ISAPNP_DEVICE(_device)
 #define ISAPNP_CARD_END \
-               vendor: 0, device: 0
+               card_vendor: 0, card_device: 0
 #define ISAPNP_DEVICE_ID(_va, _vb, _vc, _function) \
                { vendor: ISAPNP_VENDOR(_va, _vb, _vc), function: ISAPNP_FUNCTION(_function) }
 
+/* export used IDs outside module */
+#define ISAPNP_CARD_TABLE(name) \
+               MODULE_GENERIC_TABLE(isapnp_card, name)
+
 struct isapnp_card_id {
-       unsigned short vendor, device;
+       unsigned long driver_data;      /* data private to the driver */
+       unsigned short card_vendor, card_device;
        struct {
                unsigned short vendor, function;
        } devs[ISAPNP_CARD_DEVS];       /* logical devices */
+};
+
+#define ISAPNP_DEVICE_SINGLE(_cva, _cvb, _cvc, _cdevice, _dva, _dvb, _dvc, _dfunction) \
+               card_vendor: ISAPNP_VENDOR(_cva, _cvb, _cvc), card_device: ISAPNP_DEVICE(_cdevice), \
+               vendor: ISAPNP_VENDOR(_dva, _dvb, _dvc), function: ISAPNP_FUNCTION(_dfunction)
+#define ISAPNP_DEVICE_SINGLE_END \
+               card_vendor: 0, card_device: 0
+
+struct isapnp_device_id {
+       unsigned short card_vendor, card_device;
+       unsigned short vendor, function;
        unsigned long driver_data;      /* data private to the driver */
 };
 
@@ -179,10+195,14 @@ struct pci_dev *isapnp_find_dev(struct pci_bus *card,
 int isapnp_probe_cards(const struct isapnp_card_id *ids,
                       int (*probe)(struct pci_bus *card,
                                    const struct isapnp_card_id *id));
+int isapnp_probe_devs(const struct isapnp_device_id *ids,
+                       int (*probe)(struct pci_dev *dev,
+                                    const struct isapnp_device_id *id));
 /* misc */
 void isapnp_resource_change(struct resource *resource,
                            unsigned long start,
                            unsigned long size);
+int isapnp_activate_dev(struct pci_dev *dev, const char *name);
 /* init/main.c */
 int isapnp_init(void);
 
@@ -221,9+241,13 @@ extern inline struct pci_dev *isapnp_find_dev(struct pci_bus *card,
 extern inline int isapnp_probe_cards(const struct isapnp_card_id *ids,
                                     int (*probe)(struct pci_bus *card,
                                                  const struct isapnp_card_id *id)) { return -ENODEV; }
+extern inline int isapnp_probe_devs(const struct isapnp_device_id *ids,
+                                   int (*probe)(struct pci_dev *dev,
+                                                const struct isapnp_device_id *id)) { return -ENODEV; }
 extern inline void isapnp_resource_change(struct resource *resource,
                                          unsigned long start,
                                          unsigned long size) { ; }
+extern inline int isapnp_activate_dev(struct pci_dev *dev, const char *name) { return -ENODEV; }
 
 #endif /* CONFIG_ISAPNP */
 
index 5a52811..2c5fcb5 100644 (file)
@@ -206,9+206,15 @@ __attribute__((section(".modinfo"))) =             \
  * The following is a list of known device types (arg 1),
  * and the C types which are to be passed as arg 2.
  * pci - struct pci_device_id - List of PCI ids supported by this module
+ * isapnp - struct isapnp_device_id - List of ISA PnP ids supported by this module
  */
-#define MODULE_DEVICE_TABLE(type,name) \
-const struct type##_device_id * __module_##type##_device_table = name
+#define MODULE_GENERIC_TABLE(gtype,name)       \
+static const unsigned long __module_##gtype##_size \
+  __attribute__ ((unused)) = sizeof(struct gtype##_id); \
+static const struct gtype##_id * __module_##gtype##_table \
+  __attribute__ ((unused)) = name
+#define MODULE_DEVICE_TABLE(type,name)         \
+  MODULE_GENERIC_TABLE(type##_device,name)
 /* not put to .modinfo section to avoid section type conflicts */
 
 /* The attributes of a section are set the first time the section is
@@ -239,6+245,7 @@ static const char __module_using_checksums[] __attribute__((section(".modinfo"))
 #define MODULE_SUPPORTED_DEVICE(name)
 #define MODULE_PARM(var,type)
 #define MODULE_PARM_DESC(var,desc)
+#define MODULE_GENERIC_TABLE(gtype,name)
 #define MODULE_DEVICE_TABLE(type,name)
 
 #ifndef __GENKSYMS__
index 6b7811a..cbb804b 100644 (file)
@@ -254,7+254,7 @@ struct user_struct {
 
        /* Hash table maintenance information */
        struct user_struct *next, **pprev;
-       unsigned int uid;
+       uid_t uid;
 };
 
 #define get_current_user() ({                          \
index 05317e7..87364f2 100644 (file)
@@ -126,6+126,10 @@ extern struct page * lookup_swap_cache(swp_entry_t);
 extern struct page * read_swap_cache_async(swp_entry_t, int);
 #define read_swap_cache(entry) read_swap_cache_async(entry, 1);
 
+/* linux/mm/oom_kill.c */
+extern int out_of_memory(void);
+extern void oom_kill(void);
+
 /*
  * Make these inline later once they are working properly.
  */
index daae4df..8674082 100644 (file)
  * UID task count cache, to get fast user lookup in "alloc_uid"
  * when changing user ID's (ie setuid() and friends).
  */
-#define UIDHASH_SZ     (256)
+#define UIDHASH_BITS           8
+#define UIDHASH_SZ             (1 << UIDHASH_BITS)
+#define UIDHASH_MASK           (UIDHASH_SZ - 1)
+#define __uidhashfn(uid)       (((uid >> UIDHASH_BITS) ^ uid) & UIDHASH_MASK)
+#define uidhashentry(uid)      (uidhash_table + __uidhashfn(uid))
 
-static struct user_struct *uidhash[UIDHASH_SZ];
-
-spinlock_t uidhash_lock = SPIN_LOCK_UNLOCKED;
+static kmem_cache_t *uid_cachep;
+static struct user_struct *uidhash_table[UIDHASH_SZ];
+static spinlock_t uidhash_lock = SPIN_LOCK_UNLOCKED;
 
 struct user_struct root_user = {
        __count:        ATOMIC_INIT(1),
@@ -29,44+33,45 @@ struct user_struct root_user = {
        files:          ATOMIC_INIT(0)
 };
 
-static kmem_cache_t *uid_cachep;
-
-#define uidhashfn(uid) (((uid >> 8) ^ uid) & (UIDHASH_SZ - 1))
-
 /*
  * These routines must be called with the uidhash spinlock held!
  */
-static inline void uid_hash_insert(struct user_struct *up, unsigned int hashent)
+static inline void uid_hash_insert(struct user_struct *up, struct user_struct **hashent)
 {
-       if((up->next = uidhash[hashent]) != NULL)
-               uidhash[hashent]->pprev = &up->next;
-       up->pprev = &uidhash[hashent];
-       uidhash[hashent] = up;
+       struct user_struct *next = *hashent;
+
+       up->next = next;
+       if (next)
+               next->pprev = &up->next;
+       up->pprev = hashent;
+       *hashent = up;
 }
 
 static inline void uid_hash_remove(struct user_struct *up)
 {
-       if(up->next)
-               up->next->pprev = up->pprev;
-       *up->pprev = up->next;
+       struct user_struct *next = up->next;
+       struct user_struct **pprev = up->pprev;
+
+       if (next)
+               next->pprev = pprev;
+       *pprev = next;
 }
 
-static inline struct user_struct *uid_hash_find(unsigned short uid, unsigned int hashent)
+static inline struct user_struct *uid_hash_find(uid_t uid, struct user_struct **hashent)
 {
-       struct user_struct *up, *next;
+       struct user_struct *next;
 
-       next = uidhash[hashent];
+       next = *hashent;
        for (;;) {
-               up = next;
+               struct user_struct *up = next;
                if (next) {
                        next = up->next;
                        if (up->uid != uid)
                                continue;
                        atomic_inc(&up->__count);
                }
-               break;
+               return up;
        }
-       return up;
 }
 
 /*
@@ -97,7+102,7 @@ void free_uid(struct user_struct *up)
 
 struct user_struct * alloc_uid(uid_t uid)
 {
-       unsigned int hashent = uidhashfn(uid);
+       struct user_struct **hashent = uidhashentry(uid);
        struct user_struct *up;
 
        spin_lock(&uidhash_lock);
@@ -136,19+141,14 @@ struct user_struct * alloc_uid(uid_t uid)
 
 static int __init uid_cache_init(void)
 {
-       int i;
-
        uid_cachep = kmem_cache_create("uid_cache", sizeof(struct user_struct),
                                       0,
                                       SLAB_HWCACHE_ALIGN, NULL, NULL);
        if(!uid_cachep)
                panic("Cannot create uid taskcount SLAB cache\n");
 
-       for(i = 0; i < UIDHASH_SZ; i++)
-               uidhash[i] = 0;
-
        /* Insert the root user immediately - init already runs with this */
-       uid_hash_insert(&root_user, uidhashfn(0));
+       uid_hash_insert(&root_user, uidhashentry(0));
        return 0;
 }
 
index 56e9369..d74cdec 100644 (file)
 O_TARGET := mm.o
 O_OBJS  := memory.o mmap.o filemap.o mprotect.o mlock.o mremap.o \
            vmalloc.o slab.o bootmem.o swap.o vmscan.o page_io.o \
-           page_alloc.o swap_state.o swapfile.o numa.o
+           page_alloc.o swap_state.o swapfile.o numa.o oom_kill.o
 
 ifeq ($(CONFIG_HIGHMEM),y)
 O_OBJS += highmem.o
index 3be601c..2b7d17f 100644 (file)
@@ -310,7+310,7 @@ struct buffer_head * create_bounce(int rw, struct buffer_head * bh_orig)
 repeat_bh:
        bh = kmem_cache_alloc(bh_cachep, SLAB_BUFFER);
        if (!bh) {
-               wakeup_bdflush(1);
+               wakeup_bdflush(1);  /* Sets task->state to TASK_RUNNING */
                current->policy |= SCHED_YIELD;
                schedule();
                goto repeat_bh;
@@ -324,7+324,7 @@ repeat_bh:
 repeat_page:
        page = alloc_page(GFP_BUFFER);
        if (!page) {
-               wakeup_bdflush(1);
+               wakeup_bdflush(1);  /* Sets task->state to TASK_RUNNING */
                current->policy |= SCHED_YIELD;
                schedule();
                goto repeat_page;
diff --git a/mm/oom_kill.c b/mm/oom_kill.c
new file mode 100644 (file)
index 0000000..9882fe7
--- /dev/null
@@ -0,0 +1,210 @@
+/*
+ *  linux/mm/oom_kill.c
+ * 
+ *  Copyright (C)  1998,2000  Rik van Riel
+ *     Thanks go out to Claus Fischer for some serious inspiration and
+ *     for goading me into coding this file...
+ *
+ *  The routines in this file are used to kill a process when
+ *  we're seriously out of memory. This gets called from kswapd()
+ *  in linux/mm/vmscan.c when we really run out of memory.
+ *
+ *  Since we won't call these routines often (on a well-configured
+ *  machine) this file will double as a 'coding guide' and a signpost
+ *  for newbie kernel hackers. It features several pointers to major
+ *  kernel subsystems and hints as to where to find out what things do.
+ */
+
+#include <linux/mm.h>
+#include <linux/sched.h>
+#include <linux/swap.h>
+#include <linux/swapctl.h>
+#include <linux/timex.h>
+
+/* #define DEBUG */
+
+/**
+ * int_sqrt - oom_kill.c internal function, rough approximation to sqrt
+ * @x: integer of which to calculate the sqrt
+ * 
+ * A very rough approximation to the sqrt() function.
+ */
+static unsigned int int_sqrt(unsigned int x)
+{
+       unsigned int out = x;
+       while (x & ~(unsigned int)1) x >>=2, out >>=1;
+       if (x) out -= out >> 2;
+       return (out ? out : 1);
+}      
+
+/**
+ * oom_badness - calculate a numeric value for how bad this task has been
+ * @p: task struct of which task we should calculate
+ *
+ * The formula used is relatively simple and documented inline in the
+ * function. The main rationale is that we want to select a good task
+ * to kill when we run out of memory.
+ *
+ * Good in this context means that:
+ * 1) we lose the minimum amount of work done
+ * 2) we recover a large amount of memory
+ * 3) we don't kill anything innocent of eating tons of memory
+ * 4) we want to kill the minimum amount of processes (one)
+ * 5) we try to kill the process the user expects us to kill, this
+ *    algorithm has been meticulously tuned to meet the priniciple
+ *    of least surprise ... (be careful when you change it)
+ */
+
+static int badness(struct task_struct *p)
+{
+       int points, cpu_time, run_time;
+
+       if (!p->mm)
+               return 0;
+       /*
+        * The memory size of the process is the basis for the badness.
+        */
+       points = p->mm->total_vm;
+
+       /*
+        * CPU time is in seconds and run time is in minutes. There is no
+        * particular reason for this other than that it turned out to work
+        * very well in practice. This is not safe against jiffie wraps
+        * but we don't care _that_ much...
+        */
+       cpu_time = (p->times.tms_utime + p->times.tms_stime) >> (SHIFT_HZ + 3);
+       run_time = (jiffies - p->start_time) >> (SHIFT_HZ + 10);
+
+       points /= int_sqrt(cpu_time);
+       points /= int_sqrt(int_sqrt(run_time));
+
+       /*
+        * Niced processes are most likely less important, so double
+        * their badness points.
+        */
+       if (p->nice > 0)
+               points *= 2;
+
+       /*
+        * Superuser processes are usually more important, so we make it
+        * less likely that we kill those.
+        */
+       if (cap_t(p->cap_effective) & CAP_TO_MASK(CAP_SYS_ADMIN) ||
+                               p->uid == 0 || p->euid == 0)
+               points /= 4;
+
+       /*
+        * We don't want to kill a process with direct hardware access.
+        * Not only could that mess up the hardware, but usually users
+        * tend to only have this flag set on applications they think
+        * of as important.
+        */
+       if (cap_t(p->cap_effective) & CAP_TO_MASK(CAP_SYS_RAWIO))
+               points /= 4;
+#ifdef DEBUG
+       printk(KERN_DEBUG "OOMkill: task %d (%s) got %d points\n",
+       p->pid, p->comm, points);
+#endif
+       return points;
+}
+
+/*
+ * Simple selection loop. We chose the process with the highest
+ * number of 'points'. We need the locks to make sure that the
+ * list of task structs doesn't change while we look the other way.
+ *
+ * (not docbooked, we don't want this one cluttering up the manual)
+ */
+static struct task_struct * select_bad_process(void)
+{
+       int points = 0, maxpoints = 0;
+       struct task_struct *p = NULL;
+       struct task_struct *chosen = NULL;
+
+       read_lock(&tasklist_lock);
+       for_each_task(p)
+       {
+               if (p->pid)
+                       points = badness(p);
+               if (points > maxpoints) {
+                       chosen = p;
+                       maxpoints = points;
+               }
+       }
+       read_unlock(&tasklist_lock);
+       return chosen;
+}
+
+/**
+ * oom_kill - kill the "best" process when we run out of memory
+ *
+ * If we run out of memory, we have the choice between either
+ * killing a random task (bad), letting the system crash (worse)
+ * OR try to be smart about which process to kill. Note that we
+ * don't have to be perfect here, we just have to be good.
+ *
+ * We must be careful though to never send SIGKILL a process with
+ * CAP_SYS_RAW_IO set, send SIGTERM instead (but it's unlikely that
+ * we select a process with CAP_SYS_RAW_IO set).
+ */
+void oom_kill(void)
+{
+
+       struct task_struct *p = select_bad_process();
+
+       /* Found nothing?!?! Either we hang forever, or we panic. */
+       if (p == NULL)
+               panic("Out of memory and no killable processes...\n");
+
+       printk(KERN_ERR "Out of Memory: Killed process %d (%s).", p->pid, p->comm);
+
+       /*
+        * We give our sacrificial lamb high priority and access to
+        * all the memory it needs. That way it should be able to
+        * exit() and clear out its resources quickly...
+        */
+       p->counter = 5 * HZ;
+       p->flags |= PF_MEMALLOC;
+
+       /* This process has hardware access, be more careful. */
+       if (cap_t(p->cap_effective) & CAP_TO_MASK(CAP_SYS_RAWIO)) {
+               force_sig(SIGTERM, p);
+       } else {
+               force_sig(SIGKILL, p);
+       }
+
+       /*
+        * Make kswapd go out of the way, so "p" has a good chance of
+        * killing itself before someone else gets the chance to ask
+        * for more memory.
+        */
+       current->policy |= SCHED_YIELD;
+       schedule();
+       return;
+}
+
+/**
+ * out_of_memory - is the system out of memory?
+ *
+ * Returns 0 if there is still enough memory left,
+ * 1 when we are out of memory (otherwise).
+ */
+int out_of_memory(void)
+{
+       struct sysinfo swp_info;
+
+       /* Enough free memory?  Not OOM. */
+       if (nr_free_pages() > freepages.min)
+               return 0;
+
+       if (nr_free_pages() + nr_inactive_clean_pages() > freepages.low)
+               return 0;
+
+       /* Enough swap space left?  Not OOM. */
+       si_swapinfo(&swp_info);
+       if (swp_info.freeswap > 0)
+               return 0;
+
+       /* Else... */
+       return 1;
+}
index 0b5990a..3846af8 100644 (file)
@@ -268,7+268,7 @@ static struct page * __alloc_pages_limit(zonelist_t *zonelist,
                                water_mark = z->pages_high;
                }
 
-               if (z->free_pages + z->inactive_clean_pages > water_mark) {
+               if (z->free_pages + z->inactive_clean_pages >= water_mark) {
                        struct page *page = NULL;
                        /* If possible, reclaim a page directly. */
                        if (direct_reclaim && z->free_pages < z->pages_min + 8)
@@ -329,7+329,7 @@ struct page * __alloc_pages(zonelist_t *zonelist, unsigned long order)
         * wake up bdflush.
         */
        else if (free_shortage() && nr_inactive_dirty_pages > free_shortage()
-                       && nr_inactive_dirty_pages > freepages.high)
+                       && nr_inactive_dirty_pages >= freepages.high)
                wakeup_bdflush(0);
 
 try_again:
@@ -347,7+347,7 @@ try_again:
                if (!z->size)
                        BUG();
 
-               if (z->free_pages > z->pages_low) {
+               if (z->free_pages >= z->pages_low) {
                        page = rmqueue(z, order);
                        if (page)
                                return page;
@@ -795,21+795,6 @@ void __init free_area_init_core(int nid, pg_data_t *pgdat, struct page **gmap,
                        
        printk("On node %d totalpages: %lu\n", nid, realtotalpages);
 
-       /*
-        * Select nr of pages we try to keep free for important stuff
-        * with a minimum of 10 pages and a maximum of 256 pages, so
-        * that we don't waste too much memory on large systems.
-        * This is fairly arbitrary, but based on some behaviour
-        * analysis.
-        */
-       i = realtotalpages >> 7;
-       if (i < 10)
-               i = 10;
-       if (i > 256)
-               i = 256;
-       freepages.min += i;
-       freepages.low += i * 2;
-       freepages.high += i * 3;
        memlist_init(&active_list);
        memlist_init(&inactive_dirty_list);
 
@@ -875,6+860,20 @@ void __init free_area_init_core(int nid, pg_data_t *pgdat, struct page **gmap,
                zone->pages_min = mask;
                zone->pages_low = mask*2;
                zone->pages_high = mask*3;
+               /*
+                * Add these free targets to the global free target;
+                * we have to be SURE that freepages.high is higher
+                * than SUM [zone->pages_min] for all zones, otherwise
+                * we may have bad bad problems.
+                *
+                * This means we cannot make the freepages array writable
+                * in /proc, but have to add a separate extra_free_target
+                * for people who require it to catch load spikes in eg.
+                * gigabit ethernet routing...
+                */
+               freepages.min += mask;
+               freepages.low += mask*2;
+               freepages.high += mask*3;
                zone->zone_mem_map = mem_map + offset;
                zone->zone_start_mapnr = offset;
                zone->zone_start_paddr = zone_start_paddr;
index aacd9a5..ba745d8 100644 (file)
@@ -837,8+837,9 @@ int free_shortage(void)
                for(i = 0; i < MAX_NR_ZONES; i++) {
                        zone_t *zone = pgdat->node_zones+ i;
                        if (zone->size && (zone->inactive_clean_pages +
-                                       zone->free_pages < zone->pages_min)) {
-                               sum += zone->pages_min;
+                                       zone->free_pages < zone->pages_min+1)) {
+                               /* + 1 to have overlap with alloc_pages() !! */
+                               sum += zone->pages_min + 1;
                                sum -= zone->free_pages;
                                sum -= zone->inactive_clean_pages;
                        }
@@ -1095,12+1096,20 @@ int kswapd(void *unused)
                 * We go to sleep for one second, but if it's needed
                 * we'll be woken up earlier...
                 */
-               if (!free_shortage() || !inactive_shortage())
+               if (!free_shortage() || !inactive_shortage()) {
                        interruptible_sleep_on_timeout(&kswapd_wait, HZ);
                /*
-                * TODO: insert out of memory check & oom killer
-                * invocation in an else branch here.
+                * If we couldn't free enough memory, we see if it was
+                * due to the system just not having enough memory.
+                * If that is the case, the only solution is to kill
+                * a process (the alternative is enternal deadlock).
+                *
+                * If there still is enough memory around, we just loop
+                * and try free some more memory...
                 */
+               } else if (out_of_memory()) {
+                       oom_kill();
+               }
        }
 }
 
index 5cfcab4..5a76152 100644 (file)
@@ -634,6+634,7 @@ function l_choice () {
        title="$1"
        choices="$2"
        current="$3"
+        chosen=
 
        #
        # Scan current value of choices and set radiolist switches.
@@ -644,7+645,12 @@ function l_choice () {
        while [ -n "$2" ]
        do
                case "$1" in
-               "$current")     list="$list $2 $1 ON "  ;;
+               "$current"*)    if [ -z "$chosen" ]; then
+                                       list="$list $2 $1 ON "
+                                       chosen=1
+                               else
+                                       list="$list $2 $1 OFF "
+                               fi  ;;
                *)              list="$list $2 $1 OFF " ;;
                esac
                        
@@ -722,13+728,13 @@ function parser(ifile,menu) {
 
                        parser(ifile, newmenu)
                }
+               else if ($0 ~ /^#|\$MAKE|mainmenu_name/) {
+                       printf("") >>menu
+               }
                else if ($1 ~ "endmenu") {
                        printf("}\n") >>menu
                        return
                } 
-               else if ($0 ~ /^#|\$MAKE|mainmenu_name/) {
-                       printf("") >>menu
-               }
                else if ($1 == "source") {
                        parser($2,menu)
                }
@@ -751,12+757,12 @@ BEGIN {
 function parser(ifile,menu) {
 
        while (getline <ifile) {
-               if ($1 ~ /mainmenu_option|endmenu/) {
-                       printf("") >>menu
-               } 
-               else if ($0 ~ /^#|$MAKE|mainmenu_name/) {
+               if ($0 ~ /^#|$MAKE|mainmenu_name/) {
                        printf("") >>menu
                }
+               else if ($1 ~ /mainmenu_option|endmenu/) {
+                       printf("") >>menu
+               } 
                else if ($1 == "source") {
                        parser($2,menu)
                }
@@ -1192,6+1198,7 @@ save_configuration () {
                choices="$2"
                default="$3"
                current=
+               chosen=
 
                set -- $choices
                while [ -n "$2" ]
@@ -1215,12+1222,15 @@ save_configuration () {
                set -- $choices
                while [ -n "$2" ]
                do
-                       if eval [ "$1" = "$current" ]
-                       then
-                           define_bool "$2" "y"
-                       else
-                           define_bool "$2" "n"
-                       fi
+                       case "$1" in
+                       "$current"*)    if [ -z "$chosen" ]; then
+                                               define_bool "$2" "y"
+                                               chosen=1
+                                       else
+                                               define_bool "$2" "n"
+                                       fi ;;
+                       *)              define_bool "$2" "n" ;;
+                       esac
                        shift ; shift
                done
        }
index abf5ad8..241640f 100644 (file)
@@ -326,6+326,7 @@ static struct condition * tokenize_if( const char * pnt )
 static const char * tokenize_choices( struct kconfig * cfg_choose,
     const char * pnt )
 {
+    int default_checked = 0;
     for ( ; ; )
     {
        struct kconfig * cfg;
@@ -349,12+350,20 @@ static const char * tokenize_choices( struct kconfig * cfg_choose,
        cfg->token      = token_choice_item;
        cfg->cfg_parent = cfg_choose;
        pnt = get_string( pnt, &cfg->label );
+       if ( ! default_checked &&
+            ! strncmp( cfg->label, cfg_choose->value, strlen( cfg_choose->value ) ) )
+       {
+           default_checked = 1;
+           free( cfg_choose->value );
+           cfg_choose->value = cfg->label;
+       }
        while ( *pnt == ' ' || *pnt == '\t' )
            pnt++;
        pnt = get_string( pnt, &buffer );
        cfg->nameindex = get_varnum( buffer );
     }
-
+    if ( ! default_checked )
+       syntax_error( "bad 'choice' default value" );
     return pnt;
 }
 
@@ -515,7+524,6 @@ static void tokenize_line( const char * pnt )
            pnt = get_qstring ( pnt, &cfg->label  );
            pnt = get_qstring ( pnt, &choice_list );
            pnt = get_string  ( pnt, &cfg->value  );
-
            cfg->nameindex = -(choose_number++);
            tokenize_choices( cfg, choice_list );
            free( choice_list );
close